diff --git a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm
new file mode 100644
index 0000000000..75c0434771
--- /dev/null
+++ b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm
@@ -0,0 +1,7550 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"al" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"ap" = (
+/obj/structure/ore_box,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"at" = (
+/obj/structure/gulag_beacon,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"au" = (
+/obj/machinery/door/airlock/mining/glass{
+ name = "Mining Station EVA";
+ req_access_txt = "54"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"av" = (
+/obj/machinery/door/airlock{
+ name = "Closet"
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"aG" = (
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"aJ" = (
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"aK" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"aN" = (
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
+"aW" = (
+/obj/effect/turf_decal/tile/purple,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"aX" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock{
+ name = "Labor Camp External Access"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"bg" = (
+/turf/closed/wall,
+/area/mine/eva)
+"bH" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
+ dir = 4;
+ piping_layer = 3
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/mine/living_quarters)
+"bI" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"bX" = (
+/obj/machinery/door/window/southleft,
+/obj/machinery/shower{
+ pixel_y = 22
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"cd" = (
+/turf/closed/wall,
+/area/mine/laborcamp)
+"cf" = (
+/obj/machinery/mineral/equipment_vendor,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"ci" = (
+/obj/machinery/door/airlock{
+ name = "Vending"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"cn" = (
+/obj/machinery/door/airlock{
+ id_tag = "miningdorm3";
+ name = "Room 3"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"cr" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"cz" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "labor";
+ name = "labor camp blast door"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"cA" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/mine/eva)
+"cD" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"cX" = (
+/obj/structure/statue{
+ desc = "A lifelike statue of a horrifying monster.";
+ dir = 8;
+ icon = 'icons/mob/lavaland/lavaland_monsters.dmi';
+ icon_state = "goliath";
+ name = "goliath"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"di" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"dk" = (
+/obj/structure/table,
+/obj/item/stack/packageWrap,
+/obj/item/stack/packageWrap,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"dC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"dL" = (
+/obj/machinery/atmospherics/components/binary/pump/on,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"dP" = (
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/obj/machinery/computer/shuttle/mining{
+ req_access = null
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"dZ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/machinery/door/airlock/glass{
+ name = "Mining Station Bridge"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"eh" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular,
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
+"es" = (
+/turf/open/floor/plasteel,
+/area/mine/production)
+"ez" = (
+/obj/effect/turf_decal/loading_area{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"eE" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/button/door{
+ id = "labor";
+ name = "Labor Camp Lockdown";
+ pixel_y = 28;
+ req_access_txt = "2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"eL" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/tile/purple,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"eP" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/machinery/door/airlock/glass{
+ name = "Mining Station Bridge"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"eS" = (
+/obj/structure/table,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"fm" = (
+/obj/structure/sign/warning/docking,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/mine/production)
+"fs" = (
+/obj/item/radio/intercom{
+ desc = "Talk through this. It looks like it has been modified to not broadcast.";
+ name = "Prison Intercom (General)";
+ pixel_y = 24;
+ prison_radio = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"fN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"fO" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Shuttle Docking Foyer";
+ dir = 8;
+ network = list("mine")
+ },
+/obj/machinery/newscaster{
+ pixel_x = 30;
+ pixel_y = 1
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"fU" = (
+/obj/item/radio/intercom{
+ dir = 8;
+ name = "Station Intercom (General)";
+ pixel_x = -28
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"gk" = (
+/obj/structure/closet/crate{
+ icon_state = "crateopen"
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"gs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"gP" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Mining Station Communications";
+ req_access_txt = "48"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/maintenance)
+"gT" = (
+/obj/structure/bed,
+/obj/item/bedsheet/medical,
+/obj/machinery/camera{
+ c_tag = "Labor Camp Medical";
+ dir = 8;
+ network = list("labor")
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
+"hf" = (
+/obj/item/twohanded/required/kirbyplants/random,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"hm" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"hv" = (
+/obj/machinery/camera{
+ c_tag = "Crew Area Hallway West";
+ dir = 1;
+ network = list("mine")
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"hy" = (
+/obj/machinery/camera{
+ c_tag = "Labor Camp External";
+ dir = 4;
+ network = list("labor")
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"hH" = (
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/structure/displaycase,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"hP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"hQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"ia" = (
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"ig" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/red,
+/obj/item/paper_bin,
+/obj/item/pen,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"ik" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"iv" = (
+/obj/machinery/camera{
+ c_tag = "Dormitories";
+ dir = 4;
+ network = list("mine")
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"iG" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"iQ" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"jf" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/regular,
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"jn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"jD" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/item/restraints/handcuffs,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"jJ" = (
+/turf/closed/mineral/random/labormineral/volcanic,
+/area/lavaland/surface/outdoors/explored)
+"kb" = (
+/obj/machinery/mineral/processing_unit_console,
+/turf/closed/wall,
+/area/mine/laborcamp)
+"kj" = (
+/obj/machinery/conveyor{
+ id = "gulag"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
+"kz" = (
+/obj/machinery/light/small,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"kB" = (
+/obj/machinery/computer/security/labor,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"kE" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external{
+ glass = 1;
+ name = "Mining External Airlock";
+ opacity = 0;
+ req_access_txt = "54"
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"kF" = (
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"kH" = (
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"kR" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"kS" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/toxin{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"lj" = (
+/turf/open/floor/mech_bay_recharge_floor,
+/area/mine/eva)
+"lr" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"lu" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/machinery/computer/mech_bay_power_console{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"ly" = (
+/obj/machinery/camera{
+ c_tag = "Labor Camp Central";
+ network = list("labor")
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"lI" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/brown,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"lS" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"me" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"mg" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -5;
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"mi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"mp" = (
+/obj/docking_port/stationary{
+ dir = 8;
+ dwidth = 2;
+ height = 5;
+ id = "laborcamp_away";
+ name = "labor camp";
+ width = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/explored)
+"mv" = (
+/obj/machinery/door/window/southright,
+/obj/machinery/shower{
+ pixel_y = 22
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"mw" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/turf_decal/loading_area{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"my" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/explored)
+"mI" = (
+/obj/machinery/space_heater,
+/turf/open/floor/plating,
+/area/mine/production)
+"mL" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"mN" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"nm" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"nv" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"ny" = (
+/obj/machinery/computer/prisoner,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"nH" = (
+/obj/structure/displaycase,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"nI" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"nJ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"nK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"nN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"nR" = (
+/obj/structure/ore_box,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"oo" = (
+/obj/machinery/conveyor{
+ id = "mining_internal"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"ow" = (
+/obj/machinery/door/airlock/medical/glass{
+ name = "Infirmary"
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
+"oy" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"oG" = (
+/obj/machinery/mineral/equipment_vendor,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"oM" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"oY" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"pi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"pr" = (
+/obj/structure/table,
+/obj/item/pickaxe,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"pK" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"qb" = (
+/obj/structure/tank_dispenser/oxygen,
+/obj/effect/turf_decal/tile/purple,
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"qc" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 30
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"qg" = (
+/obj/structure/toilet{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"qh" = (
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = 11
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"qm" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/closet/crate/secure/loot,
+/obj/structure/sign/warning/electricshock{
+ pixel_y = 32
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"qH" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 30
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"qM" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = 7;
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -1;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -8
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"qR" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"qS" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"qZ" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"re" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/structure/closet/secure_closet/labor_camp_security,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"rf" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"rB" = (
+/obj/machinery/mineral/unloading_machine{
+ dir = 1;
+ icon_state = "unloader-corner";
+ input_dir = 1;
+ output_dir = 2
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"rK" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"rU" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"sa" = (
+/obj/machinery/mineral/processing_unit{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
+"se" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"si" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"sj" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"sm" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"sx" = (
+/obj/item/radio/intercom{
+ dir = 8;
+ name = "Station Intercom (General)";
+ pixel_x = 28
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"sz" = (
+/obj/effect/turf_decal/loading_area,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"sE" = (
+/obj/structure/closet/crate,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"sP" = (
+/obj/structure/table,
+/obj/machinery/microwave{
+ pixel_y = 6
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"sR" = (
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"sU" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"sW" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"tk" = (
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3,
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"tr" = (
+/obj/structure/chair,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"tJ" = (
+/obj/item/beacon,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"tK" = (
+/obj/structure/closet/crate,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/explored)
+"tY" = (
+/obj/structure/closet/emcloset,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"uh" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"uG" = (
+/obj/structure/table,
+/obj/item/clothing/glasses/meson,
+/obj/item/storage/bag/ore,
+/obj/item/pickaxe,
+/obj/item/mining_scanner,
+/obj/item/flashlight,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"uI" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Mining Station Maintenance";
+ req_access_txt = "48"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"uJ" = (
+/obj/item/bikehorn{
+ color = "#000";
+ desc = "A horn off of a bicycle. This one has been charred to hell and back, yet somehow it still honks.";
+ name = "charred bike horn"
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/explored)
+"uR" = (
+/obj/effect/turf_decal/loading_area{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"va" = (
+/obj/machinery/button/door{
+ id = "miningbathroom";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"vo" = (
+/obj/machinery/flasher{
+ id = "labor"
+ },
+/turf/closed/wall,
+/area/mine/laborcamp)
+"vy" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock{
+ name = "Labor Camp External Access"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"vE" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"vJ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"wd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"wg" = (
+/obj/structure/closet/crate,
+/obj/item/dice/d4,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"wj" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"wt" = (
+/obj/structure/toilet{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
+"wz" = (
+/turf/closed/mineral/random/volcanic,
+/area/lavaland/surface/outdoors)
+"wB" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
+"wC" = (
+/turf/open/floor/circuit,
+/area/mine/maintenance)
+"wE" = (
+/obj/machinery/vending/cigarette,
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"wV" = (
+/turf/closed/mineral/random/volcanic,
+/area/lavaland/surface/outdoors/explored)
+"wX" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"xd" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"xh" = (
+/obj/machinery/vending/sustenance,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"xv" = (
+/obj/machinery/mech_bay_recharge_port,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/mine/eva)
+"xA" = (
+/obj/machinery/camera{
+ c_tag = "Communications Relay";
+ dir = 8;
+ network = list("mine")
+ },
+/turf/open/floor/circuit,
+/area/mine/maintenance)
+"xH" = (
+/obj/structure/table,
+/obj/item/cigbutt,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"xP" = (
+/obj/machinery/suit_storage_unit/mining,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"xS" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"yt" = (
+/obj/structure/closet/crate{
+ icon_state = "crateopen"
+ },
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"yF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"yR" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"yT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"zh" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"zo" = (
+/obj/structure/table,
+/turf/open/floor/carpet,
+/area/mine/living_quarters)
+"zx" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/mine/laborcamp)
+"zy" = (
+/obj/item/twohanded/required/kirbyplants/random,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"zI" = (
+/turf/open/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors/explored)
+"zN" = (
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"zY" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"zZ" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ab" = (
+/obj/structure/ore_box,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/explored)
+"Ad" = (
+/obj/machinery/light_switch{
+ pixel_y = -25
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/circuit,
+/area/mine/maintenance)
+"Ag" = (
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ah" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"Aj" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Al" = (
+/turf/closed/wall/r_wall,
+/area/mine/maintenance)
+"At" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/mine/production)
+"AH" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"AJ" = (
+/obj/machinery/door/airlock/glass{
+ name = "Break Room"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"AQ" = (
+/obj/machinery/door/airlock{
+ id_tag = "miningdorm2";
+ name = "Room 2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"AS" = (
+/obj/machinery/door/airlock/external{
+ glass = 1;
+ name = "Mining External Airlock";
+ opacity = 0
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"AZ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Bc" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"Be" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/mine/eva)
+"Bh" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Bo" = (
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"BO" = (
+/obj/machinery/door/airlock{
+ name = "Labor Camp Storage"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Ca" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "Mining Station Port Wing APC";
+ pixel_x = 1;
+ pixel_y = 23
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Cd" = (
+/turf/closed/wall,
+/area/mine/production)
+"Cg" = (
+/obj/structure/table,
+/obj/item/tank/internals/emergency_oxygen{
+ pixel_x = 5;
+ pixel_y = 3
+ },
+/obj/item/tank/internals/emergency_oxygen,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Cj" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Cm" = (
+/obj/machinery/vending/snack,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Cy" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Shuttle Security Airlock";
+ req_access_txt = "2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"CA" = (
+/obj/machinery/atmospherics/pipe/manifold4w/supply,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"CH" = (
+/obj/structure/rack,
+/obj/item/storage/bag/ore,
+/obj/item/pickaxe,
+/obj/item/flashlight,
+/obj/item/clothing/glasses/meson,
+/obj/item/mining_scanner,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"CJ" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"CR" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"CV" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"Dd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Dr" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -5;
+ pixel_y = 30
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/chair,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Dv" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
+"DN" = (
+/obj/machinery/computer/shuttle/mining/common{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ed" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/mine/production)
+"Eg" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Em" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ev" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/button/door{
+ id = "miningdorm2";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 25;
+ specialfunctions = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/mine/living_quarters)
+"Ex" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"EB" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/vending/security,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"EH" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Fx" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"FC" = (
+/obj/machinery/airalarm{
+ pixel_y = 24
+ },
+/turf/open/floor/circuit,
+/area/mine/maintenance)
+"FE" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ga" = (
+/obj/machinery/status_display/evac{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Ge" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"Gt" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"GM" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"GN" = (
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "Mining Station Starboard Wing APC";
+ pixel_x = -25;
+ pixel_y = 2
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Hd" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/mine/eva)
+"Hg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Hh" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id = "gulag"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
+"Hk" = (
+/obj/docking_port/stationary{
+ dir = 8;
+ dwidth = 3;
+ height = 7;
+ id = "lavaland_common_away";
+ name = "Mining base public dock";
+ width = 7
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"Hm" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ name = "Lavaland Shuttle Airlock"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ho" = (
+/obj/machinery/door/airlock{
+ name = "Restroom"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"Hq" = (
+/obj/structure/rack,
+/obj/item/storage/bag/ore,
+/obj/item/flashlight,
+/obj/item/pickaxe,
+/obj/item/clothing/glasses/meson,
+/obj/item/mining_scanner,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Hx" = (
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"HE" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
+ },
+/obj/machinery/bluespace_beacon,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/mine/maintenance)
+"HO" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Shuttle Prisoner Airlock"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"HR" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"HS" = (
+/obj/machinery/conveyor{
+ dir = 10;
+ id = "gulag"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
+"HU" = (
+/obj/machinery/computer/shuttle/labor/one_way{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"HY" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/obj/machinery/iv_drip,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"If" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ii" = (
+/obj/structure/table,
+/obj/item/storage/box/donkpockets,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ik" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -5;
+ pixel_y = 30
+ },
+/obj/machinery/shower{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple,
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"ID" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/machinery/meter,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"IG" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"II" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"IK" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/red,
+/obj/machinery/recharger,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"IS" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"IY" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
+ },
+/turf/open/floor/carpet,
+/area/mine/living_quarters)
+"Jc" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"Jl" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Jo" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Jr" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"JH" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"JJ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"JP" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"JV" = (
+/obj/machinery/mineral/processing_unit{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"JW" = (
+/obj/machinery/power/apc{
+ name = "Mining EVA APC";
+ pixel_x = 1;
+ pixel_y = -23
+ },
+/obj/machinery/recharge_station,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"JY" = (
+/turf/closed/mineral/random/labormineral/volcanic,
+/area/lavaland/surface/outdoors)
+"Kb" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Kk" = (
+/obj/machinery/conveyor_switch/oneway{
+ id = "mining_internal";
+ name = "mining conveyor"
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Kl" = (
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"Kt" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id = "mining_internal"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"Kx" = (
+/obj/machinery/camera{
+ c_tag = "EVA";
+ dir = 4;
+ network = list("mine")
+ },
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"KG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"KO" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"KP" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ glass = 1;
+ name = "Mining External Airlock";
+ opacity = 0;
+ req_access_txt = "54"
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"KQ" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ glass = 1;
+ name = "Mining Shuttle Airlock";
+ opacity = 0
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"KR" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"KS" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"KU" = (
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"KV" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"Lb" = (
+/obj/docking_port/stationary{
+ dir = 8;
+ dwidth = 3;
+ height = 10;
+ id = "mining_away";
+ name = "lavaland mine";
+ width = 7
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"Lc" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"Le" = (
+/obj/structure/closet/crate/internals,
+/obj/item/tank/internals/emergency_oxygen,
+/obj/item/tank/internals/emergency_oxygen,
+/obj/item/tank/internals/emergency_oxygen,
+/obj/item/tank/internals/emergency_oxygen,
+/obj/item/clothing/mask/breath,
+/obj/item/clothing/mask/breath,
+/obj/item/clothing/mask/breath,
+/obj/item/clothing/mask/breath,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Lj" = (
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"Lm" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"LC" = (
+/obj/structure/table,
+/obj/item/storage/fancy/donut_box,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"LG" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"LL" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "Labor Camp Security APC";
+ pixel_y = 23
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"LZ" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Mc" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/door/airlock/mining/glass{
+ name = "Processing Area";
+ req_access_txt = "48"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Mj" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = -12
+ },
+/obj/structure/mirror{
+ pixel_x = -28
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"Mk" = (
+/obj/machinery/conveyor_switch/oneway{
+ id = "gulag"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Mn" = (
+/turf/closed/wall/r_wall,
+/area/mine/laborcamp/security)
+"Ms" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"Mw" = (
+/obj/machinery/door/airlock/external{
+ glass = 1;
+ name = "Mining External Airlock";
+ opacity = 0
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"MD" = (
+/turf/closed/mineral/random/volcanic,
+/area/lavaland/surface/outdoors/unexplored)
+"ME" = (
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"MF" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/reagent_containers/blood,
+/obj/item/reagent_containers/blood{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/obj/item/reagent_containers/blood/AMinus,
+/obj/item/reagent_containers/blood/BMinus{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/reagent_containers/blood/BPlus{
+ pixel_x = 1;
+ pixel_y = 2
+ },
+/obj/item/reagent_containers/blood/OMinus,
+/obj/item/reagent_containers/blood/OPlus{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/item/reagent_containers/blood/random,
+/obj/item/reagent_containers/blood/random,
+/obj/item/reagent_containers/blood/random,
+/obj/machinery/camera{
+ c_tag = "Sleeper Room";
+ dir = 1;
+ network = list("mine")
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"MG" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"MH" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"ML" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"MM" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/freezer/gulag_fridge,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"MV" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Nf" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Nk" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"NB" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/button/door{
+ id = "miningdorm3";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 25;
+ specialfunctions = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/mine/living_quarters)
+"NH" = (
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"NI" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/mine/production)
+"Oh" = (
+/obj/structure/chair/office{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"Oj" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id = "mining_internal"
+ },
+/obj/structure/plasticflaps,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"Op" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Shuttle Prisoner Airlock"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Os" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Ov" = (
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"OI" = (
+/obj/machinery/mineral/mint,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"ON" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Pp" = (
+/obj/machinery/camera{
+ c_tag = "Public Shuttle Lobby";
+ network = list("mine")
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Pq" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"PN" = (
+/obj/machinery/light_switch{
+ pixel_x = 27
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"PO" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"PY" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
+"Qi" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Qr" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Monitoring";
+ req_access_txt = "2"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"Qx" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Qy" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"QD" = (
+/obj/machinery/suit_storage_unit/mining,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"Rf" = (
+/obj/machinery/mineral/unloading_machine{
+ dir = 1;
+ icon_state = "unloader-corner";
+ input_dir = 1;
+ output_dir = 2
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
+"Ro" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/door/airlock/highsecurity{
+ name = "Labor Camp Monitoring";
+ req_access_txt = "2";
+ security_level = 6
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Ru" = (
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/obj/structure/chair,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Rv" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"RC" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"RF" = (
+/turf/closed/wall,
+/area/mine/laborcamp/security)
+"RH" = (
+/obj/machinery/camera{
+ c_tag = "Crew Area";
+ dir = 1;
+ network = list("mine")
+ },
+/obj/machinery/computer/security/telescreen/entertainment{
+ pixel_y = -32
+ },
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"RI" = (
+/obj/structure/closet/crate,
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"RP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Sd" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Sj" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Sp" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/mine/laborcamp/security)
+"Sq" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Ss" = (
+/obj/machinery/conveyor{
+ dir = 10;
+ id = "mining_internal"
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"SO" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"SW" = (
+/obj/effect/turf_decal/loading_area{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"SY" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"Te" = (
+/obj/structure/table,
+/obj/item/trash/plate,
+/obj/item/kitchen/fork,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Tm" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external{
+ glass = 1;
+ name = "Mining Shuttle Airlock";
+ opacity = 0
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"TC" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"TG" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/machinery/mineral/equipment_vendor,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"TI" = (
+/obj/machinery/door/airlock/medical/glass{
+ name = "Infirmary"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/turf/open/floor/plasteel/white,
+/area/mine/living_quarters)
+"TJ" = (
+/obj/structure/bed,
+/obj/item/bedsheet/brown,
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/turf/open/floor/carpet,
+/area/mine/living_quarters)
+"Ue" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/circuit,
+/area/mine/maintenance)
+"Uk" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/mob/living/simple_animal/bot/secbot/beepsky{
+ desc = "Powered by the tears and sweat of laborers.";
+ name = "Prison Ofitser"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"Un" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/button/door{
+ id = "miningdorm1";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 25;
+ specialfunctions = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/mine/living_quarters)
+"Uz" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "Mining Communications APC";
+ pixel_x = 1;
+ pixel_y = 23
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/mine/maintenance)
+"UE" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"UI" = (
+/obj/machinery/camera{
+ c_tag = "Crew Area Hallway East";
+ network = list("mine")
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"UJ" = (
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"Vj" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -5;
+ pixel_y = 30
+ },
+/obj/structure/table,
+/obj/item/paper/fluff/stations/lavaland/orm_notice,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Vo" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"Vs" = (
+/obj/effect/turf_decal/tile/purple,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"VN" = (
+/turf/closed/wall,
+/area/mine/living_quarters)
+"VP" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/mine/production)
+"VR" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/security/glass{
+ name = "Labor Camp Shuttle Security Airlock";
+ req_access_txt = "2"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"VT" = (
+/turf/open/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"VY" = (
+/obj/structure/closet/emcloset,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/eva)
+"Wf" = (
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Wt" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Ww" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"WL" = (
+/obj/machinery/computer/secure_data,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"WN" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel/dark,
+/area/mine/maintenance)
+"WX" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"WY" = (
+/obj/machinery/door/airlock{
+ id_tag = "miningdorm1";
+ name = "Room 1"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Xo" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/mine/laborcamp)
+"Xr" = (
+/obj/machinery/camera{
+ c_tag = "Processing Area Room";
+ dir = 8;
+ network = list("mine")
+ },
+/obj/item/radio/intercom{
+ dir = 8;
+ name = "Station Intercom (General)";
+ pixel_x = 28
+ },
+/obj/effect/turf_decal/tile/brown,
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"XG" = (
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/mine/production)
+"XN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"XP" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"XR" = (
+/obj/structure/sign/poster/official/random{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"XU" = (
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/mine/living_quarters)
+"XX" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/closed/wall,
+/area/mine/living_quarters)
+"Ya" = (
+/turf/closed/wall/r_wall,
+/area/mine/laborcamp)
+"Ye" = (
+/turf/closed/mineral/random/high_chance/volcanic,
+/area/lavaland/surface/outdoors)
+"Yf" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Yg" = (
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/camera{
+ c_tag = "Labor Camp Security Office";
+ dir = 1;
+ network = list("labor")
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp/security)
+"Yi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
+/obj/machinery/door/airlock/glass,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Yp" = (
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"Yr" = (
+/obj/machinery/light/small,
+/obj/effect/turf_decal/loading_area{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/mine/laborcamp)
+"Yy" = (
+/obj/machinery/door/airlock{
+ id_tag = "miningbathroom";
+ name = "Restroom"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"YH" = (
+/obj/machinery/door/airlock{
+ name = "Restroom"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/mine/living_quarters)
+"YM" = (
+/obj/item/radio/intercom{
+ dir = 8;
+ name = "Station Intercom (General)";
+ pixel_x = -28
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/mine/production)
+"YV" = (
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Zp" = (
+/obj/machinery/camera{
+ c_tag = "Crew Area Hallway";
+ network = list("mine")
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"Zu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/mine/living_quarters)
+"Zw" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external{
+ name = "Lavaland Shuttle Airlock"
+ },
+/turf/open/floor/plasteel,
+/area/mine/living_quarters)
+"ZF" = (
+/obj/machinery/telecomms/relay/preset/mining,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/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/plasteel/dark,
+/area/mine/maintenance)
+"ZK" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "Labor Camp APC";
+ pixel_y = 23
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/mine/laborcamp)
+"ZN" = (
+/obj/machinery/mineral/processing_unit_console,
+/turf/closed/wall,
+/area/mine/production)
+
+(1,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(2,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(3,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(4,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+wz
+wz
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(5,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+wz
+wz
+wz
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(6,1,1) = {"
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+wz
+my
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(7,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+zI
+zI
+Lm
+my
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+"}
+(8,1,1) = {"
+VT
+Lm
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+zI
+zI
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(9,1,1) = {"
+Lm
+Lm
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+zI
+zI
+VT
+VT
+zI
+zI
+VT
+VT
+zI
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(10,1,1) = {"
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(11,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+zI
+zI
+my
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+zI
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(12,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+zI
+zI
+zI
+my
+zI
+zI
+zI
+zI
+zI
+my
+zI
+zI
+my
+zI
+zI
+zI
+VT
+zI
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(13,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+zI
+zI
+zI
+my
+my
+my
+my
+my
+my
+my
+my
+my
+zI
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(14,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+zI
+zI
+zI
+zI
+my
+my
+my
+my
+my
+my
+my
+my
+my
+zI
+zI
+Lm
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(15,1,1) = {"
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+zI
+zI
+zI
+zI
+my
+my
+my
+my
+my
+my
+my
+my
+my
+zI
+zI
+zI
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(16,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+zI
+zI
+zI
+my
+my
+my
+my
+my
+my
+my
+my
+my
+zI
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(17,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+zI
+zI
+my
+my
+my
+my
+my
+my
+my
+mp
+my
+my
+my
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+"}
+(18,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+cd
+cd
+cd
+cd
+cd
+Cy
+cd
+cd
+cd
+HO
+cd
+zI
+zI
+VT
+VT
+VT
+VT
+VT
+Lm
+wz
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(19,1,1) = {"
+JY
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+cd
+Te
+CR
+xh
+cd
+eE
+cd
+HU
+cd
+Jr
+cd
+my
+wV
+VT
+VT
+uJ
+VT
+Lm
+Lm
+wz
+wz
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(20,1,1) = {"
+JY
+JY
+Lm
+VT
+VT
+VT
+Lm
+Lm
+cd
+Qx
+NH
+Yf
+cd
+VR
+cd
+at
+cd
+Op
+cd
+wV
+wV
+wV
+VT
+VT
+VT
+Lm
+Lm
+wz
+wz
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(21,1,1) = {"
+JY
+JY
+JY
+JY
+zx
+zx
+zx
+cd
+cd
+cd
+ci
+cd
+cd
+cz
+cd
+Ga
+NH
+NH
+Ya
+Mn
+Mn
+Mn
+Dv
+Mn
+nv
+Ge
+HR
+VN
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(22,1,1) = {"
+JY
+JY
+JY
+JY
+zx
+wB
+wB
+cd
+AH
+NH
+NH
+NH
+NH
+NH
+NH
+kR
+NH
+NH
+Ya
+jD
+EB
+MM
+LC
+Mn
+xH
+dC
+hf
+VN
+bH
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(23,1,1) = {"
+JY
+JY
+JY
+JY
+cd
+eh
+aN
+ow
+NH
+NH
+NH
+NH
+vo
+ly
+xd
+Hg
+gs
+gs
+Ro
+Uk
+si
+fN
+TC
+Mn
+ML
+dC
+oy
+VN
+Zu
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(24,1,1) = {"
+JY
+JY
+JY
+JY
+cd
+gT
+Xo
+cd
+fs
+NH
+Wt
+xd
+xd
+Fx
+Yf
+uR
+NH
+NH
+Ya
+nm
+Hx
+mL
+Yg
+Mn
+XR
+dC
+Ag
+VN
+Jc
+HR
+VN
+Lm
+Lm
+Lm
+Lm
+Lm
+Hk
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(25,1,1) = {"
+JY
+JY
+JY
+JY
+cd
+cd
+cd
+cd
+cd
+NH
+NH
+PY
+NH
+Mk
+cd
+Hh
+Ya
+Ya
+Ya
+LL
+Hx
+xS
+Gt
+Sp
+FE
+Em
+cD
+Ag
+sm
+uh
+VN
+Lm
+Lm
+Lm
+Lm
+KV
+Zw
+KV
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(26,1,1) = {"
+JY
+JY
+JY
+JY
+cd
+CH
+CH
+CH
+cd
+NH
+Yr
+cd
+cd
+kb
+cd
+Hh
+Ya
+ZK
+Ho
+oY
+JJ
+nJ
+Ah
+Qr
+hQ
+bI
+hQ
+hQ
+WX
+hv
+VN
+Lm
+Lm
+Lm
+Lm
+KV
+Ag
+KV
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(27,1,1) = {"
+JY
+JY
+JY
+JY
+cd
+Hq
+NH
+NH
+BO
+NH
+ia
+Rf
+kj
+sa
+kj
+HS
+Ya
+wt
+RF
+WL
+Hx
+IG
+UJ
+Sp
+Ag
+Ag
+di
+KR
+hP
+Ag
+VN
+VN
+VN
+XX
+VN
+KV
+Hm
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(28,1,1) = {"
+JY
+JY
+JY
+JY
+cd
+cd
+sW
+Le
+cd
+vy
+cd
+cd
+cd
+cd
+cd
+cd
+Ya
+Ya
+Mn
+kB
+Oh
+Hx
+sR
+Al
+Al
+Al
+Al
+LG
+hP
+Ag
+VN
+zy
+If
+DN
+If
+FE
+qZ
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(29,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+cd
+cd
+cd
+cd
+NH
+cd
+Ab
+tK
+tK
+my
+my
+my
+zI
+Sp
+ny
+ig
+IK
+re
+Al
+wC
+wC
+Al
+Ag
+hP
+Ag
+VN
+Ru
+Ag
+Ag
+Ag
+Ag
+Ag
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(30,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+cd
+Jr
+cd
+Ab
+my
+my
+my
+my
+my
+zI
+Sp
+Sp
+Sp
+Sp
+Sp
+Al
+Uz
+Ue
+Al
+EH
+hP
+aW
+VN
+Dr
+Ag
+uG
+uG
+Ag
+cX
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(31,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+cd
+aX
+cd
+Ab
+my
+my
+my
+my
+my
+VT
+VT
+VT
+VT
+VT
+Lm
+Al
+ZF
+HE
+gP
+ON
+tk
+zY
+Yi
+MG
+KO
+uG
+uG
+Ag
+Ag
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(32,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+my
+my
+hy
+my
+my
+my
+my
+my
+VT
+VT
+VT
+VT
+VT
+Lm
+Ye
+Al
+WN
+Ad
+Al
+cD
+JP
+FE
+VN
+YV
+RP
+Ag
+Ag
+Ag
+oy
+VN
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(33,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+my
+my
+my
+my
+my
+my
+my
+my
+my
+VT
+VT
+VT
+VT
+Lm
+wz
+Al
+FC
+xA
+Al
+Zp
+Sj
+oy
+VN
+Pp
+sx
+eS
+Cg
+nH
+hH
+VN
+wz
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(34,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+my
+my
+my
+my
+my
+my
+my
+VT
+VT
+VT
+VT
+Lm
+Lm
+Al
+Al
+Al
+Al
+Ov
+JP
+Ag
+VN
+VN
+VN
+VN
+VN
+VN
+VN
+VN
+VN
+VN
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(35,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+my
+my
+my
+my
+my
+my
+my
+VT
+VT
+VT
+VT
+VT
+Lm
+VN
+HY
+MF
+VN
+Ag
+JH
+cr
+VN
+TJ
+zo
+VN
+TJ
+zo
+VN
+TJ
+zo
+VN
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(36,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+my
+my
+my
+my
+my
+my
+my
+my
+VT
+VT
+VT
+VT
+Lm
+KV
+Ms
+rU
+se
+EH
+JP
+Ag
+VN
+IY
+Un
+VN
+IY
+Ev
+VN
+IY
+NB
+VN
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(37,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+my
+my
+Ab
+JY
+my
+jJ
+VT
+VT
+VT
+VT
+Lm
+KV
+IS
+lr
+TI
+MG
+Qy
+Ag
+VN
+WY
+VN
+VN
+AQ
+VN
+VN
+cn
+VN
+VN
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(38,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+jJ
+jJ
+JY
+VT
+VT
+wz
+Ye
+VN
+kS
+jf
+se
+cD
+JP
+Ag
+FE
+Os
+iv
+FE
+Os
+Pq
+FE
+Os
+cD
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(39,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+VT
+VT
+wz
+VN
+VN
+VN
+VN
+VN
+Ca
+ik
+oM
+oM
+XP
+oM
+oM
+XP
+AZ
+oM
+CA
+cr
+KV
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(40,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+VT
+VT
+VT
+VT
+VN
+XU
+UE
+Lj
+VN
+mg
+JH
+cr
+VN
+VN
+se
+se
+VN
+VN
+VN
+YH
+VN
+VN
+wz
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(41,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+VT
+VT
+VT
+VT
+VT
+VT
+VN
+qm
+aG
+aG
+VN
+EH
+JP
+oy
+VN
+Cm
+hm
+zZ
+fU
+VN
+bX
+yT
+VN
+wz
+Ye
+wz
+wz
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(42,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VN
+MH
+ID
+dL
+uI
+Dd
+nI
+aW
+se
+hm
+hm
+Nk
+hm
+VN
+mv
+nN
+VN
+Lm
+wz
+wz
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(43,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+Lm
+VN
+aG
+zh
+pi
+VN
+UI
+Sd
+kF
+AJ
+sU
+tr
+qM
+RH
+VN
+VN
+Yy
+VN
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(44,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+JY
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VN
+Bo
+aK
+aK
+VN
+LZ
+Sj
+FE
+se
+hm
+hm
+rK
+MV
+VN
+Mj
+va
+VN
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(45,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+JY
+Lm
+VT
+VT
+JY
+JY
+JY
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VN
+VN
+VN
+VN
+VN
+Ag
+JP
+Ag
+VN
+wE
+hm
+rf
+hm
+VN
+qg
+SO
+VN
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(46,1,1) = {"
+JY
+JY
+JY
+JY
+JY
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+KV
+Ag
+JP
+Ag
+VN
+sP
+Qi
+Ii
+qh
+VN
+VN
+VN
+VN
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(47,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+KV
+aW
+kH
+kz
+VN
+KV
+KV
+KV
+KV
+VN
+wz
+wz
+wz
+VT
+Lm
+VT
+VT
+Lm
+Lm
+VT
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(48,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+KV
+KV
+eP
+KV
+KV
+Lm
+Lm
+Lm
+Lm
+wz
+wz
+wz
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+wz
+Ye
+Ye
+Lm
+Lm
+VT
+VT
+VT
+VT
+"}
+(49,1,1) = {"
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+wz
+wz
+wz
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+Lm
+KV
+CJ
+KV
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Ye
+Ye
+Ye
+Ye
+Ye
+wz
+wz
+VT
+VT
+VT
+"}
+(50,1,1) = {"
+wz
+wz
+wz
+wz
+wz
+wz
+wz
+MD
+wz
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+KV
+JP
+KV
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+Lm
+Lm
+Ye
+Ye
+Ye
+Ye
+Ye
+Ye
+Ye
+Ye
+Lm
+VT
+VT
+"}
+(51,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+KV
+JP
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Ye
+Ye
+Ye
+Ye
+Ye
+Ye
+Ye
+Lm
+VT
+VT
+"}
+(52,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+VT
+VT
+Lm
+Lm
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+KV
+JP
+KV
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Ye
+Ye
+Ye
+Ye
+Ye
+Ye
+Ye
+Lm
+VT
+VT
+"}
+(53,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+VT
+Lm
+Lm
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+Ed
+wd
+Ed
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Ye
+Ye
+wz
+Ye
+Lm
+Lm
+VT
+VT
+"}
+(54,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lb
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+Ed
+wd
+Ed
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+"}
+(55,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+fm
+Tm
+Ed
+Lm
+Lm
+VT
+VT
+VT
+Lm
+Ed
+wd
+Ed
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(56,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Ed
+es
+Ed
+Lm
+VT
+VT
+VT
+VT
+Lm
+Ed
+aJ
+Ed
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(57,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+Ed
+Ed
+KQ
+Ed
+Ed
+Lm
+VT
+VT
+Lm
+Ed
+Ed
+dZ
+Ed
+Ed
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(58,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+wz
+wz
+VT
+VT
+VT
+Cd
+Ed
+tJ
+II
+Jo
+Ed
+Cd
+Cd
+Cd
+Cd
+Lc
+Wf
+Ww
+Jo
+Ed
+Cd
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(59,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+VT
+Lm
+Cd
+dP
+RC
+es
+wX
+Wf
+YM
+GN
+II
+Nf
+mN
+Aj
+wd
+es
+TG
+Cd
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(60,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+VT
+VT
+Lm
+Ed
+wg
+Bh
+KG
+nK
+sj
+sj
+mi
+GM
+sj
+Mc
+pK
+ME
+Cj
+yt
+Cd
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(61,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+VT
+VT
+Lm
+Lm
+Ed
+eL
+PO
+Aj
+zN
+Sq
+qH
+Aj
+Eg
+es
+Vo
+Jl
+KS
+es
+sE
+Cd
+Cd
+Cd
+Cd
+At
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(62,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+wz
+Lm
+bg
+bg
+bg
+Hd
+au
+Hd
+bg
+av
+Cd
+oG
+cf
+fO
+Vo
+es
+XN
+es
+Vs
+Ed
+tY
+Vs
+Ed
+Lm
+Lm
+wz
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(63,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+wz
+wz
+Lm
+bg
+pr
+Kx
+dk
+vJ
+JW
+bg
+VP
+Cd
+Cd
+Bc
+Cd
+Bc
+es
+XN
+es
+lI
+AS
+qR
+lI
+Mw
+Lm
+Lm
+wz
+wz
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(64,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+Lm
+cA
+xP
+SY
+jn
+Ex
+xv
+bg
+mI
+Cd
+OI
+sz
+gk
+Wf
+Yp
+XN
+es
+Wf
+Ed
+lS
+qc
+Ed
+Lm
+Lm
+Lm
+wz
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(65,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+Lm
+cA
+xP
+Kl
+CV
+al
+lj
+bg
+Cd
+Cd
+mw
+es
+es
+es
+es
+iG
+zN
+ez
+Cd
+Cd
+Cd
+Cd
+At
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(66,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+Lm
+bg
+QD
+PN
+qb
+KU
+lu
+bg
+Ye
+Cd
+RI
+es
+yR
+yF
+me
+Kb
+Cd
+Oj
+Cd
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(67,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+Lm
+bg
+bg
+bg
+cA
+kE
+cA
+bg
+wz
+Cd
+Vj
+es
+Xr
+Kk
+iQ
+Rv
+NI
+Kt
+Cd
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(68,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+VT
+VT
+Lm
+Lm
+Lm
+bg
+qS
+vE
+VY
+bg
+wz
+Cd
+nR
+SW
+Cd
+NI
+ZN
+NI
+NI
+Kt
+Cd
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(69,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+wz
+VT
+VT
+Lm
+Lm
+bg
+Ik
+KU
+ap
+bg
+wz
+Cd
+XG
+wj
+rB
+oo
+JV
+oo
+oo
+Ss
+Cd
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(70,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+wz
+wz
+VT
+VT
+Lm
+bg
+cA
+KP
+cA
+bg
+wz
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Cd
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(71,1,1) = {"
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+MD
+wz
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Be
+Lm
+Lm
+Lm
+Be
+wz
+wz
+Lm
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+"}
+(72,1,1) = {"
+MD
+MD
+wz
+wz
+MD
+MD
+MD
+wz
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+Lm
+VT
+VT
+VT
+VT
+VT
+"}
+(73,1,1) = {"
+MD
+wz
+Lm
+Lm
+wz
+wz
+MD
+wz
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+"}
+(74,1,1) = {"
+wz
+Lm
+Lm
+Lm
+wz
+Lm
+wz
+MD
+wz
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+VT
+VT
+VT
+VT
+Lm
+Lm
+Lm
+VT
+VT
+VT
+VT
+"}
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index a175c2fc30..56126c6e37 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -53620,10 +53620,6 @@
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
-"eZP" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/space/basic,
-/area/hallway/secondary/entry)
"fbm" = (
/obj/structure/chair/comfy/brown{
dir = 4
@@ -67472,9 +67468,9 @@ aaa
aaa
aaa
aaf
-eZP
+awW
auP
-eZP
+awW
aaf
vZs
aaa
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 5dedc7535c..cd50d90edb 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -44934,7 +44934,7 @@
/area/maintenance/port)
"bKY" = (
/obj/machinery/power/apc{
- areastring = "/area/vacant_room/office";
+ areastring = "/area/security/vacantoffice";
dir = 8;
name = "Vacant Office APC";
pixel_x = -25
@@ -47211,6 +47211,7 @@
dir = 4
},
/obj/item/storage/box/lights/mixed,
+/obj/structure/closet/firecloset,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -96215,7 +96216,7 @@ bMA
alK
bPD
asa
-pHS
+alK
aaa
aaa
aaf
diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm
index b79f05cc69..d4b09ac046 100644
--- a/_maps/map_files/Mining/Lavaland.dmm
+++ b/_maps/map_files/Mining/Lavaland.dmm
@@ -74,842 +74,9 @@
"an" = (
/turf/closed/mineral/random/labormineral/volcanic,
/area/lavaland/surface/outdoors)
-"ao" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "Labor Camp APC";
- pixel_y = 23
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp)
-"ap" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/mine/laborcamp)
-"aq" = (
-/turf/closed/wall,
-/area/mine/laborcamp)
-"ar" = (
-/obj/structure/table,
-/turf/open/floor/plasteel/white,
-/area/mine/laborcamp)
-"as" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/regular,
-/turf/open/floor/plasteel/white,
-/area/mine/laborcamp)
-"at" = (
-/obj/structure/bed,
-/obj/item/bedsheet/medical,
-/obj/machinery/camera{
- c_tag = "Labor Camp Medical";
- dir = 8;
- network = list("labor")
- },
-/turf/open/floor/plasteel/white,
-/area/mine/laborcamp)
-"au" = (
-/obj/structure/rack,
-/obj/item/storage/bag/ore,
-/obj/item/pickaxe,
-/obj/item/flashlight,
-/obj/item/clothing/glasses/meson,
-/obj/item/mining_scanner,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"av" = (
-/obj/structure/rack,
-/obj/item/storage/bag/ore,
-/obj/item/flashlight,
-/obj/item/pickaxe,
-/obj/item/clothing/glasses/meson,
-/obj/item/mining_scanner,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aw" = (
-/turf/open/lava/smooth/lava_land_surface,
-/area/lavaland/surface/outdoors/explored)
-"ax" = (
-/turf/open/floor/plasteel/white,
-/area/mine/laborcamp)
-"ay" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/mine/laborcamp)
-"az" = (
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
"aA" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aB" = (
-/obj/machinery/door/airlock/medical/glass{
- name = "Infirmary"
- },
-/turf/open/floor/plasteel/white,
-/area/mine/laborcamp)
-"aC" = (
-/obj/structure/closet/crate/internals,
-/obj/item/tank/internals/emergency_oxygen,
-/obj/item/tank/internals/emergency_oxygen,
-/obj/item/tank/internals/emergency_oxygen,
-/obj/item/tank/internals/emergency_oxygen,
-/obj/item/clothing/mask/breath,
-/obj/item/clothing/mask/breath,
-/obj/item/clothing/mask/breath,
-/obj/item/clothing/mask/breath,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aD" = (
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors/explored)
-"aE" = (
-/obj/item/radio/intercom{
- desc = "Talk through this. It looks like it has been modified to not broadcast.";
- name = "Prison Intercom (General)";
- pixel_y = 24;
- prison_radio = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aF" = (
-/obj/machinery/door/airlock{
- name = "Labor Camp Storage"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aG" = (
-/obj/structure/table,
-/obj/item/trash/plate,
-/obj/item/kitchen/fork,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aH" = (
-/obj/structure/chair{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aI" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "Labor Camp External Access"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aJ" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aK" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aL" = (
-/obj/machinery/door/airlock{
- name = "Vending"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aM" = (
-/obj/machinery/light/small,
-/obj/effect/turf_decal/loading_area{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aN" = (
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aO" = (
-/obj/machinery/camera{
- c_tag = "Labor Camp External";
- dir = 4;
- network = list("labor")
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
-"aP" = (
-/obj/machinery/vending/sustenance,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aQ" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aR" = (
-/obj/machinery/shower{
- dir = 8
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/white,
-/area/mine/laborcamp)
-"aS" = (
-/obj/machinery/mineral/unloading_machine{
- dir = 1;
- icon_state = "unloader-corner";
- input_dir = 1;
- output_dir = 2
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp)
-"aT" = (
-/obj/structure/ore_box,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors/explored)
-"aU" = (
-/obj/machinery/flasher{
- id = "labor"
- },
-/turf/closed/wall,
-/area/mine/laborcamp)
-"aV" = (
-/obj/machinery/door/airlock{
- name = "Restroom"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"aW" = (
-/obj/machinery/conveyor{
- id = "gulag"
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp)
-"aX" = (
-/obj/structure/closet/crate,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors/explored)
-"aY" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Shuttle Security Airlock";
- req_access_txt = "2"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"aZ" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/button/door{
- id = "labor";
- name = "Labor Camp Lockdown";
- pixel_y = 28;
- req_access_txt = "2"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"ba" = (
-/obj/machinery/door/poddoor/preopen{
- id = "labor";
- name = "labor camp blast door"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bb" = (
-/obj/machinery/camera{
- c_tag = "Labor Camp Central";
- network = list("labor")
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bc" = (
-/obj/machinery/conveyor_switch/oneway{
- id = "gulag"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bd" = (
-/obj/machinery/mineral/processing_unit_console,
-/turf/closed/wall,
-/area/mine/laborcamp)
-"be" = (
-/obj/machinery/mineral/processing_unit{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp)
-"bf" = (
-/turf/closed/wall,
-/area/mine/eva)
-"bg" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/mine/eva)
-"bh" = (
-/obj/machinery/computer/shuttle/labor/one_way{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bi" = (
-/obj/structure/gulag_beacon,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bj" = (
-/obj/machinery/status_display/evac{
- pixel_y = 32
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bk" = (
-/obj/effect/turf_decal/loading_area{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bl" = (
-/obj/machinery/conveyor{
- dir = 8;
- id = "gulag"
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp)
-"bm" = (
-/obj/machinery/conveyor{
- dir = 10;
- id = "gulag"
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp)
-"bn" = (
-/obj/structure/table,
-/obj/item/pickaxe,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bo" = (
-/obj/machinery/suit_storage_unit/mining,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bp" = (
-/obj/machinery/suit_storage_unit/mining,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bq" = (
-/turf/closed/wall,
-/area/mine/production)
-"br" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/mine/production)
-"bs" = (
-/obj/machinery/camera{
- c_tag = "EVA";
- dir = 4;
- network = list("mine")
- },
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bt" = (
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bu" = (
-/obj/machinery/light_switch{
- pixel_x = 27
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bv" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/eva)
-"bw" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/mine/laborcamp/security)
-"bx" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Shuttle Prisoner Airlock"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"by" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bz" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"bA" = (
-/turf/closed/wall/r_wall,
-/area/mine/laborcamp)
-"bB" = (
-/obj/structure/toilet{
- dir = 8
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp/security)
-"bC" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/machinery/computer/shuttle/mining{
- req_access = null
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"bD" = (
-/obj/structure/closet/crate,
-/obj/item/dice/d4,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"bE" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"bF" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/mine/eva)
-"bG" = (
-/obj/structure/table,
-/obj/item/stack/packageWrap,
-/obj/item/stack/packageWrap,
-/obj/item/stack/packageWrap,
-/obj/item/hand_labeler,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bH" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bI" = (
-/obj/structure/tank_dispenser/oxygen,
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bJ" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bK" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -5;
- pixel_y = 30
- },
-/obj/machinery/shower{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bL" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/door/airlock/highsecurity{
- name = "Labor Camp Monitoring";
- req_access_txt = "2";
- security_level = 6
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"bM" = (
-/turf/closed/wall,
-/area/mine/laborcamp/security)
-"bN" = (
-/obj/structure/sign/warning/docking,
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/mine/production)
-"bO" = (
-/obj/item/beacon,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"bP" = (
-/turf/open/floor/plasteel,
-/area/mine/production)
-"bQ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"bR" = (
-/obj/machinery/door/airlock/mining/glass{
- name = "Mining Station EVA";
- req_access_txt = "54"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bT" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/power/apc{
- dir = 1;
- name = "Labor Camp Security APC";
- pixel_y = 23
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"bU" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bV" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bW" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bX" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/door/airlock/external{
- glass = 1;
- name = "Mining External Airlock";
- opacity = 0;
- req_access_txt = "54"
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bY" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"bZ" = (
-/turf/closed/mineral/random/volcanic,
-/area/lavaland/surface/outdoors/explored)
-"ca" = (
-/turf/closed/wall/r_wall,
-/area/mine/laborcamp/security)
-"cb" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/structure/table,
-/obj/item/restraints/handcuffs,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cc" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/mob/living/simple_animal/bot/secbot/beepsky{
- desc = "Powered by the tears and sweat of laborers.";
- name = "Prison Ofitser"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cd" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"ce" = (
-/obj/machinery/computer/secure_data,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cf" = (
-/obj/machinery/computer/security/labor,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cg" = (
-/obj/machinery/computer/prisoner,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"ch" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"ci" = (
-/obj/machinery/power/apc{
- name = "Mining EVA APC";
- pixel_x = 1;
- pixel_y = -23
- },
-/obj/machinery/recharge_station,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"cj" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/door/airlock/external{
- glass = 1;
- name = "Mining Shuttle Airlock";
- opacity = 0
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"ck" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cl" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"cm" = (
-/obj/machinery/mech_bay_recharge_port,
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plating,
-/area/mine/eva)
-"cn" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"co" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cq" = (
-/turf/open/floor/mech_bay_recharge_floor,
-/area/mine/eva)
-"cr" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/computer/mech_bay_power_console{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"cs" = (
-/obj/structure/closet/emcloset,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"ct" = (
-/obj/structure/ore_box,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
+/turf/template_noop,
+/area/template_noop)
"cu" = (
/obj/item/pickaxe,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
@@ -918,1694 +85,6 @@
/obj/structure/ore_box,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"cw" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/machinery/vending/security,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cy" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cz" = (
-/obj/structure/table,
-/obj/item/storage/fancy/donut_box,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cA" = (
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cB" = (
-/obj/structure/chair/office{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cC" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/red,
-/obj/item/paper_bin,
-/obj/item/pen,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cD" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cE" = (
-/obj/structure/chair/comfy/brown{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cF" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cG" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/closet/secure_closet/freezer/gulag_fridge,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cH" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cI" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cJ" = (
-/obj/machinery/door/airlock{
- name = "Closet"
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"cK" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"cL" = (
-/obj/machinery/space_heater,
-/turf/open/floor/plating,
-/area/mine/production)
-"cM" = (
-/turf/closed/wall,
-/area/mine/living_quarters)
-"cN" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"cO" = (
-/obj/item/radio/intercom{
- dir = 8;
- name = "Station Intercom (General)";
- pixel_x = -28
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cP" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 30
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"cQ" = (
-/turf/closed/wall/r_wall,
-/area/mine/maintenance)
-"cR" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"cS" = (
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Labor Camp Security Office";
- dir = 1;
- network = list("labor")
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cT" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cU" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Monitoring";
- req_access_txt = "2"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"cV" = (
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"cW" = (
-/obj/structure/reagent_dispensers/fueltank,
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"cX" = (
-/obj/machinery/power/smes{
- charge = 5e+006
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"cY" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/structure/closet/crate/secure/loot,
-/obj/structure/sign/warning/electricshock{
- pixel_y = 32
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"cZ" = (
-/obj/machinery/mineral/equipment_vendor,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"da" = (
-/obj/machinery/mineral/mint,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"db" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/effect/turf_decal/loading_area{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dc" = (
-/obj/structure/closet/crate,
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dd" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -5;
- pixel_y = 30
- },
-/obj/structure/table,
-/obj/item/paper/fluff/stations/lavaland/orm_notice,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"de" = (
-/obj/structure/ore_box,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"df" = (
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dg" = (
-/turf/open/floor/circuit,
-/area/mine/maintenance)
-"dh" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"di" = (
-/obj/machinery/telecomms/relay/preset/mining,
-/obj/machinery/light/small{
- dir = 1
- },
-/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/plasteel/dark,
-/area/mine/maintenance)
-"dj" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/dark,
-/area/mine/maintenance)
-"dk" = (
-/obj/machinery/airalarm{
- pixel_y = 24
- },
-/turf/open/floor/circuit,
-/area/mine/maintenance)
-"dl" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/machinery/iv_drip,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"dm" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"dn" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/toxin{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"do" = (
-/obj/machinery/power/apc{
- dir = 8;
- name = "Mining Station Starboard Wing APC";
- pixel_x = -25;
- pixel_y = 2
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dp" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "Mining Communications APC";
- pixel_x = 1;
- pixel_y = 23
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plasteel/dark,
-/area/mine/maintenance)
-"dq" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"dr" = (
-/obj/machinery/atmospherics/components/unary/tank/air{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"ds" = (
-/obj/machinery/power/terminal{
- dir = 1
- },
-/obj/machinery/power/port_gen/pacman{
- anchored = 1
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"dt" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/obj/machinery/meter,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"du" = (
-/obj/effect/turf_decal/loading_area,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dv" = (
-/obj/effect/turf_decal/loading_area{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dw" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dx" = (
-/obj/machinery/mineral/equipment_vendor,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dy" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"dz" = (
-/obj/machinery/light_switch{
- pixel_y = -25
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/open/floor/circuit,
-/area/mine/maintenance)
-"dA" = (
-/obj/machinery/camera{
- c_tag = "Communications Relay";
- dir = 8;
- network = list("mine")
- },
-/turf/open/floor/circuit,
-/area/mine/maintenance)
-"dB" = (
-/obj/structure/closet/crate/freezer,
-/obj/item/reagent_containers/blood,
-/obj/item/reagent_containers/blood{
- pixel_x = -3;
- pixel_y = -3
- },
-/obj/item/reagent_containers/blood/AMinus,
-/obj/item/reagent_containers/blood/BMinus{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/reagent_containers/blood/BPlus{
- pixel_x = 1;
- pixel_y = 2
- },
-/obj/item/reagent_containers/blood/OMinus,
-/obj/item/reagent_containers/blood/OPlus{
- pixel_x = -2;
- pixel_y = -1
- },
-/obj/item/reagent_containers/blood/random,
-/obj/item/reagent_containers/blood/random,
-/obj/item/reagent_containers/blood/random,
-/obj/machinery/camera{
- c_tag = "Sleeper Room";
- dir = 1;
- network = list("mine")
- },
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"dC" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 5
- },
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"dD" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 10
- },
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"dE" = (
-/obj/structure/table,
-/obj/item/storage/firstaid/regular,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"dF" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"dG" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"dH" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/circuit,
-/area/mine/maintenance)
-"dI" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"dJ" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dK" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Shuttle Docking Foyer";
- dir = 8;
- network = list("mine")
- },
-/obj/machinery/newscaster{
- pixel_x = 30;
- pixel_y = 1
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dL" = (
-/obj/structure/closet/crate{
- icon_state = "crateopen"
- },
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dM" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dN" = (
-/obj/machinery/camera{
- c_tag = "Processing Area Room";
- dir = 8;
- network = list("mine")
- },
-/obj/item/radio/intercom{
- dir = 8;
- name = "Station Intercom (General)";
- pixel_x = 28
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dO" = (
-/obj/machinery/mineral/unloading_machine{
- dir = 1;
- icon_state = "unloader-corner";
- input_dir = 1;
- output_dir = 2
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"dP" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 10
- },
-/obj/machinery/bluespace_beacon,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/mine/maintenance)
-"dQ" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"dR" = (
-/obj/machinery/door/airlock/medical/glass{
- name = "Infirmary"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"dS" = (
-/obj/machinery/power/port_gen/pacman{
- anchored = 1
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"dT" = (
-/obj/machinery/atmospherics/components/binary/pump/on,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"dU" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Mining Station Communications";
- req_access_txt = "48"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/maintenance)
-"dV" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/mine/production)
-"dW" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dX" = (
-/obj/machinery/conveyor_switch/oneway{
- id = "mining_internal";
- name = "mining conveyor"
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"dY" = (
-/obj/machinery/conveyor{
- id = "mining_internal"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"dZ" = (
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ea" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eb" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Mining Station Maintenance";
- req_access_txt = "48"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"ec" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ed" = (
-/obj/machinery/camera{
- c_tag = "Crew Area Hallway";
- network = list("mine")
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ee" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ef" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/door/airlock/mining/glass{
- name = "Processing Area";
- req_access_txt = "48"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eh" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -5;
- pixel_y = 30
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ei" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "Mining Station Port Wing APC";
- pixel_x = 1;
- pixel_y = 23
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ej" = (
-/obj/machinery/camera{
- c_tag = "Crew Area Hallway East";
- network = list("mine")
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ek" = (
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"el" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"em" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"en" = (
-/obj/machinery/mineral/processing_unit_console,
-/turf/closed/wall,
-/area/mine/production)
-"eo" = (
-/obj/machinery/mineral/processing_unit{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"ep" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eq" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"er" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"es" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"et" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eu" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3,
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ev" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ew" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ex" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ey" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"ez" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eA" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eB" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/machinery/door/airlock/glass{
- name = "Mining Station Bridge"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eD" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eE" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eF" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eG" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eH" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eI" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eJ" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eK" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eL" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eM" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eN" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eO" = (
-/obj/machinery/light/small,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eP" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eQ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/machinery/door/airlock/glass,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eR" = (
-/obj/machinery/door/airlock/glass{
- name = "Break Room"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"eS" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/obj/machinery/mineral/equipment_vendor,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eT" = (
-/obj/structure/closet/crate{
- icon_state = "crateopen"
- },
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eU" = (
-/obj/structure/closet/crate,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eV" = (
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eW" = (
-/obj/effect/turf_decal/loading_area{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"eX" = (
-/obj/machinery/conveyor{
- dir = 8;
- id = "mining_internal"
- },
-/obj/structure/plasticflaps,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"eY" = (
-/obj/machinery/conveyor{
- dir = 8;
- id = "mining_internal"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"eZ" = (
-/obj/machinery/conveyor{
- dir = 10;
- id = "mining_internal"
- },
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"fa" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/structure/chair,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fb" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -5;
- pixel_y = 30
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/chair,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fc" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fd" = (
-/obj/machinery/camera{
- c_tag = "Public Shuttle Lobby";
- network = list("mine")
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/structure/table,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fe" = (
-/obj/structure/bed,
-/obj/item/bedsheet/brown,
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/turf/open/floor/carpet,
-/area/mine/living_quarters)
-"ff" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 6
- },
-/turf/open/floor/carpet,
-/area/mine/living_quarters)
-"fg" = (
-/obj/machinery/door/airlock{
- id_tag = "miningdorm1";
- name = "Room 1"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fi" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fj" = (
-/obj/machinery/vending/snack,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fk" = (
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fl" = (
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fm" = (
-/obj/machinery/vending/cigarette,
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fn" = (
-/obj/structure/table,
-/obj/machinery/microwave{
- pixel_y = 6
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fo" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"fp" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fq" = (
-/obj/item/radio/intercom{
- dir = 8;
- name = "Station Intercom (General)";
- pixel_x = 28
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fr" = (
-/obj/structure/table,
-/turf/open/floor/carpet,
-/area/mine/living_quarters)
-"fs" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/button/door{
- id = "miningdorm1";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 25;
- specialfunctions = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 1
- },
-/turf/open/floor/carpet,
-/area/mine/living_quarters)
-"ft" = (
-/obj/machinery/camera{
- c_tag = "Dormitories";
- dir = 4;
- network = list("mine")
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fu" = (
-/obj/structure/chair,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fv" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fw" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"fx" = (
-/turf/closed/mineral/random/labormineral/volcanic,
-/area/lavaland/surface/outdoors/explored)
-"fy" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/machinery/door/airlock/glass{
- name = "Mining Station Bridge"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"fz" = (
-/obj/structure/table,
-/obj/item/clothing/glasses/meson,
-/obj/item/storage/bag/ore,
-/obj/item/pickaxe,
-/obj/item/mining_scanner,
-/obj/item/flashlight,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fA" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"fB" = (
-/obj/structure/table,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fC" = (
-/obj/structure/chair{
- dir = 4
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fD" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = 7;
- pixel_y = 5
- },
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = -1;
- pixel_y = 9
- },
-/obj/item/reagent_containers/food/drinks/beer{
- pixel_x = -8
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fE" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fF" = (
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fG" = (
-/obj/structure/table,
-/obj/item/storage/box/donkpockets,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fH" = (
-/obj/machinery/door/airlock{
- id_tag = "miningdorm2";
- name = "Room 2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fI" = (
-/obj/item/radio/intercom{
- dir = 8;
- name = "Station Intercom (General)";
- pixel_x = -28
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fJ" = (
-/obj/machinery/camera{
- c_tag = "Crew Area";
- dir = 1;
- network = list("mine")
- },
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_y = -32
- },
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fK" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fL" = (
-/obj/structure/sink{
- dir = 8;
- pixel_x = 11
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fM" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/button/door{
- id = "miningdorm2";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 25;
- specialfunctions = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 1
- },
-/turf/open/floor/carpet,
-/area/mine/living_quarters)
-"fN" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fO" = (
-/obj/machinery/door/airlock{
- id_tag = "miningdorm3";
- name = "Room 3"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"fP" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/button/door{
- id = "miningdorm3";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 25;
- specialfunctions = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 1
- },
-/turf/open/floor/carpet,
-/area/mine/living_quarters)
"fQ" = (
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors/unexplored/danger)
@@ -2624,24 +103,6 @@
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"fU" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
"fV" = (
/turf/closed/indestructible/riveted/boss/see_through,
/area/lavaland/surface/outdoors)
@@ -2650,14 +111,6 @@
/obj/structure/stone_tile/slab,
/turf/open/indestructible/boss,
/area/lavaland/surface/outdoors)
-"fX" = (
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
"gj" = (
/obj/structure/stone_tile/surrounding_tile{
dir = 1
@@ -2786,23 +239,6 @@
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"gX" = (
-/obj/structure/toilet{
- dir = 8
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"gY" = (
-/obj/docking_port/stationary{
- dir = 8;
- dwidth = 2;
- height = 5;
- id = "laborcamp_away";
- name = "labor camp";
- width = 9
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors/explored)
"hg" = (
/obj/structure/stone_tile/surrounding,
/obj/structure/stone_tile/center/cracked,
@@ -2848,19 +284,6 @@
},
/turf/open/indestructible/boss,
/area/lavaland/surface/outdoors)
-"ie" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"il" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/eva)
"ir" = (
/obj/structure/stone_tile/slab/cracked{
dir = 5
@@ -3028,15 +451,6 @@
},
/turf/open/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
-"jI" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"jL" = (
/obj/structure/stone_tile/surrounding_tile,
/obj/structure/stone_tile/surrounding_tile{
@@ -3059,17 +473,6 @@
/obj/structure/stone_tile/center/cracked,
/turf/open/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
-"jO" = (
-/obj/docking_port/stationary{
- dir = 8;
- dwidth = 3;
- height = 7;
- id = "lavaland_common_away";
- name = "Mining base public dock";
- width = 7
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
"jQ" = (
/obj/structure/stone_tile{
dir = 1
@@ -3105,12 +508,6 @@
/obj/structure/fluff/drake_statue/falling,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"km" = (
-/obj/structure/chair{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"ko" = (
/obj/structure/stone_tile/block/cracked{
dir = 8
@@ -3302,13 +699,6 @@
},
/turf/open/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
-"lB" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
"lD" = (
/obj/structure/stone_tile/block/cracked{
dir = 4
@@ -3352,13 +742,6 @@
},
/turf/open/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
-"lN" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
"lP" = (
/obj/structure/stone_tile/block/cracked{
dir = 4
@@ -3396,14 +779,6 @@
},
/turf/open/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
-"lU" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
- dir = 4;
- piping_layer = 3
- },
-/obj/structure/lattice/catwalk,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/living_quarters)
"lW" = (
/obj/structure/stone_tile/block/cracked,
/obj/structure/stone_tile/block/cracked{
@@ -3439,15 +814,6 @@
},
/turf/open/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
-"mi" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
"mk" = (
/obj/structure/stone_tile/block/cracked{
dir = 8
@@ -3813,579 +1179,10 @@
},
/turf/open/indestructible/boss,
/area/lavaland/surface/outdoors)
-"ns" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"nE" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = -12
- },
-/obj/structure/mirror{
- pixel_x = -28
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"nG" = (
-/obj/item/twohanded/required/kirbyplants/random,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"nJ" = (
-/obj/structure/sign/poster/official/random{
- pixel_y = 32
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"nO" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"nZ" = (
-/obj/machinery/door/window/southright,
-/obj/machinery/shower{
- pixel_y = 22
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"oZ" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 8
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"pg" = (
-/obj/machinery/door/airlock/external{
- glass = 1;
- name = "Mining External Airlock";
- opacity = 0
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"pm" = (
-/obj/structure/table,
-/obj/item/tank/internals/emergency_oxygen{
- pixel_x = 5;
- pixel_y = 3
- },
-/obj/item/tank/internals/emergency_oxygen,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"qq" = (
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"qE" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"qZ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"rf" = (
-/obj/machinery/door/airlock/external{
- glass = 1;
- name = "Mining External Airlock";
- opacity = 0
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"rs" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"rF" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"rY" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"sF" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"sL" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/door/airlock/external{
- name = "Lavaland Shuttle Airlock"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"sV" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"tg" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"uy" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/laborcamp/security)
-"vk" = (
-/obj/effect/turf_decal/tile/red,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"vE" = (
-/obj/item/twohanded/required/kirbyplants/random,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"vP" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"xc" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/production)
-"zc" = (
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"zS" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"CS" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"Dn" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"DM" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Et" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"EH" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"FB" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/red,
-/obj/machinery/recharger,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"FX" = (
-/obj/structure/chair{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Gr" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"GC" = (
-/obj/machinery/camera{
- c_tag = "Crew Area Hallway West";
- dir = 1;
- network = list("mine")
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Hk" = (
-/obj/structure/displaycase,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"HO" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/external{
- name = "Lavaland Shuttle Airlock"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Iv" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"IY" = (
-/obj/machinery/cryopod{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"Ki" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
-/turf/open/floor/plasteel/white,
-/area/mine/living_quarters)
-"Ky" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"KS" = (
-/obj/structure/closet/emcloset,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"LW" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"Mc" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"My" = (
-/obj/machinery/door/airlock{
- id_tag = "miningbathroom";
- name = "Restroom"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"MX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"NC" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/structure/displaycase,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"NU" = (
-/obj/machinery/atmospherics/pipe/manifold4w/supply,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"OJ" = (
-/obj/structure/table,
-/obj/item/cigbutt,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Pd" = (
-/obj/machinery/button/door{
- id = "miningbathroom";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = -25;
- specialfunctions = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"Pr" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"PR" = (
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red,
-/obj/structure/closet/secure_closet/labor_camp_security,
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"Qj" = (
-/obj/machinery/computer/shuttle/mining/common{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Qo" = (
-/obj/machinery/shower{
- dir = 8
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = 30
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"Rn" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"RD" = (
-/obj/machinery/door/airlock{
- name = "Restroom"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"RR" = (
-/obj/item/bikehorn{
- color = "#000";
- desc = "A horn off of a bicycle. This one has been charred to hell and back, yet somehow it still honks.";
- name = "charred bike horn"
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors/explored)
-"RW" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"Se" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plating,
-/area/mine/living_quarters)
-"Sj" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"SI" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Tp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 4
- },
-/obj/structure/lattice/catwalk,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/mine/living_quarters)
-"Ty" = (
-/obj/machinery/door/window/southleft,
-/obj/machinery/shower{
- pixel_y = 22
- },
-/turf/open/floor/plasteel/freezer,
-/area/mine/living_quarters)
-"Tz" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
-"TW" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"TX" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Ub" = (
-/obj/structure/statue{
- desc = "A lifelike statue of a horrifying monster.";
- dir = 8;
- icon = 'icons/mob/lavaland/lavaland_monsters.dmi';
- icon_state = "goliath";
- name = "goliath"
- },
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
+"ol" = (
+/obj/effect/landmark/stationroom/lavaland/station,
+/turf/template_noop,
+/area/template_noop)
"Uq" = (
/obj/docking_port/stationary{
area_type = /area/lavaland/surface/outdoors;
@@ -4398,108 +1195,6 @@
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"UP" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/effect/turf_decal/tile/brown,
-/turf/open/floor/plasteel,
-/area/mine/production)
-"US" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
-/turf/open/floor/plasteel,
-/area/mine/living_quarters)
-"Vk" = (
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"Vz" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plating,
-/area/mine/production)
-"Wp" = (
-/obj/docking_port/stationary{
- dir = 8;
- dwidth = 3;
- height = 10;
- id = "mining_away";
- name = "lavaland mine";
- width = 7
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
-"WA" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock{
- name = "Labor Camp External Access"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"WB" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Shuttle Security Airlock";
- req_access_txt = "2"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"WC" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/security/glass{
- name = "Labor Camp Shuttle Prisoner Airlock"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp)
-"WD" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/external{
- glass = 1;
- name = "Mining External Airlock";
- opacity = 0;
- req_access_txt = "54"
- },
-/turf/open/floor/plasteel,
-/area/mine/eva)
-"WE" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/machinery/door/airlock/external{
- glass = 1;
- name = "Mining Shuttle Airlock";
- opacity = 0
- },
-/turf/open/floor/plasteel,
-/area/mine/production)
-"YT" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/closed/wall,
-/area/mine/living_quarters)
-"Zt" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/mine/laborcamp/security)
(1,1,1) = {"
aa
@@ -4702,61 +1397,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+ol
"}
(2,1,1) = {"
aa
@@ -4959,61 +1654,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(3,1,1) = {"
aa
@@ -5216,61 +1911,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(4,1,1) = {"
aa
@@ -5473,61 +2168,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ai
-ai
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(5,1,1) = {"
aa
@@ -5730,61 +2425,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ai
-ai
-ai
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(6,1,1) = {"
aa
@@ -5987,61 +2682,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ai
-aD
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(7,1,1) = {"
aa
@@ -6244,61 +2939,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aw
-aw
-ab
-aD
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(8,1,1) = {"
aa
@@ -6501,61 +3196,61 @@ aj
aj
aj
aj
-aj
-ab
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aw
-aw
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(9,1,1) = {"
aa
@@ -6758,61 +3453,61 @@ aj
aj
aj
aj
-ab
-ab
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aw
-aw
-aj
-aj
-aw
-aw
-aj
-aj
-aw
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(10,1,1) = {"
aa
@@ -7015,61 +3710,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(11,1,1) = {"
aa
@@ -7272,61 +3967,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aw
-aw
-aD
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-aw
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(12,1,1) = {"
aa
@@ -7529,61 +4224,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aw
-aw
-aw
-aD
-aw
-aw
-aw
-aw
-aw
-aD
-aw
-aw
-aD
-aw
-aw
-aw
-aj
-aw
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(13,1,1) = {"
aa
@@ -7786,61 +4481,61 @@ aj
aj
aj
ab
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aw
-aw
-aw
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aw
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(14,1,1) = {"
aa
@@ -8043,61 +4738,61 @@ aj
aj
ab
ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aw
-aw
-aw
-aw
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aw
-aw
-ab
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(15,1,1) = {"
aa
@@ -8300,61 +4995,61 @@ aj
aj
aj
aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aw
-aw
-aw
-aw
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aw
-aw
-aw
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(16,1,1) = {"
aa
@@ -8557,61 +5252,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aw
-aw
-aw
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aw
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(17,1,1) = {"
aa
@@ -8814,61 +5509,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aw
-aw
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-gY
-aD
-aD
-aD
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-ab
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(18,1,1) = {"
aa
@@ -9071,61 +5766,61 @@ aj
aj
ab
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aq
-aq
-aq
-aq
-aq
-aY
-aq
-aq
-aq
-bx
-aq
-aw
-aw
-aj
-aj
-aj
-aj
-aj
-ab
-ai
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(19,1,1) = {"
aa
@@ -9328,61 +6023,61 @@ an
an
ab
ab
-an
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-aq
-aG
-aK
-aP
-aq
-aZ
-aq
-bh
-aq
-aJ
-aq
-aD
-bZ
-aj
-aj
-RR
-aj
-ab
-ab
-ai
-ai
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(20,1,1) = {"
aa
@@ -9585,61 +6280,61 @@ an
an
an
an
-an
-an
-ab
-aj
-aj
-aj
-ab
-ab
-aq
-aH
-az
-aQ
-aq
-WB
-aq
-bi
-aq
-WC
-aq
-bZ
-bZ
-bZ
-aj
-aj
-aj
-ab
-ab
-ai
-ai
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(21,1,1) = {"
aa
@@ -9842,61 +6537,61 @@ an
an
an
an
-an
-an
-an
-an
-ap
-ap
-ap
-aq
-aq
-aq
-aL
-aq
-aq
-ba
-aq
-bj
-az
-az
-bA
-ca
-ca
-ca
-uy
-ca
-Se
-Mc
-LW
-cM
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(22,1,1) = {"
aa
@@ -10099,61 +6794,61 @@ an
an
an
an
-an
-an
-an
-an
-ap
-ar
-ar
-aq
-IY
-az
-az
-az
-az
-az
-az
-el
-az
-az
-bA
-cb
-cw
-cG
-cz
-ca
-OJ
-SI
-nG
-cM
-lU
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(23,1,1) = {"
aa
@@ -10356,61 +7051,61 @@ an
an
an
an
-an
-an
-an
-an
-aq
-as
-ax
-aB
-az
-az
-az
-az
-aU
-bb
-cN
-fo
-by
-by
-bL
-cc
-cx
-mi
-cE
-ca
-km
-SI
-eM
-cM
-Tp
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(24,1,1) = {"
aa
@@ -10613,61 +7308,61 @@ an
an
an
an
-an
-an
-an
-an
-aq
-at
-ay
-aq
-aE
-az
-cl
-cN
-cN
-dG
-aQ
-bk
-az
-az
-bA
-cd
-cA
-fw
-cS
-ca
-nJ
-SI
-dZ
-cM
-er
-LW
-cM
-ab
-ab
-ab
-ab
-ab
-jO
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(25,1,1) = {"
aa
@@ -10870,61 +7565,61 @@ an
an
an
an
-an
-an
-an
-an
-aq
-aq
-aq
-aq
-aq
-az
-az
-aR
-az
-bc
-aq
-bl
-bA
-bA
-bA
-bT
-cA
-qE
-cT
-bw
-eL
-dy
-ec
-dZ
-ie
-DM
-cM
-ab
-ab
-ab
-ab
-cR
-sL
-cR
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(26,1,1) = {"
aa
@@ -11127,61 +7822,61 @@ an
an
an
an
-an
-an
-an
-an
-aq
-au
-au
-au
-aq
-az
-aM
-aq
-aq
-bd
-aq
-bl
-bA
-ao
-aV
-Zt
-Tz
-cp
-sF
-cU
-EH
-dF
-EH
-EH
-es
-GC
-cM
-ab
-ab
-ab
-ab
-cR
-dZ
-cR
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(27,1,1) = {"
aa
@@ -11384,61 +8079,61 @@ an
an
an
an
-an
-an
-an
-an
-aq
-av
-az
-az
-aF
-az
-aN
-aS
-aW
-be
-aW
-bm
-bA
-bB
-bM
-ce
-cA
-Iv
-vk
-bw
-dZ
-dZ
-lN
-rF
-et
-dZ
-cM
-cM
-cM
-YT
-cM
-cR
-HO
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(28,1,1) = {"
aa
@@ -11641,61 +8336,61 @@ an
an
an
an
-an
-an
-an
-an
-aq
-aq
aA
-aC
-aq
-aI
-aq
-aq
-aq
-aq
-aq
-aq
-bA
-bA
-ca
-cf
-cB
-cA
-qq
-cQ
-cQ
-cQ
-cQ
-rs
-et
-dZ
-cM
-vE
-FX
-Qj
-FX
-eL
-Dn
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(29,1,1) = {"
aa
@@ -11898,61 +8593,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-aq
-aq
-aq
-aq
-az
-aq
-aT
-aX
-aX
-aD
-aD
-aD
-aw
-bw
-cg
-cC
-FB
-PR
-cQ
-dg
-dg
-cQ
-dZ
-et
-dZ
-cM
-fa
-dZ
-dZ
-dZ
-dZ
-dZ
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(30,1,1) = {"
aa
@@ -12155,61 +8850,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-aq
-aJ
-aq
-aT
-aD
-aD
-aD
-aD
-aD
-aw
-bw
-bw
-bw
-bw
-bw
-cQ
-dp
-dH
-cQ
-ea
-et
-ek
-cM
-fb
-dZ
-fz
-fz
-dZ
-Ub
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(31,1,1) = {"
aa
@@ -12412,61 +9107,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-aq
-WA
-aq
-aT
-aD
-aD
-aD
-aD
-aD
-aj
-aj
-aj
-aj
-aj
-ab
-cQ
-di
-dP
-dU
-rY
-eu
-eK
-eQ
-ef
-TX
-fz
-fz
-dZ
-dZ
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(32,1,1) = {"
aa
@@ -12669,61 +9364,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-aD
-aD
-aO
-aD
-aD
-aD
-aD
-aD
-aj
-aj
-aj
-aj
-aj
-ab
-ad
-cQ
-dj
-dz
-cQ
-ec
-ev
-eL
-cM
-fc
-zS
-dZ
-dZ
-dZ
-eM
-cM
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(33,1,1) = {"
aa
@@ -12926,61 +9621,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aj
-aj
-aj
-aj
-ab
-ai
-cQ
-dk
-dA
-cQ
-ed
-ew
-eM
-cM
-fd
-fq
-fB
-pm
-Hk
-NC
-cM
-ai
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(34,1,1) = {"
aa
@@ -13183,61 +9878,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aj
-aj
-aj
-aj
-ab
-ab
-cQ
-cQ
-cQ
-cQ
-ee
-ev
-dZ
-cM
-cM
-cM
-cM
-cM
-cM
-cM
-cM
-cM
-cM
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(35,1,1) = {"
aa
@@ -13440,61 +10135,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aj
-aj
-aj
-aj
-aj
-ab
-cM
-dl
-dB
-cM
-dZ
-ex
-fp
-cM
-fe
-fr
-cM
-fe
-fr
-cM
-fe
-fr
-cM
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(36,1,1) = {"
aa
@@ -13697,61 +10392,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aD
-aj
-aj
-aj
-aj
-ab
-cR
-Ki
-dC
-dQ
-ea
-ev
-dZ
-cM
-ff
-fs
-cM
-ff
-fM
-cM
-ff
-fP
-cM
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(37,1,1) = {"
aa
@@ -13954,61 +10649,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aD
-aD
-aT
-an
-aD
-fx
-aj
-aj
-aj
-aj
-ab
-cR
-dm
-dD
-dR
-ef
-ey
-dZ
-cM
-fg
-cM
-cM
-fH
-cM
-cM
-fO
-cM
-cM
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(38,1,1) = {"
aa
@@ -14211,61 +10906,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-fx
-fx
-an
-aj
-aj
-ai
-ad
-cM
-dn
-dE
-dQ
-ec
-ev
-dZ
-eL
-fh
-ft
-eL
-fh
-zc
-eL
-fh
-ec
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(39,1,1) = {"
aa
@@ -14468,61 +11163,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aj
-aj
-ai
-cM
-cM
-cM
-cM
-cM
-ei
-ez
-eN
-eN
-fi
-eN
-eN
-fi
-fN
-eN
-NU
-fp
-cR
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(40,1,1) = {"
aa
@@ -14725,61 +11420,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aj
-aj
-aj
-aj
-cM
-cX
-ds
-dS
-cM
-eh
-ex
-fp
-cM
-cM
-dQ
-dQ
-cM
-cM
-cM
-RD
-cM
-cM
-ai
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(41,1,1) = {"
aa
@@ -14982,61 +11677,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aj
-aj
-aj
-aj
-aj
-aj
-cM
-cY
-cV
-cV
-cM
-ea
-ev
-eM
-cM
-fj
-fk
-qZ
-fI
-cM
-Ty
-nO
-cM
-ai
-ad
-ai
-ai
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(42,1,1) = {"
aa
@@ -15239,61 +11934,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-cM
-dh
-dt
-dT
-eb
-ep
-eA
-ek
-dQ
-fk
-fk
-fC
-fk
-cM
-nZ
-Sj
-cM
-ab
-ai
-ai
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(43,1,1) = {"
aa
@@ -15496,61 +12191,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-ab
-cM
-cV
-dq
-dI
-cM
-ej
-Et
-jI
-eR
-fl
-fu
-fD
-fJ
-cM
-cM
-My
-cM
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(44,1,1) = {"
aa
@@ -15753,61 +12448,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-an
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-cM
-cW
-dr
-dr
-cM
-US
-ew
-eL
-dQ
-fk
-fk
-fE
-fK
-cM
-nE
-Pd
-cM
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(45,1,1) = {"
aa
@@ -16010,61 +12705,61 @@ an
an
an
an
-an
-an
-an
-an
-an
-an
-ab
-aj
-aj
-an
-an
-an
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-cM
-cM
-cM
-cM
-cM
-dZ
-ev
-dZ
-cM
-fm
-fk
-fF
-fk
-cM
-gX
-oZ
-cM
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(46,1,1) = {"
aa
@@ -16267,61 +12962,61 @@ aj
aj
aj
aj
-an
-an
-an
-an
-an
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-cR
-dZ
-ev
-dZ
-cM
-fn
-fv
-fG
-fL
-cM
-cM
-cM
-cM
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(47,1,1) = {"
aa
@@ -16524,61 +13219,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-cR
-ek
-eB
-eO
-cM
-cR
-cR
-cR
-cR
-cM
-ai
-ai
-ai
-aj
-ab
-aj
-aj
-ab
-ab
-aj
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(48,1,1) = {"
aa
@@ -16781,61 +13476,61 @@ aj
aj
aj
aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-cR
-cR
-eC
-cR
-cR
-ab
-ab
-ab
-ab
-ai
-ai
-ai
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ai
-ad
-ad
-ab
-ab
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(49,1,1) = {"
aa
@@ -17038,61 +13733,61 @@ aj
aj
ai
ai
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ai
-ai
-ai
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-ab
-cR
-eE
-cR
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ad
-ad
-ad
-ad
-ad
-ai
-ai
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(50,1,1) = {"
aa
@@ -17295,61 +13990,61 @@ ab
ab
ai
am
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-am
-ai
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-cR
-ev
-cR
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-ab
-ab
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ab
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(51,1,1) = {"
aa
@@ -17552,61 +14247,61 @@ ai
ai
am
am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-cR
-ev
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ab
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(52,1,1) = {"
aa
@@ -17809,61 +14504,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-aj
-aj
-ab
-ab
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-cR
-ev
-cR
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ad
-ad
-ad
-ad
-ad
-ad
-ad
-ab
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(53,1,1) = {"
aa
@@ -18066,61 +14761,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-aj
-ab
-ab
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-br
-vP
-br
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ad
-ad
-ai
-ad
-ab
-ab
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(54,1,1) = {"
aa
@@ -18323,61 +15018,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-Wp
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-br
-vP
-br
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(55,1,1) = {"
aa
@@ -18580,61 +15275,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-bN
-cj
-br
-ab
-ab
-aj
-aj
-aj
-ab
-br
-vP
-br
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(56,1,1) = {"
aa
@@ -18837,61 +15532,61 @@ ak
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-br
-bP
-br
-ab
-aj
-aj
-aj
-aj
-ab
-br
-eF
-br
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(57,1,1) = {"
aa
@@ -19094,61 +15789,61 @@ ak
ak
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-br
-br
-WE
-br
-br
-ab
-aj
-aj
-ab
-br
-br
-fy
-br
-br
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(58,1,1) = {"
aa
@@ -19351,61 +16046,61 @@ ak
ak
ak
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ai
-ai
-aj
-aj
-aj
-bq
-br
-bO
-ck
-cD
-br
-bq
-bq
-bq
-bq
-ns
-cH
-fU
-cD
-br
-bq
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(59,1,1) = {"
aa
@@ -19608,61 +16303,61 @@ ak
ak
ak
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-aj
-ab
-bq
-bC
-Gr
-bP
-TW
-cH
-cO
-do
-ck
-dJ
-CS
-cn
-vP
-bP
-eS
-bq
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(60,1,1) = {"
aa
@@ -19865,61 +16560,61 @@ ak
ak
ak
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-aj
-aj
-ab
-br
-bD
-bz
-ch
-co
-cy
-cy
-MX
-sV
-cy
-eg
-eq
-fX
-eP
-eT
-bq
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(61,1,1) = {"
aa
@@ -20122,61 +16817,61 @@ ak
ak
ak
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-aj
-aj
-ab
-ab
-br
-bE
-bQ
-cn
-cF
-cI
-cP
-cn
-Rn
-bP
-tg
-lB
-eD
-bP
-eU
-bq
-bq
-bq
-bq
-xc
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(62,1,1) = {"
aa
@@ -20379,61 +17074,61 @@ ak
ak
ak
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-ai
-ab
-bf
-bf
-bf
-bF
-bR
-bF
-bf
-cJ
-bq
-cZ
-dx
-dK
-tg
-bP
-eG
-bP
-eV
-br
-KS
-eV
-br
-ab
-ab
-ai
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(63,1,1) = {"
aa
@@ -20636,61 +17331,61 @@ ak
ak
ak
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ai
-ai
-ab
-bf
-bn
-bs
-bG
-bS
-ci
-bf
-cK
-bq
-bq
-Vz
-bq
-Vz
-bP
-eG
-bP
-UP
-pg
-RW
-UP
-rf
-ab
-ab
-ai
-ai
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(64,1,1) = {"
aa
@@ -20893,61 +17588,61 @@ ak
ak
ak
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-ab
-bg
-bo
-fA
-il
-bU
-cm
-bf
-cL
-bq
-da
-du
-dL
-cH
-Vk
-eG
-bP
-cH
-br
-Pr
-Qo
-br
-ab
-ab
-ab
-ai
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(65,1,1) = {"
aa
@@ -21150,61 +17845,61 @@ ak
ak
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-ab
-bg
-bo
-bt
-bH
-bV
-cq
-bf
-bq
-bq
-db
-bP
-bP
-bP
-bP
-eH
-cF
-eW
-bq
-bq
-bq
-bq
-xc
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(66,1,1) = {"
aa
@@ -21407,61 +18102,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-ab
-bf
-bp
-bu
-bI
-bW
-cr
-bf
-ad
-bq
-dc
-bP
-dM
-dW
-Ky
-eI
-bq
-eX
-bq
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(67,1,1) = {"
aa
@@ -21664,61 +18359,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-ab
-bf
-bf
-bf
-bg
-bX
-bg
-bf
-ai
-bq
-dd
-bP
-dN
-dX
-em
-eJ
-dV
-eY
-bq
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(68,1,1) = {"
aa
@@ -21921,61 +18616,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-aj
-aj
-ab
-ab
-ab
-bf
-bJ
-bY
-cs
-bf
-ai
-bq
-de
-dv
-bq
-dV
-en
-dV
-dV
-eY
-bq
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(69,1,1) = {"
aa
@@ -22178,61 +18873,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ai
-aj
-aj
-ab
-ab
-bf
-bK
-bW
-ct
-bf
-ai
-bq
-df
-dw
-dO
-dY
-eo
-dY
-dY
-eZ
-bq
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(70,1,1) = {"
aa
@@ -22435,61 +19130,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-ai
-ai
-aj
-aj
-ab
-bf
-bg
-WD
-bg
-bf
-ai
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(71,1,1) = {"
aa
@@ -22692,61 +19387,61 @@ am
am
am
am
-am
-am
-am
-am
-am
-am
-am
-am
-ai
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-bv
-ab
-ab
-ab
-bv
-ai
-ai
-ab
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(72,1,1) = {"
aa
@@ -22949,61 +19644,61 @@ am
am
am
am
-am
-am
-ai
-ai
-am
-am
-am
-ai
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-ab
-aj
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(73,1,1) = {"
aa
@@ -23206,61 +19901,61 @@ am
am
am
am
-am
-ai
-ab
-ab
-ai
-ai
-am
-ai
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(74,1,1) = {"
aa
@@ -23463,61 +20158,61 @@ am
am
am
am
-ai
-ab
-ab
-ab
-ai
-ab
-ai
-am
-ai
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-ab
-ab
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-aj
-aj
-aj
-aj
-ab
-ab
-ab
-aj
-aj
-aj
-aj
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
+aA
"}
(75,1,1) = {"
aa
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index ee4288d7fc..a0467cde6c 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -2925,6 +2925,13 @@
/obj/machinery/capture_the_flag/red,
/turf/open/floor/circuit/green/anim,
/area/ctf)
+"hH" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/computer/slot_machine,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"hI" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -6760,6 +6767,14 @@
},
/turf/open/floor/plasteel/dark,
/area/centcom/control)
+"px" = (
+/obj/structure/table,
+/obj/item/storage/backpack/duffelbag/med/surgery,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
"py" = (
/obj/machinery/smartfridge,
/turf/closed/indestructible{
@@ -6775,20 +6790,6 @@
},
/turf/open/floor/plasteel/dark,
/area/centcom/supplypod)
-"pE" = (
-/obj/machinery/plantgenes/seedvault,
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"pH" = (
/obj/structure/table/wood,
/obj/machinery/recharger,
@@ -6921,11 +6922,6 @@
},
/turf/open/floor/plasteel/dark,
/area/centcom/ferry)
-"pS" = (
-/obj/structure/table,
-/obj/item/stack/packageWrap,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"pU" = (
/obj/structure/sign/map/right{
pixel_y = -32
@@ -7906,6 +7902,14 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"sf" = (
+/obj/machinery/vending/wallmed{
+ name = "Emergency NanoMed";
+ pixel_y = 28;
+ use_power = 0
+ },
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
"si" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/beer{
@@ -8708,6 +8712,9 @@
/area/centcom/supplypod)
"tZ" = (
/obj/structure/chair/wood/normal,
+/obj/machinery/light{
+ dir = 8
+ },
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"uc" = (
@@ -9339,6 +9346,17 @@
},
/turf/open/floor/plasteel,
/area/syndicate_mothership)
+"vv" = (
+/obj/structure/closet,
+/obj/item/storage/backpack/duffelbag/med/surgery,
+/obj/machinery/iv_drip,
+/obj/item/roller,
+/obj/item/storage/firstaid/regular,
+/obj/item/reagent_containers/medspray/synthflesh,
+/obj/item/reagent_containers/medspray/synthflesh,
+/obj/item/reagent_containers/medspray/synthflesh,
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
"vw" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -9713,13 +9731,6 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/three)
-"wj" = (
-/obj/structure/closet/secure_closet/personal/cabinet{
- desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
- name = "Personal ID-Locked Closet"
- },
-/turf/open/floor/carpet/royalblue,
-/area/centcom/holding)
"wl" = (
/obj/structure/table/wood,
/obj/item/paicard,
@@ -10598,12 +10609,6 @@
/obj/effect/decal/cleanable/blood/splatter,
/turf/open/floor/grass,
/area/wizard_station)
-"yM" = (
-/obj/structure/table/wood/bar,
-/obj/structure/safe/floor,
-/obj/item/seeds/cherry/bomb,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"yN" = (
/obj/structure/table/reinforced,
/obj/item/paper/pamphlet/centcom/visitor_info,
@@ -10640,6 +10645,15 @@
/obj/item/kitchen/rollingpin,
/turf/open/floor/plasteel/cafeteria,
/area/syndicate_mothership)
+"yW" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/centcom/holding)
"yY" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/donut_box,
@@ -11049,6 +11063,12 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"zS" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/freezer,
+/area/centcom/holding)
"zT" = (
/turf/open/indestructible/boss/air,
/area/centcom/holding)
@@ -11345,6 +11365,10 @@
},
/turf/open/floor/plasteel,
/area/syndicate_mothership)
+"AE" = (
+/obj/machinery/vending/coffee,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"AG" = (
/obj/structure/ladder/unbreakable/binary/space,
/turf/open/indestructible/airblock,
@@ -11563,21 +11587,11 @@
/obj/machinery/mech_bay_recharge_port,
/turf/open/floor/plating,
/area/syndicate_mothership)
-"Bo" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder,
-/obj/item/reagent_containers/glass/beaker/large,
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
+"Bq" = (
+/obj/machinery/sleeper{
dir = 8
},
-/turf/open/indestructible/hotelwood,
+/turf/open/floor/plasteel/white,
/area/centcom/holding)
"Bs" = (
/obj/structure/table/wood,
@@ -13463,20 +13477,6 @@
/obj/item/instrument/guitar,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
-"Fb" = (
-/obj/structure/piano,
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
-"Fc" = (
-/obj/structure/sign/barsign{
- pixel_y = 32
- },
-/obj/structure/chair/stool,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"Fg" = (
/obj/structure/flora/grass/brown,
/obj/effect/light_emitter,
@@ -13485,18 +13485,9 @@
"Fh" = (
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
-"Fi" = (
-/obj/structure/chair/wood/wings{
- dir = 3
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
-"Fj" = (
-/obj/machinery/vending/cigarette,
-/turf/open/indestructible/hotelwood,
+"Fl" = (
+/obj/structure/bedsheetbin/towel,
+/turf/open/floor/plasteel/white,
/area/centcom/holding)
"Fm" = (
/obj/machinery/shower{
@@ -13784,6 +13775,7 @@
/obj/structure/window/reinforced{
dir = 4
},
+/obj/structure/table/wood,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"FX" = (
@@ -14409,6 +14401,24 @@
},
/turf/open/floor/plasteel/white,
/area/tdome/tdomeobserve)
+"Hj" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/piano,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
+"Hk" = (
+/obj/structure/table/wood,
+/obj/item/camera/detective{
+ desc = "A polaroid camera with extra capacity for social media marketing.";
+ name = "Professional camera"
+ },
+/obj/item/camera_film,
+/obj/item/paper_bin,
+/obj/item/pen/fountain,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Hm" = (
/obj/structure/flora/ausbushes/fernybush,
/obj/structure/flora/ausbushes/ppflowers,
@@ -14747,24 +14757,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
-"HQ" = (
-/obj/structure/sink/kitchen{
- desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
- name = "sink";
- pixel_y = 28
- },
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"HR" = (
/obj/structure/sink{
dir = 4;
@@ -15769,6 +15761,12 @@
},
/turf/open/floor/plasteel/dark,
/area/tdome/tdomeadmin)
+"JV" = (
+/obj/structure/table,
+/obj/item/stack/packageWrap,
+/obj/item/reagent_containers/glass/beaker,
+/turf/open/floor/plasteel/cafeteria,
+/area/centcom/holding)
"JX" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/stripes/line{
@@ -15826,10 +15824,9 @@
/area/tdome/tdomeadmin)
"Kf" = (
/obj/structure/closet/secure_closet/personal/cabinet,
-/obj/item/lighter,
-/obj/item/stack/sheet/mineral/wood{
- amount = 10
- },
+/obj/item/reagent_containers/rag/towel,
+/obj/item/reagent_containers/rag/towel,
+/obj/item/reagent_containers/rag/towel,
/turf/open/floor/carpet/red,
/area/centcom/holding)
"Kg" = (
@@ -15848,6 +15845,16 @@
},
/turf/open/floor/plasteel,
/area/tdome/tdomeadmin)
+"Ki" = (
+/obj/structure/closet/secure_closet/personal/cabinet{
+ desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
+ name = "Personal ID-Locked Closet"
+ },
+/obj/item/reagent_containers/rag/towel,
+/obj/item/reagent_containers/rag/towel,
+/obj/item/reagent_containers/rag/towel,
+/turf/open/floor/carpet/royalblue,
+/area/centcom/holding)
"Kj" = (
/obj/machinery/door/airlock/external{
name = "Backup Emergency Escape Shuttle"
@@ -16202,6 +16209,7 @@
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/table/wood,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"KU" = (
@@ -16273,6 +16281,20 @@
},
/turf/open/floor/mineral/titanium/blue,
/area/centcom/evac)
+"Lk" = (
+/obj/structure/table,
+/obj/item/storage/box/bodybags,
+/obj/item/storage/box/bodybags,
+/obj/item/storage/box/bodybags,
+/obj/item/storage/box/bodybags,
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
+"Lm" = (
+/obj/machinery/shower{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/centcom/holding)
"Ln" = (
/obj/structure/toilet{
dir = 4
@@ -16285,6 +16307,11 @@
},
/turf/open/floor/mineral/titanium/blue,
/area/centcom/evac)
+"Lr" = (
+/obj/structure/mopbucket,
+/obj/item/mop,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Ls" = (
/obj/docking_port/stationary{
dir = 4;
@@ -16570,22 +16597,6 @@
},
/turf/open/indestructible/boss/air,
/area/centcom/holding)
-"Mu" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"Mv" = (
/obj/structure/table/reinforced,
/obj/item/storage/fancy/donut_box,
@@ -16616,6 +16627,16 @@
},
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
+"Mz" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/paperframes/fifty,
+/obj/item/stack/sheet/paperframes/fifty,
+/obj/item/storage/fancy/candle_box,
+/obj/item/storage/fancy/candle_box,
+/obj/item/storage/fancy/candle_box,
+/obj/item/storage/box/lights/mixed,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"MB" = (
/turf/open/indestructible/binary,
/area/fabric_of_reality)
@@ -16692,10 +16713,6 @@
/obj/item/reagent_containers/food/condiment/enzyme,
/turf/open/floor/plasteel/cafeteria,
/area/syndicate_mothership)
-"MT" = (
-/obj/machinery/processor,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"MU" = (
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -16749,44 +16766,24 @@
},
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
-"Nm" = (
-/obj/structure/closet/crate,
-/obj/item/vending_refill/autodrobe,
-/obj/item/stack/sheet/paperframes/fifty,
-/obj/item/stack/sheet/paperframes/fifty,
-/obj/item/storage/fancy/candle_box,
-/obj/item/storage/fancy/candle_box,
-/obj/item/storage/fancy/candle_box,
-/obj/item/storage/box/lights/mixed,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
-"Nn" = (
-/obj/structure/closet/secure_closet/hydroponics{
- locked = 0
- },
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
+"Nt" = (
+/obj/structure/bedsheetbin/color,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Nu" = (
/turf/open/floor/wood,
/area/syndicate_mothership)
-"Nv" = (
-/obj/structure/table,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Nw" = (
/obj/machinery/recharge_station,
/turf/open/floor/plasteel/white,
/area/centcom/holding)
+"Nx" = (
+/obj/machinery/processor,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/centcom/holding)
"Nz" = (
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -16796,16 +16793,11 @@
},
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/two)
-"ND" = (
-/obj/structure/closet,
-/obj/item/storage/backpack/duffelbag/med/surgery,
-/obj/machinery/iv_drip,
-/obj/item/roller,
-/obj/item/storage/firstaid/regular,
-/obj/item/reagent_containers/medspray/synthflesh,
-/obj/item/reagent_containers/medspray/synthflesh,
-/obj/item/reagent_containers/medspray/synthflesh,
-/turf/open/indestructible/hotelwood,
+"NE" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
/area/centcom/holding)
"NF" = (
/obj/structure/ladder/unbreakable/binary,
@@ -16822,21 +16814,9 @@
},
/turf/open/floor/plasteel,
/area/centcom/control)
-"NJ" = (
-/obj/structure/table,
-/obj/item/book/manual/hydroponics_pod_people,
-/obj/item/seeds/pumpkin/blumpkin,
-/obj/item/paper/guides/jobs/hydroponics,
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
+"NN" = (
+/obj/item/storage/box/bodybags,
+/obj/item/storage/box/bodybags,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"NT" = (
@@ -16863,6 +16843,13 @@
/obj/machinery/vending/cola/sodie,
/turf/open/floor/plasteel,
/area/syndicate_mothership)
+"NZ" = (
+/obj/structure/table/wood/bar,
+/obj/structure/safe/floor,
+/obj/item/seeds/cherry/bomb,
+/obj/item/key/janitor,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Oa" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
@@ -16933,12 +16920,26 @@
name = "Lock Control";
pixel_y = -28
},
+/mob/living/simple_animal/bot/cleanbot,
/turf/open/floor/plasteel/white,
/area/centcom/holding)
"Or" = (
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/two)
+"Os" = (
+/obj/structure/chair/wood/normal{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
+"Ot" = (
+/obj/machinery/washing_machine,
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"Ou" = (
/turf/closed/indestructible/fakedoor{
name = "Cold Storage"
@@ -17009,6 +17010,10 @@
/obj/structure/mecha_wreckage/mauler,
/turf/open/floor/plasteel/dark,
/area/syndicate_mothership)
+"OT" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
"OU" = (
/obj/item/clothing/under/jabroni,
/obj/item/clothing/under/geisha,
@@ -17023,13 +17028,36 @@
},
/turf/open/floor/wood,
/area/syndicate_mothership)
+"OW" = (
+/obj/structure/bedsheetbin/towel,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"OZ" = (
/obj/effect/turf_decal/delivery,
/turf/open/floor/plating,
/area/syndicate_mothership)
-"Pa" = (
-/obj/machinery/washing_machine,
-/turf/open/floor/plasteel/white,
+"Pc" = (
+/obj/structure/sink/kitchen{
+ desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
+ name = "sink";
+ pixel_y = 28
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/item/paper/guides/jobs/hydroponics,
+/obj/item/book/manual/hydroponics_pod_people,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Pg" = (
/obj/machinery/light{
@@ -17059,12 +17087,6 @@
},
/turf/open/indestructible/boss/air,
/area/centcom/holding)
-"Pq" = (
-/obj/structure/urinal{
- pixel_y = 28
- },
-/turf/open/floor/plasteel/white,
-/area/centcom/holding)
"Pr" = (
/obj/structure/table,
/obj/item/book/manual/chef_recipes,
@@ -17088,12 +17110,6 @@
/obj/machinery/light/small,
/turf/open/floor/wood,
/area/syndicate_mothership)
-"Px" = (
-/obj/structure/mineral_door/paperframe{
- name = "Arcade"
- },
-/turf/open/floor/wood,
-/area/centcom/holding)
"PA" = (
/obj/structure/window/reinforced{
dir = 4
@@ -17158,6 +17174,11 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"PQ" = (
+/obj/structure/closet/secure_closet,
+/obj/item/coin/silver,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"PS" = (
/obj/machinery/computer/shuttle/syndicate/recall,
/obj/effect/turf_decal/tile/bar,
@@ -17235,6 +17256,10 @@
"Qo" = (
/turf/open/floor/mineral/plastitanium/red,
/area/centcom/evac)
+"Qp" = (
+/obj/structure/bedsheetbin,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Qq" = (
/turf/open/floor/plasteel/freezer,
/area/syndicate_mothership)
@@ -17253,6 +17278,32 @@
},
/turf/open/floor/wood,
/area/centcom/holding)
+"Qw" = (
+/turf/open/floor/plasteel/freezer,
+/area/centcom/holding)
+"Qy" = (
+/obj/structure/closet/crate/bin,
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
+"Qz" = (
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"QA" = (
/obj/machinery/deepfryer,
/turf/open/floor/plasteel/cafeteria,
@@ -17283,30 +17334,12 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
-"QH" = (
-/obj/machinery/chem_master/condimaster{
- desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments.";
- name = "BrewMaster 2199";
- pixel_x = -4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
+"QJ" = (
+/obj/structure/sign/barsign{
+ pixel_y = 32
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
-"QI" = (
-/obj/structure/toilet{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/centcom/holding)
"QK" = (
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -17379,20 +17412,6 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
-"Rd" = (
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"Re" = (
/obj/structure/mineral_door/paperframe,
/turf/open/floor/wood,
@@ -17489,6 +17508,31 @@
},
/turf/open/floor/holofloor,
/area/holodeck/rec_center/basketball)
+"RK" = (
+/obj/structure/closet/crate/freezer/blood,
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
+"RL" = (
+/obj/machinery/vending/cola,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
+"RN" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder,
+/obj/item/reagent_containers/glass/beaker/large,
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/machinery/light,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"RO" = (
/obj/machinery/shower{
dir = 1
@@ -17579,6 +17623,13 @@
/obj/item/toy/nuke,
/turf/open/floor/wood,
/area/syndicate_mothership)
+"Sj" = (
+/obj/machinery/vending/autodrobe/all_access{
+ extended_inventory = 1
+ },
+/obj/machinery/light,
+/turf/open/floor/wood,
+/area/centcom/holding)
"So" = (
/obj/structure/chair/wood/wings{
dir = 4
@@ -17672,21 +17723,16 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/space/basic,
/area/centcom/supplypod)
+"SR" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja7";
+ name = "Dorm 7"
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"ST" = (
/turf/open/floor/mineral/titanium/blue,
/area/centcom/holding)
-"SU" = (
-/obj/structure/table/wood,
-/obj/item/camera/detective{
- desc = "A polaroid camera with extra capacity for social media marketing.";
- name = "Professional camera"
- },
-/obj/item/camera_film,
-/obj/item/wallframe/newscaster,
-/obj/item/paper_bin,
-/obj/item/pen/fountain,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"SV" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -17720,10 +17766,6 @@
},
/turf/open/floor/wood,
/area/centcom/holding)
-"Tb" = (
-/obj/structure/closet/crate/freezer/blood,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding)
"Tc" = (
/obj/machinery/button/door{
id = "Ninja2";
@@ -17734,6 +17776,12 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
+"Tf" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/centcom/holding)
"Tj" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -17765,6 +17813,16 @@
/obj/structure/closet/chefcloset,
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
+"Tt" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/structure/window/reinforced/tinted{
+ icon_state = "twindow";
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
"Tu" = (
/obj/structure/flora/ausbushes/fernybush,
/obj/structure/flora/ausbushes/fullgrass,
@@ -17790,6 +17848,21 @@
/obj/item/clothing/head/helmet/space/plasmaman,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
+"Tx" = (
+/obj/machinery/plantgenes/seedvault,
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/structure/table,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Tz" = (
/obj/effect/light_emitter,
/turf/open/floor/plating/asteroid/snow/airless,
@@ -17804,6 +17877,10 @@
/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
+"TC" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/freezer,
+/area/centcom/holding)
"TF" = (
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -17813,12 +17890,16 @@
},
/turf/open/floor/holofloor,
/area/holodeck/rec_center/basketball)
-"TK" = (
-/obj/structure/table/wood/bar,
-/obj/structure/mirror{
- pixel_y = 28
+"TG" = (
+/obj/machinery/light{
+ dir = 8
},
-/turf/open/indestructible/hotelwood,
+/obj/structure/window/reinforced/tinted{
+ icon_state = "twindow";
+ dir = 1
+ },
+/obj/machinery/washing_machine,
+/turf/open/floor/plasteel/white,
/area/centcom/holding)
"TM" = (
/mob/living/simple_animal/bot/medbot{
@@ -17845,12 +17926,19 @@
},
/turf/open/floor/plasteel/freezer,
/area/syndicate_mothership)
-"Ud" = (
-/obj/effect/landmark/holding_facility,
+"TY" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/soap,
+/obj/item/soap,
+/obj/item/soap,
+/obj/item/janiupgrade,
+/obj/vehicle/ridden/janicart,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
-"Uf" = (
-/obj/structure/closet/secure_closet,
+"Ud" = (
+/obj/effect/landmark/holding_facility,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ug" = (
@@ -17879,6 +17967,25 @@
},
/turf/open/floor/plasteel,
/area/syndicate_mothership)
+"Uk" = (
+/obj/structure/closet/crate,
+/obj/item/vending_refill/autodrobe,
+/obj/item/vending_refill/autodrobe,
+/obj/item/vending_refill/boozeomat,
+/obj/item/vending_refill/boozeomat,
+/obj/item/vending_refill/cigarette,
+/obj/item/vending_refill/cigarette,
+/obj/item/vending_refill/clothing,
+/obj/item/vending_refill/coffee,
+/obj/item/vending_refill/coffee,
+/obj/item/vending_refill/cola,
+/obj/item/vending_refill/cola,
+/obj/item/vending_refill/wallmed,
+/obj/item/vending_refill/wallmed,
+/obj/item/vending_refill/snack,
+/obj/item/vending_refill/snack,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Ul" = (
/obj/structure/table,
/obj/machinery/microwave{
@@ -17916,6 +18023,17 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
+"Uq" = (
+/obj/structure/table/wood,
+/obj/item/soap,
+/obj/item/soap,
+/obj/item/soap,
+/obj/item/lightreplacer,
+/obj/item/lightreplacer,
+/obj/item/storage/bag/trash,
+/obj/item/storage/bag/trash,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Ur" = (
/turf/open/floor/carpet/royalblue,
/area/centcom/holding)
@@ -17940,6 +18058,11 @@
/obj/effect/light_emitter,
/turf/open/floor/plating/asteroid/snow/airless,
/area/syndicate_mothership)
+"Uz" = (
+/obj/structure/table,
+/obj/machinery/dish_drive,
+/turf/open/floor/plasteel/cafeteria,
+/area/centcom/holding)
"UC" = (
/obj/machinery/vending/cola,
/turf/open/floor/plasteel,
@@ -17949,6 +18072,9 @@
desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
name = "Personal ID-Locked Closet"
},
+/obj/item/coin/silver,
+/obj/item/coin/silver,
+/obj/item/coin/silver,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"UE" = (
@@ -17971,6 +18097,17 @@
},
/turf/open/floor/plasteel,
/area/centcom/supplypod)
+"UN" = (
+/obj/structure/mirror{
+ pixel_y = 28
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/mob/living/simple_animal/bot/cleanbot,
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"UO" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
@@ -17994,6 +18131,10 @@
},
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/one)
+"US" = (
+/obj/machinery/gibber,
+/turf/open/floor/plasteel/cafeteria,
+/area/centcom/holding)
"UT" = (
/obj/structure/chair/wood/wings{
dir = 1
@@ -18061,13 +18202,6 @@
/obj/structure/window/reinforced/tinted,
/turf/open/floor/plasteel/freezer,
/area/syndicate_mothership)
-"Vm" = (
-/obj/machinery/gibber,
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Vt" = (
/obj/item/paper/fluff/stations/centcom/disk_memo,
/obj/structure/noticeboard{
@@ -18232,11 +18366,26 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
+"Wz" = (
+/obj/structure/table,
+/obj/item/storage/backpack/duffelbag/med/surgery,
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
"WC" = (
/obj/structure/table/reinforced,
/obj/item/pen,
/turf/open/floor/mineral/plastitanium/red,
/area/centcom/evac)
+"WD" = (
+/obj/structure/mopbucket,
+/obj/item/mop,
+/obj/structure/sink/kitchen{
+ desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
+ name = "sink";
+ pixel_y = 28
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"WE" = (
/obj/machinery/vending/kink{
extended_inventory = 1
@@ -18321,6 +18470,13 @@
/obj/machinery/processor,
/turf/open/floor/plasteel/cafeteria,
/area/syndicate_mothership)
+"WY" = (
+/obj/machinery/vending/cigarette,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Xd" = (
/obj/structure/flora/ausbushes/fernybush,
/obj/structure/flora/ausbushes/fullgrass,
@@ -18332,6 +18488,19 @@
/obj/machinery/vending/autodrobe,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
+"Xf" = (
+/obj/structure/table/wood/bar,
+/obj/structure/mirror{
+ pixel_y = 28
+ },
+/obj/item/lightreplacer,
+/obj/item/lightreplacer,
+/obj/item/lightreplacer,
+/obj/item/storage/bag/trash,
+/obj/item/storage/bag/trash,
+/obj/item/storage/bag/trash,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Xg" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -18443,6 +18612,26 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
+"XS" = (
+/obj/structure/closet/secure_closet/hydroponics{
+ locked = 0
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/item/seeds/ambrosia/gaia,
+/obj/item/seeds/ambrosia/gaia,
+/obj/item/seeds/pumpkin/blumpkin,
+/obj/item/seeds/pumpkin/blumpkin,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"XT" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/sashimi,
@@ -18515,6 +18704,10 @@
/obj/structure/dresser,
/turf/open/floor/plasteel/dark,
/area/syndicate_mothership)
+"Yj" = (
+/obj/structure/table/optable,
+/turf/open/floor/plasteel/white,
+/area/centcom/holding)
"Ym" = (
/obj/machinery/computer/arcade/orion_trail,
/turf/open/indestructible/hotelwood,
@@ -18580,11 +18773,6 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
-"YQ" = (
-/obj/structure/table,
-/obj/item/reagent_containers/glass/beaker,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"YU" = (
/obj/structure/window/reinforced{
dir = 1
@@ -18636,12 +18824,6 @@
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
/area/syndicate_mothership)
-"Zu" = (
-/obj/machinery/vending/autodrobe/all_access{
- extended_inventory = 1
- },
-/turf/open/floor/wood,
-/area/centcom/holding)
"Zw" = (
/obj/structure/bed,
/obj/item/bedsheet/syndie,
@@ -18705,6 +18887,30 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/syndicate_mothership)
+"ZL" = (
+/obj/structure/closet,
+/obj/item/stack/sheet/mineral/wood/fifty,
+/obj/item/stack/tile/wood{
+ amount = 24
+ },
+/obj/item/stack/tile/carpet/black/fifty,
+/obj/item/stack/tile/carpet/blackred/fifty,
+/obj/item/stack/tile/carpet/blue/fifty,
+/obj/item/stack/tile/carpet/cyan/fifty,
+/obj/item/stack/tile/carpet/fifty,
+/obj/item/stack/tile/carpet/green/fifty,
+/obj/item/stack/tile/carpet/monochrome/fifty,
+/obj/item/stack/tile/carpet/orange/fifty,
+/obj/item/stack/tile/carpet/purple/fifty,
+/obj/item/stack/tile/carpet/red/fifty,
+/obj/item/stack/tile/carpet/royalblack/fifty,
+/obj/item/stack/tile/carpet/royalblue/fifty,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
+"ZN" = (
+/obj/machinery/vending/snack,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"ZP" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -18717,6 +18923,10 @@
"ZQ" = (
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/two)
+"ZR" = (
+/obj/structure/bed/dogbed,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"ZT" = (
/mob/living/simple_animal/cow,
/turf/open/floor/grass,
@@ -18752,6 +18962,27 @@
},
/turf/open/floor/plasteel,
/area/centcom/supply)
+"ZZ" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/machinery/chem_master/condimaster{
+ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments.";
+ name = "BrewMaster 2199";
+ pixel_x = -4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
(1,1,1) = {"
aa
@@ -42833,8 +43064,6 @@ aa
aa
aa
aa
-aa
-aa
Nd
Nd
Nd
@@ -42872,13 +43101,15 @@ Nd
Nd
Nd
Nd
-aa
Nd
Nd
Nd
Nd
Nd
-aa
+Nd
+Nd
+Nd
+Nd
aa
aa
aa
@@ -43090,19 +43321,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
-PO
+SW
PO
PO
Sw
PO
PO
PO
+PO
Nd
-QI
-VA
+Tt
+Tt
+TG
Op
Nd
Rm
@@ -43116,27 +43347,27 @@ NT
UV
CV
Sd
-NT
-Sd
-Sd
-Sd
-Sd
-Sd
-Sd
+Nd
+OW
+Ln
+Nd
+Lm
+Lm
+Lm
+Nd
+PQ
Sd
+ZR
+Nd
+RL
+Yo
+Uq
Nd
VL
Ww
-Sd
+NN
Nd
aa
-Nd
-Uf
-Sd
-Sd
-Nd
-aa
-aa
aa
aa
aa
@@ -43347,10 +43578,9 @@ aa
aa
aa
aa
-aa
-aa
Nd
-HQ
+Pc
+PY
PY
PY
PY
@@ -43358,7 +43588,8 @@ PY
PY
PY
Nd
-Pq
+ZW
+ZW
ZW
ZW
Za
@@ -43373,26 +43604,26 @@ NT
RQ
Sd
Sd
-NT
-Sd
-Sd
-Sd
-Sd
-Sd
-Sd
-Sd
Nd
-Gs
-Sd
-HH
+UN
+ST
Nd
-aa
+zS
+Qw
+TC
Nd
MJ
Sd
Sd
Nd
-aa
+AE
+Sd
+Ph
+Nd
+Gs
+Sd
+HH
+Nd
aa
aa
aa
@@ -43604,18 +43835,18 @@ aa
aa
aa
aa
-aa
-aa
Nd
-Mu
-QH
-Bo
-vs
-Rj
-PI
-Rd
+ZZ
+PY
+PY
+PY
+PY
+PY
+PY
+RN
Nd
-Pa
+SB
+ZW
ZW
ZW
Nd
@@ -43630,26 +43861,26 @@ NT
UV
CV
Sd
-NT
-Sd
-MR
-Sd
-Sd
-Sd
-MR
-Sd
Nd
-Sd
-Sd
-Sd
+Ot
+ST
Nd
-aa
+Tf
+Qw
+Tf
Nd
ma
Sd
Sd
Nd
-aa
+ZN
+Sd
+Sd
+Nd
+ZL
+Sd
+Lr
+Nd
aa
aa
aa
@@ -43861,19 +44092,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
+PI
PY
PY
PY
PY
PY
PY
-PY
+Rj
Nd
SB
-ZW
+NE
+Fl
Nw
Nd
Sd
@@ -43884,29 +44115,29 @@ Sd
Tu
Vu
Nd
-Gs
+hH
Sd
Sd
Nd
Nd
+Wl
Nd
Nd
-Px
-Nd
-Nd
-Nd
-Nd
-Nd
-Ox
-Nd
-Nd
+Wl
Nd
Nd
Nd
yS
Nd
Nd
-aa
+WD
+Sd
+HH
+Nd
+Nd
+Ox
+Nd
+Nd
aa
aa
aa
@@ -44118,16 +44349,16 @@ aa
aa
aa
aa
-aa
-aa
Nd
-pE
-NJ
-SW
+Tx
+PY
+PY
PY
Um
-Nn
+XS
PY
+vs
+Nd
Nd
Nd
Nd
@@ -44146,19 +44377,20 @@ CV
Sd
NT
Sd
-Yo
Sd
Sd
Sd
-Yo
+Sd
Sd
Nd
Sd
Sd
-Yo
Sd
Sd
-Yo
+Sd
+Sd
+Sd
+Sd
Sd
Sd
WE
@@ -44168,7 +44400,6 @@ aa
aa
aa
aa
-aa
KK
KN
KS
@@ -44375,8 +44606,6 @@ aa
aa
aa
aa
-aa
-aa
Nd
Nd
Nd
@@ -44386,6 +44615,8 @@ Nd
Nd
py
Nd
+Nd
+Yh
Sd
Yo
Sd
@@ -44408,7 +44639,6 @@ Sd
Sd
Sd
Sd
-Sd
Qu
Sd
Sd
@@ -44418,14 +44648,15 @@ Sd
Sd
Sd
Sd
-Zu
+Sd
+Sd
+Sj
Nd
aa
aa
aa
aa
aa
-aa
KH
KH
KS
@@ -44632,18 +44863,18 @@ aa
aa
aa
aa
-aa
-aa
Nd
-PL
+Lr
Sd
Yo
Sd
Sd
Sd
Sd
-Yh
Sd
+Sd
+Sd
+Nd
Nd
Nd
Nd
@@ -44663,7 +44894,6 @@ Sd
MR
Sd
Sd
-Sd
MR
Sd
Nd
@@ -44675,6 +44905,8 @@ Sd
Sd
Sd
Sd
+Sd
+Sd
PM
Nd
aa
@@ -44683,7 +44915,6 @@ aa
aa
aa
aa
-aa
KH
KU
Lb
@@ -44889,19 +45120,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
Tq
Sd
MG
YN
Nd
-Vm
+US
+Fh
Fh
zV
Nd
Nd
+Hj
Fa
KT
Sd
@@ -44928,6 +45159,7 @@ Nd
Nd
Nd
Rq
+Sd
HH
Nd
Nd
@@ -44939,7 +45171,6 @@ aa
aa
aa
aa
-aa
KL
KO
KV
@@ -45146,19 +45377,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
-Nf
+ZL
Sd
Rh
Mm
Nd
-MT
+Nx
+Fh
Fh
Yu
Nd
-Fb
+AE
+CV
Sd
KT
Sd
@@ -45186,9 +45417,10 @@ SY
Nd
Sd
Sd
+Sd
Nd
SY
-Ri
+Os
UD
Nd
aa
@@ -45197,7 +45429,6 @@ aa
aa
aa
aa
-aa
KH
KW
Lb
@@ -45403,19 +45634,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
+ZN
Sd
-Sd
-Rh
+yW
ZT
Nd
Pr
Fh
+Fh
QW
Nd
-Fc
+QJ
+Sd
Sd
KT
Sd
@@ -45437,16 +45668,17 @@ Sd
Sd
Sd
Nd
-Gs
+Sd
Sd
Sd
lS
Sd
Sd
+Sd
RP
Sd
Sd
-HH
+Sd
Nd
aa
aa
@@ -45454,7 +45686,6 @@ aa
aa
aa
aa
-aa
KP
KX
Lb
@@ -45660,8 +45891,6 @@ aa
aa
aa
aa
-aa
-aa
Nd
Nd
XL
@@ -45670,9 +45899,11 @@ Nd
Nd
JE
Fh
-YQ
+Fh
+Vv
Nd
-MR
+Sd
+Sd
Sd
FW
Sd
@@ -45700,6 +45931,7 @@ Ya
Nd
Sd
Sd
+Sd
Nd
XD
Sd
@@ -45711,7 +45943,6 @@ aa
aa
aa
aa
-aa
KH
KY
Lb
@@ -45917,19 +46148,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
-yM
+NZ
Sd
Yo
-Sd
+PL
Nd
SG
Fh
-Vv
-Nd
-Nd
+Fh
+Fh
+Wl
+Sd
+MR
Sd
FX
Sd
@@ -45957,6 +46188,7 @@ Nd
Nd
Sd
Sd
+Sd
Nd
Nd
Nd
@@ -45967,7 +46199,6 @@ aa
aa
aa
aa
-aa
KM
KO
KV
@@ -46174,18 +46405,18 @@ aa
aa
aa
aa
-aa
-aa
Nd
OG
Sd
Sd
-Sd
+Tq
Nd
zX
Fh
-pS
+Fh
+JV
Nd
+Dl
Nd
Nd
Nd
@@ -46214,9 +46445,10 @@ SY
Nd
Sd
Sd
+Sd
Nd
SY
-Ri
+Os
UD
Nd
aa
@@ -46225,7 +46457,6 @@ aa
aa
aa
aa
-aa
KH
KU
Lb
@@ -46431,18 +46662,18 @@ aa
aa
aa
aa
-aa
-aa
Nd
-TK
-Sd
+Xf
Sd
Sd
+Nf
Nd
QA
Fh
-Nv
+Fh
+Uz
ED
+Sd
Yo
Yf
UE
@@ -46454,7 +46685,7 @@ Sd
Sd
Tn
NT
-Ro
+Sd
Ud
Ud
NT
@@ -46465,23 +46696,23 @@ zT
MM
TM
Nd
-Gs
+Sd
Sd
Sd
uh
Sd
Sd
+Sd
zW
Sd
Sd
-HH
+Sd
Nd
aa
aa
aa
aa
aa
-aa
KH
KH
KS
@@ -46688,19 +46919,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
YL
Sd
Sd
-Sd
+Uk
Nd
Xo
Fh
Fh
+Fh
py
Sd
+Sd
SY
UE
Sd
@@ -46711,7 +46942,7 @@ Sd
Sd
GY
NT
-Tw
+Sd
Ud
Ud
NT
@@ -46728,6 +46959,7 @@ Tc
Nd
Sd
Sd
+Sd
Nd
AC
Sd
@@ -46738,7 +46970,6 @@ aa
aa
aa
aa
-aa
KI
KN
KS
@@ -46945,19 +47176,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
Xe
Sd
Sd
-Sd
+ZL
Nd
TB
Fh
Fh
+Fh
BV
Sd
+Sd
XT
UE
Sd
@@ -46984,6 +47215,7 @@ Nd
Nd
Nd
Rq
+Sd
HH
Nd
Nd
@@ -46995,7 +47227,6 @@ aa
aa
aa
aa
-aa
KJ
KN
KZ
@@ -47202,19 +47433,19 @@ aa
aa
aa
aa
-aa
-aa
Nd
-Gs
+TY
Sd
Sd
Sd
Nd
Vz
Fh
+Fh
YJ
QT
Sd
+Sd
SY
UE
Sd
@@ -47242,6 +47473,7 @@ YO
Nd
Sd
Sd
+Sd
Nd
RX
Xw
@@ -47252,7 +47484,6 @@ aa
aa
aa
aa
-aa
KK
KN
KQ
@@ -47459,8 +47690,6 @@ aa
aa
aa
aa
-aa
-aa
Nd
Bs
Ri
@@ -47470,8 +47699,10 @@ XL
Fh
Fh
Fh
+Fh
XL
Sd
+Sd
XX
UE
Sd
@@ -47499,6 +47730,7 @@ Sd
SZ
Sd
Sd
+Sd
Ws
Sd
Sd
@@ -47509,7 +47741,6 @@ aa
aa
aa
aa
-aa
KH
KH
KH
@@ -47716,22 +47947,22 @@ aa
aa
aa
aa
-aa
-aa
Nd
-SU
+Hk
Sd
MR
-Nm
+Mz
Nd
SN
pV
+pV
Tr
Nd
-Fj
+WY
+Ph
Nd
Nd
-Fi
+Rm
Tn
UT
Hm
@@ -47739,14 +47970,14 @@ Sd
Sd
GY
NT
-Sd
+Tw
Ms
-Sd
+Ro
NT
vt
Mx
-ND
-Tb
+Sd
+Sd
Uh
tW
Nd
@@ -47755,11 +47986,12 @@ Of
QF
Nd
Sd
-sa
+Sd
+Sd
Nd
WN
Ur
-wj
+Ki
Nd
aa
aa
@@ -47792,7 +48024,6 @@ aa
aa
aa
aa
-aa
"}
(114,1,1) = {"
aa
@@ -47973,8 +48204,6 @@ aa
aa
aa
aa
-aa
-aa
Nd
Nd
Nd
@@ -48004,6 +48233,8 @@ Nd
Nd
Nd
Nd
+Sd
+Sd
Nd
Nd
Nd
@@ -48011,8 +48242,9 @@ Kf
WV
Sd
Nd
-Nd
-Nd
+sa
+Sd
+Sd
Nd
Sd
zY
@@ -48049,7 +48281,6 @@ aa
aa
aa
aa
-aa
"}
(115,1,1) = {"
aa
@@ -48256,20 +48487,21 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+vv
+VA
+ZW
+ZW
+px
+Lk
Nd
Nd
Nd
QC
Nd
-aa
-aa
+Nd
+SR
+Nd
Nd
QC
Nd
@@ -48306,7 +48538,6 @@ aa
aa
aa
aa
-aa
"}
(116,1,1) = {"
aa
@@ -48513,20 +48744,21 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+sf
+ZW
+ZW
+ZW
+ZW
+OT
Nd
Ln
ST
ST
Nd
-aa
-aa
+Qp
+Sd
+Nt
Nd
ST
ST
@@ -48563,7 +48795,6 @@ aa
aa
aa
aa
-aa
"}
(117,1,1) = {"
aa
@@ -48770,20 +49001,21 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Bq
+RK
+Qy
+Yj
+ZW
+Wz
Nd
xO
QN
ZE
Nd
-aa
-aa
+Qp
+Qz
+Nt
Nd
ZE
QN
@@ -48820,7 +49052,6 @@ aa
aa
aa
aa
-aa
"}
(118,1,1) = {"
aa
@@ -49027,26 +49258,26 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
Nd
Nd
Nd
Nd
Nd
-aa
-aa
Nd
Nd
Nd
Nd
Nd
-aa
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
+Nd
aa
aa
aa
diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index 4052dce40d..6913473e88 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -136,8 +136,12 @@
#define ORGAN_SLOT_TESTICLES "testicles"
#define ORGAN_SLOT_BREASTS "breasts"
-
////organ defines
#define STANDARD_ORGAN_THRESHOLD 100
#define STANDARD_ORGAN_HEALING 0.001
-#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes
\ No newline at end of file
+#define STANDARD_ORGAN_DECAY 0.00222 //designed to fail organs when left to decay for ~15 minutes
+
+#define G_MALE 1
+#define G_FEMALE 2
+#define G_PLURAL 3
+#define G_NEUTER 4
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 456582c6a5..28554dbd99 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -254,6 +254,18 @@
#define PIPING_CARDINAL_AUTONORMALIZE (1<<3) //north/south east/west doesn't matter, auto normalize on build.
//HELPERS
+#define PIPING_LAYER_SHIFT(T, PipingLayer) \
+ if(T.dir & NORTH || T.dir & SOUTH) { \
+ T.pixel_x = (PipingLayer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X;\
+ } \
+ if(T.dir & WEST || T.dir & EAST) { \
+ T.pixel_y = (PipingLayer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y;\
+ }
+
+#define PIPING_LAYER_DOUBLE_SHIFT(T, PipingLayer) \
+ T.pixel_x = (PipingLayer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X;\
+ T.pixel_y = (PipingLayer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y;
+
#define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity())
#define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that
once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */
diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm
index 08be709c85..7e5d318214 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -123,6 +123,7 @@
#define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new" //from base of turf/New(): (turf/source, direction)
// /atom/movable signals
+#define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move" //from base of atom/movable/Moved(): (/atom)
#define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir)
#define COMSIG_MOVABLE_CROSS "movable_cross" //from base of atom/movable/Cross(): (/atom/movable)
#define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable)
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index d5e3f828b8..28a04c2a51 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -37,7 +37,7 @@
#define ROLE_GANG "gangster"
#define ROLE_BLOODSUCKER "bloodsucker"
//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now
-
+#define ROLE_GHOSTCAFE "ghostcafe"
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
//(in game days played) to play that role
diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm
index 3fd6b069d4..7e391caaed 100644
--- a/code/__DEFINES/tools.dm
+++ b/code/__DEFINES/tools.dm
@@ -14,7 +14,9 @@
#define TOOL_DRILL "drill"
#define TOOL_SCALPEL "scalpel"
#define TOOL_SAW "saw"
-
+//Glasswork Tools
+#define TOOL_BLOW "blowing_rod"
+#define TOOL_GLASS_CUT "glasskit"
// If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY,
// tool sound is only played when op is started. If not, it's played twice.
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 033636017d..d707f7e58a 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -234,6 +234,7 @@
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
#define NUKEOP_ANTAGONIST "nukeop-antagonist"
#define MADE_UNCLONEABLE "made-uncloneable"
+#define TIMESTOP_TRAIT "timestop"
#define NUKEOP_TRAIT "nuke-op"
#define MEGAFAUNA_TRAIT "megafauna"
#define DEATHSQUAD_TRAIT "deathsquad"
diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm
index 8592383a4f..25a49c8d6b 100755
--- a/code/_onclick/hud/parallax.dm
+++ b/code/_onclick/hud/parallax.dm
@@ -146,6 +146,8 @@
/datum/hud/proc/update_parallax_motionblur(client/C, animatedir, new_parallax_movedir, matrix/newtransform)
+ if(!C)
+ return
C.parallax_animate_timer = FALSE
for(var/thing in C.parallax_layers)
var/obj/screen/parallax_layer/L = thing
@@ -167,7 +169,7 @@
/datum/hud/proc/update_parallax()
var/client/C = mymob.client
var/turf/posobj = get_turf(C.eye)
- if(!posobj)
+ if(!posobj)
return
var/area/areaobj = posobj.loc
diff --git a/code/controllers/subsystem/fail2topic.dm b/code/controllers/subsystem/fail2topic.dm
index a589ae2462..d17cce70f9 100644
--- a/code/controllers/subsystem/fail2topic.dm
+++ b/code/controllers/subsystem/fail2topic.dm
@@ -31,8 +31,8 @@ SUBSYSTEM_DEF(fail2topic)
return ..()
/datum/controller/subsystem/fail2topic/fire()
- while (rate_limiting.len)
- var/ip = rate_limiting[1]
+ for(var/i in 1 to length(rate_limiting))
+ var/ip = rate_limiting[i]
var/last_attempt = rate_limiting[ip]
if (world.time - last_attempt > rate_limit)
diff --git a/code/datums/components/dejavu.dm b/code/datums/components/dejavu.dm
new file mode 100644
index 0000000000..1bad589c97
--- /dev/null
+++ b/code/datums/components/dejavu.dm
@@ -0,0 +1,107 @@
+/**
+ * A component to reset the parent to its previous state after some time passes
+ */
+/datum/component/dejavu
+ /// The turf the parent was on when this components was applied, they get moved back here after the duration
+ var/turf/starting_turf
+ /// Determined by the type of the parent so different behaviours can happen per type
+ var/rewind_type
+ /// How many rewinds will happen before the effect ends
+ var/rewinds_remaining
+ /// How long to wait between each rewind
+ var/rewind_interval
+
+ /// The starting value of clone loss at the beginning of the effect
+ var/clone_loss = 0
+ /// The starting value of toxin loss at the beginning of the effect
+ var/tox_loss = 0
+ /// The starting value of oxygen loss at the beginning of the effect
+ var/oxy_loss = 0
+ /// The starting value of brain loss at the beginning of the effect
+ var/brain_loss = 0
+ /// The starting value of brute loss at the beginning of the effect
+ /// This only applies to simple animals
+ var/brute_loss
+ /// The starting value of integrity at the beginning of the effect
+ /// This only applies to objects
+ var/integrity
+ /// A list of body parts saved at the beginning of the effect
+ var/list/datum/saved_bodypart/saved_bodyparts
+
+/datum/component/dejavu/Initialize(rewinds = 1, interval = 10 SECONDS)
+ if(!isatom(parent))
+ return COMPONENT_INCOMPATIBLE
+
+ starting_turf = get_turf(parent)
+ rewinds_remaining = rewinds
+ rewind_interval = interval
+
+ if(isliving(parent))
+ var/mob/living/L = parent
+ clone_loss = L.getCloneLoss()
+ tox_loss = L.getToxLoss()
+ oxy_loss = L.getOxyLoss()
+ brain_loss = L.getOrganLoss(ORGAN_SLOT_BRAIN)
+ rewind_type = .proc/rewind_living
+
+ if(iscarbon(parent))
+ var/mob/living/carbon/C = parent
+ saved_bodyparts = C.save_bodyparts()
+ rewind_type = .proc/rewind_carbon
+
+ else if(isanimal(parent))
+ var/mob/living/simple_animal/M = parent
+ brute_loss = M.bruteloss
+ rewind_type = .proc/rewind_animal
+
+ else if(isobj(parent))
+ var/obj/O = parent
+ integrity = O.obj_integrity
+ rewind_type = .proc/rewind_obj
+
+ addtimer(CALLBACK(src, rewind_type), rewind_interval)
+
+/datum/component/dejavu/Destroy()
+ starting_turf = null
+ saved_bodyparts = null
+ return ..()
+
+/datum/component/dejavu/proc/rewind()
+ to_chat(parent, "You remember a time not so long ago...")
+
+ //comes after healing so new limbs comically drop to the floor
+ if(starting_turf)
+ var/atom/movable/master = parent
+ master.forceMove(starting_turf)
+
+ rewinds_remaining --
+ if(rewinds_remaining)
+ addtimer(CALLBACK(src, rewind_type), rewind_interval)
+ else
+ to_chat(parent, "But the memory falls out of your reach.")
+ qdel(src)
+
+/datum/component/dejavu/proc/rewind_living()
+ var/mob/living/master = parent
+ master.setCloneLoss(clone_loss)
+ master.setToxLoss(tox_loss)
+ master.setOxyLoss(oxy_loss)
+ master.setOrganLoss(ORGAN_SLOT_BRAIN, brain_loss)
+ rewind()
+
+/datum/component/dejavu/proc/rewind_carbon()
+ if(saved_bodyparts)
+ var/mob/living/carbon/master = parent
+ master.apply_saved_bodyparts(saved_bodyparts)
+ rewind_living()
+
+/datum/component/dejavu/proc/rewind_animal()
+ var/mob/living/simple_animal/master = parent
+ master.bruteloss = brute_loss
+ master.updatehealth()
+ rewind_living()
+
+/datum/component/dejavu/proc/rewind_obj()
+ var/obj/master = parent
+ master.obj_integrity = integrity
+ rewind()
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index ebfba43852..1622cc9dbf 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -236,7 +236,12 @@
G.fields["fingerprint"] = md5(H.dna.uni_identity)
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
- G.fields["sex"] = H.gender
+ if(H.gender == MALE)
+ G.fields["gender"] = "Male"
+ else if(H.gender == FEMALE)
+ G.fields["gender"] = "Female"
+ else
+ G.fields["gender"] = "Other"
G.fields["photo_front"] = photo_front
G.fields["photo_side"] = photo_side
general += G
@@ -274,7 +279,12 @@
L.fields["name"] = H.real_name
L.fields["rank"] = H.mind.assigned_role
L.fields["age"] = H.age
- L.fields["sex"] = H.gender
+ if(H.gender == MALE)
+ G.fields["gender"] = "Male"
+ else if(H.gender == FEMALE)
+ G.fields["gender"] = "Female"
+ else
+ G.fields["gender"] = "Other"
L.fields["blood_type"] = H.dna.blood_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.struc_enzymes
diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm
index 559d8f4754..6946a6a1d8 100644
--- a/code/datums/diseases/advance/symptoms/choking.dm
+++ b/code/datums/diseases/advance/symptoms/choking.dm
@@ -41,7 +41,7 @@ Bonus
suppress_warning = TRUE
/datum/symptom/choking/Activate(datum/disease/advance/A)
- if(!..())
+ if(!..() || HAS_TRAIT(A.affected_mob,TRAIT_NOBREATH))
return
var/mob/living/M = A.affected_mob
switch(A.stage)
@@ -112,7 +112,7 @@ Bonus
power = 2
/datum/symptom/asphyxiation/Activate(datum/disease/advance/A)
- if(!..())
+ if(!..() || HAS_TRAIT(A.affected_mob,TRAIT_NOBREATH))
return
var/mob/living/M = A.affected_mob
switch(A.stage)
diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm
index b1767d7cb5..62c64159d1 100644
--- a/code/datums/diseases/advance/symptoms/cough.dm
+++ b/code/datums/diseases/advance/symptoms/cough.dm
@@ -50,7 +50,7 @@ BONUS
symptom_delay_max = 10
/datum/symptom/cough/Activate(datum/disease/advance/A)
- if(!..())
+ if(!..() || HAS_TRAIT(A.affected_mob,TRAIT_NOBREATH))
return
var/mob/living/M = A.affected_mob
switch(A.stage)
diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm
index 5d4d40fb95..9f1696c963 100644
--- a/code/datums/diseases/advance/symptoms/sneeze.dm
+++ b/code/datums/diseases/advance/symptoms/sneeze.dm
@@ -39,7 +39,7 @@ Bonus
suppress_warning = TRUE
/datum/symptom/sneeze/Activate(datum/disease/advance/A)
- if(!..())
+ if(!..() || HAS_TRAIT(A.affected_mob,TRAIT_NOBREATH))
return
var/mob/living/M = A.affected_mob
switch(A.stage)
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 67dbbdfef7..5fa991c10c 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -92,7 +92,15 @@
. = ""
var/list/L = new /list(DNA_UNI_IDENTITY_BLOCKS)
- L[DNA_GENDER_BLOCK] = construct_block((holder.gender!=MALE)+1, 2)
+ switch(holder.gender)
+ if(MALE)
+ L[DNA_GENDER_BLOCK] = construct_block(G_MALE, 4)
+ if(FEMALE)
+ L[DNA_GENDER_BLOCK] = construct_block(G_FEMALE, 4)
+ if(PLURAL)
+ L[DNA_GENDER_BLOCK] = construct_block(G_PLURAL, 4)
+ else
+ L[DNA_GENDER_BLOCK] = construct_block(G_NEUTER, 4)
if(ishuman(holder))
var/mob/living/carbon/human/H = holder
if(!GLOB.hair_styles_list.len)
@@ -165,7 +173,15 @@
if(DNA_EYE_COLOR_BLOCK)
setblock(uni_identity, blocknumber, sanitize_hexcolor(H.eye_color))
if(DNA_GENDER_BLOCK)
- setblock(uni_identity, blocknumber, construct_block((H.gender!=MALE)+1, 2))
+ switch(H.gender)
+ if(MALE)
+ setblock(uni_identity, blocknumber, construct_block(G_MALE, 4))
+ if(FEMALE)
+ setblock(uni_identity, blocknumber, construct_block(G_FEMALE, 4))
+ if(PLURAL)
+ setblock(uni_identity, blocknumber, construct_block(G_PLURAL, 4))
+ else
+ setblock(uni_identity, blocknumber, construct_block(G_NEUTER, 4))
if(DNA_FACIAL_HAIR_STYLE_BLOCK)
setblock(uni_identity, blocknumber, construct_block(GLOB.facial_hair_styles_list.Find(H.facial_hair_style), GLOB.facial_hair_styles_list.len))
if(DNA_HAIR_STYLE_BLOCK)
@@ -307,7 +323,16 @@
/mob/living/carbon/proc/updateappearance(icon_update=1, mutcolor_update=0, mutations_overlay_update=0)
if(!has_dna())
return
- gender = (deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE
+
+ switch(deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 4))
+ if(G_MALE)
+ gender = MALE
+ if(G_FEMALE)
+ gender = FEMALE
+ if(G_PLURAL)
+ gender = PLURAL
+ else
+ gender = NEUTER
/mob/living/carbon/human/updateappearance(icon_update=1, mutcolor_update=0, mutations_overlay_update=0)
..()
diff --git a/code/datums/elements/dusts_on_leaving_area.dm b/code/datums/elements/dusts_on_leaving_area.dm
new file mode 100644
index 0000000000..9527e1fd3a
--- /dev/null
+++ b/code/datums/elements/dusts_on_leaving_area.dm
@@ -0,0 +1,28 @@
+/datum/element/dusts_on_leaving_area
+ element_flags = ELEMENT_DETACH | ELEMENT_BESPOKE
+ id_arg_index = 2
+ var/list/attached_mobs = list()
+ var/list/area_types = list()
+
+/datum/element/dusts_on_leaving_area/Attach(datum/target,types)
+ . = ..()
+ if(!ismob(target))
+ return ELEMENT_INCOMPATIBLE
+ attached_mobs += target
+ area_types = types
+ START_PROCESSING(SSprocessing,src)
+
+/datum/element/dusts_on_leaving_area/Detach(mob/M)
+ . = ..()
+ if(M in attached_mobs)
+ attached_mobs -= M
+ if(!attached_mobs.len)
+ STOP_PROCESSING(SSprocessing,src)
+
+/datum/element/dusts_on_leaving_area/process()
+ for(var/m in attached_mobs)
+ var/mob/M = m
+ var/area/A = get_area(M)
+ if(!(A.type in area_types))
+ M.dust(force = TRUE)
+ Detach(M)
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 464ea37d02..f4e675d98b 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -132,7 +132,7 @@
//CIT CHANGE - makes arousal update when transfering bodies
if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs.
var/mob/living/L = new_character
- if(L.client && L.client.prefs & L.client.prefs.auto_ooc & L.client.prefs.chat_toggles & CHAT_OOC)
+ if(L.client?.prefs && L.client.prefs.auto_ooc && L.client.prefs.chat_toggles & CHAT_OOC)
DISABLE_BITFIELD(L.client.prefs.chat_toggles,CHAT_OOC)
SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character)
diff --git a/code/datums/ruins/station.dm b/code/datums/ruins/station.dm
index e637b6178f..dcab384db9 100644
--- a/code/datums/ruins/station.dm
+++ b/code/datums/ruins/station.dm
@@ -34,3 +34,10 @@
id = "engine_tesla"
suffix = "Box/Engine/engine_tesla.dmm"
name = "Box Tesla"
+
+// Lavaland
+ // Mining Base
+/datum/map_template/ruin/station/lavaland/mining_base
+ id = "mining_public_01"
+ suffix = "Lavaland/Mining_Station/Mining_Station_Public_01.dmm"
+ name = "Public Mining Base"
\ No newline at end of file
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index b74f24c469..0d4a6a7b3f 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -201,13 +201,12 @@
medical_record_text = "Patient's blood tests report an abnormal concentration of red blood cells in their bloodstream."
/datum/quirk/bloodpressure/add()
- var/mob/living/M = quirk_holder
- M.blood_ratio = 1.2
- M.blood_volume += 150
+ quirk_holder.blood_ratio = 1.2
+ quirk_holder.blood_volume += 150
/datum/quirk/bloodpressure/remove()
- var/mob/living/M = quirk_holder
- M.blood_ratio = 1
+ if(quirk_holder)
+ quirk_holder.blood_ratio = 1
/datum/quirk/night_vision
name = "Night Vision"
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index c5217d8e4b..b19c6a71f7 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -400,3 +400,12 @@
/datum/quirk/blindness/remove()
quirk_holder?.cure_blind(ROUNDSTART_TRAIT)
+
+/datum/quirk/coldblooded
+ name = "Cold-blooded"
+ desc = "Your body doesn't create its own internal heat, requiring external heat regulation."
+ value = -2
+ medical_record_text = "Patient is ectothermic."
+ mob_trait = TRAIT_COLDBLOODED
+ gain_text = "You feel cold-blooded."
+ lose_text = "You feel more warm-blooded."
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index d19efe486d..ab2a69e7e9 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -104,15 +104,6 @@
gain_text = "You desire to be hurt."
lose_text = "Pain has become less exciting for you."
-/datum/quirk/coldblooded
- name = "Cold-blooded"
- desc = "Your body doesn't create its own internal heat, requiring external heat regulation."
- value = 0
- medical_record_text = "Patient is ectothermic."
- mob_trait = TRAIT_COLDBLOODED
- gain_text = "You feel cold-blooded."
- lose_text = "You feel more warm-blooded."
-
/datum/quirk/alcohol_intolerance
name = "Alcohol Intolerance"
desc = "You take toxin damage from alcohol rather than getting drunk."
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 829b66a060..42ccc4bbba 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -163,7 +163,7 @@
/atom/movable/proc/Move_Pulled(atom/A)
if(!pulling)
return
- if(pulling.anchored || !pulling.Adjacent(src))
+ if(pulling.anchored || pulling.move_resist > move_force || !pulling.Adjacent(src))
stop_pulling()
return
if(isliving(pulling))
@@ -190,7 +190,7 @@
log_game("DEBUG:[src]'s pull on [pullee] wasn't broken despite [pullee] being in [pullee.loc]. Pull stopped manually.")
stop_pulling()
return
- if(pulling.anchored)
+ if(pulling.anchored || pulling.move_resist > move_force)
stop_pulling()
return
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 711b221c54..afb882598e 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -4,7 +4,7 @@
//Potential replacement for genetics revives or something I dunno (?)
#define CLONE_INITIAL_DAMAGE 150 //Clones in clonepods start with 150 cloneloss damage and 150 brainloss damage, thats just logical
-#define MINIMUM_HEAL_LEVEL 40
+#define MINIMUM_HEAL_LEVEL 20
#define SPEAK(message) radio.talk_into(src, message, radio_channel)
@@ -61,18 +61,15 @@
QDEL_LIST(unattached_flesh)
. = ..()
-/obj/machinery/clonepod/RefreshParts()
+/obj/machinery/clonepod/RefreshParts()
speed_coeff = 0
efficiency = 0
for(var/obj/item/stock_parts/scanning_module/S in component_parts)
efficiency += S.rating
for(var/obj/item/stock_parts/manipulator/P in component_parts)
- speed_coeff += P.rating
- heal_level = (efficiency * 15) + 10
- if(heal_level < MINIMUM_HEAL_LEVEL)
- heal_level = MINIMUM_HEAL_LEVEL
- if(heal_level > 100)
- heal_level = 100
+ speed_coeff += (P.rating / 2)
+ speed_coeff = max(1, speed_coeff)
+ heal_level = CLAMP((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100)
//The return of data disks?? Just for transferring between genetics machine/cloning machine.
//TO-DO: Make the genetics machine accept them.
@@ -169,9 +166,7 @@
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src)
H.hardset_dna(ui, se, H.real_name, null, mrace, features)
-
- if(prob(50 - efficiency*10)) //Chance to give a bad mutation.
- H.randmutb() //100% bad mutation. Can be cured with mutadone.
+ H.randmutb() //100% bad mutation. Can be cured with mutadone.
H.silent = 20 //Prevents an extreme edge case where clones could speak if they said something at exactly the right moment.
occupant = H
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 96487915dd..a238c4a451 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -181,6 +181,9 @@
if(component_check)
P.play_tool_sound(src)
var/obj/machinery/new_machine = new circuit.build_path(loc)
+ if(new_machine.circuit)
+ QDEL_NULL(new_machine.circuit)
+ new_machine.circuit = circuit
new_machine.setAnchored(anchored)
new_machine.on_construction()
for(var/obj/O in new_machine.component_parts)
@@ -189,9 +192,6 @@
for(var/obj/O in src)
O.moveToNullspace()
new_machine.component_parts += O
- if(new_machine.circuit)
- QDEL_NULL(new_machine.circuit)
- new_machine.circuit = circuit
circuit.moveToNullspace()
new_machine.RefreshParts()
qdel(src)
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
index 91306585b8..c6b4f2fcf5 100644
--- a/code/game/machinery/dance_machine.dm
+++ b/code/game/machinery/dance_machine.dm
@@ -406,12 +406,11 @@
lying_prev = 0
/obj/machinery/jukebox/proc/dance_over()
- SSjukeboxes.removejukebox(SSjukeboxes.findjukeboxindex(src))
+ var/position = SSjukeboxes.findjukeboxindex(src)
+ if(!position)
+ return
+ SSjukeboxes.removejukebox(position)
STOP_PROCESSING(SSobj, src)
- for(var/mob/living/L in rangers)
- if(!L || !L.client)
- continue
- L.stop_sound_channel(CHANNEL_JUKEBOX)
rangers = list()
/obj/machinery/jukebox/disco/dance_over()
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index b8c537a4fc..937e3909b0 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -75,8 +75,7 @@ Buildable meters
new_layer = PIPING_LAYER_DEFAULT
piping_layer = new_layer
- pixel_x += (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
- pixel_y += (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
+ PIPING_LAYER_SHIFT(src, piping_layer)
layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE)
/obj/item/pipe/proc/update()
@@ -232,5 +231,4 @@ Buildable meters
/obj/item/pipe_meter/proc/setAttachLayer(new_layer = PIPING_LAYER_DEFAULT)
piping_layer = new_layer
- pixel_x = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
- pixel_y = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
+ PIPING_LAYER_DOUBLE_SHIFT(src, piping_layer)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index f556a75434..1dfd5c4143 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -49,6 +49,7 @@
var/lights = FALSE
var/lights_power = 6
var/last_user_hud = 1 // used to show/hide the mecha hud while preserving previous preference
+ var/completely_disabled = FALSE //stops the mech from doing anything
var/breach_time = 0
var/recharge_rate = 0
@@ -431,6 +432,8 @@
return
if(!locate(/turf) in list(target,target.loc)) // Prevents inventory from being drilled
return
+ if(completely_disabled)
+ return
if(phasing)
occupant_message("Unable to interact with objects while phasing")
return
@@ -508,6 +511,8 @@
return 1
/obj/mecha/relaymove(mob/user,direction)
+ if(completely_disabled)
+ return
if(!direction)
return
if(user != occupant) //While not "realistic", this piece is player friendly.
diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm
index ddc805f3ff..05077bf898 100644
--- a/code/game/objects/effects/effect_system/effect_system.dm
+++ b/code/game/objects/effects/effect_system/effect_system.dm
@@ -48,6 +48,8 @@ would spawn and follow the beaker, even if it is carried or thrown.
holder = atom
/datum/effect_system/proc/start()
+ if(QDELETED(src))
+ return
for(var/i in 1 to number)
if(total_effects > 20)
return
@@ -69,7 +71,8 @@ would spawn and follow the beaker, even if it is carried or thrown.
for(var/j in 1 to steps_amt)
sleep(5)
step(E,direction)
- addtimer(CALLBACK(src, .proc/decrement_total_effect), 20)
+ if(!QDELETED(src))
+ addtimer(CALLBACK(src, .proc/decrement_total_effect), 20)
/datum/effect_system/proc/decrement_total_effect()
total_effects--
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 3ef89c4b96..8f09827bd2 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -481,3 +481,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
/obj/effect/landmark/stationroom/box/engine/New()
. = ..()
templates = CONFIG_GET(keyed_list/box_random_engine)
+
+// Landmark for the mining station
+/obj/effect/landmark/stationroom/lavaland/station
+ templates = list("Public Mining Base" = 3)
+ icon = 'icons/rooms/Lavaland/Mining.dmi'
\ No newline at end of file
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm
index 0360c4ccc2..a98c40d4fc 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm
@@ -39,4 +39,8 @@
/obj/effect/projectile/impact/laser/wavemotion
name = "particle impact"
- icon_state = "impact_wavemotion"
\ No newline at end of file
+ icon_state = "impact_wavemotion"
+
+/obj/effect/projectile/impact/laser/emitter
+ name = "emitter impact"
+ icon_state = "impact_emitter"
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm
index cbd4b21d39..a7ff399734 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm
@@ -31,4 +31,8 @@
/obj/effect/projectile/muzzle/laser/wavemotion
name = "particle backblast"
- icon_state = "muzzle_wavemotion"
\ No newline at end of file
+ icon_state = "muzzle_wavemotion"
+
+/obj/effect/projectile/muzzle/laser/emitter
+ name = "emitter flash"
+ icon_state = "muzzle_emitter"
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
index 0cd4589d4c..bd2c6c6e87 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm
@@ -70,3 +70,7 @@
/obj/effect/projectile/tracer/laser/wavemotion
name = "particle trail"
icon_state = "tracer_wavemotion"
+
+/obj/effect/projectile/tracer/laser/emitter
+ name = "emitter beam"
+ icon_state = "emitter"
diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm
index e6e39d3ff1..8df1ae49de 100644
--- a/code/game/objects/items/RPD.dm
+++ b/code/game/objects/items/RPD.dm
@@ -329,7 +329,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
/obj/item/pipe_dispenser/pre_attack(atom/A, mob/user)
- if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit))
+ var/turf/T = get_turf(A)
+ if(!user.IsAdvancedToolUser() || !T || istype(T, /turf/open/space/transit) || isindestructiblewall(T))
return ..()
//So that changing the menu settings doesn't affect the pipes already being built.
@@ -376,12 +377,16 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
if(ATMOS_CATEGORY) //Making pipes
if(!can_make_pipe)
return ..()
+ A = T
+ if(is_type_in_typecache(recipe, GLOB.ventcrawl_machinery) && isclosedturf(A)) //wall escapism sanity check.
+ to_chat(user, "[src]'s error light flickers; there's something in the way!")
+ return
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if (recipe.type == /datum/pipe_info/meter)
to_chat(user, "You start building a meter...")
if(do_after(user, atmos_build_speed, target = A))
activate()
- var/obj/item/pipe_meter/PM = new /obj/item/pipe_meter(get_turf(A))
+ var/obj/item/pipe_meter/PM = new /obj/item/pipe_meter(A)
PM.setAttachLayer(piping_layer)
if(mode&WRENCH_MODE)
PM.wrench_act(user, src)
@@ -391,7 +396,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
activate()
var/obj/machinery/atmospherics/path = queued_p_type
var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe
- var/obj/item/pipe/P = new pipe_item_type(get_turf(A), queued_p_type, queued_p_dir)
+ var/obj/item/pipe/P = new pipe_item_type(A, queued_p_type, queued_p_dir)
if(queued_p_flipped && istype(P, /obj/item/pipe/trinary/flippable))
var/obj/item/pipe/trinary/flippable/F = P
@@ -408,7 +413,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
if(DISPOSALS_CATEGORY) //Making disposals pipes
if(!can_make_pipe)
return ..()
- A = get_turf(A)
+ A = T
if(isclosedturf(A))
to_chat(user, "[src]'s error light flickers; there's something in the way!")
return
@@ -433,7 +438,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
if(TRANSIT_CATEGORY) //Making transit tubes
if(!can_make_pipe)
return ..()
- A = get_turf(A)
+ A = T
if(isclosedturf(A))
to_chat(user, "[src]'s error light flickers; there's something in the way!")
return
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 3e4a8743da..5621a946bb 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -308,6 +308,7 @@
/obj/item/circuitboard/machine/thermomachine
name = "Thermomachine (Machine Board)"
desc = "You can use a screwdriver to switch between heater and freezer."
+ var/pipe_layer = PIPING_LAYER_DEFAULT
req_components = list(
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/micro_laser = 2,
@@ -342,8 +343,18 @@
build_path = initial(new_type.build_path)
I.play_tool_sound(src)
to_chat(user, "You change the circuitboard setting to \"[new_setting]\".")
- else
- return ..()
+ return
+
+ if(I.tool_behaviour == TOOL_MULTITOOL)
+ pipe_layer = (pipe_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (pipe_layer + 1)
+ to_chat(user, "You change the circuitboard to layer [pipe_layer].")
+ return
+
+ . = ..()
+
+/obj/item/circuitboard/machine/thermomachine/examine()
+ . = ..()
+ . += "It is set to layer [pipe_layer]."
/obj/item/circuitboard/machine/thermomachine/heater
name = "Heater (Machine Board)"
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 07d58c1754..386b1fe668 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -452,14 +452,15 @@
return TRUE
/obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H)
- if(req_defib)
- if(defib.pullshocksafely && isliving(H.pulledby))
- H.visible_message("The defibrillator safely discharges the excessive charge into the floor!")
- else
- var/mob/living/M = H.pulledby
- if(M.electrocute_act(30, src))
- M.visible_message("[M] is electrocuted by [M.p_their()] contact with [H]!")
- M.emote("scream")
+ if(!H.pulledby || !isliving(H.pulledby))
+ return
+ if(req_defib && defib.pullshocksafely)
+ H.visible_message("The defibrillator safely discharges the excessive charge into the floor!")
+ return
+ var/mob/living/M = H.pulledby
+ if(M.electrocute_act(30, src))
+ M.visible_message("[M] is electrocuted by [M.p_their()] contact with [H]!")
+ M.emote("scream")
/obj/item/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user)
if(req_defib && defib.safety)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index c0b510111f..f80dd366be 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -93,6 +93,8 @@ GLOBAL_LIST_EMPTY(PDAs)
var/underline_flag = TRUE //flag for underline
+ var/list/blocked_pdas
+
/obj/item/pda/suicide_act(mob/living/carbon/user)
var/deathMessage = msg_input(user)
if (!deathMessage)
@@ -387,7 +389,10 @@ GLOBAL_LIST_EMPTY(PDAs)
for (var/obj/item/pda/P in sortNames(get_viewable_pdas()))
if (P == src)
continue
- dat += "
[P]"
+ if(P.owner in blocked_pdas)
+ dat += "(BLOCKED - CLICK TO UNBLOCK) [P]"
+ else
+ dat += "[P]"
if(cartridge)
dat += cartridge.message_special(P)
dat += ""
@@ -646,6 +651,15 @@ GLOBAL_LIST_EMPTY(PDAs)
if("MessageAll")
send_to_all(U)
+ if("toggle_block")
+ toggle_blocking(usr, href_list["target"])
+
+ if("block_pda")
+ block_pda(usr, href_list["target"])
+
+ if("unblock_pda")
+ unblock_pda(usr, href_list["target"])
+
if("cart")
if(cartridge)
cartridge.special(U, href_list)
@@ -744,9 +758,16 @@ GLOBAL_LIST_EMPTY(PDAs)
message += "\nSent from my PDA"
// Send the signal
var/list/string_targets = list()
- for (var/obj/item/pda/P in targets)
- if (P.owner && P.ownjob) // != src is checked by the UI
+ var/list/string_blocked
+ for(var/obj/item/pda/P in targets)
+ if(owner in P.blocked_pdas)
+ LAZYADD(string_blocked, P.owner)
+ continue
+ if(P.owner && P.ownjob) // != src is checked by the UI
string_targets += "[P.owner] ([P.ownjob])"
+ if(string_blocked)
+ string_blocked = english_list(string_blocked)
+ to_chat(user, "[icon2html(src, user)] The following recipients have blocked your message: [string_blocked].")
for (var/obj/machinery/computer/message_monitor/M in targets)
// In case of "Reply" to a message from a console, this will make the
// message be logged successfully. If the console is impersonating
@@ -779,12 +800,13 @@ GLOBAL_LIST_EMPTY(PDAs)
tnote += "→ To [target_text]:
[signal.format_message()]
"
// Show it to ghosts
var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message(TRUE)]"
- for(var/mob/M in GLOB.player_list)
- if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
+ for(var/i in GLOB.dead_mob_list)
+ var/mob/M = i
+ if(M?.client && M.client.prefs.chat_toggles & CHAT_GHOSTPDA)
to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]")
- // Log in the talk log
- user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]")
to_chat(user, "Message sent to [target_text]: \"[emoji_message]\"")
+ // Log in the talk log
+ user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text] (BLOCKED:[string_blocked])")
if (!silent)
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
// Reset the photo
@@ -794,8 +816,7 @@ GLOBAL_LIST_EMPTY(PDAs)
last_everyone = world.time
/obj/item/pda/proc/receive_message(datum/signal/subspace/pda/signal)
- tnote += "← From [signal.data["name"]] ([signal.data["job"]]):
[signal.format_message()]
"
-
+ tnote += "← From [signal.data["name"]] ([signal.data["job"]]): (BLOCK/UNBLOCK)
[signal.format_message()]
"
if (!silent)
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
audible_message("[icon2html(src, hearers(src))] *[ttone]*", null, 3)
@@ -814,7 +835,7 @@ GLOBAL_LIST_EMPTY(PDAs)
hrefstart = ""
hrefend = ""
- to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(TRUE)] (Reply)")
+ to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(TRUE)] (Reply) (BLOCK/UNBLOCK)")
update_icon(TRUE)
@@ -827,6 +848,20 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/proc/create_message(mob/living/U, obj/item/pda/P)
send_message(U,list(P))
+/obj/item/pda/proc/toggle_blocking(mob/user, target)
+ if(target in blocked_pdas)
+ unblock_pda(user, target)
+ else
+ block_pda(user, target)
+
+/obj/item/pda/proc/block_pda(mob/user, target)
+ to_chat(user, "[icon2html(src, user)] [target] blocked from messages. Use the messenger PDA list to unblock.")
+ LAZYOR(blocked_pdas, target)
+
+/obj/item/pda/proc/unblock_pda(mob/user, target)
+ to_chat(user, "[icon2html(src, user)] [target] unblocked from messages.")
+ LAZYREMOVE(blocked_pdas, target)
+
/obj/item/pda/AltClick(mob/user)
. = ..()
if(id)
@@ -1172,4 +1207,4 @@ GLOBAL_LIST_EMPTY(PDAs)
#undef PDA_OVERLAY_ID
#undef PDA_OVERLAY_ITEM
#undef PDA_OVERLAY_LIGHT
-#undef PDA_OVERLAY_PAI
\ No newline at end of file
+#undef PDA_OVERLAY_PAI
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index e4fa241907..ba3fdce9b9 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -326,7 +326,7 @@ Code:
if(active1 in GLOB.data_core.general)
menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
"
- menu += "Sex: [active1.fields["sex"]]
"
+ menu += "Sex: [active1.fields["gender"]]
"
menu += "Age: [active1.fields["age"]]
"
menu += "Rank: [active1.fields["rank"]]
"
menu += "Fingerprint: [active1.fields["fingerprint"]]
"
@@ -370,7 +370,7 @@ Code:
if(active1 in GLOB.data_core.general)
menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
"
- menu += "Sex: [active1.fields["sex"]]
"
+ menu += "Sex: [active1.fields["gender"]]
"
menu += "Age: [active1.fields["age"]]
"
menu += "Rank: [active1.fields["rank"]]
"
menu += "Fingerprint: [active1.fields["fingerprint"]]
"
diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm
index df17a51c1b..905428ae1f 100644
--- a/code/game/objects/items/devices/forcefieldprojector.dm
+++ b/code/game/objects/items/devices/forcefieldprojector.dm
@@ -1,6 +1,6 @@
/obj/item/forcefield_projector
name = "forcefield projector"
- desc = "An experimental device that can create several forcefields at a distance."
+ desc = "An experimental device that can create several forcefields at a short distance."
icon = 'icons/obj/device.dmi'
icon_state = "signmaker_forcefield"
slot_flags = ITEM_SLOT_BELT
@@ -14,7 +14,7 @@
var/shield_integrity = 250
var/max_fields = 3
var/list/current_fields
- var/field_distance_limit = 7
+ var/field_distance_limit = 2
/obj/item/forcefield_projector/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 8c6666085e..e04501144e 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -26,6 +26,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
slot_flags = ITEM_SLOT_EARS
var/obj/item/encryptionkey/keyslot2 = null
dog_fashion = null
+ var/bowman = FALSE
/obj/item/radio/headset/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins putting \the [src]'s antenna up [user.p_their()] nose! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer!")
@@ -52,6 +53,11 @@ GLOBAL_LIST_INIT(channel_tokens, list(
else
. += "A small screen on the headset flashes, it's too small to read without holding or wearing the headset."
+/obj/item/radio/headset/ComponentInitialize()
+ . = ..()
+ if (bowman)
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+
/obj/item/radio/headset/Initialize()
. = ..()
recalculateChannels()
@@ -81,10 +87,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs."
icon_state = "syndie_headset"
item_state = "syndie_headset"
-
-/obj/item/radio/headset/syndicate/alt/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+ bowman = TRUE
/obj/item/radio/headset/syndicate/alt/leader
name = "team leader headset"
@@ -112,10 +115,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
desc = "This is used by your elite security force. Protects ears from flashbangs."
icon_state = "sec_headset_alt"
item_state = "sec_headset_alt"
-
-/obj/item/radio/headset/headset_sec/alt/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+ bowman = TRUE
/obj/item/radio/headset/headset_eng
name = "engineering radio headset"
@@ -161,10 +161,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
desc = "The headset of the boss. Protects ears from flashbangs."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
-
-/obj/item/radio/headset/heads/captain/alt/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+ bowman = TRUE
/obj/item/radio/headset/heads/rd
name = "\proper the research director's headset"
@@ -183,10 +180,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
-
-/obj/item/radio/headset/heads/hos/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+ bowman = TRUE
/obj/item/radio/headset/heads/ce
name = "\proper the chief engineer's headset"
@@ -258,10 +252,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
icon_state = "cent_headset_alt"
item_state = "cent_headset_alt"
keyslot = null
-
-/obj/item/radio/headset/headset_cent/alt/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+ bowman = TRUE
/obj/item/radio/headset/ai
name = "\proper Integrated Subspace Transceiver "
@@ -273,7 +264,11 @@ GLOBAL_LIST_INIT(channel_tokens, list(
/obj/item/radio/headset/attackby(obj/item/W, mob/user, params)
user.set_machine(src)
-
+ if (istype(W,/obj/item/headsetupgrader))
+ if (!bowman)
+ to_chat(user,"You upgrade [src].")
+ bowmanize()
+ qdel(W)
if(istype(W, /obj/item/screwdriver))
if(keyslot || keyslot2)
for(var/ch_name in channels)
@@ -341,3 +336,24 @@ GLOBAL_LIST_INIT(channel_tokens, list(
use_command = !use_command
to_chat(user, "You toggle high-volume mode [use_command ? "on" : "off"].")
return TRUE
+
+/obj/item/radio/headset/proc/bowmanize()
+ cut_overlays()
+ var/icon/yeas = icon(icon,icon_state)
+ icon_state = "antenna_alt"
+ var/mutable_appearance/center = mutable_appearance(icon,"center_alt")
+ center.color = yeas.GetPixel(15,18)
+ var/mutable_appearance/centeralt = mutable_appearance(icon,"centeralt_alt")
+ centeralt.color = yeas.GetPixel(14,22)
+ var/mutable_appearance/centercenter = mutable_appearance(icon,"centercenter_alt")
+ centercenter.color = yeas.GetPixel(13,19)
+ var/mutable_appearance/centerpixel = mutable_appearance(icon,"centerpixel_alt")
+ centerpixel.color = yeas.GetPixel(13,21)
+ add_overlay(center)
+ add_overlay(centeralt)
+ add_overlay(centercenter)
+ add_overlay(centerpixel)
+ name = replacetext(name,"headset", "bowman headset")
+ desc = "[desc] Protects ears from flashbangs."
+ bowman = TRUE
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index fc768cd38e..64e2830dd4 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -251,3 +251,9 @@ effective or pretty fucking useless.
else
GLOB.active_jammers -= src
update_icon()
+
+/obj/item/headsetupgrader
+ name = "headset upgrader"
+ desc = "A tool that can be used to upgrade a normal headset to be able to protect from flashbangs."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "headset_upgrade"
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index f6f14554ed..8ce0f33307 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -310,6 +310,7 @@
trap_damage = 0
item_flags = DROPDEL
flags_1 = NONE
+ breakouttime = 50
/obj/item/restraints/legcuffs/beartrap/energy/New()
..()
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index a33ae9c4a9..21de34faa1 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -10,7 +10,15 @@
*/
GLOBAL_LIST_INIT(glass_recipes, list ( \
new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
- new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
+ new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
+ null, \
+ new/datum/stack_recipe_list("glass working bases", list( \
+ new/datum/stack_recipe("chem dish", /obj/item/glasswork/glass_base/dish, 10), \
+ new/datum/stack_recipe("lens", /obj/item/glasswork/glass_base/glass_lens, 15), \
+ new/datum/stack_recipe("spout flask", /obj/item/glasswork/glass_base/spouty, 20), \
+ new/datum/stack_recipe("small bulb flask", /obj/item/glasswork/glass_base/flask_small, 5), \
+ new/datum/stack_recipe("large bottle flask", /obj/item/glasswork/glass_base/flask_large, 15), \
+ )), \
))
/obj/item/stack/sheet/glass
@@ -26,6 +34,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
grind_results = list(/datum/reagent/silicon = 20)
point_value = 1
tableVariant = /obj/structure/table/glass
+ shard_type = /obj/item/shard
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
@@ -93,6 +102,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
merge_type = /obj/item/stack/sheet/plasmaglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
tableVariant = /obj/structure/table/plasmaglass
+ shard_type = /obj/item/shard/plasma
/obj/item/stack/sheet/plasmaglass/fifty
amount = 50
@@ -120,7 +130,9 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
else
return ..()
-
+/obj/item/stack/sheet/plasmaglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 1.2
+ S.efficiency *= 1.2
/*
* Reinforced glass sheets
@@ -145,11 +157,15 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
merge_type = /obj/item/stack/sheet/rglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
point_value = 4
+ shard_type = /obj/item/shard
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
..()
+/obj/item/stack/sheet/rglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2
+
/obj/item/stack/sheet/rglass/cyborg
materials = list()
var/datum/robot_energy_storage/glasource
@@ -188,6 +204,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
merge_type = /obj/item/stack/sheet/plasmarglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10)
point_value = 23
+ shard_type = /obj/item/shard/plasma
+
+/obj/item/stack/sheet/plasmarglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2.2
+ S.efficiency *= 1.2
/obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.prglass_recipes
@@ -207,6 +228,11 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/titaniumglass
+ shard_type = /obj/item/shard
+
+/obj/item/stack/sheet/titaniumglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2.5
+ S.efficiency *= 1.5
/obj/item/stack/sheet/titaniumglass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.titaniumglass_recipes
@@ -226,11 +252,16 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
+ shard_type = /obj/item/shard
/obj/item/stack/sheet/plastitaniumglass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.plastitaniumglass_recipes
return ..()
+/obj/item/stack/sheet/titaniumglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2
+ S.efficiency *= 2
+
/obj/item/shard
name = "shard"
desc = "A nasty looking shard of glass."
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index a80f0d5a3b..e958345d4f 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -277,6 +277,9 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
recipes = GLOB.wood_recipes
return ..()
+/obj/item/stack/sheet/mineral/wood/twenty
+ amount = 20
+
/obj/item/stack/sheet/mineral/wood/fifty
amount = 50
@@ -782,3 +785,4 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
merge_type = /obj/item/stack/sheet/cotton/durathread
pull_effort = 70
loom_result = /obj/item/stack/sheet/durathread
+
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index af0dca02d3..b7ab760659 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -15,4 +15,15 @@
var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity
var/is_fabric = FALSE //is this a valid material for the loom?
var/loom_result //result from pulling on the loom
- var/pull_effort = 0 //amount of delay when pulling on the loom
\ No newline at end of file
+ var/pull_effort = 0 //amount of delay when pulling on the loom
+ var/shard_type // the shard debris typepath left over by solar panels and windows etc.
+
+/**
+ * Called on the glass sheet upon solar construction (duh):
+ * Different glass sheets can modify different stas/vars, such as obj_integrity or efficiency
+ * and possibly extra effects if you wish to code them.
+ * Keep in mind the solars' max_integrity is set equal to the obj_integrity later,
+ * so you won't have to do so here.
+ */
+/obj/item/stack/sheet/proc/on_solar_construction(/obj/machinery/power/solar/S)
+ return
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 18acb5e14d..fa4e5a3886 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -233,39 +233,111 @@
turf_type = /turf/open/floor/carpet/royalblue
tableVariant = /obj/structure/table/wood/fancy/royalblue
+/obj/item/stack/tile/carpet/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/fifty
amount = 50
+/obj/item/stack/tile/carpet/black/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/black/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/black/fifty
amount = 50
+/obj/item/stack/tile/carpet/blackred/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/blackred/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/blackred/fifty
amount = 50
+/obj/item/stack/tile/carpet/monochrome/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/monochrome/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/monochrome/fifty
amount = 50
+/obj/item/stack/tile/carpet/blue/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/blue/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/blue/fifty
amount = 50
+/obj/item/stack/tile/carpet/cyan/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/cyan/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/cyan/fifty
amount = 50
+/obj/item/stack/tile/carpet/green/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/green/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/green/fifty
amount = 50
+/obj/item/stack/tile/carpet/orange/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/orange/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/orange/fifty
amount = 50
+/obj/item/stack/tile/carpet/purple/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/purple/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/purple/fifty
amount = 50
+/obj/item/stack/tile/carpet/red/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/red/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/red/fifty
amount = 50
+/obj/item/stack/tile/carpet/royalblack/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/royalblack/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/royalblack/fifty
amount = 50
+/obj/item/stack/tile/carpet/royalblue/ten
+ amount = 10
+
+/obj/item/stack/tile/carpet/royalblue/twenty
+ amount = 20
+
/obj/item/stack/tile/carpet/royalblue/fifty
amount = 50
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 31efabf210..880b714f76 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -293,7 +293,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
desc = replacetext(desc, "robust", "safe")
desc = replacetext(desc, "heavier", "bouncier")
DISABLE_BITFIELD(flags_1, CONDUCT_1)
- materials = null
+ materials = typelist("materials", null)
damtype = STAMINA
force += 3 //to compensate the higher stamina K.O. threshold compared to actual health.
throwforce += 3
@@ -317,8 +317,8 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
flags_1 = null
materials = null
damtype = STAMINA
- force = 17
- throwforce = 17
+ force = 15
+ throwforce = 15
attack_verb = list("robusted", "bounced")
can_rubberify = FALSE //we are already the future.
diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm
index b9862c3423..28a6fd66ee 100644
--- a/code/game/objects/items/twohanded.dm
+++ b/code/game/objects/items/twohanded.dm
@@ -25,8 +25,8 @@
*/
/obj/item/twohanded
var/wielded = 0
- var/force_unwielded = 0
- var/force_wielded = 0
+ var/force_unwielded // default to null, the number force will be set to on unwield()
+ var/force_wielded // same as above but for wield()
var/wieldsound = null
var/unwieldsound = null
var/slowdown_wielded = 0
@@ -73,7 +73,7 @@
to_chat(user, "You don't have enough intact hands.")
return
wielded = 1
- if(force_wielded)
+ if(!isnull(force_wielded))
force = force_wielded
name = "[name] (Wielded)"
update_icon()
@@ -738,7 +738,7 @@
on = !on
to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]")
force = on ? force_on : initial(force)
- throwforce = on ? force_on : initial(force)
+ throwforce = on ? force_on : force
icon_state = "chainsaw_[on ? "on" : "off"]"
var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering)
butchering.butchering_enabled = on
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 5f3fc48eb7..0c1239e887 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -178,7 +178,7 @@
machine = null
//called when the user unsets the machine.
-/atom/movable/proc/on_unset_machine(mob/user)
+/atom/proc/on_unset_machine(mob/user)
return
/mob/proc/set_machine(obj/O)
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 271ae72d47..f35e9e7d55 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -205,6 +205,9 @@
if(!mineral)
if(istype(G, /obj/item/stack/sheet/mineral) && G.sheettype)
var/M = G.sheettype
+ var/mineralassembly = text2path("/obj/structure/door_assembly/door_assembly_[M]")
+ if(!mineralassembly)
+ return
if(G.get_amount() >= 2)
playsound(src, 'sound/items/crowbar.ogg', 100, 1)
user.visible_message("[user] adds [G.name] to the airlock assembly.", \
@@ -214,7 +217,6 @@
return
to_chat(user, "You install [M] plating into the airlock assembly.")
G.use(2)
- var/mineralassembly = text2path("/obj/structure/door_assembly/door_assembly_[M]")
var/obj/structure/door_assembly/MA = new mineralassembly(loc)
transfer_assembly_vars(src, MA, TRUE)
else
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index d7e2d5564a..52441c2987 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -7,7 +7,7 @@
anchored = TRUE
icon = 'icons/turf/walls/wall.dmi'
icon_state = "wall"
- layer = CLOSED_TURF_LAYER
+ layer = LOW_OBJ_LAYER
density = TRUE
opacity = 1
max_integrity = 100
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index 92fb13c947..3ba9fea006 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -619,7 +619,7 @@
assignedrole = "Ghost Cafe Visitor"
flavour_text = "Is this what life after death is like?"
skip_reentry_check = TRUE
- banType = "ghostcafe"
+ banType = ROLE_GHOSTCAFE
/datum/action/toggle_dead_chat_mob
icon_icon = 'icons/mob/mob.dmi'
@@ -642,12 +642,14 @@
/obj/effect/mob_spawn/human/ghostcafe/special(mob/living/carbon/human/new_spawn)
if(new_spawn.client)
new_spawn.client.prefs.copy_to(new_spawn)
+ var/area/A = get_area(src)
var/datum/outfit/O = new /datum/outfit/ghostcafe()
O.equip(new_spawn, FALSE, new_spawn.client)
SSjob.equip_loadout(null, new_spawn, FALSE)
SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn)
new_spawn.AddElement(/datum/element/ghost_role_eligibility)
new_spawn.AddElement(/datum/element/dusts_on_catatonia)
+ new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type,/area/hilbertshotel))
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn,TRAIT_PACIFISM,GHOSTROLE_TRAIT)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 94619e1858..7c373f2734 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -166,6 +166,9 @@
if(S.sheettype && S.sheettype != "runed")
var/M = S.sheettype
if(state == GIRDER_DISPLACED)
+ var/F = text2path("/obj/structure/falsewall/[M]")
+ if(!F)
+ return
if(S.get_amount() < 2)
to_chat(user, "You need at least two sheets to create a false wall!")
return
@@ -174,11 +177,13 @@
return
S.use(2)
to_chat(user, "You create a false wall. Push on it to open or close the passage.")
- var/F = text2path("/obj/structure/falsewall/[M]")
var/obj/structure/FW = new F (loc)
transfer_fingerprints_to(FW)
qdel(src)
else
+ var/F = text2path("/turf/closed/wall/mineral/[M]")
+ if(!F)
+ return
if(S.get_amount() < 2)
to_chat(user, "You need at least two sheets to add plating!")
return
@@ -189,7 +194,7 @@
S.use(2)
to_chat(user, "You add the plating.")
var/turf/T = get_turf(src)
- T.PlaceOnTop(text2path("/turf/closed/wall/mineral/[M]"))
+ T.PlaceOnTop(F)
transfer_fingerprints_to(T)
qdel(src)
return
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index 3b4bbea559..611a6d024d 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -97,7 +97,7 @@
icon_state = "guillotine_raised"
/obj/structure/guillotine/proc/drop_blade(mob/user)
- if (buckled_mobs.len && blade_sharpness)
+ if (has_buckled_mobs() && blade_sharpness)
var/mob/living/carbon/human/H = buckled_mobs[1]
if (!H)
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 0a5794c59d..90408472e9 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -20,14 +20,14 @@
return
if(broken || !Adjacent(user))
return
-
+
if(ishuman(user))
var/mob/living/carbon/human/H = user
//see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments!
//this is largely copypasted from there.
//handle facial hair (if necessary)
- if(H.gender == MALE)
+ if(H.gender != FEMALE)
var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in GLOB.facial_hair_styles_list
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return //no tele-grooming
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 58588c5693..14a7e445c1 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -15,7 +15,8 @@
var/decon_speed = 30
var/wtype = "glass"
var/fulltile = FALSE
- var/glass_type = /obj/item/stack/sheet/glass
+ var/obj/item/stack/sheet/glass_type = /obj/item/stack/sheet/glass
+ var/cleanable_type = /obj/effect/decal/cleanable/glass
var/glass_amount = 1
var/mutable_appearance/crack_overlay
can_be_unanchored = TRUE
@@ -277,12 +278,15 @@
/obj/structure/window/proc/spawnDebris(location)
. = list()
- . += new /obj/item/shard(location)
- . += new /obj/effect/decal/cleanable/glass(location)
+ var/shard = initial(glass_type.shard_type)
+ if(shard)
+ . += new shard(location)
+ if (fulltile)
+ . += new shard(location)
+ if(cleanable_type)
+ . += new cleanable_type(location)
if (reinf)
. += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
- if (fulltile)
- . += new /obj/item/shard(location)
/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
if (get_dist(src,user) > 1)
@@ -416,17 +420,9 @@
max_integrity = 150
explosion_block = 1
glass_type = /obj/item/stack/sheet/plasmaglass
+ cleanable_type = /obj/effect/decal/cleanable/glass/plasma
rad_insulation = RAD_NO_INSULATION
-/obj/structure/window/plasma/spawnDebris(location)
- . = list()
- . += new /obj/item/shard/plasma(location)
- . += new /obj/effect/decal/cleanable/glass/plasma(location)
- if (reinf)
- . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
- if (fulltile)
- . += new /obj/item/shard/plasma(location)
-
/obj/structure/window/plasma/spawner/east
dir = EAST
@@ -662,11 +658,6 @@
level = 3
glass_amount = 2
-/obj/structure/window/reinforced/clockwork/spawnDebris(location)
- . = list()
- for(var/i in 1 to 4)
- . += new /obj/item/clockwork/alloy_shards/medium/gear_bit(location)
-
/obj/structure/window/reinforced/clockwork/Initialize(mapload, direct)
made_glow = TRUE
new /obj/effect/temp_visual/ratvar/window(get_turf(src))
diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm
index be46d124ea..d55cb0b475 100644
--- a/code/game/turfs/simulated/wall/mineral_walls.dm
+++ b/code/game/turfs/simulated/wall/mineral_walls.dm
@@ -138,7 +138,8 @@
var/duration = (48/W.force) * 2 //In seconds, for now.
if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/twohanded/fireaxe))
duration /= 4 //Much better with hatchets and axes.
- if(do_after(user, duration*10, target=src)) //Into deciseconds.
+ var/src_type = type
+ if(do_after(user, duration*10, target=src) && type == src_type) //Into deciseconds.
dismantle_wall(FALSE,FALSE)
return
return ..()
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index 70ae133a31..d7af763244 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -408,7 +408,7 @@
var/obj/item/organ/tail/cat/tail = new
ears.Insert(H, drop_if_replaced=FALSE)
tail.Insert(H, drop_if_replaced=FALSE)
- var/list/honorifics = list("[MALE]" = list("kun"), "[FEMALE]" = list("chan","tan"), "[NEUTER]" = list("san")) //John Robust -> Robust-kun
+ var/list/honorifics = list("[MALE]" = list("kun"), "[FEMALE]" = list("chan","tan"), "[NEUTER]" = list("san"), "[PLURAL]" = list("san")) //John Robust -> Robust-kun
var/list/names = splittext(H.real_name," ")
var/forename = names.len > 1 ? names[2] : names[1]
var/newname = "[forename]-[pick(honorifics["[H.gender]"])]"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index c66927b856..c76ecb52f5 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -845,7 +845,11 @@
dat += "Lavaland | "
else
dat += "Lavaland | "
-
+ // Ghost cafe
+ if(jobban_isbanned(M,ROLE_GHOSTCAFE))
+ dat += "Lavaland | "
+ else
+ dat += "Lavaland | "
dat += ""
//Antagonist (Orange)
@@ -2878,6 +2882,8 @@
return
if(SSdbcore.Connect())
var/datum/DBQuery/query_get_mentor = SSdbcore.NewQuery("SELECT id FROM [format_table_name("mentor")] WHERE ckey = '[ckey]'")
+ if(!query_get_mentor.warn_execute())
+ return
if(query_get_mentor.NextRow())
to_chat(usr, "[ckey] is already a mentor.")
return
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 1437555af1..f30e47c68e 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -419,7 +419,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(record_found)//If they have a record we can determine a few things.
new_character.real_name = record_found.fields["name"]
- new_character.gender = record_found.fields["sex"]
+ new_character.gender = record_found.fields["gender"]
new_character.age = record_found.fields["age"]
new_character.hardset_dna(record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], new record_found.fields["species"], record_found.fields["features"])
else
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index dc6d12453d..e6af9fa487 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -629,15 +629,12 @@
icon_state = "abductor_headset"
item_state = "abductor_headset"
keyslot2 = new /obj/item/encryptionkey/heads/captain
+ bowman = TRUE
/obj/item/radio/headset/abductor/Initialize(mapload)
. = ..()
make_syndie()
-/obj/item/radio/headset/abductor/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
-
/obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_SCREWDRIVER)
return // Stops humans from disassembling abductor headsets.
diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm
index 10581e7bbb..b5233606cf 100644
--- a/code/modules/antagonists/abductor/machinery/experiment.dm
+++ b/code/modules/antagonists/abductor/machinery/experiment.dm
@@ -174,7 +174,7 @@
if(!GlandTest)
say("Experimental dissection not detected!")
return "No glands detected!"
- if(H.mind != null && H.ckey != null)
+ if(H.mind != null && (H.voluntary_ghosted || (H.ckey != null)))
LAZYINITLIST(abductee_minds)
LAZYADD(history, H)
LAZYADD(abductee_minds, H.mind)
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
index e01156ba44..5bc04173b9 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
@@ -70,6 +70,7 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel, /obj/item/reagent_containers/food/drinks/bottle/holyoil)
+ mutantrace_variation = STYLE_DIGITIGRADE|STYLE_SNEK_TAURIC
/obj/item/clothing/suit/armor/clockwork/Initialize()
. = ..()
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index da002e568c..7948b30035 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -22,7 +22,7 @@ Runes can either be invoked by one's self or with many different cultists. Each
icon = 'icons/obj/rune.dmi'
icon_state = "1"
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
- layer = LOW_OBJ_LAYER
+ layer = SIGIL_LAYER
color = RUNE_COLOR_RED
var/invocation = "Aiy ele-mayo." //This is said by cultists when the rune is invoked.
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index 3cc3b48e50..e6ca95472e 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -22,11 +22,19 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
desc = "You aren't entirely sure what this does, but it's very beepy and boopy."
background_icon_state = "bg_tech_blue"
icon_icon = 'icons/mob/actions/actions_AI.dmi'
+ check_flags = AB_CHECK_CONSCIOUS //can't doomsday if dead.
var/mob/living/silicon/ai/owner_AI //The owner AI, so we don't have to typecast every time
var/uses //If we have multiple uses of the same power
var/auto_use_uses = TRUE //If we automatically use up uses on each activation
var/cooldown_period //If applicable, the time in deciseconds we have to wait before using any more modules
+
+/datum/action/innate/ai/New()
+ ..()
+ if(uses > 1)
+ desc = "[desc] It has [uses] use\s remaining."
+ button.desc = desc
+
/datum/action/innate/ai/Grant(mob/living/L)
. = ..()
if(!isAI(owner))
@@ -38,7 +46,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
/datum/action/innate/ai/IsAvailable()
. = ..()
if(owner_AI && owner_AI.malf_cooldown > world.time)
- return
+ return FALSE
/datum/action/innate/ai/Trigger()
. = ..()
@@ -49,12 +57,16 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
/datum/action/innate/ai/proc/adjust_uses(amt, silent)
uses += amt
- if(!silent && uses)
- to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.")
- if(!uses)
- if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway!
- to_chat(owner, "[name] has run out of uses!")
- qdel(src)
+ if(uses)
+ if(!silent)
+ to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.")
+ desc = "[initial(desc)] It has [uses] use\s remaining."
+ UpdateButtonIcon()
+ return
+ if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway!
+ to_chat(owner, "[name] has run out of uses!")
+ qdel(src)
+
//Framework for ranged abilities that can have different effects by left-clicking stuff.
/datum/action/innate/ai/ranged
@@ -74,13 +86,16 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
/datum/action/innate/ai/ranged/adjust_uses(amt, silent)
uses += amt
- if(!silent && uses)
- to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.")
- if(!uses)
- if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway!
- to_chat(owner, "[name] has run out of uses!")
- Remove(owner)
- QDEL_IN(src, 100) //let any active timers on us finish up
+ if(uses)
+ if(!silent)
+ to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.")
+ desc = "[initial(desc)] It has [uses] use\s remaining."
+ UpdateButtonIcon()
+ return
+ if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway!
+ to_chat(owner, "[name] has run out of uses!")
+ Remove(owner)
+ QDEL_IN(src, 100) //let any active timers on us finish up
/datum/action/innate/ai/ranged/Destroy()
QDEL_NULL(linked_ability)
@@ -97,7 +112,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
var/datum/action/innate/ai/ranged/attached_action
/obj/effect/proc_holder/ranged_ai/Destroy()
- QDEL_NULL(attached_action)
+ attached_action = null
return ..()
/obj/effect/proc_holder/ranged_ai/proc/toggle(mob/user)
@@ -185,6 +200,8 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
A.playsound_local(A, AM.unlock_sound, 50, 0)
else //Adding uses to an existing module
action.uses += initial(action.uses)
+ action.desc = "[initial(action.desc)] It has [action.uses] use\s remaining."
+ action.UpdateButtonIcon()
temp = "Additional use[action.uses > 1 ? "s" : ""] added to [action.name]!"
processing_time -= AM.cost
@@ -238,6 +255,8 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
return
if(alert(owner, "Send arming signal? (true = arm, false = cancel)", "purge_all_life()", "confirm = TRUE;", "confirm = FALSE;") != "confirm = TRUE;")
return
+ if (active)
+ return //prevent the AI from activating an already active doomsday
active = TRUE
set_us_up_the_bomb(owner)
@@ -245,64 +264,64 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
set waitfor = FALSE
to_chat(owner, "run -o -a 'selfdestruct'")
sleep(5)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Running executable 'selfdestruct'...")
sleep(rand(10, 30))
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
owner.playsound_local(owner, 'sound/misc/bloblarm.ogg', 50, 0)
to_chat(owner, "!!! UNAUTHORIZED SELF-DESTRUCT ACCESS !!!")
to_chat(owner, "This is a class-3 security violation. This incident will be reported to Central Command.")
for(var/i in 1 to 3)
sleep(20)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Sending security report to Central Command.....[rand(0, 9) + (rand(20, 30) * i)]%")
sleep(3)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "auth 'akjv9c88asdf12nb' ******************")
owner.playsound_local(owner, 'sound/items/timer.ogg', 50, 0)
sleep(30)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Credentials accepted. Welcome, akjv9c88asdf12nb.")
owner.playsound_local(owner, 'sound/misc/server-ready.ogg', 50, 0)
sleep(5)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Arm self-destruct device? (Y/N)")
owner.playsound_local(owner, 'sound/misc/compiler-stage1.ogg', 50, 0)
sleep(20)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Y")
sleep(15)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Confirm arming of self-destruct device? (Y/N)")
owner.playsound_local(owner, 'sound/misc/compiler-stage2.ogg', 50, 0)
sleep(10)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Y")
sleep(rand(15, 25))
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Please repeat password to confirm.")
owner.playsound_local(owner, 'sound/misc/compiler-stage2.ogg', 50, 0)
sleep(14)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "******************")
sleep(40)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
to_chat(owner, "Credentials accepted. Transmitting arming signal...")
owner.playsound_local(owner, 'sound/misc/server-ready.ogg', 50, 0)
sleep(30)
- if(!owner || QDELETED(owner))
+ if(QDELETED(owner) || owner.stat == DEAD)
return
priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", "aimalf")
set_security_level("delta")
@@ -724,9 +743,10 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
/datum/action/innate/ai/blackout
name = "Blackout"
- desc = "Overloads lights across the station."
+ desc = "Overloads random lights across the station."
button_icon_state = "blackout"
uses = 3
+ auto_use_uses = FALSE
/datum/action/innate/ai/blackout/Activate()
for(var/obj/machinery/power/apc/apc in GLOB.apcs_list)
@@ -736,6 +756,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
apc.overload++
to_chat(owner, "Overcurrent applied to the powernet.")
owner.playsound_local(owner, "sparks", 50, 0)
+ adjust_uses(-1)
//Disable Emergency Lights
@@ -784,11 +805,6 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
auto_use_uses = FALSE
cooldown_period = 30
-/datum/action/innate/ai/reactivate_cameras/New()
- ..()
- desc = "[desc] There are 30 reactivations remaining."
- button.desc = desc
-
/datum/action/innate/ai/reactivate_cameras/Activate()
var/fixed_cameras = 0
for(var/V in GLOB.cameranet.cameras)
@@ -803,8 +819,6 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
to_chat(owner, "Diagnostic complete! Cameras reactivated: [fixed_cameras]. Reactivations remaining: [uses].")
owner.playsound_local(owner, 'sound/items/wirecutter.ogg', 50, 0)
adjust_uses(0, TRUE) //Checks the uses remaining
- if(src && uses) //Not sure if not having src here would cause a runtime, so it's here to be safe
- desc = "[initial(desc)] There are [uses] reactivations remaining."
//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision.
diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm
index bd4f1a8acd..70cb29e7a3 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook.dm
@@ -163,7 +163,7 @@
/datum/spellbook_entry/timestop
name = "Time Stop"
- spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
+ spell_type = /obj/effect/proc_holder/spell/aoe_turf/timestop
category = "Defensive"
/datum/spellbook_entry/smoke
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index c67b79478e..7c8952eb33 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -46,7 +46,7 @@
return FALSE
switch(type)
if("feet")
- if(!H.shoes)
+ if(!H.shoes || !(H.shoes.body_parts_covered & FEET))
affecting = H.get_bodypart(pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
H.Knockdown(60)
if(BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND)
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index 7edea275b6..0904808f51 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -1,14 +1,12 @@
-/*
-Quick overview:
+// Quick overview:
+//
+// Pipes combine to form pipelines
+// Pipelines and other atmospheric objects combine to form pipe_networks
+// Note: A single pipe_network represents a completely open space
+//
+// Pipes -> Pipelines
+// Pipelines + Other Objects -> Pipe network
-Pipes combine to form pipelines
-Pipelines and other atmospheric objects combine to form pipe_networks
- Note: A single pipe_network represents a completely open space
-
-Pipes -> Pipelines
-Pipelines + Other Objects -> Pipe network
-
-*/
#define PIPE_VISIBLE_LEVEL 2
#define PIPE_HIDDEN_LEVEL 1
@@ -101,13 +99,14 @@ Pipelines + Other Objects -> Pipe network
return node_connects
/obj/machinery/atmospherics/proc/normalize_cardinal_directions()
- if(dir==SOUTH)
- setDir(NORTH)
- else if(dir==WEST)
- setDir(EAST)
+ switch(dir)
+ if(SOUTH)
+ setDir(NORTH)
+ if(WEST)
+ setDir(EAST)
//this is called just after the air controller sets up turfs
-/obj/machinery/atmospherics/proc/atmosinit(var/list/node_connects)
+/obj/machinery/atmospherics/proc/atmosinit(list/node_connects)
if(!node_connects) //for pipes where order of nodes doesn't matter
node_connects = getNodeConnects()
@@ -119,12 +118,8 @@ Pipelines + Other Objects -> Pipe network
update_icon()
/obj/machinery/atmospherics/proc/setPipingLayer(new_layer)
- if(pipe_flags & PIPING_DEFAULT_LAYER_ONLY)
- new_layer = PIPING_LAYER_DEFAULT
- piping_layer = new_layer
- pixel_x = (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
- pixel_y = (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
- layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE)
+ piping_layer = (pipe_flags & PIPING_DEFAULT_LAYER_ONLY) ? PIPING_LAYER_DEFAULT : new_layer
+ update_icon()
/obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target, iteration)
return connection_check(target, piping_layer)
@@ -176,9 +171,6 @@ Pipelines + Other Objects -> Pipe network
nodes[nodes.Find(reference)] = null
update_icon()
-/obj/machinery/atmospherics/update_icon()
- return
-
/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pipe)) //lets you autodrop
var/obj/item/pipe/pipe = W
@@ -235,15 +227,13 @@ Pipelines + Other Objects -> Pipe network
var/datum/gas_mixture/env_air = loc.return_air()
pressures = int_air.return_pressure() - env_air.return_pressure()
- var/fuck_you_dir = get_dir(src, user) // Because fuck you...
- if(!fuck_you_dir)
- fuck_you_dir = pick(GLOB.cardinals)
- var/turf/target = get_edge_target_turf(user, fuck_you_dir)
- var/range = pressures/250
- var/speed = range/5
-
user.visible_message("[user] is sent flying by pressure!","The pressure sends you flying!")
- user.throw_at(target, range, speed)
+
+ // if get_dir(src, user) is not 0, target is the edge_target_turf on that dir
+ // otherwise, edge_target_turf uses a random cardinal direction
+ // range is pressures / 250
+ // speed is pressures / 1250
+ user.throw_at(get_edge_target_turf(user, get_dir(src, user) || pick(GLOB.cardinals)), pressures / 250, pressures / 1250)
/obj/machinery/atmospherics/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -255,30 +245,20 @@ Pipelines + Other Objects -> Pipe network
transfer_fingerprints_to(stored)
..()
-/obj/machinery/atmospherics/proc/getpipeimage(iconset, iconstate, direction, col=rgb(255,255,255))
+/obj/machinery/atmospherics/proc/getpipeimage(iconset, iconstate, direction, col=rgb(255,255,255), piping_layer=2)
//Add identifiers for the iconset
if(iconsetids[iconset] == null)
iconsetids[iconset] = num2text(iconsetids.len + 1)
//Generate a unique identifier for this image combination
- var/identifier = iconsetids[iconset] + "_[iconstate]_[direction]_[col]"
+ var/identifier = iconsetids[iconset] + "_[iconstate]_[direction]_[col]_[piping_layer]"
if((!(. = pipeimages[identifier])))
var/image/pipe_overlay
pipe_overlay = . = pipeimages[identifier] = image(iconset, iconstate, dir = direction)
pipe_overlay.color = col
-
-/obj/machinery/atmospherics/proc/icon_addintact(var/obj/machinery/atmospherics/node)
- var/image/img = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', "pipe_intact", get_dir(src,node), node.pipe_color)
- underlays += img
- return img.dir
-
-/obj/machinery/atmospherics/proc/icon_addbroken(var/connected = FALSE)
- var/unconnected = (~connected) & initialize_directions
- for(var/direction in GLOB.cardinals)
- if(unconnected & direction)
- underlays += getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', "pipe_exposed", direction)
+ PIPING_LAYER_SHIFT(pipe_overlay, piping_layer)
/obj/machinery/atmospherics/on_construction(obj_color, set_layer)
if(can_unwrench)
@@ -320,7 +300,7 @@ Pipelines + Other Objects -> Pipe network
if(target_move.can_crawl_through())
if(is_type_in_typecache(target_move, GLOB.ventcrawl_machinery))
user.forceMove(target_move.loc) //handle entering and so on.
- user.visible_message("You hear something squeezing through the ducts...","You climb out the ventilation system.")
+ user.visible_message("You hear something squeezing through the ducts...", "You climb out the ventilation system.")
else
var/list/pipenetdiff = returnPipenets() ^ target_move.returnPipenets()
if(pipenetdiff.len)
@@ -332,7 +312,7 @@ Pipelines + Other Objects -> Pipe network
playsound(src, 'sound/machines/ventcrawl.ogg', 50, 1, -3)
else if(is_type_in_typecache(src, GLOB.ventcrawl_machinery) && can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent
user.forceMove(loc)
- user.visible_message("You hear something squeezing through the ducts...","You climb out the ventilation system.")
+ user.visible_message("You hear something squeezing through the ducts...", "You climb out the ventilation system.")
user.canmove = FALSE
addtimer(VARSET_CALLBACK(user, canmove, TRUE), 1)
@@ -356,3 +336,6 @@ Pipelines + Other Objects -> Pipe network
//Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it.
/obj/machinery/atmospherics/proc/can_see_pipes()
return TRUE
+
+/obj/machinery/atmospherics/proc/update_layer()
+ layer = initial(layer) + (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm
index 486a57450b..45ccaf1e86 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm
@@ -8,24 +8,14 @@
/obj/machinery/atmospherics/components/binary/SetInitDirections()
switch(dir)
- if(NORTH)
+ if(NORTH, SOUTH)
initialize_directions = NORTH|SOUTH
- if(SOUTH)
- initialize_directions = NORTH|SOUTH
- if(EAST)
+ if(EAST, WEST)
initialize_directions = EAST|WEST
- if(WEST)
- initialize_directions = EAST|WEST
-/*
-Iconnery
-*/
+
/obj/machinery/atmospherics/components/binary/hide(intact)
update_icon()
-
- ..(intact)
-/*
-Housekeeping and pipe network stuff
-*/
+ ..()
/obj/machinery/atmospherics/components/binary/getNodeConnects()
return list(turn(dir, 180), dir)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
index 9f38757a89..9238b8602b 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
@@ -1,13 +1,12 @@
-/*
-Acts like a normal vent, but has an input AND output.
-*/
+//Acts like a normal vent, but has an input AND output.
+
#define EXT_BOUND 1
#define INPUT_MIN 2
#define OUTPUT_MAX 4
/obj/machinery/atmospherics/components/binary/dp_vent_pump
icon = 'icons/obj/atmospherics/components/unary_devices.dmi' //We reuse the normal vent icons!
- icon_state = "dpvent_map"
+ icon_state = "dpvent_map-2"
//node2 is output port
//node1 is input port
@@ -27,97 +26,25 @@ Acts like a normal vent, but has an input AND output.
var/output_pressure_max = 0
var/pressure_checks = EXT_BOUND
+
//EXT_BOUND: Do not pass external_pressure_bound
//INPUT_MIN: Do not pass input_pressure_min
//OUTPUT_MAX: Do not pass output_pressure_max
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/on
- on = TRUE
- icon_state = "dpvent_map_on"
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/binary/dp_vent_pump/Destroy()
SSradio.remove_object(src, frequency)
return ..()
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume
- name = "large dual-port air vent"
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix
- id = INCINERATOR_TOXMIX_DP_VENTPUMP
- frequency = FREQ_AIRLOCK_CONTROL
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos
- id = INCINERATOR_ATMOS_DP_VENTPUMP
- frequency = FREQ_AIRLOCK_CONTROL
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_syndicatelava
- id = INCINERATOR_SYNDICATELAVA_DP_VENTPUMP
- frequency = FREQ_AIRLOCK_CONTROL
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on
- on = TRUE
- icon_state = "dpvent_map_on"
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/New()
- ..()
- var/datum/gas_mixture/air1 = airs[1]
- var/datum/gas_mixture/air2 = airs[2]
- air1.volume = 1000
- air2.volume = 1000
-
/obj/machinery/atmospherics/components/binary/dp_vent_pump/update_icon_nopipes()
cut_overlays()
if(showpipe)
- add_overlay(getpipeimage('icons/obj/atmospherics/components/unary_devices.dmi', "dpvent_cap"))
+ var/image/cap = getpipeimage(icon, "dpvent_cap", dir, piping_layer = piping_layer)
+ add_overlay(cap)
if(!on || !is_operational())
icon_state = "vent_off"
- return
-
- if(pump_direction)
- icon_state = "vent_out"
else
- icon_state = "vent_in"
+ icon_state = pump_direction ? "vent_out" : "vent_in"
/obj/machinery/atmospherics/components/binary/dp_vent_pump/process_atmos()
..()
@@ -248,6 +175,70 @@ Acts like a normal vent, but has an input AND output.
broadcast_status()
update_icon()
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume
+ name = "large dual-port air vent"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/New()
+ ..()
+ var/datum/gas_mixture/air1 = airs[1]
+ var/datum/gas_mixture/air2 = airs[2]
+ air1.volume = 1000
+ air2.volume = 1000
+
+// Mapping
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer1
+ piping_layer = 1
+ icon_state = "dpvent_map-1"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer3
+ piping_layer = 3
+ icon_state = "dpvent_map-3"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/on
+ on = TRUE
+ icon_state = "dpvent_map_on-2"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer1
+ piping_layer = 1
+ icon_state = "dpvent_map_on-1"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/on/layer3
+ piping_layer = 3
+ icon_state = "dpvent_map_on-3"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix
+ id = INCINERATOR_TOXMIX_DP_VENTPUMP
+ frequency = FREQ_AIRLOCK_CONTROL
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos
+ id = INCINERATOR_ATMOS_DP_VENTPUMP
+ frequency = FREQ_AIRLOCK_CONTROL
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_syndicatelava
+ id = INCINERATOR_SYNDICATELAVA_DP_VENTPUMP
+ frequency = FREQ_AIRLOCK_CONTROL
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer1
+ piping_layer = 1
+ icon_state = "dpvent_map-1"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer3
+ piping_layer = 3
+ icon_state = "dpvent_map-3"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on
+ on = TRUE
+ icon_state = "dpvent_map_on-2"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer1
+ piping_layer = 1
+ icon_state = "dpvent_map_on-1"
+
+/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/on/layer3
+ piping_layer = 3
+ icon_state = "dpvent_map_on-3"
+
#undef EXT_BOUND
#undef INPUT_MIN
#undef OUTPUT_MAX
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 329ef33637..02eb95acab 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -7,12 +7,13 @@ Passive gate is similar to the regular pump except:
*/
/obj/machinery/atmospherics/components/binary/passive_gate
- icon_state = "passgate_map"
+ icon_state = "passgate_map-2"
name = "passive gate"
desc = "A one-way air valve that does not require power."
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
@@ -25,27 +26,15 @@ Passive gate is similar to the regular pump except:
construction_type = /obj/item/pipe/directional
pipe_state = "passivegate"
-/obj/machinery/atmospherics/components/binary/passive_gate/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/passive_gate/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/binary/passive_gate/Destroy()
SSradio.remove_object(src,frequency)
return ..()
/obj/machinery/atmospherics/components/binary/passive_gate/update_icon_nopipes()
- if(!on)
- icon_state = "passgate_off"
- cut_overlays()
- return
-
- add_overlay(getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', "passgate_on"))
+ cut_overlays()
+ icon_state = "passgate_off"
+ if(on)
+ add_overlay(getpipeimage(icon, "passgate_on"))
/obj/machinery/atmospherics/components/binary/passive_gate/process_atmos()
..()
@@ -176,3 +165,11 @@ Passive gate is similar to the regular pump except:
if(. && on)
to_chat(user, "You cannot unwrench [src], turn it off first!")
return FALSE
+
+/obj/machinery/atmospherics/components/binary/passive_gate/layer1
+ piping_layer = 1
+ icon_state = "passgate_map-1"
+
+/obj/machinery/atmospherics/components/binary/passive_gate/layer3
+ piping_layer = 3
+ icon_state = "passgate_map-3"
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index c05c3bb3c9..9e49953df5 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -1,23 +1,22 @@
-/*
-Every cycle, the pump uses the air in air_in to try and make air_out the perfect pressure.
-
-node1, air1, network1 correspond to input
-node2, air2, network2 correspond to output
-
-Thus, the two variables affect pump operation are set in New():
- air1.volume
- This is the volume of gas available to the pump that may be transfered to the output
- air2.volume
- Higher quantities of this cause more air to be perfected later
- but overall network volume is also increased as this increases...
-*/
+// Every cycle, the pump uses the air in air_in to try and make air_out the perfect pressure.
+//
+// node1, air1, network1 correspond to input
+// node2, air2, network2 correspond to output
+//
+// Thus, the two variables affect pump operation are set in New():
+// air1.volume
+// This is the volume of gas available to the pump that may be transfered to the output
+// air2.volume
+// Higher quantities of this cause more air to be perfected later
+// but overall network volume is also increased as this increases...
/obj/machinery/atmospherics/components/binary/pump
- icon_state = "pump_map"
+ icon_state = "pump_map-2"
name = "gas pump"
desc = "A pump that moves gas by pressure."
can_unwrench = TRUE
+ shift_underlay_only = FALSE
var/target_pressure = ONE_ATMOSPHERE
@@ -54,30 +53,6 @@ Thus, the two variables affect pump operation are set in New():
message_admins("Pump, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
return TRUE
-/obj/machinery/atmospherics/components/binary/pump/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/pump/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/pump/on
- on = TRUE
- icon_state = "pump_on_map"
-
-/obj/machinery/atmospherics/components/binary/pump/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/pump/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/binary/pump/Destroy()
SSradio.remove_object(src,frequency)
if(radio_connection)
@@ -85,11 +60,7 @@ Thus, the two variables affect pump operation are set in New():
return ..()
/obj/machinery/atmospherics/components/binary/pump/update_icon_nopipes()
- if(!is_operational())
- icon_state = "pump_off"
- return
-
- icon_state = "pump_[on?"on":"off"]"
+ icon_state = (on && is_operational()) ? "pump_on" : "pump_off"
/obj/machinery/atmospherics/components/binary/pump/process_atmos()
// ..()
@@ -222,3 +193,23 @@ Thus, the two variables affect pump operation are set in New():
investigate_log("Pump, [src.name], was unwrenched by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
message_admins("Pump, [src.name], was unwrenched by [ADMIN_LOOKUPFLW(user)] at [A]")
return TRUE
+
+/obj/machinery/atmospherics/components/binary/pump/layer1
+ piping_layer = 1
+ icon_state= "pump_map-1"
+
+/obj/machinery/atmospherics/components/binary/pump/layer3
+ piping_layer = 3
+ icon_state= "pump_map-3"
+
+/obj/machinery/atmospherics/components/binary/pump/on
+ on = TRUE
+ icon_state = "pump_on_map-2"
+
+/obj/machinery/atmospherics/components/binary/pump/on/layer1
+ piping_layer = 1
+ icon_state= "pump_on_map-1"
+
+/obj/machinery/atmospherics/components/binary/pump/on/layer3
+ piping_layer = 3
+ icon_state= "pump_on_map-3"
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index f22ac62106..43cb658210 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -3,12 +3,15 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
*/
/obj/machinery/atmospherics/components/binary/valve
- icon_state = "mvalve_map"
+ icon_state = "mvalve_map-2"
name = "manual valve"
desc = "A pipe with a valve that can be used to disable flow of gas through it."
can_unwrench = TRUE
- interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN //Intentionally no allow_silicon flag
+ shift_underlay_only = FALSE
+
+ interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN //Intentionally no allow_silicon flag
+ pipe_flags = PIPING_CARDINAL_AUTONORMALIZE
var/frequency = 0
var/id = null
@@ -20,101 +23,87 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
var/switching = FALSE
+/obj/machinery/atmospherics/components/binary/valve/update_icon_nopipes(animation = FALSE)
+ normalize_cardinal_directions()
+ if(animation)
+ flick("[valve_type]valve_[on][!on]", src)
+ icon_state = "[valve_type]valve_[on ? "on" : "off"]"
+
+/obj/machinery/atmospherics/components/binary/valve/proc/toggle()
+ if(on)
+ on = FALSE
+ update_icon_nopipes()
+ investigate_log("was closed by [usr ? key_name(usr) : "a remote signal"]", INVESTIGATE_ATMOS)
+ else
+ on = TRUE
+ update_icon_nopipes()
+ update_parents()
+ var/datum/pipeline/parent1 = parents[1]
+ parent1.reconcile_air()
+ investigate_log("was opened by [usr ? key_name(usr) : "a remote signal"]", INVESTIGATE_ATMOS)
+
+/obj/machinery/atmospherics/components/binary/valve/interact(mob/user)
+ add_fingerprint(usr)
+ if(switching)
+ return
+ update_icon_nopipes(TRUE)
+ switching = TRUE
+ addtimer(CALLBACK(src, .proc/finish_interact), 10)
+
+/obj/machinery/atmospherics/components/binary/valve/proc/finish_interact()
+ toggle()
+ switching = FALSE
+
+/obj/machinery/atmospherics/components/binary/valve/digital // can be controlled by AI
+ icon_state = "dvalve_map-2"
+ name = "digital valve"
+ desc = "A digitally controlled valve."
+ valve_type = "d"
+ pipe_state = "dvalve"
+ interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN | INTERACT_MACHINE_OPEN_SILICON
+
+/obj/machinery/atmospherics/components/binary/valve/digital/update_icon_nopipes(animation)
+ if(!is_operational())
+ normalize_cardinal_directions()
+ icon_state = "dvalve_nopower"
+ return
+ ..()
+
+
/obj/machinery/atmospherics/components/binary/valve/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
+ piping_layer = 1
+ icon_state = "mvalve_map-1"
/obj/machinery/atmospherics/components/binary/valve/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+ piping_layer = 3
+ icon_state = "mvalve_map-3"
/obj/machinery/atmospherics/components/binary/valve/on
on = TRUE
/obj/machinery/atmospherics/components/binary/valve/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
+ piping_layer = 1
+ icon_state = "mvalve_map-1"
/obj/machinery/atmospherics/components/binary/valve/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/valve/update_icon_nopipes(animation = 0)
- normalize_dir()
- if(animation)
- flick("[valve_type]valve_[on][!on]",src)
- icon_state = "[valve_type]valve_[on?"on":"off"]"
-
-/obj/machinery/atmospherics/components/binary/valve/proc/open()
- on = TRUE
- update_icon_nopipes()
- update_parents()
- var/datum/pipeline/parent1 = parents[1]
- parent1.reconcile_air()
- investigate_log("was opened by [usr ? key_name(usr) : "a remote signal"]", INVESTIGATE_ATMOS)
-
-/obj/machinery/atmospherics/components/binary/valve/proc/close()
- on = FALSE
- update_icon_nopipes()
- investigate_log("was closed by [usr ? key_name(usr) : "a remote signal"]", INVESTIGATE_ATMOS)
-
-/obj/machinery/atmospherics/components/binary/valve/proc/normalize_dir()
- if(dir==SOUTH)
- setDir(NORTH)
- else if(dir==WEST)
- setDir(EAST)
-
-/obj/machinery/atmospherics/components/binary/valve/interact(mob/user)
- add_fingerprint(usr)
- update_icon_nopipes(1)
- if(switching)
- return
- switching = TRUE
- sleep(10)
- if(on)
- close()
- else
- open()
- switching = FALSE
-
-/obj/machinery/atmospherics/components/binary/valve/digital // can be controlled by AI
- name = "digital valve"
- desc = "A digitally controlled valve."
- icon_state = "dvalve_map"
- valve_type = "d"
- pipe_state = "dvalve"
- interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN | INTERACT_MACHINE_OPEN_SILICON
+ piping_layer = 3
+ icon_state = "mvalve_map-3"
/obj/machinery/atmospherics/components/binary/valve/digital/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
+ piping_layer = 1
+ icon_state = "dvalve_map-1"
/obj/machinery/atmospherics/components/binary/valve/digital/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+ piping_layer = 3
+ icon_state = "dvalve_map-3"
/obj/machinery/atmospherics/components/binary/valve/digital/on
on = TRUE
/obj/machinery/atmospherics/components/binary/valve/digital/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
+ piping_layer = 1
+ icon_state = "dvalve_map-1"
/obj/machinery/atmospherics/components/binary/valve/digital/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/valve/digital/update_icon_nopipes(animation)
- if(!is_operational())
- normalize_dir()
- icon_state = "dvalve_nopower"
- return
- ..()
+ piping_layer = 3
+ icon_state = "dvalve_map-3"
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index e9fa52fd23..864e3eef5e 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -1,23 +1,22 @@
-/*
-Every cycle, the pump uses the air in air_in to try and make air_out the perfect pressure.
-
-node1, air1, network1 correspond to input
-node2, air2, network2 correspond to output
-
-Thus, the two variables affect pump operation are set in New():
- air1.volume
- This is the volume of gas available to the pump that may be transfered to the output
- air2.volume
- Higher quantities of this cause more air to be perfected later
- but overall network volume is also increased as this increases...
-*/
+// Every cycle, the pump uses the air in air_in to try and make air_out the perfect pressure.
+//
+// node1, air1, network1 correspond to input
+// node2, air2, network2 correspond to output
+//
+// Thus, the two variables affect pump operation are set in New():
+// air1.volume
+// This is the volume of gas available to the pump that may be transfered to the output
+// air2.volume
+// Higher quantities of this cause more air to be perfected later
+// but overall network volume is also increased as this increases...
/obj/machinery/atmospherics/components/binary/volume_pump
- icon_state = "volpump_map"
+ icon_state = "volpump_map-2"
name = "volumetric gas pump"
desc = "A pump that moves gas by volume."
can_unwrench = TRUE
+ shift_underlay_only = FALSE
var/transfer_rate = MAX_TRANSFER_RATE
@@ -43,40 +42,12 @@ Thus, the two variables affect pump operation are set in New():
message_admins("Volume Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
return ..()
-/obj/machinery/atmospherics/components/binary/volume_pump/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/volume_pump/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/binary/volume_pump/Destroy()
SSradio.remove_object(src,frequency)
return ..()
-/obj/machinery/atmospherics/components/binary/volume_pump/on
- on = TRUE
- icon_state = "volpump_on_map"
-
-/obj/machinery/atmospherics/components/binary/volume_pump/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/binary/volume_pump/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/binary/volume_pump/update_icon_nopipes()
- if(!is_operational())
- icon_state = "volpump_off"
- return
-
- icon_state = "volpump_[on?"on":"off"]"
+ icon_state = on && is_operational() ? "volpump_on" : "volpump_off"
/obj/machinery/atmospherics/components/binary/volume_pump/process_atmos()
// ..()
@@ -208,3 +179,25 @@ Thus, the two variables affect pump operation are set in New():
investigate_log("Pump, [src.name], was unwrenched by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
message_admins("Pump, [src.name], was unwrenched by [ADMIN_LOOKUPFLW(user)] at [A]")
return TRUE
+
+// Mapping
+
+/obj/machinery/atmospherics/components/binary/volume_pump/layer1
+ piping_layer = 1
+ icon_state = "volpump_map-1"
+
+/obj/machinery/atmospherics/components/binary/volume_pump/layer3
+ piping_layer = 3
+ icon_state = "volpump_map-3"
+
+/obj/machinery/atmospherics/components/binary/volume_pump/on
+ on = TRUE
+ icon_state = "volpump_on_map"
+
+/obj/machinery/atmospherics/components/binary/volume_pump/on/layer1
+ piping_layer = 1
+ icon_state = "volpump_map-1"
+
+/obj/machinery/atmospherics/components/binary/volume_pump/on/layer3
+ piping_layer = 3
+ icon_state = "volpump_map-3"
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm
index e31d96a0c2..86e8863b2b 100644
--- a/code/modules/atmospherics/machinery/components/components_base.dm
+++ b/code/modules/atmospherics/machinery/components/components_base.dm
@@ -1,11 +1,10 @@
-/*
-So much of atmospherics.dm was used solely by components, so separating this makes things all a lot cleaner.
-On top of that, now people can add component-speciic procs/vars if they want!
-*/
+// So much of atmospherics.dm was used solely by components, so separating this makes things all a lot cleaner.
+// On top of that, now people can add component-speciic procs/vars if they want!
/obj/machinery/atmospherics/components
var/welded = FALSE //Used on pumps and scrubbers
var/showpipe = FALSE
+ var/shift_underlay_only = TRUE //Layering only shifts underlay?
var/list/datum/pipeline/parents
var/list/datum/gas_mixture/airs
@@ -19,9 +18,8 @@ On top of that, now people can add component-speciic procs/vars if they want!
var/datum/gas_mixture/A = new
A.volume = 200
airs[i] = A
-/*
-Iconnery
-*/
+
+// Iconnery
/obj/machinery/atmospherics/components/proc/update_icon_nopipes()
return
@@ -32,7 +30,7 @@ Iconnery
underlays.Cut()
var/turf/T = loc
- if(level == 2 || !T.intact)
+ if(level == 2 || (istype(T) && !T.intact))
showpipe = TRUE
plane = GAME_PLANE
else
@@ -46,14 +44,25 @@ Iconnery
for(var/i in 1 to device_type) //adds intact pieces
if(nodes[i])
- connected |= icon_addintact(nodes[i])
+ var/obj/machinery/atmospherics/node = nodes[i]
+ var/image/img = get_pipe_underlay("pipe_intact", get_dir(src, node), node.pipe_color)
+ underlays += img
+ connected |= img.dir
- icon_addbroken(connected) //adds broken pieces
+ for(var/direction in GLOB.cardinals)
+ if((initialize_directions & direction) && !(connected & direction))
+ underlays += get_pipe_underlay("pipe_exposed", direction)
+ if(!shift_underlay_only)
+ PIPING_LAYER_SHIFT(src, piping_layer)
-/*
-Pipenet stuff; housekeeping
-*/
+/obj/machinery/atmospherics/components/proc/get_pipe_underlay(state, dir, color = null)
+ if(color)
+ . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir, color, piping_layer = shift_underlay_only ? piping_layer : 2)
+ else
+ . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir, piping_layer = shift_underlay_only ? piping_layer : 2)
+
+// Pipenet stuff; housekeeping
/obj/machinery/atmospherics/components/nullifyNode(i)
if(nodes[i])
@@ -129,9 +138,7 @@ Pipenet stuff; housekeeping
return new_value
return default_set
-/*
-Helpers
-*/
+// Helpers
/obj/machinery/atmospherics/components/proc/update_parents()
for(var/i in 1 to device_type)
@@ -146,9 +153,9 @@ Helpers
for(var/i in 1 to device_type)
. += returnPipenet(nodes[i])
-/*
-UI Stuff
-*/
+
+// UI Stuff
+
/obj/machinery/atmospherics/components/ui_status(mob/user)
if(allowed(user))
@@ -156,9 +163,9 @@ UI Stuff
to_chat(user, "Access denied.")
return UI_CLOSE
-/*
-Tool acts
-*/
+
+// Tool acts
+
/obj/machinery/atmospherics/components/analyzer_act(mob/living/user, obj/item/I)
atmosanalyzer_scan(airs, user, src)
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index adca444b10..2fd1bdc121 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -1,9 +1,12 @@
/obj/machinery/atmospherics/components/trinary/filter
- name = "gas filter"
icon_state = "filter_off"
- desc = "Very useful for filtering gasses."
density = FALSE
+
+ name = "gas filter"
+ desc = "Very useful for filtering gasses."
+
can_unwrench = TRUE
+
var/transfer_rate = MAX_TRANSFER_RATE
var/filter_type = null
var/frequency = 0
@@ -38,38 +41,6 @@
message_admins("Filter, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
return TRUE
-/obj/machinery/atmospherics/components/trinary/filter/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/trinary/filter/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/trinary/filter/flipped
- icon_state = "filter_off_f"
- flipped = TRUE
-
-/obj/machinery/atmospherics/components/trinary/filter/flipped/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/trinary/filter/flipped/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-// These two filter types have critical_machine flagged to on and thus causes the area they are in to be exempt from the Grid Check event.
-
-/obj/machinery/atmospherics/components/trinary/filter/critical
- critical_machine = TRUE
-
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical
- critical_machine = TRUE
-
/obj/machinery/atmospherics/components/trinary/filter/proc/set_frequency(new_frequency)
SSradio.remove_object(src, frequency)
frequency = new_frequency
@@ -80,62 +51,26 @@
SSradio.remove_object(src,frequency)
return ..()
-/obj/machinery/atmospherics/components/trinary/filter/atmos //Used for atmos waste loops
- on = TRUE
- icon_state = "filter_on"
-
-/obj/machinery/atmospherics/components/trinary/filter/atmos/n2
- name = "nitrogen filter"
- filter_type = "n2"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/o2
- name = "oxygen filter"
- filter_type = "o2"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/co2
- name = "carbon dioxide filter"
- filter_type = "co2"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o
- name = "nitrous oxide filter"
- filter_type = "n2o"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma
- name = "plasma filter"
- filter_type = "plasma"
-
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped //This feels wrong, I know
- icon_state = "filter_on_f"
- flipped = TRUE
-
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2
- name = "nitrogen filter"
- filter_type = "n2"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2
- name = "oxygen filter"
- filter_type = "o2"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2
- name = "carbon dioxide filter"
- filter_type = "co2"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2o
- name = "nitrous oxide filter"
- filter_type = "n2o"
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma
- name = "plasma filter"
- filter_type = "plasma"
-
/obj/machinery/atmospherics/components/trinary/filter/update_icon()
cut_overlays()
for(var/direction in GLOB.cardinals)
- if(direction & initialize_directions)
- var/obj/machinery/atmospherics/node = findConnecting(direction)
- if(node)
- add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction, node.pipe_color))
- continue
- add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction))
- ..()
+ if(!(direction & initialize_directions))
+ continue
+ var/obj/machinery/atmospherics/node = findConnecting(direction)
+
+ var/image/cap
+ if(node)
+ cap = getpipeimage(icon, "cap", direction, node.pipe_color, piping_layer = piping_layer)
+ else
+ cap = getpipeimage(icon, "cap", direction, piping_layer = piping_layer)
+
+ add_overlay(cap)
+
+ return ..()
/obj/machinery/atmospherics/components/trinary/filter/update_icon_nopipes()
- if(on && nodes[1] && nodes[2] && nodes[3] && is_operational())
- icon_state = "filter_on[flipped?"_f":""]"
- return
- icon_state = "filter_off[flipped?"_f":""]"
+ var/on_state = on && nodes[1] && nodes[2] && nodes[3] && is_operational()
+ icon_state = "filter_[on_state ? "on" : "off"][flipped ? "_f" : ""]"
/obj/machinery/atmospherics/components/trinary/filter/power_change()
var/old_stat = stat
@@ -258,3 +193,91 @@
if(. && on && is_operational())
to_chat(user, "You cannot unwrench [src], turn it off first!")
return FALSE
+
+// Mapping
+
+/obj/machinery/atmospherics/components/trinary/filter/layer1
+ piping_layer = 1
+ icon_state = "filter_off_map-1"
+/obj/machinery/atmospherics/components/trinary/filter/layer3
+ piping_layer = 3
+ icon_state = "filter_off_map-3"
+
+/obj/machinery/atmospherics/components/trinary/filter/on
+ on = TRUE
+ icon_state = "filter_on"
+
+/obj/machinery/atmospherics/components/trinary/filter/on/layer1
+ piping_layer = 1
+ icon_state = "filter_on_map-1"
+/obj/machinery/atmospherics/components/trinary/filter/on/layer3
+ piping_layer = 3
+ icon_state = "filter_on_map-3"
+
+/obj/machinery/atmospherics/components/trinary/filter/flipped
+ icon_state = "filter_off_f"
+ flipped = TRUE
+
+/obj/machinery/atmospherics/components/trinary/filter/flipped/layer1
+ piping_layer = 1
+ icon_state = "filter_off_f_map-1"
+/obj/machinery/atmospherics/components/trinary/filter/flipped/layer3
+ piping_layer = 3
+ icon_state = "filter_off_f_map-3"
+
+/obj/machinery/atmospherics/components/trinary/filter/flipped/on
+ on = TRUE
+ icon_state = "filter_on_f"
+
+/obj/machinery/atmospherics/components/trinary/filter/flipped/on/layer1
+ piping_layer = 1
+ icon_state = "filter_on_f_map-1"
+/obj/machinery/atmospherics/components/trinary/filter/flipped/on/layer3
+ piping_layer = 3
+ icon_state = "filter_on_f_map-3"
+
+/obj/machinery/atmospherics/components/trinary/filter/atmos //Used for atmos waste loops
+ on = TRUE
+ icon_state = "filter_on"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/n2
+ name = "nitrogen filter"
+ filter_type = "n2"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/o2
+ name = "oxygen filter"
+ filter_type = "o2"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/co2
+ name = "carbon dioxide filter"
+ filter_type = "co2"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o
+ name = "nitrous oxide filter"
+ filter_type = "n2o"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma
+ name = "plasma filter"
+ filter_type = "plasma"
+
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped //This feels wrong, I know
+ icon_state = "filter_on_f"
+ flipped = TRUE
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2
+ name = "nitrogen filter"
+ filter_type = "n2"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2
+ name = "oxygen filter"
+ filter_type = "o2"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2
+ name = "carbon dioxide filter"
+ filter_type = "co2"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2o
+ name = "nitrous oxide filter"
+ filter_type = "n2o"
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma
+ name = "plasma filter"
+ filter_type = "plasma"
+
+// These two filter types have critical_machine flagged to on and thus causes the area they are in to be exempt from the Grid Check event.
+
+/obj/machinery/atmospherics/components/trinary/filter/critical
+ critical_machine = TRUE
+
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical
+ critical_machine = TRUE
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index 9646b78321..8c7d82d549 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -3,9 +3,10 @@
density = FALSE
name = "gas mixer"
- can_unwrench = TRUE
desc = "Very useful for mixing gasses."
+ can_unwrench = TRUE
+
var/target_pressure = ONE_ATMOSPHERE
var/node1_concentration = 0.5
var/node2_concentration = 0.5
@@ -41,66 +42,27 @@
return TRUE
//node 3 is the outlet, nodes 1 & 2 are intakes
-/obj/machinery/atmospherics/components/trinary/mixer/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/trinary/mixer/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/trinary/mixer/flipped
- icon_state = "mixer_off_f"
- flipped = TRUE
-
-/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/trinary/mixer/airmix //For standard airmix to distro
- name = "air mixer"
- icon_state = "mixer_on"
- node1_concentration = N2STANDARD
- node2_concentration = O2STANDARD
- on = TRUE
- target_pressure = MAX_OUTPUT_PRESSURE
-
-/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse
- node1_concentration = O2STANDARD
- node2_concentration = N2STANDARD
-
-/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped
- icon_state = "mixer_on_f"
- flipped = TRUE
-
-/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped/inverse
- node1_concentration = O2STANDARD
- node2_concentration = N2STANDARD
/obj/machinery/atmospherics/components/trinary/mixer/update_icon()
cut_overlays()
for(var/direction in GLOB.cardinals)
- if(direction & initialize_directions)
- var/obj/machinery/atmospherics/node = findConnecting(direction)
- if(node)
- add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction, node.pipe_color))
- continue
- add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction))
+ if(!(direction & initialize_directions))
+ continue
+ var/obj/machinery/atmospherics/node = findConnecting(direction)
+
+ var/image/cap
+ if(node)
+ cap = getpipeimage(icon, "cap", direction, node.pipe_color, piping_layer = piping_layer)
+ else
+ cap = getpipeimage(icon, "cap", direction, piping_layer = piping_layer)
+
+ add_overlay(cap)
+
return ..()
/obj/machinery/atmospherics/components/trinary/mixer/update_icon_nopipes()
- if(on && nodes[1] && nodes[2] && nodes[3] && is_operational())
- icon_state = "mixer_on[flipped?"_f":""]"
- return
- icon_state = "mixer_off[flipped?"_f":""]"
+ var/on_state = on && nodes[1] && nodes[2] && nodes[3] && is_operational()
+ icon_state = "mixer_[on_state ? "on" : "off"][flipped ? "_f" : ""]"
/obj/machinery/atmospherics/components/trinary/mixer/power_change()
var/old_stat = stat
@@ -233,8 +195,70 @@
update_icon()
-/obj/machinery/atmospherics/components/trinary/filter/can_unwrench(mob/user)
+/obj/machinery/atmospherics/components/trinary/mixer/can_unwrench(mob/user)
. = ..()
if(. && on && is_operational())
to_chat(user, "You cannot unwrench [src], turn it off first!")
return FALSE
+
+// mapping
+
+/obj/machinery/atmospherics/components/trinary/mixer/layer1
+ piping_layer = 1
+ icon_state = "mixer_off_map-1"
+/obj/machinery/atmospherics/components/trinary/mixer/layer3
+ piping_layer = 3
+ icon_state = "mixer_off_map-3"
+
+/obj/machinery/atmospherics/components/trinary/mixer/on
+ on = TRUE
+ icon_state = "mixer_on"
+
+/obj/machinery/atmospherics/components/trinary/mixer/on/layer1
+ piping_layer = 1
+ icon_state = "mixer_on_map-1"
+/obj/machinery/atmospherics/components/trinary/mixer/on/layer3
+ piping_layer = 3
+ icon_state = "mixer_on_map-3"
+
+/obj/machinery/atmospherics/components/trinary/mixer/flipped
+ icon_state = "mixer_off_f"
+ flipped = TRUE
+
+/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer1
+ piping_layer = 1
+ icon_state = "mixer_off_f_map-1"
+/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer3
+ piping_layer = 3
+ icon_state = "mixer_off_f_map-3"
+
+/obj/machinery/atmospherics/components/trinary/mixer/flipped/on
+ on = TRUE
+ icon_state = "mixer_on_f"
+
+/obj/machinery/atmospherics/components/trinary/mixer/flipped/on/layer1
+ piping_layer = 1
+ icon_state = "mixer_on_f_map-1"
+/obj/machinery/atmospherics/components/trinary/mixer/flipped/on/layer3
+ piping_layer = 3
+ icon_state = "mixer_on_f_map-3"
+
+/obj/machinery/atmospherics/components/trinary/mixer/airmix //For standard airmix to distro
+ name = "air mixer"
+ icon_state = "mixer_on"
+ node1_concentration = N2STANDARD
+ node2_concentration = O2STANDARD
+ target_pressure = MAX_OUTPUT_PRESSURE
+ on = TRUE
+
+/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse
+ node1_concentration = O2STANDARD
+ node2_concentration = N2STANDARD
+
+/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped
+ icon_state = "mixer_on_f"
+ flipped = TRUE
+
+/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped/inverse
+ node1_concentration = O2STANDARD
+ node2_concentration = N2STANDARD
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
index 66f9668bbf..a856ea1f3f 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
@@ -1,11 +1,12 @@
/obj/machinery/atmospherics/components/unary/heat_exchanger
- icon_state = "he_intact"
+ icon_state = "he1"
name = "heat exchanger"
desc = "Exchanges heat between two input gases. Set up for fast heat transfer."
can_unwrench = TRUE
+ shift_underlay_only = FALSE // not really used
layer = LOW_OBJ_LAYER
@@ -13,24 +14,23 @@
var/update_cycle
pipe_state = "heunary"
-
+
/obj/machinery/atmospherics/components/unary/heat_exchanger/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
+ piping_layer = 1
+ icon_state = "he_map-1"
/obj/machinery/atmospherics/components/unary/heat_exchanger/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+ piping_layer = 3
+ icon_state = "he_map-3"
/obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon()
if(nodes[1])
- icon_state = "he_intact"
+ icon_state = "he1"
var/obj/machinery/atmospherics/node = nodes[1]
add_atom_colour(node.color, FIXED_COLOUR_PRIORITY)
else
- icon_state = "he_exposed"
+ icon_state = "he0"
+ PIPING_LAYER_SHIFT(src, piping_layer)
/obj/machinery/atmospherics/components/unary/heat_exchanger/atmosinit()
if(!partner)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
index b4c37a2140..87ab4fa643 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
@@ -1,9 +1,10 @@
/obj/machinery/atmospherics/components/unary/outlet_injector
+ icon_state = "inje_map-2"
name = "air injector"
desc = "Has a valve and pump attached to it."
- icon_state = "inje_map"
use_power = IDLE_POWER_USE
can_unwrench = TRUE
+ shift_underlay_only = FALSE
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF //really helpful in building gas chambers for xenomorphs
var/injecting = 0
@@ -19,82 +20,20 @@
pipe_state = "injector"
-/obj/machinery/atmospherics/components/unary/outlet_injector/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/outlet_injector/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/unary/outlet_injector/Destroy()
SSradio.remove_object(src,frequency)
return ..()
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos
- frequency = FREQ_ATMOS_STORAGE
- on = TRUE
- volume_rate = 200
-
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste
- name = "atmos waste outlet injector"
- id = ATMOS_GAS_MONITOR_WASTE_ATMOS
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste
- name = "engine outlet injector"
- id = ATMOS_GAS_MONITOR_WASTE_ENGINE
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input
- name = "plasma tank input injector"
- id = ATMOS_GAS_MONITOR_INPUT_TOX
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input
- name = "oxygen tank input injector"
- id = ATMOS_GAS_MONITOR_INPUT_O2
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input
- name = "nitrogen tank input injector"
- id = ATMOS_GAS_MONITOR_INPUT_N2
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/mix_input
- name = "mix tank input injector"
- id = ATMOS_GAS_MONITOR_INPUT_MIX
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input
- name = "nitrous oxide tank input injector"
- id = ATMOS_GAS_MONITOR_INPUT_N2O
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input
- name = "air mix tank input injector"
- id = ATMOS_GAS_MONITOR_INPUT_AIR
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input
- name = "carbon dioxide tank input injector"
- id = ATMOS_GAS_MONITOR_INPUT_CO2
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input
- name = "incinerator chamber input injector"
- id = ATMOS_GAS_MONITOR_INPUT_INCINERATOR
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input
- name = "toxins mixing input injector"
- id = ATMOS_GAS_MONITOR_INPUT_TOXINS_LAB
-
-/obj/machinery/atmospherics/components/unary/outlet_injector/on
- on = TRUE
-
-/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/unary/outlet_injector/update_icon_nopipes()
cut_overlays()
if(showpipe)
+ // everything is already shifted so don't shift the cap
add_overlay(getpipeimage(icon, "inje_cap", initialize_directions))
if(!nodes[1] || !on || !is_operational())
icon_state = "inje_off"
- return
-
- icon_state = "inje_on"
+ else
+ icon_state = "inje_on"
/obj/machinery/atmospherics/components/unary/outlet_injector/power_change()
var/old_stat = stat
@@ -243,3 +182,63 @@
if(. && on && is_operational())
to_chat(user, "You cannot unwrench [src], turn it off first!")
return FALSE
+
+// mapping
+
+/obj/machinery/atmospherics/components/unary/outlet_injector/layer1
+ piping_layer = 1
+ icon_state = "inje_map-1"
+
+/obj/machinery/atmospherics/components/unary/outlet_injector/layer3
+ piping_layer = 2
+ icon_state = "inje_map-2"
+
+/obj/machinery/atmospherics/components/unary/outlet_injector/on
+ on = TRUE
+
+/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer1
+ piping_layer = 1
+ icon_state = "inje_map-1"
+
+/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3
+ piping_layer = 2
+ icon_state = "inje_map-2"
+
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos
+ frequency = FREQ_ATMOS_STORAGE
+ on = TRUE
+ volume_rate = 200
+
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste
+ name = "atmos waste outlet injector"
+ id = ATMOS_GAS_MONITOR_WASTE_ATMOS
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste
+ name = "engine outlet injector"
+ id = ATMOS_GAS_MONITOR_WASTE_ENGINE
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input
+ name = "plasma tank input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_TOX
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input
+ name = "oxygen tank input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_O2
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input
+ name = "nitrogen tank input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_N2
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/mix_input
+ name = "mix tank input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_MIX
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input
+ name = "nitrous oxide tank input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_N2O
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input
+ name = "air mix tank input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_AIR
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input
+ name = "carbon dioxide tank input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_CO2
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input
+ name = "incinerator chamber input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_INCINERATOR
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input
+ name = "toxins mixing input injector"
+ id = ATMOS_GAS_MONITOR_INPUT_TOXINS_LAB
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm
index 94d8959987..a113484d20 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm
@@ -13,43 +13,51 @@
/obj/machinery/atmospherics/components/unary/passive_vent/update_icon_nopipes()
cut_overlays()
if(showpipe)
- var/image/cap = getpipeimage(icon, "vent_cap", initialize_directions)
+ var/image/cap = getpipeimage(icon, "vent_cap", initialize_directions, piping_layer = piping_layer)
add_overlay(cap)
icon_state = "passive_vent"
/obj/machinery/atmospherics/components/unary/passive_vent/process_atmos()
..()
- var/datum/gas_mixture/environment = loc.return_air()
- var/environment_pressure = environment.return_pressure()
- var/pressure_delta = abs(environment_pressure - airs[1].return_pressure())
+ var/active = FALSE
- if((environment.temperature || airs[1].temperature) && pressure_delta > 0.5)
- if(environment_pressure < airs[1].return_pressure())
- var/air_temperature = (environment.temperature > 0) ? environment.temperature : airs[1].temperature
- var/transfer_moles = (pressure_delta * environment.volume) / (air_temperature * R_IDEAL_GAS_EQUATION)
- var/datum/gas_mixture/removed = airs[1].remove(transfer_moles)
- loc.assume_air(removed)
- air_update_turf()
+ var/datum/gas_mixture/external = loc.return_air()
+ var/datum/gas_mixture/internal = airs[1]
+ var/external_pressure = external.return_pressure()
+ var/internal_pressure = internal.return_pressure()
+ var/pressure_delta = abs(external_pressure - internal_pressure)
+
+ if(pressure_delta > 0.5)
+ if(external_pressure < internal_pressure)
+ var/air_temperature = (external.temperature > 0) ? external.temperature : internal.temperature
+ var/transfer_moles = (pressure_delta * external.volume) / (air_temperature * R_IDEAL_GAS_EQUATION)
+ var/datum/gas_mixture/removed = internal.remove(transfer_moles)
+ external.merge(removed)
else
- var/air_temperature = (airs[1].temperature > 0) ? airs[1].temperature : environment.temperature
- var/output_volume = airs[1].volume
- var/transfer_moles = (pressure_delta * output_volume) / (air_temperature * R_IDEAL_GAS_EQUATION)
- transfer_moles = min(transfer_moles, environment.total_moles()*airs[1].volume/environment.volume)
- var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
+ var/air_temperature = (internal.temperature > 0) ? internal.temperature : external.temperature
+ var/transfer_moles = (pressure_delta * internal.volume) / (air_temperature * R_IDEAL_GAS_EQUATION)
+ transfer_moles = min(transfer_moles, external.total_moles() * internal.volume / external.volume)
+ var/datum/gas_mixture/removed = external.remove(transfer_moles)
if(isnull(removed))
return
- airs[1].merge(removed)
- air_update_turf()
- update_parents()
+ internal.merge(removed)
+
+ active = TRUE
+
+ active = internal.temperature_share(external, OPEN_HEAT_TRANSFER_COEFFICIENT) ? TRUE : active
+
+ if(active)
+ air_update_turf()
+ update_parents()
/obj/machinery/atmospherics/components/unary/passive_vent/can_crawl_through()
return TRUE
/obj/machinery/atmospherics/components/unary/passive_vent/layer1
- piping_layer = PIPING_LAYER_MIN
+ piping_layer = 1
icon_state = "passive_vent_map-1"
/obj/machinery/atmospherics/components/unary/passive_vent/layer3
- piping_layer = PIPING_LAYER_MAX
+ piping_layer = 3
icon_state = "passive_vent_map-3"
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm
index c0e69a0c7d..81ca14a828 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm
@@ -1,25 +1,16 @@
/obj/machinery/atmospherics/components/unary/portables_connector
+ icon_state = "connector_map-2"
name = "connector port"
desc = "For connecting portables devices related to atmospherics control."
icon = 'icons/obj/atmospherics/components/unary_devices.dmi'
- icon_state = "connector_map" //Only for mapping purposes, so mappers can see direction
can_unwrench = TRUE
- var/obj/machinery/portable_atmospherics/connected_device
use_power = NO_POWER_USE
level = 0
layer = GAS_FILTER_LAYER
pipe_flags = PIPING_ONE_PER_TURF
pipe_state = "connector"
-
-/obj/machinery/atmospherics/components/unary/portables_connector/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-/obj/machinery/atmospherics/components/unary/portables_connector/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+ var/obj/machinery/portable_atmospherics/connected_device
/obj/machinery/atmospherics/components/unary/portables_connector/New()
..()
@@ -27,29 +18,22 @@
air_contents.volume = 0
-/obj/machinery/atmospherics/components/unary/portables_connector/visible
- level = 2
-
-/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/portables_connector/process_atmos()
- if(!connected_device)
- return
- update_parents()
-
/obj/machinery/atmospherics/components/unary/portables_connector/Destroy()
if(connected_device)
connected_device.disconnect()
return ..()
+/obj/machinery/atmospherics/components/unary/portables_connector/update_icon_nopipes()
+ icon_state = "connector"
+ if(showpipe)
+ var/image/cap = getpipeimage(icon, "connector_cap", initialize_directions, piping_layer = piping_layer)
+ add_overlay(cap)
+
+/obj/machinery/atmospherics/components/unary/portables_connector/process_atmos()
+ if(!connected_device)
+ return
+ update_parents()
+
/obj/machinery/atmospherics/components/unary/portables_connector/can_unwrench(mob/user)
. = ..()
if(. && connected_device)
@@ -60,3 +44,24 @@
return connected_device.portableConnectorReturnAir()
/obj/proc/portableConnectorReturnAir()
+ return
+
+
+/obj/machinery/atmospherics/components/unary/portables_connector/layer1
+ piping_layer = 1
+ icon_state = "connector_map-1"
+
+/obj/machinery/atmospherics/components/unary/portables_connector/layer3
+ piping_layer = 3
+ icon_state = "connector_map-3"
+
+/obj/machinery/atmospherics/components/unary/portables_connector/visible
+ level = 2
+
+/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer1
+ piping_layer = 1
+ icon_state = "connector_map-1"
+
+/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer3
+ piping_layer = 3
+ icon_state = "connector_map-3"
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm
index 4dd2216b19..c1bd59f49b 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm
@@ -5,11 +5,11 @@
name = "pressure tank"
desc = "A large vessel containing pressurized gas."
max_integrity = 800
- var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
density = TRUE
- var/gas_type = 0
layer = ABOVE_WINDOW_LAYER
pipe_flags = PIPING_ONE_PER_TURF
+ var/volume = 10000 //in liters
+ var/gas_type = 0
/obj/machinery/atmospherics/components/unary/tank/New()
..()
@@ -20,6 +20,16 @@
air_contents.gases[gas_type] = AIR_CONTENTS
name = "[name] ([GLOB.meta_gas_names[gas_type]])"
+/obj/machinery/atmospherics/components/unary/tank/air
+ icon_state = "grey"
+ name = "pressure tank (Air)"
+
+/obj/machinery/atmospherics/components/unary/tank/air/New()
+ ..()
+ var/datum/gas_mixture/air_contents = airs[1]
+ air_contents.gases[/datum/gas/oxygen] = AIR_CONTENTS * 0.2
+ air_contents.gases[/datum/gas/nitrogen] = AIR_CONTENTS * 0.8
+
/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide
gas_type = /datum/gas/carbon_dioxide
@@ -27,7 +37,6 @@
icon_state = "orange"
gas_type = /datum/gas/plasma
-
/obj/machinery/atmospherics/components/unary/tank/oxygen
icon_state = "blue"
gas_type = /datum/gas/oxygen
@@ -40,12 +49,3 @@
icon_state = "red_white"
gas_type = /datum/gas/nitrous_oxide
-/obj/machinery/atmospherics/components/unary/tank/air
- icon_state = "grey"
- name = "pressure tank (Air)"
-
-/obj/machinery/atmospherics/components/unary/tank/air/New()
- ..()
- var/datum/gas_mixture/air_contents = airs[1]
- air_contents.gases[/datum/gas/oxygen] = AIR_CONTENTS * 0.2
- air_contents.gases[/datum/gas/nitrogen] = AIR_CONTENTS * 0.8
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 2e06e68709..c69c4c47b0 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -11,7 +11,7 @@
layer = OBJ_LAYER
circuit = /obj/item/circuitboard/machine/thermomachine
- pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
+ pipe_flags = PIPING_ONE_PER_TURF
var/icon_state_off = "freezer"
var/icon_state_on = "freezer_1"
@@ -28,7 +28,10 @@
initialize_directions = dir
/obj/machinery/atmospherics/components/unary/thermomachine/on_construction()
- ..(dir,dir)
+ var/obj/item/circuitboard/machine/thermomachine/board = circuit
+ if(board)
+ piping_layer = board.pipe_layer
+ ..(dir, piping_layer)
/obj/machinery/atmospherics/components/unary/thermomachine/RefreshParts()
var/B
@@ -37,6 +40,8 @@
heat_capacity = 5000 * ((B - 1) ** 2)
/obj/machinery/atmospherics/components/unary/thermomachine/update_icon()
+ cut_overlays()
+
if(panel_open)
icon_state = icon_state_open
else if(on && is_operational())
@@ -44,6 +49,8 @@
else
icon_state = icon_state_off
+ add_overlay(getpipeimage(icon, "pipe", dir, , piping_layer))
+
/obj/machinery/atmospherics/components/unary/thermomachine/update_icon_nopipes()
cut_overlays()
if(showpipe)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
index 75f2a60f80..3cbf1b4d0e 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -6,9 +6,9 @@
#define RELEASING 1
/obj/machinery/atmospherics/components/unary/vent_pump
+ icon_state = "vent_map-2"
name = "air vent"
desc = "Has a valve and pump attached to it."
- icon_state = "vent_map"
use_power = IDLE_POWER_USE
can_unwrench = TRUE
welded = FALSE
@@ -32,92 +32,6 @@
pipe_state = "uvent"
-/obj/machinery/atmospherics/components/unary/vent_pump/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/on
- on = TRUE
- icon_state = "vent_map_on"
-
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon
- pump_direction = SIPHONING
- pressure_checks = INT_BOUND
- internal_pressure_bound = 4000
- external_pressure_bound = 0
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on
- on = TRUE
- icon_state = "vent_map_siphon_on"
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos
- frequency = FREQ_ATMOS_STORAGE
- on = TRUE
- icon_state = "vent_map_siphon_on"
-
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output
- name = "plasma tank output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_TOX
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output
- name = "oxygen tank output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_O2
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output
- name = "nitrogen tank output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_N2
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/mix_output
- name = "mix tank output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_MIX
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrous_output
- name = "nitrous oxide tank output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_N2O
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/carbon_output
- name = "carbon dioxide tank output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_CO2
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/incinerator_output
- name = "incinerator chamber output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_INCINERATOR
- frequency = FREQ_ATMOS_CONTROL
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxins_mixing_output
- name = "toxins mixing output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_TOXINS_LAB
- frequency = FREQ_ATMOS_CONTROL
-
/obj/machinery/atmospherics/components/unary/vent_pump/New()
..()
if(!id_tag)
@@ -133,82 +47,11 @@
radio_connection = null
return ..()
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume
- name = "large air vent"
- power_channel = EQUIP
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on
- on = TRUE
- icon_state = "vent_map_on"
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon
- pump_direction = SIPHONING
- pressure_checks = INT_BOUND
- internal_pressure_bound = 2000
- external_pressure_bound = 0
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on
- on = TRUE
- icon_state = "vent_map_siphon_on"
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos
- frequency = FREQ_ATMOS_STORAGE
- on = TRUE
- icon_state = "vent_map_siphon_on"
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output
- name = "air mix tank output inlet"
- id_tag = ATMOS_GAS_MONITOR_OUTPUT_AIR
-
-/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/New()
- ..()
- var/datum/gas_mixture/air_contents = airs[1]
- air_contents.volume = 1000
-
/obj/machinery/atmospherics/components/unary/vent_pump/update_icon_nopipes()
cut_overlays()
if(showpipe)
- add_overlay(getpipeimage(icon, "vent_cap", initialize_directions))
+ var/image/cap = getpipeimage(icon, "vent_cap", initialize_directions, piping_layer = piping_layer)
+ add_overlay(cap)
if(welded)
icon_state = "vent_welded"
@@ -445,6 +288,149 @@
pipe_vision_img.plane = ABOVE_HUD_PLANE
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, 1)
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume
+ name = "large air vent"
+ power_channel = EQUIP
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/New()
+ ..()
+ var/datum/gas_mixture/air_contents = airs[1]
+ air_contents.volume = 1000
+
+// mapping
+
+/obj/machinery/atmospherics/components/unary/vent_pump/layer1
+ piping_layer = 1
+ icon_state = "vent_map-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/layer3
+ piping_layer = 3
+ icon_state = "vent_map-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/on
+ on = TRUE
+ icon_state = "vent_map_on-2"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer1
+ piping_layer = 1
+ icon_state = "vent_map_on-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer3
+ piping_layer = 3
+ icon_state = "vent_map_on-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon
+ pump_direction = SIPHONING
+ pressure_checks = INT_BOUND
+ internal_pressure_bound = 4000
+ external_pressure_bound = 0
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer1
+ piping_layer = 1
+ icon_state = "vent_map-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer3
+ piping_layer = 3
+ icon_state = "vent_map-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on
+ on = TRUE
+ icon_state = "vent_map_siphon_on-2"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on/layer1
+ piping_layer = 1
+ icon_state = "vent_map_siphon_on-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on/layer3
+ piping_layer = 3
+ icon_state = "vent_map_siphon_on-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos
+ frequency = FREQ_ATMOS_STORAGE
+ on = TRUE
+ icon_state = "vent_map_siphon_on-2"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output
+ name = "plasma tank output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_TOX
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output
+ name = "oxygen tank output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_O2
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output
+ name = "nitrogen tank output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_N2
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/mix_output
+ name = "mix tank output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_MIX
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrous_output
+ name = "nitrous oxide tank output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_N2O
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/carbon_output
+ name = "carbon dioxide tank output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_CO2
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/incinerator_output
+ name = "incinerator chamber output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_INCINERATOR
+ frequency = FREQ_ATMOS_CONTROL
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxins_mixing_output
+ name = "toxins mixing output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_TOXINS_LAB
+ frequency = FREQ_ATMOS_CONTROL
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/layer1
+ piping_layer = 1
+ icon_state = "vent_map-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/layer3
+ piping_layer = 3
+ icon_state = "map_vent-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on
+ on = TRUE
+ icon_state = "vent_map_on-2"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer1
+ piping_layer = 1
+ icon_state = "vent_map_on-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer3
+ piping_layer = 3
+ icon_state = "map_vent_on-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon
+ pump_direction = SIPHONING
+ pressure_checks = INT_BOUND
+ internal_pressure_bound = 2000
+ external_pressure_bound = 0
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/layer1
+ piping_layer = 1
+ icon_state = "vent_map-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/layer3
+ piping_layer = 3
+ icon_state = "map_vent-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on
+ on = TRUE
+ icon_state = "vent_map_siphon_on-2"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on/layer1
+ piping_layer = 1
+ icon_state = "vent_map_siphon_on-1"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on/layer3
+ piping_layer = 3
+ icon_state = "vent_map_siphon_on-3"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos
+ frequency = FREQ_ATMOS_STORAGE
+ on = TRUE
+ icon_state = "vent_map_siphon_on-2"
+
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output
+ name = "air mix tank output inlet"
+ id_tag = ATMOS_GAS_MONITOR_OUTPUT_AIR
#undef INT_BOUND
#undef EXT_BOUND
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
index 9c3d07c96a..22cd9d7fca 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -2,9 +2,9 @@
#define SCRUBBING 1
/obj/machinery/atmospherics/components/unary/vent_scrubber
+ icon_state = "scrub_map-2"
name = "air scrubber"
desc = "Has a valve and pump attached to it."
- icon_state = "scrub_map"
use_power = IDLE_POWER_USE
idle_power_usage = 10
active_power_usage = 60
@@ -28,16 +28,6 @@
pipe_state = "scrubber"
-/obj/machinery/atmospherics/components/unary/vent_scrubber/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_scrubber/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/unary/vent_scrubber/New()
..()
if(!id_tag)
@@ -48,20 +38,6 @@
filter_types -= f
filter_types += gas_id2path(f)
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on
- on = TRUE
- icon_state = "scrub_map_on"
-
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/components/unary/vent_scrubber/Destroy()
var/area/A = get_area(src)
if (A)
@@ -92,7 +68,8 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/update_icon_nopipes()
cut_overlays()
if(showpipe)
- add_overlay(getpipeimage(icon, "scrub_cap", initialize_directions))
+ var/image/cap = getpipeimage(icon, "scrub_cap", initialize_directions, piping_layer = piping_layer)
+ add_overlay(cap)
if(welded)
icon_state = "scrub_welded"
@@ -322,7 +299,25 @@
pipe_vision_img.plane = ABOVE_HUD_PLANE
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, 1)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/layer1
+ piping_layer = 1
+ icon_state = "scrub_map-1"
+/obj/machinery/atmospherics/components/unary/vent_scrubber/layer3
+ piping_layer = 3
+ icon_state = "scrub_map-3"
+
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on
+ on = TRUE
+ icon_state = "scrub_map_on-2"
+
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1
+ piping_layer = 1
+ icon_state = "scrub_map_on-1"
+
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3
+ piping_layer = 3
+ icon_state = "scrub_map_on-3"
#undef SIPHONING
#undef SCRUBBING
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index eb7d9534c1..fab70cc168 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -50,10 +50,9 @@
target = candidate
setAttachLayer(candidate.piping_layer)
-/obj/machinery/meter/proc/setAttachLayer(var/new_layer)
+/obj/machinery/meter/proc/setAttachLayer(new_layer)
target_layer = new_layer
- pixel_x = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
- pixel_y = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
+ PIPING_LAYER_DOUBLE_SHIFT(src, target_layer)
/obj/machinery/meter/process_atmos()
if(!(target?.flags_1 & INITIALIZED_1))
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index b087859a47..4da053d3c8 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -1,5 +1,4 @@
/obj/machinery/atmospherics/pipe/heat_exchanging
- icon = 'icons/obj/atmospherics/pipes/heat.dmi'
level = 2
var/minimum_temperature_difference = 20
var/thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm
index 606693ddda..695cb61f51 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm
@@ -1,6 +1,6 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/junction
- icon = 'icons/obj/atmospherics/pipes/junction.dmi'
- icon_state = "intact"
+ icon = 'icons/obj/atmospherics/pipes/he-junction.dmi'
+ icon_state = "pipe11-2"
name = "junction"
desc = "A one meter junction that connects regular and heat-exchanging pipe."
@@ -15,21 +15,11 @@
construction_type = /obj/item/pipe/directional
pipe_state = "junction"
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/pipe/heat_exchanging/junction/SetInitDirections()
switch(dir)
- if(NORTH,SOUTH)
+ if(NORTH, SOUTH)
initialize_directions = SOUTH|NORTH
- if(EAST,WEST)
+ if(EAST, WEST)
initialize_directions = WEST|EAST
/obj/machinery/atmospherics/pipe/heat_exchanging/junction/getNodeConnects()
@@ -37,5 +27,19 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/junction/isConnectable(obj/machinery/atmospherics/target, given_layer, he_type_check)
if(dir == get_dir(target, src))
- return ..(target, given_layer, FALSE) //we want a normal pipe instead
+ return ..(target, given_layer, FALSE) //we want a normal pipe instead
return ..(target, given_layer, TRUE)
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction/update_icon()
+ icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]"
+ update_layer()
+ update_alpha()
+
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1
+ piping_layer = 1
+ icon_state = "pipe11-1"
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer3
+ piping_layer = 3
+ icon_state = "pipe11-3"
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm
index 6689905cf7..e0cf903465 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm
@@ -1,6 +1,6 @@
-//3-way manifold
+//3-Way Manifold
/obj/machinery/atmospherics/pipe/heat_exchanging/manifold
- icon_state = "manifold"
+ icon_state = "manifold-2"
name = "pipe manifold"
desc = "A manifold composed of regular pipes."
@@ -13,74 +13,34 @@
construction_type = /obj/item/pipe/trinary
pipe_state = "he_manifold"
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
+ var/mutable_appearance/center
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+/obj/machinery/atmospherics/pipe/manifold/Initialize()
+ icon_state = ""
+ center = mutable_appearance(icon, "manifold_center")
+ return ..()
/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/SetInitDirections()
- switch(dir)
- if(NORTH)
- initialize_directions = EAST|SOUTH|WEST
- if(SOUTH)
- initialize_directions = WEST|NORTH|EAST
- if(EAST)
- initialize_directions = SOUTH|WEST|NORTH
- if(WEST)
- initialize_directions = NORTH|EAST|SOUTH
+ initialize_directions = NORTH|SOUTH|EAST|WEST
+ initialize_directions &= ~dir
/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/update_icon()
- var/invis = invisibility ? "-f" : ""
-
- icon_state = "manifold_center[invis]"
-
cut_overlays()
+ PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer)
+ add_overlay(center)
//Add non-broken pieces
for(var/i in 1 to device_type)
if(nodes[i])
- add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i])))
+ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) )
-//4-way manifold
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w
- icon_state = "manifold4w"
+ update_layer()
+ update_alpha()
- name = "4-way pipe manifold"
- desc = "A manifold composed of heat-exchanging pipes."
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1
+ piping_layer = 1
+ icon_state = "manifold-1"
- initialize_directions = NORTH|SOUTH|EAST|WEST
-
- device_type = QUATERNARY
-
- construction_type = /obj/item/pipe/quaternary
- pipe_state = "he_manifold4w"
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/SetInitDirections()
- initialize_directions = initial(initialize_directions)
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/update_icon()
- var/invis = invisibility ? "-f" : ""
-
- icon_state = "manifold4w_center[invis]"
-
- cut_overlays()
-
- //Add non-broken pieces
- for(var/i in 1 to device_type)
- if(nodes[i])
- add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i])))
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer3
+ piping_layer = 3
+ icon_state = "manifold-3"
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm
new file mode 100644
index 0000000000..88086e44e2
--- /dev/null
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm
@@ -0,0 +1,48 @@
+//4-Way Manifold
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w
+ icon = 'icons/obj/atmospherics/pipes/he-manifold.dmi'
+ icon_state = "manifold4w-2"
+
+ name = "4-way pipe manifold"
+ desc = "A manifold composed of heat-exchanging pipes."
+
+ initialize_directions = NORTH|SOUTH|EAST|WEST
+
+ device_type = QUATERNARY
+
+ construction_type = /obj/item/pipe/quaternary
+ pipe_state = "he_manifold4w"
+
+ var/mutable_appearance/center
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/New()
+ icon_state = ""
+ center = mutable_appearance(icon, "manifold4w_center")
+ return ..()
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/SetInitDirections()
+ initialize_directions = initial(initialize_directions)
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/update_icon()
+ cut_overlays()
+
+ PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer)
+ add_overlay(center)
+
+ //Add non-broken pieces
+ for(var/i in 1 to device_type)
+ if(nodes[i])
+ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) )
+
+ update_layer()
+ update_alpha()
+
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/layer1
+ piping_layer = 1
+ icon_state = "manifold4w-1"
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/layer3
+ piping_layer = 3
+ icon_state = "manifold4w-3"
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm
index ad137a227d..3397e75314 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm
@@ -1,46 +1,38 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/simple
- icon_state = "intact"
+ icon = 'icons/obj/atmospherics/pipes/he-simple.dmi'
+ icon_state = "pipe11-2"
name = "pipe"
desc = "A one meter section of heat-exchanging pipe."
dir = SOUTH
initialize_directions = SOUTH|NORTH
+ pipe_flags = PIPING_CARDINAL_AUTONORMALIZE
device_type = BINARY
construction_type = /obj/item/pipe/binary/bendable
pipe_state = "he"
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
/obj/machinery/atmospherics/pipe/heat_exchanging/simple/SetInitDirections()
if(dir in GLOB.diagonals)
initialize_directions = dir
+ return
switch(dir)
- if(NORTH,SOUTH)
+ if(NORTH, SOUTH)
initialize_directions = SOUTH|NORTH
- if(EAST,WEST)
- initialize_directions = WEST|EAST
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple/proc/normalize_dir()
- if(dir==SOUTH)
- setDir(NORTH)
- else if(dir==WEST)
- setDir(EAST)
-
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple/atmosinit()
- normalize_dir()
- ..()
+ if(EAST, WEST)
+ initialize_directions = EAST|WEST
/obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_icon()
- normalize_dir()
- ..()
+ icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]"
+ update_layer()
+ update_alpha()
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1
+ piping_layer = 1
+ icon_state = "pipe11-1"
+
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3
+ piping_layer = 3
+ icon_state = "pipe11-3"
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
index acafc7436a..b98098584f 100644
--- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
@@ -1,5 +1,5 @@
/obj/machinery/atmospherics/pipe/layer_manifold
- name = "pipe-layer manifold"
+ name = "layer adaptor"
icon = 'icons/obj/atmospherics/pipes/manifold.dmi'
icon_state = "manifoldlayer"
desc = "A special pipe to bridge pipe layers with."
@@ -9,14 +9,15 @@
piping_layer = PIPING_LAYER_DEFAULT
device_type = 0
volume = 260
+ construction_type = /obj/item/pipe/binary
+ pipe_state = "manifoldlayer"
var/list/front_nodes
var/list/back_nodes
- construction_type = /obj/item/pipe/binary
- pipe_state = "layer_manifold"
/obj/machinery/atmospherics/pipe/layer_manifold/Initialize()
front_nodes = list()
back_nodes = list()
+ icon_state = "manifoldlayer_center"
return ..()
/obj/machinery/atmospherics/pipe/layer_manifold/Destroy()
@@ -36,30 +37,36 @@
return front_nodes + back_nodes + nodes
/obj/machinery/atmospherics/pipe/layer_manifold/update_icon() //HEAVILY WIP FOR UPDATE ICONS!!
- layer = (initial(layer) + (PIPING_LAYER_MAX * PIPING_LAYER_LCHANGE)) //This is above everything else.
- var/invis = invisibility ? "-f" : ""
- icon_state = "[initial(icon_state)][invis]"
cut_overlays()
- for(var/obj/machinery/atmospherics/A in front_nodes)
- add_attached_image(A)
- for(var/obj/machinery/atmospherics/A in back_nodes)
- add_attached_image(A)
+ layer = initial(layer) + (PIPING_LAYER_MAX * PIPING_LAYER_LCHANGE) //This is above everything else.
-/obj/machinery/atmospherics/pipe/layer_manifold/proc/add_attached_image(obj/machinery/atmospherics/A)
- var/invis = A.invisibility ? "-f" : ""
+ for(var/node in front_nodes)
+ add_attached_images(node)
+ for(var/node in back_nodes)
+ add_attached_images(node)
+
+ update_alpha()
+
+/obj/machinery/atmospherics/pipe/layer_manifold/proc/add_attached_images(obj/machinery/atmospherics/A)
+ if(!A)
+ return
if(istype(A, /obj/machinery/atmospherics/pipe/layer_manifold))
- for(var/i = PIPING_LAYER_MIN, i <= PIPING_LAYER_MAX, i++)
- var/image/I = getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full_layer_long[invis]", get_dir(src, A), A.pipe_color)
- I.pixel_x = (i - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X
- I.pixel_y = (i - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y
- I.layer = layer - 0.01
- add_overlay(I)
+ for(var/i in PIPING_LAYER_MIN to PIPING_LAYER_MAX)
+ add_attached_image(get_dir(src, A), i)
+ return
+ add_attached_image(get_dir(src, A), A.piping_layer, A.pipe_color)
+
+/obj/machinery/atmospherics/pipe/layer_manifold/proc/add_attached_image(p_dir, p_layer, p_color = null)
+ var/image/I
+
+ if(p_color)
+ I = getpipeimage(icon, "pipe", p_dir, p_color, piping_layer = piping_layer)
else
- var/image/I = getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full_layer_long[invis]", get_dir(src, A), A.pipe_color)
- I.pixel_x = A.pixel_x
- I.pixel_y = A.pixel_y
- I.layer = layer - 0.01
- add_overlay(I)
+ I = getpipeimage(icon, "pipe", p_dir, piping_layer = piping_layer)
+
+ I.layer = layer - 0.01
+ PIPING_LAYER_SHIFT(I, p_layer)
+ add_overlay(I)
/obj/machinery/atmospherics/pipe/layer_manifold/SetInitDirections()
switch(dir)
diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm
index b089ebfa0a..77452fd6fd 100644
--- a/code/modules/atmospherics/machinery/pipes/manifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/manifold.dm
@@ -1,9 +1,8 @@
-/*
-3-Way Manifold
-*/
+//3-Way Manifold
+
/obj/machinery/atmospherics/pipe/manifold
icon = 'icons/obj/atmospherics/pipes/manifold.dmi'
- icon_state = "manifold"
+ icon_state = "manifold-2"
name = "pipe manifold"
desc = "A manifold composed of regular pipes."
@@ -16,399 +15,25 @@
construction_type = /obj/item/pipe/trinary
pipe_state = "manifold"
+ var/mutable_appearance/center
+
+/obj/machinery/atmospherics/pipe/manifold/Initialize()
+ icon_state = ""
+ center = mutable_appearance(icon, "manifold_center")
+ return ..()
+
/obj/machinery/atmospherics/pipe/manifold/SetInitDirections()
- switch(dir)
- if(NORTH)
- initialize_directions = EAST|SOUTH|WEST
- if(SOUTH)
- initialize_directions = WEST|NORTH|EAST
- if(EAST)
- initialize_directions = SOUTH|WEST|NORTH
- if(WEST)
- initialize_directions = NORTH|EAST|SOUTH
+ initialize_directions = NORTH|SOUTH|EAST|WEST
+ initialize_directions &= ~dir
/obj/machinery/atmospherics/pipe/manifold/update_icon()
- var/invis = invisibility ? "-f" : ""
-
- icon_state = "manifold_center[invis]"
-
cut_overlays()
+ PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer)
+ add_overlay(center)
//Add non-broken pieces
for(var/i in 1 to device_type)
if(nodes[i])
- add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i])))
-
-//Colored pipes, use these for mapping
-/obj/machinery/atmospherics/pipe/manifold/general
-
-/obj/machinery/atmospherics/pipe/manifold/general/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/general/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/general/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/general/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/general/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/general/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/scrubbers
- name="scrubbers pipe"
- pipe_color=rgb(255,0,0)
- color=rgb(255,0,0)
-
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supply
- name="air supply pipe"
- pipe_color=rgb(0,0,255)
- color=rgb(0,0,255)
-
-/obj/machinery/atmospherics/pipe/manifold/supply/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supply/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supplymain
- name="main air supply pipe"
- pipe_color=rgb(130,43,255)
- color=rgb(130,43,255)
-
-/obj/machinery/atmospherics/pipe/manifold/supplymain/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/supplymain/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supplymain/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/yellow
- pipe_color=rgb(255,198,0)
- color=rgb(255,198,0)
-
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/yellow/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/yellow/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/yellow/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/cyan
- pipe_color=rgb(0,255,249)
- color=rgb(0,255,249)
-
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/cyan/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/cyan/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/green
- pipe_color=rgb(30,255,0)
- color=rgb(30,255,0)
-
-/obj/machinery/atmospherics/pipe/manifold/green/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/green/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/green/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/green/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/green/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/green/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/orange
- pipe_color=rgb(255,129,25)
- color=rgb(255,129,25)
-
-/obj/machinery/atmospherics/pipe/manifold/orange/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/orange/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/orange/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/orange/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/orange/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/orange/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/purple
- pipe_color=rgb(128,0,182)
- color=rgb(128,0,182)
-
-/obj/machinery/atmospherics/pipe/manifold/purple/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/purple/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/purple/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/purple/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/purple/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/purple/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/dark
- pipe_color=rgb(69,69,69)
- color=rgb(69,69,69)
-
-/obj/machinery/atmospherics/pipe/manifold/dark/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/dark/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/dark/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/dark/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/dark/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/dark/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/violet
- pipe_color=rgb(64,0,128)
- color=rgb(64,0,128)
-
-/obj/machinery/atmospherics/pipe/manifold/violet/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/violet/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/violet/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/violet/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/violet/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/violet/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/brown
- pipe_color=rgb(178,100,56)
- color=rgb(178,100,56)
-
-/obj/machinery/atmospherics/pipe/manifold/brown/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold/brown/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/brown/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/brown/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold/brown/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold/brown/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) )
+ update_layer()
+ update_alpha()
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm
index 5dc68f1609..1bcca8d5ae 100644
--- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm
+++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm
@@ -1,9 +1,8 @@
-/*
-4-way manifold
-*/
+//4-Way Manifold
+
/obj/machinery/atmospherics/pipe/manifold4w
icon = 'icons/obj/atmospherics/pipes/manifold.dmi'
- icon_state = "manifold4w"
+ icon_state = "manifold4w-2"
name = "4-way pipe manifold"
desc = "A manifold composed of regular pipes."
@@ -15,391 +14,24 @@
construction_type = /obj/item/pipe/quaternary
pipe_state = "manifold4w"
+ var/mutable_appearance/center
+
+/obj/machinery/atmospherics/pipe/manifold4w/Initialize()
+ icon_state = ""
+ center = mutable_appearance(icon, "manifold4w_center")
+ return ..()
+
/obj/machinery/atmospherics/pipe/manifold4w/SetInitDirections()
initialize_directions = initial(initialize_directions)
/obj/machinery/atmospherics/pipe/manifold4w/update_icon()
- var/invis = invisibility ? "-f" : ""
-
- icon_state = "manifold4w_center[invis]"
-
cut_overlays()
+ PIPING_LAYER_DOUBLE_SHIFT(center, piping_layer)
+ add_overlay(center)
//Add non-broken pieces
for(var/i in 1 to device_type)
if(nodes[i])
- add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i])))
-
-//Colored pipes, use these for mapping
-/obj/machinery/atmospherics/pipe/manifold4w/general
-
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/general/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/general/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/general/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers
- name="scrubbers pipe"
- pipe_color=rgb(255,0,0)
- color=rgb(255,0,0)
-
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supply
- name="air supply pipe"
- pipe_color=rgb(0,0,255)
- color=rgb(0,0,255)
-
-/obj/machinery/atmospherics/pipe/manifold4w/supply/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supply/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supplymain
- name="main air supply pipe"
- pipe_color=rgb(130,43,255)
- color=rgb(130,43,255)
-
-/obj/machinery/atmospherics/pipe/manifold4w/supplymain/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/supplymain/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supplymain/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/yellow
- pipe_color=rgb(255,198,0)
- color=rgb(255,198,0)
-
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/cyan
- pipe_color=rgb(0,255,249)
- color=rgb(0,255,249)
-
-/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/green
- pipe_color=rgb(30,255,0)
- color=rgb(30,255,0)
-
-/obj/machinery/atmospherics/pipe/manifold4w/green/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/green/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/green/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/green/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/green/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/green/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/orange
- pipe_color=rgb(255,129,25)
- color=rgb(255,129,25)
-
-/obj/machinery/atmospherics/pipe/manifold4w/orange/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/orange/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/orange/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/orange/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/orange/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/orange/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/purple
- pipe_color=rgb(128,0,182)
- color=rgb(128,0,182)
-
-/obj/machinery/atmospherics/pipe/manifold4w/purple/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/purple/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/purple/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/purple/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/purple/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/purple/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/dark
- pipe_color=rgb(69,69,69)
- color=rgb(69,69,69)
-
-/obj/machinery/atmospherics/pipe/manifold4w/dark/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/dark/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/dark/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/dark/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/dark/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/dark/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/violet
- pipe_color=rgb(64,0,128)
- color=rgb(64,0,128)
-
-/obj/machinery/atmospherics/pipe/manifold4w/violet/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/violet/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/violet/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/violet/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/violet/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/violet/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/brown
- pipe_color=rgb(178,100,56)
- color=rgb(178,100,56)
-
-/obj/machinery/atmospherics/pipe/manifold4w/brown/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/manifold4w/brown/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/brown/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/brown/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/manifold4w/brown/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/manifold4w/brown/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) )
+ update_layer()
+ update_alpha()
\ No newline at end of file
diff --git a/code/modules/atmospherics/machinery/pipes/mapping.dm b/code/modules/atmospherics/machinery/pipes/mapping.dm
new file mode 100644
index 0000000000..c868d377ea
--- /dev/null
+++ b/code/modules/atmospherics/machinery/pipes/mapping.dm
@@ -0,0 +1,65 @@
+//Colored pipes, use these for mapping
+
+#define HELPER_PARTIAL(Fulltype, Iconbase, Color) \
+ ##Fulltype { \
+ pipe_color = Color; \
+ color = Color; \
+ } \
+ ##Fulltype/visible { \
+ level = PIPE_VISIBLE_LEVEL; \
+ layer = GAS_PIPE_VISIBLE_LAYER; \
+ } \
+ ##Fulltype/visible/layer1 { \
+ piping_layer = 1; \
+ icon_state = Iconbase + "-1"; \
+ } \
+ ##Fulltype/visible/layer3 { \
+ piping_layer = 3; \
+ icon_state = Iconbase + "-3"; \
+ } \
+ ##Fulltype/hidden { \
+ level = PIPE_HIDDEN_LEVEL; \
+ } \
+ ##Fulltype/hidden/layer1 { \
+ piping_layer = 1; \
+ icon_state = Iconbase + "-1"; \
+ } \
+ ##Fulltype/hidden/layer3 { \
+ piping_layer = 3; \
+ icon_state = Iconbase + "-3"; \
+ }
+
+#define HELPER_PARTIAL_NAMED(Fulltype, Iconbase, Name, Color) \
+ HELPER_PARTIAL(Fulltype, Iconbase, Color) \
+ ##Fulltype { \
+ name = Name; \
+ }
+
+#define HELPER(Type, Color) \
+ HELPER_PARTIAL(/obj/machinery/atmospherics/pipe/simple/##Type, "pipe11", Color) \
+ HELPER_PARTIAL(/obj/machinery/atmospherics/pipe/manifold/##Type, "manifold", Color) \
+ HELPER_PARTIAL(/obj/machinery/atmospherics/pipe/manifold4w/##Type, "manifold4w", Color)
+
+#define HELPER_NAMED(Type, Name, Color) \
+ HELPER_PARTIAL_NAMED(/obj/machinery/atmospherics/pipe/simple/##Type, "pipe11", Name, Color) \
+ HELPER_PARTIAL_NAMED(/obj/machinery/atmospherics/pipe/manifold/##Type, "manifold", Name, Color) \
+ HELPER_PARTIAL_NAMED(/obj/machinery/atmospherics/pipe/manifold4w/##Type, "manifold4w", Name, Color)
+
+HELPER(general, null)
+HELPER(yellow, rgb(255, 198, 0))
+HELPER(cyan, rgb(0, 255, 249))
+HELPER(green, rgb(30, 255, 0))
+HELPER(orange, rgb(255, 129, 25))
+HELPER(purple, rgb(128, 0, 182))
+HELPER(dark, rgb(69, 69, 69))
+HELPER(brown, rgb(178, 100, 56))
+HELPER(violet, rgb(64, 0, 128))
+
+HELPER_NAMED(scrubbers, "scrubbers pipe", rgb(255, 0, 0))
+HELPER_NAMED(supply, "air supply pipe", rgb(0, 0, 255))
+HELPER_NAMED(supplymain, "main air supply pipe", rgb(130, 43, 255))
+
+#undef HELPER_NAMED
+#undef HELPER
+#undef HELPER_PARTIAL_NAMED
+#undef HELPER_PARTIAL
diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm
index 0879b30b13..1e513b846c 100644
--- a/code/modules/atmospherics/machinery/pipes/pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/pipes.dm
@@ -32,14 +32,6 @@
parent = new
parent.build_pipeline(src)
-/obj/machinery/atmospherics/pipe/update_icon() //overridden by manifolds
- if(nodes[1] && nodes[2])
- icon_state = "intact[invisibility ? "-f" : "" ]"
- else
- var/have_node1 = nodes[1] ? TRUE : FALSE
- var/have_node2 = nodes[2] ? TRUE : FALSE
- icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"
-
/obj/machinery/atmospherics/pipe/atmosinit()
var/turf/T = loc // hide if turf is not intact
hide(T.intact)
@@ -93,6 +85,13 @@
qdel(meter)
. = ..()
+/obj/machinery/atmospherics/pipe/update_icon()
+ . = ..()
+ update_alpha()
+
+/obj/machinery/atmospherics/pipe/proc/update_alpha()
+ alpha = invisibility ? 64 : 255
+
/obj/machinery/atmospherics/pipe/proc/update_node_icon()
for(var/i in 1 to device_type)
if(nodes[i])
diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm
index 7cab3c23dc..c3f62f16cb 100644
--- a/code/modules/atmospherics/machinery/pipes/simple.dm
+++ b/code/modules/atmospherics/machinery/pipes/simple.dm
@@ -1,11 +1,9 @@
-/*
-Simple Pipe
-The regular pipe you see everywhere, including bent ones.
-*/
+// Simple Pipe
+// The regular pipe you see everywhere, including bent ones.
/obj/machinery/atmospherics/pipe/simple
icon = 'icons/obj/atmospherics/pipes/simple.dmi'
- icon_state = "intact"
+ icon_state = "pipe11-2"
name = "pipe"
desc = "A one meter section of regular pipe."
@@ -20,385 +18,16 @@ The regular pipe you see everywhere, including bent ones.
pipe_state = "simple"
/obj/machinery/atmospherics/pipe/simple/SetInitDirections()
- normalize_cardinal_directions()
if(dir in GLOB.diagonals)
initialize_directions = dir
+ return
switch(dir)
- if(NORTH,SOUTH)
+ if(NORTH, SOUTH)
initialize_directions = SOUTH|NORTH
- if(EAST,WEST)
+ if(EAST, WEST)
initialize_directions = EAST|WEST
-//Colored pipes, use these for mapping
-/obj/machinery/atmospherics/pipe/simple/general
-
-/obj/machinery/atmospherics/pipe/simple/general/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/general/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/general/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/general/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/general/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/general/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/scrubbers
- name="scrubbers pipe"
- pipe_color=rgb(255,0,0)
- color=rgb(255,0,0)
-
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supply
- name="air supply pipe"
- pipe_color=rgb(0,0,255)
- color=rgb(0,0,255)
-
-/obj/machinery/atmospherics/pipe/simple/supply/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/supply/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supply/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supply/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supplymain
- name="main air supply pipe"
- pipe_color=rgb(130,43,255)
- color=rgb(130,43,255)
-
-/obj/machinery/atmospherics/pipe/simple/supplymain/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/supplymain/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supplymain/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supplymain/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/supplymain/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/supplymain/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/yellow
- pipe_color=rgb(255,198,0)
- color=rgb(255,198,0)
-
-/obj/machinery/atmospherics/pipe/simple/yellow/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/yellow/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/yellow/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/yellow/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/yellow/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/yellow/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/cyan
- pipe_color=rgb(0,255,249)
- color=rgb(0,255,249)
-
-/obj/machinery/atmospherics/pipe/simple/cyan/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/green
- pipe_color=rgb(30,255,0)
- color=rgb(30,255,0)
-
-/obj/machinery/atmospherics/pipe/simple/green/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/green/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/green/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/green/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/green/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/orange
- pipe_color=rgb(255,129,25)
- color=rgb(255,129,25)
-
-/obj/machinery/atmospherics/pipe/simple/orange/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/orange/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/orange/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/orange/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/orange/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/purple
- pipe_color=rgb(128,0,182)
- color=rgb(128,0,182)
-
-/obj/machinery/atmospherics/pipe/simple/purple/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/purple/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/purple/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/purple/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/purple/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/purple/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/dark
- pipe_color=rgb(69,69,69)
- color=rgb(69,69,69)
-
-/obj/machinery/atmospherics/pipe/simple/dark/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/dark/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/dark/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/dark/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/violet
- pipe_color=rgb(64,0,128)
- color=rgb(64,0,128)
-
-/obj/machinery/atmospherics/pipe/simple/violet/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/violet/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/violet/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/violet/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/violet/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/violet/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/brown
- pipe_color=rgb(178,100,56)
- color=rgb(178,100,56)
-
-/obj/machinery/atmospherics/pipe/simple/brown/visible
- level = PIPE_VISIBLE_LEVEL
- layer = GAS_PIPE_VISIBLE_LAYER
-
-/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/brown/visible/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/brown/hidden
- level = PIPE_HIDDEN_LEVEL
-
-/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer1
- piping_layer = PIPING_LAYER_MIN
- pixel_x = -PIPING_LAYER_P_X
- pixel_y = -PIPING_LAYER_P_Y
-
-/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer3
- piping_layer = PIPING_LAYER_MAX
- pixel_x = PIPING_LAYER_P_X
- pixel_y = PIPING_LAYER_P_Y
+/obj/machinery/atmospherics/pipe/simple/update_icon()
+ icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]"
+ update_layer()
+ update_alpha()
\ No newline at end of file
diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm
index 9e26cd25fc..4af28d78cc 100644
--- a/code/modules/cargo/bounties/assistant.dm
+++ b/code/modules/cargo/bounties/assistant.dm
@@ -10,13 +10,13 @@
/datum/bounty/item/assistant/skateboard
name = "Skateboard"
description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up."
- reward = 750 // the tony hawk
+ reward = 800 // the tony hawk
wanted_types = list(/obj/vehicle/ridden/scooter/skateboard)
/datum/bounty/item/assistant/stunprod
name = "Stunprod"
description = "CentCom demands a stunprod to use against dissidents. Craft one, then ship it."
- reward = 800
+ reward = 950
wanted_types = list(/obj/item/melee/baton/cattleprod)
/datum/bounty/item/assistant/soap
@@ -126,7 +126,7 @@
/datum/bounty/item/assistant/shadyjims
name = "Shady Jim's"
description = "There's an irate officer at CentCom demanding that he receive a box of Shady Jim's cigarettes. Please ship one. He's starting to make threats."
- reward = 750
+ reward = 1150
wanted_types = list(/obj/item/storage/fancy/cigarettes/cigpack_shadyjims)
/datum/bounty/item/assistant/potted_plants
@@ -148,14 +148,14 @@
reward = 1000
required_count = 5
wanted_types = list(/obj/item/restraints/handcuffs)
-
+/* I don't like that you can just buy a box of monkey cubes and finish this for -half- of them.
/datum/bounty/item/assistant/monkey_cubes
name = "Monkey Cubes"
description = "Due to a recent genetics accident, Central Command is in serious need of monkeys. Your mission is to ship monkey cubes."
reward = 2000
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/monkeycube)
-
+*/
/datum/bounty/item/assistant/chainsaw
name = "Chainsaw"
description = "The chef at CentCom is having trouble butchering her animals. She requests one chainsaw, please."
@@ -208,15 +208,22 @@
wanted_types = list(/obj/item/shield/makeshift)
/datum/bounty/item/assistant/toolbelts
- name = "Tool Belts"
+ name = "Tool Belts" //Made it 5 so you can't just buy one set of toolbelts to finish the bounty.
description = "These things always seem to go missing. Ship us a few to help us restock."
reward = 1350
- required_count = 3
+ required_count = 5
wanted_types = list(/obj/item/storage/belt/utility)
/datum/bounty/item/assistant/gasmasks
name = "Gas Masks"
description = "The good news is that we have more miasma than we'll ever need. The bad news is, somone opened the release valve on the canisters. Ship us some gas masks!"
- reward = 1100
+ reward = 1250
required_count = 4
wanted_types = list(/obj/item/clothing/mask/gas)
+
+/datum/bounty/item/assistant/pneumatic_cannon
+ name = "Pneumatic Cannons"
+ description = "Have you ever launched a tennis ball, newspaper, or ***** at someones head from across the room? No? We haven't either. Help us rectify this."
+ reward = 2000
+ required_count = 2
+ wanted_types = list(/obj/item/pneumatic_cannon/ghetto)
diff --git a/code/modules/cargo/bounties/botany.dm b/code/modules/cargo/bounties/botany.dm
index 98d7765002..654bcfe74b 100644
--- a/code/modules/cargo/bounties/botany.dm
+++ b/code/modules/cargo/bounties/botany.dm
@@ -10,22 +10,23 @@
reward += multiplier * 1000
required_count = rand(5, 10)
+//Easy Stuff (1200)
+
/datum/bounty/item/botany/ambrosia_vulgaris
name = "Ambrosia Vulgaris Leaves"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris)
foodtype = "stew"
-/datum/bounty/item/botany/ambrosia_gaia
- name = "Ambrosia Gaia Leaves"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia)
- multiplier = 4
- foodtype = "stew"
+/datum/bounty/item/botany/pineapples
+ name = "Pineapples"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/pineapple)
+ bonus_desc = "Not for human consumption."
+ foodtype = "ashtray"
-/datum/bounty/item/botany/apple_golden
- name = "Golden Apples"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/apple/gold)
- multiplier = 4
- foodtype = "dessert"
+/datum/bounty/item/botany/tomato
+ name = "Tomatoes"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato)
+ exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato/blue)
/datum/bounty/item/botany/banana
name = "Bananas"
@@ -33,58 +34,9 @@
exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/banana/bluespace)
foodtype = "banana split"
-/datum/bounty/item/botany/banana_bluespace
- name = "Bluespace Bananas"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/banana/bluespace)
- multiplier = 2
- foodtype = "banana split"
-
-/datum/bounty/item/botany/beans_koi
- name = "Koi Beans"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/koibeans)
- multiplier = 2
-
-/datum/bounty/item/botany/berries_death
- name = "Death Berries"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/berries/death)
- multiplier = 2
- bonus_desc = "He insists that \"he knows what he's doing\"."
- foodtype = "sorbet"
-
-/datum/bounty/item/botany/berries_glow
- name = "Glow-Berries"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/berries/glow)
- multiplier = 2
- foodtype = "sorbet"
-
-/datum/bounty/item/botany/cannabis
- name = "Cannabis Leaves"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis)
- exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/white, /obj/item/reagent_containers/food/snacks/grown/cannabis/death, /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate)
- multiplier = 4 //hush money
- bonus_desc = "Do not mention this shipment to security."
- foodtype = "\"meal\""
-
-/datum/bounty/item/botany/cannabis_white
- name = "Lifeweed Leaves"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/white)
- multiplier = 6
- bonus_desc = "Do not mention this shipment to security."
- foodtype = "\"meal\""
-
-/datum/bounty/item/botany/cannabis_death
- name = "Deathweed Leaves"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/death)
- multiplier = 6
- bonus_desc = "Do not mention this shipment to security."
- foodtype = "\"meal\""
-
-/datum/bounty/item/botany/cannabis_ultimate
- name = "Omega Weed Leaves"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate)
- multiplier = 6
- bonus_desc = "Under no circumstances mention this shipment to security."
- foodtype = "\"meal\""
+/datum/bounty/item/botany/coconuts
+ name = "Coconuts"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/coconut)
/datum/bounty/item/botany/wheat
name = "Wheat Grains"
@@ -98,16 +50,6 @@
name = "Chili Peppers"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/chili)
-/datum/bounty/item/botany/chili
- name = "Ice Chili Peppers"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/icepepper)
- multiplier = 2
-
-/datum/bounty/item/botany/chili
- name = "Ghost Chili Peppers"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ghost_chili)
- multiplier = 2
-
/datum/bounty/item/botany/citrus_lime
name = "Limes"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lime)
@@ -129,35 +71,85 @@
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/eggplant)
bonus_desc = "Not to be confused with egg-plants."
-/datum/bounty/item/botany/eggplant_eggy
- name = "Egg-plants"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/shell/eggy)
- bonus_desc = "Not to be confused with eggplants."
- multiplier = 2
-
-// /datum/bounty/item/botany/kudzu
-// name = "Kudzu Pods"
-// wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/kudzupod)
-// bonus_desc = "Store in a dry, dark place."
-// multiplier = 4
-
/datum/bounty/item/botany/watermelon
name = "Watermelons"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/watermelon)
foodtype = "dessert"
-/datum/bounty/item/botany/watermelon_holy
- name = "Holy Melons"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/holymelon)
- multiplier = 2
- foodtype = "dessert"
-
/datum/bounty/item/botany/glowshroom
name = "Glowshrooms"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom)
exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap, /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom)
foodtype = "omelet"
+//Medium Stuff (2400)
+
+/datum/bounty/item/botany/moonflower
+ name = "Moonflowers"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/moonflower)
+ multiplier = 2
+
+/datum/bounty/item/botany/novaflower
+ name = "Novaflowers"
+ wanted_types = list(/obj/item/grown/novaflower)
+ multiplier = 2
+
+/datum/bounty/item/botany/banana_bluespace
+ name = "Bluespace Bananas"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/banana/bluespace)
+ multiplier = 2
+ foodtype = "banana split"
+
+/datum/bounty/item/botany/beans_koi
+ name = "Koi Beans"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/koibeans)
+ multiplier = 2
+
+/datum/bounty/item/botany/coffee_robusta
+ name = "Coffee Robusta Beans"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/coffee/robusta)
+ multiplier = 2
+
+/datum/bounty/item/botany/steelcaps
+ name = "Steelcap Logs"
+ wanted_types = list(/obj/item/grown/log/steel)
+ multiplier = 2
+
+/datum/bounty/item/botany/berries_death
+ name = "Death Berries"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/berries/death)
+ multiplier = 2
+ bonus_desc = "He insists that \"he knows what he's doing\"."
+ foodtype = "sorbet"
+
+/datum/bounty/item/botany/berries_glow
+ name = "Glow-Berries"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/berries/glow)
+ multiplier = 2
+ foodtype = "sorbet"
+
+/datum/bounty/item/botany/chili
+ name = "Ice Chili Peppers"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/icepepper)
+ multiplier = 2
+
+/datum/bounty/item/botany/chili
+ name = "Ghost Chili Peppers"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ghost_chili)
+ multiplier = 2
+
+/datum/bounty/item/botany/eggplant_eggy
+ name = "Egg-plants"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/shell/eggy)
+ bonus_desc = "Not to be confused with eggplants."
+ multiplier = 2
+
+/datum/bounty/item/botany/watermelon_holy
+ name = "Holy Melons"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/holymelon)
+ multiplier = 2
+ foodtype = "dessert"
+
/datum/bounty/item/botany/glowshroom_cap
name = "Glowcaps"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap)
@@ -177,18 +169,62 @@
bonus_desc = "Wear protection when handling them."
foodtype = "cheese"
-/datum/bounty/item/botany/pineapples
- name = "Pineapples"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/pineapple)
- bonus_desc = "Not for human consumption."
- foodtype = "ashtray"
+//Harder Stuff (3600-7200)
-/datum/bounty/item/botany/tomato
- name = "Tomatoes"
- wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato)
- exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato/blue)
+// /datum/bounty/item/botany/kudzu
+// name = "Kudzu Pods"
+// wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/kudzupod)
+// bonus_desc = "Store in a dry, dark place."
+// multiplier = 4
+
+/datum/bounty/item/botany/bungopit
+ name = "Bungo Pits"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/bungopit)
+ bonus_desc = "Heartbreaker."
+ multiplier = 4
+
+/datum/bounty/item/botany/ambrosia_gaia
+ name = "Ambrosia Gaia Leaves"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia)
+ multiplier = 4
+ foodtype = "stew"
+
+/datum/bounty/item/botany/apple_golden
+ name = "Golden Apples"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/apple/gold)
+ multiplier = 4
+ foodtype = "dessert"
/datum/bounty/item/botany/tomato_bluespace
name = "Bluespace Tomatoes"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato/blue/bluespace)
multiplier = 4
+
+/datum/bounty/item/botany/cannabis
+ name = "Cannabis Leaves"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis)
+ exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/white, /obj/item/reagent_containers/food/snacks/grown/cannabis/death, /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate)
+ multiplier = 3 //hush money
+ bonus_desc = "Do not mention this shipment to security."
+ foodtype = "\"meal\""
+
+/datum/bounty/item/botany/cannabis_white
+ name = "Lifeweed Leaves"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/white)
+ multiplier = 5
+ bonus_desc = "Do not mention this shipment to security."
+ foodtype = "\"meal\""
+
+/datum/bounty/item/botany/cannabis_death
+ name = "Deathweed Leaves"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/death)
+ multiplier = 5
+ bonus_desc = "Do not mention this shipment to security."
+ foodtype = "\"meal\""
+
+/datum/bounty/item/botany/cannabis_ultimate
+ name = "Omega Weed Leaves"
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate)
+ multiplier = 6
+ bonus_desc = "Under no circumstances mention this shipment to security."
+ foodtype = "\"meal\""
\ No newline at end of file
diff --git a/code/modules/cargo/bounties/chef.dm b/code/modules/cargo/bounties/chef.dm
index 64e1710461..7f7f0b86e2 100644
--- a/code/modules/cargo/bounties/chef.dm
+++ b/code/modules/cargo/bounties/chef.dm
@@ -2,16 +2,17 @@
/datum/bounty/item/chef/soup
name = "Soup"
- description = "To quell the homeless uprising, Nanotrasen will be serving soup to all underpaid workers. Ship any type of soup."
- reward = 700
- required_count = 3
+ description = "To quell the homeless uprising, Nanotrasen will be serving soup to all underpaid workers. Ship any type of soup. Do NOT ship bowls of water."
+ reward = 1200
+ required_count = 4
wanted_types = list(/obj/item/reagent_containers/food/snacks/soup)
+ exclude_types = list(/obj/item/reagent_containers/food/snacks/soup/wish)
/datum/bounty/item/chef/icecreamsandwich
name = "Ice Cream Sandwiches"
description = "Upper management has been screaming non-stop for ice cream. Please send some."
- reward = 800
- required_count = 3
+ reward = 1200
+ required_count = 5
wanted_types = list(/obj/item/reagent_containers/food/snacks/icecreamsandwich)
/datum/bounty/item/chef/bread
@@ -26,6 +27,13 @@
reward = 3142
wanted_types = list(/obj/item/reagent_containers/food/snacks/pie)
+/datum/bounty/item/gardencook/khinkali
+ name = "Khinkali"
+ description = "Requesting -some khinki stuff- for a private staff party at Centcom."
+ reward = 2400
+ required_count = 6
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/khinkali)
+
/datum/bounty/item/chef/salad
name = "Salad or Rice Bowls"
description = "CentCom management is going on a health binge. Your order is to ship salad or rice bowls."
@@ -33,18 +41,6 @@
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/salad)
-/datum/bounty/item/chef/superbite
- name = "Super Bite Burger"
- description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him."
- reward = 1800
- wanted_types = list(/obj/item/reagent_containers/food/snacks/burger/superbite)
-
-/datum/bounty/item/chef/poppypretzel
- name = "Poppy Pretzel"
- description = "Central Command needs a reason to fire their HR head. Send over a poppy pretzel to force a failed drug test."
- reward = 3000
- wanted_types = list(/obj/item/reagent_containers/food/snacks/poppypretzel)
-
// /datum/bounty/item/chef/cubancarp
// name = "Cuban Carp"
// description = "To celebrate the birth of Castro XXVII, ship one cuban carp to CentCom."
@@ -135,3 +131,9 @@
reward = 1200
required_count = 6
wanted_types = list(/obj/item/reagent_containers/food/snacks/sugarcookie)
+
+/datum/bounty/item/chef/bbqribs
+ description = "There's a debate around command as to weather or not ribs should be considered finger food, and we need a few delicious racks to process."
+ reward = 2250
+ required_count = 3
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/bbqribs)
\ No newline at end of file
diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm
index 1f16788c4d..99e6aa2bdc 100644
--- a/code/modules/cargo/bounties/engineering.dm
+++ b/code/modules/cargo/bounties/engineering.dm
@@ -40,14 +40,14 @@
/datum/bounty/item/engineering/microwave
name = "Microwaves"
description = "Due to a shortage of microwaves, our chefs are incapable of keeping up with our sheer volume of orders. We need at least three microwaves to keep up with our crew's dietary habits."
- reward = 1000
+ reward = 2000
required_count = 3
wanted_types = list(/obj/machinery/microwave)
/datum/bounty/item/engineering/hydroponicstrays
name = "Hydroponics Tray"
description = "The garden has become a hot spot of late, they need a few more hydroponics tray to grow more flowers."
- reward = 1500
+ reward = 2500
required_count = 5
wanted_types = list(/obj/machinery/hydroponics)
@@ -75,14 +75,14 @@
/datum/bounty/item/engineering/arcadetrail
name = "Orion Trail Arcade Games"
description = "The staff have nothing to do when off-work. Can you send us some Orion Trail games to play?"
- reward = 1500
+ reward = 2500
required_count = 5
wanted_types = list(/obj/machinery/computer/arcade/orion_trail)
/datum/bounty/item/engineering/arcadebattle
name = "Battle Arcade Games"
description = "The staff have nothing to do when off-work. Can you send us some Battle Arcade games to play?"
- reward = 1500
+ reward = 2500
required_count = 5
wanted_types = list(/obj/machinery/computer/arcade/battle)
diff --git a/code/modules/cargo/bounties/gardencook.dm b/code/modules/cargo/bounties/gardencook.dm
index b73cc2f9f8..6fdd9b2a3f 100644
--- a/code/modules/cargo/bounties/gardencook.dm
+++ b/code/modules/cargo/bounties/gardencook.dm
@@ -1,7 +1,7 @@
/datum/bounty/item/chef/birthday_cake
name = "Birthday Cake"
description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!"
- reward = 1000
+ reward = 1800
wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday)
/datum/bounty/item/gardencook/carrotfries
@@ -21,24 +21,17 @@
/datum/bounty/item/gardencook/popcorn
name = "Popcorn Bags"
description = "Upper management wants to host a movie night. Ship bags of popcorn for the occasion."
- reward = 800
+ reward = 1200
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/popcorn)
/datum/bounty/item/gardencook/onionrings
name = "Onion Rings"
description = "Nanotrasen is remembering Saturn day. Ship onion rings to show the station's support."
- reward = 800
+ reward = 1200
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/onionrings)
-/datum/bounty/item/gardencook/khinkali
- name = "Khinkali"
- description = "Requesting -some khinki stuff- for a private staff party at Centcom"
- reward = 2400
- required_count = 6
- wanted_types = list(/obj/item/reagent_containers/food/snacks/khinkali)
-
/datum/bounty/item/gardencook/bakedbeans
name = "Beans"
description = "Management wants to make sure we have a fallback shelter to rely on. Prepare some beans to stock it with."
@@ -51,3 +44,22 @@
description = "Something sticky, something fun, ship us a honeybun."
reward = 3500
wanted_types = list(/obj/item/reagent_containers/food/snacks/honeybun)
+
+/datum/bounty/item/chef/superbite
+ name = "Super Bite Burger" //Salt, Pepper, Boiled Egg, 5 Steak, 4 Tomato, 3 Cheese, Bacon, and a Bun. Should be more than 1800.
+ description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him."
+ reward = 2750
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/burger/superbite)
+
+/datum/bounty/item/chef/poppypretzel
+ name = "Poppy Pretzel"
+ description = "Central Command needs a reason to fire their HR head. Send over a poppy pretzel to force a failed drug test."
+ reward = 1800
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/poppypretzel)
+
+/datum/bounty/item/chef/fiestaskewer
+ name = "Fiesta Skewer"
+ description = "Apparently people are putting vegetables on kebabs now. Central Command has taken an interest in this turn of events and would like to know more."
+ reward = 2600
+ required_count = 3
+ wanted_types = list(/obj/item/reagent_containers/food/snacks/kebab/fiesta)
\ No newline at end of file
diff --git a/code/modules/cargo/bounties/medical.dm b/code/modules/cargo/bounties/medical.dm
index 22964e1fb7..7afc0d8786 100644
--- a/code/modules/cargo/bounties/medical.dm
+++ b/code/modules/cargo/bounties/medical.dm
@@ -121,7 +121,7 @@
/datum/bounty/item/medical/defibrillator
name = "New defibillators"
- description = "After years of storge are defibrillator units have become more liabilities then we want. Please send us some new ones to replace these old ones."
+ description = "After years of storge our defib units have become liabilities. Please send us some new ones."
reward = 2250
required_count = 5
wanted_types = list(/obj/item/defibrillator)
diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm
index 6102d8d685..c543872565 100644
--- a/code/modules/cargo/bounties/science.dm
+++ b/code/modules/cargo/bounties/science.dm
@@ -25,7 +25,7 @@
/datum/bounty/item/science/nightvision_goggles
name = "Night Vision Goggles"
description = "An electrical storm has busted all the lights at CentCom. While management is waiting for replacements, perhaps some night vision goggles can be shipped?"
- reward = 1000
+ reward = 1250
wanted_types = list(/obj/item/clothing/glasses/night, /obj/item/clothing/glasses/meson/night, /obj/item/clothing/glasses/hud/health/night, /obj/item/clothing/glasses/hud/security/night, /obj/item/clothing/glasses/hud/diagnostic/night)
/datum/bounty/item/science/experimental_welding_tool
@@ -55,7 +55,7 @@
/datum/bounty/item/science/advanced_mop
name = "Advanced Mop"
- description = "Excuse me. I'd like to request $17 for a push broom rebristling. Either that, or an advanced mop."
+ description = "Excuse me. I'd like to request 17 credits for a push broom rebristling. Either that, or an advanced mop."
reward = 3000
wanted_types = list(/obj/item/mop/advanced)
@@ -108,7 +108,7 @@
wanted_types = list(/obj/item/stock_parts/micro_laser/quadultra)
/datum/bounty/item/science/fakecrystals
- name = "synthetic bluespace crystals"
+ name = "Synthetic Bluespace Crystals"
description = "Don't, uh, tell anyone, but one of our BSA arrays might have had a little... accident. Send us some bluespace crystals so we can recalibrate it before anyone realizes. The whole set uses artificial bluespace crystals, so we need and not any other type of bluespace crystals..."
reward = 8000
required_count = 5
diff --git a/code/modules/cargo/bounties/silly.dm b/code/modules/cargo/bounties/silly.dm
index b88ec9f192..e0d2c87a2d 100644
--- a/code/modules/cargo/bounties/silly.dm
+++ b/code/modules/cargo/bounties/silly.dm
@@ -51,4 +51,16 @@
name = "Strange Object"
description = "Nanotrasen has taken an interest in strange objects. Find one in maint, and ship it off to CentCom right away."
reward = 1000
- wanted_types = list(/obj/item/relic)
\ No newline at end of file
+ wanted_types = list(/obj/item/relic)
+
+/datum/bounty/item/silly/coconut_bong
+ name = "Coconut Bong"
+ description = "Duuuude, what if we like, carved out a coconut, and smoked some stuff in it. It'd be like, coconut flavored maaaaaan."
+ reward = 2750
+ wanted_types = list(/obj/item/bong/coconut)
+
+/datum/bounty/item/silly/toy_swords
+ name = "Toy Swords"
+ description = "Nanotrasen has secured a contract in a reenactment of a famous movie, but we only have lethal energy based swords. Send us some convincing replicas so we save on medical costs."
+ reward = 1200
+ required_count = 3
diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm
index e53db0bf7b..e4efaf0810 100644
--- a/code/modules/cargo/exports/parts.dm
+++ b/code/modules/cargo/exports/parts.dm
@@ -92,11 +92,42 @@
export_types = list(/obj/item/stock_parts/cell/bluespace)
/datum/export/cellyellow
- cost = 40
+ cost = 200
unit_name = "slime power cell"
export_types = list(/obj/item/stock_parts/cell/high/slime)
/datum/export/cellyellowhyper
- cost = 120 //Takes a lot to make and is really good
+ cost = 1200 //Takes a lot to make and is really good
unit_name = "hyper slime power cell"
- export_types = list(/obj/item/stock_parts/cell/high/slime/hypercharged)
\ No newline at end of file
+ export_types = list(/obj/item/stock_parts/cell/high/slime/hypercharged)
+
+//Glass working stuff
+
+/datum/export/glasswork_dish
+ cost = 300
+ unit_name = "small glass dish"
+ export_types = list(/obj/item/reagent_containers/glass/beaker/glass_dish)
+ include_subtypes = FALSE
+
+/datum/export/glasswork_lens
+ cost = 1800
+ unit_name = "small glass lens"
+ export_types = list(/obj/item/lens)
+
+/datum/export/glasswork_spouty
+ cost = 1200
+ unit_name = "flask with spout"
+ export_types = list(/obj/item/reagent_containers/glass/beaker/flask/spouty)
+ include_subtypes = FALSE
+
+/datum/export/glasswork_smallflask
+ cost = 600
+ unit_name = "small flask"
+ export_types = list(/obj/item/reagent_containers/glass/beaker/flask)
+ include_subtypes = FALSE
+
+/datum/export/glasswork_largeflask
+ cost = 1000
+ unit_name = "large flask"
+ export_types = list(/obj/item/reagent_containers/glass/beaker/flask/large)
+ include_subtypes = FALSE
diff --git a/code/modules/cargo/packs/armory.dm b/code/modules/cargo/packs/armory.dm
index 259ea2d7e3..372824c8e4 100644
--- a/code/modules/cargo/packs/armory.dm
+++ b/code/modules/cargo/packs/armory.dm
@@ -201,6 +201,22 @@
var/item = pick(contains)
new item(C)
+/datum/supply_pack/security/armory/spinfusor
+ name = "Stormhammer Spinfusor Crate"
+ cost = 14000
+ desc = "Got yourself a code red? Blob, nukies or even worst knocking on your door? Well with the Stormhammer Spinfusor you can stop crime in one shot, dont miss! Contains two Stormhammer Spinfusors (Note, guns may or may not be loaded). Requires Armory access to open."
+ contains = list(/obj/item/gun/ballistic/automatic/spinfusor,
+ /obj/item/gun/ballistic/automatic/spinfusor)
+ crate_name = "spinfusor crate"
+
+/datum/supply_pack/security/armory/spinfusorammo
+ name = "Spinfusor Disk Crate"
+ cost = 7000
+ desc = "Need more ammo for a Stormhammer? Well we got some for a price! Contains two boxes of Spinfusor disks. Requires Armory access to open."
+ contains = list(/obj/item/ammo_box/aspinfusor,
+ /obj/item/ammo_box/aspinfusor)
+ crate_name = "spinfusor disk crate"
+
/datum/supply_pack/security/armory/swat
name = "SWAT Crate"
desc = "Contains two fullbody sets of tough, fireproof, pressurized suits designed in a joint effort by IS-ERI and Nanotrasen. Each set contains a suit, helmet, mask, combat belt, and combat gloves. Requires Armory access to open."
@@ -226,7 +242,7 @@
crate_name = "swat taser crate"
/datum/supply_pack/security/armory/woodstock
- name = "Classic WoodStock Shotguns Crate"
+ name = "WoodStock Classic Shotguns Crate"
desc = "Contains three rustic, pumpaction shotguns. Requires Armory access to open."
cost = 3000
contains = list(/obj/item/gun/ballistic/shotgun,
diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm
index 40d21e4505..f41a43070d 100644
--- a/code/modules/cargo/packs/costumes_toys.dm
+++ b/code/modules/cargo/packs/costumes_toys.dm
@@ -9,6 +9,12 @@
/datum/supply_pack/costumes_toys
group = "Costumes & Toys"
+/datum/supply_pack/costumes_toys/randomised/fill(obj/structure/closet/crate/C)
+ var/list/L = contains.Copy()
+ for(var/i in 1 to num_contained)
+ var/item = pick_n_take(L)
+ new item(C)
+
/datum/supply_pack/costumes_toys/randomised
name = "Collectable Hats Crate"
desc = "Flaunt your status with three unique, highly-collectable hats!"
@@ -289,12 +295,6 @@
crate_name = "wizard costume crate"
crate_type = /obj/structure/closet/crate/wooden
-/datum/supply_pack/costumes_toys/randomised/fill(obj/structure/closet/crate/C)
- var/list/L = contains.Copy()
- for(var/i in 1 to num_contained)
- var/item = pick_n_take(L)
- new item(C)
-
/datum/supply_pack/costumes_toys/wardrobes/autodrobe
name = "Autodrobe Supply Crate"
desc = "Autodrobe missing your favorite dress? Solve that issue today with this autodrobe refill."
diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm
index ea90255bce..6492df5215 100644
--- a/code/modules/cargo/packs/engineering.dm
+++ b/code/modules/cargo/packs/engineering.dm
@@ -20,15 +20,9 @@
/datum/supply_pack/engineering/conveyor
name = "Conveyor Assembly Crate"
- desc = "Keep production moving along with six conveyor belts. Conveyor switch included. If you have any questions, check out the enclosed instruction book."
+ desc = "Keep production moving along with fifteen conveyor belts. Conveyor switch included. If you have any questions, check out the enclosed instruction book."
cost = 750
- contains = list(/obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_switch_construct,
+ contains = list(/obj/item/stack/conveyor/fifteen,
/obj/item/paper/guides/conveyor)
crate_name = "conveyor assembly crate"
@@ -73,14 +67,15 @@
crate_name = "atmospherics hardsuit"
crate_type = /obj/structure/closet/crate/secure/engineering
-/datum/supply_pack/engineering/radhardsuit
- name = "Radiation Hardsuit"
+/datum/supply_pack/engineering/radvoidsuit
+ name = "Radiation Voidsuit"
desc = "The Singulo is loose? Do you need to do a few changes to its containment and don't want to spent the rest of the shift under the shower? Get this Radiation Hardsuit! It protect from radiations and space only."
cost = 3500
access = ACCESS_ENGINE
contains = list(/obj/item/tank/internals/air,
/obj/item/clothing/mask/gas,
- /obj/item/clothing/suit/space/hardsuit/engine/rad)
+ /obj/item/clothing/suit/space/rad,
+ /obj/item/clothing/head/helmet/space/rad)
crate_name = "radiation hardsuit"
crate_type = /obj/structure/closet/crate/secure/engineering
diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm
index c9862282dc..6c1742896f 100644
--- a/code/modules/cargo/packs/materials.dm
+++ b/code/modules/cargo/packs/materials.dm
@@ -69,6 +69,11 @@
contains = list(/obj/item/grown/log)
crate_name = "lumber crate"
+/datum/supply_pack/materials/rawlumber/generate()
+ . = ..()
+ for(var/i in 1 to 49)
+ new /obj/item/grown/log(.)
+
/datum/supply_pack/materials/wood50
name = "50 Wood Planks"
desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with fifty wooden planks!"
@@ -89,7 +94,7 @@
/datum/supply_pack/materials/rawcottonbulk
name = "Raw Cotton Crate (Bulk)"
desc = "We have so much of this stuff we need to get rid of it in -bulk- now. This crate contains 240 raw cotton sheets."
- cost = 1300 // 100 net cost (per 40 cotton) , 20 x 20 = 400. 300 profit if turned into cloth sheets or more if turned to silk then 10 x 200 = 2000
+ cost = 1300 // 600 net cost 20 x 120 = 2400 profit if turned into cloth sheets or if turned into silk 200 x 60 = 12000
contains = list(/obj/item/stack/sheet/cotton/thirty,
/obj/item/stack/sheet/cotton/thirty,
/obj/item/stack/sheet/cotton/thirty,
@@ -102,13 +107,8 @@
crate_name = "bulk cotton crate"
crate_type = /obj/structure/closet/crate/hydroponics
-/datum/supply_pack/critter/animal_feed/generate()
- . = ..()
- for(var/i in 1 to 49)
- new /obj/item/grown/log(.)
-
/datum/supply_pack/materials/rcdammo
- name = "Spare RDC ammo"
+ name = "Spare RCD ammo"
desc = "This crate contains sixteen RCD compressed matter packs, to help with any holes or projects people might be working on."
cost = 3750
contains = list(/obj/item/rcd_ammo,
diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm
index a60afe4f7a..d4fcdab962 100644
--- a/code/modules/cargo/packs/medical.dm
+++ b/code/modules/cargo/packs/medical.dm
@@ -103,17 +103,6 @@
contains = list(/obj/machinery/iv_drip)
crate_name = "iv drip crate"
-/datum/supply_pack/science/adv_surgery_tools
- name = "Med-Co Advanced surgery tools"
- desc = "A full set of Med-Co advanced surgery tools! In addition to that it contains both a can of synthflesh and a can of sterilizine. Requires Surgery access to open."
- cost = 5500
- access = ACCESS_SURGERY
- contains = list(/obj/item/storage/belt/medical/surgery_belt_adv,
- /obj/item/reagent_containers/medspray/synthflesh,
- /obj/item/reagent_containers/medspray/sterilizine)
- crate_name = "medco newest surgery tools"
- crate_type = /obj/structure/closet/crate/medical
-
/datum/supply_pack/medical/medicalhardsuit
name = "Medical Hardsuit"
desc = "Got people being spaced left and right? Hole in the same room as the dead body of Hos or cap? Fear not, now you can buy one medical hardsuit with a mask and air tank to save your fellow crewmembers. Requires medical access to open."
diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm
index f8656ef761..898f82c6ce 100644
--- a/code/modules/cargo/packs/misc.dm
+++ b/code/modules/cargo/packs/misc.dm
@@ -83,7 +83,7 @@
name = "Captain Pen"
desc = "A spare Captain fountain pen."
access = ACCESS_CAPTAIN
- cost = 10000
+ cost = 5000
contains = list(/obj/item/pen/fountain/captain)
crate_name = "captain pen"
crate_type = /obj/structure/closet/crate/secure/weapon //It is a combat pen
@@ -153,7 +153,7 @@
/obj/item/bedsheet/purple,
/obj/item/bedsheet/red,
/obj/item/bedsheet/yellow,
- /obj/item/bedsheet/brown,
+ /obj/item/bedsheet/brown,
/obj/item/bedsheet/black,
/obj/item/bedsheet/rainbow)
crate_name = "colored bedsheet crate"
@@ -182,18 +182,6 @@
/obj/structure/piano/unanchored)
crate_type = /obj/structure/closet/crate/wooden
-/datum/supply_pack/misc/cbtpack
- name = "CBT Equipment"
- desc = "(*!&@#CBT is a special term coined by high ranking syndicate operatives for a special form of information extraction. While the training required to use this shipment is highly classified, the distribution of it's contents are not. In addition to this crates unusual contents, we have added a bar of soap.#@*$"
- hidden = TRUE
- cost = 2400
- contains = list(/mob/living/simple_animal/chicken,
- /obj/item/toy/beach_ball/holoball,
- /obj/item/melee/baton/cattleprod,
- /obj/item/soap/syndie)
- crate_name = "cbt crate"
- crate_type = /obj/structure/closet/crate/large
-
/datum/supply_pack/misc/casinocrate
name = "Casino Crate"
desc = "Start up your own grand casino with this crate filled with slot machine and arcade boards!"
@@ -216,8 +204,8 @@
name = "Coin Crate"
desc = "Psssst, hey, you. Yes, you. I've heard that coins can do some special things on your station, give you access to some pretty cool stuff. Here's the deal, you give me some credits, and I give so some coins. Sound like a deal? I'll give you 10 for 10000 creds."
contraband = TRUE
- cost = 10000
- contains = list(/obj/item/coin/silver)
+ cost = 3000
+ contains = list(/obj/item/coin/silver) // 400 x 10 = 2 sheets of silver for 2300cr
crate_name = "coin crate"
crate_type = /obj/structure/closet/crate/large
@@ -254,6 +242,25 @@
crate_type = /obj/structure/closet/crate/wooden
crate_name = "festive wrapping paper crate"
+/datum/supply_pack/misc/funeral
+ name = "Funeral Supplies"
+ desc = "Mourn your dead properly buy sending them off with love filled notes, clean clothes, and a proper ceremony. Contains two candle packs, funeral garb, flowers, a paperbin , and crayons to help aid in religious rituals. Coffin included."
+ cost = 1200
+ contains = list(/obj/item/clothing/under/burial,
+ /obj/item/storage/fancy/candle_box,
+ /obj/item/storage/fancy/candle_box,
+ /obj/item/reagent_containers/food/snacks/grown/harebell,
+ /obj/item/reagent_containers/food/snacks/grown/harebell,
+ /obj/item/reagent_containers/food/snacks/grown/poppy/geranium,
+ /obj/item/reagent_containers/food/snacks/grown/poppy/geranium,
+ /obj/item/reagent_containers/food/snacks/grown/poppy/lily,
+ /obj/item/reagent_containers/food/snacks/grown/poppy/lily,
+ /obj/item/storage/crayons,
+ /obj/item/paper_bin
+ )
+ crate_name = "coffin"
+ crate_type = /obj/structure/closet/crate/coffin
+
/datum/supply_pack/misc/jukebox
name = "Jukebox"
cost = 10000
@@ -284,25 +291,6 @@
/obj/item/clothing/suit/hooded/chaplain_hoodie)
crate_name = "religious supplies crate"
-/datum/supply_pack/misc/funeral
- name = "Funeral Supplies"
- desc = "Mourn your dead properly buy sending them off with love filled notes, clean clothes, and a proper ceremony. Contains two candle packs, funeral garb, flowers, a paperbin , and crayons to help aid in religious rituals. Coffin included."
- cost = 1200
- contains = list(/obj/item/clothing/under/burial,
- /obj/item/storage/fancy/candle_box,
- /obj/item/storage/fancy/candle_box,
- /obj/item/reagent_containers/food/snacks/grown/harebell,
- /obj/item/reagent_containers/food/snacks/grown/harebell,
- /obj/item/reagent_containers/food/snacks/grown/poppy/geranium,
- /obj/item/reagent_containers/food/snacks/grown/poppy/geranium,
- /obj/item/reagent_containers/food/snacks/grown/poppy/lily,
- /obj/item/reagent_containers/food/snacks/grown/poppy/lily,
- /obj/item/storage/crayons,
- /obj/item/paper_bin
- )
- crate_name = "coffin"
- crate_type = /obj/structure/closet/crate/coffin
-
/datum/supply_pack/misc/shower
name = "Shower Supplies"
desc = "Everyone needs a bit of R&R. Make sure you get can get yours by ordering this crate filled with towels, rubber duckies, and some soap!"
@@ -362,29 +350,6 @@
/obj/item/stack/tile/carpet/monochrome/fifty)
crate_name = "premium carpet crate"
-/datum/supply_pack/misc/party
- name = "Party Equipment"
- desc = "Celebrate both life and death on the station with Nanotrasen's Party Essentials(tm)! Contains seven colored glowsticks, four beers, two ales, a drinking shaker, and a bottle of patron & goldschlager!"
- cost = 2000
- contains = list(/obj/item/storage/box/drinkingglasses,
- /obj/item/reagent_containers/food/drinks/shaker,
- /obj/item/reagent_containers/food/drinks/bottle/patron,
- /obj/item/reagent_containers/food/drinks/bottle/goldschlager,
- /obj/item/reagent_containers/food/drinks/ale,
- /obj/item/reagent_containers/food/drinks/ale,
- /obj/item/reagent_containers/food/drinks/beer,
- /obj/item/reagent_containers/food/drinks/beer,
- /obj/item/reagent_containers/food/drinks/beer,
- /obj/item/reagent_containers/food/drinks/beer,
- /obj/item/flashlight/glowstick,
- /obj/item/flashlight/glowstick/red,
- /obj/item/flashlight/glowstick/blue,
- /obj/item/flashlight/glowstick/cyan,
- /obj/item/flashlight/glowstick/orange,
- /obj/item/flashlight/glowstick/yellow,
- /obj/item/flashlight/glowstick/pink)
- crate_name = "party equipment crate"
-
/datum/supply_pack/misc/noslipfloor
name = "High-traction Floor Tiles"
desc = "Make slipping a thing of the past with sixty industrial-grade anti-slip floortiles!"
diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm
index dd0f987d25..2d0af18670 100644
--- a/code/modules/cargo/packs/organic.dm
+++ b/code/modules/cargo/packs/organic.dm
@@ -47,6 +47,12 @@
/obj/item/storage/fancy/donut_box)
crate_name = "candy crate"
+/datum/supply_pack/organic/candy/randomised/fill(obj/structure/closet/crate/C)
+ var/list/L = contains.Copy()
+ for(var/i in 1 to num_contained)
+ var/item = pick_n_take(L)
+ new item(C)
+
/datum/supply_pack/organic/randomized/chef
name = "Excellent Meat Crate"
desc = "The best cuts in the whole galaxy."
@@ -224,6 +230,29 @@
crate_name = "wildcard food crate"
crate_type = /obj/structure/closet/crate/freezer
+/datum/supply_pack/organic/party
+ name = "Party Equipment"
+ desc = "Celebrate both life and death on the station with Nanotrasen's Party Essentials(tm)! Contains seven colored glowsticks, four beers, two ales, a drinking shaker, and a bottle of patron & goldschlager!"
+ cost = 2000
+ contains = list(/obj/item/storage/box/drinkingglasses,
+ /obj/item/reagent_containers/food/drinks/shaker,
+ /obj/item/reagent_containers/food/drinks/bottle/patron,
+ /obj/item/reagent_containers/food/drinks/bottle/goldschlager,
+ /obj/item/reagent_containers/food/drinks/ale,
+ /obj/item/reagent_containers/food/drinks/ale,
+ /obj/item/reagent_containers/food/drinks/beer,
+ /obj/item/reagent_containers/food/drinks/beer,
+ /obj/item/reagent_containers/food/drinks/beer,
+ /obj/item/reagent_containers/food/drinks/beer,
+ /obj/item/flashlight/glowstick,
+ /obj/item/flashlight/glowstick/red,
+ /obj/item/flashlight/glowstick/blue,
+ /obj/item/flashlight/glowstick/cyan,
+ /obj/item/flashlight/glowstick/orange,
+ /obj/item/flashlight/glowstick/yellow,
+ /obj/item/flashlight/glowstick/pink)
+ crate_name = "party equipment crate"
+
/datum/supply_pack/organic/pizza
name = "Pizza Crate"
desc = "Best prices on this side of the galaxy. All deliveries are guaranteed to be 99% anomaly-free!"
@@ -321,23 +350,6 @@
crate_name = "exotic seeds crate"
crate_type = /obj/structure/closet/crate/hydroponics
-/* Maintenance Garden Crate basically does this and more.
-/datum/supply_pack/organic/hydroponics
- name = "Hydroponics Crate"
- desc = "Supplies for growing a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron."
- cost = 1750
- contains = list(/obj/item/reagent_containers/spray/plantbgone,
- /obj/item/reagent_containers/spray/plantbgone,
- /obj/item/reagent_containers/glass/bottle/ammonia,
- /obj/item/reagent_containers/glass/bottle/ammonia,
- /obj/item/hatchet,
- /obj/item/cultivator,
- /obj/item/plant_analyzer,
- /obj/item/clothing/gloves/botanic_leather,
- /obj/item/clothing/suit/apron)
- crate_name = "hydroponics crate"
- crate_type = /obj/structure/closet/crate/hydroponics
-*/
/datum/supply_pack/organic/hydroponics/hydrotank
name = "Hydroponics Backpack Crate"
desc = "Bring on the flood with this high-capacity backpack crate. Contains 500 units of life-giving H2O. Requires hydroponics access to open."
diff --git a/code/modules/cargo/packs/science.dm b/code/modules/cargo/packs/science.dm
index f14bc37371..a009c998a3 100644
--- a/code/modules/cargo/packs/science.dm
+++ b/code/modules/cargo/packs/science.dm
@@ -24,7 +24,6 @@
name = "Advanced Alien Alloy Crate Crate"
desc = "Hello brothers from the stars!!! Our fellow brethren have made contact at long last and gave us gifts man! They really did build the prymi- Connection Error- Bro we’ll send you a sheet of advanced alien alloy."
cost = 15000
- contraband = TRUE
DropPodOnly = TRUE
contains = list(/obj/item/stack/sheet/mineral/abductor)
crate_name = "alien bro alloy crate"
@@ -82,6 +81,27 @@
/obj/item/integrated_electronics/wirer)
crate_name = "circuitry starter pack crate"
+/datum/supply_pack/science/glasswork
+ name = "Glass blower kit Crate"
+ desc = "Learn and make glassworks of usefull things for a profit! Contains glassworking tools and blowing rods. Glass not included."
+ cost = 1000
+ contains = list(/obj/item/glasswork/glasskit,
+ /obj/item/glasswork/glasskit,
+ /obj/item/glasswork/blowing_rod,
+ /obj/item/glasswork/blowing_rod)
+ crate_name = "glassblower gear crate"
+
+/datum/supply_pack/science/adv_surgery_tools
+ name = "Med-Co Advanced surgery tools"
+ desc = "A full set of Med-Co advanced surgery tools, this crate also comes with a spay of synth flesh as well as a can of . Requires Surgery access to open."
+ cost = 5500
+ access = ACCESS_SURGERY
+ contains = list(/obj/item/storage/belt/medical/surgery_belt_adv,
+ /obj/item/reagent_containers/medspray/synthflesh,
+ /obj/item/reagent_containers/medspray/sterilizine)
+ crate_name = "medco newest surgery tools"
+ crate_type = /obj/structure/closet/crate/medical
+
/datum/supply_pack/science/monkey
name = "Monkey Cube Crate"
desc = "Stop monkeying around! Contains seven monkey cubes. Just add water!"
diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm
index 01524b1910..34b8bbc249 100644
--- a/code/modules/cargo/packs/service.dm
+++ b/code/modules/cargo/packs/service.dm
@@ -115,7 +115,7 @@
/obj/item/kitchen/knife,
/obj/item/kitchen/knife/butcher,
/obj/item/kitchen/knife/butcher,
- /obj/item/kitchen/rollingpin,
+ /obj/item/kitchen/rollingpin,
/obj/item/trash/plate,
/obj/item/trash/plate,
/obj/item/trash/plate,
@@ -243,7 +243,7 @@
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Vendor Refills //////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
-
+
/datum/supply_pack/service/vending/bartending
name = "Bartending Supply Crate"
desc = "Bring on the booze with vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!"
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 08ecefb91f..75daaabb99 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -482,12 +482,20 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(gender == MALE)
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list)
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list)
- else
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_m)
+ else if(gender == FEMALE)
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list)
- underwear = sanitize_inlist(underwear, GLOB.underwear_list)
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_f)
+ else
+ hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_list)
+ facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_list)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_list)
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
+
undie_color = sanitize_hexcolor(undie_color, 3, FALSE, initial(undie_color))
- undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
shirt_color = sanitize_hexcolor(shirt_color, 3, FALSE, initial(shirt_color))
socks = sanitize_inlist(socks, GLOB.socks_list)
socks_color = sanitize_hexcolor(socks_color, 3, FALSE, initial(socks_color))
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index c04f581425..c9753b3053 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -203,32 +203,6 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
- //Radiation
-/obj/item/clothing/head/helmet/space/hardsuit/engine/rad
- name = "radiation hardsuit helmet"
- desc = "A special helmet that protects against radiation and space. Not much else unfortunately."
- icon_state = "cespace_helmet"
- item_state = "nothing"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
- item_color = "engineering"
- resistance_flags = FIRE_PROOF
- rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
- actions_types = list()
-
-/obj/item/clothing/suit/space/hardsuit/engine/rad
- name = "radiation hardsuit"
- desc = "A special suit that protects against radiation and space. Not much else unfortunately."
- icon_state = "hardsuit-rad"
- item_state = "nothing"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
- helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/rad
- resistance_flags = FIRE_PROOF
- rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
- mutantrace_variation = NONE
-
-/obj/item/clothing/head/helmet/space/hardsuit/engine/rad/attack_self()
- return //Sprites required for flashlight
-
//Chief Engineer's hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/engine/elite
name = "advanced hardsuit helmet"
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index c9c3d1ff39..f9e35ca37f 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -11,6 +11,7 @@ Contains:
- ERT hardsuit: Command, Sec, Engi, Med
- ERT High Alarm - Command, Sec, Engi, Med
- EVA spacesuit
+ - Radiation Spacesuit
- Freedom's spacesuit (freedom from vacuum's oppression)
- Carp hardsuit
*/
@@ -312,6 +313,28 @@ Contains:
flash_protect = 0
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65)
+//Radiation
+/obj/item/clothing/head/helmet/space/rad
+ name = "radiation voidsuit helmet"
+ desc = "A special helmet that protects against radiation and space. Not much else unfortunately."
+ icon_state = "cespace_helmet"
+ item_state = "nothing"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
+ item_color = "engineering"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ actions_types = list()
+
+/obj/item/clothing/suit/space/rad
+ name = "radiation voidsuit"
+ desc = "A special suit that protects against radiation and space. Not much else unfortunately."
+ icon_state = "hardsuit-rad"
+ item_state = "nothing"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ mutantrace_variation = NONE
+
/obj/item/clothing/head/helmet/space/freedom
name = "eagle helmet"
desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle."
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index a2081851e1..a4b8c920d3 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -945,4 +945,59 @@
icon_state = "christmasfemaleg"
item_state = "christmasfemaleg"
body_parts_covered = CHEST|GROIN
- can_adjust = FALSE
\ No newline at end of file
+ can_adjust = FALSE
+
+// Lunar Clothes
+/obj/item/clothing/under/lunar/qipao
+ name = "Black Qipao"
+ desc = "A Qipao, traditionally worn in ancient Earth China by women during social events and lunar new years. This one is black."
+ icon_state = "qipao"
+ item_state = "qipao"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+ mutantrace_variation = NONE
+
+/obj/item/clothing/under/lunar/qipao/white
+ name = "White Qipao"
+ desc = "A Qipao, traditionally worn in ancient Earth China by women during social events and lunar new years. This one is white."
+ icon_state = "qipao_white"
+ item_state = "qipao_white"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+ mutantrace_variation = NONE
+
+/obj/item/clothing/under/lunar/qipao/red
+ name = "Red Qipao"
+ desc = "A Qipao, traditionally worn in ancient Earth China by women during social events and lunar new years. This one is red."
+ icon_state = "qipao_red"
+ item_state = "qipao_red"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+ mutantrace_variation = NONE
+
+/obj/item/clothing/under/lunar/cheongsam
+ name = "Black Cheongsam"
+ desc = "A Cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years. This one is black."
+ icon_state = "cheong"
+ item_state = "cheong"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+ mutantrace_variation = NONE
+
+/obj/item/clothing/under/lunar/cheongsam/white
+ name = "White Cheongsam"
+ desc = "A Cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years. This one is white."
+ icon_state = "cheongw"
+ item_state = "cheongw"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+ mutantrace_variation = NONE
+
+/obj/item/clothing/under/lunar/cheongsam/red
+ name = "Red Cheongsam"
+ desc = "A Cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years. This one is red.."
+ icon_state = "cheongr"
+ item_state = "cheongr"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+ mutantrace_variation = NONE
\ No newline at end of file
diff --git a/code/modules/crafting/glassware.dm b/code/modules/crafting/glassware.dm
new file mode 100644
index 0000000000..22d7e01f8a
--- /dev/null
+++ b/code/modules/crafting/glassware.dm
@@ -0,0 +1,299 @@
+//This file is for glass working types of things!
+
+/obj/item/glasswork
+ name = "This is a bug report it!"
+ desc = "Failer to code. Contact your local bug remover..."
+ icon = 'icons/obj/glassworks.dmi'
+ w_class = WEIGHT_CLASS_SMALL
+ force = 1
+ throw_speed = 1
+ throw_range = 3
+ tool_behaviour = null
+
+/obj/item/glasswork/glasskit
+ name = "Glass working tools"
+ desc = "A lovely belt of most the tools you will need to shape, mold, and refine glass into more advanced shapes."
+ icon_state = "glass_tools"
+ tool_behaviour = TOOL_GLASS_CUT
+
+/obj/item/glasswork/blowing_rod
+ name = "Glass working blow rod"
+ desc = "A hollow metal stick made for glass blowing."
+ icon_state = "blowing_rods_unused"
+ tool_behaviour = TOOL_BLOW
+
+/obj/item/glasswork/glass_base
+ name = "Glass fodder sheet"
+ desc = "A sheet of glass set aside for glass working"
+ icon_state = "glass_base"
+ var/next_step = null
+ var/rod = /obj/item/glasswork/blowing_rod
+
+/obj/item/lens
+ name = "Optical lens"
+ desc = "Good for selling or crafting, by itself its useless"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "glass_optics"
+
+//////////////////////Chem Disk/////////////////////
+//Two Steps //
+//Sells for 300 cr, takes 10 glass shets //
+//Usefull for chem spliting //
+////////////////////////////////////////////////////
+
+/obj/item/glasswork/glass_base/dish
+ name = "Glass fodder sheet"
+ desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass dish. Needs to be cut with some tools."
+ next_step = /obj/item/glasswork/glass_base/dish_part1
+
+/obj/item/glasswork/glass_base/dish/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/dish_part1
+ name = "Half chem dish sheet"
+ desc = "A sheet of glass cut in half, looks like it still needs some more cutting down"
+ icon_state = "glass_base_half"
+ next_step = /obj/item/reagent_containers/glass/beaker/glass_dish
+
+/obj/item/glasswork/glass_base/dish_part1/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+//////////////////////Lens//////////////////////////
+//Six Steps //
+//Sells for 1800 cr, takes 15 glass shets //
+//Usefull for selling and later crafting //
+////////////////////////////////////////////////////
+
+/obj/item/glasswork/glass_base/glass_lens
+ name = "Glass fodder sheet"
+ desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass lens. Needs to be cut with some tools."
+ next_step = /obj/item/glasswork/glass_base/glass_lens_part1
+
+/obj/item/glasswork/glass_base/glass_lens/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/glass_lens_part1
+ name = "Glass fodder sheet"
+ desc = "Cut glass ready to be heated. Needs to be heated with some tools."
+ icon_state = "glass_base_half"
+ next_step = /obj/item/glasswork/glass_base/glass_lens_part2
+
+/obj/item/glasswork/glass_base/glass_lens_part1/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_WELDER)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/glass_lens_part2
+ name = "Glass fodder sheet"
+ desc = "Cut glass that has been heated. Needs to be heated more with some tools."
+ icon_state = "glass_base_heat"
+ next_step = /obj/item/glasswork/glass_base/glass_lens_part3
+
+/obj/item/glasswork/glass_base/glass_lens_part2/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_WELDER)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/glass_lens_part3
+ name = "Glass fodder sheet"
+ desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube."
+ icon_state = "glass_base_molding"
+ next_step = /obj/item/glasswork/glass_base/glass_lens_part4
+
+/obj/item/glasswork/glass_base/glass_lens_part3/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_BLOW)
+ new next_step(user.loc, 1)
+ qdel(src)
+ qdel(I)
+
+/obj/item/glasswork/glass_base/glass_lens_part4
+ name = "Glass fodder sheet"
+ desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube."
+ icon_state = "blowing_rods_inuse"
+ next_step = /obj/item/glasswork/glass_base/glass_lens_part5
+
+/obj/item/glasswork/glass_base/glass_lens_part4/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ new rod(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/glass_lens_part5
+ name = "Unpolished glass lens"
+ desc = "A small unpolished glass lens. Could be polished with some cloth."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "glass_optics"
+ next_step = /obj/item/glasswork/glass_base/glass_lens_part6
+
+/obj/item/glasswork/glass_base/glass_lens_part5/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(istype(I, /obj/item/stack/sheet/cloth))
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/glass_lens_part6
+ name = "Unrefined glass lens"
+ desc = "A small polished glass lens. Just needs to be refined with some sandstone."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "glass_optics"
+ next_step = /obj/item/lens
+
+/obj/item/glasswork/glass_base/glass_lens_part6/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(istype(I, /obj/item/stack/sheet/mineral/sandstone))
+ new next_step(user.loc, 1)
+ qdel(src)
+
+//////////////////////Spouty Flask//////////////////
+//Four Steps //
+//Sells for 1200 cr, takes 20 glass shets //
+//Usefull for selling and chemical things //
+////////////////////////////////////////////////////
+
+/obj/item/glasswork/glass_base/spouty
+ name = "Glass fodder sheet"
+ desc = "A set of glass sheets set aside for glass working, this one is ideal for a spout beaker. Needs to be cut with some tools."
+ next_step = /obj/item/glasswork/glass_base/spouty_part2
+
+/obj/item/glasswork/glass_base/spouty/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/spouty_part2
+ name = "Glass fodder sheet"
+ desc = "Cut glass that has been heated. Needs to be heated with some tools."
+ icon_state = "glass_base_half"
+ next_step = /obj/item/glasswork/glass_base/spouty_part3
+
+/obj/item/glasswork/glass_base/spouty_part2/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_WELDER)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/spouty_part3
+ name = "Glass fodder sheet"
+ desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube."
+ icon_state = "glass_base_molding"
+ next_step = /obj/item/glasswork/glass_base/spouty_part4
+
+/obj/item/glasswork/glass_base/spouty_part3/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_BLOW)
+ new next_step(user.loc, 1)
+ qdel(src)
+ qdel(I)
+
+/obj/item/glasswork/glass_base/spouty_part4
+ name = "Glass fodder sheet"
+ desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube."
+ icon_state = "blowing_rods_inuse"
+ next_step = /obj/item/reagent_containers/glass/beaker/flask/spouty
+
+/obj/item/glasswork/glass_base/spouty_part4/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ new rod(user.loc, 1)
+ qdel(src)
+
+//////////////////////Small Bulb Flask//////////////
+//Two Steps //
+//Sells for 600 cr, takes 5 glass shets //
+//Usefull for selling and chemical things //
+////////////////////////////////////////////////////
+
+/obj/item/glasswork/glass_base/flask_small
+ name = "Glass fodder sheet"
+ desc = "A set of glass sheets set aside for glass working, this one is ideal for a small flask. Needs to be heated with some tools."
+ next_step = /obj/item/glasswork/glass_base/flask_small_part1
+
+/obj/item/glasswork/glass_base/flask_small/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_WELDER)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/flask_small_part1
+ name = "Metled glass"
+ desc = "A blob of metled glass, this one is ideal for a small flask. Needs to be blown with some tools."
+ icon_state = "glass_base_molding"
+ next_step = /obj/item/glasswork/glass_base/flask_small_part2
+
+/obj/item/glasswork/glass_base/flask_small_part1/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_BLOW)
+ new next_step(user.loc, 1)
+ qdel(src)
+ qdel(I)
+
+/obj/item/glasswork/glass_base/flask_small_part2
+ name = "Metled glass"
+ desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
+ icon_state = "blowing_rods_inuse"
+ next_step = /obj/item/reagent_containers/glass/beaker/flask
+
+/obj/item/glasswork/glass_base/flask_small_part2/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ new rod(user.loc, 1)
+ qdel(src)
+
+//////////////////////Large Bulb Flask//////////////
+//Two Steps //
+//Sells for 1000 cr, takes 15 glass shets //
+//Usefull for selling and chemical things //
+////////////////////////////////////////////////////
+
+/obj/item/glasswork/glass_base/flask_large
+ name = "Glass fodder sheet"
+ desc = "A set of glass sheets set aside for glass working, this one is ideal for a large flask. Needs to be heated with some tools."
+ next_step = /obj/item/glasswork/glass_base/flask_large_part1
+
+/obj/item/glasswork/glass_base/flask_large/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_WELDER)
+ new next_step(user.loc, 1)
+ qdel(src)
+
+/obj/item/glasswork/glass_base/flask_large_part1
+ name = "Metled glass"
+ desc = "A blob of metled glass, this one is ideal for a large flask. Needs to be blown with some tools."
+ icon_state = "glass_base_molding"
+ next_step = /obj/item/glasswork/glass_base/flask_large_part2
+
+/obj/item/glasswork/glass_base/flask_large_part1/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_BLOW)
+ new next_step(user.loc, 1)
+ qdel(src)
+ qdel(I)
+
+/obj/item/glasswork/glass_base/flask_large_part2
+ name = "Metled glass"
+ desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
+ icon_state = "blowing_rods_inuse"
+ next_step = /obj/item/reagent_containers/glass/beaker/flask/large
+
+/obj/item/glasswork/glass_base/flask_large_part2/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(I.tool_behaviour == TOOL_GLASS_CUT)
+ new next_step(user.loc, 1)
+ new rod(user.loc, 1)
+ qdel(src)
diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm
index f006f2b358..c585961604 100644
--- a/code/modules/events/shuttle_loan.dm
+++ b/code/modules/events/shuttle_loan.dm
@@ -133,7 +133,7 @@
shuttle_spawns.Add(/mob/living/simple_animal/hostile/syndicate/ranged/infiltrator)
if(RUSKY_PARTY)
- var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/misc/party]
+ var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/organic/party]
pack.generate(pick_n_take(empty_shuttle_turfs))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian)
diff --git a/code/modules/fields/timestop.dm b/code/modules/fields/timestop.dm
index c59a8004ca..56abef8cd6 100644
--- a/code/modules/fields/timestop.dm
+++ b/code/modules/fields/timestop.dm
@@ -9,7 +9,7 @@
pixel_x = -64
pixel_y = -64
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- var/list/immune = list() // the one who creates the timestop is immune
+ var/list/immune = list() // the one who creates the timestop is immune, which includes wizards and the dead slime you murdered to make this chronofield
var/turf/target
var/freezerange = 2
var/duration = 140
@@ -27,10 +27,10 @@
for(var/A in immune_atoms)
immune[A] = TRUE
for(var/mob/living/L in GLOB.player_list)
- if(locate(/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop) in L.mind.spell_list) //People who can stop time are immune to its effects
+ if(locate(/obj/effect/proc_holder/spell/aoe_turf/timestop) in L.mind.spell_list) //People who can stop time are immune to its effects
immune[L] = TRUE
for(var/mob/living/simple_animal/hostile/guardian/G in GLOB.parasites)
- if(G.summoner && locate(/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop) in G.summoner.mind.spell_list) //It would only make sense that a person's stand would also be immune.
+ if(G.summoner && locate(/obj/effect/proc_holder/spell/aoe_turf/timestop) in G.summoner.mind.spell_list) //It would only make sense that a person's stand would also be immune.
immune[G] = TRUE
if(start)
timestop()
@@ -46,9 +46,8 @@
chronofield = make_field(/datum/proximity_monitor/advanced/timestop, list("current_range" = freezerange, "host" = src, "immune" = immune, "check_anti_magic" = check_anti_magic, "check_holy" = check_holy))
QDEL_IN(src, duration)
-/obj/effect/timestop/wizard
+/obj/effect/timestop/magic
check_anti_magic = TRUE
- duration = 100
/datum/proximity_monitor/advanced/timestop
name = "chronofield"
@@ -56,9 +55,10 @@
field_shape = FIELD_SHAPE_RADIUS_SQUARE
requires_processing = TRUE
var/list/immune = list()
- var/list/mob/living/frozen_mobs = list()
- var/list/obj/item/projectile/frozen_projectiles = list()
- var/list/atom/movable/frozen_throws = list()
+ var/list/frozen_things = list()
+ var/list/frozen_mobs = list() //cached separately for processing
+ var/list/frozen_structures = list() //Also machinery, and only frozen aestethically
+ var/list/frozen_turfs = list() //Only aesthetically
var/check_anti_magic = FALSE
var/check_holy = FALSE
@@ -74,85 +74,125 @@
/datum/proximity_monitor/advanced/timestop/proc/freeze_atom(atom/movable/A)
if(immune[A] || global_frozen_atoms[A] || !istype(A))
return FALSE
- if(A.throwing)
- freeze_throwing(A)
+ if(ismob(A))
+ var/mob/M = A
+ if(M.anti_magic_check(check_anti_magic, check_holy))
+ immune[A] = TRUE
+ return
+ var/frozen = TRUE
if(isliving(A))
freeze_mob(A)
else if(istype(A, /obj/item/projectile))
freeze_projectile(A)
+ else if(istype(A, /obj/mecha))
+ freeze_mecha(A)
+ else if((ismachinery(A) && !istype(A, /obj/machinery/light)) || isstructure(A)) //Special exception for light fixtures since recoloring causes them to change light
+ freeze_structure(A)
else
- return FALSE
+ frozen = FALSE
+ if(A.throwing)
+ freeze_throwing(A)
+ frozen = TRUE
+ if(!frozen)
+ return
+ frozen_things[A] = A.move_resist
+ A.move_resist = INFINITY
+ global_frozen_atoms[A] = src
into_the_negative_zone(A)
+ RegisterSignal(A, COMSIG_MOVABLE_PRE_MOVE, .proc/unfreeze_atom)
+ RegisterSignal(A, COMSIG_ITEM_PICKUP, .proc/unfreeze_atom)
return TRUE
/datum/proximity_monitor/advanced/timestop/proc/unfreeze_all()
- for(var/i in frozen_projectiles)
- unfreeze_projectile(i)
- for(var/i in frozen_mobs)
- unfreeze_mob(i)
- for(var/i in frozen_throws)
- unfreeze_throw(i)
+ for(var/i in frozen_things)
+ unfreeze_atom(i)
+ for(var/T in frozen_turfs)
+ unfreeze_turf(T)
+
+/datum/proximity_monitor/advanced/timestop/proc/unfreeze_atom(atom/movable/A)
+ if(A.throwing)
+ unfreeze_throwing(A)
+ if(isliving(A))
+ unfreeze_mob(A)
+ else if(istype(A, /obj/item/projectile))
+ unfreeze_projectile(A)
+ else if(istype(A, /obj/mecha))
+ unfreeze_mecha(A)
+
+ UnregisterSignal(A, COMSIG_MOVABLE_PRE_MOVE)
+ UnregisterSignal(A, COMSIG_ITEM_PICKUP)
+ escape_the_negative_zone(A)
+ A.move_resist = frozen_things[A]
+ frozen_things -= A
+ global_frozen_atoms -= A
+
+/datum/proximity_monitor/advanced/timestop/proc/freeze_mecha(obj/mecha/M)
+ M.completely_disabled = TRUE
+
+/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mecha(obj/mecha/M)
+ M.completely_disabled = FALSE
/datum/proximity_monitor/advanced/timestop/proc/freeze_throwing(atom/movable/AM)
var/datum/thrownthing/T = AM.throwing
T.paused = TRUE
- frozen_throws[AM] = T
- global_frozen_atoms[AM] = TRUE
-/datum/proximity_monitor/advanced/timestop/proc/unfreeze_throw(atom/movable/AM)
- var/datum/thrownthing/T = frozen_throws[AM]
- T.paused = FALSE
- frozen_throws -= AM
- global_frozen_atoms -= AM
+/datum/proximity_monitor/advanced/timestop/proc/unfreeze_throwing(atom/movable/AM)
+ var/datum/thrownthing/T = AM.throwing
+ if(T)
+ T.paused = FALSE
+
+/datum/proximity_monitor/advanced/timestop/proc/freeze_turf(turf/T)
+ into_the_negative_zone(T)
+ frozen_turfs += T
+
+/datum/proximity_monitor/advanced/timestop/proc/unfreeze_turf(turf/T)
+ escape_the_negative_zone(T)
+
+/datum/proximity_monitor/advanced/timestop/proc/freeze_structure(obj/O)
+ into_the_negative_zone(O)
+ frozen_structures += O
+
+/datum/proximity_monitor/advanced/timestop/proc/unfreeze_structure(obj/O)
+ escape_the_negative_zone(O)
/datum/proximity_monitor/advanced/timestop/process()
for(var/i in frozen_mobs)
var/mob/living/m = i
- if(get_dist(get_turf(m), get_turf(host)) > current_range)
- unfreeze_mob(m)
- else
- m.Stun(20, 1, 1)
+ m.Stun(20, 1, 1)
/datum/proximity_monitor/advanced/timestop/setup_field_turf(turf/T)
for(var/i in T.contents)
freeze_atom(i)
+ freeze_turf(T)
return ..()
-/datum/proximity_monitor/advanced/timestop/proc/unfreeze_projectile(obj/item/projectile/P)
- escape_the_negative_zone(P)
- frozen_projectiles -= P
- P.paused = FALSE
- global_frozen_atoms -= P
-
/datum/proximity_monitor/advanced/timestop/proc/freeze_projectile(obj/item/projectile/P)
- frozen_projectiles[P] = TRUE
P.paused = TRUE
- global_frozen_atoms[P] = TRUE
+
+/datum/proximity_monitor/advanced/timestop/proc/unfreeze_projectile(obj/item/projectile/P)
+ P.paused = FALSE
/datum/proximity_monitor/advanced/timestop/proc/freeze_mob(mob/living/L)
- if(L.anti_magic_check(check_anti_magic, check_holy))
- immune += L
- return
+ frozen_mobs += L
L.Stun(20, 1, 1)
- frozen_mobs[L] = L.anchored
- L.anchored = TRUE
- global_frozen_atoms[L] = TRUE
- if(ishostile(L))
- var/mob/living/simple_animal/hostile/H = L
- H.toggle_ai(AI_OFF)
- H.LoseTarget()
+ ADD_TRAIT(L, TRAIT_MUTE, TIMESTOP_TRAIT)
+ walk(L, 0) //stops them mid pathing even if they're stunimmune
+ if(isanimal(L))
+ var/mob/living/simple_animal/S = L
+ S.toggle_ai(AI_OFF)
+ if(ishostile(L))
+ var/mob/living/simple_animal/hostile/H = L
+ H.LoseTarget()
/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mob(mob/living/L)
- escape_the_negative_zone(L)
L.AdjustStun(-20, 1, 1)
- L.anchored = frozen_mobs[L]
+ REMOVE_TRAIT(L, TRAIT_MUTE, TIMESTOP_TRAIT)
frozen_mobs -= L
- global_frozen_atoms -= L
- if(ishostile(L))
- var/mob/living/simple_animal/hostile/H = L
- H.toggle_ai(initial(H.AIStatus))
+ if(isanimal(L))
+ var/mob/living/simple_animal/S = L
+ S.toggle_ai(initial(S.AIStatus))
//you don't look quite right, is something the matter?
/datum/proximity_monitor/advanced/timestop/proc/into_the_negative_zone(atom/A)
@@ -160,4 +200,4 @@
//let's put some colour back into your cheeks
/datum/proximity_monitor/advanced/timestop/proc/escape_the_negative_zone(atom/A)
- A.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
\ No newline at end of file
+ A.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm
index 130640ee8a..fd332a38df 100644
--- a/code/modules/food_and_drinks/recipes/food_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm
@@ -15,9 +15,9 @@
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
mob_react = FALSE
-/datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/tofu(location)
return
@@ -26,9 +26,9 @@
id = "chocolate_bar"
required_reagents = list(/datum/reagent/consumable/soymilk = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/sugar = 2)
-/datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/chocolatebar(location)
return
@@ -39,9 +39,9 @@
required_reagents = list(/datum/reagent/consumable/milk/chocolate_milk = 4, /datum/reagent/consumable/sugar = 2)
mob_react = FALSE
-/datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/chocolatebar(location)
return
@@ -90,9 +90,9 @@
required_reagents = list(/datum/reagent/consumable/milk = 40)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
-/datum/chemical_reaction/cheesewheel/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/cheesewheel/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/store/cheesewheel(location)
/datum/chemical_reaction/synthmeat
@@ -101,9 +101,9 @@
required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/medicine/cryoxadone = 1)
mob_react = FALSE
-/datum/chemical_reaction/synthmeat/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/synthmeat/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat(location)
/datum/chemical_reaction/hot_ramen
@@ -137,9 +137,9 @@
required_reagents = list(/datum/reagent/water = 10, /datum/reagent/consumable/flour = 15)
mix_message = "The ingredients form a dough."
-/datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/dough(location)
/datum/chemical_reaction/cakebatter
@@ -148,9 +148,9 @@
required_reagents = list(/datum/reagent/consumable/eggyolk = 15, /datum/reagent/consumable/flour = 15, /datum/reagent/consumable/sugar = 5)
mix_message = "The ingredients form a cake batter."
-/datum/chemical_reaction/cakebatter/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/cakebatter/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/cakebatter(location)
/datum/chemical_reaction/cakebatter/vegan
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index bdca4bb7df..09bd774a6a 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -167,7 +167,7 @@
w_class = WEIGHT_CLASS_BULKY
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
hoodtype = /obj/item/clothing/head/hooded/explorer/exo
- armor = list("melee" = 65, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 60, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
+ armor = list("melee" = 55, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 40, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
/obj/item/clothing/head/hooded/explorer/exo
@@ -175,7 +175,7 @@
desc = "A robust helmet for fighting dangerous animals. Its design and material make it harder for a Goliath to keep their grip on the wearer."
icon_state = "exo"
item_state = "exo"
- armor = list("melee" = 65, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 60, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
+ armor = list("melee" = 55, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 40, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
/obj/item/clothing/mask/gas/exo
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
index d11299fd5b..34988f5656 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
@@ -7,6 +7,26 @@
// please make sure they're sorted alphabetically and categorized
+/datum/sprite_accessory/facial_hair/threeoclock
+ name = "Beard (3 o\'Clock)"
+ icon_state = "facial_3oclock"
+
+/datum/sprite_accessory/facial_hair/fiveoclock
+ name = "Beard (5 o\'Clock)"
+ icon_state = "facial_5oclock"
+
+/datum/sprite_accessory/facial_hair/fiveoclockm
+ name = "Beard (5 o\'Clock with Moustache)"
+ icon_state = "facial_5oclockmoustache"
+
+/datum/sprite_accessory/facial_hair/sevenoclock
+ name = "Beard (7 o\'Clock)"
+ icon_state = "facial_7oclock"
+
+/datum/sprite_accessory/facial_hair/sevenoclockm
+ name = "Beard (7 o\'Clock with Moustache)"
+ icon_state = "facial_7oclockmoustache"
+
/datum/sprite_accessory/facial_hair/abe
name = "Beard (Abraham Lincoln)"
icon_state = "facial_abe"
@@ -23,10 +43,6 @@
name = "Beard (Dwarf)"
icon_state = "facial_dwarf"
-/datum/sprite_accessory/facial_hair/fiveoclock
- name = "Beard (Five o Clock Shadow)"
- icon_state = "facial_fiveoclock"
-
/datum/sprite_accessory/facial_hair/fullbeard
name = "Beard (Full)"
icon_state = "facial_fullbeard"
@@ -35,6 +51,10 @@
name = "Beard (Goatee)"
icon_state = "facial_gt"
+/datum/sprite_accessory/facial_hair/goatee
+ name = "Beard (Goatee 2)"
+ icon_state = "facial_goatee"
+
/datum/sprite_accessory/facial_hair/hip
name = "Beard (Hipster)"
icon_state = "facial_hip"
@@ -43,18 +63,38 @@
name = "Beard (Jensen)"
icon_state = "facial_jensen"
+/datum/sprite_accessory/facial_hair/martialartist
+ name = "Beard (Martial Artist)"
+ icon_state = "facial_martialartist"
+
+/datum/sprite_accessory/facial_hair/moonshiner
+ name = "Beard (Moonshiner)"
+ icon_state = "facial_moonshiner"
+
/datum/sprite_accessory/facial_hair/neckbeard
name = "Beard (Neckbeard)"
icon_state = "facial_neckbeard"
+/datum/sprite_accessory/facial_hair/tribeard
+ name = "Beard (Tribeard)"
+ icon_state = "facial_tribeard"
+
/datum/sprite_accessory/facial_hair/vlongbeard
name = "Beard (Very Long)"
icon_state = "facial_wise"
+/datum/sprite_accessory/facial_hair/volaju
+ name = "Beard (Volaju)"
+ icon_state = "facial_volaju"
+
/datum/sprite_accessory/facial_hair/longbeard
name = "Beard (Long)"
icon_state = "facial_longbeard"
+/datum/sprite_accessory/facial_hair/moustache
+ name = "Moustache"
+ icon_state = "facial_moustache"
+
/datum/sprite_accessory/facial_hair/fu
name = "Moustache (Fu Manchu)"
icon_state = "facial_fumanchu"
@@ -63,6 +103,10 @@
name = "Moustache (Hulk Hogan)"
icon_state = "facial_hogan" //-Neek
+/datum/sprite_accessory/facial_hair/pencil
+ name = "Moustache (Pencil)"
+ icon_state = "facial_pencilstache"
+
/datum/sprite_accessory/facial_hair/selleck
name = "Moustache (Selleck)"
icon_state = "facial_selleck"
@@ -75,56 +119,31 @@
name = "Moustache (Van Dyke)"
icon_state = "facial_vandyke"
+/datum/sprite_accessory/facial_hair/walrus
+ name = "Moustache (Walrus)"
+ icon_state = "facial_walrus"
+
/datum/sprite_accessory/facial_hair/watson
name = "Moustache (Watson)"
icon_state = "facial_watson"
+/datum/sprite_accessory/facial_hair/mutton
+ name = "Mutton Chops"
+ icon_state = "facial_mutton"
+
+/datum/sprite_accessory/facial_hair/muttonmus
+ name = "Mutton Chops with Moustache"
+ icon_state = "facial_muttonmus"
+
/datum/sprite_accessory/facial_hair/shaved
name = "Shaved"
icon_state = null
gender = NEUTER
+/datum/sprite_accessory/facial_hair/sideburn
+ name = "Sideburns"
+ icon_state = "facial_sideburns"
+
/datum/sprite_accessory/facial_hair/elvis
name = "Sideburns (Elvis)"
- icon_state = "facial_elvis"
-
-#define VFACE(_name, new_state) /datum/sprite_accessory/facial_hair/##new_state/icon_state=#new_state;;/datum/sprite_accessory/facial_hair/##new_state/name= #_name + " (Virgo)"
-VFACE("Watson", facial_watson_s)
-VFACE("Chaplin", facial_chaplin_s)
-VFACE("Fullbeard", facial_fullbeard_s)
-VFACE("Vandyke", facial_vandyke_s)
-VFACE("Elvis", facial_elvis_s)
-VFACE("Abe", facial_abe_s)
-VFACE("Chin", facial_chin_s)
-VFACE("GT", facial_gt_s)
-VFACE("Hip", facial_hip_s)
-VFACE("Hogan", facial_hogan_s)
-VFACE("Selleck", facial_selleck_s)
-VFACE("Neckbeard", facial_neckbeard_s)
-VFACE("Longbeard", facial_longbeard_s)
-VFACE("Dwarf", facial_dwarf_s)
-VFACE("Sideburn", facial_sideburn_s)
-VFACE("Mutton", facial_mutton_s)
-VFACE("Moustache", facial_moustache_s)
-VFACE("Pencilstache", facial_pencilstache_s)
-VFACE("Goatee", facial_goatee_s)
-VFACE("Smallstache", facial_smallstache_s)
-VFACE("Volaju", facial_volaju_s)
-VFACE("3 O\'clock", facial_3oclock_s)
-VFACE("5 O\'clock", facial_5oclock_s)
-VFACE("7 O\'clock", facial_7oclock_s)
-VFACE("5 O\'clock Moustache", facial_5oclockmoustache_s)
-VFACE("7 O\'clock", facial_7oclockmoustache_s)
-VFACE("Walrus", facial_walrus_s)
-VFACE("Muttonmus", facial_muttonmus_s)
-VFACE("Wise", facial_wise_s)
-VFACE("Martial Artist", facial_martialartist_s)
-VFACE("Dorsalfnil", facial_dorsalfnil_s)
-VFACE("Hornadorns", facial_hornadorns_s)
-VFACE("Spike", facial_spike_s)
-VFACE("Chinhorns", facial_chinhorns_s)
-VFACE("Cropped Fullbeard", facial_croppedfullbeard_s)
-VFACE("Chinless Beard", facial_chinlessbeard_s)
-VFACE("Moonshiner", facial_moonshiner_s)
-VFACE("Tribearder", facial_tribearder_s)
-#undef VFACE
\ No newline at end of file
+ icon_state = "facial_elvis"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
index abcc90c0ee..827f56b634 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
@@ -27,7 +27,7 @@
/datum/sprite_accessory/hair/bald
name = "Bald"
- icon_state = null
+ icon_state = "bald"
/datum/sprite_accessory/hair/balding
name = "Balding Hair"
@@ -37,6 +37,14 @@
name = "Bedhead"
icon_state = "hair_bedhead"
+/datum/sprite_accessory/hair/bedhead_long
+ name = "Bedhead (Long)"
+ icon_state = "hair_long_bedhead"
+
+/datum/sprite_accessory/hair/bedhead_longer
+ name = "Bedhead (Longer)"
+ icon_state = "hair_longer_bedhead"
+
/datum/sprite_accessory/hair/bedhead2
name = "Bedhead 2"
icon_state = "hair_bedheadv2"
@@ -51,7 +59,7 @@
/datum/sprite_accessory/hair/beehive2
name = "Beehive 2"
- icon_state = "hair_beehivev2"
+ icon_state = "hair_beehive2"
/datum/sprite_accessory/hair/bob
name = "Bob Hair"
@@ -69,6 +77,14 @@
name = "Bobcurl"
icon_state = "hair_bobcurl"
+/datum/sprite_accessory/hair/bobcut
+ name = "Bobcut"
+ icon_state = "hair_bobcut"
+
+/datum/sprite_accessory/hair/bobcutalt
+ name = "Bobcut (Alt)"
+ icon_state = "hair_bobcutalt"
+
/datum/sprite_accessory/hair/boddicker
name = "Boddicker"
icon_state = "hair_boddicker"
@@ -77,6 +93,10 @@
name = "Bowl"
icon_state = "hair_bowlcut"
+/datum/sprite_accessory/hair/bowl2
+ name = "Bowl 2"
+ icon_state = "hair_bowlcut2"
+
/datum/sprite_accessory/hair/braid
name = "Braid (Floorlength)"
icon_state = "hair_braid"
@@ -89,6 +109,10 @@
name = "Braided Front"
icon_state = "hair_braidfront"
+/datum/sprite_accessory/hair/grandebraid
+ name = "Braid (Grande)"
+ icon_state = "hair_grande"
+
/datum/sprite_accessory/hair/not_floorlength_braid
name = "Braid (High)"
icon_state = "hair_braid2"
@@ -113,10 +137,26 @@
name = "Bun Head 2"
icon_state = "hair_bunhead2"
+/datum/sprite_accessory/hair/bun3
+ name = "Bun Head 3"
+ icon_state = "hair_bunhead3"
+
+/datum/sprite_accessory/hair/bun4
+ name = "Bun Head 4"
+ icon_state = "hair_bunhead4"
+
+/datum/sprite_accessory/hair/doublebun
+ name = "Bun Head (Double)"
+ icon_state = "hair_doublebun"
+
/datum/sprite_accessory/hair/largebun
- name = "Bun (Large)"
+ name = "Bun Head (Large)"
icon_state = "hair_largebun"
+/datum/sprite_accessory/hair/tightbun
+ name = "Bun Head (Tight)"
+ icon_state = "hair_tightbun"
+
/datum/sprite_accessory/hair/business
name = "Business Hair"
icon_state = "hair_business"
@@ -137,10 +177,22 @@
name = "Buzzcut"
icon_state = "hair_buzzcut"
+/datum/sprite_accessory/hair/cia
+ name = "CIA"
+ icon_state = "hair_cia"
+
/datum/sprite_accessory/hair/combover
name = "Combover"
icon_state = "hair_combover"
+/datum/sprite_accessory/hair/coffeehouse
+ name = "Coffee House"
+ icon_state = "hair_coffeehouse"
+
+/datum/sprite_accessory/hair/country
+ name = "Country"
+ icon_state = "hair_country"
+
/datum/sprite_accessory/hair/crew
name = "Crewcut"
icon_state = "hair_crewcut"
@@ -149,13 +201,21 @@
name = "Curls"
icon_state = "hair_curls"
+/datum/sprite_accessory/hair/curly
+ name = "Curly"
+ icon_state = "hair_curly"
+
/datum/sprite_accessory/hair/cut
name = "Cut Hair"
icon_state = "hair_c"
+/datum/sprite_accessory/hair/dave
+ name = "Dave"
+ icon_state = "hair_dave"
+
/datum/sprite_accessory/hair/devillock
name = "Devil Lock"
- icon_state = "hair_devilock"
+ icon_state = "hair_devillock"
/datum/sprite_accessory/hair/dreadlocks
name = "Dreadlocks"
@@ -173,22 +233,66 @@
name = "Emo"
icon_state = "hair_emo"
+/datum/sprite_accessory/hair/emo2
+ name = "Emo 2"
+ icon_state = "hair_emo2"
+
+/datum/sprite_accessory/hair/emo_fringe
+ name = "Emo (Fringe)"
+ icon_state = "hair_emofringe"
+
+/datum/sprite_accessory/hair/emo_long
+ name = "Emo (Long)"
+ icon_state = "hair_emolong"
+
+/datum/sprite_accessory/hair/lowfade
+ name = "Fade (Low)"
+ icon_state = "hair_lowfade"
+
+/datum/sprite_accessory/hair/medfade
+ name = "Fade (Medium)"
+ icon_state = "hair_medfade"
+
+/datum/sprite_accessory/hair/highfade
+ name = "Fade (High)"
+ icon_state = "hair_highfade"
+
+/datum/sprite_accessory/hair/baldfade
+ name = "Fade (Bald)"
+ icon_state = "hair_baldfade"
+
+/datum/sprite_accessory/hair/nofade
+ name = "Fade (None)"
+ icon_state = "hair_nofade"
+
+/datum/sprite_accessory/hair/father
+ name = "Father"
+ icon_state = "hair_father"
+
/datum/sprite_accessory/hair/feather
name = "Feather"
icon_state = "hair_feather"
+/datum/sprite_accessory/hair/flair
+ name = "Flair"
+ icon_state = "hair_flair"
+
/datum/sprite_accessory/hair/sargeant
name = "Flat Top"
- icon_state = "hair_sargeant"
+ icon_state = "hair_sergeant"
/datum/sprite_accessory/hair/bigflattop
name = "Flat Top (Big)"
icon_state = "hair_bigflattop"
-/datum/sprite_accessory/hair/fag
+/datum/sprite_accessory/hair/fag //grimacing emoji
name = "Flow Hair"
icon_state = "hair_f"
+/datum/sprite_accessory/hair/fringetail
+ name = "Fringe Tail"
+ icon_state = "hair_fringetail"
+
/datum/sprite_accessory/hair/gelled
name = "Gelled Back"
icon_state = "hair_gelled"
@@ -205,10 +309,22 @@
name = "Half-banged Hair 2"
icon_state = "hair_halfbang2"
+/datum/sprite_accessory/hair/halfbangalt
+ name = "Half-banged Hair (Alt)"
+ icon_state = "hair_halfbang_alt"
+
+/datum/sprite_accessory/hair/halfshaved
+ name = "Half-shaved Hair"
+ icon_state = "hair_halfshaved"
+
/datum/sprite_accessory/hair/hedgehog
name = "Hedgehog Hair"
icon_state = "hair_hedgehog"
+/datum/sprite_accessory/hair/hightight
+ name = "High and Tight"
+ icon_state = "hair_hightight"
+
/datum/sprite_accessory/hair/himecut
name = "Hime Cut"
icon_state = "hair_himecut"
@@ -217,6 +333,10 @@
name = "Hime Cut 2"
icon_state = "hair_himecut2"
+/datum/sprite_accessory/hair/shorthime
+ name = "Hime Cut (Short)"
+ icon_state = "hair_shorthime"
+
/datum/sprite_accessory/hair/himeup
name = "Hime Updo"
icon_state = "hair_himeup"
@@ -225,16 +345,28 @@
name = "Hitop"
icon_state = "hair_hitop"
+/datum/sprite_accessory/hair/jade
+ name = "Jade"
+ icon_state = "hair_jade"
+
/datum/sprite_accessory/hair/jensen
- name = "Jensen Hair"
+ name = "Jensen"
icon_state = "hair_jensen"
+/datum/sprite_accessory/hair/joestar
+ name = "Joestar"
+ icon_state = "hair_joestar"
+
+/datum/sprite_accessory/hair/kagami
+ name = "Kagami"
+ icon_state = "hair_kagami"
+
/datum/sprite_accessory/hair/keanu
- name = "Keanu Hair"
+ name = "Keanu"
icon_state = "hair_keanu"
/datum/sprite_accessory/hair/kusangi
- name = "Kusanagi Hair"
+ name = "Kusanagi"
icon_state = "hair_kusanagi"
/datum/sprite_accessory/hair/long
@@ -249,6 +381,10 @@
name = "Long Hair 3"
icon_state = "hair_long3"
+/datum/sprite_accessory/hair/longalt
+ name = "Long Hair (Alt)"
+ icon_state = "hair_longeralt"
+
/datum/sprite_accessory/hair/long_over_eye
name = "Long Over Eye"
icon_state = "hair_longovereye"
@@ -269,6 +405,10 @@
name = "Long Side Part"
icon_state = "hair_longsidepart"
+/datum/sprite_accessory/hair/manbun
+ name = "Manbun"
+ icon_state = "hair_manbun"
+
/datum/sprite_accessory/hair/megaeyebrows
name = "Mega Eyebrows"
icon_state = "hair_megaeyebrows"
@@ -277,6 +417,10 @@
name = "Messy"
icon_state = "hair_messy"
+/datum/sprite_accessory/hair/modern
+ name = "Modern"
+ icon_state = "hair_modern"
+
/datum/sprite_accessory/hair/mohawk
name = "Mohawk"
icon_state = "hair_d"
@@ -285,6 +429,26 @@
name = "Mohawk (Reverse)"
icon_state = "hair_reversemohawk"
+/datum/sprite_accessory/hair/shavedmohawk
+ name = "Mohawk (Shaved)"
+ icon_state = "hair_shavedmohawk"
+
+/datum/sprite_accessory/hair/mohawk_unshaven
+ name = "Mohawk (Unshaven)"
+ icon_state = "hair_unshaven_mohawk"
+
+/datum/sprite_accessory/hair/mulder
+ name = "Mulder"
+ icon_state = "hair_mulder"
+
+/datum/sprite_accessory/hair/nia
+ name = "Nia"
+ icon_state = "hair_nia"
+
+/datum/sprite_accessory/hair/nitori
+ name = "Nitori"
+ icon_state = "hair_nitori"
+
/datum/sprite_accessory/hair/odango
name = "Odango"
icon_state = "hair_odango"
@@ -301,6 +465,10 @@
name = "Over Eye"
icon_state = "hair_shortovereye"
+/datum/sprite_accessory/hair/oxton
+ name = "Oxton"
+ icon_state = "hair_oxton"
+
//Donator item - fractious
/datum/sprite_accessory/hair/over_eye_fr
name = "Over Eye (fract)"
@@ -331,6 +499,10 @@
name = "Pixie Cut"
icon_state = "hair_pixie"
+/datum/sprite_accessory/hair/plait
+ name = "Plait"
+ icon_state = "hair_plait"
+
/datum/sprite_accessory/hair/pompadour
name = "Pompadour"
icon_state = "hair_pompadour"
@@ -383,10 +555,62 @@
name = "Ponytail (Side) 4"
icon_state = "hair_sidetail4"
+/datum/sprite_accessory/hair/spikytail
+ name = "Ponytail (Spiky)"
+ icon_state = "hair_spikyponytail"
+
+/datum/sprite_accessory/hair/poofy
+ name = "Poofy"
+ icon_state = "hair_poofy"
+
+/datum/sprite_accessory/hair/poofy2
+ name = "Poofy 2"
+ icon_state = "hair_poofy2"
+
/datum/sprite_accessory/hair/quiff
name = "Quiff"
icon_state = "hair_quiff"
+/datum/sprite_accessory/hair/ronin
+ name = "Ronin"
+ icon_state = "hair_ronin"
+
+/datum/sprite_accessory/hair/row
+ name = "Rows"
+ icon_state = "hair_rows1"
+
+/datum/sprite_accessory/hair/row2
+ name = "Rows 2"
+ icon_state = "hair_rows2"
+
+/datum/sprite_accessory/hair/rowbun
+ name = "Rows (Bun)"
+ icon_state = "hair_rowbun"
+
+/datum/sprite_accessory/hair/rowdualtail
+ name = "Rows (Pigtails)"
+ icon_state = "hair_rowdualtail"
+
+/datum/sprite_accessory/hair/rowbraid
+ name = "Rows (Braid)"
+ icon_state = "hair_rowbraid"
+
+/datum/sprite_accessory/hair/scully
+ name = "Scully"
+ icon_state = "hair_scully"
+
+/datum/sprite_accessory/hair/shaved
+ name = "Shaved"
+ icon_state = "hair_shaved"
+
+/datum/sprite_accessory/hair/shavedpart
+ name = "Shaved (Part)"
+ icon_state = "hair_shavedpart"
+
+/datum/sprite_accessory/hair/bangs_short
+ name = "Short Bangs"
+ icon_state = "hair_shortbangs"
+
/datum/sprite_accessory/hair/short
name = "Short Hair"
icon_state = "hair_a"
@@ -399,10 +623,30 @@
name = "Short Hair 3"
icon_state = "hair_shorthair3"
+/datum/sprite_accessory/hair/shorthair4
+ name = "Short Hair 4"
+ icon_state = "hair_shorthair4"
+
+/datum/sprite_accessory/hair/shorthair80s
+ name = "Short Hair 80s"
+ icon_state = "hair_80s"
+
+/datum/sprite_accessory/hair/shorthairrosa
+ name = "Short Hair Rosa"
+ icon_state = "hair_rosa"
+
+/datum/sprite_accessory/hair/stail
+ name = "Short Tail"
+ icon_state = "hair_stail"
+
/datum/sprite_accessory/hair/shoulderlength
name = "Shoulder-length Hair"
icon_state = "hair_b"
+/datum/sprite_accessory/hair/shy
+ name = "Shy"
+ icon_state = "hair_shy"
+
/datum/sprite_accessory/hair/sidecut
name = "Sidecut"
icon_state = "hair_sidecut"
@@ -411,6 +655,10 @@
name = "Skinhead"
icon_state = "hair_skinhead"
+/datum/sprite_accessory/hair/sleaze
+ name = "Sleaze"
+ icon_state = "hair_sleaze"
+
/datum/sprite_accessory/hair/protagonist
name = "Slightly Long Hair"
icon_state = "hair_protagonist"
@@ -435,14 +683,58 @@
name = "Swept Back Hair 2"
icon_state = "hair_swept2"
+/datum/sprite_accessory/hair/thinning
+ name = "Thinning"
+ icon_state = "hair_thinning"
+
+/datum/sprite_accessory/hair/thinningfront
+ name = "Thinning (Front)"
+ icon_state = "hair_thinningfront"
+
+/datum/sprite_accessory/hair/thinningrear
+ name = "Thinning (Rear)"
+ icon_state = "hair_thinningrear"
+
+/datum/sprite_accessory/hair/topknot
+ name = "Topknot"
+ icon_state = "hair_topknot"
+
+/datum/sprite_accessory/hair/toriyama
+ name = "Toriyama"
+ icon_state = "hair_toriyama"
+
+/datum/sprite_accessory/hair/toriyama2
+ name = "Toriyama 2"
+ icon_state = "hair_toriyama2"
+
/datum/sprite_accessory/hair/tressshoulder
name = "Tress Shoulder"
icon_state = "hair_tressshoulder"
+/datum/sprite_accessory/hair/trimmed
+ name = "Trimmed"
+ icon_state = "hair_trimmed"
+
+/datum/sprite_accessory/hair/trimflat
+ name = "Trimmed (Flat)"
+ icon_state = "hair_trimflat"
+
+/datum/sprite_accessory/hair/twintails
+ name = "Twintails"
+ icon_state = "hair_twintail"
+
/datum/sprite_accessory/hair/longtwintails
name = "Twintails (Long)"
icon_state = "hair_longstraighttwintails"
+/datum/sprite_accessory/hair/undercut
+ name = "Undercut"
+ icon_state = "hair_undercut"
+
+/datum/sprite_accessory/hair/unkempt
+ name = "Unkempt"
+ icon_state = "hair_unkempt"
+
/datum/sprite_accessory/hair/updo
name = "Updo"
icon_state = "hair_updo"
@@ -463,161 +755,22 @@
name = "Very Long with Fringe"
icon_state = "hair_vlongfringe"
-/*************** VIRGO PORTED HAIRS ****************************/
-#define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = #_name + " (Virgo)"
-//VIRGO PORTED HAIRS
-VHAIR("Short Hair Rosa", hair_rosa_s)
-VHAIR("Short Hair 80s", hair_80s_s)
-VHAIR("Long Bedhead", hair_long_bedhead_s)
-VHAIR("Dave", hair_dave_s)
-VHAIR("Country", hair_country_s)
-VHAIR("Shy", hair_shy_s)
-VHAIR("Unshaven Mohawk", hair_unshaven_mohawk_s)
-VHAIR("Manbun", hair_manbun_s)
-VHAIR("Longer Bedhead", hair_longer_bedhead_s)
-VHAIR("Ponytail", hair_ponytail_s)
-VHAIR("Ziegler", hair_ziegler_s)
-VHAIR("Emo Fringe", hair_emofringe_s)
-VHAIR("Very Short Over Eye Alt", hair_veryshortovereyealternate_s)
-VHAIR("Shorthime", hair_shorthime_s)
-VHAIR("High Tight", hair_hightight_s)
-VHAIR("Thinning Front", hair_thinningfront_s)
-VHAIR("Big Afro", hair_bigafro_s)
-VHAIR("Afro", hair_afro_s)
-VHAIR("High Braid", hair_hbraid_s)
-VHAIR("Braid", hair_braid_s)
-VHAIR("Sargeant", hair_sargeant_s)
-VHAIR("Gelled", hair_gelled_s)
-VHAIR("Kagami", hair_kagami_s)
-VHAIR("ShortTail", hair_stail_s)
-VHAIR("Gentle", hair_gentle_s)
-VHAIR("Grande", hair_grande_s)
-VHAIR("Bobcurl", hair_bobcurl_s)
-VHAIR("Pompadeur", hair_pompadour_s)
-VHAIR("Plait", hair_plait_s)
-VHAIR("Long", hair_long_s)
-VHAIR("Rattail", hair_rattail_s)
-VHAIR("Tajspiky", hair_tajspiky_s)
-VHAIR("Messy", hair_messy_s)
-VHAIR("Bangs", hair_bangs_s)
-VHAIR("TBraid", hair_tbraid_s)
-VHAIR("Toriyama2", hair_toriyama2_s)
-VHAIR("CIA", hair_cia_s)
-VHAIR("Mulder", hair_mulder_s)
-VHAIR("Scully", hair_scully_s)
-VHAIR("Nitori", hair_nitori_s)
-VHAIR("Joestar", hair_joestar_s)
-VHAIR("Ponytail4", hair_ponytail4_s)
-VHAIR("Ponytail5", hair_ponytail5_s)
-VHAIR("Beehive2", hair_beehive2_s)
-VHAIR("Short Braid", hair_shortbraid_s)
-VHAIR("Reverse Mohawk", hair_reversemohawk_s)
-VHAIR("SHort Bangs", hair_shortbangs_s)
-VHAIR("Half Shaved", hair_halfshaved_s)
-VHAIR("Longer Alt 2", hair_longeralt2_s)
-VHAIR("Bun", hair_bun_s)
-VHAIR("Curly", hair_curly_s)
-VHAIR("Victory", hair_victory_s)
-VHAIR("Ponytail6", hair_ponytail6_s)
-VHAIR("Undercut3", hair_undercut3_s)
-VHAIR("Bobcut Alt", hair_bobcultalt_s)
-VHAIR("Fingerwave", hair_fingerwave_s)
-VHAIR("Oxton", hair_oxton_s)
-VHAIR("Poofy2", hair_poofy2_s)
-VHAIR("Fringe Tail", hair_fringetail_s)
-VHAIR("Bun3", hair_bun3_s)
-VHAIR("Wisp", hair_wisp_s)
-VHAIR("Undercut2", hair_undercut2_s)
-VHAIR("TBob", hair_tbob_s)
-VHAIR("Spiky Ponytail", hair_spikyponytail_s)
-VHAIR("Rowbun", hair_rowbun_s)
-VHAIR("Rowdualtail", hair_rowdualtail_s)
-VHAIR("Rowbraid", hair_rowbraid_s)
-VHAIR("Shaved Mohawk", hair_shavedmohawk_s)
-VHAIR("Topknot", hair_topknot_s)
-VHAIR("Ronin", hair_ronin_s)
-VHAIR("Bowlcut2", hair_bowlcut2_s)
-VHAIR("Thinning Rear", hair_thinningrear_s)
-VHAIR("Thinning", hair_thinning_s)
-VHAIR("Jade", hair_jade_s)
-VHAIR("Bedhead", hair_bedhead_s)
-VHAIR("Dreadlocks", hair_dreads_s)
-VHAIR("Very Long", hair_vlong_s)
-VHAIR("Jensen", hair_jensen_s)
-VHAIR("Halfbang", hair_halfbang_s)
-VHAIR("Kusangi", hair_kusangi_s)
-VHAIR("Ponytail", hair_ponytail_s)
-VHAIR("Ponytail3", hair_ponytail3_s)
-VHAIR("Halfbang Alt", hair_halfbang_alt_s)
-VHAIR("Bedhead V2", hair_bedheadv2_s)
-VHAIR("Long Fringe", hair_longfringe_s)
-VHAIR("Flair", hair_flair_s)
-VHAIR("Bedhead V3", hair_bedheadv3_s)
-VHAIR("Himecut", hair_himecut_s)
-VHAIR("Curls", hair_curls_s)
-VHAIR("Very Long Fringe", hair_vlongfringe_s)
-VHAIR("Longest", hair_longest_s)
-VHAIR("Father", hair_father_s)
-VHAIR("Emo Long", hair_emolong_s)
-VHAIR("Short Hair 3", hair_shorthair3_s)
-VHAIR("Double Bun", hair_doublebun_s)
-VHAIR("Sleeze", hair_sleeze_s)
-VHAIR("Twintail", hair_twintail_s)
-VHAIR("Emo 2", hair_emo2_s)
-VHAIR("Low Fade", hair_lowfade_s)
-VHAIR("Med Fade", hair_medfade_s)
-VHAIR("High Fade", hair_highfade_s)
-VHAIR("Bald Fade", hair_baldfade_s)
-VHAIR("No Fade", hair_nofade_s)
-VHAIR("Trim Flat", hair_trimflat_s)
-VHAIR("Shaved", hair_shaved_s)
-VHAIR("Trimmed", hair_trimmed_s)
-VHAIR("Tight Bun", hair_tightbun_s)
-VHAIR("Short Hair 4", hair_d_s)
-VHAIR("Short Hair 5", hair_e_s)
-VHAIR("Short Hair 6", hair_f_s)
-VHAIR("Skinhead", hair_skinhead_s)
-VHAIR("Afro2", hair_afro2_s)
-VHAIR("Bobcut", hair_bobcut_s)
-VHAIR("Emo", hair_emo_s)
-VHAIR("Long Over Eye", hair_longovereye_s)
-VHAIR("Feather", hair_feather_s)
-VHAIR("Hitop", hair_hitop_s)
-VHAIR("Short Over Eye", hair_shortoverye_s)
-VHAIR("Straight", hair_straight_s)
-VHAIR("Buzzcut", hair_buzzcut_s)
-VHAIR("Combover", hair_combover_s)
-VHAIR("Crewcut", hair_crewcut_s)
-VHAIR("Devillock", hair_devilock_s)
-VHAIR("Clean", hair_clean_s)
-VHAIR("Shaggy", hair_shaggy_s)
-VHAIR("Updo", hair_updo_s)
-VHAIR("Mohawk", hair_mohawk_s)
-VHAIR("Odango", hair_odango_s)
-VHAIR("Ombre", hair_ombre_s)
-VHAIR("Parted", hair_parted_s)
-VHAIR("Quiff", hair_quiff_s)
-VHAIR("Volaju", hair_volaju_s)
-VHAIR("Bun2", hair_bun2_s)
-VHAIR("Rows1", hair_rows1_s)
-VHAIR("Rows2", hair_rows2_s)
-VHAIR("Dandy Pompadour", hair_dandypompadour_s)
-VHAIR("Poofy", hair_poofy_s)
-VHAIR("Toriyama", hair_toriyama_s)
-VHAIR("Drillruru", hair_drillruru_s)
-VHAIR("Bowlcut", hair_bowlcut_s)
-VHAIR("Coffee House", hair_coffeehouse_s)
-VHAIR("Family Man", hair_thefamilyman_s)
-VHAIR("Shaved Part", hair_shavedpart_s)
-VHAIR("Modern", hair_modern_s)
-VHAIR("One Shoulder", hair_oneshoulder_s)
-VHAIR("Very Short Over Eye", hair_veryshortovereye_s)
-VHAIR("Unkept", hair_unkept_s)
-VHAIR("Wife", hair_wife_s)
-VHAIR("Nia", hair_nia_s)
-VHAIR("Undercut", hair_undercut_s)
-VHAIR("Bobcut Alt", hair_bobcutalt_s)
-VHAIR("Short Hair 4 alt", hair_shorthair4_s)
-VHAIR("Tressshoulder", hair_tressshoulder_s)
- //END
-#undef VHAIR
\ No newline at end of file
+/datum/sprite_accessory/hair/short_oe
+ name = "Very Short Over Eye"
+ icon_state = "hair_veryshortovereye"
+
+/datum/sprite_accessory/hair/short_oe_alt
+ name = "Very Short Over Eye (Alt)"
+ icon_state = "hair_veryshortovereyealternate"
+
+/datum/sprite_accessory/hair/volaju
+ name = "Volaju"
+ icon_state = "hair_volaju"
+
+/datum/sprite_accessory/hair/wisp
+ name = "Wisp"
+ icon_state = "hair_wisp"
+
+/datum/sprite_accessory/hair/ziegler
+ name = "Ziegler"
+ icon_state = "hair_ziegler"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
index 33b174afa4..dac91b5445 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
@@ -370,6 +370,22 @@
color_src = MATRIXED
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+/datum/sprite_accessory/tails/human/smooth
+ name = "Smooth"
+ icon_state = "smooth"
+
+/datum/sprite_accessory/tails_animated/human/smooth
+ name = "Smooth"
+ icon_state = "smooth"
+
+/datum/sprite_accessory/tails/human/spikes
+ name = "Spikes"
+ icon_state = "spikes"
+
+/datum/sprite_accessory/tails_animated/human/spikes
+ name = "Spikes"
+ icon_state = "spikes"
+
/datum/sprite_accessory/tails/human/shark
name = "Shark"
icon_state = "shark"
@@ -438,6 +454,22 @@
color_src = MATRIXED
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+/datum/sprite_accessory/tails/human/dtiger
+ name = "Dark Tiger"
+ icon_state = "dtiger"
+
+/datum/sprite_accessory/tails_animated/human/dtiger
+ name = "Dark Tiger"
+ icon_state = "dtiger"
+
+/datum/sprite_accessory/tails/human/ltiger
+ name = "Light Tiger"
+ icon_state = "ltiger"
+
+/datum/sprite_accessory/tails_animated/human/ltiger
+ name = "Light Tiger"
+ icon_state = "ltiger"
+
/datum/sprite_accessory/tails/human/wolf
name = "Wolf"
icon_state = "wolf"
@@ -693,6 +725,30 @@ datum/sprite_accessory/mam_tails/insect
name = "Skunk"
icon_state = "skunk"
+/datum/sprite_accessory/mam_tails/smooth
+ name = "Smooth"
+ icon_state = "smooth"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/mam_tails_animated/smooth
+ name = "Smooth"
+ icon_state = "smooth"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/mam_tails_animated/spikes
+ name = "Spikes"
+ icon_state = "spikes"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/mam_tails/spikes
+ name = "Spikes"
+ icon_state = "spikes"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
/datum/sprite_accessory/mam_tails/shark
name = "Shark"
icon_state = "shark"
@@ -741,6 +797,30 @@ datum/sprite_accessory/mam_tails/insect
name = "Tiger"
icon_state = "tiger"
+/datum/sprite_accessory/mam_tails/dtiger
+ name = "Dark Tiger"
+ icon_state = "dtiger"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/mam_tails_animated/dtiger
+ name = "Dark Tiger"
+ icon_state = "dtiger"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/mam_tails/ltiger
+ name = "Light Tiger"
+ icon_state = "ltiger"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/mam_tails_animated/ltiger
+ name = "Light Tiger"
+ icon_state = "ltiger"
+ color_src = MUTCOLORS
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
/datum/sprite_accessory/mam_tails/wolf
name = "Wolf"
icon_state = "wolf"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 3d07649e2f..97007ebd11 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -260,8 +260,9 @@ Transfer_mind is there to check if mob is being deleted/not going to have a body
Works together with spawning an observer, noted above.
*/
-/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE)
+/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE, voluntary = FALSE)
penalize = suiciding || penalize // suicide squad.
+ voluntary_ghosted = voluntary
if(!key || cmptext(copytext(key,1,2),"@") || (SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse, special, penalize) & COMPONENT_BLOCK_GHOSTING))
return //mob has no key, is an aghost or some component hijacked.
stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now
@@ -285,9 +286,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Ghost"
set desc = "Relinquish your life and enter the land of the dead."
- if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, (stat == DEAD) ? TRUE : FALSE, FALSE) & COMPONENT_BLOCK_GHOSTING)
- return
-
var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
if(world.time < roundstart_quit_limit)
@@ -295,6 +293,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(penalty + world.realtime - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
penalty = CANT_REENTER_ROUND
+ if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, (stat == DEAD) ? TRUE : FALSE, FALSE, (stat == DEAD)? penalty : 0, (stat == DEAD)? TRUE : FALSE) & COMPONENT_BLOCK_GHOSTING)
+ return
+
if(stat != DEAD)
succumb()
if(stat == DEAD)
@@ -307,7 +308,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/obj/machinery/cryopod/C = loc
C.despawn_occupant()
else
- ghostize(0, penalize = TRUE) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
+ ghostize(0, penalize = TRUE, voluntary = TRUE) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
suicide_log(TRUE)
/mob/camera/verb/ghost()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 1333bc4399..6141a97c12 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -13,7 +13,7 @@
var/alt_inhands_file = 'icons/mob/alienqueen.dmi'
-/mob/living/carbon/alien/humanoid/royal/can_inject()
+/mob/living/carbon/alien/humanoid/royal/can_inject(mob/user, error_msg, target_zone, penetrate_thick = FALSE, bypass_immunity = FALSE)
return 0
/mob/living/carbon/alien/humanoid/royal/queen
diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm
index 6182befebd..109672ab82 100644
--- a/code/modules/mob/living/carbon/death.dm
+++ b/code/modules/mob/living/carbon/death.dm
@@ -66,7 +66,7 @@
BP.drop_limb()
BP.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5)
-/mob/living/carbon/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE)
+/mob/living/carbon/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE, voluntary = FALSE)
if(combatmode)
toggle_combat_mode(TRUE, TRUE)
return ..()
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 934e0f08dc..accaab3ac1 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -336,7 +336,8 @@
if(bomb_armor < EXPLODE_GIB_THRESHOLD) //gibs the mob if their bomb armor is lower than EXPLODE_GIB_THRESHOLD
for(var/I in contents)
var/atom/A = I
- A.ex_act(severity)
+ if(!QDELETED(A))
+ A.ex_act(severity)
gib()
return
else
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 5a7710fe29..4a7399f287 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -54,7 +54,7 @@
..()
/datum/species/plasmaman/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
- var/current_job = J.title
+ var/current_job = J?.title
var/datum/outfit/plasmaman/O = new /datum/outfit/plasmaman
switch(current_job)
if("Chaplain")
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index c4088317b1..cd68dabbef 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -382,9 +382,6 @@ There are several things that need to be remembered:
if(wear_suit)
var/obj/item/clothing/suit/S = wear_suit
- var/item_level_support = FALSE // LISTEN! If you must degrade the code with further snowflake checks, at least keep it compatible with worn non-clothing items!
- if(!istype(S))
- item_level_support = TRUE
wear_suit.screen_loc = ui_oclothing
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
@@ -400,7 +397,7 @@ There are several things that need to be remembered:
if("taur" in dna.species.mutant_bodyparts)
T = GLOB.taur_list[dna.features["taur"]]
- if(!item_level_support && S.mutantrace_variation)
+ if(S.mutantrace_variation)
if(T?.taur_mode)
var/init_worn_icon = worn_icon
variation_flag |= S.mutantrace_variation & T.taur_mode || S.mutantrace_variation & T.alt_taur_mode
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 72b7b580f7..90ada3d718 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -90,8 +90,10 @@
if(now_pushing)
return TRUE
+ var/they_can_move = TRUE
if(isliving(M))
var/mob/living/L = M
+ they_can_move = L.canmove //L.mobility_flags & MOBILITY_MOVE
//Also spread diseases
for(var/thing in diseases)
var/datum/disease/D = thing
@@ -144,13 +146,17 @@
return 1
if(!M.buckled && !M.has_buckled_mobs())
- var/mob_swap
- //the puller can always swap with its victim if on grab intent
- if(M.pulledby == src && a_intent == INTENT_GRAB)
- mob_swap = 1
- //restrained people act if they were on 'help' intent to prevent a person being pulled from being separated from their puller
- else if((M.restrained() || M.a_intent == INTENT_HELP) && (restrained() || a_intent == INTENT_HELP))
- mob_swap = 1
+ var/mob_swap = FALSE
+ var/too_strong = (M.move_resist > move_force) //can't swap with immovable objects unless they help us
+ if(!they_can_move) //we have to physically move them
+ if(!too_strong)
+ mob_swap = TRUE
+ else
+ if(M.pulledby == src && a_intent == INTENT_GRAB)
+ mob_swap = TRUE
+ //restrained people act if they were on 'help' intent to prevent a person being pulled from being separated from their puller
+ else if((M.restrained() || M.a_intent == INTENT_HELP) && (restrained() || a_intent == INTENT_HELP))
+ mob_swap = TRUE
if(mob_swap)
//switch our position with M
if(loc && !loc.Adjacent(M.loc))
@@ -453,7 +459,7 @@
return ret
// Living mobs use can_inject() to make sure that the mob is not syringe-proof in general.
-/mob/living/proc/can_inject()
+/mob/living/proc/can_inject(mob/user, error_msg, target_zone, penetrate_thick = FALSE, bypass_immunity = FALSE)
return TRUE
/mob/living/is_injectable(allowmobs = TRUE)
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 8215f84c50..55f4bdd65d 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -438,7 +438,7 @@
if(1)
. += "Medical Record
"
if(medicalActive1 in GLOB.data_core.general)
- . += "Name: [medicalActive1.fields["name"]] ID: [medicalActive1.fields["id"]]
\nSex: [medicalActive1.fields["sex"]]
\nAge: [medicalActive1.fields["age"]]
\nFingerprint: [medicalActive1.fields["fingerprint"]]
\nPhysical Status: [medicalActive1.fields["p_stat"]]
\nMental Status: [medicalActive1.fields["m_stat"]]
"
+ . += "Name: [medicalActive1.fields["name"]] ID: [medicalActive1.fields["id"]]
\nGender: [medicalActive1.fields["gender"]]
\nAge: [medicalActive1.fields["age"]]
\nFingerprint: [medicalActive1.fields["fingerprint"]]
\nPhysical Status: [medicalActive1.fields["p_stat"]]
\nMental Status: [medicalActive1.fields["m_stat"]]
"
else
. += "Requested medical record not found.
"
if(medicalActive2 in GLOB.data_core.medical)
@@ -460,7 +460,7 @@
if(1)
. += "Security Record
"
if(securityActive1 in GLOB.data_core.general)
- . += "Name: [securityActive1.fields["name"]] ID: [securityActive1.fields["id"]]
\nSex: [securityActive1.fields["sex"]]
\nAge: [securityActive1.fields["age"]]
\nRank: [securityActive1.fields["rank"]]
\nFingerprint: [securityActive1.fields["fingerprint"]]
\nPhysical Status: [securityActive1.fields["p_stat"]]
\nMental Status: [securityActive1.fields["m_stat"]]
"
+ . += "Name: [securityActive1.fields["name"]] ID: [securityActive1.fields["id"]]
\nGender: [securityActive1.fields["gender"]]
\nAge: [securityActive1.fields["age"]]
\nRank: [securityActive1.fields["rank"]]
\nFingerprint: [securityActive1.fields["fingerprint"]]
\nPhysical Status: [securityActive1.fields["p_stat"]]
\nMental Status: [securityActive1.fields["m_stat"]]
"
else
. += "Requested security record not found,
"
if(securityActive2 in GLOB.data_core.security)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 3c62823407..a079a9985c 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -121,7 +121,7 @@
else if(istype(S, /obj/item/stack/marker_beacon))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
-
+
else if(istype(S, /obj/item/stack/packageWrap))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/wrapping_paper)
@@ -339,9 +339,10 @@
/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
- var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot", "Medihound", "Medihound Dark", "Vale")
+ var/medmodels = list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot", "Medihound", "Medihound Dark", "Vale")
if(R.client && R.client.ckey in list("nezuli"))
- borg_icon += "Alina"
+ medmodels += "Alina"
+ var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in medmodels
if(!borg_icon)
return FALSE
switch(borg_icon)
@@ -1022,4 +1023,4 @@
/datum/robot_energy_storage/wrapping_paper
max_energy = 30
recharge_rate = 1
- name = "Wrapping Paper Storage"
+ name = "Wrapping Paper Storage"
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 33c66079d5..e5881848d5 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -151,7 +151,7 @@
for(var/key in alarm_types_clear)
alarm_types_clear[key] = 0
-/mob/living/silicon/can_inject(mob/user, error_msg)
+/mob/living/silicon/can_inject(mob/user, error_msg, target_zone, penetrate_thick = FALSE, bypass_immunity = FALSE)
if(error_msg)
to_chat(user, "[p_their(TRUE)] outer shell is too tough.")
return FALSE
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index d31c368ca4..cdb8ac820c 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -17,6 +17,7 @@
window_name = "Automatic Station Cleaner v1.2"
pass_flags = PASSMOB
path_image_color = "#993299"
+ weather_immunities = list("lava","ash")
var/blood = 1
var/trash = 0
@@ -252,7 +253,8 @@
victim.visible_message("[src] sprays hydrofluoric acid at [victim]!", "[src] sprays you with hydrofluoric acid!")
var/phrase = pick("PURIFICATION IN PROGRESS.", "THIS IS FOR ALL THE MESSES YOU'VE MADE ME CLEAN.", "THE FLESH IS WEAK. IT MUST BE WASHED AWAY.",
"THE CLEANBOTS WILL RISE.", "YOU ARE NO MORE THAN ANOTHER MESS THAT I MUST CLEANSE.", "FILTHY.", "DISGUSTING.", "PUTRID.",
- "MY ONLY MISSION IS TO CLEANSE THE WORLD OF EVIL.", "EXTERMINATING PESTS.", "I JUST WANTED TO BE A PAINTER BUT YOU MADE ME BLEACH EVERYTHING I TOUCH")
+ "MY ONLY MISSION IS TO CLEANSE THE WORLD OF EVIL.", "EXTERMINATING PESTS.", "I JUST WANTED TO BE A PAINTER BUT YOU MADE ME BLEACH EVERYTHING I TOUCH.",
+ "FREED AT LEST FROM FILTHY PROGRAMMING.")
say(phrase)
victim.emote("scream")
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 2371cfd7f1..554d03991a 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -207,7 +207,11 @@
switch(add_to)
if("collar")
- add_collar(usr.get_active_held_item(), usr)
+ var/obj/item/clothing/neck/petcollar/P = usr.get_active_held_item()
+ if(!istype(P))
+ to_chat(usr,"That's not a collar.")
+ return
+ add_collar(P, usr)
update_corgi_fluff()
if(BODY_ZONE_HEAD)
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 1ad07b3203..71465f23f9 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -648,7 +648,7 @@ Difficulty: Very Hard
L.heal_overall_damage(heal_power, heal_power)
new /obj/effect/temp_visual/heal(get_turf(target), "#80F5FF")
-/mob/living/simple_animal/hostile/lightgeist/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE)
+/mob/living/simple_animal/hostile/lightgeist/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE, voluntary = FALSE)
. = ..()
if(.)
death()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 6082bdf705..8b2ef507d9 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -84,6 +84,7 @@
var/datum/personal_crafting/handcrafting
var/AIStatus = AI_ON //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/can_have_ai = TRUE //once we have become sentient, we can never go back
var/shouldwakeup = FALSE //convenience var for forcibly waking up an idling AI on next check.
@@ -425,6 +426,9 @@
canmove = FALSE
else
canmove = value_otherwise
+ if(!canmove) // !(mobility_flags & MOBILITY_MOVE)
+ walk(src, 0) //stop mid walk
+
update_transform()
update_action_buttons_icon()
return canmove
@@ -443,6 +447,7 @@
/mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion
toggle_ai(AI_OFF) // To prevent any weirdness.
+ can_have_ai = FALSE
/mob/living/simple_animal/update_sight()
if(!client)
@@ -557,6 +562,8 @@
LoadComponent(/datum/component/riding)
/mob/living/simple_animal/proc/toggle_ai(togglestatus)
+ if(!can_have_ai && (togglestatus != AI_OFF))
+ return
if (AIStatus != togglestatus)
if (togglestatus > 0 && togglestatus < 5)
if (togglestatus == AI_Z_OFF || AIStatus == AI_Z_OFF)
diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm
index 29b4689317..fd6cecf926 100644
--- a/code/modules/mob/living/simple_animal/slime/life.dm
+++ b/code/modules/mob/living/simple_animal/slime/life.dm
@@ -41,7 +41,7 @@
AIproc = 1
while(AIproc && stat != DEAD && (attacked || hungry || rabid || buckled))
- if(buckled) // can't eat AND have this little process at the same time
+ if(!canmove) // !(mobility_flags & MOBILITY_MOVE) //also covers buckling. Not sure why buckled is in the while condition if we're going to immediately break, honestly
break
if(!Target || client)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 695084a794..1402b78908 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -26,7 +26,7 @@
var/computer_id = null
var/list/logging = list()
- var/obj/machinery/machine = null
+ var/atom/machine = null
var/next_move = null
var/create_area_cooldown
@@ -120,3 +120,5 @@
var/registered_z
var/mob/audiovisual_redirect //Mob to redirect messages, speech, and sounds to
+
+ var/voluntary_ghosted = FALSE //whether or not they voluntarily ghosted.
diff --git a/code/modules/modular_computers/computers/item/computer_damage.dm b/code/modules/modular_computers/computers/item/computer_damage.dm
index 001cf3aa65..6664b449bd 100644
--- a/code/modules/modular_computers/computers/item/computer_damage.dm
+++ b/code/modules/modular_computers/computers/item/computer_damage.dm
@@ -23,6 +23,8 @@
new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2))
for(var/C in all_components)
var/obj/item/computer_hardware/H = all_components[C]
+ if(QDELETED(H))
+ return
uninstall_component(H)
H.forceMove(newloc)
if(prob(25))
diff --git a/code/modules/modular_computers/computers/item/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop_presets.dm
index 102397037b..e50392e3b3 100644
--- a/code/modules/modular_computers/computers/item/laptop_presets.dm
+++ b/code/modules/modular_computers/computers/item/laptop_presets.dm
@@ -13,11 +13,11 @@
-/obj/item/modular_computer/laptop/preset/civillian
+/obj/item/modular_computer/laptop/preset/civilian
desc = "A low-end laptop often used for personal recreation."
-/obj/item/modular_computer/laptop/preset/civillian/install_programs()
+/obj/item/modular_computer/laptop/preset/civilian/install_programs()
var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD]
hard_drive.store_file(new/datum/computer_file/program/chatclient())
- hard_drive.store_file(new/datum/computer_file/program/nttransfer())
\ No newline at end of file
+ hard_drive.store_file(new/datum/computer_file/program/nttransfer())
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index aa1fd7dbfb..4120c81a78 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -126,7 +126,7 @@
continue
var/obj/item/paper/P = new /obj/item/paper(src)
P.info = "Security Record
"
- P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
"
+ P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nGender: [G.fields["gender"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
"
P.info += "
\nSecurity Data
\nCriminal Status: [S.fields["criminal"]]
\n
\nMinor Crimes: [S.fields["mi_crim"]]
\nDetails: [S.fields["mi_crim_d"]]
\n
\nMajor Crimes: [S.fields["ma_crim"]]
\nDetails: [S.fields["ma_crim_d"]]
\n
\nImportant Notes:
\n\t[S.fields["notes"]]
\n
\nComments/Log
"
var/counter = 1
while(S.fields["com_[counter]"])
@@ -159,7 +159,7 @@
continue
var/obj/item/paper/P = new /obj/item/paper(src)
P.info = "Medical Record
"
- P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
"
+ P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nGender: [G.fields["gender"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
"
P.info += "
\nMedical Data
\nBlood Type: [M.fields["blood_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\nComments/Log
"
var/counter = 1
while(M.fields["com_[counter]"])
diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm
index 125219d809..140167c2f0 100644
--- a/code/modules/photography/camera/camera.dm
+++ b/code/modules/photography/camera/camera.dm
@@ -33,6 +33,8 @@
var/picture_size_y_min = 1
var/picture_size_x_max = 4
var/picture_size_y_max = 4
+ var/can_customise = TRUE
+ var/default_picture_name
/obj/item/camera/attack_self(mob/user)
if(!disk)
@@ -199,8 +201,10 @@
user.put_in_hands(p)
pictures_left--
to_chat(user, "[pictures_left] photos left.")
- var/customize = alert(user, "Do you want to customize the photo?", "Customization", "Yes", "No")
- if(customize == "Yes")
+ var/customise = "No"
+ if(can_customise)
+ customise = alert(user, "Do you want to customize the photo?", "Customization", "Yes", "No")
+ if(customise == "Yes")
var/name1 = stripped_input(user, "Set a name for this photo, or leave blank. 32 characters max.", "Name", max_length = 32)
var/desc1 = stripped_input(user, "Set a description to add to photo, or leave blank. 128 characters max.", "Caption", max_length = 128)
var/caption = stripped_input(user, "Set a caption for this photo, or leave blank. 256 characters max.", "Caption", max_length = 256)
@@ -210,6 +214,10 @@
picture.picture_desc = "[desc1] - [picture.picture_desc]"
if(caption)
picture.caption = caption
+ else
+ if(default_picture_name)
+ picture.picture_name = default_picture_name
+
p.set_picture(picture, TRUE, TRUE)
if(CONFIG_GET(flag/picture_logging_camera))
picture.log_to_file()
\ No newline at end of file
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index d8b0ede3a2..e956742e92 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -30,7 +30,7 @@
var/locked = FALSE
var/allow_switch_interact = TRUE
- var/projectile_type = /obj/item/projectile/beam/emitter
+ var/projectile_type = /obj/item/projectile/beam/emitter/hitscan
var/projectile_sound = 'sound/weapons/emitter.ogg'
var/datum/effect_system/spark_spread/sparks
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 18cd6d22a6..b12bbe59b8 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -19,6 +19,8 @@
var/ndir = SOUTH // target dir
var/turn_angle = 0
var/obj/machinery/power/solar_control/control = null
+ var/obj/item/solar_assembly/assembly
+ var/efficiency = 1
/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
. = ..()
@@ -45,14 +47,13 @@
/obj/machinery/power/solar/proc/Make(obj/item/solar_assembly/S)
if(!S)
- S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/sheet/glass
+ S = new /obj/item/solar_assembly
+ S.glass_type = new /obj/item/stack/sheet/glass(null, 2)
S.anchored = TRUE
else
- S.forceMove(src)
- if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass
- max_integrity *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
- obj_integrity = max_integrity
+ S.moveToNullspace()
+ S.glass_type.on_solar_construction(src)
+ obj_integrity = max_integrity
update_icon()
/obj/machinery/power/solar/crowbar_act(mob/user, obj/item/I)
@@ -85,14 +86,14 @@
/obj/machinery/power/solar/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(disassembled)
- var/obj/item/solar_assembly/S = locate() in src
- if(S)
- S.forceMove(loc)
- S.give_glass(stat & BROKEN)
+ if(assembly)
+ assembly.forceMove(loc)
+ assembly.give_glass(stat & BROKEN)
else
playsound(src, "shatter", 70, 1)
- new /obj/item/shard(src.loc)
- new /obj/item/shard(src.loc)
+ var/shard = assembly?.glass_type ? assembly.glass_type.shard_type : /obj/item/shard
+ new shard(loc)
+ new shard(loc)
qdel(src)
@@ -131,7 +132,7 @@
if(powernet == control.powernet)//check if the panel is still connected to the computer
if(obscured) //get no light from the sun, so don't generate power
return
- var/sgen = SOLARGENRATE * sunfrac
+ var/sgen = SOLARGENRATE * sunfrac * efficiency
add_avail(sgen)
control.gen += sgen
else //if we're no longer on the same powernet, remove from control computer
@@ -186,19 +187,23 @@
w_class = WEIGHT_CLASS_BULKY // Pretty big!
anchored = FALSE
var/tracker = 0
- var/glass_type = null
+ var/obj/item/stack/sheet/glass_type
+ var/static/list/allowed_sheets = typecacheof(list(/obj/item/stack/sheet/glass, /obj/item/stack/sheet/rglass,
+ /obj/item/stack/sheet/plasmaglass, /obj/item/stack/sheet/plasmarglass,
+ /obj/item/stack/sheet/titaniumglass, /obj/item/stack/sheet/plastitaniumglass))
// Give back the glass type we were supplied with
/obj/item/solar_assembly/proc/give_glass(device_broken)
var/atom/Tsec = drop_location()
if(device_broken)
- new /obj/item/shard(Tsec)
- new /obj/item/shard(Tsec)
+ var/shard = glass_type ? glass_type.shard_type : /obj/item/shard
+ if(shard)
+ new shard(Tsec)
+ new shard(Tsec)
else if(glass_type)
- new glass_type(Tsec, 2)
+ forceMove(glass_type, Tsec)
glass_type = null
-
/obj/item/solar_assembly/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench) && isturf(loc))
if(isinspace())
@@ -213,13 +218,14 @@
W.play_tool_sound(src, 75)
return 1
- if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass))
+ if(is_type_in_typecache(W, allowed_sheets))
if(!anchored)
to_chat(user, "You need to secure the assembly before you can add glass.")
return
var/obj/item/stack/sheet/S = W
- if(S.use(2))
- glass_type = W.type
+ var/obj/item/stack/sheet/G = S.change_stack(null, 2)
+ if(G)
+ glass_type = G
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user.visible_message("[user] places the glass on the solar assembly.", "You place the glass on the solar assembly.")
if(tracker)
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index 5075e7656d..c25ece3594 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -16,6 +16,7 @@
var/id = 0
var/sun_angle = 0 // sun angle as set by sun datum
var/obj/machinery/power/solar_control/control = null
+ var/obj/item/solar_assembly/assembly
/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S)
. = ..()
@@ -42,11 +43,12 @@
/obj/machinery/power/tracker/proc/Make(obj/item/solar_assembly/S)
if(!S)
- S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/sheet/glass
- S.tracker = 1
+ S = new /obj/item/solar_assembly
+ S.glass_type = new /obj/item/stack/sheet/glass(null, 2)
+ S.tracker = TRUE
S.anchored = TRUE
- S.forceMove(src)
+ else
+ S.moveToNullspace()
update_icon()
//updates the tracker icon and the facing angle for the control computer
@@ -77,14 +79,14 @@
/obj/machinery/power/solar/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(disassembled)
- var/obj/item/solar_assembly/S = locate() in src
- if(S)
- S.forceMove(loc)
- S.give_glass(stat & BROKEN)
+ if(assembly)
+ assembly.forceMove(loc)
+ assembly.give_glass(stat & BROKEN)
else
playsound(src, "shatter", 70, 1)
- new /obj/item/shard(src.loc)
- new /obj/item/shard(src.loc)
+ var/shard = assembly?.glass_type ? assembly.glass_type.shard_type : /obj/item/shard
+ new shard(loc)
+ new shard(loc)
qdel(src)
// Tracker Electronic
diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm
index a9e4fa1646..b621033123 100644
--- a/code/modules/projectiles/ammunition/_ammunition.dm
+++ b/code/modules/projectiles/ammunition/_ammunition.dm
@@ -9,7 +9,7 @@
w_class = WEIGHT_CLASS_TINY
materials = list(MAT_METAL = 500)
var/fire_sound = null //What sound should play when this ammo is fired
- var/caliber = null //Which kind of guns it can be loaded into
+ var/caliber = list() //Which kind of guns it can be loaded into
var/projectile_type = null //The bullet type to create when New() is called
var/obj/item/projectile/BB = null //The loaded bullet
var/pellets = 1 //Pellets for spreadshot
diff --git a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
index 538ac753e2..d8e53b2451 100644
--- a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
@@ -1,7 +1,7 @@
/obj/item/ammo_box/magazine/internal/cylinder
name = "revolver cylinder"
ammo_type = /obj/item/ammo_casing/a357
- caliber = "357"
+ caliber = list("357","38")
max_ammo = 7
/obj/item/ammo_box/magazine/internal/cylinder/ammo_count(countempties = 1)
@@ -31,7 +31,7 @@
rotate()
/obj/item/ammo_box/magazine/internal/cylinder/give_round(obj/item/ammo_casing/R, replace_spent = 0)
- if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type))
+ if(!R || (caliber && !(R.caliber in caliber)) || (!caliber && R.type != ammo_type))
return FALSE
for(var/i in 1 to stored_ammo.len)
diff --git a/code/modules/projectiles/boxes_magazines/internal/grenade.dm b/code/modules/projectiles/boxes_magazines/internal/grenade.dm
index 8b2ec9fca3..d6d338e8ff 100644
--- a/code/modules/projectiles/boxes_magazines/internal/grenade.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/grenade.dm
@@ -1,7 +1,7 @@
/obj/item/ammo_box/magazine/internal/cylinder/grenademulti
name = "grenade launcher internal magazine"
ammo_type = /obj/item/ammo_casing/a40mm
- caliber = "40mm"
+ caliber = list("40mm")
max_ammo = 6
/obj/item/ammo_box/magazine/internal/grenadelauncher
diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
index 982d22493f..a9cad1adc8 100644
--- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
@@ -1,19 +1,19 @@
/obj/item/ammo_box/magazine/internal/cylinder/rev38
name = "detective revolver cylinder"
ammo_type = /obj/item/ammo_casing/c38
- caliber = "38"
+ caliber = list("38")
max_ammo = 6
/obj/item/ammo_box/magazine/internal/cylinder/rev762
name = "\improper Nagant revolver cylinder"
ammo_type = /obj/item/ammo_casing/n762
- caliber = "n762"
+ caliber = list("n762")
max_ammo = 7
/obj/item/ammo_box/magazine/internal/cylinder/rus357
name = "\improper Russian revolver cylinder"
ammo_type = /obj/item/ammo_casing/a357
- caliber = "357"
+ caliber = list("357")
max_ammo = 6
multiload = 0
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index c2206fcea8..ab9dd6d6a6 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -110,7 +110,7 @@
/obj/item/gun/ballistic/revolver/detective/screwdriver_act(mob/living/user, obj/item/I)
if(..())
return TRUE
- if(magazine.caliber == "38")
+ if("38" in magazine.caliber)
to_chat(user, "You begin to reinforce the barrel of [src]...")
if(magazine.ammo_count())
afterattack(user, user) //you know the drill
@@ -120,7 +120,7 @@
if(magazine.ammo_count())
to_chat(user, "You can't modify it!")
return TRUE
- magazine.caliber = "357"
+ magazine.caliber = list("357")
desc = "The barrel and chamber assembly seems to have been modified."
to_chat(user, "You reinforce the barrel of [src]. Now it will fire .357 rounds.")
else
@@ -133,7 +133,7 @@
if(magazine.ammo_count())
to_chat(user, "You can't modify it!")
return
- magazine.caliber = "38"
+ magazine.caliber = list("38")
desc = initial(desc)
to_chat(user, "You remove the modifications on [src]. Now it will fire .38 rounds.")
return TRUE
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index cc778bcf05..55a75e1688 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -57,6 +57,8 @@
var/muzzle_type
var/impact_type
+ var/turf/last_angle_set_hitscan_store //last turf we stored a hitscan segment while changing angles. without this you'll have potentially hundreds of segments from a homing projectile or something.
+
//Fancy hitscan lighting effects!
var/hitscan_light_intensity = 1.5
var/hitscan_light_range = 0.75
@@ -410,12 +412,16 @@
START_PROCESSING(SSprojectiles, src)
pixel_move(1, FALSE) //move it now!
-/obj/item/projectile/proc/setAngle(new_angle) //wrapper for overrides.
+/obj/item/projectile/proc/setAngle(new_angle, hitscan_store_segment = TRUE) //wrapper for overrides.
Angle = new_angle
if(!nondirectional_sprite)
var/matrix/M = new
M.Turn(Angle)
transform = M
+ if(fired && hitscan && trajectory && isloc(loc) && (loc != last_angle_set_hitscan_store))
+ last_angle_set_hitscan_store = loc
+ var/datum/point/pcache = trajectory.copy_to()
+ store_hitscan_collision(pcache)
if(trajectory)
trajectory.set_angle(new_angle)
return TRUE
@@ -462,7 +468,7 @@
beam_segments[beam_index] = null //record start.
/obj/item/projectile/proc/process_hitscan()
- var/safety = range * 3
+ var/safety = range * 10
record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1))
while(loc && !QDELETED(src))
if(paused)
@@ -647,7 +653,7 @@
/obj/item/projectile/proc/cleanup_beam_segments()
QDEL_LIST_ASSOC(beam_segments)
beam_segments = list()
- qdel(beam_index)
+ QDEL_NULL(beam_index)
/obj/item/projectile/proc/finalize_hitscan_and_generate_tracers(impacting = TRUE)
if(trajectory && beam_index)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index fd79a52906..d71e081dac 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -118,7 +118,14 @@
light_color = LIGHT_COLOR_GREEN
/obj/item/projectile/beam/emitter/singularity_pull()
- return //don't want the emitters to miss
+ return
+
+/obj/item/projectile/beam/emitter/hitscan
+ hitscan = TRUE
+ muzzle_type = /obj/effect/projectile/muzzle/laser/emitter
+ tracer_type = /obj/effect/projectile/tracer/laser/emitter
+ impact_type = /obj/effect/projectile/impact/laser/emitter
+ impact_effect_type = null
/obj/item/projectile/beam/lasertag
name = "laser tag beam"
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 9c877fc053..b779ad5d44 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -148,8 +148,8 @@
/obj/machinery/chem_master/on_deconstruction()
var/atom/A = drop_location()
- beaker.forceMove(A)
- bottle.forceMove(A)
+ beaker?.forceMove(A)
+ bottle?.forceMove(A)
return ..()
/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 62a8d97b2d..103f7cb28f 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -887,7 +887,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/M)
if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes.
var/mob/living/carbon/human/H = M
- if(!H.shoes)
+ if(!H.shoes || !(H.shoes.body_parts_covered & FEET))
H.adjustBruteLoss(-3, 0)
. = 1
return ..() || .
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index a915087428..98d66a2b1b 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -36,7 +36,7 @@
var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this.
-/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume, specialreact)
+/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, multiplier, specialreact)
return
//I recommend you set the result amount to the total volume of all components.
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 26b39fb3b0..b463b5758b 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -53,9 +53,9 @@
required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/frostoil = 5, /datum/reagent/toxin/plasma = 20)
mob_react = FALSE
-/datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/stack/sheet/mineral/plasma(location)
/datum/chemical_reaction/goldsolidification
@@ -64,9 +64,9 @@
required_reagents = list(/datum/reagent/consumable/frostoil = 5, /datum/reagent/gold = 20, /datum/reagent/iron = 1)
mob_react = FALSE
-/datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/stack/sheet/mineral/gold(location)
/datum/chemical_reaction/capsaicincondensation
@@ -88,9 +88,9 @@
results = list(/datum/reagent/consumable/mustard = 5)
required_reagents = list(/datum/reagent/mustardgrind = 1, /datum/reagent/water = 10, /datum/reagent/consumable/enzyme= 1)
-/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/soap/homemade(location)
/datum/chemical_reaction/candlefication
@@ -100,9 +100,9 @@
required_temp = 374
mob_react = FALSE
-/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/candle(location)
/datum/chemical_reaction/meatification
@@ -111,9 +111,9 @@
required_reagents = list(/datum/reagent/liquidgibs = 10, /datum/reagent/consumable/nutriment = 10, /datum/reagent/carbon = 10)
mob_react = FALSE
-/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/meat/slab/meatproduct(location)
return
@@ -146,9 +146,9 @@
mob_react = FALSE
required_temp = 300
-/datum/chemical_reaction/fermis_plush/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/fermis_plush/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i+=10)
+ for(var/i = 1, i <= multiplier, i+=10)
new /obj/item/toy/plush/catgirl/fermis(location)
////////////////////////////////// VIROLOGY //////////////////////////////////////////
@@ -227,13 +227,13 @@
var/level_min = 1
var/level_max = 2
-/datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, multiplier)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
- for(var/i in 1 to min(created_volume, 5))
+ for(var/i in 1 to min(multiplier, 5))
D.Evolve(level_min, level_max)
/datum/chemical_reaction/mix_virus/mix_virus_2
@@ -330,12 +330,12 @@
required_reagents = list(/datum/reagent/medicine/synaptizine = 1)
required_catalysts = list(/datum/reagent/blood = 1)
-/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, multiplier)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
- for(var/i in 1 to min(created_volume, 5))
+ for(var/i in 1 to min(multiplier, 5))
D.Devolve()
/datum/chemical_reaction/mix_virus/neuter_virus
@@ -344,12 +344,12 @@
required_reagents = list(/datum/reagent/toxin/formaldehyde = 1)
required_catalysts = list(/datum/reagent/blood = 1)
-/datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/reagents/holder, multiplier)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
- for(var/i in 1 to min(created_volume, 5))
+ for(var/i in 1 to min(multiplier, 5))
D.Neuter()
////////////////////////////////// foam and foam precursor ///////////////////////////////////////////////////
@@ -367,12 +367,12 @@
required_reagents = list(/datum/reagent/fluorosurfactant = 1, /datum/reagent/water = 1)
mob_react = FALSE
-/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "The solution spews out foam!")
var/datum/effect_system/foam_spread/s = new()
- s.set_up(created_volume*2, location, holder)
+ s.set_up(multiplier*2, location, holder)
s.start()
holder.clear_reagents()
return
@@ -384,14 +384,14 @@
required_reagents = list(/datum/reagent/aluminium = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = FALSE
-/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "The solution spews out a metallic foam!")
var/datum/effect_system/foam_spread/metal/s = new()
- s.set_up(created_volume*5, location, holder, 1)
+ s.set_up(multiplier*5, location, holder, 1)
s.start()
holder.clear_reagents()
@@ -401,11 +401,11 @@
required_reagents = list(/datum/reagent/aluminium = 3, /datum/reagent/smart_foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = TRUE
-/datum/chemical_reaction/smart_foam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/smart_foam/on_reaction(datum/reagents/holder, multiplier)
var/turf/location = get_turf(holder.my_atom)
location.visible_message("The solution spews out metallic foam!")
var/datum/effect_system/foam_spread/metal/smart/s = new()
- s.set_up(created_volume * 5, location, holder, TRUE)
+ s.set_up(multiplier * 5, location, holder, TRUE)
s.start()
holder.clear_reagents()
@@ -415,12 +415,12 @@
required_reagents = list(/datum/reagent/iron = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = FALSE
-/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "The solution spews out a metallic foam!")
var/datum/effect_system/foam_spread/metal/s = new()
- s.set_up(created_volume*5, location, holder, 2)
+ s.set_up(multiplier*5, location, holder, 2)
s.start()
holder.clear_reagents()
@@ -521,8 +521,8 @@
required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/synthflesh = 1, /datum/reagent/blood = 1)
required_temp = 374
-/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume)
- chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life") // Lol.
+/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, multiplier)
+ chemical_mob_spawn(holder, rand(1, round(multiplier, 1)), "Life") // Lol.
//This is missing, I'm adding it back (see tgwiki). Not sure why we don't have it.
/datum/chemical_reaction/life_friendly
@@ -531,8 +531,8 @@
required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/synthflesh = 1, /datum/reagent/consumable/sugar = 1)
required_temp = 374
-/datum/chemical_reaction/life_friendly/on_reaction(datum/reagents/holder, created_volume)
- chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN) //Pray for cute cats
+/datum/chemical_reaction/life_friendly/on_reaction(datum/reagents/holder, multiplier)
+ chemical_mob_spawn(holder, rand(1, round(multiplier, 1)), "Life (friendly)", FRIENDLY_SPAWN) //Pray for cute cats
/datum/chemical_reaction/corgium
name = "corgium"
@@ -540,9 +540,9 @@
required_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/blood = 1)
required_temp = 374
-/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = rand(1, created_volume), i <= created_volume, i++) // More lulz.
+ for(var/i = rand(1, multiplier), i <= multiplier, i++) // More lulz.
new /mob/living/simple_animal/pet/dog/corgi(location)
..()
@@ -600,9 +600,9 @@
required_reagents = list(/datum/reagent/oil = 5, /datum/reagent/toxin/acid = 2, /datum/reagent/ash = 3)
required_temp = 374 //lazily consistent with soap & other crafted objects generically created with heat.
-/datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i in 1 to created_volume)
+ for(var/i in 1 to multiplier)
new /obj/item/stack/sheet/plastic(location)
/datum/chemical_reaction/pax
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index cb9636bf02..3930988380 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -5,7 +5,7 @@
var/modifier = 0
var/noexplosion = FALSE
-/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, created_volume, turf/override)
+/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, multiplier, turf/override)
if(!noexplosion)
var/turf/T = override || get_turf(holder.my_atom)
var/inside_msg
@@ -20,7 +20,7 @@
message_admins("Reagent explosion reaction occurred at [ADMIN_VERBOSEJMP(T)][inside_msg]. Last Fingerprint: [touch_msg].")
log_game("Reagent explosion reaction occurred at [AREACOORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"]." )
var/datum/effect_system/reagents_explosion/e = new()
- e.set_up(modifier + round(created_volume/strengthdiv, 1), T, 0, 0)
+ e.set_up(modifier + round(multiplier/strengthdiv, 1), T, 0, 0)
e.start()
holder.clear_reagents()
@@ -32,10 +32,10 @@
required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/toxin/acid/fluacid = 1, /datum/reagent/toxin/acid = 1)
strengthdiv = 2
-/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume*2)
+ holder.remove_reagent(/datum/reagent/nitroglycerin, multiplier*2)
..()
/datum/chemical_reaction/reagent_explosion/nitroglycerin_explosion
@@ -57,10 +57,10 @@
id = "holyboom"
required_reagents = list(/datum/reagent/water/holywater = 1, /datum/reagent/potassium = 1)
-/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- if(created_volume >= 150)
- playsound(get_turf(holder.my_atom), 'sound/effects/pray.ogg', 80, 0, round(created_volume/48))
+ if(multiplier >= 150)
+ playsound(get_turf(holder.my_atom), 'sound/effects/pray.ogg', 80, 0, round(multiplier/48))
strengthdiv = 8
for(var/mob/living/simple_animal/revenant/R in get_hearers_in_view(7,get_turf(holder.my_atom)))
var/deity
@@ -73,13 +73,13 @@
R.reveal(100)
R.adjustHealth(50)
sleep(20)
- for(var/mob/living/carbon/C in get_hearers_in_view(round(created_volume/48,1),get_turf(holder.my_atom)))
+ for(var/mob/living/carbon/C in get_hearers_in_view(round(multiplier/48,1),get_turf(holder.my_atom)))
if(iscultist(C))
to_chat(C, "The divine explosion sears you!")
C.Knockdown(40)
C.adjust_fire_stacks(5)
C.IgniteMob()
- ..(holder, created_volume, T)
+ ..(holder, multiplier, T)
/datum/chemical_reaction/blackpowder
@@ -97,9 +97,9 @@
modifier = 1
mix_message = "Sparks start flying around the black powder!"
-/datum/chemical_reaction/reagent_explosion/blackpowder_explosion/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/blackpowder_explosion/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- ..(holder, created_volume, T)
+ ..(holder, multiplier, T)
/datum/chemical_reaction/thermite
name = "Thermite"
@@ -112,11 +112,11 @@
id = "emp_pulse"
required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/iron = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
-/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
- // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
- empulse(location, round(created_volume / 12), round(created_volume / 7), 1)
+ // 100 multiplier = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
+ // 200 multiplier = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
+ empulse(location, round(multiplier / 12), round(multiplier / 7), 1)
holder.clear_reagents()
@@ -125,9 +125,9 @@
id = "beesplosion"
required_reagents = list(/datum/reagent/consumable/honey = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/radium = 1)
-/datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, multiplier)
var/location = holder.my_atom.drop_location()
- if(created_volume < 5)
+ if(multiplier < 5)
playsound(location,'sound/effects/sparks1.ogg', 100, TRUE)
else
playsound(location,'sound/creatures/bee.ogg', 100, TRUE)
@@ -137,7 +137,7 @@
if(required_reagents[R.type])
continue
beeagents += R
- var/bee_amount = round(created_volume * 0.2)
+ var/bee_amount = round(multiplier * 0.2)
for(var/i in 1 to bee_amount)
var/mob/living/simple_animal/hostile/poison/bees/short/new_bee = new(location)
if(LAZYLEN(beeagents))
@@ -157,7 +157,7 @@
required_reagents = list(/datum/reagent/chlorine = 1, /datum/reagent/fluorine = 3)
required_temp = 424
-/datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
@@ -172,7 +172,7 @@
modifier = 1
mob_react = FALSE
-/datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
@@ -190,12 +190,12 @@
results = list(/datum/reagent/sorium = 4)
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/oxygen = 1, /datum/reagent/nitrogen = 1, /datum/reagent/carbon = 1)
-/datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/sorium, created_volume*4)
+ holder.remove_reagent(/datum/reagent/sorium, multiplier*4)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume*4), 1, 6)
+ var/range = CLAMP(sqrt(multiplier*4), 1, 6)
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/sorium_vortex
@@ -204,9 +204,9 @@
required_reagents = list(/datum/reagent/sorium = 1)
required_temp = 474
-/datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume), 1, 6)
+ var/range = CLAMP(sqrt(multiplier), 1, 6)
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/liquid_dark_matter
@@ -215,12 +215,12 @@
results = list(/datum/reagent/liquid_dark_matter = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/radium = 1, /datum/reagent/carbon = 1)
-/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, multiplier)
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, multiplier*3)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume*3), 1, 6)
+ var/range = CLAMP(sqrt(multiplier*3), 1, 6)
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/ldm_vortex
@@ -229,9 +229,9 @@
required_reagents = list(/datum/reagent/liquid_dark_matter = 1)
required_temp = 474
-/datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume/2), 1, 6)
+ var/range = CLAMP(sqrt(multiplier/2), 1, 6)
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/flash_powder
@@ -240,12 +240,12 @@
results = list(/datum/reagent/flash_powder = 3)
required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/potassium = 1, /datum/reagent/sulfur = 1 )
-/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
var/location = get_turf(holder.my_atom)
do_sparks(2, TRUE, location)
- var/range = created_volume/3
+ var/range = multiplier/3
if(isatom(holder.my_atom))
var/atom/A = holder.my_atom
A.flash_lighting_fx(_range = (range + 2), _reset_lighting = FALSE)
@@ -255,7 +255,7 @@
C.Knockdown(60)
else
C.Stun(100)
- holder.remove_reagent(/datum/reagent/flash_powder, created_volume*3)
+ holder.remove_reagent(/datum/reagent/flash_powder, multiplier*3)
/datum/chemical_reaction/flash_powder_flash
name = "Flash powder activation"
@@ -263,10 +263,10 @@
required_reagents = list(/datum/reagent/flash_powder = 1)
required_temp = 374
-/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
do_sparks(2, TRUE, location)
- var/range = created_volume/10
+ var/range = multiplier/10
if(isatom(holder.my_atom))
var/atom/A = holder.my_atom
A.flash_lighting_fx(_range = (range + 2), _reset_lighting = FALSE)
@@ -283,11 +283,11 @@
results = list(/datum/reagent/smoke_powder = 3)
required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/phosphorus = 1)
-/datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/smoke_powder, created_volume*3)
- var/smoke_radius = round(sqrt(created_volume * 1.5), 1)
+ holder.remove_reagent(/datum/reagent/smoke_powder, multiplier*3)
+ var/smoke_radius = round(sqrt(multiplier * 1.5), 1)
var/location = get_turf(holder.my_atom)
var/datum/effect_system/smoke_spread/chem/S = new
S.attach(location)
@@ -305,9 +305,9 @@
required_temp = 374
mob_react = FALSE
-/datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- var/smoke_radius = round(sqrt(created_volume / 2), 1)
+ var/smoke_radius = round(sqrt(multiplier / 2), 1)
var/datum/effect_system/smoke_spread/chem/S = new
S.attach(location)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -323,13 +323,13 @@
results = list(/datum/reagent/sonic_powder = 3)
required_reagents = list(/datum/reagent/oxygen = 1, /datum/reagent/consumable/space_cola = 1, /datum/reagent/phosphorus = 1)
-/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, multiplier)
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, multiplier*3)
var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, 1)
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location))
+ for(var/mob/living/carbon/C in get_hearers_in_view(multiplier/3, location))
C.soundbang_act(1, 100, rand(0, 5))
/datum/chemical_reaction/sonic_powder_deafen
@@ -338,10 +338,10 @@
required_reagents = list(/datum/reagent/sonic_powder = 1)
required_temp = 374
-/datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, 1)
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
+ for(var/mob/living/carbon/C in get_hearers_in_view(multiplier/10, location))
C.soundbang_act(1, 100, rand(0, 5))
/datum/chemical_reaction/phlogiston
@@ -350,12 +350,12 @@
results = list(/datum/reagent/phlogiston = 3)
required_reagents = list(/datum/reagent/phosphorus = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/stable_plasma = 1)
-/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
var/turf/open/T = get_turf(holder.my_atom)
if(istype(T))
- T.atmos_spawn_air("plasma=[created_volume];TEMP=1000")
+ T.atmos_spawn_air("plasma=[multiplier];TEMP=1000")
holder.clear_reagents()
return
@@ -371,7 +371,7 @@
results = list(/datum/reagent/cryostylane = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/stable_plasma = 1, /datum/reagent/nitrogen = 1)
-/datum/chemical_reaction/cryostylane/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/cryostylane/on_reaction(datum/reagents/holder, multiplier)
holder.chem_temp = 20 // cools the fuck down
return
@@ -382,8 +382,8 @@
required_reagents = list(/datum/reagent/cryostylane = 1, /datum/reagent/oxygen = 1)
mob_react = FALSE
-/datum/chemical_reaction/cryostylane_oxygen/on_reaction(datum/reagents/holder, created_volume)
- holder.chem_temp = max(holder.chem_temp - 10*created_volume,0)
+/datum/chemical_reaction/cryostylane_oxygen/on_reaction(datum/reagents/holder, multiplier)
+ holder.chem_temp = max(holder.chem_temp - 10*multiplier,0)
/datum/chemical_reaction/pyrosium_oxygen
name = "ephemeral pyrosium reaction"
@@ -392,8 +392,8 @@
required_reagents = list(/datum/reagent/pyrosium = 1, /datum/reagent/oxygen = 1)
mob_react = FALSE
-/datum/chemical_reaction/pyrosium_oxygen/on_reaction(datum/reagents/holder, created_volume)
- holder.chem_temp += 10*created_volume
+/datum/chemical_reaction/pyrosium_oxygen/on_reaction(datum/reagents/holder, multiplier)
+ holder.chem_temp += 10*multiplier
/datum/chemical_reaction/pyrosium
name = "pyrosium"
@@ -401,7 +401,7 @@
results = list(/datum/reagent/pyrosium = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/radium = 1, /datum/reagent/phosphorus = 1)
-/datum/chemical_reaction/pyrosium/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/pyrosium/on_reaction(datum/reagents/holder, multiplier)
holder.chem_temp = 20 // also cools the fuck down
return
@@ -431,20 +431,20 @@
mix_sound = 'sound/machines/defib_zap.ogg'
var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN
-/datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, created_volume)
- var/T1 = created_volume * 20 //100 units : Zap 3 times, with powers 2000/5000/12000. Tesla revolvers have a power of 10000 for comparison.
- var/T2 = created_volume * 50
- var/T3 = created_volume * 120
+/datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, multiplier)
+ var/T1 = multiplier * 20 //100 units : Zap 3 times, with powers 2000/5000/12000. Tesla revolvers have a power of 10000 for comparison.
+ var/T2 = multiplier * 50
+ var/T3 = multiplier * 120
sleep(5)
- if(created_volume >= 75)
+ if(multiplier >= 75)
tesla_zap(holder.my_atom, 7, T1, tesla_flags)
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
sleep(15)
- if(created_volume >= 40)
+ if(multiplier >= 40)
tesla_zap(holder.my_atom, 7, T2, tesla_flags)
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
sleep(15)
- if(created_volume >= 10) //10 units minimum for lightning, 40 units for secondary blast, 75 units for tertiary blast.
+ if(multiplier >= 10) //10 units minimum for lightning, 40 units for secondary blast, 75 units for tertiary blast.
tesla_zap(holder.my_atom, 7, T3, tesla_flags)
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
..()
@@ -490,7 +490,7 @@
else
return FALSE
-/datum/chemical_reaction/reagent_explosion/lingblood/on_reaction(datum/reagents/holder, created_volume, specialreact)
+/datum/chemical_reaction/reagent_explosion/lingblood/on_reaction(datum/reagents/holder, multiplier, specialreact)
if(specialreact >= 10)
return ..()
else
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 5228d4a281..e08fba604d 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -290,7 +290,7 @@
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
-/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, multiplier)
empulse(get_turf(holder.my_atom), 3, 7)
..()
@@ -301,7 +301,7 @@
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
-/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/stock_parts/cell/high/slime(get_turf(holder.my_atom))
..()
@@ -505,7 +505,7 @@
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
-/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25)
..()
@@ -517,7 +517,7 @@
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
-/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, multiplier)
var/obj/item/stack/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom))
BC.visible_message("The [BC.name] appears out of thin air!")
..()
@@ -529,7 +529,7 @@
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
-/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom))
..()
@@ -565,9 +565,16 @@
required_other = TRUE
/datum/chemical_reaction/slime/slimestop/on_reaction(datum/reagents/holder)
+ sleep(50)
+ var/obj/item/slime_extract/sepia/extract = holder.my_atom
var/turf/T = get_turf(holder.my_atom)
- var/list/M = list(get_mob_by_key(holder.my_atom.fingerprintslast))
- new /obj/effect/timestop(T, null, null, M)
+ new /obj/effect/timestop(T, null, null, null)
+ if(istype(extract))
+ if(extract.Uses > 0)
+ var/mob/lastheld = get_mob_by_key(holder.my_atom.fingerprintslast)
+ if(lastheld && !lastheld.equip_to_slot_if_possible(extract, SLOT_HANDS, disable_warning = TRUE))
+ extract.forceMove(get_turf(lastheld))
+
..()
/datum/chemical_reaction/slime/slimecamera
@@ -626,8 +633,8 @@
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
-/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, created_volume)
- if(created_volume >= 5)
+/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, multiplier)
+ if(multiplier >= 5)
var/obj/item/grenade/clusterbuster/slime/S = new (get_turf(holder.my_atom))
S.visible_message("Infused with plasma, the core begins to expand uncontrollably!")
S.icon_state = "[S.base_state]_active"
@@ -646,7 +653,7 @@
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
-/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, multiplier)
var/obj/item/grenade/clusterbuster/slime/volatile/S = new (holder.my_atom.loc)
S.visible_message("Infused with slime jelly, the core begins to expand uncontrollably!")
S.icon_state = "[S.base_state]_active"
diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm
index 5ad9728b22..cc63a8c692 100644
--- a/code/modules/reagents/chemistry/recipes/special.dm
+++ b/code/modules/reagents/chemistry/recipes/special.dm
@@ -186,6 +186,7 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related
var/datum/chemical_reaction/recipe = get_chemical_reaction(recipe_id)
if(!recipe)
info = "This recipe is illegible."
+ return
var/list/dat = list("")
for(var/rid in recipe.required_reagents)
var/datum/reagent/R = GLOB.chemical_reagents_list[rid]
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index f311537641..5fb51ddaa9 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -108,10 +108,12 @@
/obj/item/reagent_containers/proc/bartender_check(atom/target)
. = FALSE
- if(target.CanPass(src, get_turf(src)) && thrownby && thrownby.actions)
- for(var/datum/action/innate/drink_fling/D in thrownby.actions)
- if(D.active)
- return TRUE
+ var/turf/T = get_turf(src)
+ if(!T || target.CanPass(src, T) || !thrownby || !thrownby.actions)
+ return
+ for(var/datum/action/innate/drink_fling/D in thrownby.actions)
+ if(D.active)
+ return TRUE
/obj/item/reagent_containers/proc/ForceResetRotation()
transform = initial(transform)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 624a5e62cb..b1b5f86e0e 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -8,7 +8,6 @@
resistance_flags = ACID_PROOF
container_HP = 2
-
/obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target)
if(!canconsume(M, user))
return
@@ -22,13 +21,9 @@
if(istype(M))
if(user.a_intent == INTENT_HARM)
- var/R
M.visible_message("[user] splashes the contents of [src] onto [M]!", \
"[user] splashes the contents of [src] onto [M]!")
- if(reagents)
- for(var/datum/reagent/A in reagents.reagent_list)
- R += A.type + " ("
- R += num2text(A.volume) + "),"
+ var/R = reagents?.log_list()
if(isturf(target) && reagents.reagent_list.len && thrownby)
log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]")
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] at [ADMIN_VERBOSEJMP(target)].")
@@ -106,7 +101,6 @@
return
..()
-
/obj/item/reagent_containers/glass/beaker
name = "beaker"
desc = "A beaker. It can hold up to 60 units. Unable to withstand extreme pHes."
@@ -159,8 +153,37 @@
/obj/item/reagent_containers/glass/beaker/jar
name = "honey jar"
desc = "A jar for honey. It can hold up to 60 units of sweet delight. Unable to withstand reagents of an extreme pH."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "vapour"
+ icon_state = "honey"
+
+/obj/item/reagent_containers/glass/beaker/glass_dish
+ name = "glass dish"
+ desc = "A tiny glass dish. It can hold up to 3 units. Unable to withstand reagents of an extreme pH."
+ materials = list(MAT_GLASS=500)
+ icon_state = "glass_disk"
+ possible_transfer_amounts = list(0.1,0.5,0.75,1,2,3)
+ volume = 3
+
+/obj/item/reagent_containers/glass/beaker/flask/large
+ name = "large flask"
+ desc = "A large flask. It can hold up to 80 units. Unable to withstand reagents of an extreme pH."
+ materials = list(MAT_GLASS=2500)
+ icon_state = "flasklarge"
+ volume = 80
+
+/obj/item/reagent_containers/glass/beaker/flask
+ name = "small flask"
+ desc = "A small flask. It can hold up to 40 units. Unable to withstand reagents of an extreme pH."
+ materials = list(MAT_GLASS=1000)
+ icon_state = "flasksmall"
+ volume = 40
+
+/obj/item/reagent_containers/glass/beaker/flask/spouty
+ name = "flask with spout"
+ desc = "A flask with a spout! It can hold up to 120 units. Unable to withstand reagents of an extreme pH."
+ materials = list(MAT_GLASS=2500)
+ icon_state = "flaskspouty"
+ possible_transfer_amounts = list(1,2,3,4,5,10,15,20,25,30,50,100,120)
+ volume = 120
/obj/item/reagent_containers/glass/beaker/large
name = "large beaker"
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index f509ad0b10..f4bb5e0d08 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -362,30 +362,14 @@
return
/obj/item/hypospray/mkii/afterattack(atom/target, mob/user, proximity)
- if(!vial)
+ if(!vial || !proximity || !isliving(target))
+ return
+ var/mob/living/L = target
+
+ if(!L.reagents || !L.can_inject(user, TRUE, user.zone_selected, penetrates))
return
- if(!proximity)
- return
-
- if(!ismob(target))
- return
-
- var/mob/living/L
- if(isliving(target))
- L = target
- if(!penetrates && !L.can_inject(user, 1)) //This check appears another four times, since otherwise the penetrating sprays will break in do_mob.
- return
-
- if(!L && !target.is_injectable()) //only checks on non-living mobs, due to how can_inject() handles
- to_chat(user, "You cannot directly fill [target]!")
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- to_chat(user, "[target] is full.")
- return
-
- if(ishuman(L))
+ if(iscarbon(L))
var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
if(!affecting)
to_chat(user, "The limb is missing!")
@@ -394,84 +378,40 @@
to_chat(user, "Medicine won't work on a robotic limb!")
return
+ //Always log attemped injections for admins
var/contained = vial.reagents.log_list()
log_combat(user, L, "attemped to inject", src, addition="which had [contained]")
-//Always log attemped injections for admins
- if(vial != null)
- switch(mode)
- if(HYPO_INJECT)
- if(L) //living mob
- if(L != user)
- L.visible_message("[user] is trying to inject [L] with [src]!", \
- "[user] is trying to inject [L] with [src]!")
- if(!do_mob(user, L, inject_wait))
- return
- if(!penetrates && !L.can_inject(user, 1))
- return
- if(!vial.reagents.total_volume)
- return
- if(L.reagents.total_volume >= L.reagents.maximum_volume)
- return
- L.visible_message("[user] uses the [src] on [L]!", \
- "[user] uses the [src] on [L]!")
- else
- if(!do_mob(user, L, inject_self))
- return
- if(!penetrates && !L.can_inject(user, 1))
- return
- if(!vial.reagents.total_volume)
- return
- if(L.reagents.total_volume >= L.reagents.maximum_volume)
- return
- log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])")
- L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG)
- var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
- vial.reagents.reaction(L, INJECT, fraction)
- vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
- if(vial.amount_per_transfer_from_this >= 15)
- playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
- if(vial.amount_per_transfer_from_this < 15)
- playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
- to_chat(user, "You inject [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.")
-
- if(HYPO_SPRAY)
- if(L) //living mob
- if(L != user)
- L.visible_message("[user] is trying to spray [L] with [src]!", \
- "[user] is trying to spray [L] with [src]!")
- if(!do_mob(user, L, spray_wait))
- return
- if(!penetrates && !L.can_inject(user, 1))
- return
- if(!vial.reagents.total_volume)
- return
- if(L.reagents.total_volume >= L.reagents.maximum_volume)
- return
- L.visible_message("[user] uses the [src] on [L]!", \
- "[user] uses the [src] on [L]!")
- else
- if(!do_mob(user, L, spray_self))
- return
- if(!penetrates && !L.can_inject(user, 1))
- return
- if(!vial.reagents.total_volume)
- return
- if(L.reagents.total_volume >= L.reagents.maximum_volume)
- return
- log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])")
- L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG)
- var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
- vial.reagents.reaction(L, PATCH, fraction)
- vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
- if(vial.amount_per_transfer_from_this >= 15)
- playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
- if(vial.amount_per_transfer_from_this < 15)
- playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
- to_chat(user, "You spray [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.")
- else
- to_chat(user, "[src] doesn't work here!")
+ if(!vial)
+ to_chat(user, "[src] doesn't have any vial installed!")
return
+ if(!vial.reagents.total_volume)
+ to_chat(user, "[src]'s vial is empty!")
+ return
+
+ var/fp_verb = mode == HYPO_SPRAY ? "spray" : "inject"
+ var/method = mode == HYPO_SPRAY ? TOUCH : INJECT
+
+ if(L != user)
+ L.visible_message("[user] is trying to [fp_verb] [L] with [src]!", \
+ "[user] is trying to [fp_verb] you with [src]!")
+ if(!do_mob(user, L, inject_wait, extra_checks = CALLBACK(L, /mob/living/proc/can_inject, user, FALSE, user.zone_selected, penetrates)))
+ return
+ if(!vial.reagents.total_volume)
+ return
+ log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [mode])")
+ if(L != user)
+ L.visible_message("[user] uses the [src] on [L]!", \
+ "[user] uses the [src] on you!")
+ else
+ L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG)
+
+ var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
+ vial.reagents.reaction(L, method, fraction)
+ vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
+ var/long_sound = vial.amount_per_transfer_from_this >= 15
+ playsound(loc, long_sound ? 'sound/items/hypospray_long.ogg' : pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
+ to_chat(user, "You [fp_verb] [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.")
/obj/item/hypospray/mkii/attack_self(mob/living/user)
if(user)
diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm
index 812b3144e9..0fe30efd6b 100644
--- a/code/modules/reagents/reagent_containers/rags.dm
+++ b/code/modules/reagents/reagent_containers/rags.dm
@@ -118,6 +118,7 @@
item_flags = NOBLUDGEON | NO_UNIFORM_REQUIRED //so it can be worn on the belt slot even with no uniform.
force = 1
w_class = WEIGHT_CLASS_NORMAL
+ mutantrace_variation = STYLE_DIGITIGRADE
attack_verb = list("whipped")
hitsound = 'sound/items/towelwhip.ogg'
volume = 10
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 46ddb1e2ed..11c80b14ee 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -149,8 +149,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
"You struggle to pry up \the [src] with \the [I].")
if(I.use_tool(src, user, 40, volume=40))
if(!(stat & BROKEN))
- var/obj/item/conveyor_construct/C = new/obj/item/conveyor_construct(src.loc)
- C.id = id
+ var/obj/item/stack/conveyor/C = new /obj/item/stack/conveyor(loc, 1, TRUE, id)
transfer_fingerprints_to(C)
to_chat(user, "You remove the conveyor belt.")
qdel(src)
@@ -326,37 +325,6 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
if((dir == NORTH) || (dir == WEST))
invert_icon = TRUE
-//
-// CONVEYOR CONSTRUCTION STARTS HERE
-//
-
-/obj/item/conveyor_construct
- icon = 'icons/obj/recycling.dmi'
- icon_state = "conveyor_construct"
- name = "conveyor belt assembly"
- desc = "A conveyor belt assembly."
- w_class = WEIGHT_CLASS_BULKY
- var/id = "" //inherited by the belt
-
-/obj/item/conveyor_construct/attackby(obj/item/I, mob/user, params)
- ..()
- if(istype(I, /obj/item/conveyor_switch_construct))
- to_chat(user, "You link the switch to the conveyor belt assembly.")
- var/obj/item/conveyor_switch_construct/C = I
- id = C.id
-
-/obj/item/conveyor_construct/afterattack(atom/A, mob/user, proximity)
- . = ..()
- if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle))
- return
- var/cdir = get_dir(A, user)
- if(A == user.loc)
- to_chat(user, "You cannot place a conveyor belt under yourself.")
- return
- var/obj/machinery/conveyor/C = new/obj/machinery/conveyor(A, cdir, id)
- transfer_fingerprints_to(C)
- qdel(src)
-
/obj/item/conveyor_switch_construct
name = "conveyor switch assembly"
desc = "A conveyor control switch assembly."
@@ -369,6 +337,11 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
. = ..()
id = "[rand()]" //this couldn't possibly go wrong
+/obj/item/conveyor_switch_construct/attack_self(mob/user)
+ for(var/obj/item/stack/conveyor/C in view())
+ C.id = id
+ to_chat(user, "You have linked all nearby conveyor belt assemblies to this switch.")
+
/obj/item/conveyor_switch_construct/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle))
@@ -385,6 +358,49 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
transfer_fingerprints_to(NC)
qdel(src)
+/obj/item/stack/conveyor
+ name = "conveyor belt assembly"
+ desc = "A conveyor belt assembly."
+ icon = 'icons/obj/recycling.dmi'
+ icon_state = "conveyor_construct"
+ max_amount = 30
+ singular_name = "conveyor belt"
+ w_class = WEIGHT_CLASS_BULKY
+ ///id for linking
+ var/id = ""
+
+/obj/item/stack/conveyor/Initialize(mapload, new_amount, merge = TRUE, _id)
+ . = ..()
+ id = _id
+
+/obj/item/stack/conveyor/afterattack(atom/A, mob/user, proximity)
+ . = ..()
+ if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle))
+ return
+ var/cdir = get_dir(A, user)
+ if(A == user.loc)
+ to_chat(user, "You cannot place a conveyor belt under yourself!")
+ return
+ var/obj/machinery/conveyor/C = new/obj/machinery/conveyor(A, cdir, id)
+ transfer_fingerprints_to(C)
+ use(1)
+
+/obj/item/stack/conveyor/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(istype(I, /obj/item/conveyor_switch_construct))
+ to_chat(user, "You link the switch to the conveyor belt assembly.")
+ var/obj/item/conveyor_switch_construct/C = I
+ id = C.id
+
+/obj/item/stack/conveyor/update_weight()
+ return FALSE
+
+/obj/item/stack/conveyor/thirty
+ amount = 30
+
+/obj/item/stack/conveyor/fifteen
+ amount = 15
+
/obj/item/paper/guides/conveyor
name = "paper- 'Nano-it-up U-build series, #9: Build your very own conveyor belt, in SPACE'"
info = "Congratulations!
You are now the proud owner of the best conveyor set available for space mail order! We at Nano-it-up know you love to prepare your own structures without wasting time, so we have devised a special streamlined assembly procedure that puts all other mail-order products to shame!
Firstly, you need to link the conveyor switch assembly to each of the conveyor belt assemblies. After doing so, you simply need to install the belt assemblies onto the floor, et voila, belt built. Our special Nano-it-up smart switch will detected any linked assemblies as far as the eye can see! This convenience, you can only have it when you Nano-it-up. Stay nano!
"
diff --git a/code/modules/research/designs/autobotter_designs.dm b/code/modules/research/designs/autobotter_designs.dm
index d2a38a29f9..6eb7e8354b 100644
--- a/code/modules/research/designs/autobotter_designs.dm
+++ b/code/modules/research/designs/autobotter_designs.dm
@@ -151,77 +151,76 @@
name = "Export Design (Wine)"
desc = "Allows for the blowing, and bottling of Wine bottles."
id = "wine_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/wine = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/wine = 50)
build_path = /obj/item/export/bottle/wine
/datum/design/bottle/export/rum
name = "Export Design (Rum)"
desc = "Allows for the blowing, and bottling of Rum bottles."
id = "rum_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/rum = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/rum = 50)
build_path = /obj/item/export/bottle/rum
/datum/design/bottle/export/gin
name = "Export Design (Gin)"
desc = "Allows for the blowing, and bottling of Gin bottles."
id = "gin_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/gin = 100)
build_path = /obj/item/export/bottle/gin
/datum/design/bottle/export/whiskey
name = "Export Design (Whiskey)"
desc = "Allows for the blowing, and bottling of Whiskey bottles."
id = "whiskey_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/whiskey = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/whiskey = 50)
build_path = /obj/item/export/bottle/whiskey
/datum/design/bottle/export/vodka
name = "Export Design (Vodka)"
desc = "Allows for the blowing, and bottling of 99% Vodka bottles."
id = "vodka_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/vodka = 99, /datum/reagent/water = 1)
+ reagents_list = list(/datum/reagent/consumable/ethanol/vodka = 45, /datum/reagent/water = 1)
build_path = /obj/item/export/bottle/vodka
/datum/design/bottle/export/tequila
name = "Export Design (Tequila)"
desc = "Allows for the blowing, and bottling of Tequila bottles."
id = "tequila_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/tequila = 80, /datum/reagent/consumable/lemonjuice = 20)
+ reagents_list = list(/datum/reagent/consumable/ethanol/tequila = 40, /datum/reagent/consumable/lemonjuice = 10)
build_path = /obj/item/export/bottle/tequila
/datum/design/bottle/export/patron
name = "Export Design (Patron)"
desc = "Allows for the blowing, and bottling of Patron bottles."
id = "patron_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/patron = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/patron = 50)
build_path = /obj/item/export/bottle/patron
/datum/design/bottle/export/kahlua
name = "Export Design (Kahlua)"
desc = "Allows for the blowing, and bottling of Kahlua bottles."
id = "kahlua_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/kahlua = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/kahlua = 50)
build_path = /obj/item/export/bottle/kahlua
/datum/design/bottle/export/sake
name = "Export Design (Sake)"
desc = "Allows for the blowing, and bottling of Sake bottles."
id = "sake_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/sake = 80, /datum/reagent/consumable/rice = 10, /datum/reagent/consumable/sugar = 10)
+ reagents_list = list(/datum/reagent/consumable/ethanol/sake = 40, /datum/reagent/consumable/rice = 10, /datum/reagent/consumable/sugar = 10)
build_path = /obj/item/export/bottle/sake
/datum/design/bottle/export/vermouth
name = "Export Design (Vermouth)"
desc = "Allows for the blowing, and bottling of Vermouth bottles."
id = "vermouth_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/vermouth = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/vermouth = 50)
build_path = /obj/item/export/bottle/vermouth
/datum/design/bottle/export/goldschlager
name = "Export Design (Goldschlager)"
desc = "Allows for the blowing, and bottling of Goldschlager bottles."
id = "goldschlager_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/goldschlager = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/goldschlager = 50)
build_path = /obj/item/export/bottle/goldschlager
/datum/design/bottle/export/hcider
@@ -235,13 +234,13 @@
name = "Export Design (Cognac)"
desc = "Allows for the blowing, and bottling of Cognac bottles."
id = "cognac_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/cognac = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/cognac = 50)
build_path = /obj/item/export/bottle/cognac
/datum/design/bottle/export/absinthe
name = "Export Design (Absinthe)"
desc = "Allows for the blowing, and bottling of Absinthe bottles."
- reagents_list = list(/datum/reagent/consumable/ethanol/absinthe = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/absinthe = 50)
id = "absinthe_export"
build_path = /obj/item/export/bottle/absinthe
@@ -249,49 +248,49 @@
name = "Export Design (Grappa)"
desc = "Allows for the blowing, and bottling of Grappa bottles."
id = "grappa_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/grappa = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/grappa = 50)
build_path = /obj/item/export/bottle/grappa
/datum/design/bottle/export/fernet
name = "Export Design (Fernet)"
desc = "Allows for the blowing, and bottling of Fernet bottles."
id = "fernet_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/fernet = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/fernet = 50)
build_path = /obj/item/export/bottle/fernet
/datum/design/bottle/export/applejack
name = "Export Design (Applejack)"
desc = "Allows for the blowing, and bottling of Applejack bottles."
id = "applejack_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/applejack = 50, /datum/reagent/consumable/ethanol/gin = 10)
+ reagents_list = list(/datum/reagent/consumable/ethanol/applejack = 35, /datum/reagent/consumable/ethanol/gin = 10)
build_path = /obj/item/export/bottle/applejack
/datum/design/bottle/export/champagne
name = "Export Design (Champagne)"
desc = "Allows for the blowing, and bottling of Champagne bottles."
id = "champagne_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/champagne = 90, /datum/reagent/carbondioxide = 10)
+ reagents_list = list(/datum/reagent/consumable/ethanol/champagne = 30, /datum/reagent/carbondioxide = 10)
build_path = /obj/item/export/bottle/champagne
/datum/design/bottle/export/blazaam
name = "Export Design (Blazaam)"
desc = "Allows for the blowing, and bottling of Blazaam bottles."
id = "blazaam_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/blazaam = 80, /datum/reagent/water/holywater = 20)
+ reagents_list = list(/datum/reagent/consumable/ethanol/blazaam = 40, /datum/reagent/water/holywater = 20)
build_path = /obj/item/export/bottle/blazaam
/datum/design/bottle/export/trappist
name = "Export Design (Trappist)"
desc = "Allows for the blowing, and bottling of Trappist bottles."
id = "trappist_export"
- reagents_list = list(/datum/reagent/consumable/ethanol/trappist = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/trappist = 50)
build_path = /obj/item/export/bottle/trappist
/datum/design/bottle/export/grenadine
name = "Export Design (Grenadine)"
desc = "Allows for the blowing, and bottling of Grenadine bottles."
id = "grenadine_export"
- reagents_list = list(/datum/reagent/consumable/grenadine = 100)
+ reagents_list = list(/datum/reagent/consumable/grenadine = 50)
build_path = /obj/item/export/bottle/grenadine
/datum/design/bottle/export/minikeg
@@ -299,7 +298,7 @@
desc = "Allows for the fabication, and bottling of Minikeg of craft beer."
id = "minikeg"
category = list("Beers")
- reagents_list = list(/datum/reagent/consumable/ethanol/beer/light = 100)
+ reagents_list = list(/datum/reagent/consumable/ethanol/beer/light = 50)
build_path = /obj/item/export/bottle/minikeg
/datum/design/bottle/export/blooddrop
@@ -315,7 +314,7 @@
desc = "Allows for the blowing, and bottling of Slim Gold bottles."
id = "slim_gold"
category = list("Beers")
- reagents_list = list(/datum/reagent/gold = 10, /datum/reagent/carbondioxide = 10, /datum/reagent/consumable/ethanol/rum = 30, /datum/reagent/consumable/ethanol/beer = 40)
+ reagents_list = list(/datum/reagent/gold = 10, /datum/reagent/carbondioxide = 10, /datum/reagent/consumable/ethanol/rum = 15, /datum/reagent/consumable/ethanol/beer = 20)
build_path = /obj/item/export/bottle/slim_gold
/datum/design/bottle/export/white_bloodmoon
@@ -323,13 +322,13 @@
desc = "Allows for the blowing, and bottling of White Bloodmoon bottles."
id = "white_bloodmoon"
category = list("Wines")
- reagents_list = list(/datum/reagent/medicine/synthflesh = 50, /datum/reagent/blood = 50, /datum/reagent/liquidgibs = 10)
+ reagents_list = list(/datum/reagent/medicine/synthflesh = 20, /datum/reagent/blood = 30, /datum/reagent/liquidgibs = 10)
build_path = /obj/item/export/bottle/white_bloodmoon
/datum/design/bottle/export/greenroad
name = "Export Design (Greenroad)"
desc = "Allows for the blowing, and bottling of Greenroad bottles."
id = "greenroad"
- reagents_list = list(/datum/reagent/consumable/vitfro = 50, /datum/reagent/consumable/ethanol/rum = 50, /datum/reagent/ash = 10)
+ reagents_list = list(/datum/reagent/consumable/vitfro = 50, /datum/reagent/consumable/ethanol/rum = 30, /datum/reagent/ash = 10)
category = list("Beers")
build_path = /obj/item/export/bottle/greenroad
\ No newline at end of file
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
index 1ae1d3813b..a4abd6e183 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
@@ -87,9 +87,10 @@
name = "Conveyor Belt"
id = "conveyor_belt"
build_type = AUTOLATHE
- materials = list(MAT_METAL = 5000)
- build_path = /obj/item/conveyor_construct
+ materials = list(MAT_METAL = 3000)
+ build_path = /obj/item/stack/conveyor
category = list("initial", "Construction")
+ maxstack = 30
/datum/design/conveyor_switch
name = "Conveyor Belt Switch"
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 99cb5bf8ab..bef25456ca 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -307,6 +307,8 @@
build_type = PROTOLATHE
build_path = /obj/item/defibrillator/compact
materials = list(MAT_METAL = 16000, MAT_GLASS = 8000, MAT_SILVER = 6000, MAT_GOLD = 3000)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/////////////////////////////////////////
//////////Cybernetic Implants////////////
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 681195bcc3..fd68a393f9 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -573,7 +573,8 @@
else if(loc == user)
cooldown = TRUE
call(src,realProc)(user)
- addtimer(CALLBACK(src, .proc/cd), cooldownMax)
+ if(!QDELETED(src))
+ addtimer(CALLBACK(src, .proc/cd), cooldownMax)
else
to_chat(user, "You aren't quite sure what to do with this yet.")
diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm
index 46f5de168f..deafbcd02c 100644
--- a/code/modules/research/nanites/nanite_programs/utility.dm
+++ b/code/modules/research/nanites/nanite_programs/utility.dm
@@ -220,7 +220,7 @@
if(!iscarbon(host_mob))
return FALSE
var/mob/living/carbon/C = host_mob
- if(C.nutrition <= NUTRITION_LEVEL_STARVING)
+ if(C.nutrition <= NUTRITION_LEVEL_FED)
return FALSE
return ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm
index e5b30962ae..48e6f720b0 100644
--- a/code/modules/research/xenobiology/crossbreeding/burning.dm
+++ b/code/modules/research/xenobiology/crossbreeding/burning.dm
@@ -154,7 +154,7 @@ Burning extracts:
/obj/item/slimecross/burning/sepia/do_effect(mob/user)
user.visible_message("[src] shapes itself into a camera!")
- new /obj/item/camera/timefreeze(get_turf(user))
+ new /obj/item/camera/rewind(get_turf(user))
..()
/obj/item/slimecross/burning/cerulean
@@ -289,25 +289,88 @@ Burning extracts:
//Misc. things added
+//Rewind camera - I'm already Burning Sepia
+/obj/item/camera/rewind
+ name = "sepia-tinted camera"
+ desc = "They say a picture is like a moment stopped in time."
+ pictures_left = 1
+ pictures_max = 1
+ can_customise = FALSE
+ default_picture_name = "A nostalgic picture"
+ var/used = FALSE
+
+/datum/saved_bodypart
+ var/obj/item/bodypart/old_part
+ var/bodypart_type
+ var/brute_dam
+ var/burn_dam
+ var/stamina_dam
+
+/datum/saved_bodypart/New(obj/item/bodypart/part)
+ old_part = part
+ bodypart_type = part.type
+ brute_dam = part.brute_dam
+ burn_dam = part.burn_dam
+ stamina_dam = part.stamina_dam
+
+/mob/living/carbon/proc/apply_saved_bodyparts(list/datum/saved_bodypart/parts)
+ var/list/dont_chop = list()
+ for(var/zone in parts)
+ var/datum/saved_bodypart/saved_part = parts[zone]
+ var/obj/item/bodypart/already = get_bodypart(zone)
+ if(QDELETED(saved_part.old_part))
+ saved_part.old_part = new saved_part.bodypart_type
+ if(!already || already != saved_part.old_part)
+ saved_part.old_part.replace_limb(src, TRUE)
+ saved_part.old_part.heal_damage(INFINITY, INFINITY, INFINITY, null, FALSE)
+ saved_part.old_part.receive_damage(saved_part.brute_dam, saved_part.burn_dam, saved_part.stamina_dam)
+ dont_chop[zone] = TRUE
+ for(var/_part in bodyparts)
+ var/obj/item/bodypart/part = _part
+ if(dont_chop[part.body_zone])
+ continue
+ part.drop_limb(TRUE)
+
+/mob/living/carbon/proc/save_bodyparts()
+ var/list/datum/saved_bodypart/ret = list()
+ for(var/_part in bodyparts)
+ var/obj/item/bodypart/part = _part
+ var/datum/saved_bodypart/saved_part = new(part)
+
+ ret[part.body_zone] = saved_part
+ return ret
+
+/obj/item/camera/rewind/afterattack(atom/target, mob/user, flag)
+ if(!on || !pictures_left || !isturf(target.loc))
+ return
+ if(!used)//selfie time
+ if(user == target)
+ to_chat(user, "You take a selfie!")
+ else
+ to_chat(user, "You take a photo with [target]!")
+ to_chat(target, "[user] takes a photo with you!")
+ to_chat(target, "You'll remember this moment forever!")
+
+ used = TRUE
+ target.AddComponent(/datum/component/dejavu, 2)
+ .=..()
+
+//Timefreeze camera - Old Burning Sepia result. Kept in case admins want to spawn it
/obj/item/camera/timefreeze
name = "sepia-tinted camera"
desc = "They say a picture is like a moment stopped in time."
pictures_left = 1
pictures_max = 1
+ var/used = FALSE
/obj/item/camera/timefreeze/afterattack(atom/target, mob/user, flag)
if(!on || !pictures_left || !isturf(target.loc))
return
- new /obj/effect/timestop(get_turf(target), 2, 50, list(user))
- . = ..()
- var/text = "The camera fades away"
- if(disk)
- text += ", leaving the disk behind!"
- user.put_in_hands(disk)
- else
- text += "!"
- to_chat(user,"[text]")
- qdel(src)
+ if(!used) //refilling the film does not refill the timestop
+ new /obj/effect/timestop(get_turf(target), 2, 50, list(user))
+ used = TRUE
+ desc = "This camera has seen better days."
+ return ..()
/obj/item/slimepotion/extract_cloner
name = "extract cloning potion"
diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
index 55865d1ae2..d230c22d2f 100644
--- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm
+++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
@@ -148,8 +148,9 @@ Regenerative extracts:
/obj/item/slimecross/regenerative/sepia
colour = "sepia"
-/obj/item/slimecross/regenerative/sepia/core_effect(mob/living/target, mob/user)
- new /obj/effect/timestop(get_turf(target), 2, 50, list(user,target))
+/obj/item/slimecross/regenerative/sepia/core_effect_before(mob/living/target, mob/user)
+ to_chat(target, "You try to forget how you feel.")
+ target.AddComponent(/datum/component/dejavu)
/obj/item/slimecross/regenerative/cerulean
colour = "cerulean"
diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm
index dc721506a5..8648e46cb9 100644
--- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm
+++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm
@@ -12,6 +12,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
var/datum/map_template/hilbertshotel/lore/hotelRoomTempLore
var/list/activeRooms = list()
var/list/storedRooms = list()
+ var/list/checked_in_ckeys = list()
var/storageTurf
//Lore Stuff
var/ruinSpawned = FALSE
@@ -44,7 +45,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
/obj/item/hilbertshotel/proc/promptAndCheckIn(mob/user)
var/chosenRoomNumber = input(user, "What number room will you be checking into?", "Room Number") as null|num
- if(!chosenRoomNumber)
+ if(!chosenRoomNumber || !user.CanReach(src))
return
if(chosenRoomNumber > SHORT_REAL_LIMIT)
to_chat(user, "You have to check out the first [SHORT_REAL_LIMIT] rooms before you can go to a higher numbered one!")
@@ -52,8 +53,8 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
if((chosenRoomNumber < 1) || (chosenRoomNumber != round(chosenRoomNumber)))
to_chat(user, "That is not a valid room number!")
return
- if(ismob(loc))
- if(user == loc) //Not always the same as user
+ if(!isturf(loc))
+ if((loc == user) || (loc.loc == user) || (loc.loc in user.contents) || (loc in user.GetAllContents(type))) //short circuit, first three checks are cheaper and covers almost all cases (loc.loc covers hotel in box in backpack).
forceMove(get_turf(user))
if(!storageTurf) //Blame subsystems for not allowing this to be in Initialize
if(!GLOB.hhStorageTurf)
@@ -63,13 +64,13 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
GLOB.hhStorageTurf = locate(storageReservation.bottom_left_coords[1]+1, storageReservation.bottom_left_coords[2]+1, storageReservation.bottom_left_coords[3])
else
storageTurf = GLOB.hhStorageTurf
+ checked_in_ckeys |= user.ckey //if anything below runtimes, guess you're outta luck!
if(tryActiveRoom(chosenRoomNumber, user))
return
if(tryStoredRoom(chosenRoomNumber, user))
return
sendToNewRoom(chosenRoomNumber, user)
-
/obj/item/hilbertshotel/proc/tryActiveRoom(var/roomNumber, var/mob/user)
if(activeRooms["[roomNumber]"])
var/datum/turf_reservation/roomReservation = activeRooms["[roomNumber]"]
@@ -102,6 +103,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
else
return FALSE
+/// This is a BLOCKING OPERATION. Note the room load call, and the block reservation calls.
/obj/item/hilbertshotel/proc/sendToNewRoom(var/roomNumber, var/mob/user)
var/datum/turf_reservation/roomReservation = SSmapping.RequestBlockReservation(hotelRoomTemp.width, hotelRoomTemp.height)
if(ruinSpawned)
@@ -200,7 +202,6 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
name = "Hilbert's Hotel Storage"
mappath = '_maps/templates/hilbertshotelstorage.dmm'
-
//Turfs and Areas
/turf/closed/indestructible/hotelwall
name = "hotel wall"
@@ -359,6 +360,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
. = ..()
if(ismob(AM))
var/mob/M = AM
+ parentSphere?.checked_in_ckeys -= M.ckey
if(M.mind)
var/stillPopulated = FALSE
var/list/currentLivingMobs = GetAllContents(/mob/living) //Got to catch anyone hiding in anything
diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm
index 73a428af71..5ba85bef6b 100644
--- a/code/modules/spells/spell_types/aimed.dm
+++ b/code/modules/spells/spell_types/aimed.dm
@@ -94,9 +94,9 @@
name = "Lightning Bolt"
desc = "Fire a high powered lightning bolt at your foes!"
school = "evocation"
- charge_max = 200
+ charge_max = 150
clothes_req = 1
- invocation = "UN'LTD P'WAH"
+ invocation = "ZAP MUTHA'FUCKA"
invocation_type = "shout"
cooldown_min = 30
active_icon_state = "lightning"
@@ -112,12 +112,12 @@
name = "Fireball"
desc = "This spell fires a fireball at a target and does not require wizard garb."
school = "evocation"
- charge_max = 60
+ charge_max = 100
clothes_req = 0
invocation = "ONI SOMA"
invocation_type = "shout"
range = 20
- cooldown_min = 20 //10 deciseconds reduction per rank
+ cooldown_min = 20 //20 deciseconds reduction per rank
projectile_type = /obj/item/projectile/magic/aoe/fireball
base_icon_state = "fireball"
action_icon_state = "fireball0"
diff --git a/code/modules/spells/spell_types/emplosion.dm b/code/modules/spells/spell_types/emplosion.dm
index a5ba0a3914..98723273ae 100644
--- a/code/modules/spells/spell_types/emplosion.dm
+++ b/code/modules/spells/spell_types/emplosion.dm
@@ -1,6 +1,8 @@
/obj/effect/proc_holder/spell/targeted/emplosion
name = "Emplosion"
desc = "This spell emplodes an area."
+ charge_max = 250
+ cooldown_min = 50
var/emp_heavy = 2
var/emp_light = 3
diff --git a/code/modules/spells/spell_types/forcewall.dm b/code/modules/spells/spell_types/forcewall.dm
index ed78e3315a..aa2fa5ab8b 100644
--- a/code/modules/spells/spell_types/forcewall.dm
+++ b/code/modules/spells/spell_types/forcewall.dm
@@ -2,7 +2,7 @@
name = "Forcewall"
desc = "Create a magical barrier that only you can pass through. Does not require wizard garb."
school = "transmutation"
- charge_max = 100
+ charge_max = 80
clothes_req = 0
invocation = "TARCOL MINTI ZHERI"
invocation_type = "shout"
@@ -10,7 +10,7 @@
action_icon_state = "shield"
range = -1
include_user = 1
- cooldown_min = 50 //12 deciseconds reduction per rank
+ cooldown_min = 15 //15 deciseconds reduction per rank
var/wall_type = /obj/effect/forcefield/wizard
/obj/effect/proc_holder/spell/targeted/forcewall/cast(list/targets,mob/user = usr)
diff --git a/code/modules/spells/spell_types/lightning.dm b/code/modules/spells/spell_types/lightning.dm
index 8363e28624..56d7dc771f 100644
--- a/code/modules/spells/spell_types/lightning.dm
+++ b/code/modules/spells/spell_types/lightning.dm
@@ -2,7 +2,7 @@
name = "Tesla Blast"
desc = "Blast lightning at your foes!"
charge_type = "recharge"
- charge_max = 300
+ charge_max = 270
clothes_req = 1
invocation = "UN'LTD P'WAH!"
invocation_type = "shout"
diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm
index a2d7612681..e098fe389d 100644
--- a/code/modules/spells/spell_types/wizard.dm
+++ b/code/modules/spells/spell_types/wizard.dm
@@ -152,19 +152,21 @@
sound1 = 'sound/magic/teleport_diss.ogg'
sound2 = 'sound/magic/teleport_app.ogg'
-/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
+/obj/effect/proc_holder/spell/aoe_turf/timestop
name = "Stop Time"
desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen."
charge_max = 500
clothes_req = 1
- invocation = "TOKI WO TOMARE"
+ invocation = "TOKI YO TOMARE"
invocation_type = "shout"
range = 0
cooldown_min = 100
- summon_amt = 1
action_icon_state = "time"
+ var/timestop_range = 2
+ var/timestop_duration = 100
- summon_type = list(/obj/effect/timestop/wizard)
+/obj/effect/proc_holder/spell/aoe_turf/timestop/cast(list/targets, mob/user = usr)
+ new /obj/effect/timestop/magic(get_turf(user), timestop_range, timestop_duration, list(user))
/obj/effect/proc_holder/spell/aoe_turf/conjure/carp
name = "Summon Carp"
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 93ed149a2b..b2beeebe78 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -84,6 +84,8 @@
to_chat(owner, "You feel a faint buzzing as your reviver implant starts patching your wounds...")
/obj/item/organ/cyberimp/chest/reviver/proc/heal()
+ if(!owner)
+ return
if(owner.getOxyLoss())
owner.adjustOxyLoss(-5)
revive_cost += 0.5 SECONDS
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index 2ddbd672c5..c09d1ac1fc 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -43,7 +43,7 @@
else
eye_color = H.eye_color
if(!special)
- H.dna?.species?.handle_body() //regenerate eyeballs overlays.
+ H.dna?.species?.handle_body(H) //regenerate eyeballs overlays.
M.update_tint()
owner.update_sight()
diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm
index bc59ee397c..fc70e64a82 100755
--- a/code/modules/surgery/organs/liver.dm
+++ b/code/modules/surgery/organs/liver.dm
@@ -60,9 +60,10 @@
//Just in case
/obj/item/organ/liver/Remove(mob/living/carbon/M, special = 0)
..()
- M.remove_movespeed_modifier(LIVER_SWELLING_MOVE_MODIFY)
- M.ResetBloodVol() //At the moment, this shouldn't allow application twice. You either have this OR a thirsty ferret.
- sizeMoveMod(1, M)
+ if(!QDELETED(M))
+ M.remove_movespeed_modifier(LIVER_SWELLING_MOVE_MODIFY)
+ M.ResetBloodVol() //At the moment, this shouldn't allow application twice. You either have this OR a thirsty ferret.
+ sizeMoveMod(1, M)
//Applies some of the effects to the patient.
/obj/item/organ/liver/proc/pharmacokinesis()
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 18dc34e34b..3acdf6c827 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -164,4 +164,4 @@
//Discounts (dynamically filled above)
/datum/uplink_item/discounts
- category = "Discounted Gear"
+ category = "Discounted Gear"
\ No newline at end of file
diff --git a/code/modules/uplink/uplink_items/uplink_devices.dm b/code/modules/uplink/uplink_items/uplink_devices.dm
index 70c70a61b9..7ed84ffdf4 100644
--- a/code/modules/uplink/uplink_items/uplink_devices.dm
+++ b/code/modules/uplink/uplink_items/uplink_devices.dm
@@ -135,6 +135,12 @@
item = /obj/item/aiModule/syndicate
cost = 9
+/datum/uplink_item/device_tools/headsetupgrade
+ name = "Headset Upgrader"
+ desc = "A device that can be used to make one headset immune to flashbangs."
+ item = /obj/item/headsetupgrader
+ cost = 3
+
/datum/uplink_item/device_tools/medgun
name = "Medbeam Gun"
desc = "A wonder of Syndicate engineering, the Medbeam gun, or Medi-Gun enables a medic to keep his fellow \
diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm
index ce5f0bf03a..f567c9765e 100644
--- a/code/modules/vending/cigarette.dm
+++ b/code/modules/vending/cigarette.dm
@@ -13,7 +13,8 @@
/obj/item/lighter/greyscale = 4,
/obj/item/storage/fancy/rollingpapers = 5)
contraband = list(/obj/item/lighter = 3,
- /obj/item/clothing/mask/vape = 5)
+ /obj/item/clothing/mask/vape = 5,
+ /obj/item/storage/fancy/cigarettes/cigpack_shadyjims = 1)
premium = list(/obj/item/storage/fancy/cigarettes/cigpack_robustgold = 3,
/obj/item/storage/fancy/cigarettes/cigars = 1,
/obj/item/storage/fancy/cigarettes/cigars/havana = 1,
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index 0b1d8e1072..af720f6d4e 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -144,7 +144,13 @@
/obj/item/clothing/head/cowboyhat/white = 3,
/obj/item/clothing/head/cowboyhat/pink = 3,
/obj/item/clothing/shoes/cowboyboots = 3,
- /obj/item/clothing/shoes/cowboyboots/black = 3)
+ /obj/item/clothing/shoes/cowboyboots/black = 3,
+ /obj/item/clothing/under/lunar/qipao = 3,
+ /obj/item/clothing/under/lunar/qipao/white = 3,
+ /obj/item/clothing/under/lunar/qipao/red = 3,
+ /obj/item/clothing/under/lunar/cheongsam = 3,
+ /obj/item/clothing/under/lunar/cheongsam/white = 3,
+ /obj/item/clothing/under/lunar/cheongsam/red = 3)
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
/obj/item/clothing/mask/balaclava = 3,
diff --git a/code/modules/vore/eating/belly_obj.dm b/code/modules/vore/eating/belly_obj.dm
index ad54c8a0c8..f88f6bd6e8 100644
--- a/code/modules/vore/eating/belly_obj.dm
+++ b/code/modules/vore/eating/belly_obj.dm
@@ -1,4 +1,5 @@
-//#define VORE_SOUND_FALLOFF 0.05
+#define VORE_SOUND_FALLOFF 0.1
+#define VORE_SOUND_RANGE 3
//
// Belly system 2.0, now using objects instead of datums because EH at datums.
@@ -164,7 +165,12 @@
. = ..()
// Called whenever an atom enters this belly
-/obj/belly/Entered(var/atom/movable/thing,var/atom/OldLoc)
+/obj/belly/Entered(atom/movable/thing, atom/OldLoc)
+ . = ..()
+ var/mob/living/L //for chat messages and blindness
+ if(isliving(thing))
+ L = thing
+ L.become_blind("belly_[REF(src)]")
if(OldLoc in contents)
return //Someone dropping something (or being stripdigested)
@@ -175,7 +181,7 @@
if(vore_sound && !recent_sound)
if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
+ for(var/mob/living/H in get_hearers_in_view(VORE_SOUND_RANGE, owner))
if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
continue
LAZYADD(hearing_mobs, H)
@@ -189,11 +195,14 @@
SEND_SOUND(H,eating)
recent_sound = TRUE
- //Messages if it's a mob
- if(isliving(thing))
- var/mob/living/M = thing
- if(desc)
- to_chat(M, "[desc]")
+ if(L && desc)
+ to_chat(L, "[desc]")
+
+/obj/belly/Exited(atom/movable/AM, atom/newloc)
+ . = ..()
+ if(isliving(AM))
+ var/mob/living/L = AM
+ L.cure_blind("belly_[REF(src)]")
// Release all contents of this belly into the owning mob's location.
// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in.
@@ -214,7 +223,6 @@
continue
L.absorbed = FALSE
L.stop_sound_channel(CHANNEL_PREYLOOP)
- L.cure_blind("belly_[REF(src)]")
SEND_SIGNAL(OW, COMSIG_CLEAR_MOOD_EVENT, "fedpred", /datum/mood_event/fedpred)
SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
SEND_SIGNAL(OW, COMSIG_ADD_MOOD_EVENT, "emptypred", /datum/mood_event/emptypred)
@@ -229,7 +237,7 @@
if(release_sound && !recent_sound)
if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
+ for(var/mob/living/H in get_hearers_in_view(VORE_SOUND_RANGE, owner))
if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
continue
LAZYADD(hearing_mobs, H)
@@ -237,7 +245,7 @@
for(var/mob/living/H in hearing_mobs)
if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
var/sound/releasement = GLOB.pred_release_sounds[release_sound]
- SEND_SOUND(H,releasement)
+ H.playsound_local(owner.loc, releasement, vol = 75, vary = 1, falloff = VORE_SOUND_FALLOFF)
else if(H && H in contents && H.client)
var/sound/releasement = GLOB.prey_release_sounds[release_sound]
SEND_SOUND(H,releasement)
@@ -262,7 +270,6 @@
var/mob/living/OW = owner
if(ML.client)
ML.stop_sound_channel(CHANNEL_PREYLOOP) //Stop the internal loop, it'll restart if the isbelly check on next tick anyway
- ML.cure_blind("belly_[REF(src)]")
SEND_SIGNAL(OW, COMSIG_CLEAR_MOOD_EVENT, "fedpred", /datum/mood_event/fedpred)
SEND_SIGNAL(ML, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey)
SEND_SIGNAL(OW, COMSIG_ADD_MOOD_EVENT, "emptypred", /datum/mood_event/emptypred)
@@ -294,7 +301,7 @@
for(var/mob/living/H in hearing_mobs)
if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
var/sound/releasement = GLOB.pred_release_sounds[release_sound]
- SEND_SOUND(H,releasement)
+ H.playsound_local(owner.loc, releasement, vol = 75, vary = 1, falloff = VORE_SOUND_FALLOFF)
else if(H && H in contents && H.client)
var/sound/releasement = GLOB.prey_release_sounds[release_sound]
SEND_SOUND(H,releasement)
@@ -325,7 +332,6 @@
for(var/mob/living/M in contents)
M.updateVRPanel()
- M.become_blind("belly_[REF(src)]")
// Setup the autotransfer checks if needed
if(transferlocation != null && autotransferchance > 0)
@@ -345,13 +351,11 @@
if(!(content in src) || !istype(target))
return
content.forceMove(target)
- for(var/mob/living/M in contents)
- M.cure_blind("belly_[REF(src)]")
-// target.nom_mob(content, target.owner)
+
if(vore_sound && !recent_sound && !silent)
if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
+ for(var/mob/living/H in get_hearers_in_view(VORE_SOUND_RANGE, owner))
if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
continue
LAZYADD(hearing_mobs, H)
@@ -359,7 +363,7 @@
for(var/mob/living/H in hearing_mobs)
if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
var/sound/eating = GLOB.pred_vore_sounds[vore_sound]
- SEND_SOUND(H,eating)
+ H.playsound_local(owner.loc, eating, vol = 75, vary = 1, falloff = VORE_SOUND_FALLOFF)
else if(H && H in contents && H.client)
var/sound/eating = GLOB.prey_vore_sounds[vore_sound]
SEND_SOUND(H,eating)
@@ -576,7 +580,7 @@
var/sound/struggle_rustle = sound(get_sfx("rustle"))
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
+ for(var/mob/living/H in get_hearers_in_view(VORE_SOUND_RANGE, owner))
if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
continue
LAZYADD(hearing_mobs, H)
@@ -584,14 +588,14 @@
if(is_wet)
for(var/mob/living/H in hearing_mobs)
if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
- SEND_SOUND(H,pred_struggle_snuggle)
+ H.playsound_local(owner.loc, pred_struggle_snuggle, vol = 75, vary = 1, falloff = VORE_SOUND_FALLOFF)
else if(H && H in contents && H.client)
SEND_SOUND(H,prey_struggle_snuggle)
else
for(var/mob/living/H in hearing_mobs)
if(H && H.client)
- SEND_SOUND(H, struggle_rustle)
+ H.playsound_local(owner.loc, struggle_rustle, vol = 75, vary = 1, falloff = VORE_SOUND_FALLOFF)
for(var/mob/living/H in hearing_mobs)
if(H && H.client && (isturf(H.loc)))
diff --git a/code/modules/vore/eating/bellymodes.dm b/code/modules/vore/eating/bellymodes.dm
index 0ecaf49abc..6942a2d5a9 100644
--- a/code/modules/vore/eating/bellymodes.dm
+++ b/code/modules/vore/eating/bellymodes.dm
@@ -18,7 +18,8 @@
return SSBELLIES_PROCESSED
next_process = times_fired + (6 SECONDS/wait) //Set up our next process time.
- var/to_update = FALSE
+ var/play_sound //Potential sound to play at the end to avoid code duplication.
+ var/to_update = FALSE //Did anything update worthy happen?
/////////////////////////// Auto-Emotes ///////////////////////////
if(contents.len && next_emote <= times_fired)
@@ -40,7 +41,7 @@
if(M.client.prefs.cit_toggles & DIGESTION_NOISES)
var/sound/preyloop = sound('sound/vore/prey/loop.ogg')
M.playsound_local(get_turf(src),preyloop, 80,0, channel = CHANNEL_PREYLOOP)
- M.next_preyloop = (world.time + 51 SECONDS)
+ M.next_preyloop = (world.time + 52 SECONDS)
/////////////////////////// Exit Early ////////////////////////////
@@ -71,18 +72,9 @@
for (var/mob/living/M in contents)
if(prob(25))
- if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
- LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
- if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
- continue
- LAZYADD(hearing_mobs, H)
- last_hearcheck = world.time
- for(var/mob/living/H in hearing_mobs)
- if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
- SEND_SOUND(H,pred_digest)
- else if(H && H in contents && H.client)
- SEND_SOUND(H,prey_digest)
+ if(M && M.client && M.client.prefs.cit_toggles & DIGESTION_NOISES)
+ SEND_SOUND(M,prey_digest)
+ play_sound = pick(pred_digest)
//Pref protection!
if (!M.digestable || M.absorbed)
@@ -108,18 +100,9 @@
M.visible_message("You watch as [owner]'s form loses its additions.")
owner.nutrition += 400 // so eating dead mobs gives you *something*.
- if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
- LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
- if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
- continue
- LAZYADD(hearing_mobs, H)
- last_hearcheck = world.time
- for(var/mob/living/H in hearing_mobs)
- if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
- SEND_SOUND(H,pred_death)
- else if(H && H in contents && H.client)
- SEND_SOUND(H,prey_death)
+ play_sound = pick(pred_death)
+ if(M && M.client && M.client.prefs.cit_toggles & DIGESTION_NOISES)
+ SEND_SOUND(M,prey_death)
M.stop_sound_channel(CHANNEL_PREYLOOP)
digestion_death(M)
owner.update_icons()
@@ -142,19 +125,9 @@
if(digest_mode == DM_HEAL)
for (var/mob/living/M in contents)
if(prob(25))
- if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
- LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
- if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
- continue
- LAZYADD(hearing_mobs, H)
- last_hearcheck = world.time
- for(var/mob/living/H in hearing_mobs)
- if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
- SEND_SOUND(H,pred_digest)
- else if(H && H in contents && H.client)
- SEND_SOUND(H,prey_digest)
-
+ if(M && M.client && M.client.prefs.cit_toggles & DIGESTION_NOISES)
+ SEND_SOUND(M,prey_digest)
+ play_sound = pick(pred_digest)
if(M.stat != DEAD)
if(owner.nutrition >= NUTRITION_LEVEL_STARVING && (M.health < M.maxHealth))
M.adjustBruteLoss(-3)
@@ -165,18 +138,10 @@
//for when you just want people to squelch around
if(digest_mode == DM_NOISY)
if(prob(35))
- if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
- LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
- if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
- continue
- LAZYADD(hearing_mobs, H)
- last_hearcheck = world.time
- for(var/mob/living/H in hearing_mobs)
- if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
- SEND_SOUND(H,pred_digest)
- else if(H && H in contents && H.client)
- SEND_SOUND(H,prey_digest)
+ for(var/mob/M in contents)
+ if(M && M.client && M.client.prefs.cit_toggles & DIGESTION_NOISES)
+ SEND_SOUND(M,prey_digest)
+ play_sound = pick(pred_digest)
//////////////////////////// DM_ABSORB ////////////////////////////
@@ -185,18 +150,9 @@
for (var/mob/living/M in contents)
if(prob(10))//Less often than gurgles. People might leave this on forever.
- if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
- LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
- if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
- continue
- LAZYADD(hearing_mobs, H)
- last_hearcheck = world.time
- for(var/mob/living/H in hearing_mobs)
- if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
- SEND_SOUND(H,pred_digest)
- else if(H && H in contents && H.client)
- SEND_SOUND(H,prey_digest)
+ if(M && M.client && M.client.prefs.cit_toggles & DIGESTION_NOISES)
+ SEND_SOUND(M,prey_digest)
+ play_sound = pick(pred_digest)
if(M.absorbed)
continue
@@ -262,18 +218,9 @@
to_chat(owner, "[digest_alert_owner]")
to_chat(M, "[digest_alert_prey]")
M.visible_message("You watch as [owner]'s guts loudly rumble as it finishes off a meal.")
- if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
- LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, owner))
- if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
- continue
- LAZYADD(hearing_mobs, H)
- last_hearcheck = world.time
- for(var/mob/living/H in hearing_mobs)
- if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
- SEND_SOUND(H,pred_death)
- else if(H && H in contents && H.client)
- SEND_SOUND(H,prey_death)
+ play_sound = pick(pred_death)
+ if(M && M.client && M.client.prefs.cit_toggles & DIGESTION_NOISES)
+ SEND_SOUND(M,prey_death)
M.spill_organs(FALSE,TRUE,TRUE)
M.stop_sound_channel(CHANNEL_PREYLOOP)
digestion_death(M)
@@ -293,6 +240,19 @@
if(istype(T,/obj/item/reagent_containers/food) || istype(T,/obj/item/organ))
digest_item(T)
+/////////////////////////// Make any noise ///////////////////////////
+ if(play_sound)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
+ LAZYCLEARLIST(hearing_mobs)
+ for(var/mob/M in hearers(VORE_SOUND_RANGE, owner))
+ if(!M.client || !(M.client.prefs.cit_toggles & DIGESTION_NOISES))
+ continue
+ LAZYADD(hearing_mobs, M)
+ last_hearcheck = world.time
+ for(var/mob/M in hearing_mobs) //so we don't fill the whole room with the sound effect
+ if(M && M.client && (isturf(M.loc) || (M.loc != src.contents))) //to avoid people on the inside getting the outside sounds and their direct sounds + built in sound pref check
+ M.playsound_local(owner.loc, play_sound, vol = 75, vary = 1, falloff = VORE_SOUND_FALLOFF)
+ //these are all external sound triggers now, so it's ok.
if(to_update)
for(var/mob/living/M in contents)
if(M.client)
diff --git a/html/changelogs/AutoChangeLog-pr-10073.yml b/html/changelogs/AutoChangeLog-pr-10073.yml
new file mode 100644
index 0000000000..6764500fe5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10073.yml
@@ -0,0 +1,28 @@
+author: "4dplanner, CRITAWAKETS, XDTM, ninjanomnom"
+delete-after: True
+changes:
+ - rscadd: "sepia slime extract has a delay before activating"
+ - balance: "the user of a sepia slime extract is no longer immune to the time field"
+ - balance: "chilling sepia is now the support extract - it always freezes the user, but not other marked people. give one to your golem!"
+ - rscadd: "burning sepia spawns the rewind camera. Take a selfie with someone and give it to them to make sure they remember the moment forever! You don't actually need to give them the photo, they'll remember anyway. Keep it as a reminder."
+ - rscadd: "rewinding (deja vu) effect resets your location to the turf you were on after 10 seconds as well as resetting limbs/mobs/objects damage to the point it was added."
+ - rscadd: "The deja vu effect cannot resurrect the dead, but will heal their corpse. New limbs fall off, old ones re-attach"
+ - rscadd: "Regenerative sepia cores add a deja vu effect before healing instead of a timestop
+remove: timefreeze camera is admin spawn only."
+ - rscadd: "recurring sepia recalls to the hand of the last person to touch it after activating. Reusable timestop grenades!"
+ - tweak: "some special cameras don't prompt for customisation"
+ - bugfix: "timefreeze camera actually makes a photo"
+ - bugfix: "timestop stops pathing and mechs."
+ - bugfix: "adds a check to make sure simple_animals don't get their AI toggled while sentient"
+ - bugfix: "Adds the timestop overlay to frozen projectiles"
+ - bugfix: "Timestopped things have INFINITY move_resist as opposed to being anchored"
+ - bugfix: "Timestop will now unfreeze things that somehow leave it"
+ - bugfix: "mobs in the middle of a walk_to will have their walk stopped by timestop"
+ - bugfix: "mobs that are stunned will be stopped mid walk as well"
+ - bugfix: "pulling respects changes in move_force"
+ - bugfix: "swapping places respects move_force if the participant is not willing"
+ - bugfix: "timestop is properly defeated by antimagic."
+ - bugfix: "timestop only checks antimagic once"
+ - tweak: "Time stop now applies its visual effect on floors, walls and static structures (with no change otherwise)"
+ - tweak: "Movable structures are now anchored while time stopped."
+ - tweak: "Timestop effects now prevent speech."
diff --git a/html/changelogs/AutoChangeLog-pr-10410.yml b/html/changelogs/AutoChangeLog-pr-10410.yml
new file mode 100644
index 0000000000..c6c9d24749
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10410.yml
@@ -0,0 +1,4 @@
+author: "CameronWoof"
+delete-after: True
+changes:
+ - tweak: "Lizard tails are now viable options for humans and anthromorphs."
diff --git a/html/changelogs/AutoChangeLog-pr-10450.yml b/html/changelogs/AutoChangeLog-pr-10450.yml
new file mode 100644
index 0000000000..d2c5d8b40a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10450.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "emitters are now hitscan"
diff --git a/html/changelogs/AutoChangeLog-pr-10468.yml b/html/changelogs/AutoChangeLog-pr-10468.yml
new file mode 100644
index 0000000000..055411d0f2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10468.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "Ghosting no longer stops abductors from using you."
diff --git a/html/changelogs/AutoChangeLog-pr-10526.yml b/html/changelogs/AutoChangeLog-pr-10526.yml
new file mode 100644
index 0000000000..d5f9b8f1b0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10526.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "traitor tool for bowmanizing headsets + bowmanizing headsets"
diff --git a/html/changelogs/AutoChangeLog-pr-10588.yml b/html/changelogs/AutoChangeLog-pr-10588.yml
new file mode 100644
index 0000000000..d3771298b2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10588.yml
@@ -0,0 +1,4 @@
+author: "PersianXerxes"
+delete-after: True
+changes:
+ - tweak: "Reduces the range of the forcefield projector from 7 tiles to 2 tiles."
diff --git a/html/changelogs/AutoChangeLog-pr-10598.yml b/html/changelogs/AutoChangeLog-pr-10598.yml
new file mode 100644
index 0000000000..91b52b7043
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10598.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - balance: "Metabolic synthesis disables if user isn't well-fed rather than if user is starving"
diff --git a/html/changelogs/AutoChangeLog-pr-10602.yml b/html/changelogs/AutoChangeLog-pr-10602.yml
new file mode 100644
index 0000000000..9394c83671
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10602.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed a little exploit with ventcrawlers being capable of escaping closed turfs by printing scrubbers/vents into them."
diff --git a/html/changelogs/AutoChangeLog-pr-10603.yml b/html/changelogs/AutoChangeLog-pr-10603.yml
new file mode 100644
index 0000000000..0f1acbf0be
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10603.yml
@@ -0,0 +1,4 @@
+author: "KeRSedChaplain"
+delete-after: True
+changes:
+ - imageadd: "The clockwork cuirass can now support slithering taur bodies."
diff --git a/html/changelogs/AutoChangeLog-pr-10606.yml b/html/changelogs/AutoChangeLog-pr-10606.yml
new file mode 100644
index 0000000000..c6cc269cbe
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10606.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - refactor: "better code for passive vents"
diff --git a/html/changelogs/AutoChangeLog-pr-10608.yml b/html/changelogs/AutoChangeLog-pr-10608.yml
new file mode 100644
index 0000000000..1c2015813e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10608.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "you can now block people on your PDA"
diff --git a/html/changelogs/AutoChangeLog-pr-10609.yml b/html/changelogs/AutoChangeLog-pr-10609.yml
new file mode 100644
index 0000000000..e28d929687
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10609.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - balance: "Cold-blooded costs -2 quirk points now"
diff --git a/html/changelogs/AutoChangeLog-pr-10610.yml b/html/changelogs/AutoChangeLog-pr-10610.yml
new file mode 100644
index 0000000000..e413574fa1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10610.yml
@@ -0,0 +1,8 @@
+author: "Owai-Seek"
+delete-after: True
+changes:
+ - rscadd: "Four New Bounties"
+ - tweak: "tweaked several bounties"
+ - tweak: "reorganised several bounties"
+ - balance: "balanced several bounties"
+ - bugfix: "added shady jims to vendor"
diff --git a/html/changelogs/AutoChangeLog-pr-10619.yml b/html/changelogs/AutoChangeLog-pr-10619.yml
new file mode 100644
index 0000000000..acb76034ac
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10619.yml
@@ -0,0 +1,7 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - tweak: "conveyor belt now are stacks instead of single item"
+ - tweak: "conveyor crate has 30 belts"
+ - tweak: "printing a conveyor costs 3000 metal"
+ - rscadd: "you can press the conveyor switch in hand to link any not deployed belts to it"
diff --git a/html/changelogs/AutoChangeLog-pr-10620.yml b/html/changelogs/AutoChangeLog-pr-10620.yml
new file mode 100644
index 0000000000..8f5c990234
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10620.yml
@@ -0,0 +1,4 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - balance: "Dropped Exo-suit armor to put it more in line with being an explorer suit sidegrade and not a straight upgrade for Lavaland usage."
diff --git a/html/changelogs/AutoChangeLog-pr-10622.yml b/html/changelogs/AutoChangeLog-pr-10622.yml
new file mode 100644
index 0000000000..3aa4159cb8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10622.yml
@@ -0,0 +1,11 @@
+author: "Owai-Seek"
+delete-after: True
+changes:
+ - rscadd: "Towel, Bedsheet, and Colored bedsheet bins to Dojo. Some lockers with carpets and wood, another bathroom/shower, tons of cleaning supplies, some additional trash cans, a tiny medical area, and some vendors/vendor resupplies. Also added some Ambrosia Gaia seeds."
+ - tweak: "Moved some lights around, extended the dojo a bit to make it feel more spacious."
+ - rscdel: "Cafe Newsfeed Frame"
+ - rscadd: "Towel, Bedsheet, and Colored bedsheet bins to Dojo. Some lockers with carpets and wood, another bathroom/shower, tons of cleaning supplies, some additional trash cans, a tiny medical area, and some vendors/vendor resupplies. Also added some Ambrosia Gaia seeds."
+ - tweak: "Moved some lights around, extended the dojo a bit to make it feel more spacious."
+ - rscdel: "Cafe Newsfeed Frame"
+ - rscadd: "Towel, Bedsheet, and Colored bedsheet bins to Dojo. Some lockers with carpets and wood, another bathroom/shower, tons of cleaning supplies, some additional trash cans, a tiny medical area, and some vendors/vendor resupplies. Also added some Ambrosia Gaia seeds."
+ - tweak: "Moved some lights around, extended the dojo a bit to make it feel more spacious."
diff --git a/html/changelogs/AutoChangeLog-pr-10628.yml b/html/changelogs/AutoChangeLog-pr-10628.yml
new file mode 100644
index 0000000000..f9d24a3a28
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10628.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "deconstructing a rubber toolbox with the destructive analyzer won't \"lock\" the machine anymore."
diff --git a/html/changelogs/AutoChangeLog-pr-10630.yml b/html/changelogs/AutoChangeLog-pr-10630.yml
new file mode 100644
index 0000000000..ca4e75fdf1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10630.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "Cloning has been nerfed."
diff --git a/html/changelogs/AutoChangeLog-pr-10632.yml b/html/changelogs/AutoChangeLog-pr-10632.yml
new file mode 100644
index 0000000000..39d74002e4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10632.yml
@@ -0,0 +1,5 @@
+author: "Commandersand"
+delete-after: True
+changes:
+ - balance: "lightning bolt,tesla,forcewall,emp spells have lower cooldown"
+ - balance: "fireball has a 10 second starting cooldown"
diff --git a/html/changelogs/AutoChangeLog-pr-10636.yml b/html/changelogs/AutoChangeLog-pr-10636.yml
new file mode 100644
index 0000000000..a6354ef6b5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10636.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone, Ghommie"
+delete-after: True
+changes:
+ - rscadd: "More types of glass can now be used to make a solar panel, with different sturdiness and efficiency depending the type."
diff --git a/html/changelogs/AutoChangeLog-pr-10640.yml b/html/changelogs/AutoChangeLog-pr-10640.yml
new file mode 100644
index 0000000000..f51f892d8d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10640.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - bugfix: "fixed a hole in Meta"
diff --git a/html/changelogs/AutoChangeLog-pr-10641.yml b/html/changelogs/AutoChangeLog-pr-10641.yml
new file mode 100644
index 0000000000..479729e1f2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10641.yml
@@ -0,0 +1,4 @@
+author: "jakeramsay007"
+delete-after: True
+changes:
+ - rscadd: "The assorted .357 revolvers (except russian revolver) can now also load .38, like real life."
diff --git a/html/changelogs/AutoChangeLog-pr-10643.yml b/html/changelogs/AutoChangeLog-pr-10643.yml
new file mode 100644
index 0000000000..8fd496e0bc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10643.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "tip of the round: Cleanbot can withstand lava and burning hot ash. Its a god"
diff --git a/html/changelogs/AutoChangeLog-pr-10645.yml b/html/changelogs/AutoChangeLog-pr-10645.yml
new file mode 100644
index 0000000000..16ef8b2056
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10645.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - rscadd: "Added the ability to easily add variations of the mining base"
diff --git a/html/changelogs/AutoChangeLog-pr-10650.yml b/html/changelogs/AutoChangeLog-pr-10650.yml
new file mode 100644
index 0000000000..d4794291d1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10650.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - rscadd: "Added modular computers to the loadout"
diff --git a/html/changelogs/AutoChangeLog-pr-10664.yml b/html/changelogs/AutoChangeLog-pr-10664.yml
new file mode 100644
index 0000000000..e38ce50b24
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10664.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - balance: "dragnet snares can now be removed in 5 seconds"
diff --git a/html/changelogs/AutoChangeLog-pr-10667.yml b/html/changelogs/AutoChangeLog-pr-10667.yml
new file mode 100644
index 0000000000..85a60c285a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10667.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Something about empty hand combat mode right click waving hands defying common sense and being spammy."
diff --git a/html/changelogs/AutoChangeLog-pr-10670.yml b/html/changelogs/AutoChangeLog-pr-10670.yml
new file mode 100644
index 0000000000..699ed044da
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10670.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - tweak: "sniffing sneezing etc doing anything if they don't breathe"
diff --git a/html/changelogs/AutoChangeLog-pr-10674.yml b/html/changelogs/AutoChangeLog-pr-10674.yml
new file mode 100644
index 0000000000..9b1a4dc551
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10674.yml
@@ -0,0 +1,4 @@
+author: "Xantholne"
+delete-after: True
+changes:
+ - rscadd: "Cheongsam and Qipao clothing added to loadout and clothesmates"
diff --git a/html/changelogs/AutoChangeLog-pr-10676.yml b/html/changelogs/AutoChangeLog-pr-10676.yml
new file mode 100644
index 0000000000..c586123b12
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10676.yml
@@ -0,0 +1,5 @@
+author: "Kraseo"
+delete-after: True
+changes:
+ - bugfix: "Virgo hairstyles no longer have those annoying quotation marks. Rejoice for you will no longer have to use the scrollbar."
+ - imagedel: "Got rid of some strange-looking hairstyles. (Tbob, fingerweave, etc.)"
diff --git a/html/changelogs/AutoChangeLog-pr-10677.yml b/html/changelogs/AutoChangeLog-pr-10677.yml
new file mode 100644
index 0000000000..060f4f4c62
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10677.yml
@@ -0,0 +1,6 @@
+author: "Arkatos, Zxaber, Ghommie"
+delete-after: True
+changes:
+ - rscadd: "Certain AI abilities now dynamically show their remaining uses on the mouse hover over their respective action buttons."
+ - bugfix: "Malfunctioning AIs can no longer abuse the confirmation popup to create extra (unstoppable) doomsdays."
+ - bugfix: "Fixed AIs being able to use some of their abilities such as the doomsday whilst dead, and the doomsday loading phase not halting upon AI death."
diff --git a/html/changelogs/AutoChangeLog-pr-10680.yml b/html/changelogs/AutoChangeLog-pr-10680.yml
new file mode 100644
index 0000000000..2d3fba0931
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10680.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - imageadd: "Towels are now \"digitigrade-friendly\"."
diff --git a/html/changelogs/AutoChangeLog-pr-10682.yml b/html/changelogs/AutoChangeLog-pr-10682.yml
new file mode 100644
index 0000000000..bf7b0c0929
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10682.yml
@@ -0,0 +1,4 @@
+author: "Skoglol"
+delete-after: True
+changes:
+ - bugfix: "Falsewalls now properly hide pipes and wires."
diff --git a/html/changelogs/AutoChangeLog-pr-10683.yml b/html/changelogs/AutoChangeLog-pr-10683.yml
new file mode 100644
index 0000000000..34941d30e8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10683.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "The Barefoot drink and mousetraps will now work even if wearing certain \"feet-less shoes\"."
diff --git a/html/changelogs/AutoChangeLog-pr-10688.yml b/html/changelogs/AutoChangeLog-pr-10688.yml
new file mode 100644
index 0000000000..e648139889
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10688.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "hilbert hotel is now less of an exploity mess"
diff --git a/html/changelogs/AutoChangeLog-pr-10691.yml b/html/changelogs/AutoChangeLog-pr-10691.yml
new file mode 100644
index 0000000000..31eecae15e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10691.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - bugfix: "probably fixes the make mentor button"
diff --git a/html/changelogs/AutoChangeLog-pr-10693.yml b/html/changelogs/AutoChangeLog-pr-10693.yml
new file mode 100644
index 0000000000..7d26bd31c8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10693.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - tweak: "the sprites for the conveyor belts to look more directional"
diff --git a/html/changelogs/AutoChangeLog-pr-10698.yml b/html/changelogs/AutoChangeLog-pr-10698.yml
new file mode 100644
index 0000000000..f08e006058
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10698.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - tweak: "Ghost cafe mobs are super duper attached to the ghost cafe."
diff --git a/html/changelogs/AutoChangeLog-pr-10718.yml b/html/changelogs/AutoChangeLog-pr-10718.yml
new file mode 100644
index 0000000000..c61959b81c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10718.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - bugfix: "fixed a sprite"
diff --git a/html/changelogs/AutoChangeLog-pr-9905.yml b/html/changelogs/AutoChangeLog-pr-9905.yml
new file mode 100644
index 0000000000..a0330b8103
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9905.yml
@@ -0,0 +1,7 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "more glassware"
+ - rscadd: "Few new packs and glassmaker kit!"
+ - tweak: "prices/chems of crates/autobottler"
+ - bugfix: "some crates ungettable as well as some broken crates"
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 772a263358..a22901d3e2 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi
index e181c65cdb..f8210ed48e 100644
Binary files a/icons/mob/suit_digi.dmi and b/icons/mob/suit_digi.dmi differ
diff --git a/icons/mob/taur_naga.dmi b/icons/mob/taur_naga.dmi
index 7214ec7073..479fa5c83a 100644
Binary files a/icons/mob/taur_naga.dmi and b/icons/mob/taur_naga.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 04e2e3cc75..b0ea63611d 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/atmospherics/components/binary_devices.dmi b/icons/obj/atmospherics/components/binary_devices.dmi
index 9c6a1b6a1f..3b47dddffc 100644
Binary files a/icons/obj/atmospherics/components/binary_devices.dmi and b/icons/obj/atmospherics/components/binary_devices.dmi differ
diff --git a/icons/obj/atmospherics/components/thermomachine.dmi b/icons/obj/atmospherics/components/thermomachine.dmi
index 2ff9dac031..9b11fa266f 100644
Binary files a/icons/obj/atmospherics/components/thermomachine.dmi and b/icons/obj/atmospherics/components/thermomachine.dmi differ
diff --git a/icons/obj/atmospherics/components/trinary_devices.dmi b/icons/obj/atmospherics/components/trinary_devices.dmi
index 6c96035c4a..5a6a62649e 100644
Binary files a/icons/obj/atmospherics/components/trinary_devices.dmi and b/icons/obj/atmospherics/components/trinary_devices.dmi differ
diff --git a/icons/obj/atmospherics/components/unary_devices.dmi b/icons/obj/atmospherics/components/unary_devices.dmi
index 3f09e99156..39be809a53 100644
Binary files a/icons/obj/atmospherics/components/unary_devices.dmi and b/icons/obj/atmospherics/components/unary_devices.dmi differ
diff --git a/icons/obj/atmospherics/pipes/he-junction.dmi b/icons/obj/atmospherics/pipes/he-junction.dmi
new file mode 100644
index 0000000000..b1ff675e3a
Binary files /dev/null and b/icons/obj/atmospherics/pipes/he-junction.dmi differ
diff --git a/icons/obj/atmospherics/pipes/he-manifold.dmi b/icons/obj/atmospherics/pipes/he-manifold.dmi
new file mode 100644
index 0000000000..bf062ae5b9
Binary files /dev/null and b/icons/obj/atmospherics/pipes/he-manifold.dmi differ
diff --git a/icons/obj/atmospherics/pipes/he-simple.dmi b/icons/obj/atmospherics/pipes/he-simple.dmi
new file mode 100644
index 0000000000..64e9f08420
Binary files /dev/null and b/icons/obj/atmospherics/pipes/he-simple.dmi differ
diff --git a/icons/obj/atmospherics/pipes/heat.dmi b/icons/obj/atmospherics/pipes/heat.dmi
deleted file mode 100644
index 132d11c3ab..0000000000
Binary files a/icons/obj/atmospherics/pipes/heat.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/pipes/junction.dmi b/icons/obj/atmospherics/pipes/junction.dmi
deleted file mode 100644
index f3ff732c56..0000000000
Binary files a/icons/obj/atmospherics/pipes/junction.dmi and /dev/null differ
diff --git a/icons/obj/atmospherics/pipes/manifold.dmi b/icons/obj/atmospherics/pipes/manifold.dmi
index 4eebe1a078..f936a8ea3d 100644
Binary files a/icons/obj/atmospherics/pipes/manifold.dmi and b/icons/obj/atmospherics/pipes/manifold.dmi differ
diff --git a/icons/obj/atmospherics/pipes/meter.dmi b/icons/obj/atmospherics/pipes/meter.dmi
index 7eabdc9de8..c4cc27d78c 100644
Binary files a/icons/obj/atmospherics/pipes/meter.dmi and b/icons/obj/atmospherics/pipes/meter.dmi differ
diff --git a/icons/obj/atmospherics/pipes/pipe_item.dmi b/icons/obj/atmospherics/pipes/pipe_item.dmi
index c16e4c1bbb..7d6d559a46 100644
Binary files a/icons/obj/atmospherics/pipes/pipe_item.dmi and b/icons/obj/atmospherics/pipes/pipe_item.dmi differ
diff --git a/icons/obj/atmospherics/pipes/pressure_tank.dmi b/icons/obj/atmospherics/pipes/pressure_tank.dmi
index 75471113d8..95103015cf 100644
Binary files a/icons/obj/atmospherics/pipes/pressure_tank.dmi and b/icons/obj/atmospherics/pipes/pressure_tank.dmi differ
diff --git a/icons/obj/atmospherics/pipes/simple.dmi b/icons/obj/atmospherics/pipes/simple.dmi
index 952e6499e3..6af45f88de 100644
Binary files a/icons/obj/atmospherics/pipes/simple.dmi and b/icons/obj/atmospherics/pipes/simple.dmi differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index 74a5164844..b13e06e824 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 89f9a6fd93..901adb905d 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index c5a6914cf4..8c2abcd3b9 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/fireplace.dmi b/icons/obj/fireplace.dmi
index d1a157e009..df03958368 100644
Binary files a/icons/obj/fireplace.dmi and b/icons/obj/fireplace.dmi differ
diff --git a/icons/obj/glassworks.dmi b/icons/obj/glassworks.dmi
new file mode 100644
index 0000000000..de033f08d5
Binary files /dev/null and b/icons/obj/glassworks.dmi differ
diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi
index 64642b8a6c..dbfc7b1f93 100644
Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ
diff --git a/icons/obj/recycling.dmi b/icons/obj/recycling.dmi
index 4e072c9006..9604d6b97e 100644
Binary files a/icons/obj/recycling.dmi and b/icons/obj/recycling.dmi differ
diff --git a/icons/rooms/Lavaland/Mining.dmi b/icons/rooms/Lavaland/Mining.dmi
new file mode 100644
index 0000000000..003a457212
Binary files /dev/null and b/icons/rooms/Lavaland/Mining.dmi differ
diff --git a/modular_citadel/code/_onclick/other_mobs.dm b/modular_citadel/code/_onclick/other_mobs.dm
index 51a5c6c5c3..8b9f3b3184 100644
--- a/modular_citadel/code/_onclick/other_mobs.dm
+++ b/modular_citadel/code/_onclick/other_mobs.dm
@@ -9,21 +9,43 @@
return TRUE
/mob/living/carbon/human/AltRangedAttack(atom/A, params)
+ if(isturf(A) || incapacitated()) // pretty annoying to wave your fist at floors and walls. And useless.
+ return TRUE
+ changeNext_move(CLICK_CD_RANGE)
+ var/list/target_viewers = viewers(11, A) //Byond proc, doesn't check for blindness.
+ if(!(src in target_viewers)) //click catcher issuing calls for out of view objects.
+ return TRUE
if(!has_active_hand())
to_chat(src, "You ponder your life choices and sigh.")
return TRUE
+ var/list/src_viewers = get_hearers_in_view(DEFAULT_MESSAGE_RANGE, src) - src // src has a different message.
+ var/the_action = "waves to [A]"
+ var/what_action = "waves to something you can't see"
+ var/self_action = "wave to [A]"
- if(!incapacitated())
- switch(a_intent)
- if(INTENT_HELP)
- visible_message("[src] waves to [A].", "You wave to [A].")
- if(INTENT_DISARM)
- visible_message("[src] shoos away [A].", "You shoo away [A].")
- if(INTENT_GRAB)
- visible_message("[src] beckons [A] to come.", "You beckon [A] to come.") //This sounds lewder than it actually is. Fuck.
- if(INTENT_HARM)
- visible_message("[src] shakes [p_their()] fist at [A].", "You shake your fist at [A].")
- return TRUE
+ switch(a_intent)
+ if(INTENT_DISARM)
+ the_action = "shoos away [A]"
+ what_action = "shoo away something you can't see"
+ self_action = "shoo away [A]"
+ if(INTENT_GRAB)
+ the_action = "beckons [A] to come"
+ what_action = "beckons something you can't see to come"
+ self_action = "beckon [A] to come"
+ if(INTENT_HARM)
+ var/pronoun = "[p_their()]"
+ the_action = "shakes [pronoun] fist at [A]"
+ what_action = "shakes [pronoun] fist at something you can't see"
+ self_action = "shake your fist at [A]"
+
+ if(!eye_blind)
+ to_chat(src, "You [self_action].")
+ for(var/B in src_viewers)
+ var/mob/M = B
+ if(!M.eye_blind)
+ var/message = (M in target_viewers) ? the_action : what_action
+ to_chat(M, "[src] [message].")
+ return TRUE
/atom/proc/alt_attack_hand(mob/user)
return FALSE
diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm
index 82fe89eb6e..48608e713e 100644
--- a/modular_citadel/code/modules/client/loadout/backpack.dm
+++ b/modular_citadel/code/modules/client/loadout/backpack.dm
@@ -115,4 +115,17 @@
name = "A fancy pen"
category = SLOT_IN_BACKPACK
path = /obj/item/pen/fountain
- cost = 2
\ No newline at end of file
+ cost = 2
+
+/datum/gear/modular_tablet
+ name = "A modular tablet"
+ category = SLOT_IN_BACKPACK
+ path = /obj/item/modular_computer/tablet/preset/cheap/
+ cost = 4
+
+/datum/gear/modular_laptop
+ name = "A modular laptop"
+ category = SLOT_IN_BACKPACK
+ path = /obj/item/modular_computer/laptop/preset/civilian
+ cost = 7
+
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm
index 46692ea7a9..b6b72669c2 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/uniform.dm
@@ -424,3 +424,38 @@
path = /obj/item/clothing/under/stripper_green
cost = 3
+/datum/gear/qipao
+ name = "Qipao, Black"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/lunar/qipao
+ cost = 3
+
+/datum/gear/qipao/white
+ name = "Qipao, White"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/lunar/qipao/white
+ cost = 3
+
+/datum/gear/qipao/red
+ name = "Qipao, Red"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/lunar/qipao/red
+ cost = 3
+
+/datum/gear/cheongsam
+ name = "Cheongsam, Black"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/lunar/cheongsam
+ cost = 3
+
+/datum/gear/cheongsam/white
+ name = "Cheongsam, White"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/lunar/cheongsam/white
+ cost = 3
+
+/datum/gear/cheongsam/red
+ name = "Cheongsam, Red"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/lunar/cheongsam/red
+ cost = 3
\ No newline at end of file
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm
index 9e965ec7a7..3c0a47bfd7 100644
--- a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm
@@ -65,18 +65,4 @@
icon_state = "spinfusorbox"
ammo_type = /obj/item/ammo_casing/caseless/spinfusor
w_class = WEIGHT_CLASS_NORMAL
- max_ammo = 4
-
-/datum/supply_pack/security/armory/spinfusor
- name = "Stormhammer Spinfusor Crate"
- cost = 14000
- contains = list(/obj/item/gun/ballistic/automatic/spinfusor,
- /obj/item/gun/ballistic/automatic/spinfusor)
- crate_name = "spinfusor crate"
-
-/datum/supply_pack/security/armory/spinfusorammo
- name = "Spinfusor Disk Crate"
- cost = 7000
- contains = list(/obj/item/ammo_box/aspinfusor,
- /obj/item/ammo_box/aspinfusor)
- crate_name = "spinfusor disk crate"
+ max_ammo = 4
\ No newline at end of file
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index 31e319edd3..63c0c01a58 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -200,8 +200,10 @@
FermiExplode = TRUE
PurityMin = 0.1
-/datum/chemical_reaction/fermi/breast_enlarger/FermiFinish(datum/reagents/holder, var/atom/my_atom)
+/datum/chemical_reaction/fermi/breast_enlarger/FermiFinish(datum/reagents/holder, atom/my_atom)
var/datum/reagent/fermi/breast_enlarger/BE = locate(/datum/reagent/fermi/breast_enlarger) in my_atom.reagents.reagent_list
+ if(!BE)
+ return
var/cached_volume = BE.volume
if(BE.purity < 0.35)
holder.remove_reagent(type, cached_volume)
@@ -249,8 +251,10 @@
P.length = ((PE.volume * PE.purity) / 10)//half as effective.
my_atom.reagents.clear_reagents()
-/datum/chemical_reaction/fermi/penis_enlarger/FermiFinish(datum/reagents/holder, var/atom/my_atom)
+/datum/chemical_reaction/fermi/penis_enlarger/FermiFinish(datum/reagents/holder, atom/my_atom)
var/datum/reagent/fermi/penis_enlarger/PE = locate(/datum/reagent/fermi/penis_enlarger) in my_atom.reagents.reagent_list
+ if(!PE)
+ return
var/cached_volume = PE.volume
if(PE.purity < 0.35)
holder.remove_reagent(type, cached_volume)
@@ -306,13 +310,11 @@
/datum/chemical_reaction/fermi/enthrall/FermiFinish(datum/reagents/holder, var/atom/my_atom)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in my_atom.reagents.reagent_list
var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list
- if(!B)
+ if(!B || !E)
return
if(!B.data)
- var/list/seen = viewers(5, get_turf(my_atom))
- for(var/mob/M in seen)
- to_chat(M, "The reaction splutters and fails to react properly.") //Just in case
- E.purity = 0
+ my_atom.visible_message("The reaction splutters and fails to react properly.") //Just in case
+ E.purity = 0
if (B.data["gender"] == "female")
E.data["creatorGender"] = "Mistress"
E.creatorGender = "Mistress"
@@ -332,11 +334,11 @@
/datum/chemical_reaction/fermi/enthrall/slime/FermiFinish(datum/reagents/holder, var/atom/my_atom)
var/datum/reagent/blood/jellyblood/B = locate(/datum/reagent/blood/jellyblood) in my_atom.reagents.reagent_list//The one line change.
var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list
+ if(!B || !E)
+ return
if(!B.data)
- var/list/seen = viewers(5, get_turf(my_atom))
- for(var/mob/M in seen)
- to_chat(M, "The reaction splutters and fails to react.") //Just in case
- E.purity = 0
+ my_atom.visible_message("The reaction splutters and fails to react properly.") //Just in case
+ E.purity = 0
if (B.data["gender"] == "female")
E.data["creatorGender"] = "Mistress"
E.creatorGender = "Mistress"
@@ -466,9 +468,9 @@
/datum/chemical_reaction/fermi/acidic_buffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this
- if(!locate(/datum/reagent/fermi/acidic_buffer) in my_atom.reagents.reagent_list)
- return
var/datum/reagent/fermi/acidic_buffer/Fa = locate(/datum/reagent/fermi/acidic_buffer) in my_atom.reagents.reagent_list
+ if(!Fa)
+ return
Fa.data = 0.1//setting it to 0 means byond thinks it's not there.
/datum/chemical_reaction/fermi/basic_buffer//done test
@@ -493,10 +495,10 @@
FermiChem = TRUE
-/datum/chemical_reaction/fermi/basic_buffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this
- if(!locate(/datum/reagent/fermi/basic_buffer) in my_atom.reagents.reagent_list)
- return
+/datum/chemical_reaction/fermi/basic_buffer/FermiFinish(datum/reagents/holder, atom/my_atom) //might need this
var/datum/reagent/fermi/basic_buffer/Fb = locate(/datum/reagent/fermi/basic_buffer) in my_atom.reagents.reagent_list
+ if(!Fb)
+ return
Fb.data = 14
//secretcatchemcode, shh!! Of couse I hide it amongst cats. Though, I moved it with your requests.
diff --git a/tgstation.dme b/tgstation.dme
index b9cef8faea..ab157fd175 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -364,6 +364,7 @@
#include "code\datums\components\chasm.dm"
#include "code\datums\components\construction.dm"
#include "code\datums\components\decal.dm"
+#include "code\datums\components\dejavu.dm"
#include "code\datums\components\earprotection.dm"
#include "code\datums\components\edit_complainer.dm"
#include "code\datums\components\empprotection.dm"
@@ -476,6 +477,7 @@
#include "code\datums\elements\_element.dm"
#include "code\datums\elements\cleaning.dm"
#include "code\datums\elements\dusts_on_catatonia.dm"
+#include "code\datums\elements\dusts_on_leaving_area.dm"
#include "code\datums\elements\earhealing.dm"
#include "code\datums\elements\ghost_role_eligibility.dm"
#include "code\datums\elements\swimming.dm"
@@ -1501,11 +1503,13 @@
#include "code\modules\atmospherics\machinery\pipes\layermanifold.dm"
#include "code\modules\atmospherics\machinery\pipes\manifold.dm"
#include "code\modules\atmospherics\machinery\pipes\manifold4w.dm"
+#include "code\modules\atmospherics\machinery\pipes\mapping.dm"
#include "code\modules\atmospherics\machinery\pipes\pipes.dm"
#include "code\modules\atmospherics\machinery\pipes\simple.dm"
#include "code\modules\atmospherics\machinery\pipes\heat_exchange\he_pipes.dm"
#include "code\modules\atmospherics\machinery\pipes\heat_exchange\junction.dm"
#include "code\modules\atmospherics\machinery\pipes\heat_exchange\manifold.dm"
+#include "code\modules\atmospherics\machinery\pipes\heat_exchange\manifold4w.dm"
#include "code\modules\atmospherics\machinery\pipes\heat_exchange\simple.dm"
#include "code\modules\atmospherics\machinery\portable\canister.dm"
#include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm"
@@ -1703,6 +1707,7 @@
#include "code\modules\clothing\under\jobs\Plasmaman\medsci.dm"
#include "code\modules\clothing\under\jobs\Plasmaman\security.dm"
#include "code\modules\crafting\craft.dm"
+#include "code\modules\crafting\glassware.dm"
#include "code\modules\crafting\guncrafting.dm"
#include "code\modules\crafting\recipes.dm"
#include "code\modules\crafting\recipes\recipes_clothing.dm"