diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 4c3741c21fb..d55f475c543 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -111,17 +111,6 @@
},
/turf/open/floor/iron/white,
/area/medical/medbay/central)
-"aaR" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
"aaS" = (
/obj/structure/sink/kitchen{
desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
@@ -4297,15 +4286,17 @@
/obj/machinery/power/apc/auto_name/north,
/turf/open/floor/plating,
/area/maintenance/fore)
+<<<<<<< HEAD
"azY" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/reagent_dispensers/plumbed,
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
/area/maintenance/fore)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"aAf" = (
/obj/structure/cable,
/obj/machinery/power/tracker,
@@ -4626,14 +4617,16 @@
},
/turf/open/floor/carpet,
/area/security/detectives_office)
+<<<<<<< HEAD
"aCz" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
},
/obj/structure/cable,
-/obj/machinery/duct,
/turf/open/floor/plating,
/area/maintenance/fore)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"aDa" = (
/turf/open/floor/plating,
/area/construction/mining/aux_base)
@@ -4844,6 +4837,20 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/hallway/primary/fore)
+"aEP" = (
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/landmark/start/hangover,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"aET" = (
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=1-BrigCells";
@@ -5231,6 +5238,7 @@
},
/turf/open/floor/iron,
/area/security/checkpoint/supply)
+<<<<<<< HEAD
"aIB" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/stripes/line{
@@ -5243,9 +5251,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/engineering/main)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"aIE" = (
/obj/effect/turf_decal/trimline/brown/filled/corner{
dir = 8
@@ -5396,15 +5405,17 @@
/obj/item/bedsheet,
/turf/open/floor/iron,
/area/security/brig)
+<<<<<<< HEAD
"aJl" = (
/obj/structure/disposalpipe/segment{
dir = 9
},
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"aJu" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 10
@@ -5536,6 +5547,16 @@
},
/turf/open/floor/plating,
/area/engineering/main)
+"aLe" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/landmark/start/paramedic,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"aLm" = (
/obj/structure/cable,
/turf/open/floor/plating{
@@ -6008,6 +6029,7 @@
},
/turf/open/space,
/area/space/nearstation)
+<<<<<<< HEAD
"aOZ" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -6016,9 +6038,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"aPb" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/obj/effect/turf_decal/bot,
@@ -9884,6 +9907,19 @@
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/turf/open/floor/iron,
/area/science/mixing)
+"btv" = (
+/obj/structure/cable,
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"btK" = (
/obj/structure/window/reinforced{
dir = 1;
@@ -10043,6 +10079,7 @@
},
/turf/open/floor/iron,
/area/maintenance/starboard)
+<<<<<<< HEAD
"bvd" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -10053,9 +10090,10 @@
/obj/effect/mapping_helpers/airlock/unres{
dir = 8
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"bvf" = (
/obj/item/radio/intercom{
freerange = 1;
@@ -10292,6 +10330,7 @@
/obj/machinery/power/apc/auto_name/south,
/turf/open/floor/plating,
/area/maintenance/port)
+<<<<<<< HEAD
"bya" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -10306,9 +10345,10 @@
},
/obj/item/reagent_containers/glass/rag,
/obj/structure/table,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/service/bar)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"byv" = (
/obj/machinery/firealarm{
dir = 4;
@@ -10907,6 +10947,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/grimy,
/area/tcommsat/computer)
+"bEA" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/medbay/central)
"bEB" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/navbeacon{
@@ -11376,6 +11424,25 @@
/obj/item/paper,
/turf/open/floor/wood,
/area/commons/dorms)
+"bIu" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"bIN" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 1
@@ -12224,6 +12291,7 @@
},
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+<<<<<<< HEAD
"bTa" = (
/obj/structure/cable,
/obj/machinery/light/small,
@@ -12234,7 +12302,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
"bTb" = (
@@ -12242,7 +12309,6 @@
pixel_y = -32
},
/obj/structure/cable,
-/obj/machinery/duct,
/turf/open/floor/plating,
/area/hallway/secondary/service)
"bTc" = (
@@ -12251,9 +12317,10 @@
pixel_y = 32
},
/obj/structure/cable,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"bTe" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -12471,6 +12538,11 @@
},
/turf/open/floor/iron,
/area/hallway/primary/central)
+"bUf" = (
+/obj/effect/loot_site_spawner,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"bUo" = (
/obj/item/folder/white{
pixel_x = 4;
@@ -12809,6 +12881,7 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+<<<<<<< HEAD
"bXH" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -12820,9 +12893,10 @@
name = "Kitchen Cold Room";
req_access_txt = "28"
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen/coldroom)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"bXJ" = (
/obj/item/storage/box/lights/mixed,
/turf/open/floor/plating{
@@ -12972,6 +13046,11 @@
},
/turf/open/floor/iron/white,
/area/medical/virology)
+"bYE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"bYH" = (
/obj/structure/rack,
/obj/item/stack/rods{
@@ -13560,6 +13639,10 @@
/obj/effect/spawner/lootdrop/grille_or_trash,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"cdl" = (
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"cdm" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
@@ -14237,6 +14320,17 @@
},
/turf/open/floor/carpet,
/area/command/heads_quarters/hos)
+"cig" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"cih" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -14335,6 +14429,14 @@
icon_state = "platingdmg1"
},
/area/maintenance/starboard/secondary)
+"cjq" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"cjs" = (
/obj/item/reagent_containers/food/drinks/drinkingglass{
pixel_x = 4;
@@ -16260,6 +16362,7 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+<<<<<<< HEAD
"cvu" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -16270,7 +16373,6 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/obj/structure/reagent_dispensers/plumbed/storage,
/turf/open/floor/iron/white,
/area/medical/chemistry)
"cvv" = (
@@ -16283,9 +16385,10 @@
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
-/obj/structure/reagent_dispensers/plumbed/storage,
/turf/open/floor/iron/white,
/area/medical/chemistry)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"cvA" = (
/obj/machinery/door/airlock{
id_tag = "AuxToilet2";
@@ -17147,6 +17250,22 @@
},
/turf/open/floor/iron/white,
/area/medical/abandoned)
+"cEL" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/item/clothing/head/that,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/service/bar)
"cEN" = (
/turf/open/floor/carpet,
/area/medical/psychology)
@@ -17604,6 +17723,20 @@
/obj/effect/landmark/start/paramedic,
/turf/open/floor/iron/white,
/area/medical/paramedic)
+"cHM" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock{
+ name = "Kitchen";
+ req_access_txt = "28"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/hallway/secondary/service)
"cId" = (
/obj/machinery/chem_master/condimaster{
desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments.";
@@ -18754,6 +18887,7 @@
},
/turf/open/floor/iron,
/area/hallway/secondary/exit/departure_lounge)
+<<<<<<< HEAD
"cQZ" = (
/obj/machinery/light/small{
dir = 1
@@ -18762,9 +18896,10 @@
pixel_y = 26
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"cRa" = (
/obj/structure/sign/warning/biohazard,
/turf/closed/wall,
@@ -19389,6 +19524,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/hallway/primary/aft)
+<<<<<<< HEAD
"cYc" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 10
@@ -19403,9 +19539,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"cYd" = (
/obj/machinery/door/airlock/maintenance{
name = "Medbay Maintenance";
@@ -20104,6 +20241,15 @@
},
/turf/open/floor/iron,
/area/security/prison)
+"dgZ" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/maintenance/fore)
"dhn" = (
/obj/structure/table,
/obj/item/poster/random_contraband,
@@ -20615,12 +20761,14 @@
/obj/machinery/space_heater,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+<<<<<<< HEAD
"dnA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"dnC" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light_switch{
@@ -20976,6 +21124,7 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+<<<<<<< HEAD
"dtK" = (
/obj/machinery/door/airlock/medical/glass{
name = "Primary Treatment Centre";
@@ -20995,9 +21144,10 @@
/obj/effect/mapping_helpers/airlock/unres{
dir = 8
},
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"dtO" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -21106,6 +21256,14 @@
"dux" = (
/turf/closed/wall,
/area/maintenance/port/aft)
+"duA" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 5
+ },
+/obj/effect/landmark/start/medical_doctor,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"duH" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -21135,6 +21293,7 @@
},
/turf/open/floor/iron,
/area/command/gateway)
+<<<<<<< HEAD
"duX" = (
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -21145,9 +21304,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
},
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"dvh" = (
/obj/effect/turf_decal/tile/yellow{
dir = 4
@@ -21445,10 +21605,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/medical/surgery/room_b)
+<<<<<<< HEAD
"dyw" = (
-/obj/structure/reagent_dispensers/plumbed,
+/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"dyE" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -21520,11 +21683,13 @@
/obj/machinery/space_heater,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+<<<<<<< HEAD
"dze" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"dzx" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
@@ -21578,6 +21743,17 @@
},
/turf/open/floor/iron,
/area/hallway/primary/port)
+"dAh" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"dAn" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13"
@@ -22008,6 +22184,7 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+<<<<<<< HEAD
"dIm" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -22020,9 +22197,10 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron,
/area/service/hydroponics)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"dIs" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -22256,6 +22434,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+"dNh" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 6
+ },
+/obj/structure/grille,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"dNi" = (
/obj/effect/turf_decal/stripes/corner{
dir = 4
@@ -23447,6 +23633,23 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/commons/locker)
+"ehE" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/navbeacon/wayfinding/bar,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/item/reagent_containers/glass/rag,
+/obj/structure/table,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/service/bar)
"ehQ" = (
/obj/structure/window/reinforced,
/obj/structure/table,
@@ -23944,13 +24147,14 @@
/turf/open/floor/iron,
/area/command/teleporter)
"eto" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/green{
dir = 4
},
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/maintenance/fore)
+/turf/open/floor/iron,
+/area/service/hydroponics)
"eua" = (
/obj/effect/landmark/start/atmospheric_technician,
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
@@ -23982,15 +24186,17 @@
},
/turf/open/floor/iron,
/area/maintenance/starboard)
+<<<<<<< HEAD
"euK" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/item/cigbutt/roach,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/maintenance/starboard)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"evl" = (
/obj/machinery/light/small{
dir = 1
@@ -24346,6 +24552,7 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/command/heads_quarters/rd)
+<<<<<<< HEAD
"ezL" = (
/obj/structure/cable,
/obj/machinery/door/airlock/maintenance{
@@ -24355,9 +24562,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"ezS" = (
/obj/machinery/door/airlock{
name = "Unit B"
@@ -24629,15 +24837,15 @@
},
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+<<<<<<< HEAD
"eEl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
},
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
/turf/open/floor/iron,
/area/service/hydroponics)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"eEK" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/siding,
@@ -24657,6 +24865,7 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/port)
+<<<<<<< HEAD
"eFm" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -24674,9 +24883,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 9
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"eFu" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -24789,6 +24999,18 @@
},
/turf/open/floor/iron,
/area/security/brig)
+"eGO" = (
+/obj/machinery/atmospherics/components/binary/pump/on,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = 26
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/kitchen_coldroom/freezerfloor,
+/area/service/kitchen/coldroom)
"eGP" = (
/obj/structure/table,
/obj/item/storage/fancy/donut_box,
@@ -24955,6 +25177,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible,
/turf/open/floor/iron/dark,
/area/security/execution/education)
+"eKh" = (
+/obj/structure/reagent_dispensers/plumbed,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"eKq" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/medical/glass{
@@ -25709,15 +25935,17 @@
},
/turf/open/floor/grass,
/area/medical/virology)
+<<<<<<< HEAD
"eVa" = (
/obj/machinery/door/airlock{
name = "Unisex Showers"
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"eVd" = (
/obj/effect/turf_decal/box,
/obj/structure/cable,
@@ -25804,6 +26032,16 @@
"eWd" = (
/turf/closed/wall,
/area/science/lab)
+"eWl" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/cable,
+/obj/structure/reagent_dispensers/plumbed{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/engineering/main)
"eWu" = (
/obj/structure/toilet/greyscale{
dir = 4
@@ -25858,6 +26096,14 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/engineering/break_room)
+"eXp" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/engineering/main)
"eXI" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -26644,6 +26890,28 @@
/obj/structure/railing,
/turf/open/space/basic,
/area/space/nearstation)
+"flj" = (
+/obj/machinery/door/airlock/medical/glass{
+ name = "Primary Treatment Centre";
+ req_access_txt = "5"
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"flv" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
@@ -27114,13 +27382,6 @@
icon_state = "platingdmg1"
},
/area/maintenance/aft)
-"fsw" = (
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 1
- },
-/obj/machinery/duct,
-/turf/open/floor/iron/white,
-/area/medical/treatment_center)
"fsy" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/door/window/northleft{
@@ -27136,6 +27397,12 @@
},
/turf/open/floor/iron,
/area/science/xenobiology)
+"fsB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"fsL" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 5
@@ -27680,6 +27947,17 @@
},
/turf/open/floor/iron,
/area/security/prison)
+"fBU" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"fCe" = (
/obj/machinery/door/airlock/security{
name = "Court Cell";
@@ -29012,6 +29290,26 @@
},
/turf/open/floor/wood,
/area/service/library)
+"gco" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 9
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"gcq" = (
/obj/effect/turf_decal/trimline/blue/corner{
dir = 4
@@ -29066,6 +29364,23 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/circuit/green,
/area/science/nanite)
+"gdL" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/brown/warning{
+ dir = 10
+ },
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/structure/closet/secure_closet/freezer/fridge,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"gdY" = (
/obj/machinery/photocopier{
pixel_y = 3
@@ -29352,6 +29667,13 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"gjr" = (
+/obj/effect/landmark/xeno_spawn,
+/obj/item/bikehorn/rubberducky,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"gju" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -30323,6 +30645,7 @@
},
/turf/open/floor/iron/white,
/area/science/nanite)
+<<<<<<< HEAD
"gAM" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -30332,9 +30655,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 1
},
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"gAP" = (
/obj/structure/sign/departments/cargo,
/turf/closed/wall,
@@ -31709,6 +32033,13 @@
icon_state = "panelscorched"
},
/area/maintenance/starboard/aft)
+"haF" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"haG" = (
/obj/effect/turf_decal/tile/purple,
/obj/effect/turf_decal/tile/purple{
@@ -31770,6 +32101,27 @@
/obj/machinery/newscaster/security_unit,
/turf/closed/wall,
/area/security/office)
+"hbg" = (
+/obj/machinery/button/door{
+ id = "kitchen_counter";
+ name = "Counter Shutters Control";
+ pixel_x = 26;
+ pixel_y = 24;
+ req_access_txt = "28"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/landmark/start/cook,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"hbB" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -32657,6 +33009,19 @@
},
/turf/open/space,
/area/space/nearstation)
+"hqf" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
+"hqj" = (
+/obj/structure/urinal{
+ pixel_y = 29
+ },
+/obj/structure/cable,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"hql" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/westleft{
@@ -32680,6 +33045,21 @@
},
/turf/open/floor/iron/showroomfloor,
/area/security/warden)
+"hqm" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/iron,
+/area/service/hydroponics)
"hqo" = (
/obj/machinery/disposal/delivery_chute{
dir = 1;
@@ -32791,14 +33171,16 @@
},
/turf/open/floor/iron/dark,
/area/science/server)
+<<<<<<< HEAD
"hrT" = (
/obj/structure/urinal{
pixel_y = 29
},
/obj/structure/cable,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"hrY" = (
/obj/structure/chair/office,
/turf/open/floor/iron,
@@ -33150,6 +33532,21 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"hzD" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/machinery/camera{
+ c_tag = "Restrooms";
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"hzG" = (
/obj/machinery/light/small{
dir = 8
@@ -33477,6 +33874,7 @@
},
/turf/open/floor/plating,
/area/maintenance/central)
+<<<<<<< HEAD
"hGt" = (
/obj/machinery/atmospherics/components/binary/pump/on,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -33486,9 +33884,10 @@
pixel_x = -26;
pixel_y = 26
},
-/obj/machinery/duct,
/turf/open/floor/iron/kitchen_coldroom/freezerfloor,
/area/service/kitchen/coldroom)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"hGB" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/spawner/lootdrop/maintenance/three,
@@ -33606,6 +34005,16 @@
},
/turf/open/floor/iron/white,
/area/medical/virology)
+"hHN" = (
+/obj/structure/sign/poster/random{
+ pixel_x = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/reagent_dispensers/plumbed{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/maintenance/starboard)
"hHO" = (
/obj/structure/railing{
dir = 1
@@ -34097,6 +34506,19 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/maintenance/starboard/secondary)
+"hQh" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"hQu" = (
/obj/structure/chair{
dir = 8
@@ -35909,12 +36331,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
/turf/open/floor/iron/white,
/area/medical/cryo)
+<<<<<<< HEAD
"iyC" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"iyL" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/dark/visible{
dir = 4
@@ -36121,6 +36545,21 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"iCr" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"iCB" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/carpet,
@@ -36481,20 +36920,40 @@
},
/turf/open/floor/iron,
/area/science/lab)
+"iKq" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light_switch{
+ pixel_x = -26;
+ pixel_y = -26
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"iKv" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/north,
/turf/open/floor/carpet,
/area/command/heads_quarters/hop)
+<<<<<<< HEAD
"iKw" = (
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/plating,
/area/maintenance/fore)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"iKy" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/structure/cable,
@@ -36609,6 +37068,12 @@
/obj/effect/landmark/start/geneticist,
/turf/open/floor/iron/dark,
/area/science/genetics)
+"iMh" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"iMl" = (
/obj/structure/closet/l3closet/scientist,
/obj/effect/turf_decal/bot{
@@ -37156,6 +37621,7 @@
/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible,
/turf/open/floor/iron/dark,
/area/engineering/atmos)
+<<<<<<< HEAD
"iWa" = (
/obj/machinery/button/door{
id = "kitchen_counter";
@@ -37174,9 +37640,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"iWd" = (
/obj/machinery/door/firedoor,
/obj/machinery/button/door{
@@ -37654,13 +38121,15 @@
},
/turf/open/floor/iron,
/area/commons/vacant_room/commissary)
+<<<<<<< HEAD
"jgt" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"jgz" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -38671,16 +39140,22 @@
"jxI" = (
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
-"jxK" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+"jxU" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 1
},
-/obj/machinery/duct,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 10
+ },
+<<<<<<< HEAD
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"jxX" = (
/obj/structure/cable,
/obj/effect/landmark/xeno_spawn,
@@ -38869,14 +39344,16 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/service/hydroponics/garden)
+<<<<<<< HEAD
"jBz" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 4
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"jBB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/decal/cleanable/oil,
@@ -38979,6 +39456,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/security/office)
+<<<<<<< HEAD
"jDK" = (
/obj/machinery/light_switch{
pixel_x = -26
@@ -38987,9 +39465,10 @@
dir = 1
},
/obj/effect/landmark/start/hangover,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"jEp" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -39032,6 +39511,7 @@
},
/turf/open/floor/iron,
/area/commons/toilet/auxiliary)
+<<<<<<< HEAD
"jFf" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/button/door{
@@ -39053,9 +39533,10 @@
pixel_x = -34;
pixel_y = -23
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"jFh" = (
/obj/structure/window/reinforced{
dir = 8
@@ -40244,6 +40725,12 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/maintenance/port/aft)
+"jYM" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/maintenance/starboard)
"jZd" = (
/obj/effect/turf_decal/trimline/blue/corner{
dir = 1
@@ -40268,6 +40755,15 @@
},
/turf/open/floor/iron/white,
/area/science/research)
+"jZt" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/item/cigbutt/roach,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/maintenance/starboard)
"jZv" = (
/obj/machinery/button/crematorium{
id = "crematoriumChapel";
@@ -41032,6 +41528,15 @@
/obj/structure/sign/warning/securearea,
/turf/closed/wall/r_wall,
/area/ai_monitored/command/storage/eva)
+"kpt" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"kqd" = (
/obj/structure/table/wood,
/obj/item/book/manual/wiki/security_space_law,
@@ -42684,6 +43189,22 @@
},
/turf/open/floor/iron/white/corner,
/area/hallway/primary/central)
+"kTR" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/start/hangover,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"kTW" = (
/turf/closed/wall/r_wall,
/area/engineering/storage/tcomms)
@@ -43238,14 +43759,16 @@
"ldP" = (
/turf/closed/wall/r_wall,
/area/ai_monitored/command/storage/satellite)
+<<<<<<< HEAD
"ldZ" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 5
},
/obj/effect/landmark/start/medical_doctor,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"lej" = (
/obj/machinery/light/small{
dir = 4
@@ -43678,6 +44201,15 @@
},
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+"lks" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Showers"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"llc" = (
/obj/machinery/vending/hydroseeds{
slogan_delay = 700
@@ -44234,6 +44766,7 @@
},
/turf/open/floor/iron/dark,
/area/command/bridge)
+<<<<<<< HEAD
"lvC" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 1
@@ -44248,9 +44781,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"lvJ" = (
/obj/structure/window/reinforced/tinted{
dir = 1
@@ -45439,6 +45973,19 @@
},
/turf/open/floor/iron,
/area/science/xenobiology)
+"lOZ" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/structure/reagent_dispensers/plumbed/storage,
+/turf/open/floor/iron/white,
+/area/medical/chemistry)
"lPb" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/closed/wall,
@@ -45672,12 +46219,14 @@
},
/turf/open/floor/iron,
/area/hallway/primary/aft)
+<<<<<<< HEAD
"lUo" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"lUv" = (
/obj/item/storage/book/bible,
/obj/structure/altar_of_gods,
@@ -46606,6 +47155,7 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/plating,
/area/commons/toilet/auxiliary)
+<<<<<<< HEAD
"mkr" = (
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -46624,9 +47174,10 @@
req_access_txt = "5"
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"mkw" = (
/obj/structure/rack,
/obj/item/storage/briefcase{
@@ -46661,6 +47212,18 @@
},
/turf/open/floor/carpet,
/area/commons/vacant_room/office)
+"mlo" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/maintenance{
+ name = "Medbay Maintenance";
+ req_access_txt = "5"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"mlB" = (
/obj/effect/turf_decal/tile/yellow{
dir = 4
@@ -46708,11 +47271,13 @@
},
/turf/open/floor/plating,
/area/service/chapel/main)
+<<<<<<< HEAD
"mma" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"mmb" = (
/obj/structure/fluff/broken_flooring{
icon_state = "singular"
@@ -47142,6 +47707,18 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+"mtZ" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 1
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"mum" = (
/obj/machinery/rnd/production/techfab/department/service,
/obj/effect/turf_decal/trimline/brown/warning{
@@ -47306,6 +47883,21 @@
/obj/machinery/holopad,
/turf/open/floor/iron,
/area/service/hydroponics)
+"mwA" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"mxO" = (
/obj/structure/table,
/obj/item/food/grown/wheat,
@@ -47724,6 +48316,21 @@
},
/turf/open/floor/iron,
/area/cargo/sorting)
+"mFR" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/reagent_dispensers/plumbed,
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
+ },
+/area/maintenance/fore)
+"mGe" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"mGl" = (
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -47778,6 +48385,20 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
+"mHq" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden,
+/obj/machinery/door/airlock{
+ name = "Kitchen Cold Room";
+ req_access_txt = "28"
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen/coldroom)
"mHw" = (
/obj/structure/chair/comfy/black{
dir = 8
@@ -47790,6 +48411,14 @@
dir = 4
},
/area/service/chapel/main)
+"mHI" = (
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
+/obj/structure/cable,
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/maintenance/fore)
"mId" = (
/obj/machinery/door/airlock/medical/glass{
name = "Primary Treatment Centre";
@@ -48037,6 +48666,7 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/cargo/sorting)
+<<<<<<< HEAD
"mLL" = (
/obj/machinery/firealarm{
dir = 4;
@@ -48049,9 +48679,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 6
},
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"mLO" = (
/obj/effect/landmark/event_spawn,
/obj/structure/disposalpipe/segment,
@@ -48337,14 +48968,16 @@
},
/turf/open/floor/wood,
/area/service/lawoffice)
+<<<<<<< HEAD
"mQO" = (
/obj/structure/urinal{
pixel_y = 29
},
/obj/effect/landmark/start/hangover,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"mQQ" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/obj/effect/turf_decal/siding/green{
@@ -48779,6 +49412,19 @@
},
/turf/open/floor/iron,
/area/engineering/break_room)
+"mXn" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock{
+ name = "Service Hall";
+ req_one_access_txt = "25;26;35;28;22;37;46;38;70"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"mXJ" = (
/obj/structure/chair{
dir = 4
@@ -49042,6 +49688,10 @@
},
/turf/open/floor/iron,
/area/commons/dorms)
+"ncP" = (
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"ndf" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -49054,6 +49704,7 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
/area/service/bar)
+<<<<<<< HEAD
"ndn" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -49066,9 +49717,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"ndq" = (
/obj/machinery/door/firedoor,
/obj/structure/sign/poster/official/random{
@@ -49406,6 +50058,15 @@
},
/turf/open/floor/iron/dark/telecomms,
/area/science/server)
+"nhu" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/maintenance/starboard)
"nhv" = (
/obj/structure/table,
/obj/item/storage/box/donkpockets{
@@ -49517,6 +50178,15 @@
},
/turf/open/floor/iron,
/area/engineering/main)
+"nje" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/random{
+ pixel_y = 32
+ },
+/obj/structure/cable,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"njk" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -50215,6 +50885,13 @@
},
/turf/open/floor/iron/white,
/area/hallway/primary/central)
+"nwr" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"nwv" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -50539,6 +51216,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"nCO" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 9
+ },
+/obj/effect/landmark/start/medical_doctor,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"nCP" = (
/obj/machinery/door/window/westright{
dir = 1;
@@ -51754,6 +52439,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/hallway/primary/starboard)
+"nVS" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"nVU" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -52152,13 +52843,15 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/engineering/main)
+<<<<<<< HEAD
"odg" = (
/obj/effect/landmark/xeno_spawn,
/obj/item/bikehorn/rubberducky,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"odw" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
@@ -52373,11 +53066,6 @@
icon_state = "platingdmg2"
},
/area/maintenance/starboard/fore)
-"ogV" = (
-/obj/effect/loot_site_spawner,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
"ohh" = (
/obj/item/flashlight/lantern{
pixel_y = 7
@@ -52628,15 +53316,17 @@
},
/turf/open/floor/iron/white,
/area/science/research)
+<<<<<<< HEAD
"omL" = (
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"omN" = (
/obj/machinery/light/small{
dir = 8
@@ -52776,6 +53466,7 @@
},
/turf/open/floor/iron,
/area/security/range)
+<<<<<<< HEAD
"ope" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -52788,9 +53479,10 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"opp" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -52844,6 +53536,10 @@
},
/turf/open/floor/iron/dark,
/area/service/cafeteria)
+"opQ" = (
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/turf/open/floor/engine/n2o,
+/area/engineering/atmos)
"oqa" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -52921,15 +53617,17 @@
},
/turf/open/floor/iron/white,
/area/hallway/primary/central)
+<<<<<<< HEAD
"ori" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
dir = 6
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"orl" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -53070,6 +53768,7 @@
/obj/item/reagent_containers/food/drinks/bottle/goldschlager,
/turf/open/space/basic,
/area/space/nearstation)
+<<<<<<< HEAD
"ouO" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -53083,9 +53782,10 @@
dir = 8
},
/obj/structure/table,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/service/bar)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"ouU" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -53231,6 +53931,7 @@
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
/area/solars/starboard/aft)
+<<<<<<< HEAD
"ows" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -53244,9 +53945,10 @@
dir = 1;
pixel_y = -32
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"owN" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -54766,12 +55468,14 @@
dir = 1
},
/area/medical/break_room)
+<<<<<<< HEAD
"oUE" = (
/obj/structure/cable,
/obj/effect/landmark/start/hangover,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"oUF" = (
/obj/structure/sign/map/left{
desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown).";
@@ -55358,16 +56062,25 @@
},
/turf/open/floor/carpet,
/area/service/theater)
+<<<<<<< HEAD
"pcT" = (
+/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/random{
pixel_x = 32
},
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/reagent_dispensers/plumbed{
- dir = 8
+/obj/structure/cable,
+/obj/item/cigbutt{
+ pixel_x = -7;
+ pixel_y = 12
+ },
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
},
/turf/open/floor/iron,
/area/maintenance/starboard)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"pdh" = (
/obj/structure/chair{
dir = 1
@@ -55710,6 +56423,17 @@
},
/turf/open/floor/iron/dark,
/area/command/teleporter)
+"piL" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/airalarm{
+ pixel_y = 26
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"piN" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/structure/cable,
@@ -55847,12 +56571,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
/turf/open/floor/iron/dark,
/area/engineering/supermatter/room)
+<<<<<<< HEAD
"pmn" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/maintenance/starboard)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"pmN" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -56552,6 +57278,11 @@
/obj/machinery/iv_drip,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+"pxg" = (
+/obj/effect/landmark/start/cook,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"pxj" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -56875,6 +57606,18 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/service/hydroponics)
+"pCE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 10
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"pCG" = (
/obj/structure/sign/map/right{
desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown).";
@@ -56925,6 +57668,14 @@
dir = 1
},
/area/service/chapel/main)
+"pEn" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/reagent_dispensers/plumbed,
+/turf/open/floor/iron,
+/area/service/hydroponics)
"pEu" = (
/obj/structure/table/wood,
/obj/item/toy/prize/honk{
@@ -57005,6 +57756,13 @@
},
/turf/open/floor/iron/dark,
/area/security/office)
+"pGd" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 1
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"pGf" = (
/obj/structure/cable,
/turf/open/floor/wood{
@@ -57101,6 +57859,17 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/hallway/primary/central)
+"pJo" = (
+/obj/machinery/light_switch{
+ pixel_x = -26
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/effect/landmark/start/hangover,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"pJq" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -57404,14 +58173,6 @@
/obj/machinery/vending/wardrobe/chap_wardrobe,
/turf/open/floor/iron/grimy,
/area/service/chapel/office)
-"pOL" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 8
- },
-/obj/machinery/duct,
-/turf/open/floor/iron/white,
-/area/medical/medbay/central)
"pOT" = (
/obj/machinery/airlock_sensor/incinerator_toxmix{
pixel_x = -24
@@ -58335,6 +59096,7 @@
/obj/machinery/power/emitter,
/turf/open/floor/plating,
/area/engineering/main)
+<<<<<<< HEAD
"qgB" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/bar{
@@ -58348,9 +59110,10 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/start/hangover,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"qgI" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue,
@@ -58515,12 +59278,15 @@
/obj/structure/cable,
/turf/open/floor/carpet,
/area/service/chapel/main)
+<<<<<<< HEAD
"qiy" = (
+/obj/structure/grille,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"qiB" = (
/obj/machinery/camera{
c_tag = "Aft Primary Hallway - Fore";
@@ -59051,6 +59817,16 @@
/obj/item/cartridge/lawyer,
/turf/open/floor/wood,
/area/service/lawoffice)
+"qtc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/effect/landmark/event_spawn,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"qti" = (
/obj/item/storage/box/lights/mixed,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -59874,6 +60650,7 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron,
/area/cargo/sorting)
+<<<<<<< HEAD
"qFc" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -59881,9 +60658,10 @@
},
/obj/effect/landmark/start/paramedic,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"qFd" = (
/obj/structure/table,
/obj/item/folder/red{
@@ -61937,10 +62715,12 @@
},
/turf/open/floor/iron,
/area/hallway/primary/port)
+<<<<<<< HEAD
"rmw" = (
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"rmx" = (
/obj/structure/table/wood,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -62625,6 +63405,22 @@
/obj/item/electropack,
/turf/open/floor/engine,
/area/science/xenobiology)
+"rvD" = (
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 6
+ },
+/obj/item/cigbutt{
+ pixel_y = 7
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/maintenance/starboard)
"rwl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible{
dir = 8
@@ -62926,6 +63722,15 @@
"rAF" = (
/turf/closed/wall/r_wall,
/area/medical/chemistry)
+"rAU" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"rAV" = (
/turf/open/floor/iron/dark,
/area/service/chapel/main)
@@ -63023,15 +63828,17 @@
},
/turf/open/floor/iron/dark,
/area/science/robotics/lab)
+<<<<<<< HEAD
"rBS" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/medbay/central)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"rCr" = (
/obj/machinery/light,
/obj/effect/turf_decal/tile/red{
@@ -63116,6 +63923,7 @@
},
/turf/open/floor/iron,
/area/engineering/main)
+<<<<<<< HEAD
"rEt" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -63125,9 +63933,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"rEC" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -63261,6 +64070,16 @@
},
/turf/open/floor/iron/white,
/area/security/prison)
+"rIg" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/item/cigbutt{
+ pixel_x = -6;
+ pixel_y = -4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/maintenance/starboard)
"rIv" = (
/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{
dir = 4
@@ -63430,6 +64249,22 @@
initial_gas_mix = "TEMP=2.7"
},
/area/space/nearstation)
+"rLx" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/bounty_board{
+ dir = 1;
+ pixel_y = -32
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"rLz" = (
/obj/structure/window/reinforced{
dir = 8
@@ -63530,6 +64365,7 @@
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
/area/space/nearstation)
+<<<<<<< HEAD
"rNg" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -63538,9 +64374,10 @@
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"rNi" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -64155,13 +64992,15 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/science/research)
+<<<<<<< HEAD
"rUY" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"rVa" = (
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
dir = 4
@@ -64182,6 +65021,20 @@
},
/turf/open/floor/iron/dark,
/area/science/robotics/lab)
+"rVh" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/service/bar)
"rVj" = (
/obj/machinery/light{
dir = 8
@@ -64339,6 +65192,7 @@
/obj/effect/turf_decal/siding,
/turf/open/floor/iron,
/area/science/lab)
+<<<<<<< HEAD
"rXD" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
@@ -64354,9 +65208,10 @@
pixel_x = -26;
pixel_y = -26
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"rXN" = (
/obj/machinery/rnd/production/protolathe/department/science,
/obj/machinery/light,
@@ -64444,6 +65299,20 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"san" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/plating{
+ icon_state = "platingdmg3"
+ },
+/area/hallway/secondary/service)
"sar" = (
/obj/structure/cable,
/turf/open/floor/plating{
@@ -64851,13 +65720,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/medical/patients_rooms)
+<<<<<<< HEAD
"sgy" = (
/obj/effect/turf_decal/trimline/blue/filled/warning{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"sgX" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -65596,6 +66467,7 @@
},
/turf/open/floor/iron,
/area/engineering/atmos)
+<<<<<<< HEAD
"sry" = (
/obj/effect/turf_decal/tile/bar{
dir = 1
@@ -65607,9 +66479,10 @@
dir = 4
},
/obj/effect/landmark/start/hangover,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"srI" = (
/obj/item/retractor,
/obj/item/hemostat{
@@ -66528,6 +67401,7 @@
},
/turf/open/floor/iron/white,
/area/science/cytology)
+<<<<<<< HEAD
"sHL" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock{
@@ -66539,9 +67413,10 @@
/obj/structure/disposalpipe/segment,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"sIe" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -67432,6 +68307,7 @@
/obj/effect/landmark/start/hangover/closet,
/turf/open/floor/iron/dark,
/area/commons/fitness/recreation)
+<<<<<<< HEAD
"sXM" = (
/obj/structure/cable,
/obj/effect/turf_decal/stripes/line{
@@ -67440,9 +68316,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"sXP" = (
/obj/effect/turf_decal/bot,
/obj/machinery/light/small{
@@ -67941,7 +68818,11 @@
},
/turf/open/floor/iron/dark,
/area/commons/fitness/recreation)
+<<<<<<< HEAD
"tfD" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
/obj/structure/reagent_dispensers/watertank/high,
/obj/item/reagent_containers/glass/bucket,
/obj/effect/turf_decal/stripes/line,
@@ -67950,6 +68831,8 @@
},
/turf/open/floor/iron,
/area/service/hydroponics)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"tfK" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -68097,6 +68980,15 @@
},
/turf/open/floor/iron/airless/solarpanel,
/area/solars/port/aft)
+"tid" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/medbay/central)
"tig" = (
/obj/machinery/door/window/northleft{
dir = 8;
@@ -68642,6 +69534,16 @@
},
/turf/open/floor/iron,
/area/science/xenobiology)
+"trj" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/hallway/secondary/service)
"tru" = (
/obj/machinery/computer/warrant{
dir = 1
@@ -69358,6 +70260,17 @@
/obj/effect/turf_decal/siding/yellow,
/turf/open/floor/iron,
/area/hallway/primary/starboard)
+"tFj" = (
+/obj/item/trash/candy,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/maintenance/starboard)
"tFm" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/yellow{
@@ -69728,6 +70641,13 @@
/obj/structure/cable,
/turf/open/floor/wood,
/area/command/heads_quarters/hos)
+"tKW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"tKZ" = (
/obj/machinery/chem_master/condimaster{
name = "CondiMaster Neo"
@@ -69896,6 +70816,14 @@
/obj/structure/closet/secure_closet/personal/patient,
/turf/open/floor/iron/white,
/area/medical/patients_rooms)
+"tNX" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/maintenance/fore)
"tNZ" = (
/obj/item/storage/fancy/candle_box{
pixel_y = 5
@@ -71308,13 +72236,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/hallway/primary/starboard)
-"ulQ" = (
-/obj/effect/turf_decal/trimline/blue/filled/corner{
- dir = 1
- },
-/obj/machinery/duct,
-/turf/open/floor/iron/white,
-/area/medical/treatment_center)
"uml" = (
/obj/structure/chair,
/obj/effect/landmark/start/assistant,
@@ -71648,6 +72569,12 @@
},
/turf/open/floor/iron/dark,
/area/science/mixing)
+"uqv" = (
+/obj/structure/cable,
+/obj/effect/landmark/start/hangover,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"uqB" = (
/obj/effect/landmark/xeno_spawn,
/obj/item/soap/deluxe,
@@ -71687,6 +72614,17 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/construction/storage_wing)
+"urg" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"uro" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
@@ -71987,15 +72925,17 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/science/research)
+<<<<<<< HEAD
"uvE" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/maintenance/starboard)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"uvH" = (
/obj/machinery/airalarm{
dir = 4;
@@ -72799,14 +73739,6 @@
/obj/machinery/power/apc/auto_name/west,
/turf/open/floor/iron/kitchen_coldroom/freezerfloor,
/area/medical/coldroom)
-"uLs" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 6
- },
-/obj/structure/grille,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
"uLC" = (
/obj/structure/window/reinforced{
dir = 4
@@ -73243,6 +74175,7 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron,
/area/construction/storage_wing)
+<<<<<<< HEAD
"uTJ" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -73254,9 +74187,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 6
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/service/bar)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"uTM" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood,
@@ -73418,6 +74352,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/ai)
+"uVa" = (
+/obj/structure/sign/poster/random{
+ pixel_y = -32
+ },
+/obj/structure/cable,
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/hallway/secondary/service)
"uVD" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -73588,14 +74530,16 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/engineering/main)
+<<<<<<< HEAD
"uYA" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 9
},
/obj/effect/landmark/start/medical_doctor,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"uYE" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -73675,14 +74619,16 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/cargo/warehouse)
+<<<<<<< HEAD
"uZm" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/engineering/main)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"uZn" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/firealarm{
@@ -73757,12 +74703,6 @@
/obj/machinery/nanite_chamber,
/turf/open/floor/circuit/green,
/area/science/nanite)
-"vaC" = (
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide{
- valve_open = 1
- },
-/turf/open/floor/engine/n2o,
-/area/engineering/atmos)
"vaD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -73840,14 +74780,24 @@
},
/turf/open/floor/engine,
/area/engineering/supermatter/room)
+<<<<<<< HEAD
"vbD" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/window/reinforced{
- dir = 8
+/obj/effect/turf_decal/bot,
+/obj/structure/sink{
+ pixel_y = 22
},
-/obj/structure/reagent_dispensers/plumbed,
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron,
/area/service/hydroponics)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"vct" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
@@ -74706,6 +75656,12 @@
},
/turf/open/floor/iron/white,
/area/security/brig)
+"vsw" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"vsE" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -74781,6 +75737,23 @@
},
/turf/open/floor/iron/dark,
/area/command/gateway)
+"vud" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 10
+ },
+/obj/effect/turf_decal/trimline/brown/warning{
+ dir = 6
+ },
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/structure/closet/secure_closet/freezer/kitchen,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"vuS" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 4
@@ -75241,6 +76214,11 @@
/obj/structure/disposalpipe/trunk,
/turf/open/floor/iron/dark,
/area/medical/morgue)
+"vDk" = (
+/obj/structure/cable,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/medbay/central)
"vDl" = (
/obj/structure/lattice,
/obj/item/tail_pin,
@@ -75408,6 +76386,7 @@
},
/turf/open/floor/iron,
/area/cargo/warehouse)
+<<<<<<< HEAD
"vFQ" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/trimline/blue/filled/warning{
@@ -75419,9 +76398,10 @@
pixel_y = 26
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"vGb" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -76095,6 +77075,21 @@
/obj/effect/turf_decal/trimline/brown/filled/line,
/turf/open/floor/iron,
/area/hallway/primary/central)
+"vSQ" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/engineering/main)
"vST" = (
/obj/structure/reagent_dispensers/peppertank{
pixel_x = 30
@@ -76311,16 +77306,16 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+<<<<<<< HEAD
"vVk" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/obj/structure/cable,
-/obj/structure/reagent_dispensers/plumbed{
- dir = 8
- },
/turf/open/floor/iron,
/area/engineering/main)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"vVl" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 5
@@ -76406,6 +77401,30 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
/turf/open/floor/iron,
/area/engineering/atmos)
+"vXj" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/button/door{
+ id = "kitchen_service";
+ name = "Service Shutter Control";
+ pixel_x = -24;
+ pixel_y = -24;
+ req_access_txt = "28"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light_switch{
+ pixel_x = -34;
+ pixel_y = -23
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"vXl" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 5
@@ -77123,6 +78142,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/ai_monitored/command/storage/eva)
+"wjS" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"wkj" = (
/turf/open/floor/iron/dark,
/area/engineering/atmos)
@@ -77244,6 +78270,7 @@
/obj/machinery/iv_drip,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+<<<<<<< HEAD
"wli" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue,
@@ -77256,9 +78283,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"wlz" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -77461,6 +78489,20 @@
/obj/structure/chair/comfy/brown,
/turf/open/floor/engine/cult,
/area/service/library)
+"wqd" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/trimline/blue/filled/warning{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/machinery/light_switch{
+ pixel_x = 21;
+ pixel_y = 26
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"wqm" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/obj/effect/turf_decal/tile/neutral{
@@ -77478,6 +78520,15 @@
},
/turf/open/floor/iron/dark,
/area/security/execution/education)
+"wqv" = (
+/obj/structure/reagent_dispensers/watertank/high,
+/obj/item/reagent_containers/glass/bucket,
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/service/hydroponics)
"wqH" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
@@ -77872,6 +78923,15 @@
},
/turf/open/floor/iron,
/area/service/bar)
+"wyd" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"wyn" = (
/obj/structure/table/optable,
/obj/effect/turf_decal/tile/blue,
@@ -78647,6 +79707,21 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/carpet,
/area/command/heads_quarters/hop)
+"wMX" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"wNe" = (
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -78812,17 +79887,17 @@
},
/turf/open/floor/iron,
/area/engineering/break_room)
+<<<<<<< HEAD
"wPm" = (
/obj/item/trash/candy,
/obj/machinery/light{
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 4
- },
/turf/open/floor/iron,
/area/maintenance/starboard)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"wPX" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -78867,6 +79942,14 @@
"wQA" = (
/turf/closed/wall/r_wall,
/area/science/mixing/chamber)
+"wQD" = (
+/obj/structure/urinal{
+ pixel_y = 29
+ },
+/obj/effect/landmark/start/hangover,
+/obj/machinery/duct,
+/turf/open/floor/iron/freezer,
+/area/commons/toilet/restrooms)
"wQG" = (
/obj/structure/sign/directions/security{
dir = 1;
@@ -78894,6 +79977,7 @@
/obj/item/storage/lockbox/medal,
/turf/open/floor/wood,
/area/command/heads_quarters/captain/private)
+<<<<<<< HEAD
"wQY" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -78907,9 +79991,10 @@
/obj/item/cigbutt{
pixel_y = 7
},
-/obj/structure/cable,
/turf/open/floor/iron,
/area/maintenance/starboard)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"wQZ" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -79077,6 +80162,19 @@
},
/turf/closed/wall,
/area/service/bar)
+"wUd" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/structure/reagent_dispensers/plumbed/storage,
+/turf/open/floor/iron/white,
+/area/medical/chemistry)
"wUh" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -79247,6 +80345,19 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
+"wYa" = (
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/cafeteria,
+/area/service/kitchen)
"wYi" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 6
@@ -79454,11 +80565,6 @@
/obj/structure/cable,
/turf/open/floor/grass,
/area/security/prison)
-"xbU" = (
-/obj/structure/cable,
-/obj/machinery/duct,
-/turf/open/floor/iron/white,
-/area/medical/medbay/central)
"xca" = (
/obj/structure/window/reinforced{
dir = 4
@@ -79524,6 +80630,7 @@
},
/turf/open/floor/iron/dark,
/area/ai_monitored/aisat/exterior)
+<<<<<<< HEAD
"xcw" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -79531,9 +80638,10 @@
pixel_x = -6;
pixel_y = -4
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/maintenance/starboard)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"xcA" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -79867,6 +80975,7 @@
icon_state = "platingdmg2"
},
/area/maintenance/starboard)
+<<<<<<< HEAD
"xip" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -79876,11 +80985,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"xiC" = (
/obj/machinery/suit_storage_unit/cmo,
/obj/machinery/light{
@@ -80066,13 +81176,6 @@
},
/turf/open/floor/carpet,
/area/service/library)
-"xlt" = (
-/obj/effect/turf_decal/trimline/blue/filled/corner{
- dir = 4
- },
-/obj/machinery/duct,
-/turf/open/floor/iron/white,
-/area/medical/treatment_center)
"xly" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -80873,6 +81976,13 @@
},
/turf/open/floor/iron,
/area/cargo/storage)
+"xzZ" = (
+/obj/effect/turf_decal/trimline/blue/filled/warning{
+ dir = 4
+ },
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"xAf" = (
/obj/machinery/shower{
dir = 4
@@ -80918,6 +82028,7 @@
},
/turf/open/floor/iron,
/area/hallway/primary/central)
+<<<<<<< HEAD
"xAO" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -80934,9 +82045,10 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"xBj" = (
/obj/structure/sink{
dir = 4;
@@ -81439,6 +82551,27 @@
},
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+"xKo" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/door/firedoor,
+/obj/structure/cable,
+/obj/machinery/door/airlock/medical/glass{
+ name = "Primary Treatment Centre";
+ req_access_txt = "5"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/duct,
+/turf/open/floor/iron/white,
+/area/medical/treatment_center)
"xKw" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 10
@@ -81831,6 +82964,7 @@
/mob/living/simple_animal/pet/cat/runtime,
/turf/open/floor/iron/dark,
/area/command/heads_quarters/cmo)
+<<<<<<< HEAD
"xPU" = (
/obj/effect/turf_decal/tile/bar{
dir = 1
@@ -81841,9 +82975,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"xQE" = (
/obj/structure/table,
/obj/machinery/cell_charger,
@@ -81884,6 +83019,7 @@
dir = 1
},
/area/service/chapel/main)
+<<<<<<< HEAD
"xRd" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 1
@@ -81892,9 +83028,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 10
},
-/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/medical/treatment_center)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"xRe" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/red,
@@ -82562,12 +83699,14 @@
/obj/item/plant_analyzer,
/turf/open/floor/grass,
/area/security/prison)
+<<<<<<< HEAD
"ybT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/commons/toilet/restrooms)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"ybV" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/reinforced,
@@ -82802,6 +83941,7 @@
"yfL" = (
/turf/closed/wall,
/area/ai_monitored/command/storage/eva)
+<<<<<<< HEAD
"yga" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -82809,9 +83949,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/duct,
/turf/open/floor/iron,
/area/hallway/secondary/service)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"ygg" = (
/turf/open/floor/iron/white,
/area/science/cytology)
@@ -82831,11 +83972,13 @@
},
/turf/open/floor/carpet,
/area/command/bridge)
+<<<<<<< HEAD
"ygx" = (
/obj/effect/landmark/start/cook,
-/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/service/kitchen)
+=======
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
"ygB" = (
/obj/effect/landmark/event_spawn,
/obj/structure/cable,
@@ -99639,8 +100782,13 @@ diy
dux
xuA
reI
-uLs
+<<<<<<< HEAD
+ioa
qiy
+=======
+dNh
+nVS
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
wKI
dux
klh
@@ -102724,8 +103872,13 @@ dux
fSW
cdi
dux
-dyw
-aaR
+<<<<<<< HEAD
+cdl
+puR
+=======
+eKh
+urg
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
bXK
cjA
cXe
@@ -102981,8 +104134,13 @@ dux
dux
dux
dux
+<<<<<<< HEAD
dyw
-aaR
+puR
+=======
+eKh
+urg
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
mRw
mRw
mRw
@@ -103239,7 +104397,7 @@ scQ
stQ
tbY
stQ
-aJl
+kpt
mRw
iYO
iYO
@@ -103495,14 +104653,19 @@ bZS
mVW
cdk
ceu
-ogV
+<<<<<<< HEAD
+slf
sXM
+=======
+bUf
+fBU
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
mRw
ojF
-uYA
-xRd
-omL
-duX
+nCO
+jxU
+wyd
+hQh
mQW
fBL
pfE
@@ -103753,10 +104916,14 @@ akM
gox
dux
dux
-ezL
+mlo
mRw
wkY
-fsw
+<<<<<<< HEAD
+oxQ
+=======
+wjS
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
rKP
xKj
xly
@@ -104010,10 +105177,14 @@ gDq
uLp
mRw
knk
-wli
+wMX
mRw
moP
-ulQ
+<<<<<<< HEAD
+jGt
+=======
+pGd
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
llx
bJX
peF
@@ -104267,10 +105438,10 @@ hIT
dvE
jQk
xPf
-gAM
-mkr
-vFQ
-qFc
+mtZ
+xKo
+wqd
+aLe
nhN
sKc
dcF
@@ -104527,7 +105698,11 @@ gsG
gbI
mRw
qne
-xlt
+<<<<<<< HEAD
+yiv
+=======
+haF
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
llx
fTG
eiy
@@ -104784,7 +105959,11 @@ gsG
pwW
mRw
wkY
-fsw
+<<<<<<< HEAD
+oxQ
+=======
+wjS
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
hks
pzK
jAC
@@ -105041,9 +106220,9 @@ klL
muK
mRw
ojF
-ldZ
-jBz
-iyC
+duA
+cjq
+vsw
rLD
eHE
mAI
@@ -105300,7 +106479,7 @@ mRw
iYO
iYO
fem
-sgy
+xzZ
yjF
uFV
iYO
@@ -105557,7 +106736,7 @@ mRw
mRw
mRw
iRL
-dtK
+flj
mId
iRL
mRw
@@ -105814,7 +106993,7 @@ dQH
qYQ
ljU
rWs
-rBS
+tid
myL
lXD
utw
@@ -106069,9 +107248,15 @@ tRl
myJ
joR
cvr
-pOL
-xbU
-xbU
+<<<<<<< HEAD
+rGW
+cvr
+cvr
+=======
+bEA
+vDk
+vDk
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
mAJ
cqj
aTX
@@ -106849,7 +108034,7 @@ qTT
leX
uUe
rAF
-cvu
+lOZ
czX
czX
czX
@@ -107106,7 +108291,7 @@ msZ
cuX
lAK
rAF
-cvv
+wUd
cmB
cmB
cmB
@@ -116289,8 +117474,13 @@ uZh
tgv
xmG
tZK
+<<<<<<< HEAD
azY
-eto
+epi
+=======
+mFR
+tNX
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
wpL
kKj
wpL
@@ -116547,13 +117737,13 @@ tZK
tZK
tZK
aGE
-iKw
-aCz
-oUE
-mLL
-mma
-jDK
-rmw
+dgZ
+mHI
+uqv
+hzD
+hqf
+pJo
+ncP
eEk
oQr
eGq
@@ -116583,7 +117773,7 @@ iEa
jKO
lde
hmF
-uTJ
+rVh
kPe
dWv
uMl
@@ -116806,7 +117996,7 @@ qoz
kDL
ghT
wpL
-hrT
+hqj
xDa
ksU
ryL
@@ -116840,7 +118030,7 @@ otW
dOt
lde
dNO
-ouO
+cEL
cSs
xEu
uRF
@@ -117063,7 +118253,7 @@ wpL
wpL
wpL
wpL
-hrT
+hqj
iWX
wpL
wpL
@@ -117097,7 +118287,7 @@ pyC
bgW
ovm
tVK
-bya
+ehE
cuY
xZT
uRF
@@ -117320,7 +118510,7 @@ iTF
viq
iTF
wpL
-mQO
+wQD
jKS
cZw
dTc
@@ -117573,11 +118763,11 @@ aub
aje
ahd
wpL
-cQZ
-odg
-lUo
-eVa
-ybT
+piL
+gjr
+iMh
+lks
+mGe
oOj
caB
wpL
@@ -118136,8 +119326,8 @@ iEU
bsZ
fla
kxC
-dIm
-eEl
+hqm
+eto
xyN
khc
ovt
@@ -118383,18 +119573,23 @@ sFA
mio
vlj
voI
-qgB
-jgt
-ori
-rNg
-jFf
-sHL
-eFm
-xAO
+kTR
+nwr
+rAU
+dAh
+vXj
+cHM
+gco
+bIu
xVl
quV
+<<<<<<< HEAD
vbD
+eto
+=======
+pEn
jpR
+>>>>>>> a924226b509 (React optimization + event based processing for tanks, canisters and pipelines (#58418))
iKa
daK
wxu
@@ -118640,17 +119835,17 @@ kVB
mio
jKO
tnM
-xPU
+wYa
hEe
eSU
-rUY
+tKW
upb
rnj
bNx
-ope
+mwA
bdr
xVl
-tfD
+wqv
jpR
xGY
xIQ
@@ -118897,14 +120092,14 @@ ukU
hHy
oPe
cPo
-xPU
+wYa
dua
pXf
-ygx
+pxg
nWi
ruR
bQI
-xip
+san
fCX
xVl
ptZ
@@ -119154,15 +120349,15 @@ mio
mio
oPe
tnM
-xPU
+wYa
lLl
ggm
-dze
+bYE
tKZ
ruR
vaY
-aOZ
-yga
+cig
+qtc
bNE
quV
cVw
@@ -119411,7 +120606,7 @@ edf
mio
oPe
cXN
-sry
+aEP
nIf
sZL
pWo
@@ -119419,7 +120614,7 @@ hls
ruR
mum
jVF
-ndn
+iCr
xom
quV
qhM
@@ -119668,7 +120863,7 @@ oSR
skH
pRe
hdG
-iWa
+hbg
hJU
tDg
qMr
@@ -119676,7 +120871,7 @@ qMr
qMr
qMr
qMr
-rEt
+pCE
ofI
quV
eSO
@@ -119925,7 +121120,7 @@ qpu
qFP
sSX
ruR
-lvC
+gdL
hzQ
wju
oVj
@@ -119933,7 +121128,7 @@ sVy
rsp
iOA
qMr
-jxK
+trj
fLZ
quV
dYj
@@ -120182,15 +121377,15 @@ sER
jXc
fjH
eLr
-cYc
-dnA
-rXD
-bXH
-hGt
+vud
+fsB
+iKq
+mHq
+eGO
jHx
thR
qMr
-ows
+rLx
xVl
quV
gJo
@@ -120447,7 +121642,7 @@ vmJ
rCK
xli
qMr
-bTa
+btv
xVl
tRw
wIj
@@ -120704,7 +121899,7 @@ eLr
xdd
nFx
qMr
-bTb
+uVa
xVl
dKp
sqd
@@ -120961,7 +122156,7 @@ eLr
pBt
oQY
qMr
-bTc
+nje
xVl
jHk
asH
@@ -121218,7 +122413,7 @@ eLr
xaF
xwA
qMr
-bvd
+mXn
xVl
qOx
vLd
@@ -121475,7 +122670,7 @@ eLr
tvI
qMr
qMr
-pmn
+jYM
alq
quV
pPT
@@ -121731,8 +122926,8 @@ mOH
jXf
cXd
dYF
-wPm
-xcw
+tFj
+rIg
alq
mnv
oDz
@@ -121987,9 +123182,9 @@ alq
alq
alq
euJ
-wQY
-euK
-uvE
+rvD
+jZt
+nhu
iOh
sRZ
evA
@@ -122245,7 +123440,7 @@ rrQ
gdD
kfC
wjG
-pcT
+hHN
lGw
alq
bVC
@@ -124275,8 +125470,8 @@ mlE
gxu
ygI
eYG
-aIB
-uZm
+vSQ
+eXp
wBk
bDQ
lKO
@@ -124533,7 +125728,7 @@ beW
lhW
izr
lZK
-vVk
+eWl
pWb
lhW
dus
@@ -128922,7 +130117,7 @@ jxI
jxI
deP
beJ
-vaC
+opQ
beJ
deP
lSa
diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm
index 7bf5b85e7e0..18289d0e7ed 100644
--- a/code/__DEFINES/reactions.dm
+++ b/code/__DEFINES/reactions.dm
@@ -56,3 +56,8 @@
#define STIMULUM_RESEARCH_AMOUNT 50
#define PLUOXIUM_TEMP_CAP 200
+
+#define PRIORITY_PRE_FORMATION 1
+#define PRIORITY_FORMATION 2
+#define PRIORITY_POST_FORMATION 3
+#define PRIORITY_FIRE 4
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index d6082e05019..d450e62eaa5 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -77,6 +77,7 @@ SUBSYSTEM_DEF(air)
/datum/controller/subsystem/air/Initialize(timeofday)
map_loading = FALSE
gas_reactions = init_gas_reactions()
+
setup_allturfs()
setup_atmos_machinery()
setup_pipenets()
@@ -253,8 +254,10 @@ SUBSYSTEM_DEF(air)
while(currentrun.len)
var/obj/machinery/M = currentrun[currentrun.len]
currentrun.len--
- if(!M || (M.process_atmos() == PROCESS_KILL))
- atmos_machinery.Remove(M)
+ if(!M)
+ atmos_machinery -= M
+ if(M.process_atmos() == PROCESS_KILL)
+ stop_processing_machine(M)
if(MC_TICK_CHECK)
return
@@ -609,26 +612,25 @@ GLOBAL_LIST_EMPTY(colored_images)
/**
* Adds a given machine to the processing system for SSAIR_ATMOSMACHINERY processing.
*
- * This should be fast, so no error checking is done.
- * If you start adding in things you shouldn't, you'll cause runtimes every 2 seconds for every
- * object you added. Do not use irresponsibly.
* Arguments:
* * machine - The machine to start processing. Can be any /obj/machinery.
*/
/datum/controller/subsystem/air/proc/start_processing_machine(obj/machinery/machine)
+ if(machine.atmos_processing)
+ return
+ machine.atmos_processing = TRUE
atmos_machinery += machine
/**
* Removes a given machine to the processing system for SSAIR_ATMOSMACHINERY processing.
*
- * This should be fast, so no error checking is done.
- * If you call this proc when your machine isn't processing, you're likely attempting to
- * remove something that isn't in a list with over 1000 objects, twice. Do not use
- * irresponsibly.
* Arguments:
* * machine - The machine to stop processing.
*/
/datum/controller/subsystem/air/proc/stop_processing_machine(obj/machinery/machine)
+ if(!machine.atmos_processing)
+ return
+ machine.atmos_processing = FALSE
atmos_machinery -= machine
// If we're currently processing atmos machines, there's a chance this machine is in
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index bf26c35f307..6e0b30aed09 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -124,7 +124,8 @@
/datum/objective_item/steal/plasma/check_special_completion(obj/item/tank/T)
var/target_amount = text2num(name)
var/found_amount = 0
- found_amount += T.air_contents.gases[/datum/gas/plasma] ? T.air_contents.gases[/datum/gas/plasma][MOLES] : 0
+ var/datum/gas_mixture/mix = T.return_air()
+ found_amount += mix.gases[/datum/gas/plasma] ? mix.gases[/datum/gas/plasma][MOLES] : 0
return found_amount>=target_amount
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 3e6e381e9b5..f41033d60dc 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -128,6 +128,8 @@
// For storing and overriding ui id
var/tgui_id // ID of TGUI interface
+ ///Is this machine currently in the atmos machinery queue?
+ var/atmos_processing = FALSE
/obj/machinery/Initialize()
if(!armor)
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index 65f32aadcbf..3eb950b4550 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -23,12 +23,12 @@
var/obj/item/tank/internals/plasma/plasma_tank = new(ttv)
var/obj/item/tank/internals/oxygen/oxygen_tank = new(ttv)
- var/datum/gas_mixture/plasma_mix = plasma_tank.air_contents
+ var/datum/gas_mixture/plasma_mix = plasma_tank.return_air()
plasma_mix.assert_gas(/datum/gas/plasma)
plasma_mix.gases[/datum/gas/plasma][MOLES] = pressure_p*plasma_mix.volume/(R_IDEAL_GAS_EQUATION*temp_p)
plasma_mix.temperature = temp_p
- var/datum/gas_mixture/oxygen_mix = oxygen_tank.air_contents
+ var/datum/gas_mixture/oxygen_mix = oxygen_tank.return_air()
oxygen_mix.assert_gas(/datum/gas/oxygen)
oxygen_mix.gases[/datum/gas/oxygen][MOLES] = pressure_o*oxygen_mix.volume/(R_IDEAL_GAS_EQUATION*temp_o)
oxygen_mix.temperature = temp_o
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 0de5775ee96..72ae2acaa7b 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -135,29 +135,34 @@
/obj/item/transfer_valve/proc/merge_gases(datum/gas_mixture/target, change_volume = TRUE)
var/target_self = FALSE
- if(!target || (target == tank_one.air_contents))
- target = tank_two.air_contents
- if(target == tank_two.air_contents)
+ var/datum/gas_mixture/mix_one = tank_one.return_air()
+ var/datum/gas_mixture/mix_two = tank_two.return_air()
+ if(!target || (target == mix_one))
+ target = mix_two
+ if(target == mix_two)
target_self = TRUE
if(change_volume)
if(!target_self)
target.volume += tank_two.volume
- target.volume += tank_one.air_contents.volume
+ target.volume += mix_one.volume
var/datum/gas_mixture/temp
- temp = tank_one.air_contents.remove_ratio(1)
+ temp = mix_one.remove_ratio(1)
target.merge(temp)
if(!target_self)
- temp = tank_two.air_contents.remove_ratio(1)
+ temp = mix_two.remove_ratio(1)
target.merge(temp)
/obj/item/transfer_valve/proc/split_gases()
if (!valve_open || !tank_one || !tank_two)
return
- var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
+ var/datum/gas_mixture/mix_one = tank_one.return_air()
+ var/datum/gas_mixture/mix_two = tank_two.return_air()
+
+ var/volume_ratio = mix_one.volume/mix_two.volume
var/datum/gas_mixture/temp
- temp = tank_two.air_contents.remove_ratio(ratio1)
- tank_one.air_contents.merge(temp)
- tank_two.air_contents.volume -= tank_one.air_contents.volume
+ temp = mix_two.remove_ratio(volume_ratio)
+ mix_one.merge(temp)
+ mix_two.volume -= mix_one.volume
/*
Exadv1: I know this isn't how it's going to work, but this was just to check
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index ef448bbafef..11738958a9d 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -215,12 +215,14 @@
/obj/item/flamethrower/proc/default_ignite(turf/target, release_amount = 0.05)
//TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this...
//Transfer 5% of current tank air contents to turf
- var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount)
+ var/datum/gas_mixture/tank_mix = ptank.return_air()
+ var/datum/gas_mixture/air_transfer = tank_mix.remove_ratio(release_amount)
+
if(air_transfer.gases[/datum/gas/plasma])
- air_transfer.gases[/datum/gas/plasma][MOLES] *= 5
+ air_transfer.gases[/datum/gas/plasma][MOLES] *= 5 //Suffering
target.assume_air(air_transfer)
//Burn it based on transfered gas
- target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500)
+ target.hotspot_expose((tank_mix.temperature*2) + 380,500)
//location.hotspot_expose(1000,500,1)
SSair.add_to_active(target)
@@ -264,8 +266,9 @@
/obj/item/flamethrower/proc/instant_refill()
if(ptank)
- ptank.air_contents.assert_gas(/datum/gas/plasma)
- ptank.air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*ptank.volume/(R_IDEAL_GAS_EQUATION*T20C)
+ var/datum/gas_mixture/tank_mix = ptank.return_air()
+ tank_mix.assert_gas(/datum/gas/plasma)
+ tank_mix.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*ptank.volume/(R_IDEAL_GAS_EQUATION*T20C)
else
ptank = new /obj/item/tank/internals/plasma/full(src)
update_appearance()
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index f7e491ec029..2415f8b558d 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -156,7 +156,7 @@
if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "You can't bring yourself to fire \the [src]! You don't want to risk harming anyone..." )
return
- if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting))
+ if(tank && !tank.remove_air(gasPerThrow * pressureSetting))
to_chat(user, "\The [src] lets out a weak hiss and doesn't react!")
return
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user))
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index fd8eb07b0be..8d7813ff862 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -77,7 +77,7 @@
if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "You don't want to harm other living beings!")
return
- var/datum/gas_mixture/gasused = tank.air_contents.remove(gasperfist * fisto_setting)
+ var/datum/gas_mixture/gasused = tank.remove_air(gasperfist * fisto_setting)
var/turf/T = get_turf(src)
if(!T)
return
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index 1cefcbd6bb3..6d13d1e8195 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -26,8 +26,9 @@
/obj/item/tank/jetpack/populate_gas()
if(gas_type)
- air_contents.assert_gas(gas_type)
- air_contents.gases[gas_type][MOLES] = ((6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C))
+ var/datum/gas_mixture/our_mix = return_air()
+ our_mix.assert_gas(gas_type)
+ our_mix.gases[gas_type][MOLES] = ((6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C))
/obj/item/tank/jetpack/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/toggle_jetpack))
@@ -100,7 +101,7 @@
turn_off(user)
return
- var/datum/gas_mixture/removed = air_contents.remove(num)
+ var/datum/gas_mixture/removed = remove_air(num)
if(removed.total_moles() < 0.005)
turn_off(user)
return
@@ -196,14 +197,14 @@
slot_flags = null
gas_type = null
full_speed = FALSE
- var/datum/gas_mixture/temp_air_contents
+ var/datum/gas_mixture/tempair_contents
var/obj/item/tank/internals/tank = null
var/mob/living/carbon/human/cur_user
/obj/item/tank/jetpack/suit/Initialize()
. = ..()
STOP_PROCESSING(SSobj, src)
- temp_air_contents = air_contents
+ tempair_contents = air_contents
/obj/item/tank/jetpack/suit/attack_self()
return
@@ -224,14 +225,14 @@
return
var/mob/living/carbon/human/H = user
tank = H.s_store
- air_contents = tank.air_contents
+ air_contents = tank.return_air()
START_PROCESSING(SSobj, src)
cur_user = user
..()
/obj/item/tank/jetpack/suit/turn_off(mob/user)
tank = null
- air_contents = temp_air_contents
+ air_contents = tempair_contents
STOP_PROCESSING(SSobj, src)
cur_user = null
..()
@@ -244,7 +245,8 @@
if(!tank || tank != H.s_store)
turn_off(cur_user)
return
- ..()
+ excited = TRUE
+ return ..()
//Return a jetpack that the mob can use
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index a0bcb731cb4..47a6c327ab8 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -26,7 +26,7 @@
actions_types = list(/datum/action/item_action/set_internals)
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 80, ACID = 30)
integrity_failure = 0.5
- /// The gases this tank contains.
+ /// The gases this tank contains. Don't modify this directly, use return_air() to get it instead
var/datum/gas_mixture/air_contents = null
/// The volume of this tank.
var/volume = 70
@@ -36,6 +36,8 @@
var/distribute_pressure = ONE_ATMOSPHERE
/// Icon state when in a tank holder. Null makes it incompatible with tank holder.
var/tank_holder_icon_state = "holder_generic"
+ ///Used by process() to track if there's a reason to process each tick
+ var/excited = TRUE
/obj/item/tank/ui_action_click(mob/user)
toggle_internals(user)
@@ -107,7 +109,7 @@
. += "The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa."
- var/celsius_temperature = src.air_contents.temperature-T0C
+ var/celsius_temperature = air_contents.temperature-T0C
var/descriptive
if (celsius_temperature < 20)
@@ -205,15 +207,18 @@
distribute_pressure = clamp(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE)
/obj/item/tank/remove_air(amount)
+ START_PROCESSING(SSobj, src)
return air_contents.remove(amount)
/obj/item/tank/return_air()
+ START_PROCESSING(SSobj, src)
return air_contents
/obj/item/tank/return_analyzable_air()
return air_contents
/obj/item/tank/assume_air(datum/gas_mixture/giver)
+ START_PROCESSING(SSobj, src)
air_contents.merge(giver)
handle_tolerances(ASSUME_AIR_DT_FACTOR)
return TRUE
@@ -247,8 +252,14 @@
return
//Allow for reactions
- air_contents.react(src)
- handle_tolerances(delta_time)
+ excited = (excited | air_contents.react(src))
+ excited = (excited | handle_tolerances(delta_time))
+ excited = (excited | leaking)
+
+ if(!excited)
+ STOP_PROCESSING(SSobj, src)
+ excited = FALSE
+
if(QDELETED(src) || !leaking || !air_contents)
return
var/atom/location = loc
@@ -261,6 +272,7 @@
/**
* Handles the minimum and maximum pressure tolerances of the tank.
*
+ * Returns true if it did anything of significance, false otherwise
* Arguments:
* - delta_time: How long has passed between ticks.
*/
@@ -279,7 +291,8 @@
if(pressure >= TANK_LEAK_PRESSURE)
var/pressure_damage_ratio = (pressure - TANK_LEAK_PRESSURE) / (TANK_RUPTURE_PRESSURE - TANK_LEAK_PRESSURE)
take_damage(max_integrity * pressure_damage_ratio * delta_time, BRUTE, BOMB, FALSE, NONE)
- return TRUE
+ return TRUE
+ return FALSE
/// Handles the tank springing a leak.
/obj/item/tank/obj_break(damage_flag)
@@ -288,6 +301,8 @@
return
leaking = TRUE
+ START_PROCESSING(SSobj, src)
+
if(obj_integrity < 0) // So we don't play the alerts while we are exploding or rupturing.
return
visible_message("[src] springs a leak!")
@@ -334,5 +349,6 @@
if(gas_change)
air_contents.garbage_collect()
+ START_PROCESSING(SSobj, src)
#undef ASSUME_AIR_DT_FACTOR
diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm
index 8ca58d9e20a..39c2a726557 100644
--- a/code/game/objects/structures/crates_lockers/crates/critter.dm
+++ b/code/game/objects/structures/crates_lockers/crates/critter.dm
@@ -42,7 +42,7 @@
/obj/structure/closet/crate/critter/return_air()
if(tank)
- return tank.air_contents
+ return tank.return_air()
else
return loc.return_air()
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index 00389085e45..1bbd6fc98ea 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -58,7 +58,8 @@
return
if(I.use_tool(src, user, 0, volume=40))
status = TRUE
- log_bomber(user, "welded a single tank bomb,", src, "| Temp: [bombtank.air_contents.temperature-T0C]")
+ var/datum/gas_mixture/bomb_mix = bombtank.return_air()
+ log_bomber(user, "welded a single tank bomb,", src, "| Temp: [bomb_mix.temperature-T0C]")
to_chat(user, "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.")
add_fingerprint(user)
return TRUE
@@ -145,10 +146,13 @@
return
/obj/item/tank/proc/ignite() //This happens when a bomb is told to explode
- air_contents.assert_gases(/datum/gas/plasma, /datum/gas/oxygen)
- var/fuel_moles = air_contents.gases[/datum/gas/plasma][MOLES] + air_contents.gases[/datum/gas/oxygen][MOLES]/6
- air_contents.garbage_collect()
- var/datum/gas_mixture/bomb_mixture = air_contents.copy()
+ START_PROCESSING(SSobj, src)
+ var/datum/gas_mixture/our_mix = return_air()
+
+ our_mix.assert_gases(/datum/gas/plasma, /datum/gas/oxygen)
+ var/fuel_moles = our_mix.gases[/datum/gas/plasma][MOLES] + our_mix.gases[/datum/gas/oxygen][MOLES]/6
+ our_mix.garbage_collect()
+ var/datum/gas_mixture/bomb_mixture = our_mix.copy()
var/strength = 1
var/turf/ground_zero = get_turf(loc)
@@ -199,7 +203,8 @@
ground_zero.air_update_turf(FALSE, FALSE)
/obj/item/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
- var/datum/gas_mixture/removed = air_contents.remove(air_contents.total_moles())
+ var/datum/gas_mixture/our_mix = return_air()
+ var/datum/gas_mixture/removed = remove_air(our_mix.total_moles())
var/turf/T = get_turf(src)
if(!T)
return
diff --git a/code/modules/atmospherics/Atmospherics.md b/code/modules/atmospherics/Atmospherics.md
index 4fa4722fc13..bce9fdd5f6d 100644
--- a/code/modules/atmospherics/Atmospherics.md
+++ b/code/modules/atmospherics/Atmospherics.md
@@ -391,9 +391,17 @@ This is for the oddballs, the one offs, the half useless things. Things that are
These are the atmos machines you can move around. They interface with connectors to talk to pipelines, and can contain tanks. Not a whole lot more to discuss here.
+## 9. A word on processing
+
+You may have noticed that a large portion of the optimizations we do are focused around not checking to see if we need to do work.
+
+This is essentially what active turfs are built around, and it's a somewhat unfinished project. There's still quite a few things in atmos, mostly machinery, that check each fire to see if they should be doing work. There's a general pattern to solving this sort of thing by the way, centralize the ways a bit of outside code can interact with a "thing", and then when the outside code does something that might warrant processing, start processing.
+
+This attitude needs to be applied to a few large targets, and you may see it crop up when reading through the code. Keep this in mind, and make sure to respect the rules that describe how to work with the object, or things will go to shit.
+
## Appendix A - Glossary
-* *LINDA* - Our environmental gas system, created by Aranclanos, Beautiful in Spanish
+* *LINDA* - Our environmental gas system, created by Aranclanos, allegedly Beautiful in Spanish
* *Naps* - A healthy pastime
* *Gas mixtures* - The datums that store gas information, key to listmos and our underlying method of handling well gas
* *Diffs* - The differences between gasmixes. We want to get rid of these over time, and clump them up with their sources so we don't need to process too many turfs
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 5f1b3fe0ff6..981e78a8f40 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
/datum/gas_mixture/proc/total_moles()
var/cached_gases = gases
TOTAL_MOLES(cached_gases, .)
-
+
/// Checks to see if gas amount exists in mixture.
/// Do NOT use this in code where performance matters!
/// It's better to batch calls to garbage_collect(), especially in places where you're checking many gastypes
@@ -443,52 +443,58 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
return ""
-///Performs various reactions such as combustion or fusion (LOL)
+///Performs various reactions such as combustion and fabrication
///Returns: 1 if any reaction took place; 0 otherwise
/datum/gas_mixture/proc/react(datum/holder)
. = NO_REACTION
var/list/cached_gases = gases
if(!length(cached_gases))
return
- var/list/reactions = list()
- for(var/G in SSair.gas_reactions)
- var/datum/gas_reaction/reaction = G
- if(cached_gases[reaction.major_gas])
- reactions += G
+
+ var/list/pre_formation = list()
+ var/list/mid_formation = list()
+ var/list/post_formation = list()
+ var/list/fires = list()
+ var/list/gas_reactions = SSair.gas_reactions
+ for(var/gas_id in cached_gases)
+ var/list/reaction_set = gas_reactions[gas_id]
+ if(!reaction_set)
+ continue
+ pre_formation += reaction_set[1]
+ mid_formation += reaction_set[2]
+ post_formation += reaction_set[3]
+ fires += reaction_set[4]
+
+ var/list/reactions = pre_formation + mid_formation + post_formation + fires
if(!length(reactions))
return
+ //Fuck you
+ if(cached_gases[/datum/gas/hypernoblium] && cached_gases[/datum/gas/hypernoblium][MOLES] >= REACTION_OPPRESSION_THRESHOLD && temperature > 20)
+ return STOP_REACTIONS
+
reaction_results = new
- //It might be worth looking into updating these after each reaction, but it changes things a lot, so be careful
+ //It might be worth looking into updating these after each reaction, but that makes us care more about order of operations, so be careful
var/temp = temperature
- var/ener = THERMAL_ENERGY(src)
-
reaction_loop:
- for(var/r in reactions)
- var/datum/gas_reaction/reaction = r
+ for(var/datum/gas_reaction/reaction as anything in reactions)
- var/list/min_reqs = reaction.min_requirements
- if( (min_reqs["TEMP"] && temp < min_reqs["TEMP"]) || \
- (min_reqs["ENER"] && ener < min_reqs["ENER"]) || \
- (min_reqs["MAX_TEMP"] && temp > min_reqs["MAX_TEMP"])
- )
+ var/list/reqs = reaction.requirements
+ if((reqs["MIN_TEMP"] && temp < reqs["MIN_TEMP"]) || (reqs["MAX_TEMP"] && temp > reqs["MAX_TEMP"]))
continue
- for(var/id in min_reqs)
- if (id == "TEMP" || id == "ENER" || id == "MAX_TEMP")
+ for(var/id in reqs)
+ if (id == "MIN_TEMP" || id == "MAX_TEMP")
continue
- if(!cached_gases[id] || cached_gases[id][MOLES] < min_reqs[id])
+ if(!cached_gases[id] || cached_gases[id][MOLES] < reqs[id])
continue reaction_loop
//at this point, all requirements for the reaction are satisfied. we can now react()
-
. |= reaction.react(src, holder)
- if (. & STOP_REACTIONS)
- break
- if(.) //If we changed the mix to any degree, or if we stopped reacting
+ if(.) //If we changed the mix to any degree
garbage_collect()
///Takes the amount of the gas you want to PP as an argument
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index c3d08296d89..c4d7dcb5a84 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -1,59 +1,51 @@
//All defines used in reactions are located in ..\__DEFINES\reactions.dm
-/*priority so far, check this list to see what are the numbers used. Please use a different priority for each reaction(higher number are done first)
-miaster = -10 (this should always be under all other fires)
-freonfire = -5
-plasmafire = -4
-h2fire = -3
-tritfire = -2
-halon_o2removal = -1
-nitrous_decomp = 0
-water_vapor = 1
-nitryl_decomp = 21
-pluox_formation = 2
-nitrylformation = 3
-bzformation = 4
-freonformation = 5
-stimformation = 6
-nobliumformation = 7
-zauker_decomp = 8
-healium_formation = 9
-proto_nitrate_formation = 10
-zauker_formation = 11
-halon_formation = 12
-proto_nitrate_response = 13 - 18
-fusion = 19
-metallic_hydrogen = 20
-nobiliumsuppression = INFINITY
-*/
/proc/init_gas_reactions()
- . = list()
+ var/list/priority_reactions = list()
- for(var/r in subtypesof(/datum/gas_reaction))
- var/datum/gas_reaction/reaction = r
+ //Builds a list of gas id to reaction group
+ for(var/gas_id in GLOB.meta_gas_info)
+ priority_reactions[gas_id] = list(
+ PRIORITY_PRE_FORMATION = list(),
+ PRIORITY_FORMATION = list(),
+ PRIORITY_POST_FORMATION = list(),
+ PRIORITY_FIRE = list()
+ )
+
+ for(var/datum/gas_reaction/reaction as anything in subtypesof(/datum/gas_reaction))
if(initial(reaction.exclude))
continue
- reaction = new r
+ reaction = new reaction
var/datum/gas/reaction_key
- for (var/req in reaction.min_requirements)
+ for (var/req in reaction.requirements)
if (ispath(req))
var/datum/gas/req_gas = req
if (!reaction_key || initial(reaction_key.rarity) > initial(req_gas.rarity))
reaction_key = req_gas
reaction.major_gas = reaction_key
- . += reaction
- sortTim(., /proc/cmp_gas_reaction)
+ priority_reactions[reaction_key][reaction.priority_group] += reaction
-/proc/cmp_gas_reaction(datum/gas_reaction/a, datum/gas_reaction/b) // compares lists of reactions by the maximum priority contained within the list
- return b.priority - a.priority
+ //Culls empty gases
+ for(var/gas_id in GLOB.meta_gas_info)
+ var/passed = FALSE
+ for(var/list/priority_grouping in priority_reactions[gas_id])
+ if(length(priority_grouping))
+ passed = TRUE
+ break
+ if(passed)
+ continue
+ priority_reactions[gas_id] = null
+
+ return priority_reactions
/datum/gas_reaction
- //regarding the requirements lists: the minimum or maximum requirements must be non-zero.
+ //regarding the requirements list: the minimum or maximum requirements must be non-zero.
//when in doubt, use MINIMUM_MOLE_COUNT.
- var/list/min_requirements
+ var/list/requirements
var/major_gas //the highest rarity gas used in the reaction.
var/exclude = FALSE //do it this way to allow for addition/removal of reactions midmatch in the future
- var/priority = 100 //lower numbers are checked/react later than higher numbers. if two reactions have the same priority they may happen in either order
+ ///The priority group this reaction is a part of. You can think of these as processing in batches, put your reaction into the one that's most fitting
+ var/priority_group
var/name = "reaction"
var/id = "r"
@@ -65,28 +57,14 @@ nobiliumsuppression = INFINITY
/datum/gas_reaction/proc/react(datum/gas_mixture/air, atom/location)
return NO_REACTION
-/datum/gas_reaction/nobliumsupression
- priority = INFINITY
- name = "Hyper-Noblium Reaction Suppression"
- id = "nobstop"
-
-/datum/gas_reaction/nobliumsupression/init_reqs()
- min_requirements = list(
- /datum/gas/hypernoblium = REACTION_OPPRESSION_THRESHOLD,
- "TEMP" = 20
- )
-
-/datum/gas_reaction/nobliumsupression/react()
- return STOP_REACTIONS
-
//water vapor: puts out fires?
/datum/gas_reaction/water_vapor
- priority = 1
+ priority_group = PRIORITY_POST_FORMATION
name = "Water Vapor"
id = "vapor"
/datum/gas_reaction/water_vapor/init_reqs()
- min_requirements = list(/datum/gas/water_vapor = MOLES_GAS_VISIBLE)
+ requirements = list(/datum/gas/water_vapor = MOLES_GAS_VISIBLE)
/datum/gas_reaction/water_vapor/react(datum/gas_mixture/air, datum/holder)
var/turf/open/location = isturf(holder) ? holder : null
@@ -101,14 +79,14 @@ nobiliumsuppression = INFINITY
//tritium combustion: combustion of oxygen and tritium (treated as hydrocarbons). creates hotspots. exothermic
/datum/gas_reaction/nitrous_decomp
- priority = 0
+ priority_group = PRIORITY_POST_FORMATION
name = "Nitrous Oxide Decomposition"
id = "nitrous_decomp"
/datum/gas_reaction/nitrous_decomp/init_reqs()
- min_requirements = list(
- "TEMP" = N2O_DECOMPOSITION_MIN_ENERGY,
- /datum/gas/nitrous_oxide = MINIMUM_MOLE_COUNT
+ requirements = list(
+ /datum/gas/nitrous_oxide = MINIMUM_MOLE_COUNT,
+ "MIN_TEMP" = N2O_DECOMPOSITION_MIN_ENERGY
)
/datum/gas_reaction/nitrous_decomp/react(datum/gas_mixture/air, datum/holder)
@@ -140,15 +118,15 @@ nobiliumsuppression = INFINITY
//tritium combustion: combustion of oxygen and tritium (treated as hydrocarbons). creates hotspots. exothermic
/datum/gas_reaction/tritfire
- priority = -2 //fire should ALWAYS be last, but tritium fires happen before plasma fires
+ priority_group = PRIORITY_FIRE
name = "Tritium Combustion"
id = "tritfire"
/datum/gas_reaction/tritfire/init_reqs()
- min_requirements = list(
- "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST,
+ requirements = list(
/datum/gas/tritium = MINIMUM_MOLE_COUNT,
- /datum/gas/oxygen = MINIMUM_MOLE_COUNT
+ /datum/gas/oxygen = MINIMUM_MOLE_COUNT,
+ "MIN_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
)
/datum/gas_reaction/tritfire/react(datum/gas_mixture/air, datum/holder)
@@ -202,15 +180,15 @@ nobiliumsuppression = INFINITY
//plasma combustion: combustion of oxygen and plasma (treated as hydrocarbons). creates hotspots. exothermic
/datum/gas_reaction/plasmafire
- priority = -4 //fire should ALWAYS be last, but plasma fires happen after tritium fires
+ priority_group = PRIORITY_FIRE
name = "Plasma Combustion"
id = "plasmafire"
/datum/gas_reaction/plasmafire/init_reqs()
- min_requirements = list(
- "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST,
+ requirements = list(
/datum/gas/plasma = MINIMUM_MOLE_COUNT,
- /datum/gas/oxygen = MINIMUM_MOLE_COUNT
+ /datum/gas/oxygen = MINIMUM_MOLE_COUNT,
+ "MIN_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
)
/datum/gas_reaction/plasmafire/react(datum/gas_mixture/air, datum/holder)
@@ -275,15 +253,15 @@ nobiliumsuppression = INFINITY
//freon reaction (is not a fire yet)
/datum/gas_reaction/freonfire
- priority = -5
+ priority_group = PRIORITY_FIRE
name = "Freon combustion"
id = "freonfire"
/datum/gas_reaction/freonfire/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
/datum/gas/freon = MINIMUM_MOLE_COUNT,
- "TEMP" = FREON_LOWER_TEMPERATURE,
+ "MIN_TEMP" = FREON_LOWER_TEMPERATURE,
"MAX_TEMP" = FREON_MAXIMUM_BURN_TEMPERATURE
)
@@ -324,22 +302,24 @@ nobiliumsuppression = INFINITY
new /obj/item/stack/sheet/hot_ice(location)
energy_released += FIRE_FREON_ENERGY_RELEASED * (freon_burn_rate)
+ . = REACTING
if(energy_released < 0)
var/new_heat_capacity = air.heat_capacity()
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
+ . = REACTING
/datum/gas_reaction/h2fire
- priority = -3 //fire should ALWAYS be last, but tritium fires happen before plasma fires
+ priority_group = PRIORITY_FIRE
name = "Hydrogen Combustion"
id = "h2fire"
/datum/gas_reaction/h2fire/init_reqs()
- min_requirements = list(
- "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST,
+ requirements = list(
/datum/gas/hydrogen = MINIMUM_MOLE_COUNT,
- /datum/gas/oxygen = MINIMUM_MOLE_COUNT
+ /datum/gas/oxygen = MINIMUM_MOLE_COUNT,
+ "MIN_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
)
/datum/gas_reaction/h2fire/react(datum/gas_mixture/air, datum/holder)
@@ -387,16 +367,16 @@ nobiliumsuppression = INFINITY
return cached_results["fire"] ? REACTING : NO_REACTION
/datum/gas_reaction/nitrousformation //formationn of n2o, esothermic, requires bz as catalyst
- priority = 3
+ priority_group = PRIORITY_FORMATION
name = "Nitrous Oxide formation"
id = "nitrousformation"
/datum/gas_reaction/nitrousformation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/oxygen = 10,
/datum/gas/nitrogen = 20,
/datum/gas/bz = 5,
- "TEMP" = 200,
+ "MIN_TEMP" = 200,
"MAX_TEMP" = 250
)
@@ -406,9 +386,11 @@ nobiliumsuppression = INFINITY
var/old_heat_capacity = air.heat_capacity()
var/heat_efficency = min(cached_gases[/datum/gas/oxygen][MOLES], cached_gases[/datum/gas/nitrogen][MOLES])
var/energy_used = heat_efficency * NITROUS_FORMATION_ENERGY
- ASSERT_GAS(/datum/gas/nitrous_oxide, air)
+
if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency * 2 < 0)) //Shouldn't produce gas from nothing.
return NO_REACTION
+
+ ASSERT_GAS(/datum/gas/nitrous_oxide, air)
cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency
cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficency * 2
cached_gases[/datum/gas/nitrous_oxide][MOLES] += heat_efficency
@@ -420,12 +402,12 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/nitryl_decomposition //The decomposition of nitryl. Exothermic. Requires oxygen as catalyst.
- priority = 21
+ priority_group = PRIORITY_PRE_FORMATION
name = "Nitryl Decomposition"
id = "nitryl_decomp"
/datum/gas_reaction/nitryl_decomposition/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
/datum/gas/nitryl = MINIMUM_MOLE_COUNT,
"MAX_TEMP" = 600
@@ -437,9 +419,11 @@ nobiliumsuppression = INFINITY
var/old_heat_capacity = air.heat_capacity()
var/heat_efficency = min(temperature / (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 8), cached_gases[/datum/gas/nitryl][MOLES])
var/energy_produced = heat_efficency * NITRYL_DECOMPOSITION_ENERGY
- ASSERT_GAS(/datum/gas/nitrogen, air)
+
if ((cached_gases[/datum/gas/nitryl][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing.
return NO_REACTION
+
+ ASSERT_GAS(/datum/gas/nitrogen, air)
cached_gases[/datum/gas/nitryl][MOLES] -= heat_efficency
cached_gases[/datum/gas/oxygen][MOLES] += heat_efficency
cached_gases[/datum/gas/nitrogen][MOLES] += heat_efficency
@@ -451,16 +435,16 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires bz.
- priority = 3
+ priority_group = PRIORITY_FORMATION
name = "Nitryl formation"
id = "nitrylformation"
/datum/gas_reaction/nitrylformation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/oxygen = 10,
/datum/gas/nitrogen = 10,
/datum/gas/bz = 5,
- "TEMP" = 1500,
+ "MIN_TEMP" = 1500,
"MAX_TEMP" = 10000
)
@@ -474,6 +458,8 @@ nobiliumsuppression = INFINITY
ASSERT_GAS(/datum/gas/nitryl, air)
if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.05 < 0)) //Shouldn't produce gas from nothing.
return NO_REACTION
+
+ ASSERT_GAS(/datum/gas/nitryl, air)
cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency
cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficency
cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.05 //bz gets consumed to balance the nitryl production and not make it too common and/or easy
@@ -486,12 +472,12 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/bzformation //Formation of BZ by combining plasma and tritium at low pressures. Exothermic.
- priority = 4
+ priority_group = PRIORITY_FORMATION
name = "BZ Gas formation"
id = "bzformation"
/datum/gas_reaction/bzformation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/nitrous_oxide = 10,
/datum/gas/plasma = 10
)
@@ -505,6 +491,7 @@ nobiliumsuppression = INFINITY
var/energy_released = 2 * reaction_efficency * FIRE_CARBON_ENERGY_RELEASED
if ((cached_gases[/datum/gas/nitrous_oxide][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2 * reaction_efficency) < 0) || energy_released <= 0) //Shouldn't produce gas from nothing.
return NO_REACTION
+
ASSERT_GAS(/datum/gas/bz, air)
cached_gases[/datum/gas/bz][MOLES] += reaction_efficency * 2.5
if(reaction_efficency == cached_gases[/datum/gas/nitrous_oxide][MOLES])
@@ -521,16 +508,16 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/freonformation
- priority = 5
+ priority_group = PRIORITY_FORMATION
name = "Freon formation"
id = "freonformation"
/datum/gas_reaction/freonformation/init_reqs() //minimum requirements for freon formation
- min_requirements = list(
+ requirements = list(
/datum/gas/plasma = 40,
/datum/gas/carbon_dioxide = 20,
/datum/gas/bz = 20,
- "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100
+ "MIN_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100
)
/datum/gas_reaction/freonformation/react(datum/gas_mixture/air)
@@ -539,9 +526,10 @@ nobiliumsuppression = INFINITY
var/old_heat_capacity = air.heat_capacity()
var/heat_efficency = min(temperature / (FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 10), cached_gases[/datum/gas/plasma][MOLES], cached_gases[/datum/gas/carbon_dioxide][MOLES], cached_gases[/datum/gas/bz][MOLES])
var/energy_used = heat_efficency * 100
- ASSERT_GAS(/datum/gas/freon, air)
if ((cached_gases[/datum/gas/plasma][MOLES] - heat_efficency * 1.5 < 0 ) || (cached_gases[/datum/gas/carbon_dioxide][MOLES] - heat_efficency * 0.75 < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing.
return NO_REACTION
+
+ ASSERT_GAS(/datum/gas/freon, air)
cached_gases[/datum/gas/plasma][MOLES] -= heat_efficency * 1.5
cached_gases[/datum/gas/carbon_dioxide][MOLES] -= heat_efficency * 0.75
cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25
@@ -554,16 +542,16 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/stimformation //Stimulum formation follows a strange pattern of how effective it will be at a given temperature, having some multiple peaks and some large dropoffs. Exo and endo thermic.
- priority = 6
+ priority_group = PRIORITY_FORMATION
name = "Stimulum formation"
id = "stimformation"
/datum/gas_reaction/stimformation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/tritium = 30,
/datum/gas/bz = 20,
/datum/gas/nitryl = 30,
- "TEMP" = 1500)
+ "MIN_TEMP" = 1500)
/datum/gas_reaction/stimformation/react(datum/gas_mixture/air)
var/list/cached_gases = air.gases
@@ -574,9 +562,10 @@ nobiliumsuppression = INFINITY
ASSERT_GAS(/datum/gas/stimulum, air)
if ((cached_gases[/datum/gas/tritium][MOLES] - heat_scale < 0 ) || (cached_gases[/datum/gas/nitryl][MOLES] - heat_scale < 0)) //Shouldn't produce gas from nothing.
return NO_REACTION
- cached_gases[/datum/gas/stimulum][MOLES]+= heat_scale * 0.75
+ cached_gases[/datum/gas/stimulum][MOLES] += heat_scale * 0.75
cached_gases[/datum/gas/tritium][MOLES] -= heat_scale
cached_gases[/datum/gas/nitryl][MOLES] -= heat_scale
+
if(stim_energy_change)
var/new_heat_capacity = air.heat_capacity()
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
@@ -584,15 +573,15 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/nobliumformation //Hyper-Noblium formation is extrememly endothermic, but requires high temperatures to start. Due to its high mass, hyper-nobelium uses large amounts of nitrogen and tritium. BZ can be used as a catalyst to make it less endothermic.
- priority = 7
+ priority_group = PRIORITY_FORMATION
name = "Hyper-Noblium condensation"
id = "nobformation"
/datum/gas_reaction/nobliumformation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/nitrogen = 10,
/datum/gas/tritium = 5,
- "TEMP" = TCMB,
+ "MIN_TEMP" = TCMB,
"MAX_TEMP" = 15
)
@@ -604,6 +593,7 @@ nobiliumsuppression = INFINITY
var/energy_produced = nob_formed * (NOBLIUM_FORMATION_ENERGY / (max(cached_gases[/datum/gas/bz][MOLES], 1)))
if ((cached_gases[/datum/gas/tritium][MOLES] - 5 * nob_formed < 0) || (cached_gases[/datum/gas/nitrogen][MOLES] - 10 * nob_formed < 0))
return NO_REACTION
+
cached_gases[/datum/gas/tritium][MOLES] -= 5 * nob_formed
cached_gases[/datum/gas/nitrogen][MOLES] -= 10 * nob_formed
cached_gases[/datum/gas/hypernoblium][MOLES] += nob_formed
@@ -612,24 +602,25 @@ nobiliumsuppression = INFINITY
var/new_heat_capacity = air.heat_capacity()
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
air.temperature = max(((air.temperature * old_heat_capacity + energy_produced) / new_heat_capacity), TCMB)
+ return REACTING
/datum/gas_reaction/miaster //dry heat sterilization: clears out pathogens in the air
- priority = -10 //after all the heating from fires etc. is done
+ priority_group = PRIORITY_POST_FORMATION
name = "Dry Heat Sterilization"
id = "sterilization"
/datum/gas_reaction/miaster/init_reqs()
- min_requirements = list(
- "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST+70,
- /datum/gas/miasma = MINIMUM_MOLE_COUNT
- )
+ requirements = list(
+ /datum/gas/miasma = MINIMUM_MOLE_COUNT,
+ "MIN_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST+70
+ )
/datum/gas_reaction/miaster/react(datum/gas_mixture/air, datum/holder)
var/list/cached_gases = air.gases
// As the name says it, it needs to be dry
if(cached_gases[/datum/gas/water_vapor] && cached_gases[/datum/gas/water_vapor][MOLES] / air.total_moles() > 0.1)
- return
+ return NO_REACTION
//Replace miasma with oxygen
var/cleaned_air = min(cached_gases[/datum/gas/miasma][MOLES], 20 + (air.temperature - FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 70) / 20)
@@ -640,16 +631,18 @@ nobiliumsuppression = INFINITY
//Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable
air.temperature += cleaned_air * 0.002
+ return REACTING
+
/datum/gas_reaction/halon_formation
- priority = 12
+ priority_group = PRIORITY_FORMATION
name = "Halon formation"
id = "halon_formation"
/datum/gas_reaction/halon_formation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/bz = MINIMUM_MOLE_COUNT,
/datum/gas/tritium = MINIMUM_MOLE_COUNT,
- "TEMP" = 30,
+ "MIN_TEMP" = 30,
"MAX_TEMP" = 55
)
@@ -673,15 +666,15 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/healium_formation
- priority = 9
+ priority_group = PRIORITY_FORMATION
name = "Healium formation"
id = "healium_formation"
/datum/gas_reaction/healium_formation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/bz = MINIMUM_MOLE_COUNT,
/datum/gas/freon = MINIMUM_MOLE_COUNT,
- "TEMP" = 25,
+ "MIN_TEMP" = 25,
"MAX_TEMP" = 300
)
@@ -705,15 +698,15 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/proto_nitrate_formation
- priority = 10
+ priority_group = PRIORITY_FORMATION
name = "Proto Nitrate formation"
id = "proto_nitrate_formation"
/datum/gas_reaction/proto_nitrate_formation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/pluoxium = MINIMUM_MOLE_COUNT,
/datum/gas/hydrogen = MINIMUM_MOLE_COUNT,
- "TEMP" = 5000,
+ "MIN_TEMP" = 5000,
"MAX_TEMP" = 10000
)
@@ -737,15 +730,15 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/zauker_formation
- priority = 11
+ priority_group = PRIORITY_FORMATION
name = "Zauker formation"
id = "zauker_formation"
/datum/gas_reaction/zauker_formation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/hypernoblium = MINIMUM_MOLE_COUNT,
/datum/gas/stimulum = MINIMUM_MOLE_COUNT,
- "TEMP" = 50000,
+ "MIN_TEMP" = 50000,
"MAX_TEMP" = 75000
)
@@ -769,15 +762,15 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/halon_o2removal
- priority = -1
+ priority_group = PRIORITY_PRE_FORMATION
name = "Halon o2 removal"
id = "halon_o2removal"
/datum/gas_reaction/halon_o2removal/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/halon = MINIMUM_MOLE_COUNT,
/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
- "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
+ "MIN_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
)
/datum/gas_reaction/halon_o2removal/react(datum/gas_mixture/air, datum/holder)
@@ -800,12 +793,12 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/zauker_decomp
- priority = 8
+ priority_group = PRIORITY_POST_FORMATION
name = "Zauker decomposition"
id = "zauker_decomp"
/datum/gas_reaction/zauker_decomp/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/nitrogen = MINIMUM_MOLE_COUNT,
/datum/gas/zauker = MINIMUM_MOLE_COUNT
)
@@ -836,15 +829,15 @@ nobiliumsuppression = INFINITY
return NO_REACTION
/datum/gas_reaction/proto_nitrate_bz_response
- priority = 13
+ priority_group = PRIORITY_PRE_FORMATION
name = "Proto Nitrate bz response"
id = "proto_nitrate_bz_response"
/datum/gas_reaction/proto_nitrate_bz_response/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/proto_nitrate = MINIMUM_MOLE_COUNT,
/datum/gas/bz = MINIMUM_MOLE_COUNT,
- "TEMP" = 260,
+ "MIN_TEMP" = 260,
"MAX_TEMP" = 280
)
@@ -876,15 +869,15 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/proto_nitrate_tritium_response
- priority = 16
+ priority_group = PRIORITY_PRE_FORMATION
name = "Proto Nitrate tritium response"
id = "proto_nitrate_tritium_response"
/datum/gas_reaction/proto_nitrate_tritium_response/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/proto_nitrate = MINIMUM_MOLE_COUNT,
/datum/gas/tritium = MINIMUM_MOLE_COUNT,
- "TEMP" = 150,
+ "MIN_TEMP" = 150,
"MAX_TEMP" = 340
)
@@ -912,12 +905,12 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/proto_nitrate_hydrogen_response
- priority = 17
+ priority_group = PRIORITY_PRE_FORMATION
name = "Proto Nitrate hydrogen response"
id = "proto_nitrate_hydrogen_response"
/datum/gas_reaction/proto_nitrate_hydrogen_response/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/proto_nitrate = MINIMUM_MOLE_COUNT,
/datum/gas/hydrogen = 150,
)
@@ -940,16 +933,16 @@ nobiliumsuppression = INFINITY
return REACTING
/datum/gas_reaction/pluox_formation
- priority = 2
+ priority_group = PRIORITY_FORMATION
name = "Pluoxium formation"
id = "pluox_formation"
/datum/gas_reaction/pluox_formation/init_reqs()
- min_requirements = list(
+ requirements = list(
/datum/gas/carbon_dioxide = MINIMUM_MOLE_COUNT,
/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
/datum/gas/tritium = MINIMUM_MOLE_COUNT,
- "TEMP" = 50,
+ "MIN_TEMP" = 50,
"MAX_TEMP" = T0C
)
diff --git a/code/modules/atmospherics/machinery/bluespace_vendor.dm b/code/modules/atmospherics/machinery/bluespace_vendor.dm
index aec02f10ad0..e09bc7c4ce5 100644
--- a/code/modules/atmospherics/machinery/bluespace_vendor.dm
+++ b/code/modules/atmospherics/machinery/bluespace_vendor.dm
@@ -120,7 +120,7 @@
update_appearance()
return
- connected_machine.bluespace_network.pump_gas_to(internal_tank.air_contents, (tank_filling_amount * 0.01) * 10 * ONE_ATMOSPHERE, gas_path)
+ connected_machine.bluespace_network.pump_gas_to(internal_tank.return_air(), (tank_filling_amount * 0.01) * 10 * ONE_ATMOSPHERE, gas_path)
/obj/machinery/bluespace_vendor/multitool_act(mob/living/user, obj/item/multitool/multitool)
if(!istype(multitool))
@@ -191,13 +191,14 @@
///Check the price of the current tank, if the user doesn't have the money the gas will be merged back into the network
/obj/machinery/bluespace_vendor/proc/check_price(mob/user)
var/temp_price = 0
- var/list/gases = internal_tank.air_contents.gases
+ var/datum/gas_mixture/working_mix = internal_tank.return_air()
+ var/list/gases = working_mix.gases
for(var/gas_id in gases)
temp_price += gases[gas_id][MOLES] * connected_machine.base_prices[gas_id]
gas_price = temp_price
if(attempt_charge(src, user, gas_price) & COMPONENT_OBJ_CANCEL_CHARGE)
- var/datum/gas_mixture/remove = internal_tank.air_contents.remove(internal_tank.air_contents.total_moles())
+ var/datum/gas_mixture/remove = working_mix.remove_ratio(1)
connected_machine.bluespace_network.merge(remove)
return
connected_machine.credits_gained += gas_price + tank_cost
@@ -241,7 +242,8 @@
data["inserted_tank"] = inserted_tank
var/total_tank_pressure
if(internal_tank)
- total_tank_pressure = internal_tank.air_contents.return_pressure()
+ var/datum/gas_mixture/working_mix = internal_tank.return_air()
+ total_tank_pressure = working_mix.return_pressure()
else
total_tank_pressure = 0
data["tank_full"] = total_tank_pressure
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm
index 8448f279117..523ad96e9fb 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm
@@ -51,7 +51,6 @@
/obj/machinery/atmospherics/components/binary/temperature_gate/process_atmos()
-
if(!on || !is_operational)
return
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm
index 54d0de6b76c..3a1e7196ae2 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm
@@ -30,7 +30,6 @@
icon_state = "tpump_[on && is_operational ? "on" : "off"]-[set_overlay_offset(piping_layer)]"
/obj/machinery/atmospherics/components/binary/temperature_pump/process_atmos()
-
if(!on || !is_operational)
return
@@ -51,12 +50,11 @@
var/cooling_heat_amount = (heat_transfer_rate * 0.01) * coolant_temperature_delta * (input_capacity * output_capacity / (input_capacity + output_capacity))
remove_input.temperature = max(remove_input.temperature - (cooling_heat_amount / input_capacity), TCMB)
remove_output.temperature = max(remove_output.temperature + (cooling_heat_amount / output_capacity), TCMB)
+ update_parents()
air_input.merge(remove_input)
air_output.merge(remove_output)
- update_parents()
-
/obj/machinery/atmospherics/components/binary/temperature_pump/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
index e27fb1e8c43..d8b572e7b23 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
@@ -415,8 +415,9 @@
data["holding"] = holding ? TRUE : FALSE
data["tank_gas"] = FALSE
- if(holding && holding.air_contents.total_moles())
- data["tank_gas"] = TRUE
+ if(holding)
+ var/datum/gas_mixture/holding_mix = holding.return_air()
+ data["tank_gas"] = !!holding_mix.total_moles()
data["use_env_heat"] = use_enviroment_heat
data["skipping_work"] = skipping_work
data["auto_thermal_regulator"] = auto_thermal_regulator
@@ -459,7 +460,8 @@
if("pumping")
if(holding && nodes[2])
var/datum/gas_mixture/thermal_exchange_port = airs[2]
- var/datum/gas_mixture/remove = holding.air_contents.remove(holding.air_contents.total_moles())
+ var/datum/gas_mixture/holding_mix = holding.return_air()
+ var/datum/gas_mixture/remove = holding_mix.remove_ratio(1)
thermal_exchange_port.merge(remove)
. = TRUE
if("eject")
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index 33ac78cde62..557879a6420 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -75,6 +75,9 @@
var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
+ if(!removed.total_moles())
+ return
+
if(overclocked)//Some of the gas from the mixture leaks to the environment when overclocked
var/turf/open/T = loc
if(istype(T))
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
index 145a7deaf54..a7cf88c4e43 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
@@ -142,8 +142,10 @@
if(selected_recipe.reaction_type == "endothermic")
internal.temperature = max(internal.temperature - (selected_recipe.energy_release / internal.heat_capacity()), TCMB)
+ update_parents()
else if(selected_recipe.reaction_type == "exothermic")
internal.temperature = max(internal.temperature + (selected_recipe.energy_release / internal.heat_capacity()), TCMB)
+ update_parents()
///Conduction between the internal gasmix and the moderating (cooling/heating) gasmix.
/obj/machinery/atmospherics/components/binary/crystallizer/proc/heat_conduction()
@@ -156,7 +158,7 @@
var/cooling_heat_amount = HIGH_CONDUCTIVITY_RATIO * coolant_temperature_delta * (cooling_heat_capacity * internal_heat_capacity / (cooling_heat_capacity + internal_heat_capacity))
cooling_port.temperature = max(cooling_port.temperature - cooling_heat_amount / cooling_heat_capacity, TCMB)
internal.temperature = max(internal.temperature + cooling_heat_amount / internal_heat_capacity, TCMB)
- update_parents()
+ update_parents()
///Calculate the total moles needed for the recipe
/obj/machinery/atmospherics/components/binary/crystallizer/proc/moles_calculations()
@@ -179,7 +181,6 @@
inject_gases()
if(!internal.total_moles())
- update_parents()
return
heat_conduction()
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 2b8fcb2247a..c5dbba0e930 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -79,7 +79,7 @@
var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
- if(!removed)
+ if(!removed || !removed.total_moles())
return
var/filtering = TRUE
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
index dbec0cf3cbc..66d632b29b3 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
@@ -55,24 +55,24 @@
partner.update_cycle = SSair.times_fired
var/datum/gas_mixture/air_contents = airs[1]
- var/datum/gas_mixture/partner_air_contents = partner.airs[1]
+ var/datum/gas_mixture/partnerair_contents = partner.airs[1]
var/air_heat_capacity = air_contents.heat_capacity()
- var/other_air_heat_capacity = partner_air_contents.heat_capacity()
+ var/other_air_heat_capacity = partnerair_contents.heat_capacity()
var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity
var/old_temperature = air_contents.temperature
- var/other_old_temperature = partner_air_contents.temperature
+ var/other_old_temperature = partnerair_contents.temperature
if(combined_heat_capacity > 0)
- var/combined_energy = partner_air_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature
+ var/combined_energy = partnerair_contents.temperature*other_air_heat_capacity + air_heat_capacity*air_contents.temperature
var/new_temperature = combined_energy/combined_heat_capacity
air_contents.temperature = new_temperature
- partner_air_contents.temperature = new_temperature
+ partnerair_contents.temperature = new_temperature
if(abs(old_temperature-air_contents.temperature) > 1)
update_parents()
- if(abs(other_old_temperature-partner_air_contents.temperature) > 1)
+ if(abs(other_old_temperature-partnerair_contents.temperature) > 1)
partner.update_parents()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
index 270928b3e7c..a5d0bbbdd11 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
@@ -70,6 +70,9 @@
if(air_contents.temperature > 0)
var/transfer_moles = (air_contents.return_pressure() * volume_rate) / (air_contents.temperature * R_IDEAL_GAS_EQUATION)
+ if(!transfer_moles)
+ return
+
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
location.assume_air(removed)
@@ -85,15 +88,18 @@
var/datum/gas_mixture/air_contents = airs[1]
injecting = 1
-
+ flick("inje_inject", src)
+
if(air_contents.temperature > 0)
var/transfer_moles = (air_contents.return_pressure() * volume_rate) / (air_contents.temperature * R_IDEAL_GAS_EQUATION)
+
+ if(!transfer_moles)
+ return
+
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
loc.assume_air(removed)
update_parents()
- flick("inje_inject", src)
-
/obj/machinery/atmospherics/components/unary/outlet_injector/proc/set_frequency(new_frequency)
SSradio.remove_object(src, frequency)
frequency = new_frequency
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
index afe846fd5ba..cb23088d1e3 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -114,8 +114,12 @@
var/transfer_moles = (pressure_delta*environment.volume)/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
+ if(!removed || !removed.total_moles())
+ return
+
loc.assume_air(removed)
air_update_turf(FALSE, FALSE)
+ update_parents()
else // external -> internal
var/pressure_delta = 10000
@@ -128,12 +132,13 @@
var/transfer_moles = (pressure_delta * air_contents.volume) / (environment.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
- if (isnull(removed)) // in space
+
+ if(!removed || !removed.total_moles()) //No venting from space 4head
return
air_contents.merge(removed)
air_update_turf(FALSE, FALSE)
- update_parents()
+ update_parents()
//Radio remote control
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
index aa551bc26de..801a66f7aa7 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -191,6 +191,7 @@
air_contents.merge(filtered_out)
tile.assume_air(removed)
tile.air_update_turf(FALSE, FALSE)
+ update_parents()
else //Just siphoning all air
@@ -200,8 +201,7 @@
air_contents.merge(removed)
tile.air_update_turf(FALSE, FALSE)
-
- update_parents()
+ update_parents()
return TRUE
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index 2655954d429..cdf2c61babd 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -32,11 +32,10 @@
return ..()
/datum/pipeline/process()
- if(building)
+ if(!update || building)
return
- if(update)
- update = FALSE
- reconcile_air()
+ reconcile_air()
+ //Only react if the mix has changed, and don't keep updating if it hasn't
update = air.react(src)
///Preps a pipeline for rebuilding, insterts it into the rebuild queue
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 48506769d06..805642cdcad 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -297,6 +297,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
air_contents.gases[/datum/gas/hydrogen][MOLES] = 300
air_contents.gases[/datum/gas/tritium][MOLES] = 300
air_contents.temperature = 10000
+ SSair.start_processing_machine(src)
/**
* Getter for the amount of time left in the timer of prototype canisters
@@ -375,11 +376,13 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
if(starter_temp)
air_contents.temperature = starter_temp
air_contents.gases[gas_type][MOLES] = (maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
+ SSair.start_processing_machine(src)
/obj/machinery/portable_atmospherics/canister/air/create_gas()
air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen)
air_contents.gases[/datum/gas/oxygen][MOLES] = (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
air_contents.gases[/datum/gas/nitrogen][MOLES] = (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
+ SSair.start_processing_machine(src)
/obj/machinery/portable_atmospherics/canister/update_icon_state()
if(machine_stat & BROKEN)
@@ -502,7 +505,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
investigate_log("[key_name(user)] started a transfer into [holding].", INVESTIGATE_ATMOS)
/obj/machinery/portable_atmospherics/canister/process_atmos()
- . = ..()
if(machine_stat & BROKEN)
return PROCESS_KILL
if(timing && valve_timer < world.time)
@@ -513,7 +515,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
var/mix_air = FALSE
var/pressure = release_pressure
- var/gas_mix = holding?.air_contents
+ var/gas_mix = holding?.return_air()
var/air_update = FALSE
if(valve_open)
@@ -522,6 +524,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
// When at least 10% of integrity is lost it starts checking for leaking
if(obj_integrity < max_integrity * 0.9)
var/leak_chance = (1 - obj_integrity / max_integrity) * 100
+ excited = TRUE
if(prob(leak_chance))
mix_air = TRUE
pressure = air_contents.return_pressure() / 10
@@ -531,6 +534,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
// Handle gas transfer.
if(mix_air)
var/datum/gas_mixture/target_air = gas_mix || location.return_air()
+ excited = TRUE
if(air_contents.release_gas_to(target_air, pressure) && (!holding || air_update))
air_update_turf(FALSE, FALSE)
@@ -541,8 +545,11 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
///function used to check the limit of the canisters and also set the amount of damage that the canister can receive, if the heat and pressure are way higher than the limit the more damage will be done
if(our_temperature > heat_limit || our_pressure > pressure_limit)
take_damage(clamp((our_temperature/heat_limit) * (our_pressure/pressure_limit), 5, 50), BURN, 0)
+ excited = TRUE
update_appearance()
+ return ..()
+
/obj/machinery/portable_atmospherics/canister/ui_state(mob/user)
return GLOB.physical_state
@@ -584,10 +591,11 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
)
if (holding)
+ var/datum/gas_mixture/holding_mix = holding.return_air()
. += list(
"holdingTank" = list(
"name" = holding.name,
- "tankPressure" = round(holding.air_contents.return_pressure())
+ "tankPressure" = round(holding_mix.return_pressure())
)
)
@@ -641,6 +649,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
var/logmsg
valve_open = !valve_open
if(valve_open)
+ SSair.start_processing_machine(src)
logmsg = "Valve was opened by [key_name(usr)], starting a transfer into \the [holding || "air"].
"
if(!holding)
var/list/danger = list()
diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
index cc173d27548..48ed86a9d4c 100644
--- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
+++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
@@ -6,7 +6,7 @@
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 60, ACID = 30)
anchored = FALSE
- ///Stores the gas mixture of the portable component
+ ///Stores the gas mixture of the portable component. Don't access this directly, use return_air() so you support the temporary processing it provides
var/datum/gas_mixture/air_contents
///Stores the reference of the connecting port
var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port
@@ -14,6 +14,8 @@
var/obj/item/tank/holding
///Volume (in L) of the inside of the machine
var/volume = 0
+ ///Used to track if anything of note has happen while running process_atmos()
+ var/excited = TRUE
/obj/machinery/portable_atmospherics/Initialize()
. = ..()
@@ -26,8 +28,7 @@
SSair.stop_processing_machine(src)
disconnect()
- qdel(air_contents)
- air_contents = null
+ QDEL_NULL(air_contents)
return ..()
@@ -44,10 +45,14 @@
return ..()
/obj/machinery/portable_atmospherics/process_atmos()
- if(!connected_port) // Pipe network handles reactions if connected.
- air_contents.react(src)
+ if(!connected_port) // Pipe network handles reactions if connected, and we can't stop processing if there's a port effecting our mix
+ excited = (excited | air_contents.react(src))
+ if(!excited)
+ return PROCESS_KILL
+ excited = FALSE
/obj/machinery/portable_atmospherics/return_air()
+ SSair.start_processing_machine(src)
return air_contents
/obj/machinery/portable_atmospherics/return_analyzable_air()
@@ -76,6 +81,8 @@
anchored = TRUE //Prevent movement
pixel_x = new_port.pixel_x
pixel_y = new_port.pixel_y
+
+ SSair.start_processing_machine(src)
update_appearance()
return TRUE
@@ -95,6 +102,8 @@
connected_port = null
pixel_x = 0
pixel_y = 0
+
+ SSair.start_processing_machine(src)
update_appearance()
return TRUE
@@ -129,6 +138,8 @@
holding = null
if(new_tank)
holding = new_tank
+
+ SSair.start_processing_machine(src)
update_appearance()
return TRUE
@@ -205,3 +216,4 @@
if(gas_change)
air_contents.garbage_collect()
+ SSair.start_processing_machine(src)
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 92605f4ddff..95107e683de 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -45,31 +45,34 @@
. += "siphon-connector"
/obj/machinery/portable_atmospherics/pump/process_atmos()
- . = ..()
var/pressure = air_contents.return_pressure()
var/temperature = air_contents.return_temperature()
///function used to check the limit of the pumps and also set the amount of damage that the pump can receive, if the heat and pressure are way higher than the limit the more damage will be done
if(temperature > heat_limit || pressure > pressure_limit)
take_damage(clamp((temperature/heat_limit) * (pressure/pressure_limit), 5, 50), BURN, 0)
- return
+ excited = TRUE
+ return ..()
if(!on)
- return
+ return ..()
+
+ excited = TRUE
var/turf/T = get_turf(src)
var/datum/gas_mixture/sending
var/datum/gas_mixture/receiving
if(direction == PUMP_OUT) // Hook up the internal pump.
- sending = (holding ? holding.air_contents : air_contents)
+ sending = (holding ? holding.return_air() : air_contents)
receiving = (holding ? air_contents : T.return_air())
else
sending = (holding ? air_contents : T.return_air())
- receiving = (holding ? holding.air_contents : air_contents)
-
+ receiving = (holding ? holding.return_air() : air_contents)
if(sending.pump_gas_to(receiving, target_pressure) && !holding)
air_update_turf(FALSE, FALSE) // Update the environment if needed.
+ return ..()
+
/obj/machinery/portable_atmospherics/pump/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
@@ -78,6 +81,8 @@
return
if(prob(50 / severity))
on = !on
+ if(on)
+ SSair.start_processing_machine(src)
if(prob(100 / severity))
direction = PUMP_OUT
target_pressure = rand(0, 100 * ONE_ATMOSPHERE)
@@ -114,7 +119,8 @@
if(holding)
data["holding"] = list()
data["holding"]["name"] = holding.name
- data["holding"]["pressure"] = round(holding.air_contents.return_pressure())
+ var/datum/gas_mixture/holding_mix = holding.return_air()
+ data["holding"]["pressure"] = round(holding_mix.return_pressure())
else
data["holding"] = null
return data
@@ -126,6 +132,8 @@
switch(action)
if("power")
on = !on
+ if(on)
+ SSair.start_processing_machine(src)
if(on && !holding)
var/plasma = air_contents.gases[/datum/gas/plasma]
var/n2o = air_contents.gases[/datum/gas/nitrous_oxide]
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index b3a3f5cec13..4474af74000 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -55,22 +55,24 @@
. += "scrubber-connector"
/obj/machinery/portable_atmospherics/scrubber/process_atmos()
- . = ..()
var/pressure = air_contents.return_pressure()
var/temperature = air_contents.return_temperature()
///function used to check the limit of the scrubbers and also set the amount of damage that the scrubber can receive, if the heat and pressure are way higher than the limit the more damage will be done
if(temperature > heat_limit || pressure > pressure_limit)
take_damage(clamp((temperature/heat_limit) * (pressure/pressure_limit), 5, 50), BURN, 0)
- return
+ excited = TRUE
+ return ..()
if(!on)
- return
+ return ..()
- if(holding)
- scrub(holding.air_contents)
- else
- var/turf/T = get_turf(src)
- scrub(T.return_air())
+ excited = TRUE
+
+ var/atom/target = holding || get_turf(src)
+ scrub(target.return_air())
+
+
+ return ..()
/**
* Called in process_atmos(), handles the scrubbing of the given gas_mixture
@@ -107,6 +109,8 @@
if(is_operational)
if(prob(50 / severity))
on = !on
+ if(on)
+ SSair.start_processing_machine(src)
update_appearance()
/obj/machinery/portable_atmospherics/scrubber/ui_interact(mob/user, datum/tgui/ui)
@@ -130,7 +134,8 @@
if(holding)
data["holding"] = list()
data["holding"]["name"] = holding.name
- data["holding"]["pressure"] = round(holding.air_contents.return_pressure())
+ var/datum/gas_mixture/holding_mix = holding.return_air()
+ data["holding"]["pressure"] = round(holding_mix.return_pressure())
else
data["holding"] = null
return data
@@ -153,6 +158,8 @@
switch(action)
if("power")
on = !on
+ if(on)
+ SSair.start_processing_machine(src)
. = TRUE
if("eject")
if(holding)
@@ -193,14 +200,17 @@
update_appearance()
use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
if(!on)
- return
+ return ..()
+
+ excited = TRUE
- ..()
if(!holding)
var/turf/T = get_turf(src)
for(var/turf/AT in T.GetAtmosAdjacentTurfs(alldir = TRUE))
scrub(AT.return_air())
+ return ..()
+
/obj/machinery/portable_atmospherics/scrubber/huge/attackby(obj/item/W, mob/user)
if(default_unfasten_wrench(user, W))
if(!movable)
diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm
index 99c89589d1d..da3c8650618 100644
--- a/code/modules/cargo/bounties/engineering.dm
+++ b/code/modules/cargo/bounties/engineering.dm
@@ -10,9 +10,10 @@
if(!..())
return FALSE
var/obj/item/tank/T = O
- if(!T.air_contents.gases[gas_type])
+ var/datum/gas_mixture/our_mix = T.return_air()
+ if(!our_mix.gases[gas_type])
return FALSE
- return T.air_contents.gases[gas_type][MOLES] >= moles_required
+ return our_mix.gases[gas_type][MOLES] >= moles_required
/datum/bounty/item/engineering/gas/nitryl_tank
name = "Full Tank of Nitryl"
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index 4d1275a0cef..a52a1b4be60 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -110,7 +110,8 @@
/datum/export/large/gas_canister/get_cost(obj/O)
var/obj/machinery/portable_atmospherics/canister/C = O
var/worth = cost
- var/canister_mix = C.air_contents.gases
+ var/datum/gas_mixture/canister_mix = C.return_air()
+ var/canister_gas = canister_mix.gases
var/list/gases_to_check = list(
/datum/gas/bz,
/datum/gas/stimulum,
@@ -129,11 +130,11 @@
)
for(var/gasID in gases_to_check)
- C.air_contents.assert_gas(gasID)
- if(canister_mix[gasID][MOLES] > 0)
- worth += get_gas_value(gasID, canister_mix[gasID][MOLES])
+ canister_mix.assert_gas(gasID)
+ if(canister_gas[gasID][MOLES] > 0)
+ worth += get_gas_value(gasID, canister_gas[gasID][MOLES])
- C.air_contents.garbage_collect()
+ canister_mix.garbage_collect()
return worth
/datum/export/large/gas_canister/proc/get_gas_value(datum/gas/gasType, moles)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 092543f4f31..b73ea9c06c2 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -67,12 +67,13 @@
. += "Combat mode: [combat_mode ? "On" : "Off"]"
. += "Move Mode: [m_intent]"
if (internal)
- if (!internal.air_contents)
- qdel(internal)
+ var/datum/gas_mixture/internal_air = internal.return_air()
+ if (!internal_air)
+ QDEL_NULL(internal)
else
. += ""
. += "Internal Atmosphere Info: [internal.name]"
- . += "Tank Pressure: [internal.air_contents.return_pressure()]"
+ . += "Tank Pressure: [internal_air.return_pressure()]"
. += "Distribution Pressure: [internal.distribute_pressure]"
if(istype(wear_suit, /obj/item/clothing/suit/space))
var/obj/item/clothing/suit/space/S = wear_suit
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 77101c402b6..3de508cc7bc 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -44,16 +44,17 @@
/obj/machinery/power/rad_collector/process(delta_time)
if(!loaded_tank)
return
- if(!loaded_tank.air_contents.gases[/datum/gas/plasma])
+ var/datum/gas_mixture/tank_mix = loaded_tank.return_air()
+ if(!tank_mix.gases[/datum/gas/plasma])
investigate_log("out of fuel.", INVESTIGATE_SINGULO)
playsound(src, 'sound/machines/ding.ogg', 50, TRUE)
eject()
return
- var/gas_drained = min(power_production_drain * drain_ratio * delta_time, loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES])
- loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES] -= gas_drained
- loaded_tank.air_contents.assert_gas(/datum/gas/tritium)
- loaded_tank.air_contents.gases[/datum/gas/tritium][MOLES] += gas_drained
- loaded_tank.air_contents.garbage_collect()
+ var/gasdrained = min(power_production_drain * drain_ratio * delta_time, tank_mix.gases[/datum/gas/plasma][MOLES])
+ tank_mix.gases[/datum/gas/plasma][MOLES] -= gasdrained
+ tank_mix.assert_gas(/datum/gas/tritium)
+ tank_mix.gases[/datum/gas/tritium][MOLES] += gasdrained
+ tank_mix.garbage_collect()
var/power_produced = RAD_COLLECTOR_OUTPUT
add_avail(power_produced)
@@ -68,9 +69,10 @@
toggle_power()
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
"You turn the [src.name] [active? "on":"off"].")
+ var/datum/gas_mixture/tank_mix = loaded_tank.return_air()
var/fuel
if(loaded_tank)
- fuel = loaded_tank.air_contents.gases[/datum/gas/plasma]
+ fuel = tank_mix.gases[/datum/gas/plasma]
fuel = fuel ? fuel[MOLES] : 0
investigate_log("turned [active?"on":"off"] by [key_name(user)]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"It is empty"].", INVESTIGATE_SINGULO)
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 416c5062639..a43e46f61f8 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -214,9 +214,9 @@
return TRUE
// Priority 3: use internals tank.
- var/obj/item/tank/I = owner.internal
- if(I && I.air_contents && I.air_contents.total_moles() > num)
- var/datum/gas_mixture/removed = I.air_contents.remove(num)
+ var/datum/gas_mixture/internal_mix = owner.internal.return_air()
+ if(internal_mix && internal_mix.total_moles() > num)
+ var/datum/gas_mixture/removed = internal_mix.remove(num)
if(removed.total_moles() > 0.005)
T.assume_air(removed)
ion_trail.generate_effect()
diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
index d93fad2063c..58ba67b975f 100644
--- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
@@ -540,11 +540,12 @@
/obj/item/mecha_parts/mecha_equipment/thrusters/gas/thrust(movement_dir)
if(!chassis || !chassis.internal_tank)
return FALSE
- var/moles = chassis.internal_tank.air_contents.total_moles()
+ var/datum/gas_mixture/our_mix = chassis.internal_tank.return_air()
+ var/moles = our_mix.total_moles()
if(moles < move_cost)
- chassis.internal_tank.air_contents.remove(moles)
+ our_mix.remove(moles)
return FALSE
- chassis.internal_tank.air_contents.remove(move_cost)
+ our_mix.remove(move_cost)
generate_effect(movement_dir)
return TRUE