diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm index f8d701debe..2d66300953 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm @@ -71,8 +71,9 @@ /turf/closed/wall/r_wall, /area/engine/engineering) "di" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, /area/engine/engineering) "dl" = ( /obj/structure/cable{ @@ -304,12 +305,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /turf/open/floor/plasteel, /area/engine/engineering) "kH" = ( @@ -523,6 +518,9 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/sign/warning/enginesafety{ + pixel_x = 32 + }, /turf/open/floor/plasteel, /area/engine/engineering) "qv" = ( @@ -543,7 +541,13 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/engine/engineering) "qN" = ( /obj/structure/table/reinforced, @@ -848,6 +852,10 @@ /obj/machinery/igniter{ id = "TEG_igniter" }, +/mob/living/carbon/monkey{ + name = "Mumkey Jones" + }, +/obj/item/clothing/head/hardhat/atmos, /turf/open/floor/engine/vacuum, /area/engine/engineering) "An" = ( @@ -882,14 +890,6 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 1 }, -/obj/machinery/camera{ - c_tag = "TEG - North Center"; - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/engine/engineering) "AX" = ( @@ -1042,12 +1042,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"EI" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel, -/area/engine/engineering) "EL" = ( /turf/closed/wall, /area/engine/engineering) @@ -1082,6 +1076,11 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel, /area/engine/engineering) +"Fs" = ( +/obj/structure/rack, +/obj/item/pipe_dispenser, +/turf/open/floor/plasteel, +/area/engine/engineering) "FG" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 10 @@ -1218,11 +1217,6 @@ /turf/open/floor/plasteel, /area/engine/engineering) "Jd" = ( -/obj/machinery/light, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/atmospherics/pipe/manifold/orange/visible, /turf/open/floor/plasteel, /area/engine/engineering) @@ -1312,15 +1306,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /turf/open/floor/plasteel, /area/engine/engineering) "LD" = ( @@ -1372,6 +1357,7 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 4 }, +/obj/machinery/meter, /turf/open/floor/plasteel, /area/engine/engineering) "Nz" = ( @@ -1429,12 +1415,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/obj/machinery/airalarm{ - dir = 1; - locked = 0; - pixel_y = -22 - }, /obj/machinery/light, +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, /turf/open/floor/plasteel, /area/engine/engineering) "Pz" = ( @@ -1452,6 +1436,9 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/sign/warning/nosmoking{ + pixel_y = 30 + }, /turf/open/floor/plasteel, /area/engine/engineering) "PK" = ( @@ -1522,12 +1509,11 @@ /turf/open/space, /area/space/nearstation) "Rl" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/meter, /turf/open/floor/plasteel, /area/engine/engineering) "Rz" = ( @@ -1602,7 +1588,13 @@ /turf/open/floor/plating, /area/engine/engineering) "TE" = ( -/obj/structure/closet/crate/internals, +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, /turf/open/floor/plasteel, /area/engine/engineering) "TH" = ( @@ -1648,6 +1640,10 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, +/obj/machinery/camera{ + c_tag = "TEG - North Center"; + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/engineering) "Uq" = ( @@ -1671,18 +1667,15 @@ /area/engine/engineering) "UT" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /turf/open/floor/plasteel, /area/engine/engineering) "UY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, +/obj/machinery/airalarm{ + pixel_y = 23 + }, /turf/open/floor/plasteel, /area/engine/engineering) "Vi" = ( @@ -1811,10 +1804,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/structure/extinguisher_cabinet{ - dir = 4; - pixel_y = -27 - }, /turf/open/floor/plasteel, /area/engine/engineering) "YC" = ( @@ -1837,9 +1826,10 @@ /turf/open/floor/plasteel, /area/engine/engineering) "YP" = ( -/obj/structure/rack, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/item/pipe_dispenser, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/engine/engineering) "YQ" = ( @@ -1878,7 +1868,9 @@ /turf/open/floor/plasteel, /area/engine/engineering) "Zu" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, /obj/machinery/meter, /turf/open/floor/plasteel, /area/engine/engineering) @@ -1887,13 +1879,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/sign/warning/securearea{ - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/engine/engineering) "ZC" = ( @@ -2170,7 +2155,7 @@ iD MP MP MP -ij +MP yX qn qn @@ -2251,11 +2236,11 @@ ME QS uB Ok -Ok -Ok +di +di Ok Bz -Zu +lI Wc Ok zG @@ -2307,8 +2292,8 @@ iP wk go fF -EI -EI +UT +UT sn qc Nh @@ -2367,7 +2352,7 @@ KA KA Ok dZ -bO +Zu ev tl qb @@ -2477,7 +2462,7 @@ IP Zs sD Jd -EL +YP YG AX PK @@ -2505,7 +2490,7 @@ SX ou vG Zv -di +Xe qJ Lw Xe @@ -2595,7 +2580,7 @@ PK Dv Dv bO -YP +sH As yN yN @@ -2651,7 +2636,7 @@ eh zx XW ST -Ok +Fs MP tw tw diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 264fdb1058..c0b4e6a88a 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -1257,6 +1257,16 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "acV" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solar/port/fore) +"acW" = ( /obj/structure/cable{ icon_state = "0-2" }, @@ -1266,11 +1276,6 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/solar/port/fore) -"acW" = ( -/obj/structure/cable, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/port/fore) "acX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -1489,7 +1494,12 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/starboard/fore) -"adu" = ( +"adw" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solar/port/fore) +"adx" = ( /obj/structure/cable{ icon_state = "4-8" }, @@ -1502,56 +1512,17 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/port/fore) -"adv" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/port/fore) -"adw" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/port/fore) -"adx" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/port/fore) "ady" = ( /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/port/fore) -"adz" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/port/fore) "adA" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/cable, +/obj/machinery/power/solar{ + id = "auxsolareast"; + name = "Port Auxiliary Solar Array" }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, +/turf/open/floor/plasteel/airless/solarpanel, /area/solar/port/fore) "adB" = ( /obj/structure/cable{ @@ -1817,12 +1788,11 @@ /turf/open/space, /area/solar/starboard/fore) "adZ" = ( -/obj/structure/cable, -/obj/machinery/power/solar{ - id = "auxsolareast"; - name = "Port Auxiliary Solar Array" +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/plasteel/airless/solarpanel, +/obj/structure/lattice/catwalk, +/turf/open/space, /area/solar/port/fore) "aea" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, @@ -5054,12 +5024,16 @@ /turf/open/floor/plasteel/dark, /area/security/courtroom) "ajq" = ( -/obj/structure/lattice/catwalk, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/space, -/area/solar/port/fore) +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/maintenance/solars/port/fore) "ajr" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -5417,16 +5391,12 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "ajW" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-4" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plating, -/area/maintenance/solars/port/fore) +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solar/port/fore) "ajX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -6668,15 +6638,17 @@ /area/security/courtroom) "amv" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plating, -/area/maintenance/solars/starboard/fore) +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solar/port/fore) "amw" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -8572,13 +8544,15 @@ /turf/open/floor/plasteel, /area/security/processing) "aqJ" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solar/port/fore) "aqK" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel, @@ -42345,15 +42319,9 @@ /turf/open/floor/plasteel, /area/science/circuit) "bXv" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/obj/item/stack/rods, +/turf/open/space, +/area/space) "bXw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, @@ -45067,7 +45035,7 @@ dir = 4 }, /turf/closed/wall/r_wall, -/area/engine/engineering) +/area/engine/atmos) "cez" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, @@ -45521,9 +45489,12 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cfK" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/wall, -/area/engine/engineering) +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/space, +/area/solar/port/fore) "cfL" = ( /obj/machinery/firealarm{ pixel_y = 24 @@ -46323,18 +46294,11 @@ /turf/open/floor/plating, /area/maintenance/solars/port/aft) "chO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, /obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" + req_access_txt = "13" }, /turf/open/floor/plating, -/area/maintenance/solars/port/aft) +/area/maintenance/fore/secondary) "chP" = ( /obj/structure/cable{ icon_state = "4-8" @@ -49352,15 +49316,16 @@ /turf/open/space, /area/maintenance/aft) "csg" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ - name = "Engineering External Access"; - req_access_txt = "10;13" + name = "Solar Maintenance"; + req_access_txt = "10; 13" }, /turf/open/floor/plating, -/area/engine/engineering) +/area/maintenance/solars/starboard/fore) "csi" = ( /obj/structure/transit_tube/curved/flipped{ dir = 1 @@ -51153,13 +51118,10 @@ /turf/open/floor/plasteel, /area/security/processing) "cxW" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) "cxY" = ( /obj/machinery/camera{ c_tag = "Arrivals Escape Pod 1"; @@ -51258,14 +51220,13 @@ /turf/open/floor/plating, /area/hallway/secondary/entry) "cyC" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ + name = "External Access"; req_access_txt = "13" }, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/port/fore) "cyD" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -51287,15 +51248,13 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cyG" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock"; - req_access_txt = "24" + name = "External Access"; + req_access_txt = "13" }, /turf/open/floor/plating, -/area/engine/atmos) +/area/maintenance/starboard/fore) "cyK" = ( /obj/structure/cable{ icon_state = "4-8" @@ -51341,18 +51300,14 @@ /turf/open/space/basic, /area/space) "cyU" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 + dir = 8 }, /obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" + req_access_txt = "13" }, /turf/open/floor/plating, -/area/maintenance/solars/starboard/aft) +/area/maintenance/starboard) "czg" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -52258,10 +52213,9 @@ /turf/open/space, /area/space/nearstation) "cCS" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/lattice, -/turf/open/space, -/area/space/nearstation) +/turf/closed/wall/r_wall, +/area/engine/atmos) "cCT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -52328,12 +52282,15 @@ /turf/closed/wall, /area/engine/engineering) "cDY" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 }, -/turf/open/space, -/area/space/nearstation) +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "cDZ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53612,6 +53569,11 @@ dir = 8 }, /area/crew_quarters/fitness/pool) +"dCt" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "dCV" = ( /obj/structure/cable{ icon_state = "1-4" @@ -54280,6 +54242,12 @@ }, /turf/open/floor/plasteel, /area/security/range) +"fty" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "ftE" = ( /obj/item/radio/intercom{ pixel_y = 25 @@ -54838,10 +54806,6 @@ dir = 8 }, /area/medical/sleeper) -"haL" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) "haM" = ( /obj/item/radio/intercom{ name = "Station Intercom (General)"; @@ -55122,6 +55086,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"imk" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/open/space/basic, +/area/space/nearstation) "imH" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -55417,6 +55388,10 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"jiK" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall, +/area/engine/engineering) "jjC" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, @@ -56729,6 +56704,19 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/maintenance/bar) +"mQp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/aft) "mQS" = ( /obj/machinery/light{ dir = 8; @@ -58858,14 +58846,10 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness/pool) "tAH" = ( -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "tCa" = ( /obj/structure/table/wood, /obj/item/instrument/guitar{ @@ -58888,6 +58872,19 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"tEK" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) "tHh" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/red, @@ -59258,7 +59255,7 @@ "uDO" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "1-2" }, /turf/open/space, /area/solar/port/fore) @@ -60002,6 +59999,16 @@ /obj/machinery/holopad, /turf/open/floor/plasteel/showroomfloor, /area/security/main) +"wmu" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "10;13" + }, +/turf/open/floor/plating, +/area/engine/engineering) "woR" = ( /obj/machinery/cryopod{ dir = 1 @@ -60161,6 +60168,16 @@ /obj/item/hand_labeler, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"wWi" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Airlock"; + req_access_txt = "24" + }, +/turf/open/floor/plating, +/area/engine/atmos) "wWT" = ( /obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel/white, @@ -67551,7 +67568,7 @@ gXs gXs gJi gJi -haL +gXs aag gJi aaa @@ -68305,7 +68322,7 @@ aaa aaa aaa aae -ktS +aaa gXs aaa aaa @@ -68562,7 +68579,7 @@ aaa aaa aaa aaa -ktS +aaa gXs aaa aaa @@ -68819,7 +68836,7 @@ aaa aaa aaa aaa -ktS +aaa gXs aaa aaa @@ -69076,7 +69093,7 @@ aaa aaa aaa aaa -ktS +aaa gXs aaa cqq @@ -69333,7 +69350,7 @@ aaf aaf aaf aaa -ktS +aaa arB asE cyb @@ -73695,11 +73712,11 @@ aaa aae aaa aaa -aaa aag alU alU alU +alU aCW amC asK @@ -73952,9 +73969,9 @@ aaa aaa aaa aaa -aaa aag -aqJ +cyC +amC amC gLH ase @@ -74209,7 +74226,7 @@ aaa aaa aaa aaa -aaa +gJi alU alU alU @@ -74958,7 +74975,6 @@ aaa aaa aaa aaa -aaa aaS aaS aaS @@ -74977,6 +74993,7 @@ aaS aaf aaf aaf +aaf aaa aaa aaa @@ -75215,7 +75232,6 @@ aaa aaa aaa aaa -aaa abY aaa aaf @@ -75228,7 +75244,7 @@ acy aaa aaf aaa -aiS +bXv aaa aaS aaa @@ -75237,6 +75253,7 @@ aaa aaa aaa aaa +aaa alU aoR apO @@ -75472,25 +75489,25 @@ aaa aaa aaa aaa -aaa abY aaa +acW acV -adv -adZ +adA aaa +acW acV -adv -adZ +adA aaa +acW acV -adv -adZ +adA aaa aaS aaf aaf aaf +aaf aaa aaa aaa @@ -75726,23 +75743,22 @@ aaa aaa aaa aaa -aaa aae aaa aaa abY aaf -acV -adu -adZ +acW +adx +adA aaa -acV -adu -adZ +acW +adx +adA aaa -acV -adu -adZ +acW +adx +adA aaf aaf aaa @@ -75751,6 +75767,7 @@ aaa aaa aaa aaa +aaa alU alU alU @@ -75986,20 +76003,19 @@ aaa aaa aaa aaa -aaa abY aaa -acV -adu -adZ +acW +adx +adA aaf -acV -adu -adZ +acW +adx +adA aaf -acV -adu -adZ +acW +adx +adA aaa aaf aaa @@ -76008,6 +76024,7 @@ aaa aaa aaa aaa +aaa aaf aaa ali @@ -76243,20 +76260,20 @@ aaa aaa aaa aaa -aaa aaf aaf -acV -adu -adZ +acW +adx +adA aaa -acV -adu -adZ +acW +adx +adA aaa -acV -adu -adZ +acW +adx +adA +aaf aaf aaf aaf @@ -76497,26 +76514,26 @@ aaa aaa aaa aaa -aaa aaS aaS aaS aaf aaa -acV -adu -adZ +acW +adx +adA aaa -acV -adu -adZ +acW +adx +adA aaa -acV -adu -adZ +acW +adx +adA aaa aaf aaa +aaa ajV alR alR @@ -76754,27 +76771,27 @@ aaa aaa aaa aaa -aaa aaS aaa aaf aaa aaa aaa -adw +adZ aaa aaa aaa -adw +adZ aaa aaa aaa -adw +adZ aaa aaa ajV ajV ajV +ajV alQ amy ang @@ -77011,13 +77028,12 @@ aaa aaa aaa aaa -aaa aaS aaf abs abZ abZ -acW +adw ady ady ady @@ -77027,9 +77043,10 @@ ady ady ady ady +cfK uDO ajq -ajW +akB akB alh alT @@ -77268,27 +77285,27 @@ aaa aaa aaa aaa -aaa aaS aaa aaf aaa aaa aaa -adx +ajW aaa aaa aaa -adx +ajW aaa aaa aaa -adx +ajW aaa aaa ajV ajV ajV +ajV alS amz anh @@ -77525,26 +77542,26 @@ aaa aaa aaa aaa -aaa aaS aba aaS aaf aaa -acV -adz -adZ +acW +amv +adA aaa -acV -adz -adZ +acW +amv +adA aaa -acV -adz -adZ +acW +amv +adA aaa aaf aaa +aaa ajV alR alR @@ -77785,22 +77802,22 @@ aaa aaa aaa aaa +aaf +aaf +acW +amv +adA aaa -aaf -aaf -acV -adz -adZ +acW +amv +adA aaa -acV -adz -adZ +acW +amv +adA +aaf +aaf aaa -acV -adz -adZ -aaf -aaf aaa aaa aaa @@ -78042,24 +78059,24 @@ aaa aaa aaa aaa -aaa aaS aaa -acV -adz -adZ +acW +amv +adA aaf -acV -adz -adZ +acW +amv +adA aaf -acV -adz -adZ +acW +amv +adA aaa aaf aaf aaf +aaf gXs alU alF @@ -78299,25 +78316,25 @@ aaa aaa aaa aaa -aaa aaS aaf -acV -adz -adZ +acW +amv +adA aaa -acV -adz -adZ +acW +amv +adA aaa -acV -adz -adZ +acW +amv +adA aaf aaf aaa aaa aaa +aaa alU alU ank @@ -78556,22 +78573,22 @@ aaa aaa aaa aaa +aaS +aaa +acW +aqJ +adA +aaa +acW +aqJ +adA +aaa +acW +aqJ +adA aaa aaS aaa -acV -adA -adZ -aaa -acV -adA -adZ -aaa -acV -adA -adZ -aaa -aaS aaa aaa aaa @@ -78658,9 +78675,9 @@ aaf aaa aaf aaa -aaa +aaf hrF -aaa +aaf aaa aaf aaa @@ -78813,7 +78830,6 @@ aaa aaa aaa aaa -aaa aaS aaa aaf @@ -78831,6 +78847,7 @@ aaa aaS aaf aaf +aaf gXs alU amC @@ -78915,9 +78932,9 @@ aaf aaf aaf aaf -aaf -hrF -aaf +cfx +tEK +cfx aaf aaf aaf @@ -79070,7 +79087,6 @@ aaa aaa aaa aaa -aaa aaS aaS aaS @@ -79089,6 +79105,7 @@ aaS aaa aaa aaa +aaa alU amE ann @@ -79173,7 +79190,7 @@ aaf aaa aaa cfx -chO +chN cfx aaa aaf @@ -79421,8 +79438,8 @@ caf aoV aag aaf -aaa -aaa +gXs +gXs aaf aaa aaa @@ -79675,9 +79692,9 @@ bLv bCq aoV cbj -aoV -aag -aaf +bLv +cDY +bLv aaf bCq bCq @@ -79933,7 +79950,7 @@ bCq bCq cbj bLv -bXv +bHE bLv aaf bCq @@ -79949,7 +79966,7 @@ ciQ cfw aaa aaa -aaa +gXs aaf aaf aaa @@ -80204,9 +80221,9 @@ cgC chR ciS cfw -aaa -aaa -aaa +aag +aag +aag aaa aaf aaf @@ -80461,9 +80478,9 @@ cgB chQ ciR cfw -aag -aag -aag +bCq +cDY +bCq aaa aaa aaf @@ -80719,7 +80736,7 @@ chS cfw cfw bCq -bXv +bHE bCq aaa aaa @@ -90215,7 +90232,7 @@ bUE bWM bXJ bMK -bMK +bYH bYH bYH bVg @@ -92531,10 +92548,10 @@ bWQ bWQ caD bWQ -ccw -ccw +bLK +bLK cey -ccw +bLK ccw ccw ccw @@ -92810,14 +92827,14 @@ ckF cpE cjR crW -csg +ciZ +wmu aag aaa aaa aaa aaa aaa -aaa ctv ctv ctv @@ -93067,14 +93084,14 @@ crw cjO ccw crX -cfK +ciZ +jiK aag aaa aaa aaa aaa aaa -aaa aaT aaT aaT @@ -93325,7 +93342,7 @@ cjm ccw ccw cig -aag +cig aag aag aag @@ -95003,10 +95020,10 @@ aaa aaa aaa aaa -aaa acw abp abp +abp adR abp lJC @@ -95259,10 +95276,10 @@ aaa aaa aaa aaa -aaa aaf aag acU +anF adr sXy aeC @@ -95517,12 +95534,12 @@ aaa aaa aaa aaa -aaa aag abp abp abp abp +abp mxn abp abp @@ -96045,7 +96062,7 @@ aaa ahn ahn ahn -tAH +anF ahn eMs anG @@ -96301,8 +96318,8 @@ aaa aaa aaa aaa -gJi -gJi +ahn +chO ahn ahn khB @@ -96390,10 +96407,10 @@ bQA bPj bOh cCQ -bLK -cyG -bLK -aoV +cCS +chg +cCS +aaf aoV aoV aaf @@ -96558,8 +96575,8 @@ aaa aaa aaa aaa -aaa -aaa +gJi +gJi dFX wWW dqb @@ -96646,21 +96663,21 @@ cbI ccC cdD bOh -cCG +cCQ cCS +wWi cCS -cCI -cCI -cCI -cCI -cCI -cCI -cCI -cCI -cCI -cCI -cCI -cDY +aaa +aaa +aaa +gXs +aaa +aaa +aaa +aaa +aaa +aaa +cCQ aaf aaf aaf @@ -96903,21 +96920,21 @@ cbH ccB cbH bOh -aaf -aaa -aoV -aaf -aoV -aoV -aoV -aaf -aoV -aoV -aoV -aoV -aoV -aoV -gXs +cCG +tAH +dCt +fty +dCt +dCt +dCt +fty +dCt +dCt +dCt +dCt +dCt +dCt +imk aoV aaa aaa @@ -97161,11 +97178,11 @@ ccD cbH bOh aaf -aaf -aaf -aaf -aaf -aoV +aaa +aaa +aaa +aaa +aaa aoV aaf aoV @@ -100424,7 +100441,7 @@ aaa aaa aaa aaa -aaa +gXs aaf aaf alO @@ -100680,8 +100697,8 @@ aaa aaa aaa aaa -aaa -aag +gJi +alO alO arp alO @@ -100937,9 +100954,9 @@ aaa aaa aaa aaa -aaa -aag -cxW +gJi +cyG +anf anf aqv ayf @@ -101194,10 +101211,10 @@ aaf aaf aaf aaf -aaf -aag +cxW alO anf +anf alO mAH jaF @@ -101703,7 +101720,7 @@ aaa aaa aaf aaa -aaa +amw amw amw amw @@ -101960,8 +101977,8 @@ eaR jIs jIs jIs -acx -amv +csg +ane ane cxN aog @@ -102217,7 +102234,7 @@ aaa aaa aaf aaa -aaa +amw amw amw amw @@ -110535,7 +110552,7 @@ cmw cnj cnj cnj -aaa +cnj aaa aaf aaa @@ -110742,7 +110759,7 @@ aaf aaf aaf bky -cyC +btp bns boF bqe @@ -110791,8 +110808,8 @@ clx cmv cnk cnK -cyU -cpi +cnK +mQp cpi cpi cqJ @@ -110997,9 +111014,9 @@ aQE aNa aaa aaf -aaa -aaf -aaa +gXs +bky +cyU bns boF bqe @@ -111049,7 +111066,7 @@ cmx cnj cnj cnj -aaa +cnj aaa aaf aaa @@ -111254,7 +111271,7 @@ afE aNa aaa aaa -aaa +gXs aaf aaa bns @@ -112836,7 +112853,7 @@ aaa aaa aaf cNW -cPI +cOe cNW aaf aaf @@ -113092,9 +113109,9 @@ aaa aaa aaa aaf -aag -aag -aag +cNW +cPI +cNW aaf aaa aaa @@ -113348,11 +113365,11 @@ aaa aaa aaa aaa -aaa -aaa +gXs aag -aaa -aaa +aag +aag +gXs aaa aaa aaa @@ -113607,7 +113624,7 @@ aaa aaa aaa aaa -aaf +aag aaa aaa aaa diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 8bf6d0e32b..40a57135fd 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -1848,9 +1848,6 @@ dir = 8 }, /obj/effect/turf_decal/tile/neutral, -/obj/machinery/light_switch{ - pixel_y = -24 - }, /turf/open/floor/plasteel/dark, /area/crew_quarters/observatory) "aez" = ( @@ -2177,6 +2174,9 @@ dir = 4 }, /obj/effect/turf_decal/tile/neutral, +/obj/machinery/light_switch{ + pixel_x = 24 + }, /turf/open/floor/plasteel/dark, /area/crew_quarters/observatory) "afl" = ( @@ -2722,10 +2722,6 @@ dir = 1; pixel_y = -22 }, -/obj/machinery/camera{ - c_tag = "Observatory Viewing Area"; - dir = 4 - }, /obj/machinery/light/small{ dir = 8 }, @@ -3188,6 +3184,9 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 1 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/starboard/fore) "ahL" = ( @@ -3327,15 +3326,12 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/observatory) "aif" = ( -/obj/machinery/firealarm{ - pixel_y = 26 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aig" = ( @@ -4483,17 +4479,8 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "akN" = ( -/obj/structure/plasticflaps, -/obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "secblock"; - name = "Security Router" - }, -/obj/machinery/conveyor/auto{ - id = "sec" - }, -/turf/open/floor/plating, -/area/router/sec) +/turf/open/space/basic, +/area/router/aux) "akO" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -6200,12 +6187,20 @@ /turf/open/floor/grass, /area/hydroponics) "aoJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible, -/obj/machinery/space_heater, -/turf/open/floor/plasteel, -/area/engine/engineering{ - name = "Engine Room" - }) +/obj/machinery/firealarm{ + pixel_y = 26 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "aoK" = ( /turf/closed/wall/r_wall, /area/router/service) @@ -6300,7 +6295,7 @@ /obj/machinery/conveyor{ id = "serv_off" }, -/obj/machinery/door/poddoor/preopen{ +/obj/machinery/door/poddoor{ id = "servblock"; name = "Service Router" }, @@ -6309,7 +6304,7 @@ "aoT" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ +/obj/machinery/door/poddoor{ id = "servblock"; name = "Service Router" }, @@ -8607,7 +8602,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/item/storage/pill_bottle/dice, +/obj/item/storage/box/dice, /obj/item/toy/cards/deck, /turf/open/floor/plasteel, /area/crew_quarters/bar) @@ -15009,13 +15004,19 @@ /turf/open/floor/plasteel/stairs/medium, /area/hallway/secondary/entry) "aHa" = ( -/obj/structure/disposalpipe/junction/yjunction, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 8 +/obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/locker"; + dir = 8; + name = "Locker Room APC"; + pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel, -/area/hallway/primary/port/fore) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/fore) "aHb" = ( /obj/structure/chair, /obj/machinery/firealarm{ @@ -15163,12 +15164,12 @@ /turf/open/floor/plasteel, /area/tcommsat/computer) "aHp" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden, -/turf/open/floor/plasteel, -/area/hallway/primary/port/fore) +/turf/open/floor/plating, +/area/maintenance/fore) "aHq" = ( /obj/effect/turf_decal/bot, /obj/structure/disposalpipe/segment, @@ -15841,12 +15842,16 @@ /turf/open/floor/carpet/royalblue, /area/bridge) "aIJ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Fore Maintenance"; + req_one_access_txt = "12;46" }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, /area/hallway/primary/port/fore) "aIK" = ( /obj/structure/table/wood, @@ -16804,7 +16809,7 @@ /area/bridge) "aKw" = ( /obj/structure/table, -/obj/item/storage/pill_bottle/dice, +/obj/item/storage/box/dice, /obj/item/toy/cards/deck, /obj/structure/disposalpipe/segment{ dir = 4 @@ -17089,13 +17094,22 @@ /turf/open/floor/plating, /area/maintenance/fore) "aLc" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Central Maintenance"; - req_one_access_txt = "12" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, /area/hallway/primary/port/fore) "aLd" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -17721,14 +17735,16 @@ /turf/closed/wall, /area/maintenance/department/chapel) "aMo" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/structure/disposalpipe/junction/yjunction, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-4" }, -/turf/open/floor/plating, -/area/maintenance/starboard/central) +/turf/open/floor/plasteel, +/area/hallway/primary/port/fore) "aMp" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -17880,18 +17896,15 @@ }, /area/chapel/main) "aMG" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/machinery/camera{ - c_tag = "Central Starboard Maintenance"; - dir = 8; - pixel_y = -22 - }, -/mob/living/simple_animal/hostile/retaliate/bat, -/turf/open/floor/plating, -/area/maintenance/starboard/central) +/turf/open/floor/plasteel, +/area/hallway/primary/port/fore) "aMH" = ( /obj/structure/cable{ icon_state = "2-8" @@ -19880,9 +19893,16 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/fitness/cogpool) "aQS" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plating, -/area/maintenance/central) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port/fore) "aQT" = ( /obj/machinery/door/airlock/engineering{ name = "Thermo-Electric Generator"; @@ -22384,6 +22404,18 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/department/eva) +"aWr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Central Maintenance"; + req_one_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/hallway/primary/port/fore) "aWs" = ( /obj/machinery/light{ dir = 8; @@ -22411,16 +22443,10 @@ /turf/open/floor/plating, /area/maintenance/central) "aWu" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/fitness/cogpool"; - dir = 4; - name = "Pool APC"; - pixel_x = 24 - }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/central) "aWv" = ( @@ -22787,9 +22813,9 @@ /turf/open/floor/carpet, /area/library) "aXg" = ( -/obj/structure/bookcase/random/reference, -/turf/open/floor/wood, -/area/library) +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "aXh" = ( /obj/machinery/atmospherics/pipe/simple/supply/visible{ dir = 6 @@ -22837,6 +22863,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"aXm" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/tcommsat/computer) "aXn" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -22876,6 +22908,15 @@ "aXr" = ( /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) +"aXs" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plating, +/area/tcommsat/computer) "aXt" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/securearea, @@ -24424,10 +24465,12 @@ /turf/open/floor/plasteel/dark, /area/security/checkpoint/customs) "baE" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/structure/bookcase/random/reference, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/turf/open/floor/wood, +/turf/open/floor/plasteel/dark, /area/library) "baF" = ( /obj/structure/chair/office/dark{ @@ -24976,18 +25019,21 @@ /turf/open/floor/plating, /area/security/checkpoint/customs) "bbQ" = ( -/obj/structure/sign/warning/vacuum/external{ - pixel_x = -32; - pixel_y = 32 +/obj/structure/cable{ + icon_state = "0-2" }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/fitness/cogpool"; + dir = 4; + name = "Pool APC"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel, -/area/engine/engineering{ - name = "Engine Room" - }) +/turf/open/floor/plating, +/area/maintenance/central) "bbR" = ( /obj/structure/closet/crate/hydroponics, /obj/effect/turf_decal/tile/green, @@ -27393,19 +27439,16 @@ /turf/open/floor/wood, /area/medical/medbay/lobby) "bhy" = ( -/obj/structure/closet/crate/science, -/obj/item/stack/sheet/metal/ten, -/obj/item/stack/sheet/glass/five, -/obj/item/stack/rods/twentyfive, -/obj/item/target/syndicate, -/obj/item/target/alien, -/obj/item/target, -/obj/item/target/clown, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 +/obj/structure/plasticflaps, +/obj/structure/fans/tiny, +/obj/machinery/conveyor/auto{ + id = "sec" }, -/turf/open/floor/plasteel, -/area/science/mixing) +/obj/machinery/door/poddoor{ + name = "Security Router" + }, +/turf/open/floor/plating, +/area/router/sec) "bhz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -27774,8 +27817,15 @@ /turf/open/floor/plating, /area/quartermaster/storage) "bim" = ( -/turf/open/space/basic, -/area/space/nearstation) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/massdriver{ + id = "router_in"; + name = "mass driver button (Router)"; + pixel_x = 24; + pixel_y = -8 + }, +/turf/open/floor/plating, +/area/maintenance/disposal) "bin" = ( /obj/machinery/computer/mecha{ dir = 4 @@ -30316,6 +30366,18 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"bnl" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/central) "bnm" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 4 @@ -31910,7 +31972,7 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, -/obj/item/storage/pill_bottle/dice, +/obj/item/storage/box/dice, /obj/item/toy/cards/deck, /turf/open/floor/plasteel/white/corner{ dir = 1 @@ -33867,9 +33929,18 @@ /area/janitor) "bvb" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark/blobstart, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/engineering{ + name = "Electrical Substation"; + req_access_txt = "10" + }, +/obj/structure/fans/tiny, /turf/open/floor/plating, -/area/maintenance/starboard/central) +/area/engine/storage_shared{ + name = "Electrical Substation" + }) "bvc" = ( /obj/machinery/computer/cargo/request, /obj/machinery/airalarm{ @@ -34423,10 +34494,13 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "bwp" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/disposalpipe/segment{ + dir = 6 }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plating, /area/maintenance/starboard/central) "bwq" = ( @@ -34650,6 +34724,20 @@ }, /turf/open/floor/plating, /area/router) +"bwM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/camera{ + c_tag = "Central Starboard Maintenance"; + dir = 8; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/mob/living/simple_animal/hostile/retaliate/bat, +/turf/open/floor/plating, +/area/maintenance/starboard/central) "bwN" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -34921,11 +35009,16 @@ /turf/open/floor/plating, /area/maintenance/department/chapel) "bxq" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plating, -/area/tcommsat/computer) +/area/maintenance/starboard/central) "bxr" = ( /obj/structure/table, /obj/effect/turf_decal/tile/purple, @@ -35428,32 +35521,29 @@ /turf/open/floor/plasteel, /area/router/eva) "byt" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/central) +"byu" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/central) +"byv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/camera{ c_tag = "Central Starboard Exterior Access" }, -/turf/open/floor/plating, -/area/maintenance/starboard/central) -"byu" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/door/airlock/external{ - name = "Central Starboard Exterior Access"; - req_access_txt = "13" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/central) -"byv" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 1 - }, /turf/open/floor/plating, /area/maintenance/starboard/central) "byw" = ( @@ -36136,14 +36226,19 @@ /turf/open/floor/plasteel, /area/gateway) "bAd" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Central Starboard Exterior Access"; + req_access_txt = "13" }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 + dir = 4 }, /turf/open/floor/plating, /area/maintenance/starboard/central) @@ -36375,6 +36470,15 @@ /area/medical/medbay/zone2{ name = "Medbay Treatment Center" }) +"bAz" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/central) "bAA" = ( /obj/structure/lattice, /obj/structure/cable{ @@ -36532,6 +36636,19 @@ /area/medical/medbay/zone2{ name = "Medbay Treatment Center" }) +"bAN" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/obj/item/tank/internals/air, +/obj/item/flashlight, +/obj/machinery/airalarm{ + dir = 1; + locked = 0; + pixel_y = -22 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/central) "bAO" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 @@ -38158,16 +38275,20 @@ }, /area/crew_quarters/heads/captain) "bEr" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/locker"; - dir = 8; - name = "Locker Room APC"; - pixel_x = -24 +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32; + pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/maintenance/fore) +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering{ + name = "Engine Room" + }) "bEs" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/tile/yellow{ @@ -38355,9 +38476,15 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) "bEK" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/maintenance/fore) +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/machinery/space_heater, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering{ + name = "Engine Room" + }) "bEL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38591,9 +38718,19 @@ /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bFg" = ( -/obj/effect/turf_decal/tile/brown, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/suit_storage_unit/engine, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, /turf/open/floor/plasteel, -/area/quartermaster/miningoffice) +/area/engine/engineering{ + name = "Engine Room" + }) "bFh" = ( /obj/effect/turf_decal/tile/brown, /obj/machinery/light, @@ -39247,14 +39384,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bGu" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Fore Maintenance"; - req_one_access_txt = "12;46" +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/hallway/primary/port/fore) +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/restrooms) "bGv" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -39621,20 +39759,15 @@ /turf/open/floor/plasteel, /area/security/main) "bHi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/effect/landmark/event_spawn, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port/fore) +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/restrooms) "bHj" = ( /obj/structure/table, /obj/structure/bedsheetbin/towel, @@ -40740,7 +40873,11 @@ /obj/machinery/airalarm{ pixel_y = 24 }, -/turf/open/floor/wood, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/library) "bJD" = ( /obj/machinery/disposal/bin{ @@ -40891,15 +41028,11 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "bJU" = ( -/obj/effect/turf_decal/tile/brown, -/obj/machinery/light{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/restrooms) "bJV" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 1; @@ -41361,7 +41494,11 @@ /area/science/robotics/lab) "bKR" = ( /obj/structure/bookcase/random/religion, -/turf/open/floor/wood, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/library) "bKS" = ( /obj/machinery/door/firedoor, @@ -42981,22 +43118,30 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bOn" = ( -/obj/machinery/door/airlock/external/glass{ - name = "Shuttle Maintenance Access" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Bathroom Maintenance"; + req_access_txt = "12" }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/crew_quarters/toilet/restrooms) "bOo" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/docking, /turf/open/floor/plating, /area/hallway/secondary/exit) "bOp" = ( -/obj/machinery/door/airlock/external/glass{ - name = "Departures Shuttle Dock" +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/aft) "bOq" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -44925,8 +45070,12 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bRZ" = ( -/obj/structure/bookcase/random/fiction, -/turf/open/floor/wood, +/obj/structure/bookcase/random/nonfiction, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/library) "bSa" = ( /obj/structure/closet/secure_closet/medical3, @@ -46569,15 +46718,15 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "bVt" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/brown{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/effect/turf_decal/tile/purple{ + dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/starboard/central) +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "bVu" = ( /obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom{ @@ -47901,11 +48050,9 @@ /turf/open/floor/plating, /area/router) "bXN" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/smartfridge/organ/preloaded, +/turf/closed/wall, +/area/medical/morgue) "bXO" = ( /obj/structure/table/glass, /obj/machinery/reagentgrinder, @@ -47922,7 +48069,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/space/nearstation) "bXQ" = ( /obj/structure/closet/l3closet/scientist, @@ -47979,7 +48126,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/space/nearstation) "bXW" = ( /obj/structure/disposalpipe/segment{ @@ -48671,8 +48818,10 @@ /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/restrooms) "bZo" = ( -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/restrooms) +/obj/effect/turf_decal/tile/brown, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "bZp" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -48706,13 +48855,13 @@ /turf/open/floor/plating, /area/hallway/primary/central) "bZs" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Bathroom Maintenance"; - req_access_txt = "12" +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/tile/purple{ + dir = 4 }, -/turf/open/floor/plating, -/area/crew_quarters/toilet/restrooms) +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "bZt" = ( /turf/closed/wall, /area/maintenance/starboard/aft) @@ -48859,8 +49008,11 @@ /turf/open/floor/carpet, /area/library) "bZK" = ( -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/library) "bZL" = ( /obj/machinery/air_sensor/atmos/nitrous_tank, @@ -52612,9 +52764,8 @@ /turf/open/floor/plasteel, /area/engine/teg_hot) "chC" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/disposal) +/turf/closed/wall/r_wall/rust, +/area/space/nearstation) "chD" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -53089,6 +53240,17 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"ciA" = ( +/obj/effect/turf_decal/tile/brown, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "ciB" = ( /obj/structure/frame/computer, /obj/structure/disposalpipe/segment, @@ -54655,18 +54817,15 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) "clO" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/tile/purple{ + dir = 4 }, -/obj/machinery/door/airlock/engineering{ - name = "Electrical Substation"; - req_access_txt = "10" +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 }, -/turf/open/floor/plating, -/area/engine/storage_shared{ - name = "Electrical Substation" - }) +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "clP" = ( /obj/structure/table, /obj/item/stock_parts/subspace/amplifier, @@ -55625,6 +55784,29 @@ icon_state = "panelscorched" }, /area/maintenance/port/fore) +"cnG" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Shuttle Maintenance Access" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"cnH" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Departures Shuttle Dock" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"cnI" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/space/nearstation) +"cnJ" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cnK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -55634,10 +55816,47 @@ }, /turf/open/floor/plasteel, /area/engine/teg_hot) +"cnL" = ( +/obj/structure/closet/crate/science, +/obj/item/stack/sheet/metal/ten, +/obj/item/stack/sheet/glass/five, +/obj/item/stack/rods/twentyfive, +/obj/item/target/syndicate, +/obj/item/target/alien, +/obj/item/target, +/obj/item/target/clown, +/turf/open/floor/plasteel, +/area/science/mixing) +"cnM" = ( +/obj/machinery/mass_driver{ + dir = 8; + id = "pb_in"; + name = "Router Driver" + }, +/turf/open/floor/plating/airless, +/area/router/aux) +"cnN" = ( +/obj/structure/bookcase/random/fiction, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/library) "cnO" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/engine, /area/science/storage) +"cnP" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/item/kirbyplants{ + icon_state = "plant-21"; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/library) "cnS" = ( /obj/structure/cable{ icon_state = "0-2" @@ -61156,18 +61375,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"cyd" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) "cye" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -67714,13 +67921,6 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/restrooms) -"cJg" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/restrooms) "cJh" = ( /obj/structure/table, /obj/structure/bedsheetbin/towel, @@ -67819,16 +68019,6 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, -/area/engine/engineering{ - name = "Engine Room" - }) -"cJq" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/machinery/suit_storage_unit/engine, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, /area/engine/engineering{ name = "Engine Room" }) @@ -69803,13 +69993,6 @@ "cNB" = ( /turf/open/floor/plating, /area/quartermaster/miningdock/airless) -"cNC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/restrooms) "cND" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, @@ -85536,8 +85719,8 @@ aaU aaa aaU aEa -cMK -bxq +aXm +aXs bxC akI bxK @@ -92528,7 +92711,7 @@ aaa aaa aaa aaa -aaU +aaa bcy bed boJ @@ -93042,11 +93225,11 @@ aaa aaa aaa aaa -aaa +aaU +bQe +aaU aaU aaU -aaa -aaa bcw bdf bdf @@ -93299,13 +93482,13 @@ aaa aaa aaa aaa -aaa -bim +aaU +aye +aaU aaU aaU -aaa bcw -bhy +cnL bdf bpR bJw @@ -93557,10 +93740,10 @@ aaa aaa aaa aaU -aaa -aaa -aaU -aaU +chC +abp +abp +abp bcy biK bdf @@ -93814,10 +93997,10 @@ aaa aaa aaa aaU -aaa -aaa -aaa -aaU +brs +brs +brs +brs bcw biT bdf @@ -94071,8 +94254,8 @@ aaU aaU aaU aaU -aaa -aaa +cnI +cnJ bgW bgW bgW @@ -97834,16 +98017,16 @@ aaa aaa aaa aaa -aak -aak -aak +aaU +aaa +aaU aaa aaa aaa aaa aaa aaa -akN +bhy alq alq apn @@ -98169,7 +98352,7 @@ aZy aZy aZy aZy -beJ +aXg bfd bjg bUt @@ -98348,9 +98531,9 @@ aaa aaa aaa aaa -aWj -aWj -aWj +aaU +aaa +aaU aaa aaa aaa @@ -98598,16 +98781,16 @@ aaU aar abM ace -aWj -aWj -aWj -aWj -aWj -aWj -aWj -aWj +aaU +aaU +aaU +aaU +aaU +aaU +aaU +aaU abp -aWj +aaU aaU aaU aaU @@ -98855,16 +99038,16 @@ aaU aar abR ace -aWj +aaU aaa aaa aaa aaa aaa aaa -aWj -aWj -aWj +aaU +aaa +aaU aaa aaa aaa @@ -99112,7 +99295,7 @@ aaU aar abM acf -aWj +aaU aaa aaa aaa @@ -99368,8 +99551,8 @@ aaa aaU aaa acM -aWj -aWj +aaa +aaU aaa aaa aaa @@ -99454,8 +99637,8 @@ bWi aWh cmN aZy -aXg -bZK +baE +bRZ bZF csH bay @@ -99625,7 +99808,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -99712,7 +99895,7 @@ baS bbr aZy bJC -bZF +bZK bZF cjx bay @@ -99882,7 +100065,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -99969,10 +100152,10 @@ cdE bbs aZy bKR -bRZ +cnN bZF cCJ -baE +cnP bZS bZS bGI @@ -100139,7 +100322,7 @@ aaa aaU aaa aaU -aWj +aaa aaU add adC @@ -100396,7 +100579,7 @@ aaa aaU aaa aaU -aWj +aaa aaU adf aad @@ -100653,7 +100836,7 @@ aaa aaU aaa aaU -aWj +aaa aaU adf aad @@ -100910,7 +101093,7 @@ aaa aaU aaa aaU -aWj +aaa aaU adf aad @@ -101167,7 +101350,7 @@ aaa aaU aaa aaU -aWj +aaa aaU adf aad @@ -101424,7 +101607,7 @@ aaa aaU aaa aaU -aWj +aaa aaU adf aad @@ -101681,7 +101864,7 @@ aaa aaU aaa aaU -aWj +aaa aaU adh adC @@ -101938,7 +102121,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -102193,9 +102376,9 @@ aaa aaa aaa aaU -aar aaU -aWj +aaU +aaU aaU aaU aaU @@ -102450,9 +102633,9 @@ aaa aaa aaa abp -aar +akN aTd -aWj +aaa abp aaa aaU @@ -102707,9 +102890,9 @@ aaa aaa aaa aaU -aar aaU -aWj +aaU +aaU aaU aaU aaU @@ -102966,7 +103149,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -103223,7 +103406,7 @@ aaa aaa aaa aaU -aWj +aaa aaU aaa adj @@ -103480,7 +103663,7 @@ aaa aaa aaa aaU -aWj +aaa aaU adj adj @@ -103737,7 +103920,7 @@ aaa aaa aaa aaU -aWj +aaa aaU adj adF @@ -103994,7 +104177,7 @@ aaa aaa aaa aaU -aWj +aaa aaU adj adF @@ -104251,7 +104434,7 @@ aaa aaa aaa aaU -aWj +aaa aaU adj adF @@ -104285,12 +104468,12 @@ aJF aJF aJF aJF -bEr -bEK -bEK -bGu -bHi aHa +aHp +aHp +aIJ +aLc +aMo cBj cBw cBF @@ -104508,7 +104691,7 @@ aaa aaa aaa aaU -aWj +aaa aaU adj adF @@ -104547,15 +104730,15 @@ aim aim aEh aEq -aHp -aIJ -aLc -aQS -aQS -aQS -aQS +aMG aQS +aWr aWu +aWu +aWu +aWu +aWu +bbQ aWA aXd bre @@ -104765,7 +104948,7 @@ aaa aaa aaa aaU -aWj +aaa aaU adj adF @@ -105022,7 +105205,7 @@ aaa aaa aaa aaU -aWj +aaa aaU adj adj @@ -105279,7 +105462,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaU adj @@ -105536,7 +105719,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -105660,7 +105843,7 @@ cbm byQ bHK cGU -byQ +bXN bHK bIu bJh @@ -105793,7 +105976,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -106050,7 +106233,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -106307,7 +106490,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -106564,7 +106747,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -106821,7 +107004,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -107078,7 +107261,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -107191,11 +107374,11 @@ cIA cIP cIY cJf -cJg -cNC -bZo -bZs -bXN +bGu +bHi +bJU +bOn +bOp bJp bJp cyT @@ -107335,7 +107518,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -107592,7 +107775,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaU @@ -107849,7 +108032,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -108104,9 +108287,9 @@ aaa aaa aaa aaU -aar +aaU aTd -aWj +aaU aaU aaU aaU @@ -108363,7 +108546,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -108620,7 +108803,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -108877,7 +109060,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -109013,7 +109196,7 @@ bme bme bme bme -bOn +cnG bme bOo aaa @@ -109134,7 +109317,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -109272,7 +109455,7 @@ bOe bOi cnd bOl -bOp +cnH aaa aaa aaa @@ -109391,7 +109574,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -109648,7 +109831,7 @@ aaa aaa aaa aaU -aWj +aaa aae aaa aaa @@ -109786,7 +109969,7 @@ bme bOh cne bOm -bOp +cnH aaa aaa aaa @@ -109905,7 +110088,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -110162,7 +110345,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -110242,7 +110425,7 @@ bsz aej agc agT -cJq +bFg apm aqS arP @@ -110419,7 +110602,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -110480,7 +110663,7 @@ bpH ang coh cfy -clO +bvb aRu aSv aSy @@ -110498,7 +110681,7 @@ cxa bPr sVC aNH -bbQ +bEr cJA aqO anE @@ -110676,7 +110859,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -110755,7 +110938,7 @@ cxb bsz aej agC -aoJ +bEK cJB apm aqT @@ -110933,7 +111116,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -111188,9 +111371,9 @@ aaa aaa aaa aaU -aav +aaU aTd -aWj +aaU aaU aaU aaU @@ -111328,7 +111511,7 @@ bme bOi bOj bOl -bOp +cnH cnE aaa aaa @@ -111447,7 +111630,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -111704,7 +111887,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaU @@ -111842,7 +112025,7 @@ bOe bOh cnc bOm -bOp +cnH aaa aaa aaa @@ -111961,7 +112144,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -111982,7 +112165,7 @@ afm apT adS bEu -ahN +aif afa aha ahx @@ -112097,7 +112280,7 @@ bme bme bme bme -bOn +cnG bme bOo aaa @@ -112218,7 +112401,7 @@ aaa aaa aaa aaU -aWj +aaa aaa aaa aaa @@ -112239,7 +112422,7 @@ aiV anv aec axS -ahN +aif afK ahb ahx @@ -112288,7 +112471,7 @@ bxP arE aMI cgX -chC +bim cik bwW bsT @@ -112475,7 +112658,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -112496,7 +112679,7 @@ aja aoM aec agi -ahN +aif afK ahc ahx @@ -112730,9 +112913,9 @@ aaa aaa aaa aaU -aav aaU -aWj +aaU +aaU aaU aaU aaU @@ -112753,7 +112936,7 @@ bEp bEp bEp bEp -ahN +aif afK ahd ahx @@ -112798,8 +112981,8 @@ arE att cqr arE -byt -bzo +byv +bAN aMI cgZ cif @@ -112987,9 +113170,9 @@ aaa aaa aaa abp -aav +aaa aTd -aWj +aaa abp aaa aaa @@ -113010,7 +113193,7 @@ ajS aHj bvm ahP -ahN +aif afK afK ahT @@ -113055,7 +113238,7 @@ att btP bwo arE -byu +bAd arE aMI cha @@ -113244,19 +113427,19 @@ aaa aaa aaa aaU -aav aaU -aWj -aWj -aWj -aWj -aWj -aWj -aWj -aWj -aWj -aWj -aWj +aaU +aaU +aaU +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaU aaV aaU aaU @@ -113267,7 +113450,7 @@ ahP ahP bzp ahP -ahN +aif aiB afK ahU @@ -113306,13 +113489,13 @@ aYF beQ bjw bwu -bAd -aMo -aMG -bVt +bnl bwp -bvb -byv +bwM +bxq +byt +byu +bAz ceQ cgT chc @@ -113503,7 +113686,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -113524,7 +113707,7 @@ akn aJR bEg ahP -aif +aoJ ass afK afK @@ -113760,7 +113943,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -114017,7 +114200,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -114274,7 +114457,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -114531,7 +114714,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -114788,7 +114971,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -115045,7 +115228,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -115302,7 +115485,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -115559,7 +115742,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -115816,7 +115999,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -116073,7 +116256,7 @@ aaa aaU aaa aaU -aWj +aaa aaU aaa aaa @@ -116330,7 +116513,7 @@ aaa aaU aaa ahv -aWj +aaa aaU aaa aaa @@ -116585,7 +116768,7 @@ aaa aaa aaa aaU -aav +cnM abM acj aaU @@ -119537,13 +119720,13 @@ cjb cxV cyb cyc -cyd -bFg -bHR -bHR -bHR -bJU -bHR +bVt +bZo +bZs +bZs +bZs +ciA +clO bHR bLb boK diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 1b7b9c7414..53ca9a72b0 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1464,19 +1464,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - name = "External Solar Access"; - req_access_txt = "10; 13" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/maintenance/solars/starboard/fore) "acQ" = ( @@ -17256,19 +17244,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "External Solar Access"; - req_one_access_txt = "13; 24; 10" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/maintenance/solars/port/fore) "aIk" = ( @@ -25107,14 +25083,8 @@ /turf/open/floor/plasteel/dark, /area/security/execution/education) "aUK" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "Security External Airlock"; - req_access_txt = "63" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 }, /turf/open/floor/plating, /area/security/prison) @@ -43327,21 +43297,16 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "bzd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/closet/emcloset/anchored, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) +/obj/structure/lattice, +/turf/closed/wall, +/area/construction/mining/aux_base) "bze" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bzf" = ( -/obj/machinery/light/small{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/anchored, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/gravity_generator) @@ -44447,122 +44412,83 @@ /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "bAI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/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/engine/gravity_generator) -"bAJ" = ( -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electricshock{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/gravity_generator) -"bAK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/status_display/evac{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bAL" = ( -/obj/machinery/power/apc/highcap/five_k{ - areastring = "/area/engine/gravity_generator"; - dir = 1; - name = "Gravity Generator APC"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bAM" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/item/radio/intercom{ - name = "Station Intercom"; - pixel_y = 26 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bAN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/power/smes{ - charge = 5e+006 - }, -/obj/structure/sign/nanotrasen{ - pixel_y = 32 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 26 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, +/obj/structure/closet/firecloset, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bAO" = ( -/turf/closed/wall, -/area/engine/gravity_generator) -"bAP" = ( -/obj/machinery/door/firedoor, +/area/construction/mining/aux_base) +"bAJ" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/construction/mining/aux_base) +"bAK" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 + dir = 8 }, /obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" + name = "External Solar Access"; + req_access_txt = "10; 13" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/starboard/fore) +"bAL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/space, +/area/solar/port/fore) +"bAM" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "External Solar Access"; + req_one_access_txt = "13; 24; 10" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/port/fore) +"bAN" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Security External Airlock"; + req_access_txt = "63" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/turf/open/floor/plating, +/area/security/prison) +"bAO" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bAP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bAQ" = ( @@ -45609,7 +45535,7 @@ }, /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) -"bCw" = ( +"bCx" = ( /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -45623,37 +45549,9 @@ }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"bCx" = ( -/obj/effect/turf_decal/bot_white, -/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/engine/gravity_generator) -"bCy" = ( -/obj/effect/turf_decal/bot_white/left, -/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/engine/gravity_generator) "bCz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -45668,26 +45566,91 @@ /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "bCA" = ( -/obj/structure/cable/white, /obj/structure/cable/white{ icon_state = "0-2" }, /obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/electricshock{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/engine/gravity_generator) "bCB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/status_display/evac{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 9 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bCC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/engine/gravity_generator"; + dir = 1; + name = "Gravity Generator APC"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "0-2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bCD" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/item/radio/intercom{ + name = "Station Intercom"; + pixel_y = 26 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bCE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 26 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bCF" = ( +/obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -45698,80 +45661,26 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bCD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bCE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bCF" = ( -/obj/structure/sign/warning/radiation, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/gravity_generator) -"bCG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Engineering - Gravity Generator Foyer"; - dir = 4; - name = "engineering camera" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "bCH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bCI" = ( -/obj/structure/closet/radiation, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 26 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, +/turf/closed/wall, /area/engine/gravity_generator) "bCJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -45784,9 +45693,6 @@ icon_state = "0-4" }, /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /turf/open/floor/plating, /area/engine/break_room) "bCL" = ( @@ -45801,13 +45707,13 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, /turf/open/floor/plasteel, /area/engine/break_room) "bCM" = ( @@ -47193,11 +47099,8 @@ /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) "bEn" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/sign/warning/radiation{ - pixel_x = -32 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -47212,112 +47115,124 @@ /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "bEo" = ( -/turf/open/floor/circuit/green, -/area/engine/gravity_generator) -"bEp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Gravity Generator Chamber"; - req_access_txt = "19; 61" +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/structure/cable/white{ - icon_state = "1-4" +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "bEq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bEr" = ( -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/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, /area/engine/gravity_generator) "bEs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/structure/cable/white{ - icon_state = "1-4" + icon_state = "1-2" }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/cable/white{ - icon_state = "1-8" - }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bEt" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bEu" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/highsecurity{ - name = "Gravity Generator Room"; - req_access_txt = "19;23" - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bEv" = ( -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bEw" = ( -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/structure/cable{ + icon_state = "1-8" }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"bEx" = ( +"bEu" = ( +/obj/structure/sign/warning/radiation, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) +"bEv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Engineering - Gravity Generator Foyer"; + dir = 4; + name = "engineering camera" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bEw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bEx" = ( +/obj/structure/closet/radiation, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 26 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable/white{ + icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bEy" = ( @@ -47330,9 +47245,6 @@ req_access_txt = "10" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -47342,18 +47254,21 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/break_room) "bEz" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/end{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/break_room) "bEA" = ( @@ -47363,27 +47278,26 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/break_room) "bEB" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/open/floor/plasteel, /area/engine/break_room) "bEC" = ( @@ -47393,25 +47307,25 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/break_room) "bED" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, /turf/open/floor/plasteel, /area/engine/break_room) "bEE" = ( @@ -48446,22 +48360,15 @@ /turf/open/floor/plasteel/dark, /area/aisat) "bFW" = ( -/obj/machinery/gravity_generator/main/station, -/obj/effect/turf_decal/bot_white, -/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, +/turf/open/floor/circuit/green, /area/engine/gravity_generator) "bFX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/sign/warning/radiation{ + pixel_x = -32 + }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -48475,89 +48382,89 @@ /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "bFY" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bFZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/structure/cable/white{ + icon_state = "4-8" }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bGa" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 +/obj/structure/cable/white{ + icon_state = "1-4" }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bGb" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/port_gen/pacman, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bGc" = ( -/obj/structure/sign/warning/radiation, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/gravity_generator) -"bGd" = ( /obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/engine/gravity_generator) -"bGe" = ( -/obj/machinery/status_display/evac{ - pixel_x = 32; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 + icon_state = "4-8" }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"bGf" = ( -/obj/structure/closet/radiation, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 +"bGc" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "Gravity Generator Room"; + req_access_txt = "19;23" + }, +/obj/structure/cable/white{ + icon_state = "4-8" }, -/obj/machinery/light/small, /obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bGd" = ( +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/delivery, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bGe" = ( +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"bGf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "bGg" = ( /obj/machinery/firealarm{ dir = 4; @@ -48565,6 +48472,9 @@ }, /obj/item/kirbyplants/random, /obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/break_room) "bGh" = ( @@ -48579,6 +48489,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner, /area/engine/break_room) "bGi" = ( @@ -48586,15 +48499,16 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/dark/corner, /area/engine/break_room) "bGj" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, /turf/open/floor/plasteel/dark/corner, /area/engine/break_room) "bGk" = ( @@ -49624,9 +49538,7 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "bHN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -49641,68 +49553,50 @@ /area/engine/gravity_generator) "bHO" = ( /obj/structure/cable/white, +/obj/structure/cable/white{ + icon_state = "0-2" + }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electricshock{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plating, /area/engine/gravity_generator) "bHP" = ( -/obj/machinery/light, -/obj/machinery/status_display/evac{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Engineering - Gravity Generator"; - dir = 1; - name = "engineering camera" - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 8 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bHQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/turf_decal/stripes/line, +/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, /area/engine/gravity_generator) "bHR" = ( -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 }, /obj/effect/turf_decal/stripes/line{ - dir = 6 + dir = 4 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bHS" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 24 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/port_gen/pacman, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/machinery/light_switch{ - pixel_y = -26 - }, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/plasteel/twenty, -/obj/item/wrench, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/gravity_generator) @@ -49710,27 +49604,23 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/poddoor/preopen{ - id = "transitlock"; - name = "Transit Tube Lockdown Door" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 10 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "bHU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/poddoor/preopen{ - id = "transitlock"; - name = "Transit Tube Lockdown Door" +/obj/machinery/status_display/evac{ + pixel_x = 32; + pixel_y = -32 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) @@ -51017,27 +50907,30 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Transit Tube Access"; - req_one_access_txt = "32;19" +/obj/machinery/door/poddoor/preopen{ + id = "transitlock"; + name = "Transit Tube Lockdown Door" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ 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/engine/transit_tube) +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "bJP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/preopen{ + id = "transitlock"; + name = "Transit Tube Lockdown Door" + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/r_wall, -/area/engine/transit_tube) +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "bJQ" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral{ @@ -52186,50 +52079,54 @@ /turf/closed/wall/r_wall, /area/engine/transit_tube) "bLG" = ( -/obj/structure/closet/emcloset/anchored, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Gravity Generator Chamber"; + req_access_txt = "19; 61" }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/engine/transit_tube) -"bLH" = ( -/obj/machinery/status_display/evac, -/turf/closed/wall, -/area/engine/transit_tube) -"bLI" = ( -/obj/machinery/power/apc/highcap/five_k{ - areastring = "/area/engine/transit_tube"; - dir = 1; - name = "Transit Tube Access APC"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable/white{ - icon_state = "0-4" + icon_state = "1-4" + }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) +"bLH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/engine/break_room) +"bLI" = ( +/obj/machinery/gravity_generator/main/station, +/obj/effect/turf_decal/bot_white, +/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/engine/transit_tube) +/area/engine/gravity_generator) "bLJ" = ( /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Transit Tube Access"; + req_one_access_txt = "32;19" + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -52241,35 +52138,11 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/cable/white{ - icon_state = "1-8" - }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bLK" = ( -/obj/item/kirbyplants/random, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/button/door{ - id = "transitlock"; - name = "Transit Tube Lockdown Control"; - pixel_y = 26; - req_access_txt = "39; 19" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/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, +/turf/closed/wall/r_wall, /area/engine/transit_tube) "bLL" = ( /obj/item/kirbyplants/random, @@ -53595,29 +53468,14 @@ /turf/open/space, /area/space/nearstation) "bNH" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable/white{ - icon_state = "2-4" +/obj/structure/sign/warning/radiation, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/turf/open/space, -/area/space/nearstation) +/turf/closed/wall/r_wall, +/area/engine/gravity_generator) "bNI" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Exterior Access"; - req_one_access_txt = "32;19" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/structure/closet/emcloset/anchored, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -53631,12 +53489,6 @@ /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bNJ" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -53647,39 +53499,21 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/firecloset, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bNK" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Exterior Access"; - req_one_access_txt = "32;19" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/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, +/obj/machinery/status_display/evac, +/turf/closed/wall, /area/engine/transit_tube) "bNL" = ( -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/engine/transit_tube"; + dir = 1; + name = "Transit Tube Access APC"; + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -53690,15 +53524,16 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bNM" = ( /obj/structure/cable/white{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -53709,11 +53544,22 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bNN" = ( -/obj/machinery/light/small{ - dir = 4 +/obj/item/kirbyplants/random, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/button/door{ + id = "transitlock"; + name = "Transit Tube Lockdown Control"; + pixel_y = 26; + req_access_txt = "39; 19" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -54901,9 +54747,38 @@ /turf/open/space, /area/space/nearstation) "bPL" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, /obj/machinery/light/small, -/obj/structure/sign/warning/vacuum{ - pixel_x = -32 +/turf/open/floor/plasteel/dark, +/area/engine/transit_tube) +"bPM" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Exterior Access"; + req_one_access_txt = "32;19" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -54917,20 +54792,11 @@ }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) -"bPM" = ( -/turf/closed/wall, -/area/engine/transit_tube) "bPN" = ( -/obj/item/kirbyplants/random, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -26; - pixel_y = -26 +/obj/structure/cable/white{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -54944,6 +54810,9 @@ /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bPO" = ( +/obj/structure/cable/white{ + icon_state = "1-8" + }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -54954,15 +54823,16 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bPP" = ( -/obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light_switch{ - pixel_x = 22; - pixel_y = -10 +/obj/machinery/light/small{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -56192,13 +56062,15 @@ /turf/open/space, /area/space/nearstation) "bRV" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/engine/transit_tube) -"bRW" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Transit Tube Access"; - req_one_access_txt = "32;19" +/obj/item/kirbyplants/random, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -26; + pixel_y = -26 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -56212,10 +56084,38 @@ }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) +"bRW" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, +/area/engine/transit_tube) "bRX" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, +/obj/machinery/light_switch{ + pixel_x = 22; + pixel_y = -10 + }, +/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/engine/transit_tube) "bRY" = ( /obj/machinery/keycard_auth{ @@ -57376,22 +57276,9 @@ /turf/open/space, /area/space/nearstation) "bTL" = ( -/obj/structure/window/reinforced{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, -/obj/structure/table/reinforced, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "AI Satellite - Transit Tube"; - name = "ai camera"; - network = list("minisat"); - start_active = 1 - }, -/obj/item/clipboard, -/obj/item/folder/blue, -/obj/item/pen, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -57403,30 +57290,16 @@ dir = 8 }, /turf/open/floor/plasteel/dark, -/area/engine/transit_tube) +/area/engine/gravity_generator) "bTM" = ( -/obj/structure/chair/office/dark{ - dir = 8 - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -26; - pixel_y = 26 - }, -/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, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/engine/transit_tube) "bTN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Transit Tube Access"; + req_one_access_txt = "32;19" + }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -57437,22 +57310,13 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bTO" = ( -/obj/item/kirbyplants/random, +/obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/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, +/turf/open/floor/plating, /area/engine/transit_tube) "bTP" = ( /obj/machinery/computer/station_alert{ @@ -59145,9 +59009,6 @@ /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bWc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -59158,10 +59019,15 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/chair/office/light{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bWd" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -59172,6 +59038,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bWe" = ( @@ -60847,6 +60719,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bYp" = ( @@ -72264,7 +72139,7 @@ pixel_y = 32 }, /turf/open/space, -/area/space/nearstation) +/area/space) "crE" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -83035,22 +82910,16 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) "cJI" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +/obj/structure/cable/white, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) +/turf/open/floor/plating, +/area/engine/gravity_generator) "cJJ" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -108364,19 +108233,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - name = "External Solar Access"; - req_access_txt = "10; 13" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/maintenance/solars/starboard/aft) "dBN" = ( @@ -115581,6 +115438,10 @@ /turf/open/floor/plasteel, /area/maintenance/port/aft) "dOc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/maintenance/port/aft) +"dOd" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -115597,11 +115458,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/port/aft) -"dOd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) "dOe" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral{ @@ -115610,6 +115466,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -122648,19 +122505,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "External Solar Access"; - req_access_txt = "10; 13" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/maintenance/solars/port/aft) "ebE" = ( @@ -124004,14 +123849,16 @@ /turf/open/floor/plasteel/grimy, /area/chapel/office) "edX" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "edY" = ( @@ -124731,16 +124578,6 @@ /turf/open/floor/carpet, /area/chapel/office) "eft" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "efu" = ( @@ -125581,6 +125418,24 @@ /obj/machinery/chem_dispenser/apothecary, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) +"eMb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/item/flashlight, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel{ + heat_capacity = 1e+006 + }, +/area/maintenance/port) "eMD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -125733,6 +125588,9 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"fMf" = ( +/turf/closed/wall, +/area/engine/transit_tube) "fRK" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -126016,6 +125874,24 @@ /obj/item/reagent_containers/glass/beaker, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"ikq" = ( +/obj/machinery/light, +/obj/machinery/status_display/evac{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Engineering - Gravity Generator"; + dir = 1; + name = "engineering camera" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "imI" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -126143,6 +126019,25 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"iUc" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "External Solar Access"; + req_access_txt = "10; 13" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/port/aft) "jdx" = ( /obj/structure/lattice, /obj/structure/grille, @@ -126344,6 +126239,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/science/mixing) +"jUu" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) "jYx" = ( /obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, @@ -126736,6 +126634,20 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"mte" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/light_switch{ + pixel_y = -26 + }, +/obj/structure/table/reinforced, +/obj/item/stack/sheet/plasteel/twenty, +/obj/item/wrench, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "mvm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -126877,6 +126789,18 @@ }, /turf/open/floor/plasteel, /area/maintenance/port/fore) +"nYv" = ( +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "odz" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -127171,6 +127095,25 @@ dir = 9 }, /area/science/circuit) +"qhB" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/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/engine/transit_tube) "qnx" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input, /turf/open/floor/engine/vacuum, @@ -127408,6 +127351,25 @@ }, /turf/open/floor/plasteel/grimy, /area/library) +"tML" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "External Solar Access"; + req_access_txt = "10; 13" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/starboard/aft) "tNT" = ( /obj/effect/landmark/carpspawn, /turf/open/space, @@ -127653,6 +127615,32 @@ /obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) +"vFT" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Exterior Access"; + req_one_access_txt = "32;19" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/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/engine/transit_tube) "vHN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -127688,6 +127676,18 @@ }, /turf/open/floor/plasteel, /area/maintenance/port/aft) +"vYo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "wei" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -127750,6 +127750,16 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/plasteel/white, /area/science/misc_lab) +"wFK" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/space, +/area/space/nearstation) "wZT" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -127972,6 +127982,23 @@ }, /turf/open/floor/plating, /area/engine/atmos) +"yja" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/maintenance/port) "yjc" = ( /obj/machinery/power/apc{ areastring = "/area/science/research/abandoned"; @@ -145314,12 +145341,12 @@ aaa aaa aaa aaa +aaa ajr ajr aad ajr ajr -ajr aad ajr ajr @@ -145571,11 +145598,11 @@ aaa aaa aaa aaa +aaa ajr aaa aaa aad -aaa aad aaa aad @@ -145828,11 +145855,11 @@ aaa aaa aaa aaa +aaa ajr aad ajr ajr -aad ajr ajr ajr @@ -146085,6 +146112,7 @@ aaa aaa aaa aaa +aaa ajr aaa ajr @@ -146096,7 +146124,6 @@ aad aad aad aad -aad ajr aaa bNF @@ -146342,6 +146369,7 @@ aaa aaa aaa aaa +aaa aad aaa ajr @@ -146352,12 +146380,11 @@ bxC bxC bxC bxC -bxC -aad +jUu aad aad bNF -aad +qgU bVZ aad aad @@ -146599,20 +146626,20 @@ aaa aaa aaa aaa -ajr -aad -ajr -aad -bxC -bAH -bAH -bEn -bAH -bAH -bxC -aad -ajr aaa +ajr +aad +ajr +aad +bxC +bAH +bAH +bFX +bAH +bAH +jUu +aad +ajr bNF aaa bVZ @@ -146856,20 +146883,20 @@ aaa aaa aaa aaa +aaa ajr aaa aad aad bxC bAH -bCw bCx -bCy +bEo +bCF bAH -bxC +jUu aad ajr -aaa bNF aaa bVZ @@ -146896,8 +146923,8 @@ cdB cdB cdB car -aad -abj +caE +yja caE caE cOj @@ -147090,7 +147117,7 @@ aAP aAP avY ask -ask +bAL aad abj abj @@ -147113,22 +147140,22 @@ aaa aaa aaa aaa +aaa ajr aad ajr aad bxC bAH -bCx bEo bFW +bLI bAH -bxC -aad +jUu aad aad bNF -aad +qgU bVY aad aad @@ -147153,8 +147180,8 @@ car car car car -caE -cJI +eMb +cqI caE cme cOk @@ -147346,9 +147373,9 @@ aad aad aad aad -aad -apK -aad +aFp +bAM +aFp aLb aad aaa @@ -147370,20 +147397,20 @@ aaa aaa aaa aaa +aaa aad aaa ajr aad bxC bAH -bCy +bCF +bEo bCx -bCw bAH -bxC +jUu aad ajr -aaa bNF aaa bVZ @@ -147628,19 +147655,19 @@ ajr ajr aad ajr +ajr aad ajr aad bxC -bAI bCz +bEn bAH -bFX bHN -bxC +bTL +jUu aad aad -aaa bNF aaa bVZ @@ -147888,18 +147915,18 @@ aad aaa aaa aad +aad bxC -bAJ -bCA -bEp bCA bHO -bxC +bLG +bHO +cJI +jUu aad -bNH -bPK +wFK bRU -aad +qgU bVZ aad car @@ -148145,18 +148172,18 @@ ajr ajr aad aad +aad bxC -bAK bCB bEq bFY bHP -bxC -aad -bNF -aad -aad -aad +ikq +bLF +bLF +vFT +bLF +qgU bVZ aad car @@ -148402,18 +148429,18 @@ aad aad aad aad +aad bxC -bAL bCC bEr bFZ bHQ -bxC +vYo bLF bNI +qhB bLF -bLF -aad +qgU bVZ aad car @@ -148659,18 +148686,18 @@ aRF aRF aad aad +aad bxC -bAM bCD bEs bGa bHR -bxC -bLG +nYv +bLF bNJ bPL bLF -bTK +qgU bWa bTK car @@ -148916,18 +148943,18 @@ bpO aRF aad aad +aad bxC -bAN bCE bEt bGb bHS -bxC -bLH +mte +bLF bNK bPM +fMf bLF -bTL bWb bYn car @@ -149172,15 +149199,15 @@ bpO btK aRF aad +qgU +qgU bxC bxC -bxC -bCF bEu bGc +bNH bxC -bxC -bLI +bLF bNL bPN bRV @@ -149430,9 +149457,9 @@ btL aRF abj bxC -bzd -bAO -bCG +bxC +bxC +bCI bEv bGd bHT @@ -150203,9 +150230,9 @@ aMG bxE bzg bzg -bCJ -bEy bzg +bEy +bLH bHV bJQ bLL @@ -154660,7 +154687,7 @@ aaa aad aad aad -ajr +qgU aad ebC aad @@ -154918,9 +154945,9 @@ ajr aad aad aad -aad -ebC -aad +eak +iUc +eak aad aaa aac @@ -169915,8 +169942,8 @@ aaa aaa aaa aad -aad abi +bAI abR abi acp @@ -170172,9 +170199,9 @@ aaa aaa aaa abj -abj abH abS +abS acd acq acH @@ -170428,9 +170455,9 @@ aaa aaa aaa aaa -aaa -aad +qgU abi +bAJ abT abi acr @@ -170684,9 +170711,9 @@ aaa aaa aaa aaa -aaa -aac +jdx aad +bzd abi abi ace @@ -170941,8 +170968,8 @@ aaa aaa aaa aaa -aaa -aac +jdx +aad aad aad aad @@ -171198,7 +171225,7 @@ aaa aaa aaa aaa -aaa +aac aac aac aad @@ -172489,9 +172516,9 @@ aac aaa aad aad -aad -acQ -aad +acf +bAK +acf aad aaa abi @@ -172745,7 +172772,7 @@ aaa aac aac aad -aac +aad aad aaj aad @@ -182646,9 +182673,9 @@ aaA aaa aaa aad -aaa -dBN -aad +dyV +tML +dyV aad aaa aad @@ -182902,9 +182929,9 @@ aci aaA aaa aaa -ajr -aad -dBO +qgU +qgU +dBN aad aaa dFy @@ -184873,7 +184900,7 @@ aaa ajr ajr ajr -aaa +qgU aKZ aKZ aKZ @@ -185130,9 +185157,9 @@ aaa aaa aaa aaa -aaa -aaa +qgU abj +bAN aUK aWs aXT @@ -185388,11 +185415,11 @@ aaa aaa aaa aaa -aaa aad aKV aKV aKV +aKV aZK bbt aNJ diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index e848fd87d1..518fa4e81e 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -2134,14 +2134,11 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port) "adM" = ( -/obj/machinery/door/airlock/external{ - name = "Abandoned External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/dark, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, /area/maintenance/fore) "adN" = ( /obj/effect/turf_decal/loading_area{ @@ -2160,11 +2157,16 @@ /turf/open/floor/engine, /area/ai_monitored/storage/satellite) "adO" = ( +/obj/machinery/door/airlock/external{ + name = "Satellite External Airlock"; + req_one_access_txt = "32;19" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/engine, +/turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/atmos) "adP" = ( /obj/machinery/status_display/ai, @@ -2513,6 +2515,9 @@ /turf/open/floor/plating, /area/security/execution/education) "aeD" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating/airless, /area/space/nearstation) @@ -2598,13 +2603,20 @@ }, /obj/machinery/light/small, /turf/open/floor/plating/airless, -/area/maintenance/starboard/fore) +/area/space/nearstation) "aeL" = ( +/obj/machinery/door/airlock/external{ + name = "Abandoned External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, +/turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) "aeM" = ( /obj/machinery/photocopier, @@ -5704,13 +5716,6 @@ /turf/open/floor/plasteel/dark, /area/security/courtroom) "ajI" = ( -/obj/machinery/door/airlock/external{ - name = "Abandoned External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -6935,7 +6940,6 @@ dir = 4 }, /obj/structure/closet/emcloset/anchored, -/obj/effect/decal/cleanable/cobweb, /obj/machinery/light/small{ dir = 8 }, @@ -9658,12 +9662,19 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/genetics) "aqp" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating/airless, -/area/solar/port/fore) +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/solars/port/fore) "aqq" = ( /obj/machinery/status_display/ai{ pixel_x = -32 @@ -12462,12 +12473,18 @@ /turf/open/floor/plasteel, /area/bridge) "auN" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating/airless, -/area/solar/starboard/fore) +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) "auO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -64779,11 +64796,15 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "bZG" = ( -/obj/structure/sign/warning/vacuum/external{ - pixel_y = 32 +/obj/machinery/door/airlock/external{ + name = "Abandoned External Airlock" }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/fore) "bZH" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -64902,9 +64923,18 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bZP" = ( -/obj/structure/cable, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/obj/machinery/door/airlock/external{ + name = "Prison External Airlock"; + req_access_txt = "2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "bZQ" = ( /obj/structure/closet/l3closet/janitor, /obj/structure/window/reinforced, @@ -67690,11 +67720,6 @@ }, /area/ai_monitored/turret_protected/ai) "ceA" = ( -/obj/machinery/door/airlock/external{ - name = "Satellite External Airlock"; - req_one_access_txt = "32;19" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ icon_state = "1-2" @@ -69610,15 +69635,12 @@ /turf/open/floor/plasteel, /area/engine/atmos) "chO" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/atmos) "chP" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/delivery, -/obj/machinery/light, -/turf/open/floor/plasteel/dark, +/obj/structure/sign/warning/vacuum/external, +/turf/closed/wall, /area/ai_monitored/turret_protected/aisat/atmos) "chQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -69697,12 +69719,19 @@ /turf/open/floor/plasteel, /area/engine/engineering) "chU" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating/airless, -/area/solar/port/aft) +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) "chW" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -71343,16 +71372,9 @@ /turf/open/floor/plating, /area/engine/engineering) "ckJ" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "ckK" = ( @@ -71763,16 +71785,9 @@ /turf/open/space/basic, /area/space/nearstation) "clx" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/solars/port/aft) @@ -74873,6 +74888,9 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plating{ icon_state = "platingdmg1" }, @@ -74942,6 +74960,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, /area/maintenance/disposal) "crg" = ( @@ -76410,14 +76431,12 @@ /turf/open/floor/plating/airless, /area/solar/starboard/aft) "ctO" = ( -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, /area/maintenance/disposal) "ctP" = ( /obj/structure/cable{ @@ -76438,16 +76457,9 @@ /turf/open/floor/plating/airless, /area/solar/starboard/aft) "ctS" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/solars/port/fore) @@ -77673,12 +77685,18 @@ /turf/open/floor/plating, /area/maintenance/disposal) "cwb" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/lattice/catwalk, -/turf/open/floor/plating/airless, -/area/solar/starboard/aft) +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/aft) "cwc" = ( /obj/machinery/atmospherics/components/binary/pump/on, /obj/machinery/airlock_sensor/incinerator_atmos{ @@ -77774,9 +77792,9 @@ /area/maintenance/starboard/aft) "cwk" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/turf/open/floor/plating/asteroid/airless, +/turf/open/floor/plating/airless, /area/space/nearstation) "cwl" = ( /obj/structure/cable{ @@ -77954,13 +77972,6 @@ /turf/open/floor/plating, /area/maintenance/starboard) "cwD" = ( -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard) "cwE" = ( @@ -78131,6 +78142,9 @@ icon_state = "1-8" }, /obj/effect/decal/cleanable/blood/old, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/disposal) "cwQ" = ( @@ -78244,6 +78258,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -78301,6 +78318,9 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plating, /area/maintenance/disposal) "cxh" = ( @@ -78340,6 +78360,9 @@ /area/maintenance/disposal) "cxj" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -78387,17 +78410,21 @@ }, /area/maintenance/port/fore) "cxp" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/disposal) "cxq" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/area/maintenance/fore) "cxr" = ( /obj/structure/sign/poster/contraband/clown, /turf/closed/wall/rust, @@ -83810,16 +83837,9 @@ }, /area/maintenance/starboard) "cMH" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "cMI" = ( @@ -84487,13 +84507,6 @@ /turf/open/space/basic, /area/space/nearstation) "cUD" = ( -/obj/machinery/door/airlock/external{ - name = "Prison External Airlock"; - req_access_txt = "2" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -84511,6 +84524,10 @@ icon_state = "wood-broken" }, /area/security/vacantoffice) +"dky" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/space/nearstation) "dlg" = ( /obj/machinery/light, /turf/open/floor/wood, @@ -84662,6 +84679,12 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/closed/mineral/random/labormineral, /area/space/nearstation) +"fAn" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_y = 32 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "fXq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -85114,6 +85137,16 @@ /obj/structure/sign/poster/ripped, /turf/closed/wall, /area/crew_quarters/fitness/recreation) +"lqz" = ( +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard) "lKu" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko, @@ -85171,6 +85204,9 @@ }, /turf/open/floor/plasteel/dark, /area/science/research) +"mKj" = ( +/turf/closed/wall/rust, +/area/security/execution/education) "mKp" = ( /obj/structure/cable{ icon_state = "1-2" @@ -85537,6 +85573,12 @@ icon_state = "wood-broken4" }, /area/maintenance/port/fore) +"yaV" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "ydo" = ( /obj/structure/cable{ icon_state = "4-8" @@ -99350,9 +99392,9 @@ bTK bVs hNk bXG +abp cZm -bZG -aeU +fAn aeU aeU aeU @@ -99609,7 +99651,7 @@ cTF bXH cUD bZP -aeU +dky coy aeU aeU @@ -99862,19 +99904,19 @@ aaG aez cIj aeB -cZm +mKj +aez aez aez cko cko -cko -aeU aeU aeU aeU aeU +cnS chU -aeU +cnS aUz aeU aeu @@ -100317,9 +100359,9 @@ aeu aeU aeU aeU -aeU +ctH aqp -aeU +ctH aeu aeu aeu @@ -112391,7 +112433,7 @@ aaa aaa aeU aUz -aeu +adH adH adH adH @@ -112648,8 +112690,8 @@ aaa aaa acm aeU -aeU adQ +cxq alN chj aoc @@ -112905,7 +112947,7 @@ aeR aeR aes aes -aes +bZG adM alO amL @@ -113162,7 +113204,7 @@ aaa aaa acm aaa -aaa +adH adH adH adQ @@ -120603,9 +120645,9 @@ aaa aaa aaa aaa -aeU aeK baH +baH afb baH baH @@ -124312,9 +124354,9 @@ cpb crf cnu cnu +cnu cko aeu -aeu aaa aaa aaa @@ -124570,7 +124612,7 @@ cxg cxj ctO cxp -aeU +yaV ciQ aeU aaa @@ -124826,7 +124868,7 @@ cnu cnd cnu cnu -cxq +cnu cwk cxu aeU @@ -126360,9 +126402,9 @@ bzG bzG aeu aeu -aeU +ckz cwb -aeU +ckz aeU aUz aeU @@ -129382,9 +129424,9 @@ aaQ aeo aeo acm -acm -acK -acm +bkd +lqz +bkd aaa aaa aaa @@ -129617,9 +129659,9 @@ aeu aeu aeu aeu -aeU +cLM auN -aeU +cLM aeu aeu aeu diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 16659f3e7a..6338213195 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -793,10 +793,16 @@ /turf/open/floor/plating, /area/security/prison) "abN" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg3" +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" }, -/area/security/prison) +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/maintenance/solars/port/fore) "abO" = ( /obj/structure/cable{ icon_state = "1-4" @@ -954,6 +960,9 @@ /area/security/prison) "acg" = ( /obj/machinery/light/small, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -962,18 +971,22 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plating, -/area/security/prison) -"aci" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, /obj/machinery/door/airlock/external{ name = "Security External Airlock"; req_access_txt = "1" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, /turf/open/floor/plating, /area/security/prison) +"aci" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/door/airlock/external{ + req_one_access_txt = "13,8" + }, +/turf/open/space, +/area/maintenance/starboard/fore) "acj" = ( /obj/machinery/light/small{ dir = 1 @@ -2047,14 +2060,12 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "aef" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/solars/port/fore) "aeg" = ( @@ -2310,9 +2321,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/plating, /area/maintenance/solars/port/fore) "aeH" = ( @@ -7007,14 +7015,8 @@ /turf/closed/wall, /area/crew_quarters/fitness/recreation) "amG" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/closed/wall, +/area/space) "amH" = ( /obj/machinery/door/airlock/external{ req_one_access_txt = "13,8" @@ -11553,19 +11555,15 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "avJ" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 }, /turf/open/floor/plating, -/area/maintenance/port/fore) +/area/maintenance/starboard/fore) "avK" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plating, /area/maintenance/port/fore) "avL" = ( @@ -37959,12 +37957,8 @@ /turf/open/floor/wood, /area/crew_quarters/heads/hop) "bwl" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Space Access Airlock"; - req_one_access_txt = "32;19" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /turf/open/floor/plasteel/dark, /area/engine/break_room) @@ -38524,9 +38518,6 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/plasteel/dark, /area/engine/break_room) "bxn" = ( @@ -44779,7 +44770,7 @@ dir = 8 }, /turf/open/space, -/area/aisat) +/area/space/nearstation) "bKR" = ( /obj/structure/window/reinforced{ dir = 8 @@ -46796,14 +46787,14 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "bOY" = ( -/obj/structure/sign/warning/vacuum/external{ - pixel_x = 32 +/obj/machinery/door/airlock/external{ + req_access_txt = "13" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 }, /turf/open/floor/plating, -/area/maintenance/starboard/fore) +/area/space/nearstation) "bOZ" = ( /obj/machinery/chem_master/condimaster{ name = "CondiMaster Neo"; @@ -53609,9 +53600,6 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/plating, /area/engine/atmos) "ccY" = ( @@ -54894,17 +54882,12 @@ /turf/open/space, /area/solar/port/aft) "cfA" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, +/obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, /turf/open/floor/plating, -/area/maintenance/port/aft) +/area/maintenance/port/fore) "cfB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/yellow{ @@ -63173,12 +63156,9 @@ /turf/open/space, /area/solar/port/aft) "cvj" = ( -/obj/structure/closet/emcloset, -/obj/structure/sign/warning/vacuum/external{ - pixel_x = -32 - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/obj/structure/lattice, +/turf/closed/wall/r_wall, +/area/engine/break_room) "cvk" = ( /obj/structure/closet/crate, /obj/item/crowbar/red, @@ -63664,7 +63644,10 @@ /turf/open/floor/plasteel, /area/science/circuit) "cwc" = ( -/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "Auxiliary Escape Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/maintenance/aft) "cwd" = ( @@ -63693,9 +63676,14 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/space/nearstation) +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "cwh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -70269,7 +70257,7 @@ pixel_x = -32 }, /turf/open/space, -/area/space/nearstation) +/area/space) "cIz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -70553,17 +70541,19 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cJf" = ( /obj/structure/cable/yellow{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/structure/lattice/catwalk, -/turf/open/space, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, /area/space/nearstation) "cJg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -71813,6 +71803,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/aft) "cLA" = ( @@ -72157,15 +72148,12 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "cMk" = ( -/obj/machinery/power/apc/highcap/five_k{ - areastring = "/area/maintenance/aft"; - name = "Aft Maintenance APC"; - pixel_y = -24 +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 }, -/obj/structure/cable/yellow, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/maintenance/aft) +/turf/open/space, +/area/space) "cMl" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty{ @@ -72750,10 +72738,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "cNe" = ( -/obj/machinery/door/airlock/external{ - name = "Auxiliary Escape Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/maintenance/aft) "cNf" = ( @@ -76631,9 +76615,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "dbR" = ( @@ -81313,6 +81294,19 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"gsT" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/solar/starboard/aft) "gEk" = ( /obj/structure/cable/yellow{ icon_state = "2-8" @@ -81350,9 +81344,7 @@ /turf/open/floor/plasteel, /area/science/misc_lab) "gNe" = ( -/obj/machinery/light/small{ - dir = 8 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/aft) "gRS" = ( @@ -81393,6 +81385,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"hKW" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/maintenance/aft) "ioI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -81526,13 +81522,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) "jAj" = ( @@ -81656,17 +81645,15 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "kDM" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Space Access Airlock"; + req_one_access_txt = "32;19" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/turf/open/floor/plasteel/dark, +/area/engine/break_room) "kJW" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -81775,14 +81762,9 @@ /turf/open/space/basic, /area/space/nearstation) "lNZ" = ( -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/lattice/catwalk, +/turf/closed/wall/r_wall, +/area/engine/atmos) "lOi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -81902,6 +81884,12 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"mSd" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "mWg" = ( /obj/structure/girder, /obj/structure/grille, @@ -82477,8 +82465,9 @@ /turf/open/floor/plasteel, /area/science/circuit) "sdw" = ( -/turf/open/space/basic, -/area/space/nearstation) +/obj/structure/window/reinforced, +/turf/open/space, +/area/space) "siF" = ( /obj/structure/grille, /turf/open/floor/plating/airless, @@ -82576,6 +82565,12 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) +"sUM" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "sZN" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -82662,6 +82657,13 @@ /obj/machinery/cryopod, /turf/open/floor/plasteel/dark, /area/crew_quarters/cryopod) +"uim" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) "uku" = ( /obj/machinery/atmospherics/pipe/manifold4w/general/visible, /turf/open/floor/plasteel, @@ -82832,6 +82834,10 @@ }, /turf/open/floor/plating, /area/security/prison) +"wkz" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) "wlH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -82853,12 +82859,8 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "wxc" = ( -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock"; - req_access_txt = "24" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /turf/open/floor/plating, /area/engine/atmos) @@ -82869,10 +82871,13 @@ /turf/open/floor/plating, /area/crew_quarters/cryopod) "wFH" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/maintenance/aft"; + name = "Aft Maintenance APC"; + pixel_y = -24 }, -/obj/effect/landmark/blobstart, +/obj/structure/cable/yellow, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/starboard/aft) "wKo" = ( @@ -82880,8 +82885,15 @@ /turf/closed/wall, /area/science/circuit) "wOE" = ( +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Airlock"; + req_access_txt = "24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, /turf/open/floor/plating, -/area/maintenance/aft) +/area/engine/atmos) "wOY" = ( /obj/structure/fans/tiny/invisible, /turf/open/space/basic, @@ -82940,15 +82952,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "xse" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) @@ -83056,6 +83064,19 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"yfW" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) "ygk" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -95238,9 +95259,9 @@ anS anS aaf aaf -aqB -anS -aaf +dne +cfA +dne aaf aaf aaf @@ -95496,7 +95517,7 @@ aaa aaa aaf dne -avJ +avL dne aaf aaa @@ -96581,7 +96602,7 @@ bXt bYC bYC bYC -aaa +bYC aaa aaf aaa @@ -96838,8 +96859,8 @@ bXu bYD bZN jyQ +yfW cda -cej cfz cED chY @@ -97095,7 +97116,7 @@ bXv bYC bYC bYC -aaa +bYC aaa aaf aaa @@ -99168,7 +99189,7 @@ ckN aaa aaf aaf -aaa +lMJ aaa aaf aaa @@ -99423,7 +99444,7 @@ ckQ cjt ckN aaf -aaf +ack cwf ack aaf @@ -99680,10 +99701,10 @@ cjt diJ dux dux -ack +dux cwg -ack -ack +dux +dux aaf aaa aaa @@ -99937,9 +99958,9 @@ crh dxv ctn dux -dux -cfA -dux +sUM +cwh +dyw dux aaf aaf @@ -100194,8 +100215,8 @@ dvt csf cto dux -cvj -cwh +cfF +mSd cxb dux aaa @@ -101647,7 +101668,7 @@ aaa aaa acT aaa -aaf +aee aee aee aee @@ -101904,7 +101925,7 @@ aaf aaf acU aak -aak +abN aef aeG afE @@ -102161,7 +102182,7 @@ aaa aaa aaf aaa -aaf +aee aee aee aee @@ -108580,7 +108601,7 @@ aaa aaa aaa wOY -abN +abe ach aax acN @@ -108838,7 +108859,7 @@ urv abe abe abe -aci +abL aax acO adh @@ -112806,7 +112827,7 @@ cFh cKH cLz wFH -cMk +bTs bTs bTs bTs @@ -113063,8 +113084,8 @@ cJN cCq cgN cMl -wOE bTs +hKW aaf aaf aaf @@ -113321,7 +113342,7 @@ cCq cLA bTs bTs -bTs +hKW aaf aaa aaa @@ -119485,7 +119506,7 @@ aaf aaa aaf dvY -kDM +cJd dvY aaa dbN @@ -119741,13 +119762,13 @@ cEA aaf aaa aaa -ack +blx cJf -ack -aaa -aaf -dbR +blx aaa +dbN +gsT +dbN aaa aaa aaa @@ -119893,7 +119914,7 @@ aaf aaa aaa aaa -sdw +aaa aaa acP acP @@ -119998,9 +120019,9 @@ blx aaa aaa aaa -aaa -aaf -aaa +wkz +uim +wkz aaa aaf dbR @@ -121523,7 +121544,7 @@ cpK ciL csc dvY -vLD +lMJ krD jyv ohj @@ -121780,7 +121801,7 @@ cpL crb csd dvY -vLD +lMJ krD krD noG @@ -123501,7 +123522,7 @@ aaa aaa aaf dni -amG +asB amH anN dnS @@ -123758,7 +123779,7 @@ aaf aaf aaf dnh -amH +avG dnh apd dnS @@ -124014,8 +124035,8 @@ aaa aaf aaa aaf -aaa -ack +dnh +aci dnh ape dnS @@ -127140,8 +127161,8 @@ aaa aaf bpw aaf -aaf -ack +cvj +kDM bxc bzg bAP @@ -127398,7 +127419,7 @@ aaf bpw aaa aaf -aaf +ack bxc bzh bAQ @@ -128190,9 +128211,9 @@ gJs bFZ bAR aaf -bxc +lNZ wxc -bxc +lNZ aaf aaa aaf @@ -128447,9 +128468,9 @@ bVN bXr bAR aaf -aMr -ccY -bBb +lNZ +wOE +lNZ aaf aaa aaf @@ -128704,7 +128725,7 @@ bVO bUJ bAR aaf -aMq +sdw ccY bgo aTQ @@ -129161,8 +129182,8 @@ aaa ack ack atn -bOY -avG +anN +dnS dqT aaf aaa @@ -129218,7 +129239,7 @@ bAR bAR bAR aaf -aMq +sdw ccY aVk aNC @@ -129418,8 +129439,8 @@ aaf aaf aaf dnh -dnh -lNZ +avJ +avG dqT aaf aaa @@ -129674,9 +129695,9 @@ aaa aaa aaf aaa -aaa -aaf -ack +amG +blx +bOY dqT aaf anT @@ -135878,7 +135899,7 @@ blA bnu bpH brU -aOV +cMk aaa aMq bzm @@ -136120,7 +136141,7 @@ aOU aOY aOY aOY -aTT +aNC aaa aaa aaa @@ -136138,7 +136159,7 @@ brV aRy aaa aaa -aTT +aNC aOY aOY aOY @@ -136377,7 +136398,7 @@ aOV aaa aaa aaa -aTU +aaf aaa aRy aRy @@ -136402,7 +136423,7 @@ aaa aaa aaa aaa -aTU +aaf aaa aaa aaa @@ -139461,7 +139482,7 @@ aOV aaa aaa aaa -aTU +aaf aaa aRy aRy @@ -139479,14 +139500,14 @@ bsh aRy bvt aaa -aTU +aaf aaa aaa aaa aaa aaa aaa -aTU +aaf aaa aaa aaa @@ -139718,7 +139739,7 @@ aOX aNw aNw aNw -aTY +bJl aaa aaa aaa @@ -139736,14 +139757,14 @@ bsi aRy aaa aaa -aTY +bJl aNw aNw aNw aNw aNw aNw -aTY +bJl aNw aNw aNw diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index e07873089a..db44dfb92a 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -1244,15 +1244,7 @@ /turf/closed/wall, /area/maintenance/starboard/fore) "abM" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "abN" = ( @@ -23608,22 +23600,9 @@ /turf/open/floor/engine, /area/engine/supermatter) "aKB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, /turf/open/floor/plasteel, /area/maintenance/port/aft) "aKC" = ( @@ -23645,14 +23624,23 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "aKF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/sign/warning/vacuum{ - pixel_x = -32; - pixel_y = 32 +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" }, -/turf/open/floor/plating, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/maintenance/port/aft) "aKG" = ( /obj/structure/cable/white{ @@ -39608,9 +39596,17 @@ /turf/open/floor/plasteel, /area/engine/atmos) "edA" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard/fore) "eew" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -42876,9 +42872,6 @@ /obj/structure/sign/warning/securearea, /turf/closed/wall/rust, /area/maintenance/starboard) -"sIO" = ( -/turf/open/space/basic, -/area/space/nearstation) "sIP" = ( /obj/machinery/vending/cola/random, /obj/effect/turf_decal/bot, @@ -71461,7 +71454,7 @@ aaa aaa aaa aaa -aaa +sdX uhz uhz oxn @@ -71718,7 +71711,7 @@ aac aac aac aac -aaa +sdX uhz iye mJP @@ -91220,7 +91213,7 @@ aaa aae aaa aaa -aac +bxZ abL bxZ swz @@ -91477,7 +91470,7 @@ aaa aae aad aac -bvg +edA abM acu adt @@ -91734,7 +91727,7 @@ aad aah aad aad -aad +bxZ bxZ adq bxZ @@ -93059,7 +93052,7 @@ aRz sIc sIv sFs -sIO +aaa sIU sJe sIU @@ -98477,9 +98470,9 @@ aac aaa aaa aaa -edA +sdX aaa -edA +sdX aac aac aac @@ -98734,9 +98727,9 @@ aac aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aac aaa @@ -98991,9 +98984,9 @@ aaa aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -99248,9 +99241,9 @@ aaa aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -99505,9 +99498,9 @@ aaa aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -99762,9 +99755,9 @@ aaa aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -100019,9 +100012,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -100276,9 +100269,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -100533,9 +100526,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -100790,9 +100783,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -101047,9 +101040,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -101304,9 +101297,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -101561,9 +101554,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -101818,9 +101811,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -102075,9 +102068,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -102332,9 +102325,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -102589,9 +102582,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -102846,9 +102839,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -103103,9 +103096,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -103360,9 +103353,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -103617,9 +103610,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -103874,9 +103867,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -104131,9 +104124,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -104388,9 +104381,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -104645,9 +104638,9 @@ jFP aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -104902,9 +104895,9 @@ aaa aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -105159,9 +105152,9 @@ aaa aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa @@ -105416,9 +105409,9 @@ aaa aaa aaa aaa -edA +sdX aaa -edA +sdX aaa aaa aaa diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index e6f14badd9..846fe48604 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -1846,7 +1846,7 @@ network = list("minisat") }, /turf/open/space, -/area/ai_monitored/turret_protected/AIsatextAS) +/area/ai_monitored/turret_protected/AIsatextAP) "aeA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -2622,9 +2622,6 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/sign/warning/vacuum/external{ - pixel_x = 32 - }, /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, @@ -2744,12 +2741,8 @@ /turf/open/floor/plating, /area/security/main) "agR" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/door/airlock/external{ - name = "MiniSat External Access"; - req_access_txt = "65" +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) @@ -2821,11 +2814,14 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "ahh" = ( -/obj/structure/lattice/catwalk, -/obj/structure/showcase/cyborg/old{ - pixel_y = 20 +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 }, -/turf/open/space, +/obj/machinery/door/airlock/external{ + name = "MiniSat External Access"; + req_access_txt = "65" + }, +/turf/open/floor/plating, /area/space/nearstation) "ahi" = ( /obj/structure/lattice/catwalk, @@ -2927,13 +2923,8 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/main) "ahr" = ( -/obj/structure/lattice, -/obj/machinery/camera/motion{ - c_tag = "MiniSat Entrance"; - network = list("minisat") - }, -/turf/open/space, -/area/space/nearstation) +/turf/closed/wall/r_wall, +/area/space) "ahs" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube, @@ -4690,8 +4681,12 @@ /turf/open/space/basic, /area/space/nearstation) "alb" = ( -/turf/open/floor/wood, -/area/maintenance/department/crew_quarters/dorms) +/obj/structure/lattice/catwalk, +/obj/structure/showcase/cyborg/old{ + pixel_y = 20 + }, +/turf/open/space, +/area/space) "alc" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes/cigars, @@ -8703,13 +8698,9 @@ /turf/closed/wall, /area/bridge) "atZ" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "Bridge External Access"; - req_access_txt = "10;13" - }, -/turf/open/floor/plating, -/area/ai_monitored/turret_protected/aisat_interior) +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) "aua" = ( /obj/structure/closet/secure_closet/freezer/money, /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, @@ -9124,9 +9115,6 @@ /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, -/obj/machinery/light/small{ - dir = 1 - }, /turf/open/floor/plating, /area/bridge) "auV" = ( @@ -13689,14 +13677,13 @@ /turf/open/floor/plating, /area/maintenance/department/cargo) "aFj" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +/obj/structure/lattice, +/obj/machinery/camera/motion{ + c_tag = "MiniSat Entrance"; + network = list("minisat") }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/turf/open/floor/plating, -/area/maintenance/department/cargo) +/turf/open/space, +/area/space/nearstation) "aFk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/spawner/lootdrop/minor/bowler_or_that, @@ -22864,11 +22851,13 @@ /turf/closed/wall, /area/maintenance/solars/starboard) "baH" = ( -/obj/structure/rack, -/obj/item/clothing/mask/gas, -/obj/item/multitool, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Bridge External Access"; + req_access_txt = "10;13" + }, /turf/open/floor/plating, -/area/maintenance/solars/starboard) +/area/ai_monitored/turret_protected/aisat_interior) "baI" = ( /obj/structure/cable{ icon_state = "0-8" @@ -23315,13 +23304,6 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bbL" = ( -/obj/machinery/power/smes, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/maintenance/solars/starboard) -"bbM" = ( /obj/machinery/power/terminal{ dir = 8 }, @@ -23333,17 +23315,10 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard) -"bbO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, +"bbM" = ( +/obj/structure/rack, +/obj/item/clothing/mask/gas, +/obj/item/multitool, /turf/open/floor/plating, /area/maintenance/solars/starboard) "bbP" = ( @@ -23757,16 +23732,6 @@ /turf/open/floor/plating, /area/maintenance/department/cargo) "bcJ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/engineering{ - name = "Starboard Solar Access"; - req_access_txt = "10" - }, -/turf/open/floor/plating, -/area/maintenance/solars/starboard) -"bcK" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -23775,25 +23740,39 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard) -"bcL" = ( +"bcK" = ( /obj/structure/cable{ icon_state = "1-4" }, /turf/open/floor/plating, /area/maintenance/solars/starboard) -"bcN" = ( -/obj/machinery/power/solar_control{ - dir = 8; - id = "starboardsolar"; - name = "Starboard Solar Control" +"bcL" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/solars/starboard) +"bcN" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/bridge) "bcO" = ( /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, /turf/open/floor/plating, /area/maintenance/solars/starboard) "bcQ" = ( @@ -24156,17 +24135,17 @@ }, /area/maintenance/department/cargo) "bdR" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 8; - name = "Starboard Solar APC"; - pixel_x = -24 - }, +/obj/structure/chair/stool, +/obj/item/cigbutt/cigarbutt, /turf/open/floor/plating, /area/maintenance/solars/starboard) "bdS" = ( -/obj/structure/chair/stool, -/obj/item/cigbutt/cigarbutt, +/obj/machinery/power/solar_control{ + dir = 8; + id = "starboardsolar"; + name = "Starboard Solar Control" + }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/solars/starboard) "bdU" = ( @@ -27986,7 +27965,7 @@ dir = 8 }, /turf/open/floor/plasteel/white, -/area/storage/emergency/port) +/area/medical/medbay/zone3) "bny" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ @@ -28005,7 +27984,7 @@ dir = 4 }, /turf/open/floor/plasteel/white, -/area/storage/emergency/port) +/area/medical/medbay/zone3) "bnz" = ( /obj/structure/table, /obj/item/folder/white, @@ -43266,7 +43245,7 @@ /obj/structure/closet/firecloset, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/engine/break_room) "bTR" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 @@ -43455,7 +43434,7 @@ /obj/effect/turf_decal/delivery, /obj/structure/closet/firecloset, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/engine/break_room) "bUp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, @@ -43848,7 +43827,7 @@ /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/manifold4w/scrubbers, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/engine/break_room) "bVd" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics"; @@ -45016,10 +44995,6 @@ /turf/open/floor/plating, /area/chapel/asteroid/monastery) "bXN" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external, /turf/open/floor/plating, /area/chapel/asteroid/monastery) "bXS" = ( @@ -45926,12 +45901,21 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{ dir = 8 }, +/obj/machinery/air_sensor/atmos/incinerator_tank{ + pixel_x = 32; + pixel_y = -32 + }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) "bZV" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/turf/open/floor/plating, +/area/maintenance/department/cargo) "bZY" = ( /turf/closed/wall, /area/chapel/office) @@ -46149,13 +46133,15 @@ icon_state = "4-8" }, /obj/machinery/igniter/incinerator_atmos, -/obj/machinery/air_sensor/atmos/incinerator_tank{ - pixel_x = 32; - pixel_y = -32 - }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) "caP" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/maintenance/disposal/incinerator) +"caQ" = ( /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -46167,13 +46153,9 @@ dir = 8; luminosity = 2 }, -/obj/machinery/camera{ - c_tag = "Turbine Chamber"; - network = list("turbine") - }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"caQ" = ( +"caR" = ( /obj/structure/cable/yellow{ icon_state = "0-8" }, @@ -46183,10 +46165,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"caR" = ( -/obj/machinery/door/poddoor/incinerator_atmos_main, -/turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) "caS" = ( /turf/closed/wall, /area/chapel/asteroid/monastery) @@ -46611,9 +46589,9 @@ /turf/open/floor/plasteel/dark, /area/maintenance/disposal/incinerator) "ccs" = ( -/obj/machinery/door/poddoor/incinerator_atmos_aux, -/turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/obj/structure/lattice, +/turf/closed/wall, +/area/maintenance/department/cargo) "ccu" = ( /obj/structure/flora/ausbushes/leafybush, /turf/open/floor/plating/asteroid, @@ -46786,13 +46764,6 @@ /turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cdl" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Access"; - req_access_txt = "24" - }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cdm" = ( @@ -47328,6 +47299,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) "cfu" = ( @@ -47446,14 +47420,12 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "cfQ" = ( -/obj/structure/chair{ - dir = 8 +/obj/machinery/power/smes, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) +/turf/open/floor/plating, +/area/maintenance/solars/starboard) "cfS" = ( /obj/structure/table/reinforced, /obj/item/tank/internals/emergency_oxygen/engi, @@ -47579,14 +47551,12 @@ /turf/open/floor/plating, /area/engine/engineering) "cgs" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "Engineering External Access"; - req_access_txt = "61" - }, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/light/small{ + dir = 8 + }, /turf/open/floor/plating, /area/engine/engineering) "cgu" = ( @@ -47678,9 +47648,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "cgQ" = ( -/obj/machinery/light/small{ - dir = 8 - }, /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 }, @@ -49453,7 +49420,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/space/basic, -/area/ai_monitored/turret_protected/AIsatextAS) +/area/ai_monitored/turret_protected/AIsatextAP) "cnJ" = ( /obj/effect/turf_decal/delivery, /obj/machinery/vending/wardrobe/sec_wardrobe, @@ -50434,6 +50401,15 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "crB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/department/engine) +"crC" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, @@ -50445,15 +50421,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"crC" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/department/engine) "crD" = ( /obj/structure/table/wood/fancy, /obj/item/storage/box/bodybags, @@ -53207,6 +53174,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"dhS" = ( +/obj/structure/window/reinforced, +/turf/open/space/basic, +/area/space) "dir" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 @@ -53580,13 +53551,15 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "dWp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Engineering External Access"; + req_access_txt = "61" }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/engine/engineering) "dYe" = ( /obj/structure/cable{ @@ -53959,6 +53932,9 @@ /obj/effect/turf_decal/arrows{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) "eWi" = ( @@ -54360,6 +54336,9 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"fRr" = ( +/turf/open/floor/engine/vacuum, +/area/maintenance/disposal/incinerator) "fRs" = ( /turf/closed/wall, /area/crew_quarters/heads/hor) @@ -54572,6 +54551,16 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"gmZ" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Access"; + req_access_txt = "24" + }, +/turf/open/floor/plating, +/area/maintenance/disposal/incinerator) "gna" = ( /turf/open/floor/plasteel/stairs/medium, /area/maintenance/department/crew_quarters/dorms) @@ -54932,6 +54921,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/engineering) +"hbl" = ( +/obj/machinery/door/poddoor/incinerator_atmos_main, +/turf/open/floor/engine/vacuum, +/area/space) "heC" = ( /obj/machinery/power/apc/highcap/five_k{ dir = 8; @@ -55279,14 +55272,15 @@ /turf/open/floor/engine, /area/engine/engineering) "hSM" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" +/obj/machinery/door/airlock/engineering{ + name = "Starboard Solar Access"; + req_access_txt = "10" }, /turf/open/floor/plating, -/area/maintenance/department/science) +/area/maintenance/solars/starboard) "hTl" = ( /obj/structure/sink{ dir = 4; @@ -55395,6 +55389,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) +"igB" = ( +/obj/machinery/camera{ + c_tag = "Turbine Chamber"; + network = list("turbine") + }, +/turf/open/floor/engine, +/area/maintenance/disposal/incinerator) "igE" = ( /obj/structure/table/reinforced, /obj/machinery/button/door{ @@ -55667,7 +55668,7 @@ dir = 9 }, /turf/open/floor/plasteel/white, -/area/storage/emergency/port) +/area/medical/medbay/zone3) "iJi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -57269,6 +57270,15 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) +"mvm" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 8; + name = "Starboard Solar APC"; + pixel_x = -24 + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard) "mwg" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -57459,6 +57469,10 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"nbu" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/r_wall, +/area/space) "ncm" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -58035,6 +58049,10 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) +"ore" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/engine/engineering) "ost" = ( /obj/structure/table/glass, /obj/item/paper_bin{ @@ -58146,13 +58164,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance"; - req_access_txt = "10; 13" - }, /turf/open/floor/plating, /area/maintenance/solars/starboard) "oDP" = ( @@ -58221,6 +58232,12 @@ /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plasteel, /area/maintenance/department/engine) +"oGw" = ( +/obj/item/clothing/mask/gas, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/disposal/incinerator) "oHa" = ( /obj/machinery/power/emitter/anchored{ dir = 8; @@ -59255,6 +59272,10 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"qVk" = ( +/obj/machinery/door/poddoor/incinerator_atmos_aux, +/turf/open/space/basic, +/area/maintenance/disposal/incinerator) "qVP" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -59563,6 +59584,13 @@ icon_state = "panelscorched" }, /area/maintenance/department/engine) +"rzF" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external, +/turf/open/floor/plating, +/area/space/nearstation) "rBh" = ( /obj/structure/mopbucket, /obj/item/mop, @@ -60877,12 +60905,16 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "uXH" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance"; + req_access_txt = "10; 13" + }, /turf/open/floor/plating, /area/maintenance/solars/starboard) "uZb" = ( @@ -61180,6 +61212,15 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"vHf" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/turf/open/floor/plating, +/area/maintenance/department/science) "vIc" = ( /obj/structure/cable{ icon_state = "2-4" @@ -62245,7 +62286,9 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) @@ -77500,9 +77543,9 @@ rLi tlc aiu aht -aaa -azH -aaa +axB +rKr +axB aaa aaa aaa @@ -77760,7 +77803,7 @@ axC axB rKr axB -axC +aaa aaa aaa aaa @@ -78017,7 +78060,7 @@ axC ayz azN axB -axC +aaa aaa aaa aaa @@ -81853,7 +81896,7 @@ ahB ahZ aiB ajc -agy +ajM akB alq alZ @@ -82110,7 +82153,7 @@ ahC aia aiC ajc -agy +ajM akC alr ama @@ -82367,7 +82410,7 @@ ahD aib aiD ajc -agy +ajM akD als amb @@ -82458,9 +82501,9 @@ aht aaa aaa abI -aaa -bSZ -ahi +dhS +cqS +rzF bNs bOw bOw @@ -82624,7 +82667,7 @@ ahB aic aiE agy -agy +ajM akE alt amc @@ -82716,7 +82759,7 @@ abI abI abI aaa -aht +bSZ ahi bNs bNs @@ -84536,8 +84579,8 @@ aaa aaa aaa aaa -kSb -kSb +fon +fon aht aht nKo @@ -88120,7 +88163,7 @@ bDi bDi bDi bIZ -mZE +aaa aaa aaa aaa @@ -88377,8 +88420,8 @@ wNq bva gMO bBX -mZE -mZE +aaa +aaa aaa aaa aaa @@ -88635,7 +88678,7 @@ bBX fdS bBX bBX -mZE +aaa aaa aaa aaa @@ -90436,7 +90479,7 @@ gnq bXk ceU eVy -cfP +bXk bXk bXk bXk @@ -90950,8 +90993,8 @@ cdM bXq xmE ymb -cfQ bXk +ore qWG bXk paU @@ -94698,7 +94741,7 @@ ags adX adX adX -aaa +ahr aaa aaa aaa @@ -94954,8 +94997,8 @@ cnC adX adX adX -ahh -aaa +shH +alb aaa aaa aaa @@ -94970,9 +95013,9 @@ aaa aaa aaa aaa -aaa ahi atY +bcN auU atY lQQ @@ -95211,8 +95254,8 @@ bIK agt agD agR -ahi -aaa +ahh +atZ aaa aaa aaa @@ -95227,9 +95270,9 @@ aaa aaa aaa aaa -aaa ahi -atZ +baH +auV auV awc axg @@ -95468,8 +95511,8 @@ agg adX adX adX -ahh -aaa +shH +alb aaa aaa aaa @@ -95484,11 +95527,11 @@ aaa aaa aaa aaa -aaa ahi atY atY atY +atY axh axh axh @@ -95726,8 +95769,8 @@ ags adX adX adX -ahr -aht +shH +aFj aht aht aht @@ -98814,7 +98857,7 @@ iqc ngp cBr cBs -alb +tap gna klV xbJ @@ -99584,7 +99627,7 @@ aju ajt alQ mnG -alb +tap tap aiS anY @@ -99842,7 +99885,7 @@ alc alR amF pzF -alb +tap anm ajv ajv @@ -101740,7 +101783,7 @@ caN bZT bYw cdl -bYw +oGw bYw aaa mau @@ -101995,9 +102038,9 @@ bYw bZU caO cbF -ccs -cdm -cdm +bYw +gmZ +bYw bYw aht fon @@ -102249,13 +102292,13 @@ bVo bJP aht bYw -bYw +igB caP +fRr +qVk +cdm +cdm bYw -bYw -aaa -aaa -aaa aaa aaa aaa @@ -102505,11 +102548,11 @@ bWg bVo bJP aaa -aaa +bYw bYw caQ bYw -aaa +bYw aaa aaa aaa @@ -102762,10 +102805,10 @@ bJP bJP bJP abI -abI -bZV +aaa +bYw caR -bZV +bYw aaa aaa aaa @@ -103019,10 +103062,10 @@ aaa aaa abI aaa -aaa -aaa -aaa -aaa +abI +nbu +hbl +nbu aaa aaa aaa @@ -106822,7 +106865,7 @@ aEl aEj aEj aht -aht +ccs aEj aEl aEl @@ -107079,10 +107122,10 @@ aTu aUB aEl aaa -aaa -aEl +aEj aZv aUC +aUC bcH aUC aZw @@ -107337,8 +107380,8 @@ aGO aEj aEj aEj -aEj aTx +aFi aGO bcI aFi @@ -107574,10 +107617,10 @@ aaa aaa aaa aaa +aEl +aFi aEj -aFj -aEj -aEj +aaa aEj aEl aEj @@ -107594,12 +107637,12 @@ aUC aVE aUC aUC -aUC aZw -aFi -bcI -aFi -aFi +aEj +aEj +hSM +aEj +aEj kIo bfN aEj @@ -107831,9 +107874,9 @@ aaa aaa aaa aaa -ahi -ahi -ahi +aEj +bZV +aEj aaa aaa aaa @@ -107853,9 +107896,9 @@ aEj aEj aYC baG -baG +cfQ bcJ -baG +mvm baG aEj aEj @@ -108088,9 +108131,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +ahi +ahi +ahi aaa aaa aaa @@ -108624,9 +108667,9 @@ aFi aFi aYD baG -baH +rWE uXH -bcN +rWE baG eZA tDn @@ -108882,7 +108925,7 @@ aXC aYE baG rWE -bbO +oCX rWE baG vzT @@ -109902,7 +109945,7 @@ aaa aaa aaa aaa -mZE +aaa aaa aaa aaa @@ -112504,7 +112547,7 @@ qcH bnd nNN bwm -hSM +lWy bwm bwm aaa @@ -112760,10 +112803,10 @@ riW jtf bnd aht -ahi -ahi -ahi -aht +bwm +vHf +bwm +aaa aht aby aht @@ -113017,9 +113060,9 @@ cOp lGS bnd aaa -aaa -aaa -aaa +ahi +ahi +ahi aht aaa aed diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index bdee4cdcd5..65994dda5a 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -312,6 +312,7 @@ #define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled) #define COMSIG_OBJ_BREAK "obj_break" //from base of /obj/obj_break(): (damage_flag) #define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value) +#define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" //called exclusively in plumbing, for now #define COMSIG_OBJ_ATTACK_GENERIC "obj_attack_generic" //from base of atom/animal_attack(): (/mob/user) #define COMPONENT_STOP_GENERIC_ATTACK 1 diff --git a/code/__DEFINES/plumbing.dm b/code/__DEFINES/plumbing.dm new file mode 100644 index 0000000000..5ea7c46b42 --- /dev/null +++ b/code/__DEFINES/plumbing.dm @@ -0,0 +1,9 @@ +#define FIRST_DUCT_LAYER 1 +#define SECOND_DUCT_LAYER 2 +#define THIRD_DUCT_LAYER 4 +#define FOURTH_DUCT_LAYER 8 +#define FIFTH_DUCT_LAYER 16 + +#define DUCT_LAYER_DEFAULT THIRD_DUCT_LAYER + +#define MACHINE_REAGENT_TRANSFER 10 diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index f4beef7ee8..44e97ef345 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -57,6 +57,10 @@ #define ADD_REAGENT 2 // reagent added #define REM_REAGENT 3 // reagent removed (may still exist) + +#define PILL_STYLE_COUNT 22 //Update this if you add more pill icons or you die (literally, we'll toss a nuke at whever your ip turns up) +#define RANDOM_PILL_STYLE 22 //Dont change this one though + #define THRESHOLD_UNHUSK 50 // health threshold for synthflesh/rezadone to unhusk someone //reagent bitflags, used for altering how they works diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 7a188281d0..81b5c5620f 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -146,11 +146,11 @@ #define SSAIR_EQUALIZE 8 #define SSAIR_ACTIVETURFS 9 +// |= on overlays is not actually guaranteed to not add same appearances but we're optimistically using it anyway. #define COMPILE_OVERLAYS(A)\ if (TRUE) {\ var/list/ad = A.add_overlays;\ var/list/rm = A.remove_overlays;\ - var/list/po = A.priority_overlays;\ if(LAZYLEN(rm)){\ A.overlays -= rm;\ A.remove_overlays = null;\ @@ -159,11 +159,5 @@ A.overlays |= ad;\ A.add_overlays = null;\ }\ - if(LAZYLEN(po)){\ - A.overlays |= po;\ - }\ - else{\ - A.priority_overlays = null;\ - }\ A.flags_1 &= ~OVERLAY_QUEUED_1;\ } diff --git a/code/_onclick/hud/screen_objects/storage.dm b/code/_onclick/hud/screen_objects/storage.dm index ce7bc96c96..72b2d035a3 100644 --- a/code/_onclick/hud/screen_objects/storage.dm +++ b/code/_onclick/hud/screen_objects/storage.dm @@ -122,13 +122,13 @@ if(pixel_size == pixels) return pixel_size = pixels - cut_overlays(TRUE) + cut_overlays() //our icon size is 32 pixels. transform = matrix((pixels - (VOLUMETRIC_STORAGE_BOX_BORDER_SIZE * 2)) / VOLUMETRIC_STORAGE_BOX_ICON_SIZE, 0, 0, 0, 1, 0) left.pixel_x = -((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) - VOLUMETRIC_STORAGE_BOX_BORDER_SIZE right.pixel_x = ((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) + VOLUMETRIC_STORAGE_BOX_BORDER_SIZE - add_overlay(left, TRUE) - add_overlay(right, TRUE) + add_overlay(left) + add_overlay(right) /obj/screen/storage/volumetric_edge layer = VOLUMETRIC_STORAGE_BOX_LAYER diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index e3c415960b..7c9e7634ab 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -29,7 +29,7 @@ SUBSYSTEM_DEF(acid) if(O.acid_level && O.acid_processing()) else - O.cut_overlay(GLOB.acid_overlay, TRUE) + O.update_icon() processing -= O if (MC_TICK_CHECK) diff --git a/code/controllers/subsystem/fluid.dm b/code/controllers/subsystem/fluid.dm new file mode 100644 index 0000000000..c4fa13d693 --- /dev/null +++ b/code/controllers/subsystem/fluid.dm @@ -0,0 +1,5 @@ +PROCESSING_SUBSYSTEM_DEF(fluids) + name = "Fluids" + wait = 20 + stat_tag = "FD" //its actually Fluid Ducts + flags = SS_NO_INIT | SS_TICKER diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index 20eb2af001..ea0f82436c 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -114,67 +114,47 @@ SUBSYSTEM_DEF(overlays) #define NOT_QUEUED_ALREADY (!(flags_1 & OVERLAY_QUEUED_1)) #define QUEUE_FOR_COMPILE flags_1 |= OVERLAY_QUEUED_1; SSoverlays.queue += src; -/atom/proc/cut_overlays(priority = FALSE) - LAZYINITLIST(priority_overlays) +/atom/proc/cut_overlays() LAZYINITLIST(remove_overlays) LAZYINITLIST(add_overlays) remove_overlays = overlays.Copy() add_overlays.Cut() - if(priority) - priority_overlays.Cut() - //If not already queued for work and there are overlays to remove if(NOT_QUEUED_ALREADY && remove_overlays.len) QUEUE_FOR_COMPILE -/atom/proc/cut_overlay(list/overlays, priority) +/atom/proc/cut_overlay(list/overlays) if(!overlays) return overlays = build_appearance_list(overlays) LAZYINITLIST(add_overlays) //always initialized after this point - LAZYINITLIST(priority_overlays) LAZYINITLIST(remove_overlays) var/a_len = add_overlays.len var/r_len = remove_overlays.len - var/p_len = priority_overlays.len remove_overlays += overlays add_overlays -= overlays - - if(priority) - var/list/cached_priority = priority_overlays - LAZYREMOVE(cached_priority, overlays) - var/fa_len = add_overlays.len var/fr_len = remove_overlays.len - var/fp_len = priority_overlays.len //If not already queued and there is work to be done - if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len || fp_len != p_len)) + if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len)) QUEUE_FOR_COMPILE -/atom/proc/add_overlay(list/overlays, priority = FALSE) +/atom/proc/add_overlay(list/overlays) if(!overlays) return overlays = build_appearance_list(overlays) LAZYINITLIST(add_overlays) //always initialized after this point - LAZYINITLIST(priority_overlays) var/a_len = add_overlays.len - var/p_len = priority_overlays.len - if(priority) - priority_overlays += overlays //or in the image. Can we use [image] = image? - var/fp_len = priority_overlays.len - if(NOT_QUEUED_ALREADY && fp_len != p_len) - QUEUE_FOR_COMPILE - else - add_overlays += overlays - var/fa_len = add_overlays.len - if(NOT_QUEUED_ALREADY && fa_len != a_len) - QUEUE_FOR_COMPILE + add_overlays += overlays + var/fa_len = add_overlays.len + if(NOT_QUEUED_ALREADY && fa_len != a_len) + QUEUE_FOR_COMPILE /atom/proc/copy_overlays(atom/other, cut_old) //copys our_overlays from another atom if(!other) diff --git a/code/datums/action.dm b/code/datums/action.dm index 0033df09d7..fbf7487e4d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -157,7 +157,7 @@ /datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE) if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force)) - current_button.cut_overlays(TRUE) + current_button.cut_overlays() current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) current_button.button_icon_state = button_icon_state diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm index 31a90362be..df0a2a091a 100644 --- a/code/datums/components/crafting/recipes/recipes_clothing.dm +++ b/code/datums/components/crafting/recipes/recipes_clothing.dm @@ -40,13 +40,23 @@ reqs = list(/obj/item/paper = 20) category = CAT_CLOTHING +/datum/crafting_recipe/balaclavabreath + name = "Breathaclava" + result = /obj/item/clothing/mask/balaclava/breath + time = 10 + reqs = list(/obj/item/clothing/mask/balaclava = 1, + /obj/item/clothing/mask/breath = 1) + category = CAT_CLOTHING + + + /datum/crafting_recipe/armwraps name = "Armwraps" result = /obj/item/clothing/gloves/fingerless/pugilist time = 60 tools = list(TOOL_WIRECUTTER) reqs = list(/obj/item/stack/sheet/cloth = 4, - /obj/item/stack/sheet/durathread = 2, + /obj/item/stack/sticky_tape = 2, /obj/item/stack/sheet/leather = 2) category = CAT_CLOTHING diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index ad3ae9dca2..f47a879a9a 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -2,6 +2,15 @@ //Large Objects// ///////////////// +/datum/crafting_recipe/plunger + name = "Plunger" + result = /obj/item/plunger + time = 1 + reqs = list(/obj/item/stack/sheet/plastic = 1, + /obj/item/stack/sheet/mineral/wood = 1) + category = CAT_MISC + subcategory = CAT_TOOL + /datum/crafting_recipe/showercurtain name = "Shower Curtains" reqs = list(/obj/item/stack/sheet/cloth = 2, diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index 51098756d3..8c4e62979b 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -119,7 +119,7 @@ UnregisterSignal(weapon, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) if(overlay) var/atom/A = parent - A.cut_overlay(overlay, TRUE) + UnregisterSignal(A,COMSIG_ATOM_UPDATE_OVERLAYS) qdel(overlay) return ..() @@ -326,7 +326,8 @@ var/matrix/M = matrix() M.Translate(pixelX, pixelY) overlay.transform = M - hit.add_overlay(overlay, TRUE) + RegisterSignal(hit,COMSIG_ATOM_UPDATE_OVERLAYS,.proc/apply_overlay) + hit.update_icon() if(harmful) hit.visible_message("[weapon] embeds itself in [hit]!") @@ -339,6 +340,8 @@ else hit.visible_message("[weapon] sticks itself to [hit]!") +/datum/component/embedded/proc/apply_overlay(atom/source, list/overlay_list) + overlay_list += overlay /datum/component/embedded/proc/examineTurf(datum/source, mob/user, list/examine_list) if(harmful) diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm new file mode 100644 index 0000000000..6592e41103 --- /dev/null +++ b/code/datums/components/plumbing/_plumbing.dm @@ -0,0 +1,215 @@ +/datum/component/plumbing + ///Index with "1" = /datum/ductnet/theductpointingnorth etc. "1" being the num2text from NORTH define + var/list/datum/ductnet/ducts = list() + ///shortcut to our parents' reagent holder + var/datum/reagents/reagents + ///TRUE if we wanna add proper pipe outless under our parent object. this is pretty good if i may so so myself + var/use_overlays = TRUE + ///We can't just cut all of the parents' overlays, so we'll track them here + var/list/image/ducterlays + ///directions in wich we act as a supplier + var/supply_connects + ///direction in wich we act as a demander + var/demand_connects + ///FALSE to pretty much just not exist in the plumbing world so we can be moved, TRUE to go plumbo mode + var/active = FALSE + ///if TRUE connects will spin with the parent object visually and codually, so you can have it work in any direction. FALSE if you want it to be static + var/turn_connects = TRUE + +/datum/component/plumbing/Initialize(start=TRUE, _turn_connects=TRUE) //turn_connects for wheter or not we spin with the object to change our pipes + if(parent && !istype(parent, /atom/movable)) + return COMPONENT_INCOMPATIBLE + var/atom/movable/AM = parent + if(!AM.reagents) + return COMPONENT_INCOMPATIBLE + reagents = AM.reagents + turn_connects = _turn_connects + + RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED,COMSIG_PARENT_PREQDELETED), .proc/disable) + RegisterSignal(parent, list(COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH), .proc/toggle_active) + + if(start) + enable() + + if(use_overlays) + create_overlays() + +/datum/component/plumbing/process() + if(!demand_connects || !reagents) + STOP_PROCESSING(SSfluids, src) + return + if(reagents.total_volume < reagents.maximum_volume) + for(var/D in GLOB.cardinals) + if(D & demand_connects) + send_request(D) +///Can we be added to the ductnet? +/datum/component/plumbing/proc/can_add(datum/ductnet/D, dir) + if(!active) + return + if(!dir || !D) + return FALSE + if(num2text(dir) in ducts) + return FALSE + + return TRUE +///called from in process(). only calls process_request(), but can be overwritten for children with special behaviour +/datum/component/plumbing/proc/send_request(dir) + process_request(amount = MACHINE_REAGENT_TRANSFER, reagent = null, dir = dir) +///check who can give us what we want, and how many each of them will give us +/datum/component/plumbing/proc/process_request(amount, reagent, dir) + var/list/valid_suppliers = list() + var/datum/ductnet/net + if(!ducts.Find(num2text(dir))) + return + net = ducts[num2text(dir)] + for(var/A in net.suppliers) + var/datum/component/plumbing/supplier = A + if(supplier.can_give(amount, reagent, net)) + valid_suppliers += supplier + for(var/A in valid_suppliers) + var/datum/component/plumbing/give = A + give.transfer_to(src, amount / valid_suppliers.len, reagent, net) +///returns TRUE when they can give the specified amount and reagent. called by process request +/datum/component/plumbing/proc/can_give(amount, reagent, datum/ductnet/net) + if(amount <= 0) + return + + if(reagent) //only asked for one type of reagent + for(var/A in reagents.reagent_list) + var/datum/reagent/R = A + if(R.type == reagent) + return TRUE + else if(reagents.total_volume > 0) //take whatever + return TRUE +///this is where the reagent is actually transferred and is thus the finish point of our process() +/datum/component/plumbing/proc/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) + if(!reagents || !target || !target.reagents) + return FALSE + if(reagent) + reagents.trans_id_to(target.parent, reagent, amount) + else + reagents.trans_to(target.parent, amount) +///We create our luxurious piping overlays/underlays, to indicate where we do what. only called once if use_overlays = TRUE in Initialize() +/datum/component/plumbing/proc/create_overlays() + var/atom/movable/AM = parent + for(var/image/I in ducterlays) + AM.overlays.Remove(I) + qdel(I) + ducterlays = list() + for(var/D in GLOB.cardinals) + var/color + var/direction + if(D & demand_connects) + color = "red" //red because red is mean and it takes + else if(D & supply_connects) + color = "blue" //blue is nice and gives + else + continue + var/image/I + if(turn_connects) + switch(D) + if(NORTH) + direction = "north" + if(SOUTH) + direction = "south" + if(EAST) + direction = "east" + if(WEST) + direction = "west" + I = image('icons/obj/plumbing/plumbers.dmi', "[direction]-[color]", layer = AM.layer - 1) + else + I = image('icons/obj/plumbing/plumbers.dmi', color, layer = AM.layer - 1) //color is not color as in the var, it's just the name + I.dir = D + AM.add_overlay(I) + ducterlays += I +///we stop acting like a plumbing thing and disconnect if we are, so we can safely be moved and stuff +/datum/component/plumbing/proc/disable() + if(!active) + return + STOP_PROCESSING(SSfluids, src) + for(var/A in ducts) + var/datum/ductnet/D = ducts[A] + D.remove_plumber(src) + active = FALSE + for(var/D in GLOB.cardinals) + if(D & (demand_connects | supply_connects)) + for(var/obj/machinery/duct/duct in get_step(parent, D)) + duct.attempt_connect() + +///settle wherever we are, and start behaving like a piece of plumbing +/datum/component/plumbing/proc/enable() + if(active) + return + update_dir() + active = TRUE + var/atom/movable/AM = parent + for(var/obj/machinery/duct/D in AM.loc) //Destroy any ducts under us. Ducts also self destruct if placed under a plumbing machine. machines disable when they get moved + if(D.anchored) //that should cover everything + D.disconnect_duct() + + if(demand_connects) + START_PROCESSING(SSfluids, src) + + for(var/D in GLOB.cardinals) + if(D & (demand_connects | supply_connects)) + for(var/atom/movable/A in get_step(parent, D)) + if(istype(A, /obj/machinery/duct)) + var/obj/machinery/duct/duct = A + duct.attempt_connect() + else + var/datum/component/plumbing/P = A.GetComponent(/datum/component/plumbing) + if(P) + direct_connect(P, D) + +/// Toggle our machinery on or off. This is called by a hook from default_unfasten_wrench with anchored as only param, so we dont have to copypaste this on every object that can move +/datum/component/plumbing/proc/toggle_active(obj/O, new_state) + if(new_state) + enable() + else + disable() +/** We update our connects only when we settle down by taking our current and original direction to find our new connects +* If someone wants it to fucking spin while connected to something go actually knock yourself out +*/ +/datum/component/plumbing/proc/update_dir() + if(!turn_connects) + return + var/atom/movable/AM = parent + var/new_demand_connects + var/new_supply_connects + var/new_dir = AM.dir + var/angle = 180 - dir2angle(new_dir) + if(new_dir == SOUTH) + demand_connects = initial(demand_connects) + supply_connects = initial(supply_connects) + else + for(var/D in GLOB.cardinals) + if(D & initial(demand_connects)) + new_demand_connects += turn(D, angle) + if(D & initial(supply_connects)) + new_supply_connects += turn(D, angle) + demand_connects = new_demand_connects + supply_connects = new_supply_connects +///Give the direction of a pipe, and it'll return wich direction it originally was when it's object pointed SOUTH +/datum/component/plumbing/proc/get_original_direction(dir) + var/atom/movable/AM = parent + return turn(dir, dir2angle(AM.dir) - 180) +//special case in-case we want to connect directly with another machine without a duct +/datum/component/plumbing/proc/direct_connect(datum/component/plumbing/P, dir) + if(!P.active) + return + var/opposite_dir = turn(dir, 180) + if(P.demand_connects & opposite_dir && supply_connects & dir || P.supply_connects & opposite_dir && demand_connects & dir) //make sure we arent connecting two supplies or demands + var/datum/ductnet/net = new() + net.add_plumber(src, dir) + net.add_plumber(P, opposite_dir) + +///has one pipe input that only takes, example is manual output pipe +/datum/component/plumbing/simple_demand + demand_connects = NORTH +///has one pipe output that only supplies. example is liquid pump and manual input pipe +/datum/component/plumbing/simple_supply + supply_connects = NORTH +///input and output, like a holding tank +/datum/component/plumbing/tank + demand_connects = WEST + supply_connects = EAST diff --git a/code/datums/components/plumbing/chemical_acclimator.dm b/code/datums/components/plumbing/chemical_acclimator.dm new file mode 100644 index 0000000000..1cbe6ff017 --- /dev/null +++ b/code/datums/components/plumbing/chemical_acclimator.dm @@ -0,0 +1,21 @@ +/datum/component/plumbing/acclimator + demand_connects = WEST + supply_connects = EAST + var/obj/machinery/plumbing/acclimator/AC + +/datum/component/plumbing/acclimator/Initialize(start=TRUE, _turn_connects=TRUE) + . = ..() + if(!istype(parent, /obj/machinery/plumbing/acclimator)) + return COMPONENT_INCOMPATIBLE + AC = parent + +/datum/component/plumbing/acclimator/can_give(amount, reagent) + . = ..() + if(. && AC.emptying) + return TRUE + return FALSE +///We're overriding process and not send_request, because all process does is do the requests, so we might aswell cut out the middle man and save some code from running +/datum/component/plumbing/acclimator/process() + if(AC.emptying) + return + . = ..() diff --git a/code/datums/components/plumbing/filter.dm b/code/datums/components/plumbing/filter.dm new file mode 100644 index 0000000000..76b76323c5 --- /dev/null +++ b/code/datums/components/plumbing/filter.dm @@ -0,0 +1,59 @@ +///The magical plumbing component used by the chemical filters. The different supply connects behave differently depending on the filters set on the chemical filter +/datum/component/plumbing/filter + demand_connects = NORTH + supply_connects = SOUTH | EAST | WEST //SOUTH is straight, EAST is left and WEST is right. We look from the perspective of the insert + +/datum/component/plumbing/filter/Initialize() + . = ..() + if(!istype(parent, /obj/machinery/plumbing/filter)) + return COMPONENT_INCOMPATIBLE + +/datum/component/plumbing/filter/can_give(amount, reagent, datum/ductnet/net) + . = ..() + if(.) + var/direction + for(var/A in ducts) + if(ducts[A] == net) + direction = get_original_direction(text2num(A)) //we need it relative to the direction, so filters don't change when we turn the filter + break + if(!direction) + return FALSE + if(reagent) + if(!can_give_in_direction(direction, reagent)) + return FALSE + +/datum/component/plumbing/filter/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) + if(!reagents || !target || !target.reagents) + return FALSE + var/direction + for(var/A in ducts) + if(ducts[A] == net) + direction = get_original_direction(text2num(A)) + break + if(reagent) + reagents.trans_id_to(target.parent, reagent, amount) + else + for(var/A in reagents.reagent_list) + var/datum/reagent/R = A + if(!can_give_in_direction(direction, R.type)) + continue + var/new_amount + if(R.volume < amount) + new_amount = amount - R.volume + reagents.trans_id_to(target.parent, R.type, amount) + amount = new_amount + if(amount <= 0) + break +///We check if the direction and reagent are valid to give. Needed for filters since different outputs have different behaviours +/datum/component/plumbing/filter/proc/can_give_in_direction(dir, reagent) + var/obj/machinery/plumbing/filter/F = parent + switch(dir) + if(SOUTH) //straight + if(!F.left.Find(reagent) && !F.right.Find(reagent)) + return TRUE + if(WEST) //right + if(F.right.Find(reagent)) + return TRUE + if(EAST) //left + if(F.left.Find(reagent)) + return TRUE diff --git a/code/datums/components/plumbing/reaction_chamber.dm b/code/datums/components/plumbing/reaction_chamber.dm new file mode 100644 index 0000000000..90f4e621da --- /dev/null +++ b/code/datums/components/plumbing/reaction_chamber.dm @@ -0,0 +1,38 @@ +/datum/component/plumbing/reaction_chamber + demand_connects = WEST + supply_connects = EAST + +/datum/component/plumbing/reaction_chamber/Initialize(start=TRUE, _turn_connects=TRUE) + . = ..() + if(!istype(parent, /obj/machinery/plumbing/reaction_chamber)) + return COMPONENT_INCOMPATIBLE + +/datum/component/plumbing/reaction_chamber/can_give(amount, reagent, datum/ductnet/net) + . = ..() + var/obj/machinery/plumbing/reaction_chamber/RC = parent + if(!. || !RC.emptying) + return FALSE + +/datum/component/plumbing/reaction_chamber/send_request(dir) + var/obj/machinery/plumbing/reaction_chamber/RC = parent + if(RC.emptying || !LAZYLEN(RC.required_reagents)) + return + for(var/RT in RC.required_reagents) + var/has_reagent = FALSE + for(var/A in reagents.reagent_list) + var/datum/reagent/RD = A + if(RT == RD.type) + has_reagent = TRUE + if(RD.volume < RC.required_reagents[RT]) + process_request(min(RC.required_reagents[RT] - RD.volume, MACHINE_REAGENT_TRANSFER) , RT, dir) + return + if(!has_reagent) + process_request(min(RC.required_reagents[RT], MACHINE_REAGENT_TRANSFER), RT, dir) + return + + RC.reagent_flags &= ~NO_REACT + reagents.handle_reactions() + + RC.emptying = TRUE //If we move this up, it'll instantly get turned off since any reaction always sets the reagent_total to zero. Other option is make the reaction update + //everything for every chemical removed, wich isn't a good option either. + RC.on_reagent_change() //We need to check it now, because some reactions leave nothing left. diff --git a/code/datums/components/plumbing/splitter.dm b/code/datums/components/plumbing/splitter.dm new file mode 100644 index 0000000000..7194e8803b --- /dev/null +++ b/code/datums/components/plumbing/splitter.dm @@ -0,0 +1,45 @@ +/datum/component/plumbing/splitter + demand_connects = NORTH + supply_connects = SOUTH | EAST + +/datum/component/plumbing/splitter/Initialize() + . = ..() + if(. && !istype(parent, /obj/machinery/plumbing/splitter)) + return FALSE + +/datum/component/plumbing/splitter/can_give(amount, reagent, datum/ductnet/net) + . = ..() + if(!.) + return + . = FALSE + var/direction + for(var/A in ducts) + if(ducts[A] == net) + direction = get_original_direction(text2num(A)) + break + var/obj/machinery/plumbing/splitter/S = parent + switch(direction) + if(SOUTH) + if(S.turn_straight && S.transfer_straight <= amount) + S.turn_straight = FALSE + return TRUE + if(EAST) + if(!S.turn_straight && S.transfer_side <= amount) + S.turn_straight = TRUE + return TRUE + +/datum/component/plumbing/splitter/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) + var/direction + for(var/A in ducts) + if(ducts[A] == net) + direction = get_original_direction(text2num(A)) + break + var/obj/machinery/plumbing/splitter/S = parent + switch(direction) + if(SOUTH) + if(amount >= S.transfer_straight) + amount = S.transfer_straight + if(EAST) + if(amount >= S.transfer_side) + amount = S.transfer_side + . = ..() diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 2052e57f49..3cf70e80ef 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -14,6 +14,7 @@ var/mob/living/holder //who is currently benefiting from the shield. var/dissipating = FALSE //Is this shield meant to dissipate over time instead of recharging. var/del_on_overload = FALSE //will delete itself once it has no charges left. + var/cached_vis_overlay //text identifier of the visual overlay. /datum/component/shielded/Initialize(current, max = 3, delay = 20 SECONDS, rate = 1, slots, state = "shield-old", broken, \ sound = 'sound/magic/charge.ogg', end_sound = 'sound/machines/ding.ogg', diss = FALSE, del_overload = FALSE) @@ -47,9 +48,8 @@ holder = L var/to_add = charges >= 1 ? shield_state : broken_state if(to_add) - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) - M.layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01 - holder.add_overlay(M, TRUE) + var/layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01 + SSvis_overlays.add_vis_overlay(L, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, L.dir) /datum/component/shielded/UnregisterFromParent() . = ..() @@ -57,9 +57,9 @@ UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED)) if(holder) UnregisterSignal(holder, list(COMSIG_LIVING_RUN_BLOCK, COMSIG_LIVING_GET_BLOCKING_ITEMS)) - var/to_remove = charges >= 1 ? shield_state : broken_state - if(to_remove) - holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(cached_vis_overlay) + SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay) + cached_vis_overlay = null holder = null /datum/component/shielded/process() @@ -80,7 +80,7 @@ holder.visible_message("[holder]'s shield overloads!") qdel(src) return - if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + if(holder && ((old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))) update_shield_overlay(charges < 1) /datum/component/shielded/proc/adjust_charges(amount) @@ -93,20 +93,19 @@ holder.visible_message("[holder]'s shield overloads!") qdel(src) return - if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + if(holder && ((old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))) update_shield_overlay(charges < 1) /datum/component/shielded/proc/update_shield_overlay(broken) if(!holder) return - var/to_remove = broken ? shield_state : broken_state var/to_add = broken ? broken_state : shield_state - if(to_remove) - holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(cached_vis_overlay) + SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay) + cached_vis_overlay = null if(to_add) - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) - M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 - holder.add_overlay(M, TRUE) + var/layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + SSvis_overlays.add_vis_overlay(holder, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, holder.dir) /datum/component/shielded/proc/on_equip(obj/item/source, mob/living/equipper, slot) if(!(accepted_slots & slotdefine2slotbit(slot))) @@ -117,17 +116,16 @@ RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/include_shield) var/to_add = charges >= 1 ? shield_state : broken_state if(to_add) - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) - M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 - equipper.add_overlay(M, TRUE) + var/layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + cached_vis_overlay = SSvis_overlays.add_vis_overlay(holder, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, holder.dir) /datum/component/shielded/proc/on_drop(obj/item/source, mob/dropper) if(holder == dropper) UnregisterSignal(holder, COMSIG_LIVING_GET_BLOCKING_ITEMS) UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK, COMSIG_ITEM_CHECK_BLOCK)) - var/to_remove = charges >= 1 ? shield_state : broken_state - if(to_remove) - holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(cached_vis_overlay) + SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay) + cached_vis_overlay = null holder = null /datum/component/shielded/proc/include_shield(mob/source, list/items) diff --git a/code/datums/ductnet.dm b/code/datums/ductnet.dm new file mode 100644 index 0000000000..14a74a67c4 --- /dev/null +++ b/code/datums/ductnet.dm @@ -0,0 +1,65 @@ +///We handle the unity part of plumbing. We track who is connected to who. +/datum/ductnet + var/list/suppliers = list() + var/list/demanders = list() + var/list/obj/machinery/duct/ducts = list() + + var/capacity +///Add a duct to our network +/datum/ductnet/proc/add_duct(obj/machinery/duct/D) + if(!D || (D in ducts)) + return + ducts += D + D.duct = src +///Remove a duct from our network and commit suicide, because this is probably easier than to check who that duct was connected to and what part of us was lost +/datum/ductnet/proc/remove_duct(obj/machinery/duct/ducting) + destroy_network(FALSE) + for(var/obj/machinery/duct/D in ducting.neighbours) + addtimer(CALLBACK(D, /obj/machinery/duct/proc/reconnect), 0) //all needs to happen after the original duct that was destroyed finishes destroying itself + addtimer(CALLBACK(D, /obj/machinery/duct/proc/generate_connects), 0) + qdel(src) +///add a plumbing object to either demanders or suppliers +/datum/ductnet/proc/add_plumber(datum/component/plumbing/P, dir) + if(!P.can_add(src, dir)) + return FALSE + P.ducts[num2text(dir)] = src + if(dir & P.supply_connects) + suppliers += P + else if(dir & P.demand_connects) + demanders += P + return TRUE +///remove a plumber. we dont delete ourselves because ductnets dont persist through plumbing objects +/datum/ductnet/proc/remove_plumber(datum/component/plumbing/P) + suppliers.Remove(P) //we're probably only in one of these, but Remove() is inherently sane so this is fine + demanders.Remove(P) + + for(var/dir in P.ducts) + if(P.ducts[dir] == src) + P.ducts -= dir + if(!ducts.len) //there were no ducts, so it was a direct connection. we destroy ourselves since a ductnet with only one plumber and no ducts is worthless + destroy_network() +///we combine ductnets. this occurs when someone connects to seperate sets of fluid ducts +/datum/ductnet/proc/assimilate(datum/ductnet/D) + ducts.Add(D.ducts) + suppliers.Add(D.suppliers) + demanders.Add(D.demanders) + for(var/A in D.suppliers + D.demanders) + var/datum/component/plumbing/P = A + for(var/s in P.ducts) + if(P.ducts[s] != D) + continue + P.ducts[s] = src //all your ducts are belong to us + for(var/A in D.ducts) + var/obj/machinery/duct/M = A + M.duct = src //forget your old master + + destroy_network() +///destroy the network and tell all our ducts and plumbers we are gone +/datum/ductnet/proc/destroy_network(delete=TRUE) + for(var/A in suppliers + demanders) + remove_plumber(A) + for(var/A in ducts) + var/obj/machinery/duct/D = A + D.duct = null + if(delete) //I don't want code to run with qdeleted objects because that can never be good, so keep this in-case the ductnet has some business left to attend to before commiting suicide + qdel(src) diff --git a/code/datums/elements/decal.dm b/code/datums/elements/decal.dm index 4bd482915a..50519b08e7 100644 --- a/code/datums/elements/decal.dm +++ b/code/datums/elements/decal.dm @@ -33,39 +33,34 @@ if(description) RegisterSignal(A, COMSIG_PARENT_EXAMINE, .proc/examine) - apply(A, TRUE) - num_decals_per_atom[A]++ + apply(A) /datum/element/decal/Detach(datum/target) var/atom/A = target - remove(A, A.dir) - UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE)) - LAZYREMOVE(num_decals_per_atom, A) + num_decals_per_atom[A]-- + apply(A, TRUE) + if(!num_decals_per_atom[A]) + UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS)) + LAZYREMOVE(num_decals_per_atom, A) return ..() -/datum/element/decal/proc/remove(atom/target, old_dir) - pic.dir = first_dir == NORTH ? target.dir : turn(first_dir, dir2angle(old_dir)) - for(var/i in 1 to num_decals_per_atom[target]) - target.cut_overlay(pic, TRUE) +/datum/element/decal/proc/apply(atom/target, removing = FALSE) + if(num_decals_per_atom[target] == 1 && !removing) + RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlay, TRUE) + target.update_icon() if(isitem(target)) addtimer(CALLBACK(target, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE) -/datum/element/decal/proc/apply(atom/target, init = FALSE) - pic.dir = first_dir == NORTH ? target.dir : turn(first_dir, dir2angle(target.dir)) - if(init) - target.add_overlay(pic, TRUE) - else - for(var/i in 1 to num_decals_per_atom[target]) - target.add_overlay(pic, TRUE) - if(isitem(target)) - addtimer(CALLBACK(target, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE) +/datum/element/decal/proc/apply_overlay(atom/source, list/overlay_list) + pic.dir = first_dir == NORTH ? source.dir : turn(first_dir, dir2angle(source.dir)) + for(var/i in 1 to num_decals_per_atom[source]) + overlay_list += pic -/datum/element/decal/proc/rotate_react(datum/source, old_dir, new_dir) +/datum/element/decal/proc/rotate_react(atom/source, old_dir, new_dir) if(old_dir == new_dir) return - remove(source, old_dir) - apply(source) + source.update_icon() /datum/element/decal/proc/clean_react(datum/source, strength) if(strength >= cleanable) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 6e1692c17e..8a66394ecc 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -26,7 +26,6 @@ var/list/atom_colours //used to store the different colors on an atom //its inherent color, the colored paint applied on it, special color effect etc... - var/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4. var/list/remove_overlays // a very temporary list of overlays to remove var/list/add_overlays // a very temporary list of overlays to add @@ -145,7 +144,6 @@ qdel(reagents) LAZYCLEARLIST(overlays) - LAZYCLEARLIST(priority_overlays) for(var/i in targeted_by) var/mob/M = i @@ -1128,4 +1126,4 @@ * Override this if you want custom behaviour in whatever gets hit by the rust */ /atom/proc/rust_heretic_act() - return + return diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 0238529195..0a6c2b9eca 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -646,3 +646,10 @@ animate(I, alpha = 175, pixel_x = to_x, pixel_y = to_y, time = 3, transform = M, easing = CUBIC_EASING) sleep(1) animate(I, alpha = 0, transform = matrix(), time = 1) + +/atom/movable/proc/set_anchored(anchorvalue) //literally only for plumbing ran + SHOULD_CALL_PARENT(TRUE) + if(anchored == anchorvalue) + return + . = anchored + anchored = anchorvalue diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm index 561b38fde1..148de9568a 100644 --- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm +++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm @@ -50,10 +50,6 @@ Property weights are: for(var/r in SSevents.running) var/datum/round_event/R = r threat += R.threat() - for(var/mob/living/simple_animal/hostile/H in GLOB.mob_living_list) - var/turf/T = get_turf(H) - if(H.stat != DEAD && is_station_level(T.z) && !("Station" in H.faction)) - threat += H.threat() for(var/obj/item/phylactery/P in GLOB.poi_list) threat += 25 // can't be giving them too much of a break for (var/mob/M in mode.current_players[CURRENT_LIVING_PLAYERS]) @@ -91,6 +87,8 @@ Property weights are: mean += 2.5 if(CHAOS_MAX) mean += 5 + else + voters += 0.5 if(voters) GLOB.dynamic_curve_centre += (mean/voters) if(flags & USE_PREV_ROUND_WEIGHTS) @@ -128,7 +126,8 @@ Property weights are: for(var/property in property_weights) if(property in rule.property_weights) // just treat it as 0 if it's not in there property_weight += rule.property_weights[property] * property_weights[property] - drafted_rules[rule] = (rule.get_weight() * property_weight)*rule.weight_mult + if(property_weight > 0) + drafted_rules[rule] = rule.get_weight() * property_weight * rule.weight_mult return drafted_rules /datum/dynamic_storyteller/proc/midround_draft() @@ -140,25 +139,26 @@ Property weights are: if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))) continue rule.trim_candidates() - var/threat_weight = 1 - if(!(rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway - var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat)) - /* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to - pick this particular ruleset. - Let's use a toy example: there's 60 threat level and 10 threat spent. - We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets. - Ruleset 1 has 30 cost, ruleset 2 has 5 cost. - When we do the math, ruleset 1's threat_weight is 0.538, and ruleset 2's is 0.238, meaning ruleset 1 - is 2.26 times as likely to be picked, all other things considered. - Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight. - */ - threat_weight = abs(1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0))) if (rule.ready()) var/property_weight = 0 for(var/property in property_weights) - if(property in rule.property_weights) + if(property in rule.property_weights) // just treat it as 0 if it's not in there property_weight += rule.property_weights[property] * property_weights[property] - drafted_rules[rule] = round(((rule.get_weight() * property_weight)*rule.weight_mult*threat_weight)*1000,1) + if(property_weight > 0) + var/threat_weight = 1 + if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway + var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat)) + /* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to + pick this particular ruleset. + Let's use a toy example: there's 60 threat level and 10 threat spent. + We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets. + Ruleset 1 has 30 cost, ruleset 2 has 5 cost. + When we do the math, ruleset 1's threat_weight is 0.538, and ruleset 2's is 0.238, meaning ruleset 1 + is 2.26 times as likely to be picked, all other things considered. + Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight. + */ + threat_weight = abs(1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0))) + drafted_rules[rule] = rule.get_weight() * property_weight * rule.weight_mult * threat_weight return drafted_rules /datum/dynamic_storyteller/proc/latejoin_draft(mob/living/carbon/human/newPlayer) @@ -175,28 +175,29 @@ Property weights are: rule.candidates = list(newPlayer) rule.trim_candidates() - var/threat_weight = 1 - if(!(rule.flags & MINOR_RULESET)) - var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat)) - threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,cost_difference,0))) if (rule.ready()) var/property_weight = 0 for(var/property in property_weights) if(property in rule.property_weights) property_weight += rule.property_weights[property] * property_weights[property] - drafted_rules[rule] = round(((rule.get_weight() * property_weight)*rule.weight_mult*threat_weight)*1000,1) + if(property_weight > 0) + var/threat_weight = 1 + if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)) + var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat)) + threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,cost_difference,0))) + drafted_rules[rule] = rule.get_weight() * property_weight * rule.weight_mult * threat_weight return drafted_rules /datum/dynamic_storyteller/proc/event_draft() var/list/drafted_rules = list() for(var/datum/dynamic_ruleset/event/rule in mode.events) - if(rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && (mode.threat_level - mode.threat) >= rule.cost) - if(rule.ready()) - var/property_weight = 0 - for(var/property in property_weights) - if(property in rule.property_weights) - property_weight += rule.property_weights[property] * property_weights[property] - drafted_rules[rule] = (rule.get_weight() + property_weight)*rule.weight_mult + if(rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && (mode.threat_level + 20 - mode.threat) >= rule.cost && rule.ready()) + var/property_weight = 0 + for(var/property in property_weights) + if(property in rule.property_weights) + property_weight += rule.property_weights[property] * property_weights[property] + if(property_weight > 0) + drafted_rules[rule] = rule.get_weight() + property_weight * rule.weight_mult return drafted_rules @@ -313,9 +314,8 @@ Property weights are: /datum/dynamic_storyteller/random/event_draft() var/list/drafted_rules = list() for(var/datum/dynamic_ruleset/event/rule in mode.events) - if(rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level)) - if(rule.ready()) - drafted_rules[rule] = 1 + if(rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && rule.ready()) + drafted_rules[rule] = 1 return drafted_rules /datum/dynamic_storyteller/story @@ -330,7 +330,7 @@ Property weights are: /datum/dynamic_storyteller/story/calculate_threat() var/current_time = (world.time / SSautotransfer.targettime)*180 - mode.threat_level = round(mode.initial_threat_level*(sin(current_time)+0.25),0.1) + mode.threat_level = round((mode.initial_threat_level*(sin(current_time)/2)+0.75),0.1) return ..() /datum/dynamic_storyteller/classic diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index bd4ac5f2d1..2b7411d03f 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -117,6 +117,7 @@ Class Procs: var/new_occupant_dir = SOUTH //The direction the occupant will be set to look at when entering the machine. var/speed_process = FALSE // Process as fast as possible? var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created + var/wire_compatible = FALSE // For storing and overriding ui id and dimensions var/tgui_id // ID of TGUI interface var/ui_style // ID of custom TGUI style (optional) @@ -433,6 +434,7 @@ Class Procs: to_chat(user, "You [anchored ? "un" : ""]secure [src].") setAnchored(!anchored) playsound(src, 'sound/items/deconstruct.ogg', 50, 1) + SEND_SIGNAL(src, COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH, anchored) return SUCCESSFUL_UNFASTEN return FAILED_UNFASTEN return CANT_UNFASTEN diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 2fbb45173b..c89e318714 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -135,6 +135,14 @@ RLD flick("[icon_state]_empty", src) //somewhat hacky thing to make RCDs with ammo counters actually have a blinking yellow light return . + +/obj/item/construction/proc/check_menu(mob/living/user) + if(!istype(user)) + return FALSE + if(user.incapacitated() || !user.Adjacent(src)) + return FALSE + return TRUE + /obj/item/construction/proc/range_check(atom/A, mob/user) if(!(A in range(custom_range, get_turf(user)))) to_chat(user, "The \'Out of Range\' light on [src] blinks red.") @@ -276,13 +284,6 @@ RLD //Not scaling these down to button size because they look horrible then, instead just bumping up radius. return MA -/obj/item/construction/rcd/proc/check_menu(mob/living/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.Adjacent(src)) - return FALSE - return TRUE - /obj/item/construction/rcd/proc/change_computer_dir(mob/user) if(!user) return @@ -856,6 +857,82 @@ RLD desc = "It contains the design for firelock, air alarm, fire alarm, apc circuits and crap power cells." upgrade = RCD_UPGRADE_SIMPLE_CIRCUITS +/obj/item/construction/plumbing + name = "Plumbing Constructor" + desc = "An expertly modified RCD outfitted to construct plumbing machinery. Reload with compressed matter cartridges." + icon = 'icons/obj/tools.dmi' + icon_state = "arcd" + item_state = "oldrcd" + has_ammobar = FALSE + matter = 200 + max_matter = 200 + + ///type of the plumbing machine + var/blueprint = null + ///index, used in the attack self to get the type. stored here since it doesnt change + var/list/choices = list() + ///index, used in the attack self to get the type. stored here since it doesnt change + var/list/name_to_type = list() + /// + var/list/machinery_data = list("cost" = list(), "delay" = list()) + +/obj/item/construction/plumbing/attack_self(mob/user) + ..() + if(!choices.len) + for(var/A in subtypesof(/obj/machinery/plumbing)) + var/obj/machinery/plumbing/M = A + if(initial(M.rcd_constructable)) + choices += list(initial(M.name) = image(icon = initial(M.icon), icon_state = initial(M.icon_state))) + name_to_type[initial(M.name)] = M + machinery_data["cost"][A] = initial(M.rcd_cost) + machinery_data["delay"][A] = initial(M.rcd_delay) + + var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user)) + return + + blueprint = name_to_type[choice] + playsound(src, 'sound/effects/pop.ogg', 50, FALSE) + to_chat(user, "You change [name]s blueprint to '[choice]'.") + +///pretty much rcd_create, but named differently to make myself feel less bad for copypasting from a sibling-type +/obj/item/construction/plumbing/proc/create_machine(atom/A, mob/user) + if(!machinery_data || !isopenturf(A)) + return FALSE + + if(checkResource(machinery_data["cost"][blueprint], user) && blueprint) + if(do_after(user, machinery_data["delay"][blueprint], target = A)) + if(checkResource(machinery_data["cost"][blueprint], user) && canPlace(A)) + useResource(machinery_data["cost"][blueprint], user) + activate() + playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) + new blueprint (A, FALSE, FALSE) + return TRUE + +/obj/item/construction/plumbing/proc/canPlace(turf/T) + if(!isopenturf(T)) + return FALSE + . = TRUE + for(var/obj/O in T.contents) + if(O.density) //let's not built ontop of dense stuff, like big machines and other obstacles, it kills my immershion + return FALSE + +/obj/item/construction/plumbing/afterattack(atom/A, mob/user) + . = ..() + if(!range_check(A, user)) + return + if(istype(A, /obj/machinery/plumbing)) + var/obj/machinery/plumbing/P = A + if(P.anchored) + to_chat(user, "The [P.name] needs to be unanchored!") + return + if(do_after(user, 20, target = P)) + P.deconstruct() //Let's not substract matter + playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) //this is just such a great sound effect + else + create_machine(A, user) + + #undef GLOW_MODE #undef LIGHT_MODE #undef REMOVE_MODE diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index b3d5ed431a..70e4441c66 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -6,6 +6,7 @@ RPD #define ATMOS_CATEGORY 0 #define DISPOSALS_CATEGORY 1 #define TRANSIT_CATEGORY 2 +#define PLUMBING_CATEGORY 3 #define BUILD_MODE (1<<0) #define WRENCH_MODE (1<<1) @@ -75,6 +76,13 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( ) )) +GLOBAL_LIST_INIT(fluid_duct_recipes, list( + "Fluid Ducts" = list( + new /datum/pipe_info/plumbing("Duct", /obj/machinery/duct, PIPE_ONEDIR), + new /datum/pipe_info/plumbing/multilayer("Duct Layer-Manifold",/obj/machinery/duct/multilayered, PIPE_STRAIGHT) + ) +)) + /datum/pipe_info var/name var/icon_state @@ -175,6 +183,15 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( if(dt == PIPE_UNARY_FLIPPABLE) icon_state = "[icon_state]_preview" +/datum/pipe_info/plumbing/New(label, obj/path, dt=PIPE_UNARY) + name = label + id = path + icon_state = initial(path.icon_state) + dirtype = dt + +/datum/pipe_info/plumbing/multilayer //exists as identifier so we can see the difference between multi_layer and just ducts properly later on + + /obj/item/pipe_dispenser name = "Rapid Piping Device (RPD)" desc = "A device used to rapidly pipe things." @@ -200,15 +217,19 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( var/atmos_build_speed = 5 //deciseconds (500ms) var/disposal_build_speed = 5 var/transit_build_speed = 5 + var/plumbing_build_speed = 5 var/destroy_speed = 5 var/paint_speed = 5 var/category = ATMOS_CATEGORY var/piping_layer = PIPING_LAYER_DEFAULT + var/ducting_layer = DUCT_LAYER_DEFAULT var/datum/pipe_info/recipe var/static/datum/pipe_info/first_atmos var/static/datum/pipe_info/first_disposal var/static/datum/pipe_info/first_transit var/mode = BUILD_MODE | DESTROY_MODE | WRENCH_MODE + var/static/datum/pipe_info/first_plumbing + var/locked = FALSE //wheter we can change categories. Useful for the plumber /obj/item/pipe_dispenser/New() . = ..() @@ -253,12 +274,15 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( var/list/data = list( "category" = category, "piping_layer" = piping_layer, - // "ducting_layer" = ducting_layer, //uhh is this for chem thing? + + "ducting_layer" = ducting_layer, + "preview_rows" = recipe.get_preview(p_dir), "categories" = list(), "selected_color" = paint_color, "paint_colors" = GLOB.pipe_paint_colors, - "mode" = mode + "mode" = mode, + "locked" = locked ) var/list/recipes @@ -269,6 +293,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( recipes = GLOB.disposal_pipe_recipes if(TRANSIT_CATEGORY) recipes = GLOB.transit_tube_recipes + if(PLUMBING_CATEGORY) + recipes = GLOB.fluid_duct_recipes for(var/c in recipes) var/list/cat = recipes[c] var/list/r = list() @@ -297,6 +323,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( recipe = first_atmos if(TRANSIT_CATEGORY) recipe = first_transit + if(PLUMBING_CATEGORY) + recipe = first_plumbing p_dir = NORTH playeffect = FALSE if("piping_layer") @@ -468,16 +496,56 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( if(mode & WRENCH_MODE) tube.wrench_act(user, src) return - + if(PLUMBING_CATEGORY) //Plumbing. + if(!can_make_pipe) + return ..() + A = get_turf(A) + if(isclosedturf(A)) + to_chat(user, "[src]'s error light flickers; there's something in the way!") + return + to_chat(user, "You start building a fluid duct...") + playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) + if(do_after(user, plumbing_build_speed, target = A)) + var/obj/machinery/duct/D + if(recipe.type == /datum/pipe_info/plumbing/multilayer) + var/temp_connects = NORTH + SOUTH + if(queued_p_dir == EAST) + temp_connects = EAST + WEST + D = new queued_p_type (A, TRUE, GLOB.pipe_paint_colors[paint_color], ducting_layer, temp_connects) + else + D = new queued_p_type (A, TRUE, GLOB.pipe_paint_colors[paint_color], ducting_layer) + D.add_fingerprint(usr) + if(mode & WRENCH_MODE) + D.wrench_act(user, src) else return ..() /obj/item/pipe_dispenser/proc/activate() playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1) +/* unneeded, you can craft ducts from plastic +/obj/item/pipe_dispenser/plumbing + name = "Plumberinator" + desc = "A crude device to rapidly plumb things." + icon_state = "plumberer" + category = PLUMBING_CATEGORY + locked = TRUE + +/obj/item/pipe_dispenser/plumbing/Initialize() + . = ..() + spark_system = new + spark_system.set_up(5, 0, src) + spark_system.attach(src) + if(!first_plumbing) + first_plumbing = GLOB.fluid_duct_recipes[GLOB.fluid_duct_recipes[1]][1] + + recipe = first_plumbing + +*/ #undef ATMOS_CATEGORY #undef DISPOSALS_CATEGORY #undef TRANSIT_CATEGORY +#undef PLUMBING_CATEGORY #undef BUILD_MODE #undef DESTROY_MODE diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 56eb25f953..37d19783b5 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -48,6 +48,13 @@ /obj/item/stack/cable_coil = 5, /obj/item/stack/sheet/glass = 1) +/obj/item/circuitboard/machine/medipen_refiller + name = "Medipen Refiller (Machine Board)" + icon_state = "medical" + build_path = /obj/machinery/medipen_refiller + req_components = list( + /obj/item/stock_parts/matter_bin = 1) + /obj/item/circuitboard/machine/clonepod name = "Clone Pod (Machine Board)" build_path = /obj/machinery/clonepod @@ -512,6 +519,10 @@ /obj/item/stack/sheet/glass = 1) needs_anchored = FALSE +/obj/item/circuitboard/machine/hydroponics/automagic + name = "Automatic Hydroponics Tray (Machine Board)" + build_path = /obj/machinery/hydroponics/constructable/automagic + /obj/item/circuitboard/machine/seed_extractor name = "Seed Extractor (Machine Board)" build_path = /obj/machinery/seed_extractor diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index a2b0e3edd4..014487332c 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -60,7 +60,8 @@ if(target) if(!QDELETED(target)) location = get_turf(target) - target.cut_overlay(plastic_overlay, TRUE) + target.cut_overlay(plastic_overlay) + UnregisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/add_plastic_overlay) if(!ismob(target) || full_damage_on_mobs) target.ex_act(EXPLODE_HEAVY, target) else @@ -126,13 +127,17 @@ I.embedding["embed_chance"] = 0 I.updateEmbedding() - target.add_overlay(plastic_overlay, TRUE) + RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/add_plastic_overlay) + target.update_icon() if(!nadeassembly) to_chat(user, "You plant the bomb. Timer counting down from [det_time].") addtimer(CALLBACK(src, .proc/prime), det_time*10) else qdel(src) //How? +/obj/item/grenade/plastic/proc/add_plastic_overlay(atom/source, list/overlay_list) + overlay_list += plastic_overlay + /obj/item/grenade/plastic/proc/shout_syndicate_crap(mob/M) if(!M) return diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 9ea8c9c689..7ba2196184 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -128,6 +128,7 @@ absorption_capacity = 5 splint_factor = 0.35 custom_price = PRICE_REALLY_CHEAP + grind_results = list(/datum/reagent/cellulose = 2) // gauze is only relevant for wounds, which are handled in the wounds themselves /obj/item/stack/medical/gauze/try_heal(mob/living/M, mob/user, silent) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 9c169eccb8..4cb898d51f 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -413,6 +413,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ force = 0 throwforce = 0 merge_type = /obj/item/stack/sheet/cloth + grind_results = list(/datum/reagent/cellulose = 2) /obj/item/stack/sheet/cloth/get_main_recipes() . = ..() @@ -782,6 +783,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list( new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \ new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \ new /datum/stack_recipe("shower curtain", /obj/structure/curtain, 10, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("duct", /obj/item/stack/ducts,1), \ new /datum/stack_recipe("laser pointer case", /obj/item/glasswork/glass_base/laserpointer_shell, 30), \ new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2))) @@ -850,6 +852,7 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra merge_type = /obj/item/stack/sheet/cotton var/pull_effort = 30 var/loom_result = /obj/item/stack/sheet/cloth + grind_results = list(/datum/reagent/cellulose = 5) /obj/item/stack/sheet/cotton/ten amount = 10 @@ -865,6 +868,7 @@ 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 + grind_results = list(/datum/reagent/cellulose = 10) /obj/item/stack/sheet/meat name = "meat sheets" diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 024e0495a8..590df34cde 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -478,7 +478,7 @@ /obj/item/assembly/signaler, /obj/item/lightreplacer, /obj/item/rcd_ammo, - /obj/item/construction/rcd, + /obj/item/construction, /obj/item/pipe_dispenser, /obj/item/stack/rods, /obj/item/stack/tile/plasteel, diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index b5f8612244..f462050789 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -252,6 +252,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/katana/timestop name = "temporal katana" desc = "Delicately balanced, this finely-crafted blade hums with barely-restrained potential." + icon_state = "temporalkatana" + item_state = "temporalkatana" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' block_chance = 0 // oops force = 27.5 // oops item_flags = ITEM_CAN_PARRY @@ -263,6 +267,21 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 flynn.emote("smirk") new /obj/effect/timestop/magic(get_turf(owner), 1, 50, list(owner)) // null roddies counter +/obj/item/katana/timestop/suicide_act(mob/living/user) // stolen from hierophant staff + new /obj/effect/timestop/magic(get_turf(user), 1, 50, list(user)) // free usage for dying + user.visible_message("[user] poses menacingly with the [src]! It looks like [user.p_theyre()] trying to teleport behind someone!") + user.say("Heh.. Nothing personnel, kid..", forced = "temporal katana suicide") + sleep(20) + if(!user) + return + user.visible_message("[user] vanishes into a cloud of falling dust and burning embers, likely off to style on some poor sod in the distance!") + playsound(user,'sound/magic/blink.ogg', 75, TRUE) + for(var/obj/item/I in user) + if(I != src) + user.dropItemToGround(I) + user.dropItemToGround(src) //Drop us last, so it goes on top of their stuff + qdel(user) + /obj/item/melee/bokken // parrying stick name = "bokken" desc = "A space-Japanese training sword made of wood and shaped like a katana." diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 14017ffb2d..f5003e035b 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -186,7 +186,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!acid_level) SSacid.processing[src] = src - add_overlay(GLOB.acid_overlay, TRUE) + update_icon() var/acid_cap = acidpwr * 300 //so we cannot use huge amounts of weak acids to do as well as strong acids. if(acid_level < acid_cap) acid_level = min(acid_level + acidpwr * acid_volume, acid_cap) @@ -224,7 +224,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE)) resistance_flags |= ON_FIRE SSfire_burning.processing[src] = src - add_overlay(GLOB.fire_overlay, TRUE) + update_icon() return 1 //called when the obj is destroyed by fire @@ -236,7 +236,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/proc/extinguish() if(resistance_flags & ON_FIRE) resistance_flags &= ~ON_FIRE - cut_overlay(GLOB.fire_overlay, TRUE) + update_icon() SSfire_burning.processing -= src /obj/zap_act(power, zap_flags, shocked_targets) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 79dd13b0ae..99b302e9ce 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -317,6 +317,13 @@ icon_state = unique_reskin[choice] to_chat(M, "[src] is now skinned as '[choice]'.") +/obj/update_overlays() + . = ..() + if(acid_level) + . += GLOB.acid_overlay + if(resistance_flags & ON_FIRE) + . += GLOB.fire_overlay + //Called when the object is constructed by an autolathe //Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes /obj/proc/autolathe_crafted(obj/machinery/autolathe/A) @@ -329,3 +336,6 @@ . = ..() if(. && ricochet_damage_mod) take_damage(P.damage * ricochet_damage_mod, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) // pass along ricochet_damage_mod damage to the structure for the ricochet + +/obj/proc/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) + return diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm index 4f6256e9c4..263b47aab2 100644 --- a/code/game/objects/structures/lavaland/geyser.dm +++ b/code/game/objects/structures/lavaland/geyser.dm @@ -9,7 +9,7 @@ var/erupting_state = null //set to null to get it greyscaled from "[icon_state]_soup". Not very usable with the whole random thing, but more types can be added if you change the spawn prob var/activated = FALSE //whether we are active and generating chems - var/reagent_id = /datum/reagent/fuel/oil + var/reagent_id = /datum/reagent/oil var/potency = 2 //how much reagents we add every process (2 seconds) var/max_volume = 500 var/start_volume = 50 @@ -77,10 +77,10 @@ /obj/item/plunger/reinforced name = "reinforced plunger" - desc = "It's an M. 7 Reinforced Plunger© for heavy duty plunging." + desc = "It's an M. 7 Reinforced Plunger� for heavy duty plunging." icon_state = "reinforced_plunger" reinforced = TRUE plunge_mod = 0.8 - custom_premium_price = 1200 + custom_premium_price = 600 diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 1fbeee7523..6e7dbaf904 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -149,6 +149,8 @@ var/list/megafauna_spawn_list /// Flora that can spawn in the tunnel, weighted list var/list/flora_spawn_list + //terrain to spawn weighted list + var/list/terrain_spawn_list /// Turf type to choose when spawning in tunnel at 1% chance, weighted list var/list/choose_turf_type /// if the tunnel should keep being created @@ -230,7 +232,8 @@ megafauna_spawn_list = list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = SPAWN_BUBBLEGUM) if (!flora_spawn_list) flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2) - + if(!terrain_spawn_list) + terrain_spawn_list = list(/obj/structure/geyser/random = 1) . = ..() if(!has_data) produce_tunnel_from_data() @@ -334,8 +337,19 @@ spawned_flora = SpawnFlora(T) if(!spawned_flora) // no rocks beneath mob spawners / mobs. SpawnMonster(T) + SpawnTerrain(T) T.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR) +/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnTerrain(turf/T) + if(prob(1)) + if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored)) + return + var/randumb = pickweight(terrain_spawn_list) + for(var/obj/structure/geyser/F in range(7, T)) + if(istype(F, randumb)) + return + new randumb(T) + /// Spawns a random mob or megafauna in the tunnel /turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T) if(!isarea(loc)) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index c5f880c955..14f7b34309 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -281,7 +281,6 @@ GLOBAL_LIST_EMPTY(antagonists) . = CONFIG_GET(keyed_list/antag_threat)[lowertext(name)] if(. == null) return threat - return threat //This one is created by admin tools for custom objectives /datum/antagonist/custom diff --git a/code/modules/antagonists/blob/blob.dm b/code/modules/antagonists/blob/blob.dm index 9a82bb546b..c449bd3012 100644 --- a/code/modules/antagonists/blob/blob.dm +++ b/code/modules/antagonists/blob/blob.dm @@ -4,11 +4,17 @@ antagpanel_category = "Blob" show_to_ghosts = TRUE job_rank = ROLE_BLOB - threat = 20 + threat = 50 var/datum/action/innate/blobpop/pop_action var/starting_points_human_blob = 60 var/point_rate_human_blob = 2 +/datum/antagonist/blob/threat() + . = ..() + if(isovermind(owner.current)) + var/mob/camera/blob/overmind = owner.current + . *= (overmind.blobs_legit.len / overmind.max_count) + /datum/antagonist/blob/roundend_report() var/basic_report = ..() //Display max blobpoints for blebs that lost diff --git a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm index ba2363ecc0..f9763b92fd 100644 --- a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm +++ b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm @@ -75,7 +75,6 @@ desc = "A floating, fragile spore." icon_state = "blobpod" icon_living = "blobpod" - threat = 0.2 health = 30 maxHealth = 30 verb_say = "psychically pulses" diff --git a/code/modules/antagonists/clockcult/clock_mobs.dm b/code/modules/antagonists/clockcult/clock_mobs.dm index 87466d65f2..2f00fd4e4a 100644 --- a/code/modules/antagonists/clockcult/clock_mobs.dm +++ b/code/modules/antagonists/clockcult/clock_mobs.dm @@ -6,7 +6,6 @@ unique_name = 1 minbodytemp = 0 unsuitable_atmos_damage = 0 - threat = 1 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) //Robotic damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) healable = FALSE diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm index 79b919b1e9..76c9db7231 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm @@ -9,7 +9,6 @@ desc = "The stalwart apparition of a soldier, blazing with crimson flames. It's armed with a gladius and shield." icon_state = "clockwork_marauder" mob_biotypes = MOB_HUMANOID - threat = 3 health = 120 maxHealth = 120 force_threshold = 8 diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm index b7503f4b22..305c4fadb7 100644 --- a/code/modules/antagonists/swarmer/swarmer.dm +++ b/code/modules/antagonists/swarmer/swarmer.dm @@ -70,7 +70,6 @@ icon_living = "swarmer" icon_dead = "swarmer_unactivated" icon_gib = null - threat = 0.5 wander = 0 harm_intent_damage = 5 minbodytemp = 0 diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index 2cc8e34b99..f10506a0d9 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -16,6 +16,18 @@ var/datum/team/xeno/xeno_team threat = 3 +/datum/antagonist/xeno/threat() + . = 1 + if(isalienhunter(owner)) + . = 2 + else if(isaliensentinel(owner)) + . = 4 + else if(isalienroyal(owner)) + if(isalienqueen(owner)) + . = 8 + else + . = 6 + /datum/antagonist/xeno/create_team(datum/team/xeno/new_team) if(!new_team) for(var/datum/antagonist/xeno/X in GLOB.antagonists) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index a8b4c93764..18e3281e4b 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -264,7 +264,7 @@ name = "pipes" /datum/asset/spritesheet/pipes/register() - for (var/each in list('icons/obj/atmospherics/pipes/pipe_item.dmi', 'icons/obj/atmospherics/pipes/disposal.dmi')) + for (var/each in list('icons/obj/atmospherics/pipes/pipe_item.dmi', 'icons/obj/atmospherics/pipes/disposal.dmi', 'icons/obj/atmospherics/pipes/transit_tube.dmi', 'icons/obj/plumbing/fluid_ducts.dmi')) InsertAll("", each, GLOB.alldirs) ..() @@ -388,9 +388,11 @@ Insert("polycrystal", 'icons/obj/telescience.dmi', "polycrystal") ..() + /datum/asset/spritesheet/mafia name = "mafia" /datum/asset/spritesheet/mafia/register() InsertAll("", 'icons/obj/mafia.dmi') ..() + diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index d540336b86..2fbe738acb 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -118,8 +118,7 @@ // Set the clothing's integrity back to 100%, remove all damage to bodyparts, and generally fix it up /obj/item/clothing/proc/repair(mob/user, params) - damaged_clothes = CLOTHING_PRISTINE - update_clothes_damaged_state(FALSE) + update_clothes_damaged_state(CLOTHING_PRISTINE) obj_integrity = max_integrity name = initial(name) // remove "tattered" or "shredded" if there's a prefix body_parts_covered = initial(body_parts_covered) @@ -196,7 +195,7 @@ if(3 to INFINITY) // take better care of your shit, dude name = "tattered [initial(name)]" - update_clothes_damaged_state() + update_clothes_damaged_state(CLOTHING_DAMAGED) /obj/item/clothing/Destroy() user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up @@ -257,7 +256,7 @@ how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n" how_cool_are_your_threads += "" . += how_cool_are_your_threads.Join() - + if(LAZYLEN(armor_list)) armor_list.Cut() if(armor.bio) @@ -346,10 +345,16 @@ var/mob/M = loc to_chat(M, "Your [name] starts to fall apart!") -/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) - var/index = "[REF(initial(icon))]-[initial(icon_state)]" - var/static/list/damaged_clothes_icons = list() - if(damaging) +//This mostly exists so subtypes can call appriopriate update icon calls on the wearer. +/obj/item/clothing/proc/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED) + damaged_clothes = damaged_state + update_icon() + +/obj/item/clothing/update_overlays() + . = ..() + if(damaged_clothes) + var/index = "[REF(initial(icon))]-[initial(icon_state)]" + var/static/list/damaged_clothes_icons = list() var/icon/damaged_clothes_icon = damaged_clothes_icons[index] if(!damaged_clothes_icon) damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object @@ -357,9 +362,7 @@ damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon) damaged_clothes_icons[index] = damaged_clothes_icon - add_overlay(damaged_clothes_icon, TRUE) - else - cut_overlay(damaged_clothes_icons[index], TRUE) + . += damaged_clothes_icon /* SEE_SELF // can see self, no matter what diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index f11c89d00c..6701b53c10 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -12,6 +12,10 @@ /obj/item/clothing/mask/balaclava/attack_self(mob/user) adjustmask(user) +/obj/item/clothing/mask/balaclava/breath + name = "breathaclava" + clothing_flags = ALLOWINTERNALS + /obj/item/clothing/mask/infiltrator name = "insidious balaclava" desc = "An incredibly suspicious balaclava made with Syndicate nanofibers to absorb impacts slightly while obfuscating the voice and face using a garbled vocoder." diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 69e9a974eb..993577cb30 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -3,7 +3,7 @@ typepath = /datum/round_event/ghost_role/alien_infestation weight = 5 gamemode_blacklist = list("dynamic") - min_players = 10 + min_players = 25 max_occurrences = 1 /datum/round_event/ghost_role/alien_infestation diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index da5b4c0cb2..1c88e68377 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -27,7 +27,6 @@ "How do I vore people?", "ERP?", "Not epic bros...") - threat = 5 /datum/round_event/brand_intelligence/announce(fake) diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm index 4d2e8e624c..57e2a2a051 100644 --- a/code/modules/events/wizard/magicarp.dm +++ b/code/modules/events/wizard/magicarp.dm @@ -30,7 +30,6 @@ icon_dead = "magicarp_dead" icon_gib = "magicarp_gib" ranged = 1 - threat = 4 retreat_distance = 2 minimum_distance = 0 //Between shots they can and will close in to nash projectiletype = /obj/item/projectile/magic @@ -52,7 +51,6 @@ color = "#00FFFF" maxHealth = 75 health = 75 - threat = 7 /mob/living/simple_animal/hostile/carp/ranged/chaos/Shoot() projectiletype = pick(allowed_projectile_types) diff --git a/code/modules/holiday/halloween/halloween.dm b/code/modules/holiday/halloween/halloween.dm index 6c9e527f38..d3b9b92b4f 100644 --- a/code/modules/holiday/halloween/halloween.dm +++ b/code/modules/holiday/halloween/halloween.dm @@ -190,7 +190,6 @@ icon_dead = "scary_clown" icon_gib = "scary_clown" speak = list("...", ". . .") - threat = 3 maxHealth = 120 health = 120 emote_see = list("silently stares") diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 06179d1087..a208f2de3c 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -30,7 +30,7 @@ var/self_sufficiency_req = 20 //Required total dose to make a self-sufficient hydro tray. 1:1 with earthsblood. var/self_sufficiency_progress = 0 var/self_sustaining = FALSE //If the tray generates nutrients and water on its own - + var/canirrigate = TRUE //tin /obj/machinery/hydroponics/constructable name = "hydroponics tray" @@ -847,12 +847,13 @@ if (!anchored) to_chat(user, "Anchor the tray first!") return - using_irrigation = !using_irrigation - O.play_tool_sound(src) - user.visible_message("[user] [using_irrigation ? "" : "dis"]connects [src]'s irrigation hoses.", \ - "You [using_irrigation ? "" : "dis"]connect [src]'s irrigation hoses.") - for(var/obj/machinery/hydroponics/h in range(1,src)) - h.update_icon() + if(canirrigate) + using_irrigation = !using_irrigation + O.play_tool_sound(src) + user.visible_message("[user] [using_irrigation ? "" : "dis"]connects [src]'s irrigation hoses.", \ + "You [using_irrigation ? "" : "dis"]connect [src]'s irrigation hoses.") + for(var/obj/machinery/hydroponics/h in range(1,src)) + h.update_icon() else if(istype(O, /obj/item/shovel/spade)) if(!myseed && !weedlevel) @@ -910,11 +911,14 @@ harvest = 0 lastproduce = age if(istype(myseed, /obj/item/seeds/replicapod)) - to_chat(user, "You harvest from the [myseed.plantname].") + if(user)//runtimes + to_chat(user, "You harvest from the [myseed.plantname].") else if(myseed.getYield() <= 0) - to_chat(user, "You fail to harvest anything useful!") + if(user) + to_chat(user, "You fail to harvest anything useful!") else - to_chat(user, "You harvest [myseed.getYield()] items from the [myseed.plantname].") + if(user) + to_chat(user, "You harvest [myseed.getYield()] items from the [myseed.plantname].") if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest)) qdel(myseed) myseed = null diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 5e49a32a23..c7314bf180 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -190,6 +190,31 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) parent.update_tray(user) return result +/obj/item/seeds/proc/harvest_userless() + var/obj/machinery/hydroponics/parent = loc //for ease of access + var/t_amount = 0 + var/list/result = list() + var/output_loc = parent.loc + var/product_name + while(t_amount < getYield()) + var/obj/item/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, src) + if(parent.myseed.plantname != initial(parent.myseed.plantname)) + t_prod.name = lowertext(parent.myseed.plantname) + if(productdesc) + t_prod.desc = productdesc + t_prod.seed.name = parent.myseed.name + t_prod.seed.desc = parent.myseed.desc + t_prod.seed.plantname = parent.myseed.plantname + result.Add(t_prod) // User gets a consumable + if(!t_prod) + return + t_amount++ + product_name = parent.myseed.plantname + if(getYield() >= 1) + SSblackbox.record_feedback("tally", "food_harvested", getYield(), product_name) + parent.investigate_log("autmoatic harvest of [getYield()] of [src], with seed traits [english_list(genes)] and reagents_add [english_list(reagents_add)] and potency [potency].", INVESTIGATE_BOTANY) + parent.update_tray() + return result /obj/item/seeds/proc/prepare_result(var/obj/item/reagent_containers/food/snacks/grown/T) if(!T.reagents) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm index 7319652ebe..f514ef54db 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm @@ -157,7 +157,7 @@ /datum/sprite_accessory/snouts/mam_snouts color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - recommended_species = list("mammal", "slimeperson", "insect", "podweak") + recommended_species = list("mammal", "slimeperson", "insect", "podweak", "lizard") mutant_part_string = "snout" relevant_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 1e2a375b39..2f5c94b784 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -21,7 +21,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/dummy/proc/wipe_state() delete_equipment() icon_render_key = null - cut_overlays(TRUE) + cut_overlays() //Inefficient pooling/caching way. GLOBAL_LIST_EMPTY(human_dummy_list) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 4901fad892..a8e3f89957 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -5,7 +5,6 @@ say_mod = "hisses" default_color = "00FF00" species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE) - mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs", "taur", "deco_wings") inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE mutanttongue = /obj/item/organ/tongue/lizard mutanttail = /obj/item/organ/tail/lizard diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 354bc9ed0f..95bd8d8991 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -11,7 +11,6 @@ response_disarm_simple = "flail at" response_harm_continuous = "punches" response_harm_simple = "punch" - threat = 1 speak_chance = 1 icon = 'icons/mob/mob.dmi' speed = 0 @@ -122,7 +121,6 @@ desc = "A massive, armored construct built to spearhead attacks and soak up enemy fire." icon_state = "behemoth" icon_living = "behemoth" - threat = 3 maxHealth = 150 health = 150 response_harm_continuous = "harmlessly punches" @@ -187,7 +185,6 @@ desc = "A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines." icon_state = "floating" icon_living = "floating" - threat = 3 maxHealth = 65 health = 65 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm index 0cfea3548b..e29cbb8062 100644 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ b/code/modules/mob/living/simple_animal/friendly/gondola.dm @@ -58,7 +58,7 @@ eyes_overlay.pixel_y = -8 moustache_overlay.pixel_y = -8 - cut_overlays(TRUE) + cut_overlays() add_overlay(body_overlay) add_overlay(eyes_overlay) add_overlay(moustache_overlay) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index fb24b0fc09..7abecc7c81 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -8,7 +8,6 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians name = "Guardian Spirit" real_name = "Guardian Spirit" desc = "A mysterious being that stands by its charge, ever vigilant." - threat = 5 speak_emote = list("hisses") gender = NEUTER mob_biotypes = NONE diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 7120ab6d0a..86467624b5 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -7,7 +7,6 @@ icon_dead = "alienh_dead" icon_gib = "syndicate_gib" gender = FEMALE - threat = 1 response_help_continuous = "pokes" response_help_simple = "poke" response_disarm_continuous = "shoves" @@ -69,7 +68,6 @@ icon_state = "aliens" icon_living = "aliens" icon_dead = "aliens_dead" - threat = 3 health = 150 maxHealth = 150 melee_damage_lower = 15 @@ -87,7 +85,6 @@ icon_living = "alienq" icon_dead = "alienq_dead" pixel_x = -16 - threat = 8 health = 250 maxHealth = 250 melee_damage_lower = 15 @@ -167,7 +164,6 @@ name = "lusty xenomorph maid" melee_damage_lower = 0 melee_damage_upper = 0 - threat = -1 a_intent = INTENT_HELP friendly_verb_continuous = "caresses" friendly_verb_simple = "caress" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index da16ec581b..1be90a07f8 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -2,7 +2,6 @@ /mob/living/simple_animal/hostile/bear name = "space bear" desc = "You don't need to be faster than a space bear, you just need to outrun your crewmates." - threat = 1 icon_state = "bear" icon_living = "bear" icon_dead = "bear_dead" diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 5f3d4f11c1..0a3cde3ef8 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -16,7 +16,6 @@ icon_state = "" icon_living = "" icon = 'icons/mob/bees.dmi' - threat = 0.3 gender = FEMALE speak_emote = list("buzzes") emote_hear = list("buzzes") diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm index cde63adffd..b4d60af198 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm @@ -1,7 +1,6 @@ /mob/living/simple_animal/hostile/boss name = "A Perfectly Generic Boss Placeholder" desc = "" - threat = 10 robust_searching = TRUE stat_attack = UNCONSCIOUS status_flags = NONE diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index f775d6600c..51a646f668 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -7,7 +7,6 @@ icon_living = "carp" icon_dead = "carp_dead" icon_gib = "carp_gib" - threat = 0.1 mob_biotypes = MOB_ORGANIC|MOB_BEAST speak_chance = 0 turns_per_move = 5 @@ -74,7 +73,6 @@ icon_living = "megacarp" icon_dead = "megacarp_dead" icon_gib = "megacarp_gib" - threat = 3 regen_amount = 6 maxHealth = 30 @@ -98,7 +96,6 @@ name = "Cayenne" desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot." gender = FEMALE - threat = 5 regen_amount = 8 speak_emote = list("squeaks") diff --git a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm index 48266e3e76..9b50587b3d 100644 --- a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm @@ -1,7 +1,6 @@ /mob/living/simple_animal/hostile/dark_wizard name = "Dark Wizard" desc = "Killing amateurs since the dawn of times." - threat = 3 icon = 'icons/mob/simple_human.dmi' icon_state = "dark_wizard" icon_living = "dark_wizard" diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 4f8d2fef6c..b44a2502ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -4,7 +4,6 @@ icon_state = "faithless" icon_living = "faithless" icon_dead = "faithless_dead" - threat = 1 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID gender = MALE speak_chance = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index a253ecfd96..a8799f4e8c 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -17,7 +17,6 @@ //basic spider mob, these generally guard nests /mob/living/simple_animal/hostile/poison/giant_spider - threat = 1 name = "giant spider" desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes." icon_state = "guard" diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index f48eef083b..ec0b7acd07 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -9,7 +9,6 @@ icon_state = "crawling" icon_living = "crawling" icon_dead = "dead" - threat = 0.5 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 80 maxHealth = 220 diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 501534237a..ac53ff794b 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -6,7 +6,6 @@ icon_state = "headcrab" icon_living = "headcrab" icon_dead = "headcrab_dead" - threat = 1 gender = NEUTER health = 50 maxHealth = 50 diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 5ed3cd0cdd..186fe36a10 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -3,7 +3,6 @@ stop_automated_movement_when_pulled = 0 obj_damage = 40 environment_smash = ENVIRONMENT_SMASH_STRUCTURES //Bitflags. Set to ENVIRONMENT_SMASH_STRUCTURES to break closets,tables,racks, etc; ENVIRONMENT_SMASH_WALLS for walls; ENVIRONMENT_SMASH_RWALLS for rwalls - var/threat = 0 // for dynamic var/atom/target var/ranged = FALSE var/rapid = 0 //How many shots per volley. @@ -600,6 +599,3 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega . += M else if (M.loc.type in hostile_machines) . += M.loc - -/mob/living/simple_animal/hostile/proc/threat() - return threat diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm index 55046d6555..362432b2af 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm @@ -11,7 +11,6 @@ icon_living = "leaper" icon_dead = "leaper_dead" mob_biotypes = MOB_ORGANIC|MOB_BEAST - threat = 2 maxHealth = 300 health = 300 ranged = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm index 99349168f0..31303bd7f1 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm @@ -8,7 +8,6 @@ icon_living = "arachnid" icon_dead = "arachnid_dead" mob_biotypes = MOB_ORGANIC|MOB_BUG - threat = 2 melee_damage_lower = 30 melee_damage_upper = 30 maxHealth = 300 diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm index 6efa0cf468..2d964f5721 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm @@ -14,7 +14,6 @@ icon_living = "mook" icon_dead = "mook_dead" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - threat = 0.5 pixel_x = -16 maxHealth = 45 health = 45 diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm index 0521afa9e9..7565a686bf 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm @@ -13,7 +13,6 @@ icon_state = "seedling" icon_living = "seedling" icon_dead = "seedling_dead" - threat = 0.5 maxHealth = 100 health = 100 melee_damage_lower = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index 9cb65d7c30..b86d5d87fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -5,7 +5,6 @@ icon_living = "tomato" icon_dead = "tomato_dead" gender = NEUTER - threat = 0.3 speak_chance = 0 turns_per_move = 5 maxHealth = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 5c1229c130..2a5f279386 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -23,7 +23,6 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner name = "blood-drunk miner" desc = "A miner destined to wander forever, engaged in an endless hunt." - threat = 15 health = 900 maxHealth = 900 icon_state = "miner" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index b191eaf3fb..519d6402e6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -26,7 +26,6 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum name = "bubblegum" desc = "In what passes for a hierarchy among slaughter demons, this one is king." - threat = 35 health = 2500 maxHealth = 2500 attack_verb_continuous = "rends" 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 18abb019d3..883ad39261 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -24,7 +24,6 @@ Difficulty: Very Hard /mob/living/simple_animal/hostile/megafauna/colossus name = "colossus" desc = "A monstrous creature protected by heavy shielding." - threat = 40 health = 2500 maxHealth = 2500 attack_verb_continuous = "judges" @@ -603,7 +602,6 @@ Difficulty: Very Hard icon_state = "lightgeist" icon_living = "lightgeist" icon_dead = "butterfly_dead" - threat = -0.7 turns_per_move = 1 response_help_continuous = "waves away" response_help_simple = "wave away" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index a1ecde40b8..4dfd4561d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -38,7 +38,6 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon name = "ash drake" desc = "Guardians of the necropolis." - threat = 30 health = 2500 maxHealth = 2500 spacewalk = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index c00d7c3130..525388fa61 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -37,7 +37,6 @@ Difficulty: Normal /mob/living/simple_animal/hostile/megafauna/hierophant name = "hierophant" desc = "A massive metal club that hangs in the air as though waiting. It'll make you dance to its beat." - threat = 30 health = 2500 maxHealth = 2500 attack_verb_continuous = "clubs" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 78c02fb7a7..795184bad5 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -18,7 +18,6 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/legion name = "Legion" - threat = 30 health = 800 maxHealth = 800 spacewalk = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index 13738b20e1..61be1f6287 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -8,7 +8,6 @@ icon_aggro = "Basilisk_alert" icon_dead = "Basilisk_dead" icon_gib = "syndicate_gib" - threat = 4 mob_biotypes = MOB_ORGANIC|MOB_BEAST move_to_delay = 20 projectiletype = /obj/item/projectile/temp/basilisk diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm index 11cc0fe67e..ed056c2ad9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm @@ -10,7 +10,6 @@ move_to_delay = 5 vision_range = 20 aggro_vision_range = 20 - threat = 1 maxHealth = 40 //easy to kill, but oh, will you be seeing a lot of them. health = 40 melee_damage_lower = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 87ec79abcf..e3edd171c0 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -11,7 +11,6 @@ robust_searching = TRUE ranged_ignores_vision = TRUE ranged = TRUE - threat = 5 obj_damage = 5 vision_range = 6 aggro_vision_range = 18 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 80489e0e40..d9f3cfba3d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -25,7 +25,6 @@ icon_aggro = "broodmother" icon_dead = "egg_sac" icon_gib = "syndicate_gib" - threat = 10 maxHealth = 800 health = 800 melee_damage_lower = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm index 78b24acfb0..fce5b636e4 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -24,7 +24,6 @@ icon_aggro = "herald" icon_dead = "herald_dying" icon_gib = "syndicate_gib" - threat = 10 maxHealth = 800 health = 800 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm index 31f925fb2b..15ed0135fe 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -24,7 +24,6 @@ icon_aggro = "legionnaire" icon_dead = "legionnaire_dead" icon_gib = "syndicate_gib" - threat = 10 maxHealth = 800 health = 800 melee_damage_lower = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index cdef0c50d3..7995e4d20f 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -24,7 +24,6 @@ icon_aggro = "pandora" icon_dead = "pandora_dead" icon_gib = "syndicate_gib" - threat = 10 maxHealth = 800 health = 800 melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm index 4a3497055a..3845c6f406 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goldgrub.dm @@ -8,7 +8,6 @@ icon_aggro = "Goldgrub_alert" icon_dead = "Goldgrub_dead" icon_gib = "syndicate_gib" - threat = 0.2 mob_biotypes = MOB_ORGANIC|MOB_BEAST vision_range = 2 aggro_vision_range = 9 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index 5f6c21bbbd..12f0b41d4e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -10,7 +10,6 @@ icon_gib = "syndicate_gib" mob_biotypes = MOB_ORGANIC|MOB_BEAST mouse_opacity = MOUSE_OPACITY_OPAQUE - threat = 2 move_to_delay = 10 ranged = 1 ranged_cooldown_time = 60 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 16f892bbff..11ce4f9214 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -9,7 +9,6 @@ icon_gib = "syndicate_gib" mob_biotypes = MOB_ORGANIC mouse_opacity = MOUSE_OPACITY_OPAQUE - threat = 4 move_to_delay = 14 ranged = 1 vision_range = 4 @@ -241,7 +240,6 @@ icon_state = "legion" icon_living = "legion" icon_dead = "legion" - threat = 5 health = 450 maxHealth = 450 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index e21e3e0693..92f331071a 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -10,7 +10,6 @@ obj_damage = 100 melee_damage_lower = 25 melee_damage_upper = 50 - threat = 2 attack_verb_continuous = "slashes" attack_verb_simple = "slash" attack_sound = 'sound/weapons/bladeslice.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 0544ddc676..74e37bea21 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -10,7 +10,6 @@ turns_per_move = 5 response_help_continuous = "pushes" response_help_simple = "push" - threat = 3 speed = 0 maxHealth = 115 health = 115 diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index f7a46658c4..e9879f38ec 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -10,7 +10,6 @@ speak_chance = 0 turns_per_move = 5 speed = 0 - threat = 1 maxHealth = 100 health = 100 harm_intent_damage = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/sharks.dm b/code/modules/mob/living/simple_animal/hostile/sharks.dm index 1263a23d26..af61149130 100644 --- a/code/modules/mob/living/simple_animal/hostile/sharks.dm +++ b/code/modules/mob/living/simple_animal/hostile/sharks.dm @@ -19,7 +19,6 @@ response_harm_continuous = "kicks" response_harm_simple = "kick" speed = 0 - threat = 1 maxHealth = 75 health = 75 harm_intent_damage = 18 diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 3091949552..ebacf1edef 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -11,7 +11,6 @@ speak_emote = list("rattles") emote_see = list("rattles") a_intent = INTENT_HARM - threat = 0.5 maxHealth = 40 blood_volume = 0 health = 40 @@ -64,7 +63,6 @@ icon_state = "templar" icon_living = "templar" icon_dead = "templar_dead" - threat = 1.5 maxHealth = 150 health = 150 weather_immunities = list("snow") @@ -98,7 +96,6 @@ icon_state = "plasma_miner" icon_living = "plasma_miner" icon_dead = "plasma_miner" - threat = 2 maxHealth = 150 health = 150 harm_intent_damage = 10 @@ -116,7 +113,6 @@ icon_state = "plasma_miner_tool" icon_living = "plasma_miner_tool" icon_dead = "plasma_miner_tool" - threat = 3 maxHealth = 185 health = 185 harm_intent_damage = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 3490d757a1..600d60eb4d 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -10,7 +10,6 @@ gender = NEUTER a_intent = INTENT_HARM mob_biotypes = MOB_HUMANOID - threat = 3 response_help_continuous = "touches" response_help_simple = "touch" response_disarm_continuous = "pushes" diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm index 226af952b1..6eeeabc877 100644 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm @@ -5,7 +5,6 @@ icon_living = "stickman" icon_dead = "stickman_dead" icon_gib = "syndicate_gib" - threat = 0.5 mob_biotypes = MOB_HUMANOID gender = MALE speak_chance = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index fd37bb26aa..103868e1d3 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -25,7 +25,6 @@ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 0 turns_per_move = 5 - threat = 1 speed = 0 stat_attack = UNCONSCIOUS robust_searching = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 2b9f4eea35..46a5a8ec68 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -7,7 +7,6 @@ icon_dead = "pine_1" icon_gib = "pine_1" gender = NEUTER - threat = 1 speak_chance = 0 turns_per_move = 5 response_help_continuous = "brushes" diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm index 57fb6f829d..b3523fc42c 100644 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm @@ -8,7 +8,6 @@ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 0 turns_per_move = 3 - threat = 3 speed = 0 maxHealth = 100 health = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index dc6154c05e..bce1a01c8a 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -11,7 +11,6 @@ mob_biotypes = MOB_ORGANIC|MOB_BEAST mouse_opacity = MOUSE_OPACITY_ICON move_to_delay = 5 - threat = 1 friendly_verb_continuous = "floats near" friendly_verb_simple = "float near" speak_emote = list("puffs") diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm index 6e4cbac022..1217084ce3 100644 --- a/code/modules/mob/living/simple_animal/hostile/zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm @@ -7,7 +7,6 @@ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 0 stat_attack = UNCONSCIOUS //braains - threat = 1 maxHealth = 100 health = 100 harm_intent_damage = 5 diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm new file mode 100644 index 0000000000..8a27f2669c --- /dev/null +++ b/code/modules/plumbing/ducts.dm @@ -0,0 +1,433 @@ +/* +All the important duct code: +/code/datums/components/plumbing/plumbing.dm +/code/datums/ductnet.dm +*/ +/obj/machinery/duct + name = "fluid duct" + icon = 'icons/obj/plumbing/fluid_ducts.dmi' + icon_state = "nduct" + + ///bitfield with the directions we're connected in + var/connects + ///set to TRUE to disable smart duct behaviour + var/dumb = FALSE + ///wheter we allow our connects to be changed after initialization or not + var/lock_connects = FALSE + ///our ductnet, wich tracks what we're connected to + var/datum/ductnet/duct + ///amount we can transfer per process. note that the ductnet can carry as much as the lowest capacity duct + var/capacity = 10 + + ///the color of our duct + var/duct_color = null + ///TRUE to ignore colors, so yeah we also connect with other colors without issue + var/ignore_colors = FALSE + ///1,2,4,8,16 + var/duct_layer = DUCT_LAYER_DEFAULT + ///whether we allow our layers to be altered + var/lock_layers = FALSE + ///TRUE to let colors connect when forced with a wrench, false to just not do that at all + var/color_to_color_support = TRUE + ///wheter to even bother with plumbing code or not + var/active = TRUE + ///track ducts we're connected to. Mainly for ducts we connect to that we normally wouldn't, like different layers and colors, for when we regenerate the ducts + var/list/neighbours = list() + ///wheter we just unanchored or drop whatever is in the variable. either is safe + var/drop_on_wrench = /obj/item/stack/ducts + +/obj/machinery/duct/Initialize(mapload, no_anchor, color_of_duct = "#ffffff", layer_of_duct = DUCT_LAYER_DEFAULT, force_connects) + . = ..() + + if(no_anchor) + active = FALSE + set_anchored(FALSE) + else if(!can_anchor()) + qdel(src) + CRASH("Overlapping ducts detected") + + if(force_connects) + connects = force_connects //skip change_connects() because we're still initializing and we need to set our connects at one point + if(!lock_layers) + duct_layer = layer_of_duct + if(!ignore_colors) + duct_color = color_of_duct + if(duct_color) + add_atom_colour(duct_color, FIXED_COLOUR_PRIORITY) + + handle_layer() + + for(var/obj/machinery/duct/D in loc) + if(D == src) + continue + if(D.duct_layer & duct_layer) + disconnect_duct() + + if(active) + attempt_connect() + + +///start looking around us for stuff to connect to +/obj/machinery/duct/proc/attempt_connect() + + for(var/atom/movable/AM in loc) + var/datum/component/plumbing/P = AM.GetComponent(/datum/component/plumbing) + if(P?.active) + disconnect_duct() //let's not built under plumbing machinery + return + for(var/D in GLOB.cardinals) + if(dumb && !(D & connects)) + continue + for(var/atom/movable/AM in get_step(src, D)) + if(connect_network(AM, D)) + add_connects(D) + update_icon() + +///see if whatever we found can be connected to +/obj/machinery/duct/proc/connect_network(atom/movable/AM, direction, ignore_color) + if(istype(AM, /obj/machinery/duct)) + return connect_duct(AM, direction, ignore_color) + + var/plumber = AM.GetComponent(/datum/component/plumbing) + if(!plumber) + return + return connect_plumber(plumber, direction) + +///connect to a duct +/obj/machinery/duct/proc/connect_duct(obj/machinery/duct/D, direction, ignore_color) + var/opposite_dir = turn(direction, 180) + if(!active || !D.active) + return + + if(!dumb && D.dumb && !(opposite_dir & D.connects)) + return + if(dumb && D.dumb && !(connects & D.connects)) //we eliminated a few more scenarios in attempt connect + return + + if((duct == D.duct) && duct)//check if we're not just comparing two null values + add_neighbour(D, direction) + + D.add_connects(opposite_dir) + D.update_icon() + return TRUE //tell the current pipe to also update it's sprite + if(!(D in neighbours)) //we cool + if((duct_color != D.duct_color) && !(ignore_colors || D.ignore_colors)) + return + if(!(duct_layer & D.duct_layer)) + return + + if(D.duct) + if(duct) + duct.assimilate(D.duct) + else + D.duct.add_duct(src) + else + if(duct) + duct.add_duct(D) + else + create_duct() + duct.add_duct(D) + add_neighbour(D, direction) + //tell our buddy its time to pass on the torch of connecting to pipes. This shouldn't ever infinitely loop since it only works on pipes that havent been inductrinated + D.attempt_connect() + + return TRUE + +///connect to a plumbing object +/obj/machinery/duct/proc/connect_plumber(datum/component/plumbing/P, direction) + var/opposite_dir = turn(direction, 180) + if(duct_layer != DUCT_LAYER_DEFAULT) //plumbing devices don't support multilayering. 3 is the default layer so we only use that. We can change this later + return FALSE + + if(!P.active) + return + + var/comp_directions = P.supply_connects + P.demand_connects //they should never, ever have supply and demand connects overlap or catastrophic failure + if(opposite_dir & comp_directions) + if(!duct) + create_duct() + if(duct.add_plumber(P, opposite_dir)) + neighbours[P.parent] = direction + return TRUE + +///we disconnect ourself from our neighbours. we also destroy our ductnet and tell our neighbours to make a new one +/obj/machinery/duct/proc/disconnect_duct(skipanchor) + if(!skipanchor) //since set_anchored calls us too. + set_anchored(FALSE) + active = FALSE + if(duct) + duct.remove_duct(src) + lose_neighbours() + reset_connects(0) + update_icon() + if(ispath(drop_on_wrench) && !QDELING(src)) + new drop_on_wrench(drop_location()) + qdel(src) + +///''''''''''''''''optimized''''''''''''''''' proc for quickly reconnecting after a duct net was destroyed +/obj/machinery/duct/proc/reconnect() + if(neighbours.len && !duct) + create_duct() + for(var/atom/movable/AM in neighbours) + if(istype(AM, /obj/machinery/duct)) + var/obj/machinery/duct/D = AM + if(D.duct) + if(D.duct == duct) //we're already connected + continue + else + duct.assimilate(D.duct) + continue + else + duct.add_duct(D) + D.reconnect() + else + var/datum/component/plumbing/P = AM.GetComponent(/datum/component/plumbing) + if(AM in get_step(src, neighbours[AM])) //did we move? + if(P) + connect_plumber(P, neighbours[AM]) + else + neighbours -= AM //we moved + +///Special proc to draw a new connect frame based on neighbours. not the norm so we can support multiple duct kinds +/obj/machinery/duct/proc/generate_connects() + if(lock_connects) + return + connects = 0 + for(var/A in neighbours) + connects |= neighbours[A] + update_icon() + +///create a new duct datum +/obj/machinery/duct/proc/create_duct() + duct = new() + duct.add_duct(src) + +///add a duct as neighbour. this means we're connected and will connect again if we ever regenerate +/obj/machinery/duct/proc/add_neighbour(obj/machinery/duct/D, direction) + if(!(D in neighbours)) + neighbours[D] = direction + if(!(src in D.neighbours)) + D.neighbours[src] = turn(direction, 180) + +///remove all our neighbours, and remove us from our neighbours aswell +/obj/machinery/duct/proc/lose_neighbours() + for(var/obj/machinery/duct/D in neighbours) + D.neighbours.Remove(src) + neighbours = list() + +///add a connect direction +/obj/machinery/duct/proc/add_connects(new_connects) //make this a define to cut proc calls? + if(!lock_connects) + connects |= new_connects + +///remove a connect direction +/obj/machinery/duct/proc/remove_connects(dead_connects) + if(!lock_connects) + connects &= ~dead_connects + +///remove our connects +/obj/machinery/duct/proc/reset_connects() + if(!lock_connects) + connects = 0 + +///get a list of the ducts we can connect to if we are dumb +/obj/machinery/duct/proc/get_adjacent_ducts() + var/list/adjacents = list() + for(var/A in GLOB.cardinals) + if(A & connects) + for(var/obj/machinery/duct/D in get_step(src, A)) + if((turn(A, 180) & D.connects) && D.active) + adjacents += D + return adjacents + +/obj/machinery/duct/update_icon_state() + var/temp_icon = initial(icon_state) + for(var/D in GLOB.cardinals) + if(D & connects) + if(D == NORTH) + temp_icon += "_n" + if(D == SOUTH) + temp_icon += "_s" + if(D == EAST) + temp_icon += "_e" + if(D == WEST) + temp_icon += "_w" + icon_state = temp_icon + +///update the layer we are on +/obj/machinery/duct/proc/handle_layer() + var/offset + switch(duct_layer)//it's a bitfield, but it's fine because it only works when there's one layer, and multiple layers should be handled differently + if(FIRST_DUCT_LAYER) + offset = -10 + if(SECOND_DUCT_LAYER) + offset = -5 + if(THIRD_DUCT_LAYER) + offset = 0 + if(FOURTH_DUCT_LAYER) + offset = 5 + if(FIFTH_DUCT_LAYER) + offset = 10 + pixel_x = offset + pixel_y = offset + + +/obj/machinery/duct/set_anchored(anchorvalue) + . = ..() + if(isnull(.)) + return + if(anchorvalue) + active = TRUE + attempt_connect() + else + disconnect_duct(TRUE) + +/obj/machinery/duct/wrench_act(mob/living/user, obj/item/I) //I can also be the RPD + ..() + add_fingerprint(user) + I.play_tool_sound(src) + if(anchored || can_anchor()) + set_anchored(!anchored) + user.visible_message( \ + "[user] [anchored ? null : "un"]fastens \the [src].", \ + "You [anchored ? null : "un"]fasten \the [src].", \ + "You hear ratcheting.") + return TRUE +///collection of all the sanity checks to prevent us from stacking ducts that shouldn't be stacked +/obj/machinery/duct/proc/can_anchor(turf/T) + if(!T) + T = get_turf(src) + for(var/obj/machinery/duct/D in T) + if(!anchored || D == src) + continue + for(var/A in GLOB.cardinals) + if(A & connects && A & D.connects) + return FALSE + return TRUE + +/obj/machinery/duct/doMove(destination) + . = ..() + disconnect_duct() + anchored = FALSE + +/obj/machinery/duct/Destroy() + disconnect_duct() + return ..() + +/obj/machinery/duct/MouseDrop_T(atom/A, mob/living/user) + if(!istype(A, /obj/machinery/duct)) + return + var/obj/machinery/duct/D = A + var/obj/item/I = user.get_active_held_item() + if(I?.tool_behaviour != TOOL_WRENCH) + to_chat(user, "You need to be holding a wrench in your active hand to do that!") + return + if(get_dist(src, D) != 1) + return + var/direction = get_dir(src, D) + if(!(direction in GLOB.cardinals)) + return + if(duct_layer != D.duct_layer) + return + + add_connects(direction) //the connect of the other duct is handled in connect_network, but do this here for the parent duct because it's not necessary in normal cases + add_neighbour(D, direction) + connect_network(D, direction, TRUE) + update_icon() + +///has a total of 5 layers and doesnt give a shit about color. its also dumb so doesnt autoconnect. +/obj/machinery/duct/multilayered + name = "duct layer-manifold" + icon = 'icons/obj/2x2.dmi' + icon_state = "multiduct" + pixel_x = -15 + pixel_y = -15 + + color_to_color_support = FALSE + duct_layer = FIRST_DUCT_LAYER | SECOND_DUCT_LAYER | THIRD_DUCT_LAYER | FOURTH_DUCT_LAYER | FIFTH_DUCT_LAYER + drop_on_wrench = null + + lock_connects = TRUE + lock_layers = TRUE + ignore_colors = TRUE + dumb = TRUE + + active = FALSE + anchored = FALSE + +/obj/machinery/duct/multilayered/Initialize(mapload, no_anchor, color_of_duct, layer_of_duct = DUCT_LAYER_DEFAULT, force_connects) + . = ..() + update_connects() + +/obj/machinery/duct/multilayered/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_blocker) + +/obj/machinery/duct/multilayered/wrench_act(mob/living/user, obj/item/I) + . = ..() + update_connects() + +/obj/machinery/duct/multilayered/proc/update_connects() + if(dir & NORTH || dir & SOUTH) + connects = NORTH | SOUTH + else + connects = EAST | WEST + +///don't connect to other multilayered stuff because honestly it shouldn't be done and I dont wanna deal with it +/obj/machinery/duct/multilayered/connect_duct(obj/machinery/duct/D, direction, ignore_color) + if(istype(D, /obj/machinery/duct/multilayered)) + return + return ..() + +/obj/machinery/duct/multilayered/handle_layer() + return + +/obj/item/stack/ducts + name = "stack of duct" + desc = "A stack of fluid ducts." + singular_name = "duct" + icon = 'icons/obj/plumbing/fluid_ducts.dmi' + icon_state = "ducts" + custom_materials = list(/datum/material/iron=500) + w_class = WEIGHT_CLASS_TINY + novariants = FALSE + max_amount = 50 + item_flags = NOBLUDGEON + merge_type = /obj/item/stack/ducts + ///Color of our duct + var/duct_color = "grey" + ///Default layer of our duct + var/duct_layer = "Default Layer" + ///Assoc index with all the available layers. yes five might be a bit much. Colors uses a global by the way + var/list/layers = list("First Layer" = FIRST_DUCT_LAYER, "Second Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT, + "Fourth Layer" = FOURTH_DUCT_LAYER, "Fifth Layer" = FIFTH_DUCT_LAYER) + +/obj/item/stack/ducts/examine(mob/user) + . = ..() + . += "It's current color and layer are [duct_color] and [duct_layer]. Use in-hand to change." + +/obj/item/stack/ducts/attack_self(mob/user) + var/new_layer = input("Select a layer", "Layer") as null|anything in layers + if(new_layer) + duct_layer = new_layer + var/new_color = input("Select a color", "Color") as null|anything in GLOB.pipe_paint_colors + if(new_color) + duct_color = new_color + add_atom_colour(GLOB.pipe_paint_colors[new_color], FIXED_COLOUR_PRIORITY) + +/obj/item/stack/ducts/afterattack(atom/A, user, proximity) + . = ..() + if(!proximity) + return + if(istype(A, /obj/machinery/duct)) + var/obj/machinery/duct/D = A + if(!D.anchored) + add(1) + qdel(D) + if(istype(A, /turf/open) && use(1)) + var/turf/open/OT = A + new /obj/machinery/duct(OT, FALSE, GLOB.pipe_paint_colors[duct_color], layers[duct_layer]) + playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) + +/obj/item/stack/ducts/fifty + amount = 50 diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm new file mode 100644 index 0000000000..0566945e3b --- /dev/null +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -0,0 +1,98 @@ +/**Basic plumbing object. +* It doesn't really hold anything special, YET. +* Objects that are plumbing but not a subtype are as of writing liquid pumps and the reagent_dispenser tank +* Also please note that the plumbing component is toggled on and off by the component using a signal from default_unfasten_wrench, so dont worry about it +*/ +/obj/machinery/plumbing + name = "pipe thing" + icon = 'icons/obj/plumbing/plumbers.dmi' + icon_state = "pump" + density = TRUE + active_power_usage = 30 + use_power = ACTIVE_POWER_USE + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + ///Plumbing machinery is always gonna need reagents, so we might aswell put it here + var/buffer = 50 + ///Flags for reagents, like INJECTABLE, TRANSPARENT bla bla everything thats in DEFINES/reagents.dm + var/reagent_flags = TRANSPARENT + ///wheter we partake in rcd construction or not + var/rcd_constructable = TRUE + ///cost of the plumbing rcd construction + var/rcd_cost = 15 + ///delay of constructing it throught the plumbing rcd + var/rcd_delay = 10 + +/obj/machinery/plumbing/Initialize(mapload, bolt = TRUE) + . = ..() + anchored = bolt + create_reagents(buffer, reagent_flags) + AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated)) + +/obj/machinery/plumbing/proc/can_be_rotated(mob/user,rotation_type) + return TRUE + + +/obj/machinery/plumbing/examine(mob/user) + . = ..() + . += "The maximum volume display reads: [reagents.maximum_volume] units." + +/obj/machinery/plumbing/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I) + return TRUE + +/obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) + to_chat(user, "You start furiously plunging [name].") + if(do_after(user, 30, target = src)) + to_chat(user, "You finish plunging the [name].") + reagents.reaction(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() + +/obj/machinery/plumbing/welder_act(mob/living/user, obj/item/I) + . = ..() + if(anchored) + to_chat(user, "The [name] needs to be unbolted to do that!You start slicing the [name] apart.You slice the [name] apart. target_temperature && acclimate_state != COOLING) + acclimate_state = COOLING + update_icon() + if(!emptying) + if(reagents.chem_temp >= target_temperature && target_temperature + allowed_temperature_difference >= reagents.chem_temp) //cooling here + emptying = TRUE + if(reagents.chem_temp <= target_temperature && target_temperature - allowed_temperature_difference <= reagents.chem_temp) //heating here + emptying = TRUE + + reagents.adjust_thermal_energy((target_temperature - reagents.chem_temp) * heater_coefficient * SPECIFIC_HEAT_DEFAULT * reagents.total_volume) //keep constant with chem heater + reagents.handle_reactions() + +/obj/machinery/plumbing/acclimator/update_icon() + icon_state = initial(icon_state) + switch(acclimate_state) + if(COOLING) + icon_state += "_cold" + if(HEATING) + icon_state += "_hot" + +/obj/machinery/plumbing/acclimator/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemAcclimator", name) + ui.open() + +/obj/machinery/plumbing/acclimator/ui_data(mob/user) + var/list/data = list() + + data["enabled"] = enabled + data["chem_temp"] = reagents.chem_temp + data["target_temperature"] = target_temperature + data["allowed_temperature_difference"] = allowed_temperature_difference + data["acclimate_state"] = acclimate_state + data["max_volume"] = reagents.maximum_volume + data["reagent_volume"] = reagents.total_volume + data["emptying"] = emptying + return data + +/obj/machinery/plumbing/acclimator/ui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("set_target_temperature") + var/target = text2num(params["temperature"]) + target_temperature = clamp(target, 0, 1000) + if("set_allowed_temperature_difference") + var/target = text2num(params["temperature"]) + allowed_temperature_difference = clamp(target, 0, 1000) + if("toggle_power") + enabled = !enabled + if("change_volume") + var/target = text2num(params["volume"]) + reagents.maximum_volume = clamp(round(target), 1, buffer) + +#undef COOLING +#undef HEATING +#undef NEUTRAL diff --git a/code/modules/plumbing/plumbers/autohydro.dm b/code/modules/plumbing/plumbers/autohydro.dm new file mode 100644 index 0000000000..dbc70dfcf5 --- /dev/null +++ b/code/modules/plumbing/plumbers/autohydro.dm @@ -0,0 +1,65 @@ +/obj/machinery/hydroponics/constructable/automagic + name = "automated hydroponics system" + desc = "The bane of botanists everywhere. Accepts chemical reagents via plumbing, automatically harvests and removes dead plants." + obj_flags = CAN_BE_HIT | UNIQUE_RENAME + circuit = /obj/item/circuitboard/machine/hydroponics/automagic + self_sufficiency_req = 400 //automating hydroponics makes gaia sad so she needs more drugs to turn they tray godly. + canirrigate = FALSE + + +/obj/machinery/hydroponics/constructable/automagic/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/reagent_containers)) + return FALSE //avoid fucky wuckies + ..() + +/obj/machinery/hydroponics/constructable/automagic/default_unfasten_wrench(mob/user, obj/item/I, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + user.visible_message("[user.name] [anchored ? "fasten" : "unfasten"] [src]", \ + "You [anchored ? "fasten" : "unfasten"] [src]") + var/datum/component/plumbing/CP = GetComponent(/datum/component/plumbing) + if(anchored) + CP.enable() + else + CP.disable() + +/obj/machinery/hydroponics/constructable/automagic/Destroy() + . = ..() + STOP_PROCESSING(SSobj, src) + +/obj/machinery/hydroponics/constructable/automagic/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + create_reagents(100 , AMOUNT_VISIBLE) + +/obj/machinery/hydroponics/constructable/automagic/ComponentInitialize() + . = ..() + AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated)) + AddComponent(/datum/component/plumbing/simple_demand) + +/obj/machinery/hydroponics/constructable/proc/can_be_rotated(mob/user, rotation_type) + return !anchored + +/obj/machinery/hydroponics/constructable/automagic/process() + if(reagents) + applyChemicals(reagents) + reagents.clear_reagents() + if(dead) + dead = 0 + qdel(myseed) + myseed = null + update_icon() + name = initial(name) + desc = initial(desc) + if(harvest) + myseed.harvest_userless() + harvest = 0 + lastproduce = age + if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest)) + qdel(myseed) + myseed = null + dead = 0 + name = initial(name) + desc = initial(desc) + update_icon() + ..() diff --git a/code/modules/plumbing/plumbers/bottler.dm b/code/modules/plumbing/plumbers/bottler.dm new file mode 100644 index 0000000000..396c7cac22 --- /dev/null +++ b/code/modules/plumbing/plumbers/bottler.dm @@ -0,0 +1,79 @@ +/obj/machinery/plumbing/bottler + name = "chemical bottler" + desc = "Puts reagents into containers, like bottles and beakers." + icon_state = "bottler" + layer = ABOVE_ALL_MOB_LAYER + reagent_flags = TRANSPARENT | DRAINABLE + rcd_cost = 50 + rcd_delay = 50 + buffer = 100 + ///how much do we fill + var/wanted_amount = 10 + ///where things are sent + var/turf/goodspot = null + ///where things are taken + var/turf/inputspot = null + ///where beakers that are already full will be sent + var/turf/badspot = null + +/obj/machinery/plumbing/bottler/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/simple_demand, bolt) + setDir(dir) + +/obj/machinery/plumbing/bottler/can_be_rotated(mob/user, rotation_type) + if(anchored) + to_chat(user, "It is fastened to the floor!") + return FALSE + return TRUE + +///changes the tile array +/obj/machinery/plumbing/bottler/setDir(newdir) + . = ..() + switch(dir) + if(NORTH) + goodspot = get_step(get_turf(src), NORTH) + inputspot = get_step(get_turf(src), SOUTH) + badspot = get_step(get_turf(src), EAST) + if(SOUTH) + goodspot = get_step(get_turf(src), SOUTH) + inputspot = get_step(get_turf(src), NORTH) + badspot = get_step(get_turf(src), WEST) + if(WEST) + goodspot = get_step(get_turf(src), WEST) + inputspot = get_step(get_turf(src), EAST) + badspot = get_step(get_turf(src), NORTH) + if(EAST) + goodspot = get_step(get_turf(src), EAST) + inputspot = get_step(get_turf(src), WEST) + badspot = get_step(get_turf(src), SOUTH) + +///changing input ammount with a window +/obj/machinery/plumbing/bottler/interact(mob/user) + . = ..() + wanted_amount = clamp(round(input(user,"maximum is 100u","set ammount to fill with") as num|null, 1), 1, 100) + reagents.clear_reagents() + to_chat(user, " The [src] will now fill for [wanted_amount]u.") + +/obj/machinery/plumbing/bottler/process() + if(stat & NOPOWER) + return + ///see if machine has enough to fill + if(reagents.total_volume >= wanted_amount && anchored) + var/obj/AM = pick(inputspot.contents)///pick a reagent_container that could be used + if(istype(AM, /obj/item/reagent_containers) && (!istype(AM, /obj/item/reagent_containers/hypospray/medipen))) + var/obj/item/reagent_containers/B = AM + ///see if it would overflow else inject + if((B.reagents.total_volume + wanted_amount) <= B.reagents.maximum_volume) + reagents.trans_to(B, wanted_amount) + B.forceMove(goodspot) + return + ///glass was full so we move it away + AM.forceMove(badspot) + if(istype(AM, /obj/item/slime_extract)) ///slime extracts need inject + AM.forceMove(goodspot) + reagents.trans_to(AM, wanted_amount) + return + if(istype(AM, /obj/item/slimecross/industrial)) ///no need to move slimecross industrial things + reagents.trans_to(AM, wanted_amount) + return diff --git a/code/modules/plumbing/plumbers/destroyer.dm b/code/modules/plumbing/plumbers/destroyer.dm new file mode 100644 index 0000000000..b61383ea4a --- /dev/null +++ b/code/modules/plumbing/plumbers/destroyer.dm @@ -0,0 +1,21 @@ +/obj/machinery/plumbing/disposer + name = "chemical disposer" + desc = "Breaks down chemicals and annihilates them." + icon_state = "disposal" + ///we remove 10 reagents per second + var/disposal_rate = 10 + +/obj/machinery/plumbing/disposer/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/simple_demand, bolt) + +/obj/machinery/plumbing/disposer/process() + if(stat & NOPOWER) + return + if(reagents.total_volume) + if(icon_state != initial(icon_state) + "_working") //threw it here instead of update icon since it only has two states + icon_state = initial(icon_state) + "_working" + reagents.remove_any(disposal_rate) + else + if(icon_state != initial(icon_state)) + icon_state = initial(icon_state) diff --git a/code/modules/plumbing/plumbers/fermenter.dm b/code/modules/plumbing/plumbers/fermenter.dm new file mode 100644 index 0000000000..b1e1e4b676 --- /dev/null +++ b/code/modules/plumbing/plumbers/fermenter.dm @@ -0,0 +1,59 @@ +/obj/machinery/plumbing/fermenter //FULLY AUTOMATIC BEER BREWING. TRULY, THE FUTURE. + name = "chemical fermenter" + desc = "Turns plants into various types of booze." + icon_state = "fermenter" + layer = ABOVE_ALL_MOB_LAYER + reagent_flags = TRANSPARENT | DRAINABLE + rcd_cost = 30 + rcd_delay = 30 + buffer = 400 + ///input dir + var/eat_dir = SOUTH + +/obj/machinery/plumbing/fermenter/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/simple_supply, bolt) + +/obj/machinery/plumbing/fermenter/can_be_rotated(mob/user,rotation_type) + if(anchored) + to_chat(user, "It is fastened to the floor!") + return FALSE + switch(eat_dir) + if(WEST) + eat_dir = NORTH + return TRUE + if(EAST) + eat_dir = SOUTH + return TRUE + if(NORTH) + eat_dir = EAST + return TRUE + if(SOUTH) + eat_dir = WEST + return TRUE + +/obj/machinery/plumbing/fermenter/CanPass(atom/movable/AM) + . = ..() + if(!anchored) + return + var/move_dir = get_dir(loc, AM.loc) + if(move_dir == eat_dir) + return TRUE + +/obj/machinery/plumbing/fermenter/Crossed(atom/movable/AM) + . = ..() + ferment(AM) + +/obj/machinery/plumbing/fermenter/proc/ferment(atom/AM) + if(stat & NOPOWER) + return + if(reagents.holder_full()) + return + if(!isitem(AM)) + return + if(istype(AM, /obj/item/reagent_containers/food/snacks/grown)) + var/obj/item/reagent_containers/food/snacks/grown/G = AM + if(G.distill_reagent) + var/amount = G.seed.potency * 0.25 + reagents.add_reagent(G.distill_reagent, amount) + qdel(G) diff --git a/code/modules/plumbing/plumbers/filter.dm b/code/modules/plumbing/plumbers/filter.dm new file mode 100644 index 0000000000..1ffd170507 --- /dev/null +++ b/code/modules/plumbing/plumbers/filter.dm @@ -0,0 +1,65 @@ +///chemical plumbing filter. If it's not filtered by left and right, it goes straight. +/obj/machinery/plumbing/filter + name = "chemical filter" + desc = "A chemical filter for filtering chemicals. The left and right outputs appear to be from the perspective of the input port." + icon_state = "filter" + density = FALSE + + ///whitelist of chems id's that go to the left side. Empty to disable port + var/list/left = list() + ///whitelist of chem id's that go to the right side. Empty to disable port + var/list/right = list() + ///whitelist of chems but their name instead of path + var/list/english_left = list() + ///whitelist of chems but their name instead of path + var/list/english_right = list() + +/obj/machinery/plumbing/filter/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/filter, bolt) + +/obj/machinery/plumbing/filter/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemFilter", name) + ui.open() + +/obj/machinery/plumbing/filter/ui_data(mob/user) + var/list/data = list() + data["left"] = english_left + data["right"] = english_right + return data + +/obj/machinery/plumbing/filter/ui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("add") + var/new_chem_name = params["name"] + var/chem_id = get_chem_id(new_chem_name) + if(chem_id) + switch(params["which"]) + if("left") + if(!left.Find(chem_id)) + english_left += new_chem_name + left += chem_id + if("right") + if(!right.Find(chem_id)) + english_right += new_chem_name + right += chem_id + else + to_chat(usr, "No such known reagent exists!") + + if("remove") + var/chem_name = params["reagent"] + var/chem_id = get_chem_id(chem_name) + switch(params["which"]) + if("left") + if(english_left.Find(chem_name)) + english_left -= chem_name + left -= chem_id + if("right") + if(english_right.Find(chem_name)) + english_right -= chem_name + right -= chem_id diff --git a/code/modules/plumbing/plumbers/grinder_chemical.dm b/code/modules/plumbing/plumbers/grinder_chemical.dm new file mode 100644 index 0000000000..f39c79f906 --- /dev/null +++ b/code/modules/plumbing/plumbers/grinder_chemical.dm @@ -0,0 +1,64 @@ +/obj/machinery/plumbing/grinder_chemical + name = "chemical grinder" + desc = "chemical grinder." + icon_state = "grinder_chemical" + layer = ABOVE_ALL_MOB_LAYER + reagent_flags = TRANSPARENT | DRAINABLE + rcd_cost = 30 + rcd_delay = 30 + buffer = 400 + var/eat_dir = NORTH + +/obj/machinery/plumbing/grinder_chemical/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/simple_supply, bolt) + +/obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user,rotation_type) + if(anchored) + to_chat(user, "It is fastened to the floor!") + return FALSE + switch(eat_dir) + if(WEST) + eat_dir = NORTH + return TRUE + if(EAST) + eat_dir = SOUTH + return TRUE + if(NORTH) + eat_dir = EAST + return TRUE + if(SOUTH) + eat_dir = WEST + return TRUE + +/obj/machinery/plumbing/grinder_chemical/CanPass(atom/movable/AM) + . = ..() + if(!anchored) + return + var/move_dir = get_dir(loc, AM.loc) + if(move_dir == eat_dir) + return TRUE + +/obj/machinery/plumbing/grinder_chemical/Crossed(atom/movable/AM) + . = ..() + grind(AM) + +/obj/machinery/plumbing/grinder_chemical/proc/grind(atom/AM) + if(stat & NOPOWER) + return + if(reagents.holder_full()) + return + if(!isitem(AM)) + return + var/obj/item/I = AM + if(I.juice_results || I.grind_results) + if(I.juice_results) + I.on_juice() + reagents.add_reagent_list(I.juice_results) + if(I.reagents) + I.reagents.trans_to(src, I.reagents.total_volume) + qdel(I) + return + I.on_grind() + reagents.add_reagent_list(I.grind_results) + qdel(I) diff --git a/code/modules/plumbing/plumbers/medipenrefill.dm b/code/modules/plumbing/plumbers/medipenrefill.dm new file mode 100644 index 0000000000..fb7553a4d5 --- /dev/null +++ b/code/modules/plumbing/plumbers/medipenrefill.dm @@ -0,0 +1,94 @@ +/obj/machinery/medipen_refiller + name = "Medipen Refiller" + desc = "A machine that refills used medipens with chemicals." + icon = 'icons/obj/machines/medipen_refiller.dmi' + icon_state = "medipen_refiller" + density = TRUE + circuit = /obj/item/circuitboard/machine/medipen_refiller + idle_power_usage = 100 + /// list of medipen subtypes it can refill + var/list/allowed = list(/obj/item/reagent_containers/hypospray/medipen = /datum/reagent/medicine/epinephrine, + /obj/item/reagent_containers/hypospray/medipen/ekit = /datum/reagent/medicine/epinephrine, + /obj/item/reagent_containers/hypospray/medipen/firelocker = /datum/reagent/medicine/oxandrolone, + /obj/item/reagent_containers/hypospray/medipen/stimpack = /datum/reagent/medicine/ephedrine, + /obj/item/reagent_containers/hypospray/medipen/blood_loss = /datum/reagent/medicine/coagulant/weak) + /// var to prevent glitches in the animation + var/busy = FALSE + +/obj/machinery/medipen_refiller/Initialize() + . = ..() + create_reagents(100, TRANSPARENT) + for(var/obj/item/stock_parts/matter_bin/B in component_parts) + reagents.maximum_volume += 100 * B.rating + AddComponent(/datum/component/plumbing/simple_demand) + + +/obj/machinery/medipen_refiller/RefreshParts() + var/new_volume = 100 + for(var/obj/item/stock_parts/matter_bin/B in component_parts) + new_volume += 100 * B.rating + if(!reagents) + create_reagents(new_volume, TRANSPARENT) + reagents.maximum_volume = new_volume + return TRUE + +/// handles the messages and animation, calls refill to end the animation +/obj/machinery/medipen_refiller/attackby(obj/item/I, mob/user, params) + if(busy) + to_chat(user, "The machine is busy.") + return + if(istype(I, /obj/item/reagent_containers) && I.is_open_container()) + var/obj/item/reagent_containers/RC = I + var/units = RC.reagents.trans_to(src, RC.amount_per_transfer_from_this) + if(units) + to_chat(user, "You transfer [units] units of the solution to the [name].") + return + else + to_chat(user, "The [name] is full.") + return + if(istype(I, /obj/item/reagent_containers/hypospray/medipen)) + var/obj/item/reagent_containers/hypospray/medipen/P = I + if(!(LAZYFIND(allowed, P.type))) + to_chat(user, "Error! Unknown schematics.") + return + if(P.reagents?.reagent_list.len) + to_chat(user, "The medipen is already filled.") + return + if(reagents.has_reagent(allowed[P.type], 10)) + busy = TRUE + add_overlay("active") + addtimer(CALLBACK(src, .proc/refill, P, user), 20) + qdel(P) + return + to_chat(user, "There aren't enough reagents to finish this operation.") + return + ..() + +/obj/machinery/medipen_refiller/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) + to_chat(user, "You start furiously plunging [name].") + if(do_after(user, 30, target = src)) + to_chat(user, "You finish plunging the [name].") + reagents.clear_reagents() + +/obj/machinery/medipen_refiller/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I) + return TRUE + +/obj/machinery/medipen_refiller/crowbar_act(mob/user, obj/item/I) + ..() + default_deconstruction_crowbar(I) + return TRUE + +/obj/machinery/medipen_refiller/screwdriver_act(mob/living/user, obj/item/I) + . = ..() + if(!.) + return default_deconstruction_screwdriver(user, "medipen_refiller_open", "medipen_refiller", I) + +/// refills the medipen +/obj/machinery/medipen_refiller/proc/refill(obj/item/reagent_containers/hypospray/medipen/P, mob/user) + new P.type(loc) + reagents.remove_reagent(allowed[P.type], 10) + cut_overlays() + busy = FALSE + to_chat(user, "Medipen refilled.") diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm new file mode 100644 index 0000000000..56510fac87 --- /dev/null +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -0,0 +1,127 @@ +///We take a constant input of reagents, and produce a pill once a set volume is reached +/obj/machinery/plumbing/pill_press + name = "chemical press" + desc = "A press that makes pills, patches and bottles." + icon_state = "pill_press" + ///maximum size of a pill + var/max_pill_volume = 50 + ///maximum size of a patch + var/max_patch_volume = 40 + ///maximum size of a bottle + var/max_bottle_volume = 30 + ///current operating product (pills or patches) + var/product = "pill" + ///the minimum size a pill or patch can be + var/min_volume = 5 + ///the maximum size a pill or patch can be + var/max_volume = 50 + ///selected size of the product + var/current_volume = 10 + ///prefix for the product name + var/product_name = "factory" + ///the icon_state number for the pill. + var/pill_number = RANDOM_PILL_STYLE + ///list of id's and icons for the pill selection of the ui + var/list/pill_styles + ///list of products stored in the machine, so we dont have 610 pills on one tile + var/list/stored_products = list() + ///max amount of pills allowed on our tile before we start storing them instead + var/max_floor_products = 50 //haha massive pill piles + +/obj/machinery/plumbing/pill_press/examine(mob/user) + . = ..() + . += "The [name] currently has [stored_products.len] stored. There needs to be less than [max_floor_products ] on the floor to continue dispensing." + +/obj/machinery/plumbing/pill_press/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/simple_demand, bolt) + + //expertly copypasted from chemmasters + var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) + pill_styles = list() + for (var/x in 1 to PILL_STYLE_COUNT) + var/list/SL = list() + SL["id"] = x + SL["htmltag"] = assets.icon_tag("pill[x]") + pill_styles += list(SL) + + +/obj/machinery/plumbing/pill_press/process() + if(stat & NOPOWER) + return + if(reagents.total_volume >= current_volume) + if (product == "pill") + var/obj/item/reagent_containers/pill/P = new(src) + reagents.trans_to(P, current_volume) + P.name = trim("[product_name] pill") + stored_products += P + if(pill_number == RANDOM_PILL_STYLE) + P.icon_state = "pill[rand(1,21)]" + else + P.icon_state = "pill[pill_number]" + if(P.icon_state == "pill4") //mirrored from chem masters + P.desc = "A tablet or capsule, but not just any, a red one, one taken by the ones not scared of knowledge, freedom, uncertainty and the brutal truths of reality." + else if (product == "patch") + var/obj/item/reagent_containers/pill/patch/P = new(src) + reagents.trans_to(P, current_volume) + P.name = trim("[product_name] patch") + stored_products += P + else if (product == "bottle") + var/obj/item/reagent_containers/glass/bottle/P = new(src) + reagents.trans_to(P, current_volume) + P.name = trim("[product_name] bottle") + stored_products += P + if(stored_products.len) + var/pill_amount = 0 + for(var/obj/item/reagent_containers/pill/P in loc) + pill_amount++ + if(pill_amount >= max_floor_products) //too much so just stop + break + if(pill_amount < max_floor_products) + var/atom/movable/AM = stored_products[1] //AM because forceMove is all we need + stored_products -= AM + AM.forceMove(drop_location()) + + +/obj/machinery/plumbing/pill_press/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/simple/pills), + ) + +/obj/machinery/plumbing/pill_press/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemPress", name) + ui.open() + +/obj/machinery/plumbing/pill_press/ui_data(mob/user) + var/list/data = list() + data["pill_style"] = pill_number + data["current_volume"] = current_volume + data["product_name"] = product_name + data["pill_styles"] = pill_styles + data["product"] = product + data["min_volume"] = min_volume + data["max_volume"] = max_volume + return data + +/obj/machinery/plumbing/pill_press/ui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("change_pill_style") + pill_number = clamp(text2num(params["id"]), 1 , PILL_STYLE_COUNT) + if("change_current_volume") + current_volume = clamp(text2num(params["volume"]), min_volume, max_volume) + if("change_product_name") + product_name = html_encode(params["name"]) + if("change_product") + product = params["product"] + if (product == "pill") + max_volume = max_pill_volume + else if (product == "patch") + max_volume = max_patch_volume + else if (product == "bottle") + max_volume = max_bottle_volume + current_volume = clamp(current_volume, min_volume, max_volume) diff --git a/code/modules/plumbing/plumbers/pumps.dm b/code/modules/plumbing/plumbers/pumps.dm new file mode 100644 index 0000000000..c24e48098d --- /dev/null +++ b/code/modules/plumbing/plumbers/pumps.dm @@ -0,0 +1,64 @@ +///We pump liquids from activated(plungerated) geysers to a plumbing outlet. We don't need to be wired. +/obj/machinery/plumbing/liquid_pump + name = "liquid pump" + desc = "Pump up those sweet liquids from under the surface. Uses thermal energy from geysers to power itself." //better than placing 200 cables, because it wasnt fun + icon = 'icons/obj/plumbing/plumbers.dmi' + icon_state = "pump" + anchored = FALSE + density = TRUE + idle_power_usage = 10 + active_power_usage = 1000 + + rcd_cost = 30 + rcd_delay = 40 + + ///units we pump per process (2 seconds) + var/pump_power = 2 + ///set to true if the loop couldnt find a geyser in process, so it remembers and stops checking every loop until moved. more accurate name would be absolutely_no_geyser_under_me_so_dont_try + var/geyserless = FALSE + ///The geyser object + var/obj/structure/geyser/geyser + ///volume of our internal buffer + var/volume = 200 + +/obj/machinery/plumbing/liquid_pump/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/simple_supply, bolt) + +///please note that the component has a hook in the parent call, wich handles activating and deactivating +/obj/machinery/plumbing/liquid_pump/default_unfasten_wrench(mob/user, obj/item/I, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + geyser = null + update_icon() + geyserless = FALSE //we switched state, so lets just set this back aswell + +/obj/machinery/plumbing/liquid_pump/process() + if(!anchored || panel_open || geyserless) + return + + if(!geyser) + for(var/obj/structure/geyser/G in loc.contents) + geyser = G + update_icon() + if(!geyser) //we didnt find one, abort + geyserless = TRUE + visible_message("The [name] makes a sad beep!") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50) + return + + pump() + +///pump up that sweet geyser nectar +/obj/machinery/plumbing/liquid_pump/proc/pump() + if(!geyser || !geyser.reagents) + return + geyser.reagents.trans_to(src, pump_power) + +/obj/machinery/plumbing/liquid_pump/update_icon_state() + if(geyser) + icon_state = initial(icon_state) + "-on" + else if(panel_open) + icon_state = initial(icon_state) + "-open" + else + icon_state = initial(icon_state) diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm new file mode 100644 index 0000000000..949543c300 --- /dev/null +++ b/code/modules/plumbing/plumbers/reaction_chamber.dm @@ -0,0 +1,63 @@ +///a reaction chamber for plumbing. pretty much everything can react, but this one keeps the reagents seperated and only reacts under your given terms +/obj/machinery/plumbing/reaction_chamber + name = "reaction chamber" + desc = "Keeps chemicals seperated until given conditions are met." + icon_state = "reaction_chamber" + buffer = 200 + reagent_flags = TRANSPARENT | NO_REACT + + /**list of set reagents that the reaction_chamber allows in, and must all be present before mixing is enabled. + * example: list(/datum/reagent/water = 20, /datum/reagent/fuel/oil = 50) + */ + var/list/required_reagents = list() + ///our reagent goal has been reached, so now we lock our inputs and start emptying + var/emptying = FALSE + +/obj/machinery/plumbing/reaction_chamber/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/reaction_chamber, bolt) + +/obj/machinery/plumbing/reaction_chamber/on_reagent_change() + if(reagents.total_volume == 0 && emptying) //we were emptying, but now we aren't + emptying = FALSE + reagent_flags |= NO_REACT + +/obj/machinery/plumbing/reaction_chamber/power_change() + . = ..() + if(use_power != NO_POWER_USE) + icon_state = initial(icon_state) + "_on" + else + icon_state = initial(icon_state) + +/obj/machinery/plumbing/reaction_chamber/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemReactionChamber", name) + ui.open() + +/obj/machinery/plumbing/reaction_chamber/ui_data(mob/user) + var/list/data = list() + var/list/text_reagents = list() + for(var/A in required_reagents) //make a list where the key is text, because that looks alot better in the ui than a typepath + var/datum/reagent/R = A + text_reagents[initial(R.name)] = required_reagents[R] + + data["reagents"] = text_reagents + data["emptying"] = emptying + return data + +/obj/machinery/plumbing/reaction_chamber/ui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("remove") + var/reagent = get_chem_id(params["chem"]) + if(reagent) + required_reagents.Remove(reagent) + if("add") + var/input_reagent = get_chem_id(params["chem"]) + if(input_reagent && !required_reagents.Find(input_reagent)) + var/input_amount = text2num(params["amount"]) + if(input_amount) + required_reagents[input_reagent] = input_amount diff --git a/code/modules/plumbing/plumbers/splitters.dm b/code/modules/plumbing/plumbers/splitters.dm new file mode 100644 index 0000000000..a26813486c --- /dev/null +++ b/code/modules/plumbing/plumbers/splitters.dm @@ -0,0 +1,50 @@ +///it splits the reagents however you want. So you can "every 60 units, 45 goes left and 15 goes straight". The side direction is EAST, you can change this in the component +/obj/machinery/plumbing/splitter + name = "Chemical Splitter" + desc = "A chemical splitter for smart chemical factorization. Waits till a set of conditions is met and then stops all input and splits the buffer evenly or other in two ducts." + icon_state = "splitter" + buffer = 100 + density = FALSE + + ///constantly switches between TRUE and FALSE. TRUE means the batch tick goes straight, FALSE means the next batch goes in the side duct. + var/turn_straight = TRUE + ///how much we must transfer straight. note input can be as high as 10 reagents per process, usually + var/transfer_straight = 5 + ///how much we must transfer to the side + var/transfer_side = 5 + //the maximum you can set the transfer to + var/max_transfer = 9 + + +/obj/machinery/plumbing/splitter/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/splitter, bolt) + +/obj/machinery/plumbing/splitter/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemSplitter", name) + ui.open() + +/obj/machinery/plumbing/splitter/ui_data(mob/user) + var/list/data = list() + data["straight"] = transfer_straight + data["side"] = transfer_side + data["max_transfer"] = max_transfer + return data + +/obj/machinery/plumbing/splitter/ui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("set_amount") + var/direction = params["target"] + var/value = clamp(text2num(params["amount"]), 1, max_transfer) + switch(direction) + if("straight") + transfer_straight = value + if("side") + transfer_side = value + else + return FALSE diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm new file mode 100644 index 0000000000..c2bc3439ff --- /dev/null +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -0,0 +1,111 @@ +///A single machine that produces a single chem. Can be placed in unison with others through plumbing to create chemical factories +/obj/machinery/plumbing/synthesizer + name = "chemical synthesizer" + desc = "Produces a single chemical at a given volume. Must be plumbed. Most effective when working in unison with other chemical synthesizers, heaters and filters." + + icon_state = "synthesizer" + icon = 'icons/obj/plumbing/plumbers.dmi' + rcd_cost = 25 + rcd_delay = 15 + + ///Amount we produce for every process. Ideally keep under 5 since thats currently the standard duct capacity + var/amount = 1 + ///The maximum we can produce for every process + buffer = 5 + ///I track them here because I have no idea how I'd make tgui loop like that + var/static/list/possible_amounts = list(0,1,2,3,4,5) + ///The reagent we are producing. We are a typepath, but are also typecast because there's several occations where we need to use initial. + var/datum/reagent/reagent_id = null + ///straight up copied from chem dispenser. Being a subtype would be extremely tedious and making it global would restrict potential subtypes using different dispensable_reagents + var/list/dispensable_reagents = list( + /datum/reagent/aluminium, + /datum/reagent/bromine, + /datum/reagent/carbon, + /datum/reagent/chlorine, + /datum/reagent/copper, + /datum/reagent/consumable/ethanol, + /datum/reagent/fluorine, + /datum/reagent/hydrogen, + /datum/reagent/iodine, + /datum/reagent/iron, + /datum/reagent/lithium, + /datum/reagent/mercury, + /datum/reagent/nitrogen, + /datum/reagent/oxygen, + /datum/reagent/phosphorus, + /datum/reagent/potassium, + /datum/reagent/radium, + /datum/reagent/silicon, + /datum/reagent/silver, + /datum/reagent/sodium, + /datum/reagent/stable_plasma, + /datum/reagent/consumable/sugar, + /datum/reagent/sulfur, + /datum/reagent/toxin/acid, + /datum/reagent/water, + /datum/reagent/fuel, + ) + +/obj/machinery/plumbing/synthesizer/Initialize(mapload, bolt) + . = ..() + AddComponent(/datum/component/plumbing/simple_supply, bolt) + +/obj/machinery/plumbing/synthesizer/process() + if(stat & NOPOWER || !reagent_id || !amount) + return + if(reagents.total_volume >= amount) //otherwise we get leftovers, and we need this to be precise + return + reagents.add_reagent(reagent_id, amount) + +/obj/machinery/plumbing/synthesizer/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemSynthesizer", name) + ui.open() + +/obj/machinery/plumbing/synthesizer/ui_data(mob/user) + var/list/data = list() + + var/is_hallucinating = user.hallucinating() + var/list/chemicals = list() + + for(var/A in dispensable_reagents) + var/datum/reagent/R = GLOB.chemical_reagents_list[A] + if(R) + var/chemname = R.name + if(is_hallucinating && prob(5)) + chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" + chemicals.Add(list(list("title" = chemname, "id" = ckey(R.name)))) + data["chemicals"] = chemicals + data["amount"] = amount + data["possible_amounts"] = possible_amounts + + data["current_reagent"] = ckey(initial(reagent_id.name)) + return data + +/obj/machinery/plumbing/synthesizer/ui_act(action, params) + if(..()) + return + . = TRUE + switch(action) + if("amount") + var/new_amount = text2num(params["target"]) + if(new_amount in possible_amounts) + amount = new_amount + . = TRUE + if("select") + var/new_reagent = GLOB.name2reagent[params["reagent"]] + if(new_reagent in dispensable_reagents) + reagent_id = new_reagent + . = TRUE + update_icon() + reagents.clear_reagents() + +/obj/machinery/plumbing/synthesizer/update_overlays() + . = ..() + var/mutable_appearance/r_overlay = mutable_appearance(icon, "[icon_state]_overlay") + if(reagent_id) + r_overlay.color = initial(reagent_id.color) + else + r_overlay.color = "#FFFFFF" + . += r_overlay diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index a70e508476..2480288484 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1009,7 +1009,7 @@ . = UI_INTERACTIVE /obj/machinery/power/apc/ui_act(action, params) - if(..() || !can_use(usr, 1) || (locked && area.hasSiliconAccessInArea(usr, PRIVILEDGES_SILICON|PRIVILEDGES_DRONE) && !failure_timer && action != "toggle_nightshift") || (integration_cog && (is_servant_of_ratvar(usr)))) + if(..() || !can_use(usr, 1) || (locked && !area.hasSiliconAccessInArea(usr, PRIVILEDGES_SILICON|PRIVILEDGES_DRONE) && !failure_timer && action != "toggle_nightshift" && (!integration_cog || !(is_servant_of_ratvar(usr))))) return switch(action) if("lock") diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ee073dbfcd..8cddd5d02f 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -62,7 +62,8 @@ var/no_pin_required = FALSE //whether the gun can be fired without a pin var/obj/item/flashlight/gun_light - var/can_flashlight = 0 + var/can_flashlight = FALSE + var/gunlight_state = "flight" var/obj/item/kitchen/knife/bayonet var/mutable_appearance/knife_overlay var/can_bayonet = FALSE @@ -417,14 +418,7 @@ return to_chat(user, "You attach \the [K] to the front of \the [src].") bayonet = K - var/state = "bayonet" //Generic state. - if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state? - state = bayonet.icon_state - var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi' - knife_overlay = mutable_appearance(bayonet_icons, state) - knife_overlay.pixel_x = knife_x_offset - knife_overlay.pixel_y = knife_y_offset - add_overlay(knife_overlay, TRUE) + update_icon() else if(istype(I, /obj/item/screwdriver)) if(gun_light) var/obj/item/flashlight/seclite/S = gun_light @@ -439,8 +433,7 @@ var/obj/item/kitchen/knife/K = bayonet K.forceMove(get_turf(user)) bayonet = null - cut_overlay(knife_overlay, TRUE) - knife_overlay = null + update_icon() else return ..() @@ -468,22 +461,35 @@ set_light(gun_light.brightness_on, gun_light.flashlight_power, gun_light.light_color) else set_light(0) - cut_overlays(flashlight_overlay, TRUE) - var/state = "flight[gun_light.on? "_on":""]" //Generic state. + else + set_light(0) + update_icon() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/gun/update_overlays() + . = ..() + if(gun_light) + var/mutable_appearance/flashlight_overlay + var/state = "[gunlight_state][gun_light.on? "_on":""]" //Generic state. if(gun_light.icon_state in icon_states('icons/obj/guns/flashlights.dmi')) //Snowflake state? state = gun_light.icon_state flashlight_overlay = mutable_appearance('icons/obj/guns/flashlights.dmi', state) flashlight_overlay.pixel_x = flight_x_offset flashlight_overlay.pixel_y = flight_y_offset - add_overlay(flashlight_overlay, TRUE) - else - set_light(0) - cut_overlays(flashlight_overlay, TRUE) - flashlight_overlay = null - update_icon(TRUE) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + . += flashlight_overlay + + if(bayonet) + var/mutable_appearance/knife_overlay + var/state = "bayonet" //Generic state. + if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state? + state = bayonet.icon_state + var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi' + knife_overlay = mutable_appearance(bayonet_icons, state) + knife_overlay.pixel_x = knife_x_offset + knife_overlay.pixel_y = knife_y_offset + . += knife_overlay /obj/item/gun/item_action_slot_check(slot, mob/user, datum/action/A) if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != SLOT_HANDS) diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index b31fd2d1e0..9210e66f22 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -18,13 +18,15 @@ /obj/item/gun/ballistic/automatic/proto/unrestricted pin = /obj/item/firing_pin -/obj/item/gun/ballistic/automatic/update_icon() - ..() +/obj/item/gun/ballistic/automatic/update_overlays() + . = ..() if(automatic_burst_overlay) if(!select) - add_overlay("[initial(icon_state)]semi") + . += ("[initial(icon_state)]semi") if(select == 1) - add_overlay("[initial(icon_state)]burst") + . += "[initial(icon_state)]burst" + +/obj/item/gun/ballistic/automatic/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/attackby(obj/item/A, mob/user, params) @@ -115,8 +117,7 @@ . = ..() empty_alarm() -/obj/item/gun/ballistic/automatic/c20r/update_icon() - ..() +/obj/item/gun/ballistic/automatic/c20r/update_icon_state() icon_state = "c20r[magazine ? "-[CEILING(get_ammo(0)/4, 1)*4]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/wt550 @@ -141,9 +142,8 @@ . = ..() spread = 0 -/obj/item/gun/ballistic/automatic/wt550/update_icon() - ..() - icon_state = "wt550[magazine ? "-[CEILING(( (get_ammo(FALSE) / magazine.max_ammo) * 20) /4, 1)*4]" : "-0"]" //Sprites only support up to 20. +/obj/item/gun/ballistic/automatic/wt550/update_icon_state() + icon_state = "wt550[magazine ? "-[CEILING(((get_ammo(FALSE) / magazine.max_ammo) * 20) /4, 1)*4]" : "-0"]" //Sprites only support up to 20. /obj/item/gun/ballistic/automatic/mini_uzi name = "\improper Type U3 Uzi" @@ -160,6 +160,7 @@ mag_type = /obj/item/ammo_box/magazine/m556 fire_sound = 'sound/weapons/gunshot_smg.ogg' can_suppress = FALSE + automatic_burst_overlay = FALSE var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel burst_size = 3 burst_shot_delay = 2 @@ -191,18 +192,19 @@ underbarrel.attackby(A, user, params) else ..() -/obj/item/gun/ballistic/automatic/m90/update_icon() - ..() - cut_overlays() +/obj/item/gun/ballistic/automatic/m90/update_overlays() + . = ..() switch(select) if(0) - add_overlay("[initial(icon_state)]semi") + . += "[initial(icon_state)]semi" if(1) - add_overlay("[initial(icon_state)]burst") + . += "[initial(icon_state)]burst" if(2) - add_overlay("[initial(icon_state)]gren") + . += "[initial(icon_state)]gren" + +/obj/item/gun/ballistic/automatic/m90/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "" : "-e"]" - return + /obj/item/gun/ballistic/automatic/m90/burst_select() var/mob/living/carbon/human/user = usr switch(select) @@ -257,6 +259,7 @@ weapon_weight = WEAPON_MEDIUM mag_type = /obj/item/ammo_box/magazine/m12g fire_sound = 'sound/weapons/gunshot.ogg' + automatic_burst_overlay = FALSE can_suppress = FALSE burst_size = 1 pin = /obj/item/firing_pin/implant/pindicate @@ -269,10 +272,13 @@ . = ..() update_icon() -/obj/item/gun/ballistic/automatic/shotgun/bulldog/update_icon() - cut_overlays() +/obj/item/gun/ballistic/automatic/shotgun/bulldog/update_icon_state() + return + +/obj/item/gun/ballistic/automatic/shotgun/bulldog/update_overlays() + . = ..() if(magazine) - add_overlay("[magazine.icon_state]") + . += "[magazine.icon_state]" icon_state = "bulldog[chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/shotgun/bulldog/afterattack() @@ -298,6 +304,7 @@ burst_shot_delay = 1 spread = 7 pin = /obj/item/firing_pin/implant/pindicate + automatic_burst_overlay = FALSE /obj/item/gun/ballistic/automatic/l6_saw/unrestricted pin = /obj/item/firing_pin @@ -316,7 +323,7 @@ playsound(user, 'sound/weapons/sawclose.ogg', 60, 1) update_icon() -/obj/item/gun/ballistic/automatic/l6_saw/update_icon() +/obj/item/gun/ballistic/automatic/l6_saw/update_icon_state() icon_state = "l6[cover_open ? "open" : "closed"][magazine ? CEILING(get_ammo(0)/12.5, 1)*25 : "-empty"][suppressed ? "-suppressed" : ""]" item_state = "l6[cover_open ? "openmag" : "closedmag"]" @@ -369,9 +376,10 @@ zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you. zoom_out_amt = 13 slot_flags = ITEM_SLOT_BACK + automatic_burst_overlay = FALSE actions_types = list() -/obj/item/gun/ballistic/automatic/sniper_rifle/update_icon() +/obj/item/gun/ballistic/automatic/sniper_rifle/update_icon_state() if(magazine) icon_state = "sniper-mag" else @@ -397,9 +405,10 @@ can_suppress = TRUE w_class = WEIGHT_CLASS_HUGE slot_flags = ITEM_SLOT_BACK + automatic_burst_overlay = FALSE actions_types = list() -/obj/item/gun/ballistic/automatic/surplus/update_icon() +/obj/item/gun/ballistic/automatic/surplus/update_icon_state() if(magazine) icon_state = "surplus" else @@ -413,6 +422,7 @@ icon_state = "oldrifle" item_state = "arg" mag_type = /obj/item/ammo_box/magazine/recharge + automatic_burst_overlay = FALSE fire_delay = 2 can_suppress = FALSE burst_size = 1 @@ -420,7 +430,5 @@ fire_sound = 'sound/weapons/laser.ogg' casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/laser/update_icon() - ..() +/obj/item/gun/ballistic/automatic/laser/update_icon_state() icon_state = "oldrifle[magazine ? "-[CEILING(get_ammo(0)/4, 1)*4]" : ""]" - return diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 004f78235a..9e03207888 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -42,8 +42,7 @@ actions_types = list() casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/gyropistol/update_icon() - ..() +/obj/item/gun/ballistic/automatic/gyropistol/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]" /obj/item/gun/ballistic/automatic/speargun @@ -54,6 +53,7 @@ w_class = WEIGHT_CLASS_BULKY force = 10 can_suppress = FALSE + automatic_burst_overlay = FALSE mag_type = /obj/item/ammo_box/magazine/internal/speargun fire_sound = 'sound/weapons/grenadelaunch.ogg' burst_size = 1 @@ -62,8 +62,9 @@ actions_types = list() casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/speargun/update_icon() - return +/obj/item/gun/ballistic/automatic/speargun/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_blocker) /obj/item/gun/ballistic/automatic/speargun/attack_self() return @@ -137,7 +138,7 @@ chamber_round() update_icon() -/obj/item/gun/ballistic/rocketlauncher/update_icon() +/obj/item/gun/ballistic/rocketlauncher/update_icon_state() icon_state = "[initial(icon_state)]-[chambered ? "1" : "0"]" /obj/item/gun/ballistic/rocketlauncher/suicide_act(mob/living/user) diff --git a/code/modules/projectiles/guns/ballistic/magweapon.dm b/code/modules/projectiles/guns/ballistic/magweapon.dm index 74b8b210a7..4e27a73300 100644 --- a/code/modules/projectiles/guns/ballistic/magweapon.dm +++ b/code/modules/projectiles/guns/ballistic/magweapon.dm @@ -75,8 +75,7 @@ recoil = 2 weapon_weight = WEAPON_HEAVY -/obj/item/gun/ballistic/automatic/magrifle/hyperburst/update_icon() - ..() +/obj/item/gun/ballistic/automatic/magrifle/hyperburst/update_icon_state() icon_state = "hyperburst[magazine ? "-[get_ammo()]" : ""][chambered ? "" : "-e"]" ///magpistol/// @@ -92,12 +91,14 @@ fire_delay = 2 inaccuracy_modifier = 0.25 cell_type = /obj/item/stock_parts/cell/magnetic/pistol + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/magrifle/pistol/update_icon() - ..() - cut_overlays() +/obj/item/gun/ballistic/automatic/magrifle/pistol/update_overlays() + . = ..() if(magazine) - add_overlay("magpistol-magazine") + . += "magpistol-magazine" + +/obj/item/gun/ballistic/automatic/magrifle/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/magrifle/pistol/nopin diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index cdaadb5c3b..e775fdc05a 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -8,12 +8,12 @@ burst_size = 1 fire_delay = 0 actions_types = list() + automatic_burst_overlay = FALSE /obj/item/gun/ballistic/automatic/pistol/no_mag spawnwithmagazine = FALSE -/obj/item/gun/ballistic/automatic/pistol/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload) @@ -28,6 +28,7 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "cde" can_unsuppress = TRUE + automatic_burst_overlay = FALSE obj_flags = UNIQUE_RENAME unique_reskin = list("Default" = "cde", "N-99" = "n99", @@ -38,20 +39,18 @@ "PX4 Storm" = "px4" ) -/obj/item/gun/ballistic/automatic/pistol/modular/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/modular/update_icon_state() if(current_skin) icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" + +/obj/item/gun/ballistic/automatic/pistol/modular/update_overlays() + . = ..() if(magazine && suppressed) - cut_overlays() - add_overlay("[unique_reskin[current_skin]]-magazine-sup") //Yes, this means the default iconstate can't have a magazine overlay + . += "[unique_reskin[current_skin]]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay else if (magazine) - cut_overlays() - add_overlay("[unique_reskin[current_skin]]-magazine") - else - cut_overlays() + . += "[unique_reskin[current_skin]]-magazine" /obj/item/gun/ballistic/automatic/pistol/m1911 name = "\improper M1911" @@ -77,14 +76,14 @@ force = 14 mag_type = /obj/item/ammo_box/magazine/m50 can_suppress = FALSE + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/pistol/deagle/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/deagle/update_overlays() + . = ..() if(magazine) - cut_overlays() - add_overlay("deagle_magazine") - else - cut_overlays() + . += "deagle_magazine" + +/obj/item/gun/ballistic/automatic/pistol/deagle/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/pistol/deagle/gold @@ -142,14 +141,14 @@ actions_types = list() fire_sound = 'sound/weapons/blastcannon.ogg' spread = 20 //damn thing has no rifling. + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/pistol/antitank/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/antitank/update_overlays() + . = ..() if(magazine) - cut_overlays() - add_overlay("atp-mag") - else - cut_overlays() + . += "atp-mag" + +/obj/item/gun/ballistic/automatic/pistol/antitank/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index a5ed45dd48..6f1fb96af5 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -348,10 +348,10 @@ else to_chat(user, "You need at least ten lengths of cable if you want to make a sling!") -/obj/item/gun/ballistic/revolver/doublebarrel/improvised/update_icon() - ..() +/obj/item/gun/ballistic/revolver/doublebarrel/improvised/update_overlays() + . = ..() if(slung) - icon_state += "sling" + . += "[icon_state]sling" /obj/item/gun/ballistic/revolver/doublebarrel/improvised/sawoff(mob/user) . = ..() diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 873b129c8f..ecf6e538b8 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -164,10 +164,10 @@ else to_chat(user, "You need at least ten lengths of cable if you want to make a sling!") -/obj/item/gun/ballistic/shotgun/boltaction/improvised/update_icon() - ..() +/obj/item/gun/ballistic/shotgun/boltaction/improvised/update_overlays() + . = ..() if(slung) - icon_state += "sling" + . += "[icon_state]sling" /obj/item/gun/ballistic/shotgun/boltaction/enchanted name = "enchanted bolt action rifle" @@ -272,7 +272,7 @@ spread = 2 update_icon() -/obj/item/gun/ballistic/shotgun/automatic/combat/compact/update_icon() +/obj/item/gun/ballistic/shotgun/automatic/combat/compact/update_icon_state() icon_state = "[current_skin ? unique_reskin[current_skin] : "cshotgun"][stock ? "" : "c"]" //Dual Feed Shotgun diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 1f66cfdf8a..e7f26670d4 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -27,9 +27,9 @@ burst_size = 1 fire_delay = 0 actions_types = list() + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/toy/pistol/update_icon() - ..() +/obj/item/gun/ballistic/automatic/toy/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/toy/pistol/riot diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index c2b821dfcf..17dcfa96e6 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -29,7 +29,6 @@ var/charge_sections = 4 ammo_x_offset = 2 var/shaded_charge = FALSE //if this gun uses a stateful charge bar for more detail - var/old_ratio = 0 // stores the gun's previous ammo "ratio" to see if it needs an updated icon var/selfcharge = EGUN_NO_SELFCHARGE // EGUN_SELFCHARGE if true, EGUN_SELFCHARGE_BORG drains the cyborg's cell to recharge its own var/charge_tick = 0 var/charge_delay = 4 @@ -64,10 +63,20 @@ START_PROCESSING(SSobj, src) update_icon() +/obj/item/gun/energy/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + /obj/item/gun/energy/Destroy() STOP_PROCESSING(SSobj, src) return ..() +/obj/item/gun/energy/handle_atom_del(atom/A) + if(A == cell) + cell = null + update_icon() + return ..() + /obj/item/gun/energy/examine(mob/user) . = ..() if(!right_click_overridden) @@ -226,46 +235,47 @@ #undef DECREMENT_OR_WRAP #undef IS_VALID_INDEX -/obj/item/gun/energy/update_icon(force_update) - if(QDELETED(src)) +/obj/item/gun/energy/update_icon_state() + if(initial(item_state)) return ..() + var/ratio = get_charge_ratio() + var/new_item_state = "" + new_item_state = initial(icon_state) + if(modifystate) + var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] + new_item_state += "[shot.select_name]" + new_item_state += "[ratio]" + item_state = new_item_state + +/obj/item/gun/energy/update_overlays() + . = ..() + if(QDELETED(src)) + return if(!automatic_charge_overlays) return - var/ratio = can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 - // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if it's power cell is removed. - // TG issues #5361 & #47908 - if(ratio == old_ratio && !force_update) - return - old_ratio = ratio - cut_overlays() - var/iconState = "[icon_state]_charge" - var/itemState = null - if(!initial(item_state)) - itemState = icon_state + var/overlay_icon_state = "[icon_state]_charge" + var/ratio = get_charge_ratio() if (modifystate) var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] - add_overlay("[icon_state]_[shot.select_name]") - iconState += "_[shot.select_name]" - if(itemState) - itemState += "[shot.select_name]" + . += "[icon_state]_[shot.select_name]" + overlay_icon_state += "_[shot.select_name]" if(ratio == 0) - add_overlay("[icon_state]_empty") + . += "[icon_state]_empty" else if(!shaded_charge) - var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState) + var/mutable_appearance/charge_overlay = mutable_appearance(icon, overlay_icon_state) for(var/i = ratio, i >= 1, i--) charge_overlay.pixel_x = ammo_x_offset * (i - 1) charge_overlay.pixel_y = ammo_y_offset * (i - 1) - add_overlay(charge_overlay) + . += charge_overlay else - add_overlay("[icon_state]_charge[ratio]") - if(itemState) - itemState += "[ratio]" - item_state = itemState - if(ismob(loc)) //forces inhands to update - var/mob/M = loc - M.update_inv_hands() + . += "[icon_state]_charge[ratio]" + +///Used by update_icon_state() and update_overlays() +/obj/item/gun/energy/proc/get_charge_ratio() + return can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 + // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if its power cell is removed. /obj/item/gun/energy/suicide_act(mob/living/user) if (istype(user) && can_shoot() && can_trigger_gun(user) && user.get_bodypart(BODY_ZONE_HEAD)) diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index 80bb269b21..04eff5afa9 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -207,12 +207,11 @@ to_chat(user,"You switch [src] setting to [setting] mode.") update_icon() -/obj/item/gun/energy/dueling/update_icon(force_update) +/obj/item/gun/energy/dueling/update_overlays(force_update) . = ..() if(setting_overlay) - cut_overlay(setting_overlay) setting_overlay.icon_state = setting_iconstate() - add_overlay(setting_overlay) + . += setting_overlay /obj/item/gun/energy/dueling/Destroy() if(duel) @@ -363,8 +362,7 @@ STR.max_items = 2 STR.can_hold = typecacheof(/obj/item/gun/energy/dueling) -/obj/item/storage/lockbox/dueling/update_icon() - cut_overlays() +/obj/item/storage/lockbox/dueling/update_icon_state() var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(locked) icon_state = "medalbox+l" diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 1b835d35a4..2c9794f391 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -19,17 +19,13 @@ cell_type = /obj/item/stock_parts/cell{charge = 600; maxcharge = 600} ammo_x_offset = 2 charge_sections = 3 + gunlight_state = "mini-light" can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update /obj/item/gun/energy/e_gun/mini/Initialize() gun_light = new /obj/item/flashlight/seclite(src) return ..() -/obj/item/gun/energy/e_gun/mini/update_icon() - ..() - if(gun_light && gun_light.on) - add_overlay("mini-light") - /obj/item/gun/energy/e_gun/stun name = "tactical energy gun" desc = "Military issue energy gun, is able to fire stun rounds." @@ -138,15 +134,15 @@ return fail_chance = min(fail_chance + round(15/severity), 100) -/obj/item/gun/energy/e_gun/nuclear/update_icon() - ..() +/obj/item/gun/energy/e_gun/nuclear/update_overlays() + . = ..() if(crit_fail) - add_overlay("[icon_state]_fail_3") + . += "[icon_state]_fail_3" else switch(fail_tick) if(0) - add_overlay("[icon_state]_fail_0") + . += "[icon_state]_fail_0" if(1 to 150) - add_overlay("[icon_state]_fail_1") + . += "[icon_state]_fail_1" if(151 to INFINITY) - add_overlay("[icon_state]_fail_2") + . += "[icon_state]_fail_2" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 0c723199a1..c1f47ccd1a 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -46,13 +46,6 @@ range = 4 log_override = TRUE -/obj/item/gun/energy/kinetic_accelerator/premiumka/update_icon() - ..() - if(!can_shoot()) - add_overlay("[icon_state]_empty") - else - cut_overlays() - /obj/item/gun/energy/kinetic_accelerator/getinaccuracy(mob/living/user, bonus_spread, stamloss) var/old_fire_delay = fire_delay //It's pretty irrelevant tbh but whatever. fire_delay = overheat_time @@ -186,12 +179,10 @@ update_icon() overheat = FALSE -/obj/item/gun/energy/kinetic_accelerator/update_icon() - ..() +/obj/item/gun/energy/kinetic_accelerator/update_overlays() + . = ..() if(!can_shoot()) - add_overlay("[icon_state]_empty") - else - cut_overlays() + . += "[icon_state]_empty" //Casing /obj/item/ammo_casing/energy/kinetic diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 20e847326e..19ca42022d 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -34,11 +34,11 @@ pin = null ammo_x_offset = 1 -/obj/item/gun/energy/decloner/update_icon() +/obj/item/gun/energy/decloner/update_overlays() ..() var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] if(!QDELETED(cell) && (cell.charge > shot.e_cost)) - add_overlay("decloner_spin") + . += "decloner_spin" /obj/item/gun/energy/floragun name = "floral somatoray" @@ -134,9 +134,10 @@ tool_behaviour = TOOL_WELDER toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders -/obj/item/gun/energy/plasmacutter/Initialize() +/obj/item/gun/energy/plasmacutter/ComponentInitialize() . = ..() AddComponent(/datum/component/butchering, 25, 105, 0, 'sound/weapons/plasma_cutter.ogg') + AddElement(/datum/element/update_icon_blocker) /obj/item/gun/energy/plasmacutter/examine(mob/user) . = ..() @@ -166,9 +167,6 @@ /obj/item/gun/energy/plasmacutter/use(amount) return cell.use(amount * 100) -/obj/item/gun/energy/plasmacutter/update_icon() - return - /obj/item/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" @@ -183,11 +181,12 @@ icon_state = "wormhole_projector" pin = null inaccuracy_modifier = 0.25 + automatic_charge_overlays = FALSE var/obj/effect/portal/p_blue var/obj/effect/portal/p_orange var/atmos_link = FALSE -/obj/item/gun/energy/wormhole_projector/update_icon() +/obj/item/gun/energy/wormhole_projector/update_icon_state() icon_state = "[initial(icon_state)][current_firemode_index]" item_state = icon_state @@ -256,8 +255,9 @@ can_charge = 0 use_cyborg_cell = 1 -/obj/item/gun/energy/printer/update_icon() - return +/obj/item/gun/energy/printer/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_blocker) /obj/item/gun/energy/printer/emp_act() return @@ -321,14 +321,14 @@ inaccuracy_modifier = 0.25 cell_type = /obj/item/stock_parts/cell/super ammo_type = list(/obj/item/ammo_casing/energy/emitter) + automatic_charge_overlays = FALSE -/obj/item/gun/energy/emitter/update_icon() - ..() +/obj/item/gun/energy/emitter/update_icon_state() var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] if(!QDELETED(cell) && (cell.charge > shot.e_cost)) - add_overlay("emitter_carbine_empty") + icon_state = "emitter_carbine_empty" else - add_overlay("emitter_carbine") + icon_state = "emitter_carbine" //the pickle ray /obj/item/gun/energy/pickle_gun diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index fd09aa7f9d..5e250d44e2 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -35,6 +35,7 @@ slowdown = 1 item_flags = NO_MAT_REDEMPTION | SLOWS_WHILE_IN_HAND | NEEDS_PERMIT pin = null + automatic_charge_overlays = FALSE var/aiming = FALSE var/aiming_time = 14 var/aiming_time_fire_threshold = 5 @@ -152,13 +153,13 @@ current_zoom_x = 0 current_zoom_y = 0 -/obj/item/gun/energy/beam_rifle/update_icon() - cut_overlays() +/obj/item/gun/energy/beam_rifle/update_overlays() + . = ..() var/obj/item/ammo_casing/energy/primary_ammo = ammo_type[1] if(!QDELETED(cell) && (cell.charge > primary_ammo.e_cost)) - add_overlay(charged_overlay) + . += charged_overlay else - add_overlay(drained_overlay) + . += drained_overlay /obj/item/gun/energy/beam_rifle/attack_self(mob/user) if(!structure_piercing) diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index 1c8d519ba8..60b7565333 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -41,18 +41,16 @@ user.put_in_hands(bomb) user.visible_message("[user] detaches [bomb] from [src].") bomb = null + name = initial(name) + desc = initial(desc) update_icon() return ..() -/obj/item/gun/blastcannon/update_icon() +/obj/item/gun/blastcannon/update_icon_state() if(bomb) icon_state = icon_state_loaded - name = "blast cannon" - desc = "A makeshift device used to concentrate a bomb's blast energy to a narrow wave." else icon_state = initial(icon_state) - name = initial(name) - desc = initial(desc) /obj/item/gun/blastcannon/attackby(obj/O, mob/user) if(istype(O, /obj/item/transfer_valve)) @@ -65,6 +63,8 @@ return FALSE user.visible_message("[user] attaches [T] to [src]!") bomb = T + name = "blast cannon" + desc = "A makeshift device used to concentrate a bomb's blast energy to a narrow wave." update_icon() return TRUE return ..() diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index c2662a8342..c489edf88e 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -1165,3 +1165,9 @@ random_reagents += R var/picked_reagent = pick(random_reagents) return picked_reagent + +/proc/get_chem_id(chem_name) + for(var/X in GLOB.chemical_reagents_list) + var/datum/reagent/R = GLOB.chemical_reagents_list[X] + if(ckey(chem_name) == ckey(lowertext(R.name))) + return X diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 207325e1b3..32ac7cecba 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -1,5 +1,3 @@ -#define PILL_STYLE_COUNT 22 //Update this if you add more pill icons or you die -#define RANDOM_PILL_STYLE 22 //Dont change this one though /obj/machinery/chem_master name = "ChemMaster 3000" diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm index a539897c9d..d22523c4b8 100644 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm @@ -36,6 +36,14 @@ for(var/obj/item/stock_parts/matter_bin/B in component_parts) reagents.maximum_volume += REAGENTS_BASE_VOLUME * B.rating +/obj/machinery/smoke_machine/ComponentInitialize() + . = ..() + AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated)) + AddComponent(/datum/component/plumbing/simple_demand) //this SURELY CANT' LEAD TO BAD THINGS HAPPENING. + +/obj/machinery/smoke_machine/proc/can_be_rotated(mob/user, rotation_type) + return !anchored + /obj/machinery/smoke_machine/update_icon_state() if((!is_operational()) || (!on) || (reagents.total_volume == 0)) if (panel_open) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index a85ac8b085..672127cb11 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -8,6 +8,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) if (length(initial(R.name))) .[ckey(initial(R.name))] = t + //Various reagents //Toxin & acid reagents //Hydroponics stuff @@ -52,6 +53,14 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) var/metabolizing = FALSE var/chemical_flags // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME var/value = REAGENT_VALUE_NONE //How much does it sell for in cargo? + var/datum/material/material //are we made of material? + +/datum/reagent/New() + . = ..() + + if(material) + material = SSmaterials.GetMaterialRef(material) + /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references . = ..() @@ -220,4 +229,3 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) bloodsuckerdatum.handle_eat_human_food(disgust, blood_puke, force) if(blood_change) bloodsuckerdatum.AddBloodVolume(blood_change) - diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 8bb34c0a82..37010cbbb5 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -515,12 +515,13 @@ overdose_threshold = 30 pH = 2 value = REAGENT_VALUE_UNCOMMON + var/healing = 0.5 /datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M) - M.adjustToxLoss(-0.5*REM, 0) - M.adjustOxyLoss(-0.5*REM, 0) - M.adjustBruteLoss(-0.5*REM, 0) - M.adjustFireLoss(-0.5*REM, 0) + M.adjustToxLoss(-healing*REM, 0) + M.adjustOxyLoss(-healing*REM, 0) + M.adjustBruteLoss(-healing*REM, 0) + M.adjustFireLoss(-healing*REM, 0) ..() . = 1 @@ -532,6 +533,12 @@ ..() . = 1 +/datum/reagent/medicine/omnizine/protozine + name = "Protozine" + description = "A less environmentally friendly and somewhat weaker variant of omnizine." + color = "#d8c7b7" + healing = 0.2 + /datum/reagent/medicine/calomel name = "Calomel" description = "Quickly purges the body of all chemicals. Toxin damage is dealt if the patient is in good condition." diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 3433824282..5c01fd8cf6 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -313,6 +313,13 @@ metabolization_rate = 45 * REAGENTS_METABOLISM . = 1 +/datum/reagent/water/hollowwater + name = "Hollow Water" + description = "An ubiquitous chemical substance that is composed of hydrogen and oxygen, but it looks kinda hollow." + color = "#88878777" + taste_description = "emptyiness" + + /datum/reagent/water/holywater name = "Holy Water" description = "Water blessed by some deity." @@ -950,6 +957,7 @@ color = "#1C1300" // rgb: 30, 20, 0 taste_description = "sour chalk" pH = 5 + material = /datum/material/diamond /datum/reagent/carbon/reaction_turf(turf/T, reac_volume) if(!isspaceturf(T)) @@ -1072,6 +1080,7 @@ pH = 6 overdose_threshold = 30 color = "#c2391d" + material = /datum/material/iron /datum/reagent/iron/on_mob_life(mob/living/carbon/C) if((HAS_TRAIT(C, TRAIT_NOMARROW))) @@ -1103,6 +1112,7 @@ reagent_state = SOLID color = "#F7C430" // rgb: 247, 196, 48 taste_description = "expensive metal" + material = /datum/material/gold /datum/reagent/silver name = "Silver" @@ -1110,6 +1120,7 @@ reagent_state = SOLID color = "#D0D0D0" // rgb: 208, 208, 208 taste_description = "expensive yet reasonable metal" + material = /datum/material/silver /datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(M.has_bane(BANE_SILVER)) @@ -1123,6 +1134,7 @@ color = "#B8B8C0" // rgb: 184, 184, 192 taste_description = "the inside of a reactor" pH = 4 + material = /datum/material/uranium /datum/reagent/uranium/on_mob_life(mob/living/carbon/M) M.apply_effect(1/M.metabolism_efficiency,EFFECT_IRRADIATE,0) @@ -1144,6 +1156,7 @@ taste_description = "fizzling blue" pH = 12 value = REAGENT_VALUE_RARE + material = /datum/material/bluespace /datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -1182,6 +1195,7 @@ color = "#A8A8A8" // rgb: 168, 168, 168 taste_mult = 0 pH = 10 + material = /datum/material/glass /datum/reagent/fuel name = "Welding fuel" @@ -2206,6 +2220,66 @@ color = "#f7685e" metabolization_rate = REAGENTS_METABOLISM * 0.25 +/datum/reagent/wittel + name = "Wittel" + description = "An extremely rare metallic-white substance only found on demon-class planets." + color = "#FFFFFF" // rgb: 255, 255, 255 + taste_mult = 0 // oderless and tasteless + +/datum/reagent/metalgen + name = "Metalgen" + data = list("material"=null) + description = "A purple metal morphic liquid, said to impose it's metallic properties on whatever it touches." + color = "#b000aa" + taste_mult = 0 // oderless and tasteless + var/applied_material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + var/minumum_material_amount = 100 + +/datum/reagent/metalgen/reaction_obj(obj/O, volume) + metal_morph(O) + return + +/datum/reagent/metalgen/reaction_turf(turf/T, volume) + metal_morph(T) + return + +///turn an object into a special material +/datum/reagent/metalgen/proc/metal_morph(atom/A) + var/metal_ref = data["material"] + if(!metal_ref) + return + var/metal_amount = 0 + + for(var/B in A.custom_materials) //list with what they're made of + metal_amount += A.custom_materials[B] + + if(!metal_amount) + metal_amount = minumum_material_amount //some stuff doesn't have materials at all. To still give them properties, we give them a material. Basically doesnt exist + + var/list/metal_dat = list() + metal_dat[metal_ref] = metal_amount //if we pass the list directly, byond turns metal_ref into "metal_ref" kjewrg8fwcyvf + + A.material_flags = applied_material_flags + A.set_custom_materials(metal_dat) + +/datum/reagent/gravitum + name = "Gravitum" + description = "A rare kind of null fluid, capable of temporalily removing all weight of whatever it touches." //i dont even + color = "#050096" // rgb: 5, 0, 150 + taste_mult = 0 // oderless and tasteless + metabolization_rate = 0.1 * REAGENTS_METABOLISM //20 times as long, so it's actually viable to use + var/time_multiplier = 1 MINUTES //1 minute per unit of gravitum on objects. Seems overpowered, but the whole thing is very niche + +/datum/reagent/gravitum/reaction_obj(obj/O, volume) + O.AddElement(/datum/element/forced_gravity, 0) + + addtimer(CALLBACK(O, .proc/_RemoveElement, /datum/element/forced_gravity, 0), volume * time_multiplier) + +/datum/reagent/gravitum/on_mob_add(mob/living/L) + L.AddElement(/datum/element/forced_gravity, 0) //0 is the gravity, and in this case weightless + +/datum/reagent/gravitum/on_mob_end_metabolize(mob/living/L) + L.RemoveElement(/datum/element/forced_gravity, 0) //body bluids /datum/reagent/consumable/semen @@ -2334,6 +2408,7 @@ datum/reagent/eldritch color = "#E6E6DA" taste_mult = 0 + /datum/reagent/hairball name = "Hairball" description = "A bundle of keratinous bits and fibers, not easily digestible." diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 8dca028b4a..07934d9880 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -64,6 +64,7 @@ toxpwr = 3 pH = 4 value = REAGENT_VALUE_RARE //sheets are worth more + material = /datum/material/plasma /datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C) if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index bb9a951cac..9e0c78d2e6 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -219,6 +219,12 @@ results = list(/datum/reagent/medicine/strange_reagent = 3) required_reagents = list(/datum/reagent/medicine/omnizine = 1, /datum/reagent/water/holywater = 1, /datum/reagent/toxin/mutagen = 1) +/datum/chemical_reaction/strange_reagent/alt + name = "Strange Reagent" + id = /datum/reagent/medicine/strange_reagent + results = list(/datum/reagent/medicine/strange_reagent = 2) + required_reagents = list(/datum/reagent/medicine/omnizine/protozine = 1, /datum/reagent/water/holywater = 1, /datum/reagent/toxin/mutagen = 1) + /datum/chemical_reaction/mannitol name = "Mannitol" id = /datum/reagent/medicine/mannitol @@ -345,4 +351,20 @@ /datum/chemical_reaction/medmesh/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/stack/medical/mesh/advanced(location) \ No newline at end of file + new /obj/item/stack/medical/mesh/advanced(location) + +/datum/chemical_reaction/suture + required_reagents = list(/datum/reagent/cellulose = 2, /datum/reagent/medicine/styptic_powder = 2) + +/datum/chemical_reaction/suture/on_reaction(datum/reagents/holder, created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/stack/medical/suture/(location) + +/datum/chemical_reaction/mesh + required_reagents = list(/datum/reagent/cellulose = 2, /datum/reagent/medicine/silver_sulfadiazine = 2) + +/datum/chemical_reaction/mesh/on_reaction(datum/reagents/holder, created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/stack/medical/mesh/(location) diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 09b7eabbc1..92861a94ed 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -1,3 +1,34 @@ +/datum/chemical_reaction/metalgen + name = "metalgen" + id = /datum/reagent/metalgen + required_reagents = list(/datum/reagent/wittel = 1, /datum/reagent/bluespace = 1, /datum/reagent/toxin/mutagen = 1) + results = list(/datum/reagent/metalgen = 1) + +/datum/chemical_reaction/metalgen_imprint + name = "metalgen imprint" + id = /datum/reagent/metalgen + required_reagents = list(/datum/reagent/metalgen = 1, /datum/reagent/liquid_dark_matter = 1) + results = list(/datum/reagent/metalgen = 1) + +/datum/chemical_reaction/holywater + name = "Holy Water" + id = /datum/reagent/water/holywater + results = list(/datum/reagent/water/holywater = 1) + required_reagents = list(/datum/reagent/water/hollowwater = 1) + required_catalysts = list(/datum/reagent/water/holywater = 1) + +/datum/chemical_reaction/metalgen_imprint/on_reaction(datum/reagents/holder, created_volume) + var/datum/reagent/metalgen/MM = holder.get_reagent(/datum/reagent/metalgen) + for(var/datum/reagent/R in holder.reagent_list) + if(R.material && R.volume >= 40) + MM.data["material"] = R.material + holder.remove_reagent(R.type, 40) + +/datum/chemical_reaction/gravitum + name = "gravitum" + id = /datum/reagent/gravitum + required_reagents = list(/datum/reagent/wittel = 1, /datum/reagent/sorium = 10) + results = list(/datum/reagent/gravitum = 10) /datum/chemical_reaction/sterilizine name = "Sterilizine" @@ -711,7 +742,7 @@ /datum/chemical_reaction/slime_extractification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) new /obj/item/slime_extract/grey(location) - + // Liquid Carpets /datum/chemical_reaction/carpet diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 79edb37913..6541deda1c 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -24,7 +24,8 @@ /obj/structure/reagent_dispensers/Initialize() create_reagents(tank_volume, DRAINABLE | AMOUNT_VISIBLE) - reagents.add_reagent(reagent_id, tank_volume) + if(reagent_id) + reagents.add_reagent(reagent_id, tank_volume) . = ..() /obj/structure/reagent_dispensers/proc/boom() @@ -91,6 +92,38 @@ user.put_in_hands(S) paper_cups-- +/obj/structure/reagent_dispensers/plumbed + name = "stationairy water tank" + anchored = TRUE + icon_state = "water_stationairy" + desc = "A stationairy, plumbed, water tank." + +/obj/structure/reagent_dispensers/plumbed/wrench_act(mob/living/user, obj/item/I) + default_unfasten_wrench(user, I) + return TRUE + +/obj/structure/reagent_dispensers/plumbed/default_unfasten_wrench(mob/user, obj/item/I, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + user.visible_message("[user.name] [anchored ? "fasten" : "unfasten"] [src]", \ + "You [anchored ? "fasten" : "unfasten"] [src]") + var/datum/component/plumbing/CP = GetComponent(/datum/component/plumbing) + if(anchored) + CP.enable() + else + CP.disable() + +/obj/structure/reagent_dispensers/plumbed/ComponentInitialize() + AddComponent(/datum/component/plumbing/simple_supply) + +/obj/structure/reagent_dispensers/plumbed/storage + name = "stationairy storage tank" + icon_state = "tank_stationairy" + reagent_id = null //start empty + +/obj/structure/reagent_dispensers/plumbed/storage/ComponentInitialize() + AddComponent(/datum/component/plumbing/tank) + ////////////// //Fuel Tanks// ////////////// @@ -271,5 +304,3 @@ icon_state = "bluekeg" reagent_id = /datum/reagent/consumable/ethanol/neurotoxin tank_volume = 100 //2.5x less than the other kegs because it's harder to get - - diff --git a/code/modules/research/designs/machine_desings/machine_designs_medical.dm b/code/modules/research/designs/machine_desings/machine_designs_medical.dm index 329fb7bf6e..84a3ed10d5 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_medical.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_medical.dm @@ -105,3 +105,11 @@ build_path = /obj/item/circuitboard/machine/bloodbankgen departmental_flags = DEPARTMENTAL_FLAG_MEDICAL category = list ("Medical Machinery") + +/datum/design/board/medipen_refiller + name = "Machine Design (Medipen Refiller)" + desc = "The circuit board for a Medipen Refiller." + id = "medipen_refiller" + build_path = /obj/item/circuitboard/machine/medipen_refiller + category = list ("Medical Machinery") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL diff --git a/code/modules/research/designs/machine_desings/machine_designs_service.dm b/code/modules/research/designs/machine_desings/machine_designs_service.dm index 5cbff1c66a..af4f650793 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_service.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_service.dm @@ -81,6 +81,14 @@ category = list ("Hydroponics Machinery") departmental_flags = DEPARTMENTAL_FLAG_SERVICE +/datum/design/board/hydroponics/auto + name = "Machine Design (Automatic Hydroponics Tray Board)" + desc = "The circuit board for an automatic hydroponics tray. GIVE ME THE PLANT, CAPTAIN." + id = "autohydrotray" + build_path = /obj/machinery/hydroponics/constructable/automagic + category = list ("Hydroponics Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_MEDICAL + /datum/design/board/monkey_recycler name = "Machine Design (Monkey Recycler Board)" desc = "The circuit board for a monkey recycler." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index e1e55f3476..0a9fce2e67 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -961,3 +961,158 @@ build_path = /obj/item/bodypart/r_arm/robot/surplus_upgraded category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + + +/datum/design/acclimator + name = "Plumbing Acclimator" + desc = "A heating and cooling device for pipes!" + id = "acclimator" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) + construction_time = 15 + build_path = /obj/machinery/plumbing/acclimator + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/disposer + name = "Plumbing Disposer" + desc = "Using the power of Science, dissolves reagents into nothing (almost)." + id = "disposer" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 500, /datum/material/glass = 100) + construction_time = 15 + build_path = /obj/machinery/plumbing/disposer + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_filter + name = "Plumbing Filter" + desc = "Filters out chemicals by their NTDB ID." + id = "plumb_filter" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) + construction_time = 15 + build_path = /obj/machinery/plumbing/filter + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_synth + name = "Plumbing Synthesizer" + desc = "Using standard mass-energy dynamic autoconverters, generates reagents from power and puts them in a pipe." + id = "plumb_synth" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/plastic = 1000) + construction_time = 15 + build_path = /obj/machinery/plumbing/synthesizer + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_grinder + name = "Plumbing-Linked Autogrinder" + desc = "Automatically extracts reagents from an item by grinding it. Think of the possibilities! Note: does not grind people." + id = "plumb_grinder" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500) + construction_time = 15 + build_path = /obj/machinery/plumbing/grinder_chemical + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/reaction_chamber + name = "Plumbing Reaction Chamber" + desc = "You can set a list of allowed reagents and amounts. Once the chamber has these reagents, will let the products through." + id = "reaction_chamber" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) + construction_time = 15 + build_path = /obj/machinery/plumbing/reaction_chamber + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/duct_print + name = "Plumbing Ducts" + desc = "Ducts for plumbing! Now lathed for efficiency." + id = "duct_print" + build_type = PROTOLATHE + materials = list(/datum/material/plastic = 400) + construction_time = 1 + build_path = /obj/item/stack/ducts + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_splitter + name = "Plumbing Chemical Splitter" + desc = "A splitter. Has 2 outputs. Can be configured to allow a certain amount through each side." + id = "plumb_splitter" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 750, /datum/material/glass = 250) + construction_time = 15 + build_path = /obj/machinery/plumbing/splitter + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/pill_press + name = "Plumbing Automatic Pill Former" + desc = "Automatically forms pills to the required parameters with piped reagents! A good replacement for those lazy, useless chemists." + id = "pill_press" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) + construction_time = 15 + build_path = /obj/machinery/plumbing/pill_press + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_pump + name = "Liquid Extraction Pump" + desc = "Use it for extracting liquids from lavaland's geysers!" + id = "plumb_pump" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) + construction_time = 15 + build_path = /obj/machinery/plumbing/liquid_pump + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_in + name = "Plumbing Input Device" + desc = "A big piped funnel for putting stuff in the pipe network." + id = "plumb_in" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 400, /datum/material/glass = 400) + construction_time = 15 + build_path = /obj/machinery/plumbing/input + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_out + name = "Plumbing Output Device" + desc = "A big piped funnel for taking stuff out of the pipe network." + id = "plumb_out" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 400, /datum/material/glass = 400) + construction_time = 15 + build_path = /obj/machinery/plumbing/output + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_tank + name = "Plumbed Storage Tank" + desc = "A tank for storing plumbed reagents." + id = "plumb_tank" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 10000, /datum/material/glass = 10000, /datum/material/plastic = 4000) + construction_time = 15 + build_path = /obj/machinery/plumbing/tank + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/plumb_rcd + name = "Plumbed Autoconstruction Device" + desc = "A RCD for plumbing machines! Cannot make ducts." + id = "plumb_rcd" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 20000, /datum/material/glass = 10000, /datum/material/plastic = 20000, /datum/material/titanium = 2000, /datum/material/diamond = 800, /datum/material/gold = 2000, /datum/material/silver = 2000) + construction_time = 150 + build_path = /obj/item/construction/plumbing + category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/techweb/nodes/medical_nodes.dm b/code/modules/research/techweb/nodes/medical_nodes.dm index 3a9e654b81..150e420c09 100644 --- a/code/modules/research/techweb/nodes/medical_nodes.dm +++ b/code/modules/research/techweb/nodes/medical_nodes.dm @@ -24,6 +24,23 @@ design_ids = list("defib_decay", "defib_shock", "defib_heal", "defib_speed") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) +/datum/techweb_node/plumbing + id = "plumbing" + display_name = "Reagent Plumbing Technology" + description = "Plastic tubes, and machinery used for manipulating things in them." + prereq_ids = list("base") + design_ids = list("acclimator", "disposer", "plumb_filter", "plumb_synth", "plumb_grinder", "reaction_chamber", "duct_print", "plumb_splitter", "pill_press", "plumb_pump", "plumb_in", "plumb_out", "plumb_tank", "medipen_refiller") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + + +/datum/techweb_node/advplumbing + id = "advplumbing" + display_name = "Advanced Plumbing Technology" + description = "Plumbing RCD." + prereq_ids = list("plumbing", "adv_engi") + design_ids = list("plumb_rcd", "autohydrotray") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + //////////////////////Cybernetics///////////////////// /datum/techweb_node/surplus_limbs diff --git a/code/modules/ruins/spaceruin_code/clericsden.dm b/code/modules/ruins/spaceruin_code/clericsden.dm index 7d1fda6740..3fe4cad794 100644 --- a/code/modules/ruins/spaceruin_code/clericsden.dm +++ b/code/modules/ruins/spaceruin_code/clericsden.dm @@ -21,7 +21,6 @@ desc = "A weaker construct meant to scour ruins for objects of Nar'Sie's affection. Those barbed claws are no joke." icon_state = "proteon" icon_living = "proteon" - threat = 0.4 maxHealth = 35 health = 35 melee_damage_lower = 8 diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index 34de3b490c..795d35adc4 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -46,7 +46,8 @@ /obj/item/wrench/medical = 1, /obj/item/storage/belt/medolier/full = 2, /obj/item/gun/syringe/dart = 2, - /obj/item/storage/briefcase/medical = 2) + /obj/item/storage/briefcase/medical = 2, + /obj/item/plunger/reinforced = 2) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF diff --git a/html/changelog.html b/html/changelog.html index 5a0e608cd6..fd590f4673 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,66 @@ -->