diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index f4c5838eb2..a085be5eb3 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -5390,7 +5390,9 @@ /turf/open/floor/plasteel, /area/security/brig) "ajX" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, /turf/open/floor/plating, /area/engineering/atmos) "ajY" = ( @@ -5936,6 +5938,9 @@ /obj/item/chair, /obj/item/stack/ore/silver, /obj/item/stack/ore/iron, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plating, /area/engineering/atmos) "akN" = ( @@ -5949,6 +5954,8 @@ dir = 4 }, /obj/structure/lattice, +/obj/item/broken_bottle, +/obj/item/pickaxe, /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation) "akP" = ( @@ -6357,6 +6364,9 @@ network = list("ss13","engine") }, /mob/living/simple_animal/parrot/Poly, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/command/heads_quarters/ce) "alF" = ( @@ -7263,11 +7273,17 @@ /turf/open/floor/plating, /area/cargo/miningdock) "anu" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, -/turf/closed/wall/r_wall, -/area/command/heads_quarters/ce) +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/plasteel/dark/corner{ + dir = 4 + }, +/area/engineering/atmos) "anv" = ( /obj/effect/turf_decal/stripes/end{ dir = 8 @@ -7276,9 +7292,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/command/heads_quarters/ce) "anw" = ( @@ -9657,7 +9671,7 @@ /obj/structure/sign/poster/random{ pixel_y = 32 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engineering/atmos) "arB" = ( /obj/effect/turf_decal/tile/red{ @@ -10245,10 +10259,10 @@ /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ - dir = 4 + dir = 1 }, /turf/open/floor/plasteel/dark/corner{ - dir = 1 + dir = 4 }, /area/engineering/atmos) "asx" = ( @@ -10314,10 +10328,10 @@ /obj/machinery/meter, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ - dir = 4 + dir = 1 }, /turf/open/floor/plasteel/dark/corner{ - dir = 1 + dir = 4 }, /area/engineering/atmos) "asD" = ( @@ -10335,20 +10349,20 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ - dir = 4 + dir = 1 }, /turf/open/floor/plasteel/dark/corner{ - dir = 1 + dir = 4 }, /area/engineering/atmos) "asG" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold4w/supply/visible, /obj/effect/turf_decal/tile/yellow{ - dir = 4 + dir = 1 }, /turf/open/floor/plasteel/dark/corner{ - dir = 1 + dir = 4 }, /area/engineering/atmos) "asH" = ( @@ -10949,10 +10963,10 @@ /obj/item/clothing/suit/hazardvest, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "atJ" = ( /turf/open/floor/wood, @@ -11479,10 +11493,10 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "auC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -12020,10 +12034,10 @@ /obj/structure/closet/secure_closet/atmospherics, /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "avH" = ( /obj/structure/table/wood, @@ -12577,10 +12591,10 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/wardrobe/atmos_wardrobe, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "awL" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ @@ -12838,10 +12852,9 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow{ +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "axq" = ( /obj/machinery/light{ @@ -12856,9 +12869,11 @@ /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "axr" = ( /obj/structure/cable/white{ @@ -12868,9 +12883,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "axs" = ( /obj/structure/reagent_dispensers/fueltank, @@ -12882,9 +12899,12 @@ /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, /area/engineering/atmos) "axt" = ( /obj/effect/spawner/structure/window/reinforced, @@ -13850,10 +13870,10 @@ /obj/machinery/meter, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow{ - dir = 4 + dir = 1 }, /turf/open/floor/plasteel/dark/corner{ - dir = 1 + dir = 4 }, /area/engineering/atmos) "azn" = ( @@ -13888,7 +13908,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/visible{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /turf/open/floor/plasteel, @@ -17487,7 +17507,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/side, /area/engineering/main) "aGi" = ( /obj/structure/sign/warning/securearea, @@ -17519,7 +17539,7 @@ name = "Power Monitoring"; req_access_txt = "32" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/side, /area/engineering/main) "aGl" = ( /obj/machinery/door/firedoor, @@ -17563,7 +17583,7 @@ name = "Engineering Access"; req_access_txt = "10" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/side, /area/engineering/main) "aGo" = ( /obj/structure/sign/warning/fire, @@ -18064,15 +18084,6 @@ }, /turf/open/floor/plating, /area/medical/genetics) -"aHg" = ( -/obj/machinery/camera{ - c_tag = "Gravity Generator Room"; - dir = 6; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/bot_white/left, -/turf/open/floor/plasteel/dark, -/area/engineering/gravity_generator) "aHh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, @@ -18632,19 +18643,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"aIb" = ( -/obj/structure/sign/warning/radiation{ - pixel_x = -32 - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/engineering/gravity_generator) "aIc" = ( /turf/open/floor/circuit/green, /area/engineering/gravity_generator) "aId" = ( -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/engineering/gravity_generator) "aIe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -19218,16 +19222,13 @@ }, /area/medical/genetics) "aJh" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/effect/turf_decal/bot_white/left, /turf/open/floor/plasteel/dark, /area/engineering/gravity_generator) "aJi" = ( /obj/machinery/gravity_generator/main/station, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/engineering/gravity_generator) "aJj" = ( /obj/effect/spawner/structure/window/reinforced, @@ -19898,10 +19899,6 @@ /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation) "aKp" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19911,7 +19908,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/engineering/gravity_generator) "aKr" = ( /obj/machinery/power/solar{ @@ -20008,7 +20005,9 @@ name = "Engineering Access"; req_access_txt = "10" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/side{ + dir = 4 + }, /area/engineering/gravity_generator) "aKy" = ( /obj/structure/cable/white{ @@ -20111,7 +20110,9 @@ name = "Engineering Access"; req_access_txt = "10" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/side{ + dir = 8 + }, /area/engineering/main) "aKI" = ( /obj/structure/cable/white{ @@ -20605,7 +20606,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/engineering/gravity_generator) "aLF" = ( /obj/structure/table/reinforced, @@ -21195,7 +21196,7 @@ name = "Telecommunications"; req_access_txt = "61" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/side, /area/tcommsat/server) "aMM" = ( /obj/effect/spawner/structure/window/reinforced, @@ -24675,16 +24676,6 @@ /area/science/lab) "aTI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, /turf/open/floor/plasteel, /area/science/lab) "aTJ" = ( @@ -29755,9 +29746,12 @@ network = list("ss13","engine") }, /obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/checker, /area/engineering/atmos) "bdw" = ( /obj/machinery/holopad, @@ -31935,7 +31929,6 @@ /obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ dir = 4 }, @@ -32241,21 +32234,17 @@ icon_state = "1-2" }, /obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "bhS" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 }, -/obj/structure/disposaloutlet{ +/turf/open/floor/plasteel/dark/corner{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/area/engineering/atmos) "bhX" = ( /obj/machinery/pool/filter{ pixel_y = 16 @@ -32972,7 +32961,7 @@ name = "Xenobiology Kill Room"; req_access_txt = "47" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark/telecomms, /area/science/xenobiology) "bjw" = ( /obj/machinery/atmospherics/pipe/manifold/general/hidden, @@ -33651,6 +33640,15 @@ dir = 8 }, /area/hallway/secondary/exit) +"bnS" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) "boD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -34568,6 +34566,9 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plating{ icon_state = "platingdmg1" }, @@ -34690,8 +34691,11 @@ /turf/open/floor/plasteel, /area/service/hydroponics) "cpn" = ( -/turf/closed/wall, -/area/space/station_ruins) +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/command/heads_quarters/ce) "csX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -34730,6 +34734,40 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"cCv" = ( +/obj/machinery/door/window/brigdoor{ + dir = 4; + name = "Creature Pen"; + req_access_txt = "47" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xeno5"; + name = "Creature Cell #5" + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/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/side{ + dir = 4 + }, +/area/science/xenobiology) "cGA" = ( /obj/machinery/pool/controller, /turf/open/floor/wood, @@ -34952,6 +34990,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"dZL" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "eaf" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/structure/cable{ @@ -35408,7 +35456,7 @@ /area/asteroid/nearstation) "fTp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall/rust, +/turf/open/floor/plasteel/dark, /area/engineering/gravity_generator) "fWh" = ( /turf/open/floor/wood{ @@ -35528,6 +35576,20 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"gkP" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "glC" = ( /turf/closed/wall/r_wall, /area/maintenance/starboard/aft) @@ -35535,7 +35597,14 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/turf/closed/wall/r_wall, +/obj/structure/sign/warning/radiation{ + pixel_x = -32 + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -25 + }, +/turf/open/floor/plasteel/dark, /area/engineering/gravity_generator) "guM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, @@ -35560,6 +35629,12 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) +"gBW" = ( +/obj/structure/sign/poster/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) "gGq" = ( /obj/machinery/mass_driver{ dir = 4; @@ -35817,8 +35892,15 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "hIF" = ( -/turf/closed/wall, -/area/space) +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -32 + }, +/obj/structure/closet/emcloset/anchored, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engineering/atmos) "hNO" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 5 @@ -36099,10 +36181,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "iVy" = ( @@ -36344,10 +36422,6 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "jCi" = ( @@ -37216,6 +37290,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/effect/turf_decal/caution, /turf/open/floor/plating, /area/engineering/atmos) "nIf" = ( @@ -37621,11 +37696,12 @@ /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) "psq" = ( -/obj/structure/sign/poster/random{ - pixel_y = 32 +/obj/machinery/camera{ + c_tag = "Gravity Generator Room"; + network = list("ss13","engine") }, /turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/area/engineering/gravity_generator) "puc" = ( /obj/structure/bed, /turf/open/floor/wood, @@ -37816,12 +37892,8 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "qdY" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/structure/closet/emcloset/anchored, -/turf/open/floor/plating, -/area/engineering/atmos) +/turf/open/floor/plasteel, +/area/engineering/gravity_generator) "qeO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -37871,13 +37943,8 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "qpG" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 - }, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/engineering/atmos) +/turf/open/floor/plasteel/dark, +/area/engineering/gravity_generator) "qsc" = ( /obj/machinery/air_sensor/atmos/air_tank, /turf/open/floor/engine/air, @@ -38066,33 +38133,17 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "rCw" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; - name = "Creature Pen"; - req_access_txt = "47" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno4"; - name = "Creature Cell #4" - }, -/obj/structure/cable/white{ - icon_state = "1-8" - }, -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/purple{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 }, -/turf/open/floor/plasteel/dark, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, /area/science/xenobiology) "rEx" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -40848,13 +40899,12 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "uBJ" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 8 }, -/obj/item/broken_bottle, -/obj/item/pickaxe, -/turf/open/floor/plating, -/area/engineering/atmos) +/turf/open/floor/plasteel, +/area/engineering/gravity_generator) "uBW" = ( /obj/structure/cable{ icon_state = "0-8" @@ -41055,8 +41105,12 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "vsf" = ( -/obj/effect/decal/cleanable/blood/gibs/xeno, -/turf/open/floor/plasteel/dark, +/obj/structure/closet/l3closet/scientist, +/obj/effect/turf_decal/stripes/line, +/obj/item/extinguisher/mini, +/turf/open/floor/plasteel/dark/side{ + dir = 1 + }, /area/science/xenobiology) "vsL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -41186,6 +41240,20 @@ "vMb" = ( /turf/open/floor/engine/n2o, /area/engineering/atmos) +"vMG" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "vPH" = ( /obj/effect/turf_decal/box, /obj/machinery/power/tracker, @@ -41305,8 +41373,8 @@ /area/command/bridge) "wiJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/engineering/atmos) +/turf/closed/wall/r_wall, +/area/engineering/gravity_generator) "wkn" = ( /obj/machinery/hydroponics/soil, /obj/item/shovel/spade, @@ -41382,7 +41450,10 @@ /area/service/bar/atrium) "wDb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, +/obj/structure/sign/warning/radiation{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/dark, /area/engineering/gravity_generator) "wOe" = ( /obj/machinery/door/firedoor/heavy, @@ -41661,13 +41732,36 @@ /turf/closed/wall/r_wall, /area/engineering/atmos) "xKp" = ( -/obj/machinery/door/airlock/external{ - name = "Engineering External Access"; - req_access_txt = "10;13" +/obj/machinery/door/window/brigdoor{ + dir = 4; + name = "Creature Pen"; + req_access_txt = "47" }, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/engineering/main) +/obj/machinery/door/poddoor/preopen{ + id = "xeno4"; + name = "Creature Cell #4" + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/delivery, +/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/side{ + dir = 4 + }, +/area/science/xenobiology) "xMv" = ( /obj/structure/lattice, /obj/structure/fluff/broken_flooring{ @@ -41680,9 +41774,6 @@ /turf/closed/wall, /area/command/gateway) "xPz" = ( -/obj/structure/sign/warning/vacuum/external{ - pixel_y = -32 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 9 }, @@ -41779,36 +41870,17 @@ /turf/open/floor/plasteel, /area/science/mixing) "yeE" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; - name = "Creature Pen"; - req_access_txt = "47" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno5"; - name = "Creature Cell #5" - }, -/obj/structure/cable/white{ - icon_state = "1-8" - }, -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/purple{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/effect/turf_decal/tile/purple, +/obj/structure/cable/white{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, /area/science/xenobiology) "yeO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -41840,6 +41912,7 @@ /turf/open/floor/plasteel, /area/service/bar/atrium) "yhg" = ( +/obj/effect/turf_decal/sand/plating, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -66148,7 +66221,7 @@ aaa aaa aaa aaa -cpn +jFP jFP jFP jFP @@ -66405,7 +66478,7 @@ aaa aaa aaa aaa -hIF +aaa aaa jFP jFP @@ -66662,7 +66735,7 @@ aaa aaa aaa aaa -hIF +aaa aaa jFP jFP @@ -66919,7 +66992,7 @@ aaa aaa aaa aaa -hIF +aaa aaa aaa aaa @@ -68458,7 +68531,7 @@ dMl uhz gNH kas -aad +kas aad aad aad @@ -68714,13 +68787,13 @@ gSv xtL uhz nHD +hIF kas aad aad aad aad aad -aad bxd aad aac @@ -68971,13 +69044,13 @@ kiw nUk ezP xPz -kas -aad -aad -aad -aad -aad -aad +aGe +aGe +aGe +aGe +aGe +aGe +aGe bxd aad aad @@ -69231,8 +69304,8 @@ twh wiJ wDb fTp -wDb -wDb +uBJ +fTp gre sIu bwY @@ -69485,10 +69558,10 @@ dgV fYx iIj ajX -qpG -sIu +aGe +psq aHe -aIb +aId aJh aKp aLD @@ -69742,8 +69815,8 @@ orI xyo hNO bOy -uBJ aGe +qdY aId aIc aJi @@ -69999,9 +70072,9 @@ anx anx uok akM -qdY aGe -aHg +qpG +aJh aId aHe pbT @@ -70255,8 +70328,8 @@ xIm rVj aAg akN +cpn alI -anu aGe aGe sIu @@ -71785,7 +71858,7 @@ vMb srR tac arr -bKQ +anu fFw auq qEl @@ -71812,7 +71885,7 @@ aPI bwV aRF aSP -xKp +aEt yhg aad bvo @@ -72042,7 +72115,7 @@ gap fnp aqA viy -bKQ +anu qIp mae eOs @@ -73070,7 +73143,7 @@ aor apv aqA arw -oiL +bhS jxc mae hqX @@ -85715,7 +85788,7 @@ bgZ bhM ibv bgm -bgZ +bhg bhM sKZ aad @@ -86991,13 +87064,13 @@ baa aZl dfP bfP -bgo +vsf rCw -bhN +vMG ibv -bgo +dZL yeE -bhN +gkP nTi biZ bjs @@ -87248,13 +87321,13 @@ bem beO sOV bfP -bgm -bgm -bhS +bgo +xKp +bhN ibv -bgm -bgm -bhS +bgo +cCv +bhN ibv bja bjt @@ -87505,13 +87578,13 @@ ben beP bfn bfP -vsf -bhg bgm +bgm +bnS ibv -psq -bgZ bgm +bgm +bnS xFw bjb bju @@ -87766,8 +87839,8 @@ bgm bhg bgm ibv -bgm -bhg +gBW +bgZ bgm bfP bjc diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index cf98755a36..a5b5cf6dc0 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -182,7 +182,7 @@ ////organ defines #define STANDARD_ORGAN_THRESHOLD 100 -#define STANDARD_ORGAN_HEALING (1/(15 MINUTES / (2 SECONDS))) +#define STANDARD_ORGAN_HEALING (1/(15 MINUTES / (2 SECONDS))) / 3 //Base organ healing can be amped by a factor of up to x5 via satiety. This assumes it to be somewhat in the upper center of positive satiety as base. #define STANDARD_ORGAN_DECAY (1/(15 MINUTES / (2 SECONDS))) //designed to fail organs when left to decay for ~15 minutes. 2 SECOND is SSmobs tickrate. diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index f6e2002e65..2b0f51f230 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -63,6 +63,9 @@ #define THRESHOLD_UNHUSK 50 // health threshold for synthflesh/rezadone to unhusk someone +#define SYNTHTISSUE_BORROW_CAP 250 //The cap for synthtissue's borrowed health value when used on someone dead or already having borrowed health. +#define SYNTHTISSUE_DAMAGE_FLIP_CYCLES 45 //After how many cycles the damage will be pure toxdamage as opposed to clonedamage like initially. Gradually changes during its cycles. + //reagent bitflags, used for altering how they works #define REAGENT_DEAD_PROCESS (1<<0) //calls on_mob_dead() if present in a dead body #define REAGENT_DONOTSPLIT (1<<1) //Do not split the chem at all during processing diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 7329dd653f..3bab2bfdf3 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -396,12 +396,15 @@ SUBSYSTEM_DEF(air) */ /datum/controller/subsystem/air/proc/run_delay_heuristics() - if(!equalize_enabled) - cost_equalize = 0 - if(should_do_equalization) - eq_cooldown-- - if(eq_cooldown <= 0) - equalize_enabled = TRUE + if(should_do_equalization) + if(!equalize_enabled) + cost_equalize = 0 + if(should_do_equalization) + eq_cooldown-- + if(eq_cooldown <= 0) + equalize_enabled = TRUE + else + equalize_enabled = FALSE var/total_thread_time = cost_turfs + cost_equalize + cost_groups + cost_post_process if(total_thread_time) var/wait_ms = wait * 100 diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index ae05134b56..eda3470a0b 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -578,8 +578,12 @@ /datum/status_effect/regenerative_core/on_apply() . = ..() ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core") - - if(HAS_TRAIT(owner, TRAIT_ROBOTIC_ORGANISM)) //Robots can heal from cores, but only get 1/5th of the healing. They can use this to get past the damage threshhold however, and then regularely heal from there. + var/turf/T = get_turf(owner) + if(T && is_mining_level(T.z)) + if(HAS_TRAIT(owner, TRAIT_ROBOTIC_ORGANISM)) //Robots can heal from cores, though they ""only"" heal 20 brute + burn damage each instead of 25 + heal_amount *= 0.8 + else + duration = 10 SECONDS heal_amount *= 0.2 owner.adjustBruteLoss(-heal_amount, only_organic = FALSE) if(!AmBloodsucker(owner)) //use your coffin you lazy bastard diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 476758efee..36f68cfdf3 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -423,7 +423,7 @@ if((!req_defib && grab_ghost) || (req_defib && defib.grab_ghost)) H.notify_ghost_cloning("Your heart is being defibrillated!") H.grab_ghost() // Shove them back in their body. - else if(H.can_defib()) + else if(H.can_revive()) H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) do_help(H, user) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 80e7b959a8..f4b172fce9 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -847,16 +847,16 @@ update_inv_handcuffed() update_hud_handcuffed() -/mob/living/carbon/proc/can_defib() +/mob/living/carbon/proc/can_revive(ignore_timelimit = FALSE, maximum_brute_dam = MAX_REVIVE_BRUTE_DAMAGE, maximum_fire_dam = MAX_REVIVE_FIRE_DAMAGE, ignore_heart = FALSE) var/tlimit = DEFIB_TIME_LIMIT * 10 var/obj/item/organ/heart = getorgan(/obj/item/organ/heart) if(suiciding || hellbound || HAS_TRAIT(src, TRAIT_HUSK) || AmBloodsucker(src)) return - if((world.time - timeofdeath) > tlimit) + if(!ignore_timelimit && (world.time - timeofdeath) > tlimit) return - if((getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE)) + if((getBruteLoss() >= maximum_brute_dam) || (getFireLoss() >= maximum_fire_dam)) return - if(!heart || (heart.organ_flags & ORGAN_FAILING)) + if(!ignore_heart && (!heart || (heart.organ_flags & ORGAN_FAILING))) return var/obj/item/organ/brain/BR = getorgan(/obj/item/organ/brain) if(QDELETED(BR) || BR.brain_death || (BR.organ_flags & ORGAN_FAILING) || suiciding) diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 1f8fd6f7a6..84ddab9e37 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -79,7 +79,6 @@ if(id_card?.registered_account) if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access)) requestonly = FALSE - buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department) can_approve_requests = TRUE else requestonly = TRUE @@ -236,8 +235,7 @@ return if(!self_paid && ishuman(usr) && !account) - var/obj/item/card/id/id_card = card_slot?.GetID() - account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department) + account = SSeconomy.get_dep_account(ACCOUNT_CAR) var/turf/T = get_turf(src) var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account) @@ -263,9 +261,7 @@ var/id = text2num(params["id"]) for(var/datum/supply_order/SO in SSshuttle.requestlist) if(SO.id == id) - var/obj/item/card/id/id_card = card_slot?.GetID() - if(id_card && id_card?.registered_account) - SO.paying_account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department) + SO.paying_account = SSeconomy.get_dep_account(ACCOUNT_CAR) SSshuttle.requestlist -= SO SSshuttle.shoppinglist += SO . = TRUE diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index cdad332def..d233866f80 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -234,6 +234,7 @@ var/transfer_amount = T.volume * part if(preserve_data) trans_data = copy_data(T) + post_copy_data(T) transferred += "[T] - [transfer_amount]" R.add_reagent(T.type, transfer_amount * multiplier, trans_data, chem_temp, T.purity, pH, no_react = TRUE, ignore_pH = TRUE) //we only handle reaction after every reagent has been transfered. @@ -274,7 +275,8 @@ var/datum/reagent/T = reagent var/copy_amount = T.volume * part if(preserve_data) - trans_data = T.data + trans_data = copy_data(T) + post_copy_data(T) R.add_reagent(T.type, copy_amount * multiplier, trans_data) src.update_total() @@ -301,7 +303,8 @@ var/datum/reagent/current_reagent = CR if(current_reagent.type == reagent) if(preserve_data) - trans_data = current_reagent.data + trans_data = copy_data(current_reagent) + post_copy_data(current_reagent) R.add_reagent(current_reagent.type, amount, trans_data, chem_temp, current_reagent.purity, pH, no_react = TRUE) remove_reagent(current_reagent.type, amount, 1) if(log && amount > 0) @@ -1152,6 +1155,11 @@ return trans_data +/// +// Should be ran after using copy_data. Calls the reagent's post_copy_data, which usually does nothing. +/datum/reagents/proc/post_copy_data(datum/reagent/current_reagent) + return current_reagent.post_copy_data() + /datum/reagents/proc/get_reagent(type) var/list/cached_reagents = reagent_list . = locate(type) in cached_reagents diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 9845903e21..8d009ffb2e 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -199,6 +199,10 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity) log_reagent("MOB ADD: on_merge() (mixed purity): merged [volume - impureVol] of [type] and [volume] of [impure_chem]") +//Ran by a reagent holder on a specific reagent after copying its data. +/datum/reagent/proc/post_copy_data() + return + /datum/reagent/proc/on_update(atom/A) return diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 1ee780b7b9..4ba27e3729 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1000,11 +1000,11 @@ if(M.stat == DEAD) if(M.suiciding || M.hellbound) //they are never coming back M.visible_message("[M]'s body does not react...") - return + return ..() if(M.getBruteLoss() >= 100 || M.getFireLoss() >= 100 || HAS_TRAIT(M, TRAIT_HUSK)) //body is too damaged to be revived M.visible_message("[M]'s body convulses a bit, and then falls still once more.") M.do_jitter_animation(10) - return + return ..() else M.visible_message("[M]'s body starts convulsing!") M.notify_ghost_cloning(source = M) @@ -1016,27 +1016,31 @@ if(iscarbon(M)) var/mob/living/carbon/C = M if(!(C.dna && C.dna.species && (NOBLOOD in C.dna.species.species_traits))) - C.blood_volume = max(C.blood_volume, BLOOD_VOLUME_NORMAL*C.blood_ratio) //so you don't instantly re-die from a lack of blood - for(var/organ in C.internal_organs) - var/obj/item/organ/O = organ - if(O.damage > O.maxHealth/2) - O.setOrganDamage(O.maxHealth/2) //so you don't instantly die from organ damage when being revived + C.blood_volume = max(C.blood_volume, BLOOD_VOLUME_BAD*C.blood_ratio) //so you don't instantly re-die from a lack of blood. You'll still need help if you had none though. + var/obj/item/organ/heart/H = C.getorganslot(ORGAN_SLOT_HEART) + if(H && H.organ_flags & ORGAN_FAILING) + H.applyOrganDamage(-15) + for(var/obj/item/organ/O as anything in C.internal_organs) + if(O.organ_flags & ORGAN_FAILING) + O.applyOrganDamage(-5) M.adjustOxyLoss(-20, 0) M.adjustToxLoss(-20, 0) M.updatehealth() + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.can_revive(ignore_timelimit = TRUE, maximum_brute_dam = 100, maximum_fire_dam = 100, ignore_heart = TRUE)) + return var/tplus = world.time - M.timeofdeath if(M.revive()) M.grab_ghost() M.emote("gasp") log_combat(M, M, "revived", src) var/list/policies = CONFIG_GET(keyed_list/policy) - var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds - var/late = timelimit && (tplus > timelimit) - var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT] + var/policy = policies[POLICYCONFIG_ON_DEFIB_LATE] //Always causes memory loss due to the nature of strange reagent. if(policy) to_chat(M, policy) - M.log_message("revived using strange reagent, [tplus] deciseconds from time of death, considered [late? "late" : "memory-intact"] revival under configured policy limits.", LOG_GAME) + M.log_message("revived using strange reagent, [tplus] deciseconds from time of death, considered late revival due to usage of strange reagent.", LOG_GAME) ..() diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 55f44a505e..a6b6640ead 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -491,7 +491,7 @@ return var/fp_verb = mode == HYPO_SPRAY ? "spray" : "inject" - var/method = mode == HYPO_SPRAY ? TOUCH : INJECT + var/method = mode == HYPO_SPRAY ? PATCH : INJECT //Medsprays use patch when spraying, feels like an inconsistancy here. if(L != user) L.visible_message("[user] is trying to [fp_verb] [L] with [src]!", \ diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index e3cc63c3a0..4603b04b1d 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -234,7 +234,7 @@ var/mob/living/carbon/C = host_mob if(C.get_ghost()) return FALSE - return C.can_defib() + return C.can_revive() /datum/nanite_program/defib/proc/zap() var/mob/living/carbon/C = host_mob diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index a3c6ea06c8..05f3f06b06 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -156,12 +156,14 @@ return FALSE if(organ_flags & ORGAN_SYNTHETIC_EMP) //Synthetic organ has been emped, is now failing. applyOrganDamage(maxHealth * decay_factor) - return + return FALSE + if(organ_flags & ORGAN_SYNTHETIC) + return TRUE if(!is_cold() && damage) ///Damage decrements by a percent of its maxhealth var/healing_amount = -(maxHealth * healing_factor) ///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's satiety - healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0 + healing_amount -= owner.satiety > 0 ? 4 * (maxHealth * healing_factor) * (owner.satiety / MAX_SATIETY) : 0 if(healing_amount) applyOrganDamage(healing_amount) //to FERMI_TWEAK return TRUE diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index de62b32997..6b348e291b 100644 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -132,6 +132,13 @@ name = "ipc cell" icon_state = "stomach-ipc" +/obj/item/organ/stomach/ipc/on_life() + . = ..() + if(!.) + return + if(HAS_TRAIT(owner, TRAIT_ROBOTIC_ORGANISM) && owner.nutrition >= NUTRITION_LEVEL_FED) + owner.satiety += 5 //We don't need to cap the value as it's already automatically capped during nutrition level handling. Also effectively only +4 as you lose 1 per life tick. 300 seconds of sufficient charge to reach full satiety. + /obj/item/organ/stomach/ipc/emp_act(severity) . = ..() if(!owner || . & EMP_PROTECT_SELF) diff --git a/html/changelogs/AutoChangeLog-pr-15550.yml b/html/changelogs/AutoChangeLog-pr-15550.yml new file mode 100644 index 0000000000..171df9bb0c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15550.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "atmos equalization config now works properly" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index bb255a4194..6695194008 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -98,8 +98,8 @@ description = "Synthetic tissue used for grafting onto damaged organs during surgery, or for treating limb damage. Has a very tight growth window between 305-320, any higher and the temperature will cause the cells to die. Additionally, growth time is considerably long, so chemists are encouraged to leave beakers with said reaction ongoing, while they tend to their other duties." pH = 7.6 metabolization_rate = 0.05 //Give them time to graft - data = list("grown_volume" = 0, "injected_vol" = 0) - var/borrowed_health + data = list("grown_volume" = 0, "injected_vol" = 0, "borrowed_health" = 0) + var/borrowed_health = 0 color = "#FFDADA" value = REAGENT_VALUE_COMMON @@ -107,31 +107,51 @@ if(iscarbon(M)) var/mob/living/carbon/C = M var/healing_factor = (((data["grown_volume"] / 100) + 1)*reac_volume) - if(method in list(PATCH, TOUCH)) - if (M.stat == DEAD) - M.visible_message("The synthetic tissue rapidly grafts into [M]'s wounds, attemping to repair the damage as quickly as possible.") - borrowed_health += healing_factor - M.adjustBruteLoss(-healing_factor*2) - M.adjustFireLoss(-healing_factor*2) - M.adjustToxLoss(-healing_factor) - M.adjustCloneLoss(-healing_factor) - M.updatehealth() + if(method == PATCH) //Needs to actually be applied via patch / hypo / medspray and not just beakersplashed. + if (C.stat == DEAD) + C.visible_message("The synthetic tissue rapidly grafts into [M]'s wounds, attempting to repair the damage as quickly as possible.") + var/preheal_brute = C.getBruteLoss() + var/preheal_burn = C.getFireLoss() + var/preheal_tox = C.getToxLoss() + var/preheal_oxy = C.getOxyLoss() + C.adjustBruteLoss(-healing_factor*2) + C.adjustFireLoss(-healing_factor*2) + C.adjustToxLoss(-healing_factor) + C.adjustCloneLoss(-healing_factor) + borrowed_health += (preheal_brute - C.getBruteLoss()) + (preheal_burn - C.getFireLoss()) + (preheal_tox - C.getToxLoss()) + ((preheal_oxy - C.getOxyLoss()) / 2) //Ironically this means that while slimes get damaged by the toxheal, it will reduce borrowed health and longterm effects. Funky! + C.updatehealth() if(data["grown_volume"] > 135 && ((C.health + C.oxyloss)>=80)) - if(M.revive()) - M.emote("gasp") + var/tplus = world.time - M.timeofdeath + if(C.can_revive(ignore_timelimit = TRUE, maximum_brute_dam = MAX_REVIVE_BRUTE_DAMAGE / 2, maximum_fire_dam = MAX_REVIVE_FIRE_DAMAGE / 2, ignore_heart = TRUE) && C.revive()) + C.grab_ghost() + C.emote("gasp") borrowed_health *= 2 if(borrowed_health < 100) borrowed_health = 100 - log_combat(M, M, "revived", src) + log_combat(C, C, "revived", src) + var/list/policies = CONFIG_GET(keyed_list/policy) + var/policy = policies[POLICYCONFIG_ON_DEFIB_LATE] //Always causes memory loss due to the nature of synthtissue + if(policy) + to_chat(C, policy) + C.log_message("revived using synthtissue, [tplus] deciseconds from time of death, considered late revival due to usage of synthtissue.", LOG_GAME) else + var/preheal_brute = C.getBruteLoss() + var/preheal_burn = C.getFireLoss() M.adjustBruteLoss(-healing_factor) M.adjustFireLoss(-healing_factor) - to_chat(M, "You feel your flesh merge with the synthetic tissue! It stings like hell!") + var/datum/reagent/synthtissue/active_tissue = M.reagents.has_reagent(/datum/reagent/synthtissue) + var/imperfect = FALSE //Merging with synthtissue that has borrowed health + if(active_tissue && active_tissue.borrowed_health) + borrowed_health += (preheal_brute - C.getBruteLoss()) + (preheal_burn - C.getFireLoss()) + imperfect = TRUE + to_chat(M, "You feel your flesh [imperfect ? "partially and painfully" : ""] merge with the synthetic tissue! It stings like hell[imperfect ? " and is making you feel terribly sick" : ""]!") SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine) + data["borrowed_health"] += borrowed_health //Preserve health offset + borrowed_health = 0 //We are applying this to someone else, so this info will be transferred via data. if(method==INJECT) data["injected_vol"] = reac_volume var/obj/item/organ/heart/H = C.getorganslot(ORGAN_SLOT_HEART) - if(data["grown_volume"] > 50 && H.organ_flags & ORGAN_FAILING) + if(H && data["grown_volume"] > 50 && H.organ_flags & ORGAN_FAILING) H.applyOrganDamage(-20) ..() @@ -145,16 +165,19 @@ C.reagents.remove_reagent(type, 15) to_chat(C, "You feel something reform inside of you!") - data["injected_vol"] -= metabolization_rate + data["injected_vol"] = max(0, data["injected_vol"] - metabolization_rate * C.metabolism_efficiency) //No negatives. if(borrowed_health) - C.adjustToxLoss(1) - C.adjustCloneLoss(1) - borrowed_health -= 1 + var/ratio = (current_cycle > SYNTHTISSUE_DAMAGE_FLIP_CYCLES) ? 0 : (1 - (current_cycle / SYNTHTISSUE_DAMAGE_FLIP_CYCLES)) + var/payback = 2 * C.metabolism_efficiency //How much borrowed health we are paying back. Starts as cloneloss, slowly flips over to toxloss. + C.adjustToxLoss((1 - ratio) * payback * REAGENTS_EFFECT_MULTIPLIER, forced = TRUE, toxins_type = TOX_OMNI) + C.adjustCloneLoss(ratio * payback * REAGENTS_EFFECT_MULTIPLIER) + borrowed_health = max(borrowed_health - payback, 0) ..() /datum/reagent/synthtissue/on_merge(passed_data) if(!passed_data) return ..() + borrowed_health += max(0, passed_data["borrowed_health"]) if(passed_data["grown_volume"] > data["grown_volume"]) data["grown_volume"] = passed_data["grown_volume"] if(iscarbon(holder.my_atom)) @@ -166,11 +189,16 @@ /datum/reagent/synthtissue/on_new(passed_data) if(!passed_data) return ..() + borrowed_health = min(passed_data["borrowed_health"] + borrowed_health, SYNTHTISSUE_BORROW_CAP) if(passed_data["grown_volume"] > data["grown_volume"]) data["grown_volume"] = passed_data["grown_volume"] update_name() ..() +/datum/reagent/synthtissue/post_copy_data() + data["borrowed_health"] = 0 //We passed this along to something that needed it, set it back to 0 so we don't do it twice. + return ..() + /datum/reagent/synthtissue/proc/update_name() //They are but babes on creation and have to grow unto godhood switch(data["grown_volume"]) if(-INFINITY to 50) @@ -193,9 +221,9 @@ C.adjustCloneLoss(borrowed_health*1.25) C.adjustAllOrganLoss(borrowed_health*0.25) M.updatehealth() - if(borrowed_health && C.health < -20) - M.stat = DEAD + if(C.stat != DEAD && borrowed_health && C.health < -20) M.visible_message("The synthetic tissue degrades off [M]'s wounds as they collapse to the floor.") + M.death() //NEEDS ON_MOB_DEAD() /datum/reagent/fermi/zeolites