From 37394c7d60719f1f0e925f0a4d8a2d95bfdcdc56 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 12 Apr 2022 23:01:54 -0400
Subject: [PATCH 001/200] Initial commit

---
 code/__DEFINES/subsystems.dm                  |  10 +
 code/controllers/subsystem/zas.dm             | 521 ++++++++++++++++++
 code/modules/atmospherics/ZAS/Airflow.dm      | 152 +++++
 code/modules/atmospherics/ZAS/Atom.dm         |  59 ++
 code/modules/atmospherics/ZAS/Connection.dm   | 168 ++++++
 .../atmospherics/ZAS/ConnectionGroup.dm       | 260 +++++++++
 .../atmospherics/ZAS/ConnectionManager.dm     | 105 ++++
 code/modules/atmospherics/ZAS/Debug.dm        |  20 +
 code/modules/atmospherics/ZAS/Diagnostic.dm   |  82 +++
 code/modules/atmospherics/ZAS/Fire.dm         | 443 +++++++++++++++
 code/modules/atmospherics/ZAS/Plasma.dm       | 176 ++++++
 code/modules/atmospherics/ZAS/Turf.dm         | 295 ++++++++++
 code/modules/atmospherics/ZAS/XGM/gas_data.dm | 103 ++++
 code/modules/atmospherics/ZAS/Zone.dm         | 214 +++++++
 code/modules/atmospherics/ZAS/_docs.dm        |  28 +
 tgstation.dme                                 |  20 +-
 16 files changed, 2655 insertions(+), 1 deletion(-)
 create mode 100644 code/controllers/subsystem/zas.dm
 create mode 100644 code/modules/atmospherics/ZAS/Airflow.dm
 create mode 100644 code/modules/atmospherics/ZAS/Atom.dm
 create mode 100644 code/modules/atmospherics/ZAS/Connection.dm
 create mode 100644 code/modules/atmospherics/ZAS/ConnectionGroup.dm
 create mode 100644 code/modules/atmospherics/ZAS/ConnectionManager.dm
 create mode 100644 code/modules/atmospherics/ZAS/Debug.dm
 create mode 100644 code/modules/atmospherics/ZAS/Diagnostic.dm
 create mode 100644 code/modules/atmospherics/ZAS/Fire.dm
 create mode 100644 code/modules/atmospherics/ZAS/Plasma.dm
 create mode 100644 code/modules/atmospherics/ZAS/Turf.dm
 create mode 100644 code/modules/atmospherics/ZAS/XGM/gas_data.dm
 create mode 100644 code/modules/atmospherics/ZAS/Zone.dm
 create mode 100644 code/modules/atmospherics/ZAS/_docs.dm

diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index f4437406205..9e1d38c8394 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -271,6 +271,16 @@
 #define SSAIR_SUPERCONDUCTIVITY 7
 #define SSAIR_PROCESS_ATOMS 8
 
+//ZAS subsystem subtasks
+#define SSZAS_PIPENETS 1
+#define SSZAS_MACHINES 2
+#define SSZAS_TILES 3
+#define SSZAS_DEFERED_TILES 4
+#define SSZAS_EDGES 5
+#define SSZAS_FIRES 6
+#define SSZAS_HOTSPOTS 7
+#define SSZAS_ZONES 8
+
 //Pipeline rebuild helper defines, these suck but it'll do for now //Fools you actually merged it
 #define SSAIR_REBUILD_PIPELINE 1
 #define SSAIR_REBUILD_QUEUE 2
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
new file mode 100644
index 00000000000..f6cf060c884
--- /dev/null
+++ b/code/controllers/subsystem/zas.dm
@@ -0,0 +1,521 @@
+/*
+
+Overview:
+	The air controller does everything. There are tons of procs in here.
+
+Class Vars:
+	zones - All zones currently holding one or more turfs.
+	edges - All processing edges.
+
+	tiles_to_update - Tiles scheduled to update next tick.
+	zones_to_update - Zones which have had their air changed and need air archival.
+	active_hotspots - All processing fire objects.
+
+	active_zones - The number of zones which were archived last tick. Used in debug verbs.
+	next_id - The next UID to be applied to a zone. Mostly useful for debugging purposes as zones do not need UIDs to function.
+
+Class Procs:
+
+	mark_for_update(turf/T)
+		Adds the turf to the update list. When updated, update_air_properties() will be called.
+		When stuff changes that might affect airflow, call this. It's basically the only thing you need.
+
+	add_zone(zone/Z) and remove_zone(zone/Z)
+		Adds zones to the zones list. Does not mark them for update.
+
+	air_blocked(turf/A, turf/B)
+		Returns a bitflag consisting of:
+		AIR_BLOCKED - The connection between turfs is physically blocked. No air can pass.
+		ZONE_BLOCKED - There is a door between the turfs, so zones cannot cross. Air may or may not be permeable.
+
+	has_valid_zone(turf/T)
+		Checks the presence and validity of T's zone.
+		May be called on unsimulated turfs, returning 0.
+
+	merge(zone/A, zone/B)
+		Called when zones have a direct connection and equivalent pressure and temperature.
+		Merges the zones to create a single zone.
+
+	connect(turf/simulated/A, turf/B)
+		Called by turf/update_air_properties(). The first argument must be simulated.
+		Creates a connection between A and B.
+
+	mark_zone_update(zone/Z)
+		Adds zone to the update list. Unlike mark_for_update(), this one is called automatically whenever
+		air is returned from a simulated turf.
+
+	equivalent_pressure(zone/A, zone/B)
+		Currently identical to A.air.compare(B.air). Returns 1 when directly connected zones are ready to be merged.
+
+	get_edge(zone/A, zone/B)
+	get_edge(zone/A, turf/B)
+		Gets a valid connection_edge between A and B, creating a new one if necessary.
+
+	has_same_air(turf/A, turf/B)
+		Used to determine if an unsimulated edge represents a specific turf.
+		Simulated edges use connection_edge/contains_zone() for the same purpose.
+		Returns 1 if A has identical gases and temperature to B.
+
+	remove_edge(connection_edge/edge)
+		Called when an edge is erased. Removes it from processing.
+
+*/
+
+SUBSYSTEM_DEF(zas)
+	name = "ZAS"
+	priority = FIRE_PRIORITY_AIR
+	init_order = INIT_ORDER_AIR
+	flags = SS_POST_FIRE_TIMING
+
+	//The variable setting controller
+	var/zas_controller/settings
+	//XGM gas data
+	var/datum/xgm_gas_data/gas_data
+	//Geometry lists
+	var/list/zones = list()
+	var/list/edges = list()
+
+	//Pipenets
+	var/list/networks = list()
+	var/list/rebuild_queue = list()
+	var/list/expansion_queue = list()
+
+	//Atmos Machines
+	var/list/atmos_machinery = list()
+
+	//Geometry updates lists
+	var/list/tiles_to_update = list()
+	var/list/zones_to_update = list()
+	var/list/active_fire_zones = list()
+	var/list/active_hotspots = list()
+	var/list/active_edges = list()
+
+	var/tmp/list/deferred = list()
+	var/tmp/list/processing_edges
+	var/tmp/list/processing_fires
+	var/tmp/list/processing_hotspots
+	var/tmp/list/processing_zones
+
+	//Currently processing
+	var/list/curr_tiles
+	var/list/curr_defer
+	var/list/curr_edges
+	var/list/curr_fire
+	var/list/curr_hotspot
+	var/list/curr_zones
+	var/list/curr_machines
+
+
+	var/current_process = SSZAS_TILES
+	var/active_zones = 0
+	var/next_id = 1
+
+/datum/controller/subsystem/zas/proc/Reboot()
+	// Stop processing while we rebuild.
+	can_fire = FALSE
+
+	// Make sure we don't rebuild mid-tick.
+	if (state != SS_IDLE)
+		to_chat(world, bold_announce("ZAS Rebuild initiated. Waiting for current air tick to complete before continuing."))
+		while (state != SS_IDLE)
+			stoplag()
+
+	while (zones.len)
+		var/zone/zone = zones[zones.len]
+		zones.len--
+
+		zone.c_invalidate()
+
+	edges.Cut()
+	tiles_to_update.Cut()
+	zones_to_update.Cut()
+	active_fire_zones.Cut()
+	active_hotspots.Cut()
+	active_edges.Cut()
+
+	// Re-run setup without air settling.
+	Initialize(REALTIMEOFDAY, simulate = FALSE)
+
+	// Update next_fire so the MC doesn't try to make up for missed ticks.
+	next_fire = world.time + wait
+	can_fire = TRUE
+
+/datum/controller/subsystem/zas/stat_entry(msg)
+	if(!can_fire)
+		msg += "REBOOTING..."
+	else
+		msg += "TtU: [length(tiles_to_update)]"
+		msg += "ZtU: [length(zones_to_update)]"
+		msg += "AFZ: [length(active_fire_zones)]"
+		msg += "AH: [length(active_hotspots)]"
+		msg += "AE: [length(active_edges)]"
+	return ..()
+
+/datum/controller/subsystem/zas/Initialize(timeofday, simulate = TRUE)
+
+	var/starttime = REALTIMEOFDAY
+	settings = new
+	gas_data = new /datum/xgm_gas_data
+
+	to_chat(world, bold_announce("Processing Geometry..."))
+
+	var/simulated_turf_count = 0
+	for(var/turf/simulated/S)
+		simulated_turf_count++
+		S.update_air_properties()
+
+		CHECK_TICK
+
+	to_chat(world, bold_announce(
+		{"Total Simulated Turfs: [simulated_turf_count]
+		Total Zones: [zones.len]
+		Total Edges: [edges.len]
+		Total Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]
+		Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"}
+	))
+
+	to_chat(world, bold_announce("Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
+
+	if (simulate)
+		to_chat(world, bold_announce("Settling air..."))
+
+		starttime = REALTIMEOFDAY
+		fire(FALSE, TRUE)
+
+		to_chat(world, bold_announce("Air settling completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
+
+	..(timeofday)
+
+/datum/controller/subsystem/zas/fire(resumed = FALSE)
+	if (!resumed)
+		processing_edges = active_edges.Copy()
+		processing_fires = active_fire_zones.Copy()
+		processing_hotspots = active_hotspots.Copy()
+
+
+	curr_machines = atmos_machinery
+	if(current_process == SSZAS_MACHINES)
+		while (curr_machines.len)
+			var/obj/machinery/atmospherics/current_machine = curr_machines[curr_machines.len]
+			curr_machines.len--
+
+			if(!current_machine)
+				atmos_machinery -= current_machine
+			if(current_machine.process_atmos() == PROCESS_KILL)
+				stop_processing_machine(current_machine)
+
+			if(MC_TICK_CHECK)
+				return
+
+	current_process = SSZAS_TILES
+	curr_tiles = tiles_to_update
+	if(current_process == SSZAS_TILES || !resumed)
+		while (curr_tiles.len)
+			var/turf/T = curr_tiles[curr_tiles.len]
+			curr_tiles.len--
+
+			if (!T)
+				if (MC_TICK_CHECK)
+					return
+				continue
+
+			//check if the turf is self-zone-blocked
+			var/c_airblock
+			ATMOS_CANPASS_TURF(c_airblock, T, T)
+			if(c_airblock & ZONE_BLOCKED)
+				deferred += T
+				if (MC_TICK_CHECK)
+					return
+				continue
+
+			T.update_air_properties()
+			T.post_update_air_properties()
+			T.needs_air_update = 0
+			#ifdef ZASDBG
+			T.overlays -= mark
+			updated++
+			#endif
+
+			if (MC_TICK_CHECK)
+				return
+
+	current_process = SSZAS_DEFERED_TILES
+	curr_defer = deferred
+	if(current_process == SSZAS_DEFERED_TILES)
+		while (curr_defer.len)
+			var/turf/T = curr_defer[curr_defer.len]
+			curr_defer.len--
+
+			T.update_air_properties()
+			T.post_update_air_properties()
+			T.needs_air_update = 0
+			#ifdef ZASDBG
+			T.overlays -= mark
+			updated++
+			#endif
+
+			if (MC_TICK_CHECK)
+				return
+
+	current_process = SSZAS_EDGES
+	curr_edges = processing_edges
+	if(current_process == SSZAS_EDGES)
+		while (curr_edges.len)
+			var/connection_edge/edge = curr_edges[curr_edges.len]
+			curr_edges.len--
+
+			if (!edge)
+				if (MC_TICK_CHECK)
+					return
+				continue
+
+			edge.tick()
+			if (MC_TICK_CHECK)
+				return
+
+	current_process = SSZAS_FIRES
+	curr_fire = processing_fires
+	if(current_process == SSZAS_FIRES)
+		while (curr_fire.len)
+			var/zone/Z = curr_fire[curr_fire.len]
+			curr_fire.len--
+
+			Z.process_fire()
+
+			if (MC_TICK_CHECK)
+				return
+
+	current_process = SSZAS_HOTSPOTS
+	curr_hotspot = processing_hotspots
+	if(current_process == SSZAS_HOTSPOTS)
+		while (curr_hotspot.len)
+			var/obj/fire/F = curr_hotspot[curr_hotspot.len]
+			curr_hotspot.len--
+
+			F.Process()
+
+			if (MC_TICK_CHECK)
+				return
+
+	current_process = SSZAS_ZONES
+	curr_zones = processing_zones
+	if(current_process == SSZAS_ZONES)
+		while (curr_zones.len)
+			var/zone/Z = curr_zones[curr_zones.len]
+			curr_zones.len--
+
+			Z.tick()
+			Z.needs_update = FALSE
+
+			if (MC_TICK_CHECK)
+				return
+
+	current_process = SSZAS_MACHINES
+
+/**
+ * Adds a given machine to the processing system for SSAIR_ATMOSMACHINERY processing.
+ *
+ * Arguments:
+ * * machine - The machine to start processing. Can be any /obj/machinery.
+ */
+/datum/controller/subsystem/zas/proc/start_processing_machine(obj/machinery/machine)
+	if(machine.atmos_processing)
+		return
+	if(QDELETED(machine))
+		stack_trace("We tried to add a garbage collecting machine to SSzas. Don't")
+		return
+	machine.atmos_processing = TRUE
+	atmos_machinery += machine
+
+/**
+ * Removes a given machine to the processing system for SSZAS_MACHINES processing.
+ *
+ * Arguments:
+ * * machine - The machine to stop processing.
+ */
+/datum/controller/subsystem/zas/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
+	// the currentrun list, which is a cache of atmos_machinery. Remove it from that list
+	// as well to prevent processing qdeleted objects in the cache.
+	if(current_process == SSZAS_MACHINES)
+		curr_machines -= machine
+
+/datum/controller/subsystem/zas/proc/add_to_rebuild_queue(obj/machinery/atmospherics/atmos_machine)
+	if(istype(atmos_machine, /obj/machinery/atmospherics) && !atmos_machine.rebuilding)
+		rebuild_queue += atmos_machine
+		atmos_machine.rebuilding = TRUE
+
+/datum/controller/subsystem/zas/proc/add_to_expansion(datum/pipeline/line, starting_point)
+	var/list/new_packet = new(SSAIR_REBUILD_QUEUE)
+	new_packet[SSZAS_REBUILD_PIPELINE] = line
+	new_packet[SSZAS_REBUILD_QUEUE] = list(starting_point)
+	expansion_queue += list(new_packet)
+
+/datum/controller/subsystem/zas/proc/add_zone(zone/z)
+	zones += z
+	z.name = "Zone [next_id++]"
+	mark_zone_update(z)
+
+/datum/controller/subsystem/zas/proc/remove_zone(zone/z)
+	zones -= z
+	zones_to_update -= z
+	if (processing_zones)
+		processing_zones -= z
+
+/datum/controller/subsystem/zas/proc/air_blocked(turf/A, turf/B)
+	#ifdef ZASDBG
+	ASSERT(isturf(A))
+	ASSERT(isturf(B))
+	#endif
+	var/ablock
+	ATMOS_CANPASS_TURF(ablock, A, B)
+	if(ablock == BLOCKED)
+		return BLOCKED
+	ATMOS_CANPASS_TURF(., B, A)
+	return ablock | .
+
+/datum/controller/subsystem/zas/proc/merge(zone/A, zone/B)
+	#ifdef ZASDBG
+	ASSERT(istype(A))
+	ASSERT(istype(B))
+	ASSERT(!A.invalid)
+	ASSERT(!B.invalid)
+	ASSERT(A != B)
+	#endif
+	if(A.contents.len < B.contents.len)
+		A.c_merge(B)
+		mark_zone_update(B)
+	else
+		B.c_merge(A)
+		mark_zone_update(A)
+
+/datum/controller/subsystem/zas/proc/connect(turf/simulated/A, turf/simulated/B)
+	#ifdef ZASDBG
+	ASSERT(istype(A))
+	ASSERT(isturf(B))
+	ASSERT(A.zone)
+	ASSERT(!A.zone.invalid)
+	//ASSERT(B.zone)
+	ASSERT(A != B)
+	#endif
+
+	var/block = air_blocked(A,B)
+	if(block & AIR_BLOCKED) return
+
+	var/direct = !(block & ZONE_BLOCKED)
+	var/space = !istype(B)
+
+	if(!space)
+		if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0)))
+			merge(A.zone,B.zone)
+			return
+
+	var/a_to_b = get_dir(A,B)
+	var/b_to_a = get_dir(B,A)
+
+	if(!A.connections) A.connections = new
+	if(!B.connections) B.connections = new
+
+	if(A.connections.get(a_to_b))
+		return
+	if(B.connections.get(b_to_a))
+		return
+	if(!space)
+		if(A.zone == B.zone) return
+
+
+	var/connection/c = new /connection(A,B)
+
+	A.connections.place(c, a_to_b)
+	B.connections.place(c, b_to_a)
+
+	if(direct) c.mark_direct()
+
+/datum/controller/subsystem/zas/proc/mark_for_update(turf/T)
+	#ifdef ZASDBG
+	ASSERT(isturf(T))
+	#endif
+	if(T.needs_air_update)
+		return
+	tiles_to_update += T
+	#ifdef ZASDBG
+	T.overlays += mark
+	#endif
+	T.needs_air_update = 1
+
+/datum/controller/subsystem/zas/proc/mark_zone_update(zone/Z)
+	#ifdef ZASDBG
+	ASSERT(istype(Z))
+	#endif
+	if(Z.needs_update)
+		return
+	zones_to_update += Z
+	Z.needs_update = 1
+
+/datum/controller/subsystem/zas/proc/mark_edge_sleeping(connection_edge/E)
+	#ifdef ZASDBG
+	ASSERT(istype(E))
+	#endif
+	if(E.sleeping)
+		return
+	active_edges -= E
+	E.sleeping = 1
+
+/datum/controller/subsystem/zas/proc/mark_edge_active(connection_edge/E)
+	#ifdef ZASDBG
+	ASSERT(istype(E))
+	#endif
+	if(!E.sleeping)
+		return
+	active_edges += E
+	E.sleeping = 0
+
+/datum/controller/subsystem/zas/proc/equivalent_pressure(zone/A, zone/B)
+	return A.air.compare(B.air)
+
+/datum/controller/subsystem/zas/proc/get_edge(zone/A, zone/B)
+	if(istype(B))
+		for(var/connection_edge/zone/edge in A.edges)
+			if(edge.contains_zone(B))
+				return edge
+		var/connection_edge/edge = new/connection_edge/zone(A,B)
+		edges += edge
+		edge.recheck()
+		return edge
+	else
+		for(var/connection_edge/unsimulated/edge in A.edges)
+			if(has_same_air(edge.B,B))
+				return edge
+		var/connection_edge/edge = new/connection_edge/unsimulated(A,B)
+		edges += edge
+		edge.recheck()
+		return edge
+
+/datum/controller/subsystem/zas/proc/has_same_air(turf/A, turf/B)
+	if(A.initial_gas)
+		if(!B.initial_gas)
+			return 0
+		for(var/g in A.initial_gas)
+			if(A.initial_gas[g] != B.initial_gas[g])
+				return 0
+	if(B.initial_gas)
+		if(!A.initial_gas)
+			return 0
+		for(var/g in B.initial_gas)
+			if(A.initial_gas[g] != B.initial_gas[g])
+				return 0
+	if(A.temperature != B.temperature)
+		return 0
+	return 1
+
+/datum/controller/subsystem/zas/proc/remove_edge(connection_edge/E)
+	edges -= E
+	if(!E.sleeping)
+		active_edges -= E
+	if(processing_edges)
+		processing_edges -= E
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
new file mode 100644
index 00000000000..49020e27a64
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -0,0 +1,152 @@
+/*
+Contains helper procs for airflow, handled in /connection_group.
+*/
+
+mob/var/tmp/last_airflow_stun = 0
+mob/proc/airflow_stun()
+	if(stat == 2)
+		return 0
+	if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown)	return 0
+
+	if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
+		to_chat(src, "<span class='notice'>You stay upright as the air rushes past you.</span>")
+		return 0
+	if(buckled)
+		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
+		return 0
+	if(!lying)
+		to_chat(src, "<span class='warning'>The sudden rush of air knocks you over!</span>")
+	Weaken(5)
+	last_airflow_stun = world.time
+
+mob/living/silicon/airflow_stun()
+	return
+
+mob/living/carbon/slime/airflow_stun()
+	return
+
+mob/living/carbon/human/airflow_stun()
+	if(!slip_chance())
+		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
+		return 0
+	..()
+
+atom/movable/proc/check_airflow_movable(n)
+
+	if(anchored && !ismob(src)) return 0
+
+	if(!isobj(src) && n < vsc.airflow_dense_pressure) return 0
+
+	return 1
+
+mob/check_airflow_movable(n)
+	if(n < vsc.airflow_heavy_pressure)
+		return 0
+	return 1
+
+mob/living/silicon/check_airflow_movable()
+	return 0
+
+
+obj/check_airflow_movable(n)
+	if(isnull(w_class))
+		if(n < vsc.airflow_dense_pressure) return 0 //most non-item objs don't have a w_class yet
+	else
+		switch(w_class)
+			if(1,2)
+				if(n < vsc.airflow_lightest_pressure) return 0
+			if(3)
+				if(n < vsc.airflow_light_pressure) return 0
+			if(4,5)
+				if(n < vsc.airflow_medium_pressure) return 0
+			if(6)
+				if(n < vsc.airflow_heavy_pressure) return 0
+			if(7 to INFINITY)
+				if(n < vsc.airflow_dense_pressure) return 0
+	return ..()
+
+
+/atom/movable/var/tmp/turf/airflow_dest
+/atom/movable/var/tmp/airflow_speed = 0
+/atom/movable/var/tmp/airflow_time = 0
+/atom/movable/var/tmp/last_airflow = 0
+/atom/movable/var/tmp/airborne_acceleration = 0
+
+/atom/movable/proc/AirflowCanMove(n)
+	return 1
+
+/mob/AirflowCanMove(n)
+	if(status_flags & GODMODE)
+		return 0
+	if(buckled)
+		return 0
+	var/obj/item/shoes = get_equipped_item(slot_shoes)
+	if(istype(shoes) && (shoes.item_flags & ITEM_FLAG_NOSLIP))
+		return 0
+	return 1
+
+/atom/movable/Bump(atom/A)
+	if(airflow_speed > 0 && airflow_dest)
+		if(airborne_acceleration > 1)
+			airflow_hit(A)
+		else if(istype(src, /mob/living/carbon/human))
+			to_chat(src, "<span class='notice'>You are pinned against [A] by airflow!</span>")
+			airborne_acceleration = 0
+	else
+		airflow_speed = 0
+		airflow_time = 0
+		airborne_acceleration = 0
+		. = ..()
+
+atom/movable/proc/airflow_hit(atom/A)
+	airflow_speed = 0
+	airflow_dest = null
+	airborne_acceleration = 0
+
+mob/airflow_hit(atom/A)
+	for(var/mob/M in hearers(src))
+		M.show_message("<span class='danger'>\The [src] slams into \a [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
+	playsound(src.loc, "smash.ogg", 25, 1, -1)
+	var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh
+	Weaken(weak_amt)
+	. = ..()
+
+obj/airflow_hit(atom/A)
+	for(var/mob/M in hearers(src))
+		M.show_message("<span class='danger'>\The [src] slams into \a [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
+	playsound(src.loc, "smash.ogg", 25, 1, -1)
+	. = ..()
+
+obj/item/airflow_hit(atom/A)
+	airflow_speed = 0
+	airflow_dest = null
+
+mob/living/carbon/human/airflow_hit(atom/A)
+//	for(var/mob/M in hearers(src))
+//		M.show_message("<span class='danger'>[src] slams into [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
+	playsound(src.loc, "punch", 25, 1, -1)
+	if (prob(33))
+		loc:add_blood(src)
+		bloody_body(src)
+	var/b_loss = min(airflow_speed, (airborne_acceleration*2)) * vsc.airflow_damage
+
+	apply_damage(b_loss/3, BRUTE, BP_HEAD, used_weapon = "Airflow")
+
+	apply_damage(b_loss/3, BRUTE, BP_CHEST, used_weapon =  "Airflow")
+
+	apply_damage(b_loss/3, BRUTE, BP_GROIN, used_weapon =  "Airflow")
+
+	if(airflow_speed > 10)
+		Paralyse(round(airflow_speed * vsc.airflow_stun))
+		Stun(paralysis + 3)
+	else
+		Stun(round(airflow_speed * vsc.airflow_stun/2))
+	. = ..()
+
+zone/proc/movables()
+	. = list()
+	for(var/turf/T in contents)
+		for(var/atom/movable/A in T)
+			if(!A.simulated || A.anchored || istype(A, /obj/effect) || isobserver(A))
+				continue
+			. += A
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
new file mode 100644
index 00000000000..fdf263052e7
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -0,0 +1,59 @@
+
+/atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
+	//Purpose: Determines if the object (or airflow) can pass this atom.
+	//Called by: Movement, airflow.
+	//Inputs: The moving atom (optional), target turf, "height" and air group
+	//Outputs: Boolean if can pass.
+
+	return (!density || !height || air_group)
+
+/turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0)
+	if(!target) return 0
+
+	if(istype(mover)) // turf/Enter(...) will perform more advanced checks
+		return !density
+
+	else // Now, doing more detailed checks for air movement and air group formation
+		if(target.blocks_air||blocks_air)
+			return 0
+
+		for(var/obj/obstacle in src)
+			if(!obstacle.CanPass(mover, target, height, air_group))
+				return 0
+		if(target != src)
+			for(var/obj/obstacle in target)
+				if(!obstacle.CanPass(mover, src, height, air_group))
+					return 0
+
+		return 1
+
+//Convenience function for atoms to update turfs they occupy
+/atom/movable/proc/update_nearby_tiles(need_rebuild)
+	for(var/turf/simulated/turf in locs)
+		SSair.mark_for_update(turf)
+
+	return 1
+
+//Basically another way of calling CanPass(null, other, 0, 0) and CanPass(null, other, 1.5, 1).
+//Returns:
+// 0 - Not blocked
+// AIR_BLOCKED - Blocked
+// ZONE_BLOCKED - Not blocked, but zone boundaries will not cross.
+// BLOCKED - Blocked, zone boundaries will not cross even if opened.
+atom/proc/c_airblock(turf/other)
+	#ifdef ZASDBG
+	ASSERT(isturf(other))
+	#endif
+	return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1))
+
+// This is a legacy proc only here for compatibility - you probably should just use ATMOS_CANPASS_TURF directly.
+turf/c_airblock(turf/other)
+	#ifdef ZASDBG
+	ASSERT(isturf(other))
+	#endif
+
+	. = 0
+	ATMOS_CANPASS_TURF(., src, other)
+
+/atom/movable
+	var/atmos_canpass = CANPASS_ALWAYS
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
new file mode 100644
index 00000000000..17c8ea16281
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -0,0 +1,168 @@
+#define CONNECTION_DIRECT 2
+#define CONNECTION_SPACE 4
+#define CONNECTION_INVALID 8
+
+/*
+
+Overview:
+	Connections are made between turfs by SSair.connect(). They represent a single point where two zones converge.
+
+Class Vars:
+	A - Always a simulated turf.
+	B - A simulated or unsimulated turf.
+
+	zoneA - The archived zone of A. Used to check that the zone hasn't changed.
+	zoneB - The archived zone of B. May be null in case of unsimulated connections.
+
+	edge - Stores the edge this connection is in. Can reference an edge that is no longer processed
+		   after this connection is removed, so make sure to check edge.coefficient > 0 before re-adding it.
+
+Class Procs:
+
+	mark_direct()
+		Marks this connection as direct. Does not update the edge.
+		Called when the connection is made and there are no doors between A and B.
+		Also called by update() as a correction.
+
+	mark_indirect()
+		Unmarks this connection as direct. Does not update the edge.
+		Called by update() as a correction.
+
+	mark_space()
+		Marks this connection as unsimulated. Updating the connection will check the validity of this.
+		Called when the connection is made.
+		This will not be called as a correction, any connections failing a check against this mark are erased and rebuilt.
+
+	direct()
+		Returns 1 if no doors are in between A and B.
+
+	valid()
+		Returns 1 if the connection has not been erased.
+
+	erase()
+		Called by update() and connection_manager/erase_all().
+		Marks the connection as erased and removes it from its edge.
+
+	update()
+		Called by connection_manager/update_all().
+		Makes numerous checks to decide whether the connection is still valid. Erases it automatically if not.
+
+*/
+
+/connection/var/turf/simulated/A
+/connection/var/turf/simulated/B
+/connection/var/zone/zoneA
+/connection/var/zone/zoneB
+
+/connection/var/connection_edge/edge
+
+/connection/var/state = 0
+
+/connection/New(turf/simulated/A, turf/simulated/B)
+	#ifdef ZASDBG
+	ASSERT(SSair.has_valid_zone(A))
+	//ASSERT(SSair.has_valid_zone(B))
+	#endif
+	src.A = A
+	src.B = B
+	zoneA = A.zone
+	if(!istype(B))
+		mark_space()
+		edge = SSair.get_edge(A.zone,B)
+		edge.add_connection(src)
+	else
+		zoneB = B.zone
+		edge = SSair.get_edge(A.zone,B.zone)
+		edge.add_connection(src)
+
+/connection/proc/mark_direct()
+	if(!direct())
+		state |= CONNECTION_DIRECT
+		edge.direct++
+//	log_debug("Marked direct.")
+
+/connection/proc/mark_indirect()
+	if(direct())
+		state &= ~CONNECTION_DIRECT
+		edge.direct--
+//	log_debug("Marked indirect.")
+
+/connection/proc/mark_space()
+	state |= CONNECTION_SPACE
+
+/connection/proc/direct()
+	return (state & CONNECTION_DIRECT)
+
+/connection/proc/valid()
+	return !(state & CONNECTION_INVALID)
+
+/connection/proc/erase()
+	edge.remove_connection(src)
+	state |= CONNECTION_INVALID
+//	log_debug("Connection Erased: [state]")
+
+/connection/proc/update()
+//	log_debug("Updated, \...")
+	if(!istype(A,/turf/simulated))
+//		log_debug("Invalid A.")
+		erase()
+		return
+
+	var/block_status = SSair.air_blocked(A,B)
+	if(block_status & AIR_BLOCKED)
+//		log_debug("Blocked connection.")
+		erase()
+		return
+	else if(block_status & ZONE_BLOCKED)
+		mark_indirect()
+	else
+		mark_direct()
+
+	var/b_is_space = !istype(B,/turf/simulated)
+
+	if(state & CONNECTION_SPACE)
+		if(!b_is_space)
+//			log_debug("Invalid B.")
+			erase()
+			return
+		if(A.zone != zoneA)
+//			log_debug("Zone changed, \...")
+			if(!A.zone)
+				erase()
+//				log_debug("erased.")
+				return
+			else
+				edge.remove_connection(src)
+				edge = SSair.get_edge(A.zone, B)
+				edge.add_connection(src)
+				zoneA = A.zone
+
+//		log_debug("valid.")
+		return
+
+	else if(b_is_space)
+//		log_debug("Invalid B.")
+		erase()
+		return
+
+	if(A.zone == B.zone)
+//		log_debug("A == B")
+		erase()
+		return
+
+	if(A.zone != zoneA || (zoneB && (B.zone != zoneB)))
+
+//		log_debug("Zones changed, \...")
+		if(A.zone && B.zone)
+			edge.remove_connection(src)
+			edge = SSair.get_edge(A.zone, B.zone)
+			edge.add_connection(src)
+			zoneA = A.zone
+			zoneB = B.zone
+		else
+//			log_debug("erased.")
+			erase()
+			return
+
+
+//	log_debug("valid.")
\ No newline at end of file
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
new file mode 100644
index 00000000000..17249aae155
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -0,0 +1,260 @@
+/*
+
+Overview:
+	These are what handle gas transfers between zones and into space.
+	They are found in a zone's edges list and in SSair.edges.
+	Each edge updates every air tick due to their role in gas transfer.
+	They come in two flavors, /connection_edge/zone and /connection_edge/unsimulated.
+	As the type names might suggest, they handle inter-zone and spacelike connections respectively.
+
+Class Vars:
+
+	A - This always holds a zone. In unsimulated edges, it holds the only zone.
+
+	connecting_turfs - This holds a list of connected turfs, mainly for the sake of airflow.
+
+	coefficent - This is a marker for how many connections are on this edge. Used to determine the ratio of flow.
+
+	connection_edge/zone
+
+		B - This holds the second zone with which the first zone equalizes.
+
+		direct - This counts the number of direct (i.e. with no doors) connections on this edge.
+		         Any value of this is sufficient to make the zones mergeable.
+
+	connection_edge/unsimulated
+
+		B - This holds an unsimulated turf which has the gas values this edge is mimicing.
+
+		air - Retrieved from B on creation and used as an argument for the legacy ShareSpace() proc.
+
+Class Procs:
+
+	add_connection(connection/c)
+		Adds a connection to this edge. Usually increments the coefficient and adds a turf to connecting_turfs.
+
+	remove_connection(connection/c)
+		Removes a connection from this edge. This works even if c is not in the edge, so be careful.
+		If the coefficient reaches zero as a result, the edge is erased.
+
+	contains_zone(zone/Z)
+		Returns true if either A or B is equal to Z. Unsimulated connections return true only on A.
+
+	erase()
+		Removes this connection from processing and zone edge lists.
+
+	tick()
+		Called every air tick on edges in the processing list. Equalizes gas.
+
+	flow(list/movable, differential, repelled)
+		Airflow proc causing all objects in movable to be checked against a pressure differential.
+		If repelled is true, the objects move away from any turf in connecting_turfs, otherwise they approach.
+		A check against vsc.lightest_airflow_pressure should generally be performed before calling this.
+
+	get_connected_zone(zone/from)
+		Helper proc that allows getting the other zone of an edge given one of them.
+		Only on /connection_edge/zone, otherwise use A.
+
+*/
+
+
+/connection_edge/var/zone/A
+
+/connection_edge/var/list/connecting_turfs = list()
+/connection_edge/var/direct = 0
+/connection_edge/var/sleeping = 1
+
+/connection_edge/var/coefficient = 0
+
+/connection_edge/New()
+	CRASH("Cannot make connection edge without specifications.")
+
+/connection_edge/proc/add_connection(connection/c)
+	coefficient++
+	if(c.direct()) direct++
+//	log_debug("Connection added: [type] Coefficient: [coefficient]")
+
+
+/connection_edge/proc/remove_connection(connection/c)
+//	log_debug("Connection removed: [type] Coefficient: [coefficient-1]")
+
+	coefficient--
+	if(coefficient <= 0)
+		erase()
+	if(c.direct()) direct--
+
+/connection_edge/proc/contains_zone(zone/Z)
+
+/connection_edge/proc/erase()
+	SSair.remove_edge(src)
+//	log_debug("[type] Erased.")
+
+
+/connection_edge/proc/tick()
+
+/connection_edge/proc/recheck()
+
+/connection_edge/proc/flow(list/movable, differential, repelled)
+	for(var/i = 1; i <= movable.len; i++)
+		var/atom/movable/M = movable[i]
+
+		//If they're already being tossed, don't do it again.
+		if(M.last_airflow > world.time - vsc.airflow_delay) continue
+		if(M.airflow_speed) continue
+
+		//Check for knocking people over
+		if(ismob(M) && differential > vsc.airflow_stun_pressure)
+			if(M:status_flags & GODMODE) continue
+			M:airflow_stun()
+
+		if(M.check_airflow_movable(differential))
+			//Check for things that are in range of the midpoint turfs.
+			var/list/close_turfs = list()
+			for(var/turf/U in connecting_turfs)
+				if(get_dist(M,U) < world.view) close_turfs += U
+			if(!close_turfs.len) continue
+
+			M.airflow_dest = pick(close_turfs) //Pick a random midpoint to fly towards.
+
+			if(repelled) spawn if(M) M.RepelAirflowDest(differential/5)
+			else spawn if(M) M.GotoAirflowDest(differential/10)
+
+
+
+
+/connection_edge/zone/var/zone/B
+
+/connection_edge/zone/New(zone/A, zone/B)
+
+	src.A = A
+	src.B = B
+	A.edges.Add(src)
+	B.edges.Add(src)
+	//id = edge_id(A,B)
+//	log_debug("New edge between [A] and [B]")
+
+
+/connection_edge/zone/add_connection(connection/c)
+	. = ..()
+	connecting_turfs.Add(c.A)
+
+/connection_edge/zone/remove_connection(connection/c)
+	connecting_turfs.Remove(c.A)
+	. = ..()
+
+/connection_edge/zone/contains_zone(zone/Z)
+	return A == Z || B == Z
+
+/connection_edge/zone/erase()
+	A.edges.Remove(src)
+	B.edges.Remove(src)
+	. = ..()
+
+/connection_edge/zone/tick()
+	if(A.invalid || B.invalid)
+		erase()
+		return
+
+	var/equiv = A.air.share_ratio(B.air, coefficient)
+
+	var/differential = A.air.return_pressure() - B.air.return_pressure()
+	if(abs(differential) >= vsc.airflow_lightest_pressure)
+		var/list/attracted
+		var/list/repelled
+		if(differential > 0)
+			attracted = A.movables()
+			repelled = B.movables()
+		else
+			attracted = B.movables()
+			repelled = A.movables()
+
+		flow(attracted, abs(differential), 0)
+		flow(repelled, abs(differential), 1)
+
+	if(equiv)
+		if(direct)
+			erase()
+			SSair.merge(A, B)
+			return
+		else
+			A.air.equalize(B.air)
+			SSair.mark_edge_sleeping(src)
+
+	SSair.mark_zone_update(A)
+	SSair.mark_zone_update(B)
+
+/connection_edge/zone/recheck()
+	if(!A.air.compare(B.air, vacuum_exception = 1))
+	// Edges with only one side being vacuum need processing no matter how close.
+		SSair.mark_edge_active(src)
+
+//Helper proc to get connections for a zone.
+/connection_edge/zone/proc/get_connected_zone(zone/from)
+	if(A == from) return B
+	else return A
+
+/connection_edge/unsimulated/var/turf/B
+/connection_edge/unsimulated/var/datum/gas_mixture/air
+
+/connection_edge/unsimulated/New(zone/A, turf/B)
+	src.A = A
+	src.B = B
+	A.edges.Add(src)
+	air = B.return_air()
+	//id = 52*A.id
+//	log_debug("New edge from [A] to [B].")
+
+
+/connection_edge/unsimulated/add_connection(connection/c)
+	. = ..()
+	connecting_turfs.Add(c.B)
+	air.group_multiplier = coefficient
+
+/connection_edge/unsimulated/remove_connection(connection/c)
+	connecting_turfs.Remove(c.B)
+	air.group_multiplier = coefficient
+	. = ..()
+
+/connection_edge/unsimulated/erase()
+	A.edges.Remove(src)
+	. = ..()
+
+/connection_edge/unsimulated/contains_zone(zone/Z)
+	return A == Z
+
+/connection_edge/unsimulated/tick()
+	if(A.invalid)
+		erase()
+		return
+
+	var/equiv = A.air.share_space(air)
+
+	var/differential = A.air.return_pressure() - air.return_pressure()
+	if(abs(differential) >= vsc.airflow_lightest_pressure)
+		var/list/attracted = A.movables()
+		flow(attracted, abs(differential), differential < 0)
+
+	if(equiv)
+		A.air.copy_from(air)
+		SSair.mark_edge_sleeping(src)
+
+	SSair.mark_zone_update(A)
+
+/connection_edge/unsimulated/recheck()
+	// Edges with only one side being vacuum need processing no matter how close.
+	// Note: This handles the glaring flaw of a room holding pressure while exposed to space, but
+	// does not specially handle the less common case of a simulated room exposed to an unsimulated pressurized turf.
+	if(!A.air.compare(air, vacuum_exception = 1))
+		SSair.mark_edge_active(src)
+
+proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
+	//This implements a simplistic version of the Stefan-Boltzmann law.
+	var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5
+	var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier))
+	if(maximum_energy_delta > abs(energy_delta))
+		if(energy_delta < 0)
+			maximum_energy_delta *= -1
+		energy_delta = maximum_energy_delta
+
+	A.temperature -= energy_delta / (A.heat_capacity() * A.group_multiplier)
+	B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier)
diff --git a/code/modules/atmospherics/ZAS/ConnectionManager.dm b/code/modules/atmospherics/ZAS/ConnectionManager.dm
new file mode 100644
index 00000000000..3890cd85f5c
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/ConnectionManager.dm
@@ -0,0 +1,105 @@
+/*
+
+Overview:
+	The connection_manager class stores connections in each cardinal direction on a turf.
+	It isn't always present if a turf has no connections, check if(connections) before using.
+	Contains procs for mass manipulation of connection data.
+
+Class Vars:
+
+	NSEWUD - Connections to this turf in each cardinal direction.
+
+Class Procs:
+
+	get(d)
+		Returns the connection (if any) in this direction.
+		Preferable to accessing the connection directly because it checks validity.
+
+	place(connection/c, d)
+		Called by air_master.connect(). Sets the connection in the specified direction to c.
+
+	update_all()
+		Called after turf/update_air_properties(). Updates the validity of all connections on this turf.
+
+	erase_all()
+		Called when the turf is changed with ChangeTurf(). Erases all existing connections.
+
+Macros:
+	check(connection/c)
+		Checks for connection validity. It's possible to have a reference to a connection that has been erased.
+
+
+*/
+
+// macro-ized to cut down on proc calls
+#define check(c) (c && c.valid())
+
+/turf/var/tmp/connection_manager/connections
+
+/connection_manager/var/connection/N
+/connection_manager/var/connection/S
+/connection_manager/var/connection/E
+/connection_manager/var/connection/W
+
+#ifdef MULTIZAS
+/connection_manager/var/connection/U
+/connection_manager/var/connection/D
+#endif
+
+/connection_manager/proc/get(d)
+	switch(d)
+		if(NORTH)
+			if(check(N)) return N
+			else return null
+		if(SOUTH)
+			if(check(S)) return S
+			else return null
+		if(EAST)
+			if(check(E)) return E
+			else return null
+		if(WEST)
+			if(check(W)) return W
+			else return null
+
+		#ifdef MULTIZAS
+		if(UP)
+			if(check(U)) return U
+			else return null
+		if(DOWN)
+			if(check(D)) return D
+			else return null
+		#endif
+
+/connection_manager/proc/place(connection/c, d)
+	switch(d)
+		if(NORTH) N = c
+		if(SOUTH) S = c
+		if(EAST) E = c
+		if(WEST) W = c
+
+		#ifdef MULTIZAS
+		if(UP) U = c
+		if(DOWN) D = c
+		#endif
+
+/connection_manager/proc/update_all()
+	if(check(N)) N.update()
+	if(check(S)) S.update()
+	if(check(E)) E.update()
+	if(check(W)) W.update()
+	#ifdef MULTIZAS
+	if(check(U)) U.update()
+	if(check(D)) D.update()
+	#endif
+
+/connection_manager/proc/erase_all()
+	if(check(N)) N.erase()
+	if(check(S)) S.erase()
+	if(check(E)) E.erase()
+	if(check(W)) W.erase()
+	#ifdef MULTIZAS
+	if(check(U)) U.erase()
+	if(check(D)) D.erase()
+	#endif
+
+#undef check
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
new file mode 100644
index 00000000000..6f0a67fd3eb
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -0,0 +1,20 @@
+var/image/assigned = image('icons/Testing/Zone.dmi', icon_state = "assigned")
+var/image/created = image('icons/Testing/Zone.dmi', icon_state = "created")
+var/image/merged = image('icons/Testing/Zone.dmi', icon_state = "merged")
+var/image/invalid_zone = image('icons/Testing/Zone.dmi', icon_state = "invalid")
+var/image/air_blocked = image('icons/Testing/Zone.dmi', icon_state = "block")
+var/image/zone_blocked = image('icons/Testing/Zone.dmi', icon_state = "zoneblock")
+var/image/blocked = image('icons/Testing/Zone.dmi', icon_state = "fullblock")
+var/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark")
+
+/connection_edge/var/dbg_out = 0
+
+/turf/var/tmp/dbg_img
+/turf/proc/dbg(image/img, d = 0)
+	if(d > 0) img.dir = d
+	overlays -= dbg_img
+	overlays += img
+	dbg_img = img
+
+proc/soft_assert(thing,fail)
+	if(!thing) message_admins(fail)
\ No newline at end of file
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
new file mode 100644
index 00000000000..4433dfefdd8
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -0,0 +1,82 @@
+client/proc/Zone_Info(turf/T as null|turf)
+	set category = "Debug"
+	if(T)
+		if(istype(T,/turf/simulated) && T:zone)
+			T:zone:dbg_data(src)
+		else
+			to_chat(mob, "No zone here.")
+			var/datum/gas_mixture/mix = T.return_air()
+			to_chat(mob, "[mix.return_pressure()] kPa [mix.temperature]C")
+			for(var/g in mix.gas)
+				to_chat(mob, "[g]: [mix.gas[g]]\n")
+	else
+		if(zone_debug_images)
+			for(var/zone in  zone_debug_images)
+				images -= zone_debug_images[zone]
+			zone_debug_images = null
+
+client/var/list/zone_debug_images
+
+client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
+	set category = "Debug"
+	if(!istype(T))
+		return
+
+	var/direction_list = list(\
+	"North" = NORTH,\
+	"South" = SOUTH,\
+	"East" = EAST,\
+	"West" = WEST,\
+	#ifdef MULTIZAS
+	"Up" = UP,\
+	"Down" = DOWN,\
+	#endif
+	"N/A" = null)
+	var/direction = input("What direction do you wish to test?","Set direction") as null|anything in direction_list
+	if(!direction)
+		return
+
+	if(direction == "N/A")
+		if(!(T.c_airblock(T) & AIR_BLOCKED))
+			to_chat(mob, "The turf can pass air! :D")
+		else
+			to_chat(mob, "No air passage :x")
+		return
+
+	var/turf/simulated/other_turf = get_step(T, direction_list[direction])
+	if(!istype(other_turf))
+		return
+
+	var/t_block = T.c_airblock(other_turf)
+	var/o_block = other_turf.c_airblock(T)
+
+	if(o_block & AIR_BLOCKED)
+		if(t_block & AIR_BLOCKED)
+			to_chat(mob, "Neither turf can connect. :(")
+
+		else
+			to_chat(mob, "The initial turf only can connect. :\\")
+	else
+		if(t_block & AIR_BLOCKED)
+			to_chat(mob, "The other turf can connect, but not the initial turf. :/")
+
+		else
+			to_chat(mob, "Both turfs can connect! :)")
+
+	to_chat(mob, "Additionally, \...")
+
+	if(o_block & ZONE_BLOCKED)
+		if(t_block & ZONE_BLOCKED)
+			to_chat(mob, "neither turf can merge.")
+		else
+			to_chat(mob, "the other turf cannot merge.")
+	else
+		if(t_block & ZONE_BLOCKED)
+			to_chat(mob, "the initial turf cannot merge.")
+		else
+			to_chat(mob, "both turfs can merge.")
+
+client/proc/ZASSettings()
+	set category = "Debug"
+
+	vsc.SetDefault(mob)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
new file mode 100644
index 00000000000..477714c2c76
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -0,0 +1,443 @@
+/*
+
+Making Bombs with ZAS:
+Get gas to react in an air tank so that it gains pressure. If it gains enough pressure, it goes boom.
+The more pressure, the more boom.
+If it gains pressure too slowly, it may leak or just rupture instead of exploding.
+*/
+
+//#define FIREDBG
+
+/turf/var/obj/fire/fire = null
+
+//Some legacy definitions so fires can be started.
+atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+	return null
+
+/atom/movable/proc/is_burnable()
+	return FALSE
+
+/mob/is_burnable()
+	return simulated
+
+turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
+
+
+/turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
+	if(fire_protection > world.time-300)
+		return 0
+	if(locate(/obj/fire) in src)
+		return 1
+	var/datum/gas_mixture/air_contents = return_air()
+	if(!air_contents || exposed_temperature < PHORON_MINIMUM_BURN_TEMPERATURE)
+		return 0
+
+	var/igniting = 0
+	var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in src
+
+	if(air_contents.check_combustability(liquid))
+		igniting = 1
+
+		create_fire(exposed_temperature)
+	return igniting
+
+/zone/proc/process_fire()
+	var/datum/gas_mixture/burn_gas = air.remove_ratio(vsc.fire_consuption_rate, fire_tiles.len)
+
+	var/firelevel = burn_gas.react(src, fire_tiles, force_burn = 1, no_check = 1)
+
+	air.merge(burn_gas)
+
+	if(firelevel)
+		for(var/turf/T in fire_tiles)
+			if(T.fire)
+				T.fire.firelevel = firelevel
+			else
+				var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
+				fire_tiles -= T
+				fuel_objs -= fuel
+	else
+		for(var/turf/simulated/T in fire_tiles)
+			if(istype(T.fire))
+				qdel(T.fire)
+		fire_tiles.Cut()
+		fuel_objs.Cut()
+
+	if(!fire_tiles.len)
+		SSair.active_fire_zones.Remove(src)
+
+/zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0)
+	if(!fuel_objs.len)
+		return
+
+	//As a simplification, we remove fuel equally from all fuel sources. It might be that some fuel sources have more fuel,
+	//some have less, but whatever. It will mean that sometimes we will remove a tiny bit less fuel then we intended to.
+
+	var/fuel_to_remove = used_liquid_fuel/(fuel_objs.len*LIQUIDFUEL_AMOUNT_TO_MOL) //convert back to liquid volume units
+
+	for(var/O in fuel_objs)
+		var/obj/effect/decal/cleanable/liquid_fuel/fuel = O
+		if(!istype(fuel))
+			fuel_objs -= fuel
+			continue
+
+		fuel.amount -= fuel_to_remove
+		if(fuel.amount <= 0)
+			fuel_objs -= fuel
+			if(remove_fire)
+				var/turf/T = fuel.loc
+				if(istype(T) && T.fire) qdel(T.fire)
+			qdel(fuel)
+
+/turf/proc/create_fire(fl)
+	return 0
+
+/turf/simulated/create_fire(fl)
+
+	if(submerged())
+		return 1
+
+	if(fire)
+		fire.firelevel = max(fl, fire.firelevel)
+		return 1
+
+	if(!zone)
+		return 1
+
+	fire = new(src, fl)
+	SSair.active_fire_zones |= zone
+
+	var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src
+	zone.fire_tiles |= src
+	if(fuel) zone.fuel_objs += fuel
+
+	return 0
+
+/obj/fire
+	//Icon for fire on turfs.
+
+	anchored = TRUE
+	mouse_opacity = 0
+
+	blend_mode = BLEND_ADD
+
+	icon = 'icons/effects/fire.dmi'
+	icon_state = "1"
+	light_color = "#ed9200"
+	layer = FIRE_LAYER
+
+	var/firelevel = 1 //Calculated by gas_mixture.calculate_firelevel()
+
+/obj/fire/Process()
+	. = 1
+
+	var/turf/simulated/my_tile = loc
+	if(!istype(my_tile) || !my_tile.zone || my_tile.submerged())
+		if(my_tile && my_tile.fire == src)
+			my_tile.fire = null
+		qdel(src)
+		return PROCESS_KILL
+
+	var/datum/gas_mixture/air_contents = my_tile.return_air()
+
+	if(firelevel > 6)
+		icon_state = "3"
+		set_light(1, 2, 7)
+	else if(firelevel > 2.5)
+		icon_state = "2"
+		set_light(0.7, 2, 5)
+	else
+		icon_state = "1"
+		set_light(0.5, 1, 3)
+
+	for(var/mob/living/L in loc)
+		L.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure())  //Burn the mobs!
+
+	loc.fire_act(air_contents, air_contents.temperature, air_contents.volume)
+	for(var/atom/A in loc)
+		A.fire_act(air_contents, air_contents.temperature, air_contents.volume)
+
+	//spread
+	for(var/direction in GLOB.cardinal)
+		var/turf/simulated/enemy_tile = get_step(my_tile, direction)
+
+		if(istype(enemy_tile))
+			if(my_tile.open_directions & direction) //Grab all valid bordering tiles
+				if(!enemy_tile.zone || enemy_tile.fire)
+					continue
+
+				//if(!enemy_tile.zone.fire_tiles.len) TODO - optimize
+				var/datum/gas_mixture/acs = enemy_tile.return_air()
+				var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in enemy_tile
+				if(!acs || !acs.check_combustability(liquid))
+					continue
+
+				//If extinguisher mist passed over the turf it's trying to spread to, don't spread and
+				//reduce firelevel.
+				if(enemy_tile.fire_protection > world.time-30)
+					firelevel -= 1.5
+					continue
+
+				//Spread the fire.
+				if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0))
+					enemy_tile.create_fire(firelevel)
+
+			else
+				enemy_tile.adjacent_fire_act(loc, air_contents, air_contents.temperature, air_contents.volume)
+
+	animate(src, color = fire_color(air_contents.temperature), 5)
+	set_light(l_color = color)
+
+/obj/fire/New(newLoc,fl)
+	..()
+
+	if(!istype(loc, /turf))
+		qdel(src)
+		return
+
+	set_dir(pick(GLOB.cardinal))
+
+	var/datum/gas_mixture/air_contents = loc.return_air()
+	color = fire_color(air_contents.temperature)
+	set_light(0.5, 1, 3, l_color = color)
+
+	firelevel = fl
+	SSair.active_hotspots.Add(src)
+
+/obj/fire/proc/fire_color(var/env_temperature)
+	var/temperature = max(4000*sqrt(firelevel/vsc.fire_firelevel_multiplier), env_temperature)
+	return heat2color(temperature)
+
+/obj/fire/Destroy()
+	var/turf/T = loc
+	if (istype(T))
+		set_light(0)
+		T.fire = null
+	SSair.active_hotspots.Remove(src)
+	. = ..()
+
+/turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again.
+/turf/proc/apply_fire_protection()
+/turf/simulated/apply_fire_protection()
+	fire_protection = world.time
+
+//Returns the firelevel
+/datum/gas_mixture/proc/react(zone/zone, force_burn, no_check = 0)
+	. = 0
+	if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null)))
+
+		#ifdef FIREDBG
+		log_debug("***************** FIREDBG *****************")
+		log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!")
+		#endif
+
+		var/gas_fuel = 0
+		var/liquid_fuel = 0
+		var/total_fuel = 0
+		var/total_oxidizers = 0
+
+		//*** Get the fuel and oxidizer amounts
+		for(var/g in gas)
+			if(gas_data.flags[g] & XGM_GAS_FUEL)
+				gas_fuel += gas[g]
+			if(gas_data.flags[g] & XGM_GAS_OXIDIZER)
+				total_oxidizers += gas[g]
+		gas_fuel *= group_multiplier
+		total_oxidizers *= group_multiplier
+
+		//Liquid Fuel
+		var/fuel_area = 0
+		if(zone)
+			for(var/obj/effect/decal/cleanable/liquid_fuel/fuel in zone.fuel_objs)
+				liquid_fuel += fuel.amount*LIQUIDFUEL_AMOUNT_TO_MOL
+				fuel_area++
+
+		total_fuel = gas_fuel + liquid_fuel
+		if(total_fuel <= 0.005)
+			return 0
+
+		//*** Determine how fast the fire burns
+
+		//get the current thermal energy of the gas mix
+		//this must be taken here to prevent the addition or deletion of energy by a changing heat capacity
+		var/starting_energy = temperature * heat_capacity()
+
+		//determine how far the reaction can progress
+		var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit
+
+		//vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).)
+		var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume*group_multiplier) / vsc.fire_firelevel_multiplier
+		var/min_burn = 0.30*volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast
+		var/gas_reaction_progress = min(max(min_burn, gas_firelevel*gas_fuel)*FIRE_GAS_BURNRATE_MULT, gas_fuel)
+
+		//liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area.
+		var/liquid_firelevel = calculate_firelevel(liquid_fuel, total_oxidizers, reaction_limit, 0) / vsc.fire_firelevel_multiplier
+		var/liquid_reaction_progress = min((liquid_firelevel*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT, liquid_fuel)
+
+		var/firelevel = (gas_fuel*gas_firelevel + liquid_fuel*liquid_firelevel)/total_fuel
+
+		var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress
+		var/used_fuel = min(total_reaction_progress, reaction_limit)
+		var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
+
+		#ifdef FIREDBG
+		log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")
+		log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")
+		log_debug("firelevel -> [firelevel] (gas: [gas_firelevel], liquid: [liquid_firelevel])")
+		log_debug("liquid_reaction_progress = [liquid_reaction_progress]")
+		log_debug("gas_reaction_progress = [gas_reaction_progress]")
+		log_debug("total_reaction_progress = [total_reaction_progress]")
+		log_debug("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ")
+		#endif
+
+		//if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out
+		if(zone) //be less restrictive with canister and tank reactions
+			if((!liquid_fuel || used_fuel <= FIRE_LIQUD_MIN_BURNRATE) && (!gas_fuel || used_fuel <= FIRE_GAS_MIN_BURNRATE*zone.contents.len))
+				return 0
+
+
+		//*** Remove fuel and oxidizer, add carbon dioxide and heat
+
+		//remove and add gasses as calculated
+		var/used_gas_fuel = min(max(0.25, used_fuel*(gas_reaction_progress/total_reaction_progress)), gas_fuel) //remove in proportion to the relative reaction progress
+		var/used_liquid_fuel = min(max(0.25, used_fuel-used_gas_fuel), liquid_fuel)
+
+		//remove_by_flag() and adjust_gas() handle the group_multiplier for us.
+		remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
+		var/datum/gas_mixture/burned_fuel = remove_by_flag(XGM_GAS_FUEL, used_gas_fuel)
+		for(var/g in burned_fuel.gas)
+			adjust_gas(gas_data.burn_product[g], burned_fuel.gas[g])
+
+		if(zone)
+			zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())
+
+		//calculate the energy produced by the reaction and then set the new temperature of the mix
+		temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
+		update_values()
+
+		#ifdef FIREDBG
+		log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
+		log_debug("new temperature = [temperature]; new pressure = [return_pressure()]")
+		#endif
+
+		if (temperature<220)
+			firelevel = 0
+
+		return firelevel
+
+datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
+	. = 0
+	for(var/g in gas)
+		if(gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1)
+			. = 1
+			break
+
+	if(!.)
+		return 0
+
+	if(fuel_objs && fuel_objs.len)
+		return 1
+
+	. = 0
+	for(var/g in gas)
+		if(gas_data.flags[g] & XGM_GAS_FUEL && gas[g] >= 0.1)
+			. = 1
+			break
+
+/datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid=null)
+	. = 0
+	for(var/g in gas)
+		if(gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1)
+			. = 1
+			break
+
+	if(!.)
+		return 0
+
+	if(liquid)
+		return 1
+
+	. = 0
+	for(var/g in gas)
+		if(gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1)
+			. = 1
+			break
+
+//returns a value between 0 and vsc.fire_firelevel_multiplier
+/datum/gas_mixture/proc/calculate_firelevel(total_fuel, total_oxidizers, reaction_limit, gas_volume)
+	//Calculates the firelevel based on one equation instead of having to do this multiple times in different areas.
+	var/firelevel = 0
+
+	var/total_combustables = (total_fuel + total_oxidizers)
+	var/active_combustables = (FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT + 1)*reaction_limit
+
+	if(total_moles && total_combustables > 0)
+		//slows down the burning when the concentration of the reactants is low
+		var/damping_multiplier = min(1, active_combustables / (total_moles/group_multiplier))
+
+		//weight the damping mult so that it only really brings down the firelevel when the ratio is closer to 0
+		damping_multiplier = 2*damping_multiplier - (damping_multiplier*damping_multiplier)
+
+		//calculates how close the mixture of the reactants is to the optimum
+		//fires burn better when there is more oxidizer -- too much fuel will choke the fire out a bit, reducing firelevel.
+		var/mix_multiplier = 1 / (1 + (5 * ((total_fuel / total_combustables) ** 2)))
+
+		#ifdef FIREDBG
+		ASSERT(damping_multiplier <= 1)
+		ASSERT(mix_multiplier <= 1)
+		#endif
+
+		//toss everything together -- should produce a value between 0 and fire_firelevel_multiplier
+		firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * damping_multiplier
+
+	return max( 0, firelevel)
+
+
+/mob/living/proc/FireBurn(var/firelevel, var/last_temperature, var/pressure)
+	var/mx = 5 * firelevel/vsc.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
+	apply_damage(2.5*mx, BURN)
+	return mx
+
+
+/mob/living/carbon/human/FireBurn(var/firelevel, var/last_temperature, var/pressure)
+	//Burns mobs due to fire. Respects heat transfer coefficients on various body parts.
+	//Due to TG reworking how fireprotection works, this is kinda less meaningful.
+
+	var/head_exposure = 1
+	var/chest_exposure = 1
+	var/groin_exposure = 1
+	var/legs_exposure = 1
+	var/arms_exposure = 1
+
+	//Get heat transfer coefficients for clothing.
+
+	for(var/obj/item/clothing/C in src)
+		if(l_hand == C || r_hand == C)
+			continue
+
+		if( C.max_heat_protection_temperature >= last_temperature )
+			if(C.body_parts_covered & HEAD)
+				head_exposure = 0
+			if(C.body_parts_covered & UPPER_TORSO)
+				chest_exposure = 0
+			if(C.body_parts_covered & LOWER_TORSO)
+				groin_exposure = 0
+			if(C.body_parts_covered & LEGS)
+				legs_exposure = 0
+			if(C.body_parts_covered & ARMS)
+				arms_exposure = 0
+	//minimize this for low-pressure environments
+	var/mx = 5 * firelevel/vsc.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
+
+	//Always check these damage procs first if fire damage isn't working. They're probably what's wrong.
+
+	apply_damage(0.9*mx*head_exposure,  BURN, BP_HEAD,  used_weapon =  "Fire")
+	apply_damage(2.5*mx*chest_exposure, BURN, BP_CHEST, used_weapon =  "Fire")
+	apply_damage(2.0*mx*groin_exposure, BURN, BP_GROIN, used_weapon =  "Fire")
+	apply_damage(0.6*mx*legs_exposure,  BURN, BP_L_LEG, used_weapon =  "Fire")
+	apply_damage(0.6*mx*legs_exposure,  BURN, BP_R_LEG, used_weapon =  "Fire")
+	apply_damage(0.4*mx*arms_exposure,  BURN, BP_L_ARM, used_weapon =  "Fire")
+	apply_damage(0.4*mx*arms_exposure,  BURN, BP_R_ARM, used_weapon =  "Fire")
+
+	//return a truthy value of whether burning actually happened
+	return mx * (head_exposure + chest_exposure + groin_exposure + legs_exposure + arms_exposure)
diff --git a/code/modules/atmospherics/ZAS/Plasma.dm b/code/modules/atmospherics/ZAS/Plasma.dm
new file mode 100644
index 00000000000..e9543deb18d
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Plasma.dm
@@ -0,0 +1,176 @@
+GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contamination.dmi'))
+
+/pl_control
+	var/plasma_dmg = 3
+	var/plasma_dmg_name = "Plasma Damage Amount"
+	var/plasma_dmg_desc = "Self Descriptive"
+
+	var/cloth_contamination = TRUE
+	var/cloth_contamination_name = "Cloth Contamination"
+	var/cloth_contamination_desc = "If this is on, phoron does damage by getting into cloth."
+
+	var/plasmaguard_only = FALSE
+	var/plamaguard_only_name = "\"PlasmaGuard Only\""
+	var/plasmaguard_only_desc = "If this is on, only biosuits and spacesuits protect against contamination and ill effects."
+
+	var/genetic_corruption = FALSE
+	var/genetic_corruption_name = "Genetic Corruption Chance"
+	var/genetic_corruption_desc = "Chance of genetic corruption as well as toxic damage, X in 10,000."
+
+	var/skin_burns = TRUE
+	var/skin_burns_name = "Skin Burns"
+	var/skin_burns_desc = "Phoron has an effect similar to mustard gas on the un-suited."
+
+	var/eye_burns = TRUE
+	var/eye_burns_name = "Eye Burns"
+	var/eye_burns_desc = "Phoron burns the eyes of anyone not wearing eye protection."
+
+	var/contamination_loss = 0.02
+	var/contamination_loss_name = "Contamination Loss"
+	var/contamination_loss_desc = "How much toxin damage is dealt from contaminated clothing" //Per tick?  ASK ARYN
+
+	var/phoron_hallucination = 0
+	var/phoron_hallucination_name = "Phoron Hallucination"
+	var/phoron_hallucination_desc = "Does being in phoron cause you to hallucinate?"
+
+
+/atom/proc/can_contaminate()
+	return
+
+/atom/proc/contaminate()
+	return
+
+/atom/proc/decontaminate()
+	return
+
+/obj/item/can_contaminate()
+	//Clothing can be contaminated, with exceptions for certain items which cannot be washed in washing_machine.dm
+	if(obj_flags & PLASMAGUARD)
+		return FALSE
+	return TRUE
+
+/obj/item/contaminate()
+	//Do a contamination overlay? Temporary measure to keep contamination less deadly than it was.
+	if(!(flags_1 & CONTAMINATED_1))
+		flags_1 |= CONTAMINATED_1
+		add_overlay(GLOB.contamination_overlay)
+
+/obj/item/decontaminate()
+	flags_1 ~= CONTAMINATED_1
+	cut_overlay(GLOB.contamination_overlay)
+
+
+/mob/living/carbon/human/contaminate()
+	//See if anything can be contaminated.
+
+	if(!pl_suit_protected())
+		suit_contamination()
+
+	if(!pl_head_protected())
+		if(prob(1))
+			suit_contamination() //Phoron can sometimes get through such an open suit.
+
+//Cannot wash backpacks currently.
+//	if(istype(back,/obj/item/storage/backpack))
+//		back.contaminate()
+
+/atom/proc/expose_plasma()
+	return
+
+/mob/living/carbon/human/expose_plasma()
+	//Handles all the bad things phoron can do.
+
+	//Contamination
+	if(SSzas.settings.plc.cloth_contamination)
+		contaminate()
+
+	//Anything else requires them to not be dead.
+	if(stat >= 2)
+		return
+
+	//Burn skin if exposed.
+	if(SSzas.settings.plc.skin_burns)
+		if(!pl_head_protected() || !pl_suit_protected())
+			burn_skin(0.75)
+			if(prob(20))
+				to_chat(src, "<span class='danger'>Your skin burns!</span>")
+			updatehealth()
+
+	//Burn eyes if exposed.
+	if(SSzas.settings.plc.eye_burns)
+		if(!is_eyes_covered())
+			burn_eyes()
+
+	//Genetic Corruption
+	if(SSzas.settings.plc.genetic_corruption)
+		if(rand(1,10000) < SSzas.settings.plc.genetic_corruption)
+			easy_random_mutate(NEGATIVE)
+			to_chat(src, "<span class='danger'>High levels of toxins cause you to spontaneously mutate!</span>")
+			domutcheck(src, null)
+
+/mob/proc/burn_eyes()
+	return
+
+/mob/living/carbon/human/burn_eyes()
+	var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES)
+	if(E && !E.status == ORGAN_ROBOTIC)
+		if(prob(20))
+			to_chat(src, "<span class='danger'>Your eyes burn!</span>")
+			E.applyOrganDamage(2.5)
+		eye_blurry = min(eye_blurry+1.5,50)
+		if (prob(max(0, E.damage - 15) + 1) &&!eye_blind)
+			to_chat(src, "<span class='danger'>You are blinded!</span>")
+			eye_blind += 20
+
+/mob/living/carbon/human/proc/pl_head_protected()
+	//Checks if the head is adequately sealed.
+	if(head)
+		if(SSzas.settings.plc.plasmaguard_only)
+			if(head.item_flags & PLASMAGUARD)
+				return TRUE
+		else if(is_eyes_covered())
+			return TRUE
+	return FALSE
+
+/mob/living/carbon/human/proc/pl_suit_protected()
+	//Checks if the suit is adequately sealed.
+	var/coverage = NONE
+	for(var/obj/item/protection in list(wear_suit, gloves, shoes))
+		if(!protection)
+			continue
+		if(istype(protection, /obj/item/clothing))
+			var/obj/item/clothing/clothing_item = protection
+			if(SSzas.settings.plc.plasmaguard_only && !((clothing_item.clothing_flags & THICKMATERIAL) || (clothing_item.clothing_flags & GAS_FILTERING) || (clothing_item.obj_flags & PLASMAGUARD)))
+				return FALSE
+
+		else if(SSzas.settings.plc.plasmaguard_only && !(protection.obj_flags & PLASMAGUARD))
+			return FALSE
+
+		coverage |= protection.body_parts_covered
+
+	if(SSzas.settings.plc.plasmaguard_only)
+		return TRUE
+
+	return (~(coverage) & (CHEST|LEGS|FEET|ARMS|HANDS) == 0)
+
+/mob/living/carbon/human/proc/suit_contamination()
+	//Runs over the things that can be contaminated and does so.
+	if (w_uniform && w_uniform.can_contaminate())
+		w_uniform.contaminate()
+	if (shoes && shoes.can_contaminate())
+		shoes.contaminate()
+	if (gloves && gloves.can_contaminate())
+		gloves.contaminate()
+
+
+/turf/Entered(obj/item/I)
+	. = ..()
+	//Items that are in plasma, but not on a mob, can still be contaminated.
+	if(istype(I) && SSzas && SSzas.settings.plc.cloth_contamination && I.can_contaminate())
+		var/datum/gas_mixture/env = return_air(1)
+		if(!env)
+			return
+		for(var/g in env.gas)
+			if(SSzas.gas_data.flags[g] & XGM_GAS_CONTAMINANT && env.gas[g] > SSzas.gas_data.overlay_limit[g] + 1)
+				I.contaminate()
+				break
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
new file mode 100644
index 00000000000..7166223f43c
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -0,0 +1,295 @@
+/turf/simulated/var/zone/zone
+/turf/simulated/var/open_directions
+
+/turf/var/needs_air_update = 0
+/turf/var/datum/gas_mixture/air
+
+/turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
+	if(graphic_add && graphic_add.len)
+		vis_contents += graphic_add
+	if(graphic_remove && graphic_remove.len)
+		vis_contents -= graphic_remove
+
+/turf/proc/update_air_properties()
+	var/block
+	ATMOS_CANPASS_TURF(block, src, src)
+	if(block & AIR_BLOCKED)
+		//dbg(blocked)
+		return 1
+
+	#ifdef MULTIZAS
+	for(var/d = 1, d < 64, d *= 2)
+	#else
+	for(var/d = 1, d < 16, d *= 2)
+	#endif
+
+		var/turf/unsim = get_step(src, d)
+
+		if(!unsim)
+			continue
+
+		block = unsim.c_airblock(src)
+
+		if(block & AIR_BLOCKED)
+			//unsim.dbg(air_blocked, turn(180,d))
+			continue
+
+		var/r_block = c_airblock(unsim)
+
+		if(r_block & AIR_BLOCKED)
+			continue
+
+		if(istype(unsim, /turf/simulated))
+
+			var/turf/simulated/sim = unsim
+			if(TURF_HAS_VALID_ZONE(sim))
+				SSair.connect(sim, src)
+
+// Helper for can_safely_remove_from_zone().
+#define GET_ZONE_NEIGHBOURS(T, ret) \
+	ret = 0; \
+	if (T.zone) { \
+		for (var/_gzn_dir in gzn_check) { \
+			var/turf/simulated/other = get_step(T, _gzn_dir); \
+			if (istype(other) && other.zone == T.zone) { \
+				var/block; \
+				ATMOS_CANPASS_TURF(block, other, T); \
+				if (!(block & AIR_BLOCKED)) { \
+					ret |= _gzn_dir; \
+				} \
+			} \
+		} \
+	}
+
+/*
+	Simple heuristic for determining if removing the turf from it's zone will not partition the zone (A very bad thing).
+	Instead of analyzing the entire zone, we only check the nearest 3x3 turfs surrounding the src turf.
+	This implementation may produce false negatives but it (hopefully) will not produce any false postiives.
+*/
+
+/turf/simulated/proc/can_safely_remove_from_zone()
+	if(!zone)
+		return 1
+
+	var/check_dirs
+	GET_ZONE_NEIGHBOURS(src, check_dirs)
+	. = check_dirs
+	for(var/dir in csrfz_check)
+		//for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH)
+		if((dir & check_dirs) == dir)
+			//check that they are connected by the corner turf
+			var/turf/simulated/T = get_step(src, dir)
+			if (!istype(T))
+				. &= ~dir
+				continue
+
+			var/connected_dirs
+			GET_ZONE_NEIGHBOURS(T, connected_dirs)
+			if(connected_dirs && (dir & GLOB.reverse_dir[connected_dirs]) == dir)
+				. &= ~dir //they are, so unflag the cardinals in question
+
+	//it is safe to remove src from the zone if all cardinals are connected by corner turfs
+	. = !.
+
+/turf/simulated/update_air_properties()
+
+	if(zone && zone.invalid) //this turf's zone is in the process of being rebuilt
+		c_copy_air() //not very efficient :(
+		zone = null //Easier than iterating through the list at the zone.
+
+	var/s_block
+	ATMOS_CANPASS_TURF(s_block, src, src)
+	if(s_block & AIR_BLOCKED)
+		#ifdef ZASDBG
+		if(verbose) log_debug("Self-blocked.")
+		//dbg(blocked)
+		#endif
+		if(zone)
+			var/zone/z = zone
+
+			if(can_safely_remove_from_zone()) //Helps normal airlocks avoid rebuilding zones all the time
+				c_copy_air() //we aren't rebuilding, but hold onto the old air so it can be readded
+				z.remove(src)
+			else
+				z.rebuild()
+
+		return 1
+
+	var/previously_open = open_directions
+	open_directions = 0
+
+	var/list/postponed
+	#ifdef MULTIZAS
+	for(var/d = 1, d < 64, d *= 2)
+	#else
+	for(var/d = 1, d < 16, d *= 2)
+	#endif
+
+		var/turf/unsim = get_step(src, d)
+
+		if(!unsim) //edge of map
+			continue
+
+		var/block = unsim.c_airblock(src)
+		if(block & AIR_BLOCKED)
+
+			#ifdef ZASDBG
+			if(verbose) log_debug("[d] is blocked.")
+			//unsim.dbg(air_blocked, turn(180,d))
+			#endif
+
+			continue
+
+		var/r_block = c_airblock(unsim)
+		if(r_block & AIR_BLOCKED)
+
+			#ifdef ZASDBG
+			if(verbose) log_debug("[d] is blocked.")
+			//dbg(air_blocked, d)
+			#endif
+
+			//Check that our zone hasn't been cut off recently.
+			//This happens when windows move or are constructed. We need to rebuild.
+			if((previously_open & d) && istype(unsim, /turf/simulated))
+				var/turf/simulated/sim = unsim
+				if(zone && sim.zone == zone)
+					zone.rebuild()
+					return
+
+			continue
+
+		open_directions |= d
+
+		if(istype(unsim, /turf/simulated))
+
+			var/turf/simulated/sim = unsim
+			sim.open_directions |= GLOB.reverse_dir[d]
+
+			if(TURF_HAS_VALID_ZONE(sim))
+
+				//Might have assigned a zone, since this happens for each direction.
+				if(!zone)
+
+					//We do not merge if
+					//    they are blocking us and we are not blocking them, or if
+					//    we are blocking them and not blocking ourselves - this prevents tiny zones from forming on doorways.
+					if(((block & ZONE_BLOCKED) && !(r_block & ZONE_BLOCKED)) || ((r_block & ZONE_BLOCKED) && !(s_block & ZONE_BLOCKED)))
+						#ifdef ZASDBG
+						if(verbose) log_debug("[d] is zone blocked.")
+
+						//dbg(zone_blocked, d)
+						#endif
+
+						//Postpone this tile rather than exit, since a connection can still be made.
+						if(!postponed) postponed = list()
+						postponed.Add(sim)
+
+					else
+
+						sim.zone.add(src)
+
+						#ifdef ZASDBG
+						dbg(assigned)
+						if(verbose) log_debug("Added to [zone]")
+						#endif
+
+				else if(sim.zone != zone)
+
+					#ifdef ZASDBG
+					if(verbose) log_debug("Connecting to [sim.zone]")
+					#endif
+
+					SSair.connect(src, sim)
+
+
+			#ifdef ZASDBG
+				else if(verbose) log_debug("[d] has same zone.")
+
+			else if(verbose) log_debug("[d] has invalid zone.")
+			#endif
+
+		else
+
+			//Postponing connections to tiles until a zone is assured.
+			if(!postponed) postponed = list()
+			postponed.Add(unsim)
+
+	if(!TURF_HAS_VALID_ZONE(src)) //Still no zone, make a new one.
+		var/zone/newzone = new/zone()
+		newzone.add(src)
+
+	#ifdef ZASDBG
+		dbg(created)
+
+	ASSERT(zone)
+	#endif
+
+	//At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug.
+
+	for(var/turf/T in postponed)
+		SSair.connect(src, T)
+
+/turf/proc/post_update_air_properties()
+	if(connections) connections.update_all()
+
+/turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
+	return 0
+
+/turf/proc/assume_gas(gasid, moles, temp = 0)
+	return 0
+
+/turf/return_air()
+	//Create gas mixture to hold data for passing
+	var/datum/gas_mixture/GM = new
+
+	if(initial_gas)
+		GM.gas = initial_gas.Copy()
+	GM.temperature = temperature
+	GM.update_values()
+
+	return GM
+
+/turf/remove_air(amount as num)
+	var/datum/gas_mixture/GM = return_air()
+	return GM.remove(amount)
+
+/turf/simulated/assume_air(datum/gas_mixture/giver)
+	var/datum/gas_mixture/my_air = return_air()
+	my_air.merge(giver)
+
+/turf/simulated/assume_gas(gasid, moles, temp = null)
+	var/datum/gas_mixture/my_air = return_air()
+
+	if(isnull(temp))
+		my_air.adjust_gas(gasid, moles)
+	else
+		my_air.adjust_gas_temp(gasid, moles, temp)
+
+	return 1
+
+/turf/simulated/return_air()
+	if(zone)
+		if(!zone.invalid)
+			SSair.mark_zone_update(zone)
+			return zone.air
+		else
+			if(!air)
+				make_air()
+			c_copy_air()
+			return air
+	else
+		if(!air)
+			make_air()
+		return air
+
+/turf/proc/make_air()
+	air = new/datum/gas_mixture
+	air.temperature = temperature
+	if(initial_gas)
+		air.gas = initial_gas.Copy()
+	air.update_values()
+
+/turf/simulated/proc/c_copy_air()
+	if(!air) air = new/datum/gas_mixture
+	air.copy_from(zone.air)
+	air.group_multiplier = 1
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
new file mode 100644
index 00000000000..dc504b2f7dd
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -0,0 +1,103 @@
+/datum/xgm_gas_data
+	//Simple list of all the gas IDs.
+	var/list/gases = list()
+	//The friendly, human-readable name for the gas.
+	var/list/name = list()
+	//Specific heat of the gas.  Used for calculating heat capacity.
+	var/list/specific_heat = list()
+	//Molar mass of the gas.  Used for calculating specific entropy.
+	var/list/molar_mass = list()
+	//Tile overlays.  /obj/effect/gas_overlay, created from references to 'icons/effects/tile_effects.dmi'
+	var/list/tile_overlay = list()
+	//Optional color for tile overlay
+	var/list/tile_overlay_color = list()
+	//Overlay limits.  There must be at least this many moles for the overlay to appear.
+	var/list/overlay_limit = list()
+	//Flags.
+	var/list/flags = list()
+	//Products created when burned. For fuel only for now (not oxidizers)
+	var/list/burn_product = list()
+	// Reagent created when inhaled by lungs.
+	var/list/breathed_product = list()
+	// Temperature in K that the gas will condense.
+	var/list/condensation_points = list()
+	// Reagent path resulting from condesation.
+	var/list/condensation_products = list()
+	//If it shouldn't autogenerate a codex entry
+	var/list/hidden_from_codex = list()
+
+	//Holds the symbols
+	var/list/symbol_html = list()
+	var/list/symbol = list()
+
+/datum/xgm_gas
+	var/id = ""
+	var/name = "Unnamed Gas"
+	var/specific_heat = 20	// J/(mol*K)
+	var/molar_mass = 0.032	// kg/mol
+
+	var/tile_overlay = "generic"
+	var/tile_color = null
+	var/overlay_limit = null
+
+	var/flags = 0
+	var/burn_product = GAS_CO2
+	var/breathed_product
+	var/condensation_point = INFINITY
+	var/condensation_product
+	var/hidden_from_codex
+	var/symbol_html = "X"
+	var/symbol = "X"
+
+/datum/xgm_gas_data/Initialize()
+	for(var/p in subtypesof(/datum/xgm_gas))
+		var/datum/xgm_gas/gas = new p //avoid initial() because of potential New() actions
+
+		if(gas.id in SSzas.gas_data.gases)
+			stack_trace("Duplicate gas id `[gas.id]` in `[p]`")
+
+		SSzas.gas_data.gases += gas.id
+		SSzas.gas_data.name[gas.id] = gas.name
+		SSzas.gas_data.specific_heat[gas.id] = gas.specific_heat
+		SSzas.gas_data.molar_mass[gas.id] = gas.molar_mass
+		if(gas.overlay_limit)
+			SSzas.gas_data.overlay_limit[gas.id] = gas.overlay_limit
+			SSzas.gas_data.tile_overlay[gas.id] = gas.tile_overlay
+			SSzas.gas_data.tile_overlay_color[gas.id] = gas.tile_color
+		SSzas.gas_data.flags[gas.id] = gas.flags
+		SSzas.gas_data.burn_product[gas.id] = gas.burn_product
+
+		SSzas.gas_data.symbol_html[gas.id] = gas.symbol_html
+		SSzas.gas_data.symbol[gas.id] = gas.symbol
+
+		if(!isnull(gas.condensation_product) && !isnull(gas.condensation_point))
+			SSzas.gas_data.condensation_points[gas.id] = gas.condensation_point
+			SSzas.gas_data.condensation_products[gas.id] = gas.condensation_product
+
+		gas_data.breathed_product[gas.id] = gas.breathed_product
+		gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex
+
+	return 1
+
+/obj/effect/gas_overlay
+	name = "gas"
+	desc = "You shouldn't be clicking this."
+	icon = 'icons/effects/tile_effects.dmi'
+	icon_state = "generic"
+	layer = FIRE_LAYER
+	appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR
+	mouse_opacity = 0
+	var/gas_id
+
+/obj/effect/gas_overlay/proc/update_alpha_animation(var/new_alpha)
+	animate(src, alpha = new_alpha)
+	alpha = new_alpha
+	animate(src, alpha = 0.8 * new_alpha, time = 10, easing = SINE_EASING | EASE_OUT, loop = -1)
+	animate(alpha = new_alpha, time = 10, easing = SINE_EASING | EASE_IN, loop = -1)
+
+/obj/effect/gas_overlay/Initialize(mapload, gas)
+	. = ..()
+	gas_id = gas
+	if(SSzas.gas_data.tile_overlay[gas_id])
+		icon_state = SSzas.gas_data.tile_overlay[gas_id]
+	color = SSzas.gas_data.tile_overlay_color[gas_id]
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
new file mode 100644
index 00000000000..aff8d23d929
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -0,0 +1,214 @@
+/*
+
+Overview:
+	Each zone is a self-contained area where gas values would be the same if tile-based equalization were run indefinitely.
+	If you're unfamiliar with ZAS, FEA's air groups would have similar functionality if they didn't break in a stiff breeze.
+
+Class Vars:
+	name - A name of the format "Zone [#]", used for debugging.
+	invalid - True if the zone has been erased and is no longer eligible for processing.
+	needs_update - True if the zone has been added to the update list.
+	edges - A list of edges that connect to this zone.
+	air - The gas mixture that any turfs in this zone will return. Values are per-tile with a group multiplier.
+
+Class Procs:
+	add(turf/simulated/T)
+		Adds a turf to the contents, sets its zone and merges its air.
+
+	remove(turf/simulated/T)
+		Removes a turf, sets its zone to null and erases any gas graphics.
+		Invalidates the zone if it has no more tiles.
+
+	c_merge(zone/into)
+		Invalidates this zone and adds all its former contents to into.
+
+	c_invalidate()
+		Marks this zone as invalid and removes it from processing.
+
+	rebuild()
+		Invalidates the zone and marks all its former tiles for updates.
+
+	add_tile_air(turf/simulated/T)
+		Adds the air contained in T.air to the zone's air supply. Called when adding a turf.
+
+	tick()
+		Called only when the gas content is changed. Archives values and changes gas graphics.
+
+	dbg_data(mob/M)
+		Sends M a printout of important figures for the zone.
+
+*/
+
+
+/zone
+	var/name
+	var/invalid = 0
+	var/list/contents = list()
+	var/list/fire_tiles = list()
+	var/list/fuel_objs = list()
+	var/needs_update = 0
+	var/list/edges = list()
+	var/datum/gas_mixture/air = new
+	var/list/graphic_add = list()
+	var/list/graphic_remove = list()
+	var/last_air_temperature = TCMB
+
+/zone/New()
+	SSair.add_zone(src)
+	air.temperature = TCMB
+	air.group_multiplier = 1
+	air.volume = CELL_VOLUME
+
+/zone/proc/add(turf/simulated/T)
+#ifdef ZASDBG
+	ASSERT(!invalid)
+	ASSERT(istype(T))
+	ASSERT(!SSair.has_valid_zone(T))
+#endif
+
+	var/datum/gas_mixture/turf_air = T.return_air()
+	add_tile_air(turf_air)
+	T.zone = src
+	contents.Add(T)
+	if(T.fire)
+		var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
+		fire_tiles.Add(T)
+		SSair.active_fire_zones |= src
+		if(fuel) fuel_objs += fuel
+	T.update_graphic(air.graphic)
+
+/zone/proc/remove(turf/simulated/T)
+#ifdef ZASDBG
+	ASSERT(!invalid)
+	ASSERT(istype(T))
+	ASSERT(T.zone == src)
+	soft_assert(T in contents, "Lists are weird broseph")
+#endif
+	contents.Remove(T)
+	fire_tiles.Remove(T)
+	if(T.fire)
+		var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
+		fuel_objs -= fuel
+	T.zone = null
+	T.update_graphic(graphic_remove = air.graphic)
+	if(contents.len)
+		air.group_multiplier = contents.len
+	else
+		c_invalidate()
+
+/zone/proc/c_merge(zone/into)
+#ifdef ZASDBG
+	ASSERT(!invalid)
+	ASSERT(istype(into))
+	ASSERT(into != src)
+	ASSERT(!into.invalid)
+#endif
+	c_invalidate()
+	for(var/turf/simulated/T in contents)
+		into.add(T)
+		T.update_graphic(graphic_remove = air.graphic)
+		#ifdef ZASDBG
+		T.dbg(merged)
+		#endif
+
+	//rebuild the old zone's edges so that they will be possessed by the new zone
+	for(var/connection_edge/E in edges)
+		if(E.contains_zone(into))
+			continue //don't need to rebuild this edge
+		for(var/turf/T in E.connecting_turfs)
+			SSair.mark_for_update(T)
+
+/zone/proc/c_invalidate()
+	invalid = 1
+	SSair.remove_zone(src)
+	#ifdef ZASDBG
+	for(var/turf/simulated/T in contents)
+		T.dbg(invalid_zone)
+	#endif
+
+/zone/proc/rebuild()
+	if(invalid) return //Short circuit for explosions where rebuild is called many times over.
+	c_invalidate()
+	for(var/turf/simulated/T in contents)
+		T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
+		//T.dbg(invalid_zone)
+		T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
+		SSair.mark_for_update(T)
+
+/zone/proc/add_tile_air(datum/gas_mixture/tile_air)
+	//air.volume += CELL_VOLUME
+	air.group_multiplier = 1
+	air.multiply(contents.len)
+	air.merge(tile_air)
+	air.divide(contents.len+1)
+	air.group_multiplier = contents.len+1
+
+/zone/proc/tick()
+
+	// Update fires.
+	if(air.temperature >= PHORON_FLASHPOINT && !(src in SSair.active_fire_zones) && air.check_combustability() && contents.len)
+		var/turf/T = pick(contents)
+		if(istype(T))
+			T.create_fire(vsc.fire_firelevel_multiplier)
+
+	// Update gas overlays.
+	if(air.check_tile_graphic(graphic_add, graphic_remove))
+		for(var/turf/simulated/T in contents)
+			T.update_graphic(graphic_add, graphic_remove)
+		graphic_add.len = 0
+		graphic_remove.len = 0
+
+	// Update connected edges.
+	for(var/connection_edge/E in edges)
+		if(E.sleeping)
+			E.recheck()
+
+	// Handle condensation from the air.
+	for(var/g in air.gas)
+		var/product = gas_data.condensation_products[g]
+		if(product && air.temperature <= gas_data.condensation_points[g])
+			var/condensation_area = air.group_multiplier
+			while(condensation_area > 0)
+				condensation_area--
+				var/turf/flooding = pick(contents)
+				var/condense_amt = min(air.gas[g], rand(3,5))
+				if(condense_amt < 1)
+					break
+				air.adjust_gas(g, -condense_amt)
+				flooding.add_fluid(condense_amt, product)
+
+	// Update atom temperature.
+	if(abs(air.temperature - last_air_temperature) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
+		last_air_temperature = air.temperature
+		for(var/turf/simulated/T in contents)
+			for(var/check_atom in T.contents)
+				var/atom/checking = check_atom
+				if(checking.simulated)
+					QUEUE_TEMPERATURE_ATOMS(checking)
+			CHECK_TICK
+
+/zone/proc/dbg_data(mob/M)
+	to_chat(M, name)
+	for(var/g in air.gas)
+		to_chat(M, "[gas_data.name[g]]: [air.gas[g]]")
+	to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
+	to_chat(M, "O2 per N2: [(air.gas[GAS_NITROGEN] ? air.gas[GAS_OXYGEN]/air.gas[GAS_NITROGEN] : "N/A")] Moles: [air.total_moles]")
+	to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])")
+//	to_chat(M, "Unsimulated: [unsimulated_contents.len]")
+//	to_chat(M, "Edges: [edges.len]")
+	if(invalid) to_chat(M, "Invalid!")
+	var/zone_edges = 0
+	var/space_edges = 0
+	var/space_coefficient = 0
+	for(var/connection_edge/E in edges)
+		if(E.type == /connection_edge/zone) zone_edges++
+		else
+			space_edges++
+			space_coefficient += E.coefficient
+			to_chat(M, "[E:air:return_pressure()]kPa")
+
+	to_chat(M, "Zone Edges: [zone_edges]")
+	to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)")
+
+	//for(var/turf/T in unsimulated_contents)
+//		to_chat(M, "[T] at ([T.x],[T.y])")
diff --git a/code/modules/atmospherics/ZAS/_docs.dm b/code/modules/atmospherics/ZAS/_docs.dm
new file mode 100644
index 00000000000..41372ea2a06
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/_docs.dm
@@ -0,0 +1,28 @@
+/*
+
+Zone Air System:
+
+This air system divides the station into impermeable areas called zones.
+When something happens, i.e. a door opening or a wall being taken down,
+zones equalize and eventually merge. Making an airtight area closes the connection again.
+
+Control Flow:
+Every air tick:
+	Marked turfs are updated with update_air_properties(), followed by post_update_air_properties().
+	Edges, including those generated by connections in the previous step, are processed. This is where gas is exchanged.
+	Fire is processed.
+	Marked zones have their air archived.
+
+Important Functions:
+
+SSair.mark_for_update(turf)
+	When stuff happens, call this. It works on everything. You basically don't need to worry about any other
+	functions besides CanPass().
+
+Notes for people who used ZAS before:
+	There is no connected_zones anymore.
+	To get the zones that are connected to a zone, use this loop:
+	for(var/connection_edge/zone/edge in zone.edges)
+		var/zone/connected_zone = edge.get_connected_zone(zone)
+
+*/
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index cc56f8a8b02..a0d92e739f5 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -448,7 +448,7 @@
 #include "code\controllers\subsystem\achievements.dm"
 #include "code\controllers\subsystem\addiction.dm"
 #include "code\controllers\subsystem\ai_controllers.dm"
-#include "code\controllers\subsystem\air.dm"
+//#include "code\controllers\subsystem\air.dm"
 #include "code\controllers\subsystem\ambience.dm"
 #include "code\controllers\subsystem\assets.dm"
 #include "code\controllers\subsystem\atoms.dm"
@@ -526,6 +526,7 @@
 #include "code\controllers\subsystem\wardrobe.dm"
 #include "code\controllers\subsystem\weather.dm"
 #include "code\controllers\subsystem\wiremod_composite.dm"
+#include "code\controllers\subsystem\zas.dm"
 #include "code\controllers\subsystem\movement\ai_movement.dm"
 #include "code\controllers\subsystem\movement\move_handler.dm"
 #include "code\controllers\subsystem\movement\movement.dm"
@@ -2274,6 +2275,7 @@
 #include "code\modules\asset_cache\assets\vv.dm"
 #include "code\modules\asset_cache\transports\asset_transport.dm"
 #include "code\modules\asset_cache\transports\webroot_transport.dm"
+/*
 #include "code\modules\atmospherics\environmental\LINDA_fire.dm"
 #include "code\modules\atmospherics\environmental\LINDA_system.dm"
 #include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm"
@@ -2282,6 +2284,7 @@
 #include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm"
 #include "code\modules\atmospherics\gasmixtures\reaction_factors.dm"
 #include "code\modules\atmospherics\gasmixtures\reactions.dm"
+*/
 #include "code\modules\atmospherics\machinery\airalarm.dm"
 #include "code\modules\atmospherics\machinery\atmosmachinery.dm"
 #include "code\modules\atmospherics\machinery\bluespace_vendor.dm"
@@ -2301,6 +2304,7 @@
 #include "code\modules\atmospherics\machinery\components\binary_devices\volume_pump.dm"
 #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer.dm"
 #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer_reactions.dm"
+/*
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_core.dm"
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_defines.dm"
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_fuel_datums.dm"
@@ -2310,6 +2314,7 @@
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\atmos_machines_recipes.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer_items.dm"
+*/
 #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\mixer.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_devices.dm"
@@ -2335,7 +2340,20 @@
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\junction.dm"
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\manifold.dm"
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\manifold4w.dm"
+#include "code\modules\atmospherics\ZAS\Connection.dm"
+#include "code\modules\atmospherics\ZAS\ConnectionGroup.dm"
+#include "code\modules\atmospherics\ZAS\ConnectionManager.dm"
+#include "code\modules\atmospherics\ZAS\Debug.dm"
+#include "code\modules\atmospherics\ZAS\Diagnostic.dm"
+#include "code\modules\atmospherics\ZAS\Fire.dm"
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\simple.dm"
+#include "code\modules\atmospherics\ZAS\Turf.dm"
+#include "code\modules\atmospherics\ZAS\Zone.dm"
+#include "code\modules\atmospherics\ZAS\_docs.dm"
+#include "code\modules\atmospherics\ZAS\Airflow.dm"
+#include "code\modules\atmospherics\ZAS\Atom.dm"
+#include "code\modules\atmospherics\ZAS\Plasma.dm"
+#include "code\modules\atmospherics\ZAS\XGM\gas_data.dm"
 #include "code\modules\atmospherics\machinery\portable\canister.dm"
 #include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm"
 #include "code\modules\atmospherics\machinery\portable\pump.dm"

From 5860ade6f08db3f20df74b7252702d737521e6d7 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 13 Apr 2022 14:53:17 -0400
Subject: [PATCH 002/200] PAIN AND AGONY

---
 code/__DEFINES/atmospherics/ZAS.dm            | 268 +++++++++
 code/__DEFINES/atmospherics/ZAS_math.dm       |  31 +
 code/__DEFINES/atmospherics/atmos_core.dm     |  46 +-
 .../atmospherics/atmos_mob_interaction.dm     |   6 +-
 code/__DEFINES/atmospherics/atmos_piping.dm   |   8 +-
 code/__DEFINES/colors.dm                      |   2 +
 code/__DEFINES/flags.dm                       |   2 +
 code/__DEFINES/movespeed_modification.dm      |   1 +
 code/__DEFINES/obj_flags.dm                   |   1 +
 code/__DEFINES/sound.dm                       |   2 +-
 code/__DEFINES/subsystems.dm                  |   5 +
 code/__HELPERS/_logging.dm                    |   7 +-
 code/__HELPERS/areas.dm                       |   4 +-
 code/__HELPERS/atmospherics.dm                |  29 +-
 code/_onclick/adjacent.dm                     |  39 ++
 code/controllers/subsystem/airflow.dm         | 150 +++++
 code/controllers/subsystem/minor_mapping.dm   |   2 +-
 code/controllers/subsystem/time_track.dm      |   4 +-
 code/controllers/subsystem/zas.dm             |  47 +-
 code/datums/atmosphere/_atmosphere.dm         |   6 +-
 .../components/atmos_reaction_recorder.dm     |   7 +-
 code/datums/components/combustible_flooder.dm |   6 +-
 code/datums/components/gas_leaker.dm          |   8 +-
 code/datums/diseases/_disease.dm              |   4 +-
 code/datums/diseases/advance/symptoms/heal.dm |   6 +-
 code/datums/elements/atmos_requirements.dm    |  12 +-
 code/datums/elements/atmos_sensitive.dm       |  12 +-
 code/datums/helper_datums/teleport.dm         |  26 +-
 code/game/atoms_movable.dm                    |   2 +-
 code/game/gamemodes/objective_items.dm        |   2 +-
 code/game/machinery/_machinery.dm             |   5 +-
 .../computer/atmos_computers/_air_sensor.dm   |   4 +-
 .../atmos_computers/_atmos_control.dm         |   2 +-
 code/game/machinery/doors/airlock.dm          |   6 +-
 code/game/machinery/doors/door.dm             |  14 +-
 code/game/machinery/doors/firedoor.dm         |   8 +-
 code/game/machinery/doors/windowdoor.dm       |   8 +-
 code/game/machinery/pipe/construction.dm      |   4 +-
 code/game/machinery/shieldgen.dm              |  12 +-
 code/game/machinery/spaceheater.dm            |   8 +-
 code/game/objects/effects/anomalies.dm        |   7 +-
 .../effects/effect_system/effects_foam.dm     |  23 +-
 .../effects/effect_system/effects_smoke.dm    |  11 +-
 code/game/objects/items.dm                    |   2 +-
 code/game/objects/items/RCD.dm                |   2 +-
 code/game/objects/items/RPD.dm                |   2 +-
 code/game/objects/items/cigs_lighters.dm      |   4 +-
 code/game/objects/items/devices/powersink.dm  |   2 +-
 .../items/devices/scanners/gas_analyzer.dm    |  16 +-
 code/game/objects/items/flamethrower.dm       |   4 +-
 .../objects/items/grenades/atmos_grenades.dm  |   2 +
 code/game/objects/items/secret_documents.dm   |   2 +-
 code/game/objects/items/tanks/jetpack.dm      |   3 +-
 code/game/objects/items/tanks/tanks.dm        |   4 +-
 code/game/objects/structures.dm               |   2 +-
 code/game/objects/structures/aliens.dm        |   4 +-
 code/game/objects/structures/false_walls.dm   |   4 +-
 code/game/objects/structures/grille.dm        |   2 +-
 code/game/objects/structures/holosign.dm      |   4 +-
 code/game/objects/structures/mineral_doors.dm |  10 +-
 code/game/objects/structures/plasticflaps.dm  |   6 +-
 code/game/objects/structures/tram_walls.dm    |   2 +-
 .../structures/transit_tubes/station.dm       |   2 +-
 .../objects/structures/windoor_assembly.dm    |   4 +-
 code/game/objects/structures/window.dm        |  10 +-
 code/game/turfs/open/_open.dm                 |   2 +-
 code/game/turfs/turf.dm                       |   5 +-
 code/modules/admin/admin_verbs.dm             |   2 +-
 .../abductor/equipment/glands/plasma.dm       |   4 +-
 code/modules/antagonists/blob/blob_mobs.dm    |   2 +-
 .../antagonists/blob/structures/_blob.dm      |   4 +-
 .../antagonists/blob/structures/shield.dm     |   2 +-
 code/modules/atmospherics/ZAS/Airflow.dm      | 127 ++--
 code/modules/atmospherics/ZAS/Atom.dm         |  48 +-
 code/modules/atmospherics/ZAS/Connection.dm   |  18 +-
 .../atmospherics/ZAS/ConnectionGroup.dm       |  32 +-
 code/modules/atmospherics/ZAS/Debug.dm        |   4 +-
 code/modules/atmospherics/ZAS/Diagnostic.dm   |  12 +-
 code/modules/atmospherics/ZAS/Fire.dm         |  74 ++-
 code/modules/atmospherics/ZAS/Plasma.dm       |   6 +-
 code/modules/atmospherics/ZAS/Turf.dm         |  44 +-
 code/modules/atmospherics/ZAS/XGM/gas_data.dm |   6 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm    | 241 ++++++++
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   | 553 ++++++++++++++++++
 code/modules/atmospherics/ZAS/ZAS_Settings.dm |  78 +++
 code/modules/atmospherics/ZAS/Zone.dm         |  22 +-
 .../atmospherics/environmental/LINDA_fire.dm  |   2 +-
 .../environmental/LINDA_system.dm             |   6 +-
 .../environmental/LINDA_turf_tile.dm          |   6 +-
 .../atmospherics/machinery/airalarm.dm        |  27 +-
 .../atmospherics/machinery/atmosmachinery.dm  |  18 +-
 .../components/electrolyzer/electrolyzer.dm   |   2 +-
 .../components/unary_devices/passive_vent.dm  |   2 +-
 .../machinery/portable/canister.dm            |   4 +-
 .../portable/portable_atmospherics.dm         |  16 +-
 .../atmospherics/machinery/portable/pump.dm   |   2 +-
 .../machinery/portable/scrubber.dm            |   2 +-
 code/modules/awaymissions/cordon.dm           |   1 -
 code/modules/hydroponics/fermenting_barrel.dm |   2 +-
 code/modules/mapping/map_template.dm          |   2 +-
 code/modules/mining/aux_base.dm               |   2 +-
 code/modules/mining/equipment/survival_pod.dm |   4 +-
 code/modules/mining/satchel_ore_boxdm.dm      |   2 +-
 .../mob/living/carbon/alien/humanoid/queen.dm |   2 +-
 .../mob/living/carbon/carbon_defines.dm       |   2 +-
 .../mob/living/carbon/human/human_defines.dm  |   2 +-
 code/modules/mob/living/living_defines.dm     |   2 +-
 .../mob/living/simple_animal/constructs.dm    |   2 +-
 .../living/simple_animal/heretic_monsters.dm  |   2 +-
 .../mob/living/simple_animal/hostile/carp.dm  |   2 +-
 .../simple_animal/hostile/retaliate/ghost.dm  |   2 +-
 .../simple_animal/hostile/space_dragon.dm     |   2 +-
 code/modules/mob/mob_defines.dm               |   2 +-
 code/modules/movespeed/modifiers/mobs.dm      |   5 +
 code/modules/paperwork/folders.dm             |   2 +-
 code/modules/paperwork/paper.dm               |   2 +-
 code/modules/paperwork/paperbin.dm            |   2 +-
 code/modules/paperwork/pen.dm                 |   4 +-
 code/modules/paperwork/stamps.dm              |   2 +-
 .../power/singularity/containment_field.dm    |   4 +-
 .../power/singularity/field_generator.dm      |   4 +-
 .../power/supermatter/supermatter_process.dm  |   4 +-
 code/modules/power/turbine/turbine.dm         |   4 +-
 code/modules/reagents/reagent_dispenser.dm    |   2 +-
 code/modules/recycling/disposal/bin.dm        |   2 +-
 .../recycling/disposal/construction.dm        |   2 +-
 code/modules/research/experimentor.dm         |   4 +-
 code/modules/research/server.dm               |   2 +-
 .../xenobiology/crossbreeding/chilling.dm     |   2 +-
 code/modules/shuttle/on_move.dm               |   8 +-
 code/modules/vehicles/mecha/_mecha.dm         |   8 +-
 .../mecha/equipment/tools/other_tools.dm      |   2 +-
 .../components/sensors/pressuresensor.dm      |   2 +-
 .../wiremod/components/sensors/tempsensor.dm  |   2 +-
 tgstation.dme                                 |   8 +-
 135 files changed, 1931 insertions(+), 502 deletions(-)
 create mode 100644 code/__DEFINES/atmospherics/ZAS.dm
 create mode 100644 code/__DEFINES/atmospherics/ZAS_math.dm
 create mode 100644 code/controllers/subsystem/airflow.dm
 create mode 100644 code/modules/atmospherics/ZAS/XGM/gases.dm
 create mode 100644 code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
 create mode 100644 code/modules/atmospherics/ZAS/ZAS_Settings.dm

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
new file mode 100644
index 00000000000..b3e9fbcade6
--- /dev/null
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -0,0 +1,268 @@
+//#define ZASDBG
+//#define MULTIZAS
+
+#define AIR_BLOCKED 1
+#define ZONE_BLOCKED 2
+#define BLOCKED 3
+
+#define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct
+
+#define CANPASS_ALWAYS 1
+#define CANPASS_DENSITY 2
+#define CANPASS_PROC 3
+#define CANPASS_NEVER 4
+
+#define NORTHUP (NORTH|UP)
+#define EASTUP (EAST|UP)
+#define SOUTHUP (SOUTH|UP)
+#define WESTUP (WEST|UP)
+#define NORTHDOWN (NORTH|DOWN)
+#define EASTDOWN (EAST|DOWN)
+#define SOUTHDOWN (SOUTH|DOWN)
+#define WESTDOWN (WEST|DOWN)
+
+#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid)
+
+#ifdef MULTIZAS
+
+var/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
+var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
+
+#define ATMOS_CANPASS_TURF(ret,A,B) \
+	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
+		ret = BLOCKED; \
+	} \
+	else if (B.z != A.z) { \
+		if (B.z < A.z) { \
+			ret = (A.z_flags & ZM_ALLOW_ATMOS) ? ZONE_BLOCKED : BLOCKED; \
+		} \
+		else { \
+			ret = (B.z_flags & ZM_ALLOW_ATMOS) ? ZONE_BLOCKED : BLOCKED; \
+		} \
+	} \
+	else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \
+		ret = (A.z == B.z) ? ZONE_BLOCKED : AIR_BLOCKED; \
+	} \
+	else if (A.contents.len) { \
+		ret = 0;\
+		for (var/thing in A) { \
+			var/atom/movable/AM = thing; \
+			switch (AM.can_atmos_pass) { \
+				if (CANPASS_ALWAYS) { \
+					continue; \
+				} \
+				if (CANPASS_DENSITY) { \
+					if (AM.density) { \
+						ret |= AIR_BLOCKED; \
+					} \
+				} \
+				if (CANPASS_PROC) { \
+					ret |= AM.c_airblock(B); \
+				} \
+				if (CANPASS_NEVER) { \
+					ret = BLOCKED; \
+				} \
+			} \
+			if (ret == BLOCKED) { \
+				break;\
+			}\
+		}\
+	}
+#else
+
+var/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
+var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
+
+#define ATMOS_CANPASS_TURF(ret,A,B) \
+	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
+		ret = BLOCKED; \
+	} \
+	else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \
+		ret = ZONE_BLOCKED; \
+	} \
+	else if (A.contents.len) { \
+		ret = 0;\
+		for (var/thing in A) { \
+			var/atom/movable/AM = thing; \
+			switch (AM.can_atmos_pass) { \
+				if (CANPASS_ALWAYS) { \
+					continue; \
+				} \
+				if (CANPASS_DENSITY) { \
+					if (AM.density) { \
+						ret |= AIR_BLOCKED; \
+					} \
+				} \
+				if (CANPASS_PROC) { \
+					ret |= AM.c_airblock(B); \
+				} \
+				if (CANPASS_NEVER) { \
+					ret = BLOCKED; \
+				} \
+			} \
+			if (ret == BLOCKED) { \
+				break;\
+			}\
+		}\
+	}
+
+#endif
+
+
+#define CELL_VOLUME        2500 // Liters in a cell.
+#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) // Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C.
+
+#define O2STANDARD 0.21 // Percentage.
+#define N2STANDARD 0.79
+
+#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible.
+#define MOLES_O2STANDARD     (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%)
+#define MOLES_N2STANDARD     (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%)
+#define MOLES_O2ATMOS (MOLES_O2STANDARD*50)
+#define MOLES_N2ATMOS (MOLES_N2STANDARD*50)
+
+// These are for when a mob breathes poisonous air.
+#define MIN_TOXIN_DAMAGE 1
+#define MAX_TOXIN_DAMAGE 10
+
+#define STD_BREATH_VOLUME      12 // Liters in a normal breath.
+
+#define HUMAN_HEAT_CAPACITY 280000 //J/K For 80kg person
+
+#define SOUND_MINIMUM_PRESSURE 10
+
+#define PRESSURE_DAMAGE_COEFFICIENT 4   // The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE.
+#define MAX_HIGH_PRESSURE_DAMAGE 4   // This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :(
+#define LOW_PRESSURE_DAMAGE 0.6 // The amount of damage someone takes when in a low pressure area. (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
+
+#define MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND (MINIMUM_AIR_TO_SUSPEND*R_IDEAL_GAS_EQUATION*T20C)/CELL_VOLUME			// Minimum pressure difference between zones to suspend
+#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 // Minimum ratio of air that must move to/from a tile to suspend group processing
+#define MINIMUM_AIR_TO_SUSPEND       (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Minimum amount of air that has to move before a group processing can be suspended
+#define MINIMUM_MOLES_DELTA_TO_MOVE  (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Either this must be active
+#define MINIMUM_TEMPERATURE_TO_MOVE  (T20C + 100)                                        // or this (or both, obviously)
+
+#define MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND      0.012        // Minimum temperature difference before group processing is suspended.
+#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND      4
+#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER     0.5          // Minimum temperature difference before the gas temperatures are just set to be equal.
+#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION   (T20C + 10)
+#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION (T20C + 200)
+
+// Must be between 0 and 1. Values closer to 1 equalize temperature faster. Should not exceed 0.4, else strange heat flow occurs.
+#define  FLOOR_HEAT_TRANSFER_COEFFICIENT 0.4
+#define   WALL_HEAT_TRANSFER_COEFFICIENT 0.0
+#define   DOOR_HEAT_TRANSFER_COEFFICIENT 0.0
+#define  SPACE_HEAT_TRANSFER_COEFFICIENT 0.2 // A hack to partly simulate radiative heat.
+#define   OPEN_HEAT_TRANSFER_COEFFICIENT 0.4
+#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1 // A hack for now.
+
+// Fire damage.
+#define CARBON_LIFEFORM_FIRE_RESISTANCE (T0C + 200)
+#define CARBON_LIFEFORM_FIRE_DAMAGE     4
+
+// Phoron fire properties.
+#define PHORON_MINIMUM_BURN_TEMPERATURE    (T0C +  126) //400 K - autoignite temperature in tanks and canisters - enclosed environments I guess
+#define PHORON_FLASHPOINT                  (T0C +  246) //519 K - autoignite temperature in air if that ever gets implemented.
+
+//These control the mole ratio of oxidizer and fuel used in the combustion reaction
+#define FIRE_REACTION_OXIDIZER_AMOUNT	3 //should be greater than the fuel amount if fires are going to spread much
+#define FIRE_REACTION_FUEL_AMOUNT		2
+
+//These control the speed at which fire burns
+#define FIRE_GAS_BURNRATE_MULT			1
+#define FIRE_LIQUID_BURNRATE_MULT		0.225
+
+//If the fire is burning slower than this rate then the reaction is going too slow to be self sustaining and the fire burns itself out.
+//This ensures that fires don't grind to a near-halt while still remaining active forever.
+#define FIRE_GAS_MIN_BURNRATE			0.01
+#define FIRE_LIQUD_MIN_BURNRATE			0.0025
+
+//How many moles of fuel are contained within one solid/liquid fuel volume unit
+#define LIQUIDFUEL_AMOUNT_TO_MOL		0.45  //mol/volume unit
+
+// XGM gas flags.
+#define XGM_GAS_FUEL        1
+#define XGM_GAS_OXIDIZER    2
+#define XGM_GAS_CONTAMINANT 4
+#define XGM_GAS_FUSION_FUEL 8
+
+#define TANK_LEAK_PRESSURE     (30 * ONE_ATMOSPHERE) // Tank starts leaking.
+#define TANK_RUPTURE_PRESSURE  (40 * ONE_ATMOSPHERE) // Tank spills all contents into atmosphere.
+#define TANK_FRAGMENT_PRESSURE (50 * ONE_ATMOSPHERE) // Boom 3x3 base explosion.
+#define TANK_FRAGMENT_SCALE    (10 * ONE_ATMOSPHERE) // +1 for each SCALE kPa above threshold. Was 2 atm.
+
+#define NORMPIPERATE             30   // Pipe-insulation rate divisor.
+#define HEATPIPERATE             8    // Heat-exchange pipe insulation.
+#define FLOWFRAC                 0.99 // Fraction of gas transfered per process.
+
+//Flags for zone sleeping
+#define ZONE_ACTIVE   1
+#define ZONE_SLEEPING 0
+
+// Defines how much of certain gas do the Atmospherics tanks start with. Values are in kpa per tile (assuming 20C)
+#define ATMOSTANK_NITROGEN      90000 // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
+#define ATMOSTANK_OXYGEN        50000 // O2 is also important for airmix, but not as much as N2 as it's only 21% of it.
+#define ATMOSTANK_CO2           60000 // CO2 is used for the GUP, Charon, and Torch as the primary fuel propellant, and we need lots to stick around.
+#define ATMOSTANK_PHORON        25000
+#define ATMOSTANK_PHORON_FUEL	15000
+#define ATMOSTANK_HYDROGEN      50000
+#define ATMOSTANK_HYDROGEN_FUEL 25000
+#define ATMOSTANK_NITROUSOXIDE  10000 // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
+
+#define MAX_PUMP_PRESSURE		15000	// Maximal pressure setting for pumps and vents
+#define MAX_OMNI_PRESSURE		15000	// Maximal output(s) pressure for omni devices (filters/mixers)
+
+#define GAS_OXYGEN				"oxygen"
+#define GAS_CO2					"carbon_dioxide"
+#define GAS_CO					"carbon_monoxide"
+#define GAS_METHYL_BROMIDE		"methyl_bromide"
+#define GAS_N2O					"sleeping_agent"
+#define GAS_NITROGEN			"nitrogen"
+#define GAS_NO2					"nitrodioxide"
+#define GAS_NO					"nitricoxide"
+#define GAS_METHANE				"methane"
+#define GAS_ALIEN				"aliether"
+#define GAS_HYDROGEN			"hydrogen"
+#define GAS_DEUTERIUM			"deuterium"
+#define GAS_TRITIUM				"tritium"
+#define GAS_HELIUM				"helium"
+#define GAS_ARGON				"argon"
+#define GAS_KRYPTON				"krypton"
+#define GAS_NEON				"neon"
+#define GAS_XENON				"xenon"
+#define GAS_AMMONIA				"ammonia"
+#define GAS_CHLORINE			"chlorine"
+#define GAS_SULFUR				"sulfurdioxide"
+#define GAS_STEAM				"water"
+#define GAS_PLASMA				"phoron"
+
+#define ALL_GASES list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA)
+
+GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
+	     2,  1,  3,  8, 10,  9, 11,  4,  6,  5,  7, 12, 14, 13, 15,
+	32, 34, 33, 35, 40, 42,	41, 43, 36, 38, 37, 39, 44, 46, 45, 47,
+	16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21,	23, 28, 30, 29, 31,
+	48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63
+))
+
+#define ATOM_IS_TEMPERATURE_SENSITIVE(A) (A && !QDELETED(A) && !(A.atom_flags & ATOM_FLAG_NO_TEMP_CHANGE))
+#define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5
+#define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25
+
+#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
+	_atom.temperature = _temp; \
+	if(_atom.reagents) { \
+		HANDLE_REACTIONS(_atom.reagents); \
+	} \
+	QUEUE_TEMPERATURE_ATOMS(_atom);
+
+#define QUEUE_TEMPERATURE_ATOMS(_atoms) \
+	if(islist(_atoms)) { \
+		for(var/thing in _atoms) { \
+			var/atom/A = thing; \
+			if(ATOM_IS_TEMPERATURE_SENSITIVE(A)) { \
+				SStemperature.processing[A] = TRUE; \
+			} \
+		} \
+	} else if(ATOM_IS_TEMPERATURE_SENSITIVE(_atoms)) { \
+		SStemperature.processing[_atoms] = TRUE; \
+	}
diff --git a/code/__DEFINES/atmospherics/ZAS_math.dm b/code/__DEFINES/atmospherics/ZAS_math.dm
new file mode 100644
index 00000000000..2c8ac21470b
--- /dev/null
+++ b/code/__DEFINES/atmospherics/ZAS_math.dm
@@ -0,0 +1,31 @@
+// Math constants.
+#define R_IDEAL_GAS_EQUATION       8.31    // kPa*L/(K*mol).
+#define ONE_ATMOSPHERE             101.325 // kPa.
+#define IDEAL_GAS_ENTROPY_CONSTANT 1164    // (mol^3 * s^3) / (kg^3 * L).
+
+// Radiation constants.
+#define STEFAN_BOLTZMANN_CONSTANT    5.6704e-8 // W/(m^2*K^4).
+#define COSMIC_RADIATION_TEMPERATURE 3.15      // K.
+#define AVERAGE_SOLAR_RADIATION      200       // W/m^2. Kind of arbitrary. Really this should depend on the sun position much like solars.
+#define RADIATOR_OPTIMUM_PRESSURE    3771      // kPa at 20 C. This should be higher as gases aren't great conductors until they are dense. Used the critical pressure for air.
+#define GAS_CRITICAL_TEMPERATURE     132.65    // K. The critical point temperature for air.
+
+#define RADIATOR_EXPOSED_SURFACE_AREA_RATIO 0.04 // (3 cm + 100 cm * sin(3deg))/(2*(3+100 cm)). Unitless ratio.
+#define HUMAN_EXPOSED_SURFACE_AREA          5.2 //m^2, surface area of 1.7m (H) x 0.46m (D) cylinder
+
+#define T0C   273.15 //    0.0 degrees celsius
+#define T20C  293.15 //   20.0 degrees celsius
+#define T100C 373.15 //  100.0 degrees celsius
+#define TCMB  2.7    // -270.3 degrees celsius
+
+#define CELSIUS + T0C
+
+#define ATMOS_PRECISION 0.0001
+#define QUANTIZE(variable) (round(variable, ATMOS_PRECISION))
+
+// Determines the exchange ratio of reagents being converted to gas and vice versa.
+#define REAGENT_GAS_EXCHANGE_FACTOR 10
+
+//where a unit turf is 1 on a side, its diagonal is sqrt(2)
+#define UNIT_DIAGONAL      1.41421356237
+#define HALF_UNIT_DIAGONAL 0.70710678118
diff --git a/code/__DEFINES/atmospherics/atmos_core.dm b/code/__DEFINES/atmospherics/atmos_core.dm
index c0ca6bb78c8..bfb3455f636 100644
--- a/code/__DEFINES/atmospherics/atmos_core.dm
+++ b/code/__DEFINES/atmospherics/atmos_core.dm
@@ -25,17 +25,17 @@
 //ATMOS
 //stuff you should probably leave well alone!
 /// kPa*L/(K*mol)
-#define R_IDEAL_GAS_EQUATION 8.31
+//#define R_IDEAL_GAS_EQUATION 8.31
 /// kPa
-#define ONE_ATMOSPHERE 101.325
+//#define ONE_ATMOSPHERE 101.325
 /// -270.3degC
-#define TCMB 2.7
+//#define TCMB 2.7
 /// -48.15degC
 #define TCRYO 225
 /// 0degC
-#define T0C 273.15
+//#define T0C 273.15
 /// 20degC
-#define T20C 293.15
+//#define T20C 293.15
 /// -14C - Temperature used for kitchen cold room, medical freezer, etc.
 #define COLD_ROOM_TEMP 259.15
 
@@ -100,31 +100,31 @@
 /// number of FULL air controller ticks before an excited group dismantles and removes its turfs from active
 #define EXCITED_GROUP_DISMANTLE_CYCLES (EXCITED_GROUP_BREAKDOWN_CYCLES * 2) + 1 //Reset after 2 breakdowns
 /// Ratio of air that must move to/from a tile to reset group processing
-#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.1
+//#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.1
 /// Minimum ratio of air that must move to/from a tile
-#define MINIMUM_AIR_RATIO_TO_MOVE 0.001
+//#define MINIMUM_AIR_RATIO_TO_MOVE 0.001
 /// Minimum amount of air that has to move before a group processing can be suspended (Round about 10)
-#define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND)
+//#define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND)
 /// Either this must be active (round about 0.1) //Might need to raise this a tad to better support space leaks. we'll see
-#define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_MOVE)
+//#define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_MOVE)
 /// or this (or both, obviously)
-#define MINIMUM_TEMPERATURE_TO_MOVE (T20C+100)
+//#define MINIMUM_TEMPERATURE_TO_MOVE (T20C+100)
 /// Minimum temperature difference before group processing is suspended
-#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4
+//#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4
 /// Minimum temperature difference before the gas temperatures are just set to be equal
-#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5
+//#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5
 ///Minimum temperature to continue superconduction once started
-#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION (T20C+80)
+//#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION (T20C+80)
 ///Minimum temperature to start doing superconduction calculations
-#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION (T20C+400)
+//#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION (T20C+400)
 
 //HEAT TRANSFER COEFFICIENTS
 //Must be between 0 and 1. Values closer to 1 equalize temperature faster
 //Should not exceed 0.4 else strange heat flow occur
-#define WALL_HEAT_TRANSFER_COEFFICIENT 0.0
-#define OPEN_HEAT_TRANSFER_COEFFICIENT 0.4
+//#define WALL_HEAT_TRANSFER_COEFFICIENT 0.0
+//#define OPEN_HEAT_TRANSFER_COEFFICIENT 0.4
 /// a hack for now
-#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1
+//#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1
 /// a hack to help make vacuums "cold", sacrificing realism for gameplay
 #define HEAT_CAPACITY_VACUUM 7000
 
@@ -139,19 +139,19 @@
 #define FIRE_GROWTH_RATE 40000
 
 ///moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC (103 or so)
-#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION))
+//#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION))
 ///compared against for superconductivity
 #define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005)
 /// percentage of oxygen in a normal mixture of air
-#define O2STANDARD 0.21
+//#define O2STANDARD 0.21
 /// same but for nitrogen
-#define N2STANDARD 0.79
+//#define N2STANDARD 0.79
 /// O2 standard value (21%)
-#define MOLES_O2STANDARD (MOLES_CELLSTANDARD*O2STANDARD)
+//#define MOLES_O2STANDARD (MOLES_CELLSTANDARD*O2STANDARD)
 /// N2 standard value (79%)
-#define MOLES_N2STANDARD (MOLES_CELLSTANDARD*N2STANDARD)
+//#define MOLES_N2STANDARD (MOLES_CELLSTANDARD*N2STANDARD)
 /// liters in a cell
-#define CELL_VOLUME 2500
+//#define CELL_VOLUME 2500
 
 ///O2 value for anesthetic canister
 #define O2_ANESTHETIC 0.65
diff --git a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm
index 1f0c3a0669e..84476d2b431 100644
--- a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm
+++ b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm
@@ -79,10 +79,10 @@
 #define BODYTEMP_COLD_WARNING_3 (BODYTEMP_COLD_DAMAGE_LIMIT - 150) //120k
 
 /// The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE
-#define PRESSURE_DAMAGE_COEFFICIENT 2
-#define MAX_HIGH_PRESSURE_DAMAGE 2
+//#define PRESSURE_DAMAGE_COEFFICIENT 2
+//#define MAX_HIGH_PRESSURE_DAMAGE 2
 /// The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
-#define LOW_PRESSURE_DAMAGE 2
+//#define LOW_PRESSURE_DAMAGE 2
 
 /// Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
 #define COLD_SLOWDOWN_FACTOR 20
diff --git a/code/__DEFINES/atmospherics/atmos_piping.dm b/code/__DEFINES/atmospherics/atmos_piping.dm
index f0919f37276..8624de386e1 100644
--- a/code/__DEFINES/atmospherics/atmos_piping.dm
+++ b/code/__DEFINES/atmospherics/atmos_piping.dm
@@ -44,13 +44,13 @@
 /// The internal temperature in kelvins at which a handheld gas tank begins to take damage.
 #define TANK_MELT_TEMPERATURE 1000000
 /// The internal pressure in kPa at which a handheld gas tank begins to take damage.
-#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE)
+//#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE)
 /// The internal pressure in kPa at which a handheld gas tank almost immediately ruptures.
-#define TANK_RUPTURE_PRESSURE (35.*ONE_ATMOSPHERE)
+//#define TANK_RUPTURE_PRESSURE (35.*ONE_ATMOSPHERE)
 /// The internal pressure in kPa at which an gas tank that breaks will cause an explosion.
-#define TANK_FRAGMENT_PRESSURE (40.*ONE_ATMOSPHERE)
+//#define TANK_FRAGMENT_PRESSURE (40.*ONE_ATMOSPHERE)
 /// Range scaling constant for tank explosions. Calibrated so that a TTV assembled using two 70L tanks will hit the maxcap at at least 160atm.
-#define TANK_FRAGMENT_SCALE (84.*ONE_ATMOSPHERE)
+//#define TANK_FRAGMENT_SCALE (84.*ONE_ATMOSPHERE)
 /// Denotes that our tank is overpressurized simply from gas merging.
 #define TANK_MERGE_OVERPRESSURE "tank_overpressure"
 // Indices for the reaction_results returned by explosion_information()
diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm
index 7d7325e6007..eab21d13db1 100644
--- a/code/__DEFINES/colors.dm
+++ b/code/__DEFINES/colors.dm
@@ -219,3 +219,5 @@
 #define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, color="#04080FAA")
 /// Icon filter that creates gaussian blur
 #define GAUSSIAN_BLUR(filter_size) filter(type="blur", size=filter_size)
+
+#define RANDOM_RGB rgb(rand(0,255), rand(0,255), rand(0,255))
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index b09a0d11214..389a4f2681b 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -58,6 +58,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
 #define IS_PLAYER_COLORABLE_1 (1<<21)
 /// Whether or not this atom has contextual screentips when hovered OVER
 #define HAS_CONTEXTUAL_SCREENTIPS_1 (1<<22)
+///Plasma Contamination
+#define CONTAMINATED_1 (1<<23)
 
 // Update flags for [/atom/proc/update_appearance]
 /// Update the atom's name
diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm
index c4300d96606..fe6ac65a3b6 100644
--- a/code/__DEFINES/movespeed_modification.dm
+++ b/code/__DEFINES/movespeed_modification.dm
@@ -11,3 +11,4 @@
 
 #define MOVESPEED_ID_MOB_GRAB_STATE "mob_grab_state"
 #define MOVESPEED_ID_MOB_WALK_RUN "mob_walk_run"
+#define MOVESPEED_ID_MOB_ATMOS_AFFLICTION "mob_atmos_pressured"
diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm
index 159a8de9fc7..4c5bdb7169d 100644
--- a/code/__DEFINES/obj_flags.dm
+++ b/code/__DEFINES/obj_flags.dm
@@ -15,6 +15,7 @@
 #define BLOCK_Z_IN_DOWN (1<<11) // Should this object block z falling from above?
 #define BLOCK_Z_IN_UP (1<<12) // Should this object block z uprise from below?
 #define NO_BUILD (1<<13) // Can we build on this object?
+#define PLASMAGUARD (1<<14) //Immune to plasma contamination
 
 // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
 
diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm
index e0a46bb6e62..1ebdf032034 100644
--- a/code/__DEFINES/sound.dm
+++ b/code/__DEFINES/sound.dm
@@ -27,7 +27,7 @@
 
 #define MAX_INSTRUMENT_CHANNELS (128 * 6)
 
-#define SOUND_MINIMUM_PRESSURE 10
+//#define SOUND_MINIMUM_PRESSURE 10
 
 #define INTERACTION_SOUND_RANGE_MODIFIER -3
 #define EQUIP_SOUND_VOLUME 30
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 9e1d38c8394..44e17d7c122 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -173,6 +173,7 @@
 #define FIRE_PRIORITY_AMBIENCE 10
 #define FIRE_PRIORITY_GARBAGE 15
 #define FIRE_PRIORITY_DATABASE 16
+#define FIRE_PRIORITY_AIRFLOW 17
 #define FIRE_PRIORITY_WET_FLOORS 20
 #define FIRE_PRIORITY_AIR 20
 #define FIRE_PRIORITY_NPC 20
@@ -280,6 +281,10 @@
 #define SSZAS_FIRES 6
 #define SSZAS_HOTSPOTS 7
 #define SSZAS_ZONES 8
+#define SSZAS_ATOMS 9
+
+#define SSZAS_REBUILD_PIPELINE 1
+#define SSZAS_REBUILD_QUEUE 2
 
 //Pipeline rebuild helper defines, these suck but it'll do for now //Fools you actually merged it
 #define SSAIR_REBUILD_PIPELINE 1
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 2b142806d43..bb72d342457 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -178,10 +178,9 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
 /// Logs the contents of the gasmix to the game log, prefixed by text
 /proc/log_atmos(text, datum/gas_mixture/mix)
 	var/message = text
-	message += "TEMP=[mix.temperature],MOL=[mix.total_moles()],VOL=[mix.volume]"
-	for(var/key in mix.gases)
-		var/list/gaslist = mix.gases[key]
-		message += "[gaslist[GAS_META][META_GAS_ID]]=[gaslist[MOLES]];"
+	message += "TEMP=[mix.return_temperature()],MOL=[mix.total_moles()],VOL=[mix.volume]"
+	for(var/key in mix.gas)
+		message += "[key]=[mix.get_gas(key)];"
 	log_game(message)
 
 /proc/log_say(text)
diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm
index cc99089e29d..a15767bb241 100644
--- a/code/__HELPERS/areas.dm
+++ b/code/__HELPERS/areas.dm
@@ -36,7 +36,9 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
 			if(break_if_found[checkT.type] || break_if_found[checkT.loc.type])
 				return FALSE
 			var/static/list/cardinal_cache = list("[NORTH]"=TRUE, "[EAST]"=TRUE, "[SOUTH]"=TRUE, "[WEST]"=TRUE)
-			if(!cardinal_cache["[dir]"] || !TURFS_CAN_SHARE(sourceT, checkT))
+			var/canpass
+			ATMOS_CANPASS_TURF(canpass, sourceT, checkT)
+			if(!cardinal_cache["[dir]"] || !canpass)
 				continue
 			found_turfs += checkT // Since checkT is connected, add it to the list to be processed
 
diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index 6df62fec3ef..2635c68c148 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -41,18 +41,18 @@
 	)
 	if(!gasmix)
 		return
-	for(var/gas_path in gasmix.gases)
+	for(var/gas_path in gasmix.gas)
 		.["gases"] += list(list(
-			gasmix.gases[gas_path][GAS_META][META_GAS_ID],
-			gasmix.gases[gas_path][GAS_META][META_GAS_NAME],
-			gasmix.gases[gas_path][MOLES],
-		))
-	for(var/datum/gas_reaction/reaction_result as anything in gasmix.reaction_results)
-		.["reactions"] += list(list(
-			initial(reaction_result.id),
-			initial(reaction_result.name),
-			gasmix.reaction_results[reaction_result],
+			"[gas_path]",
+			"[gas_path]",
+			gasmix.get_gas(gas_path),
 		))
+	//.for(var/datum/gas_reaction/reaction_result as anything in gasmix.reaction_results)
+	.["reactions"] += list(list(
+		"UNIMPLIMENTED",
+		"UNIMPLIMENTED",
+		"UNIMPLIMENTED",
+	))
 	.["total_moles"] = gasmix.total_moles()
 	.["temperature"] = gasmix.temperature
 	.["volume"] = gasmix.volume
@@ -64,7 +64,7 @@ GLOBAL_LIST_EMPTY(gas_handbook)
 
 /// Automatically populates gas_handbook and reaction_handbook. They are formatted lists containing information regarding gases and reactions they participate in.
 /// Structure can be found in TS form at AtmosHandbook.tsx
-/proc/atmos_handbooks_init()
+/*/proc/atmos_handbooks_init()
 	if(length(GLOB.reaction_handbook))
 		GLOB.reaction_handbook = list()
 	if(length(GLOB.gas_handbook))
@@ -84,8 +84,8 @@ GLOBAL_LIST_EMPTY(gas_handbook)
 		gas_info["specific_heat"] = meta_information[META_GAS_SPECIFIC_HEAT]
 		gas_info["reactions"] = list()
 		momentary_gas_list[gas_path] = gas_info
-	
-	for (var/datum/gas_reaction/reaction_path as anything in subtypesof(/datum/gas_reaction)) 
+
+	for (var/datum/gas_reaction/reaction_path as anything in subtypesof(/datum/gas_reaction))
 		var/datum/gas_reaction/reaction = new reaction_path
 		var/list/reaction_info = list()
 		reaction_info["id"] = reaction.id
@@ -117,7 +117,7 @@ GLOBAL_LIST_EMPTY(gas_handbook)
 			reaction_info["factors"] += list(factor_info)
 		GLOB.reaction_handbook += list(reaction_info)
 		qdel(reaction)
-	
+
 	for (var/gas_info_index in momentary_gas_list)
 		GLOB.gas_handbook += list(momentary_gas_list[gas_info_index])
 
@@ -125,3 +125,4 @@ GLOBAL_LIST_EMPTY(gas_handbook)
 /// For UIs, simply do data += return_atmos_handbooks() to use.
 /proc/return_atmos_handbooks()
 	return list("gasInfo" = GLOB.gas_handbook, "reactionInfo" = GLOB.reaction_handbook)
+*/
diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm
index e33ba9cb540..5b30c07d1eb 100644
--- a/code/_onclick/adjacent.dm
+++ b/code/_onclick/adjacent.dm
@@ -75,6 +75,45 @@
 		return TRUE
 	return FALSE
 
+/turf/proc/Adjacent_free_dir(atom/destination, path_dir = 0)
+	var/turf/dest_T = get_turf(destination)
+	if(dest_T == src)
+		return TRUE
+	if(!dest_T || dest_T.z != z)
+		return FALSE
+	if(get_dist(src,dest_T) > 1)
+		return FALSE
+	if(!path_dir)
+		return FALSE
+
+	if(dest_T.x == x || dest_T.y == y) //orthogonal
+		return dest_T.ClickCross(get_dir(dest_T, src), border_only = 1)
+
+	var/turf/intermediate_T = get_step(src, path_dir) //diagonal
+	if(!intermediate_T || intermediate_T.density \
+	|| !intermediate_T.ClickCross(get_dir(intermediate_T, src) | get_dir(intermediate_T, dest_T), border_only = 0))
+		return FALSE
+
+	if(!dest_T.ClickCross(get_dir(dest_T, intermediate_T), border_only = 1))
+		return FALSE
+
+	return TRUE
+
+/**
+* Quick adjacency (to turf):
+* If you are in the same turf, always true
+* If you are not adjacent, then false
+*/
+/turf/proc/AdjacentQuick(var/atom/neighbor, var/atom/target = null)
+	var/turf/T0 = get_turf(neighbor)
+	if(T0 == src)
+		return 1
+
+	if(get_dist(src,T0) > 1)
+		return 0
+
+	return 1
+
 // This is necessary for storage items not on your person.
 /obj/item/Adjacent(atom/neighbor, atom/target, atom/movable/mover, recurse = 1)
 	if(neighbor == loc)
diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
new file mode 100644
index 00000000000..31407e67fa9
--- /dev/null
+++ b/code/controllers/subsystem/airflow.dm
@@ -0,0 +1,150 @@
+#define CLEAR_OBJECT(TARGET) \
+	processing -= TARGET; \
+	TARGET.airflow_dest = null; \
+	TARGET.airflow_speed = 0; \
+	TARGET.airflow_time = 0; \
+	TARGET.airflow_skip_speedcheck = FALSE; \
+	if (TARGET.airflow_od) { \
+		TARGET.set_density(FALSE); \
+	}
+
+
+SUBSYSTEM_DEF(airflow)
+	name = "Airflow"
+	wait = 1
+	flags = SS_NO_INIT
+	priority = FIRE_PRIORITY_AIRFLOW
+
+	var/static/tmp/list/processing = list()
+	var/static/tmp/list/current = list()
+
+
+/datum/controller/subsystem/airflow/Recover()
+	current.Cut()
+
+
+/datum/controller/subsystem/airflow/fire(resumed, no_mc_tick)
+	if (!resumed)
+		current = processing.Copy()
+	var/atom/movable/target
+	for (var/i = current.len to 1 step -1)
+		target = current[i]
+		if (QDELETED(target))
+			if (target)
+				CLEAR_OBJECT(target)
+			if (MC_TICK_CHECK)
+				current.Cut(i)
+				return
+			continue
+		if (target.airflow_speed <= 0)
+			CLEAR_OBJECT(target)
+			if (MC_TICK_CHECK)
+				current.Cut(i)
+				return
+			continue
+		if (target.airflow_process_delay > 0)
+			target.airflow_process_delay -= 1
+			if (MC_TICK_CHECK)
+				current.Cut(i)
+				return
+			continue
+		else if (target.airflow_process_delay)
+			target.airflow_process_delay = 0
+		target.airflow_speed = min(target.airflow_speed, 15)
+		target.airflow_speed -= SSzas.settings.airflow_speed_decay
+		if (!target.airflow_skip_speedcheck)
+			if (target.airflow_speed > 7)
+				if (target.airflow_time++ >= target.airflow_speed - 7)
+					if (target.airflow_od)
+						target.set_density(FALSE)
+					target.airflow_skip_speedcheck = TRUE
+					if (MC_TICK_CHECK)
+						current.Cut(i)
+						return
+					continue
+			else
+				if (target.airflow_od)
+					target.set_density(FALSE)
+				target.airflow_process_delay = max(1, 10 - (target.airflow_speed + 3))
+				target.airflow_skip_speedcheck = TRUE
+				if (MC_TICK_CHECK)
+					current.Cut(i)
+					return
+				continue
+		target.airflow_skip_speedcheck = FALSE
+		if (target.airflow_od)
+			target.set_density(TRUE)
+		if (!target.airflow_dest || target.loc == target.airflow_dest)
+			target.airflow_dest = locate(min(max(target.x + target.airflow_xo, 1), world.maxx), min(max(target.y + target.airflow_yo, 1), world.maxy), target.z)
+		if ((target.x == 1) || (target.x == world.maxx) || (target.y == 1) || (target.y == world.maxy))
+			CLEAR_OBJECT(target)
+			if (MC_TICK_CHECK)
+				current.Cut(i)
+				return
+			continue
+		if (!isturf(target.loc))
+			CLEAR_OBJECT(target)
+			if (MC_TICK_CHECK)
+				current.Cut(i)
+				return
+			continue
+		step_towards(target, target.airflow_dest)
+		if (ismob(target))
+			var/mob/M = target
+			M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE, SSzas.settings.airflow_mob_slowdown)
+			addtimer(CALLBACK(M, /mob/proc/remove_movespeed_modifier, /datum/movespeed_modifier/atmos_pressure, TRUE))
+		if (MC_TICK_CHECK)
+			current.Cut(i)
+			return
+
+#undef CLEAR_OBJECT
+
+
+/atom/movable/var/tmp/airflow_xo
+/atom/movable/var/tmp/airflow_yo
+/atom/movable/var/tmp/airflow_od
+/atom/movable/var/tmp/airflow_process_delay
+/atom/movable/var/tmp/airflow_skip_speedcheck
+
+
+/atom/movable/proc/prepare_airflow(strength)
+	if (!airflow_dest || airflow_speed < 0 || last_airflow > world.time - SSzas.settings.airflow_delay)
+		return FALSE
+	if (airflow_speed)
+		airflow_speed = strength / max(get_dist(src, airflow_dest), 1)
+		return FALSE
+	if (airflow_dest == loc)
+		step_away(src, loc)
+	if (!AirflowCanMove(strength))
+		return FALSE
+	if (ismob(src))
+		to_chat(src, span_danger("You are pushed away by a rush of air!"))
+	last_airflow = world.time
+	var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2)
+	if (airflow_falloff < 1)
+		airflow_dest = null
+		return FALSE
+	airflow_speed = min(max(strength * (9 / airflow_falloff), 1), 9)
+	airflow_od = FALSE
+	if (!density)
+		set_density(TRUE)
+		airflow_od = TRUE
+	return TRUE
+
+
+/atom/movable/proc/GotoAirflowDest(strength)
+	if (!prepare_airflow(strength))
+		return
+	airflow_xo = airflow_dest.x - x
+	airflow_yo = airflow_dest.y - y
+	airflow_dest = null
+	SSairflow.processing += src
+
+
+/atom/movable/proc/RepelAirflowDest(strength)
+	if (!prepare_airflow(strength))
+		return
+	airflow_xo = -(airflow_dest.x - x)
+	airflow_yo = -(airflow_dest.y - y)
+	airflow_dest = null
+	SSairflow.processing += src
diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm
index 32a04f57ba4..a45c9921098 100644
--- a/code/controllers/subsystem/minor_mapping.dm
+++ b/code/controllers/subsystem/minor_mapping.dm
@@ -30,7 +30,7 @@ SUBSYSTEM_DEF(minor_mapping)
 				mouse.forceMove(proposed_turf)
 		else
 			mouse = new /mob/living/simple_animal/hostile/regalrat/controlled(proposed_turf)
-		if(proposed_turf.air.has_gas(/datum/gas/oxygen, 5))
+		if(proposed_turf.air.has_gas(GAS_OXYGEN, 5))
 			num_mice -= 1
 			mouse = null
 
diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm
index c2a0ff0f195..17ece9c7e85 100644
--- a/code/controllers/subsystem/time_track.dm
+++ b/code/controllers/subsystem/time_track.dm
@@ -129,7 +129,7 @@ SUBSYSTEM_DEF(time_track)
 			time_dilation_avg_slow,
 			MAPTICK_LAST_INTERNAL_TICK_USAGE,
 			length(SStimer.timer_id_dict),
-			SSair.cost_turfs,
+			/*SSair.cost_turfs,
 			SSair.cost_groups,
 			SSair.cost_highpressure,
 			SSair.cost_hotspots,
@@ -141,7 +141,7 @@ SUBSYSTEM_DEF(time_track)
 			length(SSair.hotspots),
 			length(SSair.networks),
 			length(SSair.high_pressure_delta),
-			length(SSair.active_super_conductivity),
+			length(SSair.active_super_conductivity),*/
 			SSdbcore.all_queries_num,
 			SSdbcore.queries_active_num,
 			SSdbcore.queries_standby_num
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index f6cf060c884..26a3631b8e0 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -68,9 +68,10 @@ SUBSYSTEM_DEF(zas)
 	flags = SS_POST_FIRE_TIMING
 
 	//The variable setting controller
-	var/zas_controller/settings
+	var/datum/zas_controller/settings
 	//XGM gas data
 	var/datum/xgm_gas_data/gas_data
+
 	//Geometry lists
 	var/list/zones = list()
 	var/list/edges = list()
@@ -82,6 +83,8 @@ SUBSYSTEM_DEF(zas)
 
 	//Atmos Machines
 	var/list/atmos_machinery = list()
+	//Atoms to be processed
+	var/list/atom_process = list()
 
 	//Geometry updates lists
 	var/list/tiles_to_update = list()
@@ -104,6 +107,7 @@ SUBSYSTEM_DEF(zas)
 	var/list/curr_hotspot
 	var/list/curr_zones
 	var/list/curr_machines
+	var/list/curr_atoms
 
 
 	var/current_process = SSZAS_TILES
@@ -116,7 +120,7 @@ SUBSYSTEM_DEF(zas)
 
 	// Make sure we don't rebuild mid-tick.
 	if (state != SS_IDLE)
-		to_chat(world, bold_announce("ZAS Rebuild initiated. Waiting for current air tick to complete before continuing."))
+		to_chat(world, span_boldannounce("ZAS Rebuild initiated. Waiting for current air tick to complete before continuing."))
 		while (state != SS_IDLE)
 			stoplag()
 
@@ -155,9 +159,9 @@ SUBSYSTEM_DEF(zas)
 
 	var/starttime = REALTIMEOFDAY
 	settings = new
-	gas_data = new /datum/xgm_gas_data
+	gas_data = new
 
-	to_chat(world, bold_announce("Processing Geometry..."))
+	to_chat(world, span_boldannounce("Processing Geometry..."))
 
 	var/simulated_turf_count = 0
 	for(var/turf/simulated/S)
@@ -166,7 +170,7 @@ SUBSYSTEM_DEF(zas)
 
 		CHECK_TICK
 
-	to_chat(world, bold_announce(
+	to_chat(world, span_boldannounce(
 		{"Total Simulated Turfs: [simulated_turf_count]
 		Total Zones: [zones.len]
 		Total Edges: [edges.len]
@@ -174,15 +178,15 @@ SUBSYSTEM_DEF(zas)
 		Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"}
 	))
 
-	to_chat(world, bold_announce("Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
+	to_chat(world, span_boldannounce("Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
 
 	if (simulate)
-		to_chat(world, bold_announce("Settling air..."))
+		to_chat(world, span_boldannounce("Settling air..."))
 
 		starttime = REALTIMEOFDAY
 		fire(FALSE, TRUE)
 
-		to_chat(world, bold_announce("Air settling completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
+		to_chat(world, span_boldannounce("Air settling completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
 
 	..(timeofday)
 
@@ -310,6 +314,18 @@ SUBSYSTEM_DEF(zas)
 			if (MC_TICK_CHECK)
 				return
 
+	current_process = SSZAS_ATOMS
+	curr_atoms = atom_process
+	if(current_process == SSZAS_ATOMS)
+		while(curr_atoms.len)
+		var/atom/talk_to = curr_atoms[curr_atoms.len]
+		curr_atoms.len--
+		if(!talk_to)
+			return
+		talk_to.process_exposure()
+		if(MC_TICK_CHECK)
+			return
+
 	current_process = SSZAS_MACHINES
 
 /**
@@ -519,3 +535,18 @@ SUBSYSTEM_DEF(zas)
 		active_edges -= E
 	if(processing_edges)
 		processing_edges -= E
+
+/datum/controller/subsystem/zas/proc/get_init_dirs(type, dir, init_dir)
+
+	if(!pipe_init_dirs_cache[type])
+		pipe_init_dirs_cache[type] = list()
+
+	if(!pipe_init_dirs_cache[type]["[init_dir]"])
+		pipe_init_dirs_cache[type]["[init_dir]"] = list()
+
+	if(!pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"])
+		var/obj/machinery/atmospherics/temp = new type(null, FALSE, dir, init_dir)
+		pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"] = temp.get_init_directions()
+		qdel(temp)
+
+	return pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"]
diff --git a/code/datums/atmosphere/_atmosphere.dm b/code/datums/atmosphere/_atmosphere.dm
index 431a6695753..5bc91a7d85b 100644
--- a/code/datums/atmosphere/_atmosphere.dm
+++ b/code/datums/atmosphere/_atmosphere.dm
@@ -1,5 +1,5 @@
 /datum/atmosphere
-	var/gas_string
+	//var/gas_string
 	var/id
 
 	var/list/base_gases // A list of gases to always have
@@ -14,8 +14,9 @@
 	var/maximum_temp
 
 /datum/atmosphere/New()
-	generate_gas_string()
+	//generate_gas_string()
 
+/*
 /datum/atmosphere/proc/generate_gas_string()
 	var/list/spicy_gas = restricted_gases.Copy()
 	var/target_pressure = rand(minimum_pressure, maximum_pressure)
@@ -65,3 +66,4 @@
 		gas_string_builder += "[gas[GAS_META][META_GAS_ID]]=[gas[MOLES]]"
 	gas_string_builder += "TEMP=[gasmix.temperature]"
 	gas_string = gas_string_builder.Join(";")
+*/
diff --git a/code/datums/components/atmos_reaction_recorder.dm b/code/datums/components/atmos_reaction_recorder.dm
index 02ec672655c..d2f1ffa6895 100644
--- a/code/datums/components/atmos_reaction_recorder.dm
+++ b/code/datums/components/atmos_reaction_recorder.dm
@@ -5,13 +5,13 @@
  * Add this component after gasmixes has been initialized.
  */
 /datum/component/atmos_reaction_recorder
-	/// The list we write append each reaction tick to. 
+	/// The list we write append each reaction tick to.
 	/// This is often a list initialized by something else (passed as a reference under Initialize).
 	var/list/copied_reaction_results
 	/// Signals we have been listening to.
 	var/list/registered_signals
 
-/** 
+/**
  * Verify that parent is indeed an atom, and then register signals.
  * Args:
  * - target_list (list): The list we are writing the captured reaction_results to.
@@ -46,8 +46,7 @@
 /// Fetches reaction_results and updates the list.
 /datum/component/atmos_reaction_recorder/proc/update_data(datum/gas_mixture/recorded_gasmix)
 	SIGNAL_HANDLER
-	for (var/reaction in recorded_gasmix.reaction_results)
-		copied_reaction_results[reaction] += recorded_gasmix.reaction_results[reaction]
+	//copied_reaction_results[reaction] += "UNIMPLIMENTED: ATMOS REACTION RECORDER"
 
 /datum/component/atmos_reaction_recorder/proc/reset_data()
 	SIGNAL_HANDLER
diff --git a/code/datums/components/combustible_flooder.dm b/code/datums/components/combustible_flooder.dm
index 98c88e3290d..cae32ef8f64 100644
--- a/code/datums/components/combustible_flooder.dm
+++ b/code/datums/components/combustible_flooder.dm
@@ -37,8 +37,8 @@
 		flooded_turf = parent_turf.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
 		delete_parent = FALSE
 
-	flooded_turf.atmos_spawn_air("[gas_id]=[gas_amount];TEMP=[temp_amount || trigger_temperature]")
-	
+	flooded_turf.atmos_spawn_air(gas_id, gas_amount, temp_amount||trigger_temperature)
+
 	// Logging-related
 	var/admin_message = "[parent] ignited in [ADMIN_VERBOSEJMP(flooded_turf)]"
 	var/log_message = "[parent] ignited in [AREACOORD(flooded_turf)]"
@@ -52,7 +52,7 @@
 	log_game(log_message)
 
 	if(delete_parent && !QDELETED(parent))
-		qdel(parent) // For things with the explodable component like plasma mats this isn't necessary, but there's no harm. 
+		qdel(parent) // For things with the explodable component like plasma mats this isn't necessary, but there's no harm.
 	qdel(src)
 
 /// fire_act reaction.
diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm
index 71565bb29f4..b5977d93bd5 100644
--- a/code/datums/components/gas_leaker.dm
+++ b/code/datums/components/gas_leaker.dm
@@ -31,7 +31,7 @@
 	src.leak_rate = leak_rate
 
 /datum/component/gas_leaker/Destroy(force, silent)
-	SSair.stop_processing_machine(src)
+	SSzas.stop_processing_machine(src)
 	return ..()
 
 /datum/component/gas_leaker/RegisterWithParent()
@@ -56,7 +56,7 @@
 	SIGNAL_HANDLER
 	// Hello fellow atmospherics machines, I too am definitely an atmos machine like you!
 	// This component needs to tick at the same rate as the atmos system
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 
 /datum/component/gas_leaker/proc/process_obj(obj/master, list/airs=list())
 	airs += master.return_air()
@@ -78,9 +78,7 @@
 	var/turf/location = get_turf(master)
 	var/true_rate = (1 - (current_integrity / master.max_integrity)) * leak_rate
 	for(var/datum/gas_mixture/mix as anything in airs)
-		var/pressure = mix.return_pressure()
-		if(mix.release_gas_to(location.return_air(), pressure, true_rate))
-			location.air_update_turf(FALSE, FALSE)
+		mix.mingle_with_turf(get_turf(parent), true_rate)//Not sure this is the best way to do this buuuuuut, ZASSED!
 
 #undef PROCESS_OBJ
 #undef PROCESS_MACHINE
diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm
index 2306f13407c..5039ca06fd6 100644
--- a/code/datums/diseases/_disease.dm
+++ b/code/datums/diseases/_disease.dm
@@ -126,7 +126,9 @@
 		if(end == start)
 			return TRUE
 		var/turf/Temp = get_step_towards(end, start)
-		if(!TURFS_CAN_SHARE(end, Temp)) //Don't go through a wall
+		var/canpass_air
+		ATMOS_CANPASS_TURF(canpass_air, end, Temp)
+		if(!canpass_air) //Don't go through a wall
 			return FALSE
 		end = Temp
 
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index b9088b7efb5..a5e9fbed306 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -489,10 +489,8 @@
 
 	if(M.loc)
 		environment = M.loc.return_air()
-	if(environment)
-		gases = environment.gases
-		if(gases[/datum/gas/plasma])
-			. += power * min(0.5, gases[/datum/gas/plasma][MOLES] * HEALING_PER_MOL)
+	if(environment && environment.get_gas(GAS_PLASMA))
+		. += power * min(0.5, environment.get_gas(GAS_PLASMA) * HEALING_PER_MOL)
 	if(M.reagents.has_reagent(/datum/reagent/toxin/plasma, needs_metabolizing = TRUE))
 		. += power * 0.75 //Determines how much the symptom heals if injected or ingested
 
diff --git a/code/datums/elements/atmos_requirements.dm b/code/datums/elements/atmos_requirements.dm
index 94493a18097..6b3c13899fc 100644
--- a/code/datums/elements/atmos_requirements.dm
+++ b/code/datums/elements/atmos_requirements.dm
@@ -46,15 +46,13 @@
 	if(!open_turf.air && (atmos_requirements["min_oxy"] || atmos_requirements["min_tox"] || atmos_requirements["min_n2"] || atmos_requirements["min_co2"]))
 		return FALSE
 
-	var/open_turf_gases = open_turf.air.gases
-	open_turf.air.assert_gases(arglist(GLOB.hardcoded_gases))
+	var/datum/gas_mixture/open_turf_gases = open_turf.return_air()
 
-	var/plas = open_turf_gases[/datum/gas/plasma][MOLES]
-	var/oxy = open_turf_gases[/datum/gas/oxygen][MOLES]
-	var/n2 = open_turf_gases[/datum/gas/nitrogen][MOLES]
-	var/co2 = open_turf_gases[/datum/gas/carbon_dioxide][MOLES]
 
-	open_turf.air.garbage_collect()
+	var/plas = open_turf_gases.get_gas(GAS_PLASMA)
+	var/oxy = open_turf_gases.get_gas(GAS_OXYGEN)
+	var/n2 = open_turf_gases.get_gas(GAS_NITROGEN)
+	var/co2 = open_turf_gases.get_gas(GAS_CO2)
 
 	. = TRUE
 	if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
diff --git a/code/datums/elements/atmos_sensitive.dm b/code/datums/elements/atmos_sensitive.dm
index ca676327e26..9cc8799db7b 100644
--- a/code/datums/elements/atmos_sensitive.dm
+++ b/code/datums/elements/atmos_sensitive.dm
@@ -24,7 +24,7 @@
 	us.RemoveElement(/datum/element/connect_loc, pass_on)
 	if(us.flags_1 & ATMOS_IS_PROCESSING_1)
 		us.atmos_end()
-		SSair.atom_process -= us
+		SSzas.atom_process -= us
 		us.flags_1 &= ~ATMOS_IS_PROCESSING_1
 	return ..()
 
@@ -40,11 +40,11 @@
 	if(should_atmos_process(air, exposed_temperature))
 		if(flags_1 & ATMOS_IS_PROCESSING_1)
 			return
-		SSair.atom_process += src
+		SSzas.atom_process += src
 		flags_1 |= ATMOS_IS_PROCESSING_1
 	else if(flags_1 & ATMOS_IS_PROCESSING_1)
 		atmos_end()
-		SSair.atom_process -= src
+		SSzas.atom_process -= src
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 
 /atom/proc/process_exposure()
@@ -52,12 +52,12 @@
 	if(!istype(loc, /turf/open))
 		//If you end up in a locker or a wall reconsider your life decisions
 		atmos_end()
-		SSair.atom_process -= src
+		SSzas.atom_process -= src
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return
 	if(!should_atmos_process(spot.air, spot.air.temperature)) //Things can change without a tile becoming active
 		atmos_end()
-		SSair.atom_process -= src
+		SSzas.atom_process -= src
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return
 	atmos_expose(spot.air, spot.air.temperature)
@@ -65,7 +65,7 @@
 /turf/open/process_exposure()
 	if(!should_atmos_process(air, air.temperature))
 		atmos_end()
-		SSair.atom_process -= src
+		SSzas.atom_process -= src
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return
 	atmos_expose(air, air.temperature)
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index cb5aa00386a..3fc5a504215 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -128,32 +128,22 @@
 	if(no_teleport && (destination_area.area_flags & NOTELEPORT))
 		return
 
-	var/datum/gas_mixture/floor_gas_mixture = floor_turf.air
-	if(!floor_gas_mixture)
-		return
-
-	var/list/floor_gases = floor_gas_mixture.gases
-	var/trace_gases
-	for(var/id in floor_gases)
-		if(id in GLOB.hardcoded_gases)
-			continue
-		trace_gases = TRUE
-		break
+	var/datum/gas_mixture/floor_gases= floor_turf.return_air()
 
-	// Can most things breathe?
-	if(trace_gases)
+	if(!floor_gases)
 		return
-	if(!(floor_gases[/datum/gas/oxygen] && floor_gases[/datum/gas/oxygen][MOLES] >= 16))
+
+	if(!(floor_gases.get_gas(GAS_OXYGEN) >= 16))
 		return
-	if(floor_gases[/datum/gas/plasma])
+	if(floor_gases.get_gas(GAS_PLASMA))
 		return
-	if(floor_gases[/datum/gas/carbon_dioxide] && floor_gases[/datum/gas/carbon_dioxide][MOLES] >= 10)
+	if(floor_gases.get_gas(GAS_CO2) >= 10)
 		return
 
 	// Aim for goldilocks temperatures and pressure
-	if((floor_gas_mixture.temperature <= 270) || (floor_gas_mixture.temperature >= 360))
+	if((floor_gases.temperature <= 270) || (floor_gases.temperature >= 360))
 		return
-	var/pressure = floor_gas_mixture.return_pressure()
+	var/pressure = floor_gases.return_pressure()
 	if((pressure <= 20) || (pressure >= 550))
 		return
 
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 79ddce1ff12..bdaa6a41803 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -116,7 +116,7 @@
 		//Restore air flow if we were blocking it (movables with ATMOS_PASS_PROC will need to do this manually if necessary)
 		if(((can_atmos_pass == ATMOS_PASS_DENSITY && density) || can_atmos_pass == ATMOS_PASS_NO) && isturf(loc))
 			can_atmos_pass = ATMOS_PASS_YES
-			air_update_turf(TRUE, FALSE)
+			//air_update_turf(TRUE, FALSE)
 		loc.handle_atom_del(src)
 
 	if(opacity)
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index 39665740779..4c66c5e301d 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -299,7 +299,7 @@
 	var/target_amount = text2num(name)
 	var/found_amount = 0
 	var/datum/gas_mixture/mix = T.return_air()
-	found_amount += mix.gases[/datum/gas/plasma] ? mix.gases[/datum/gas/plasma][MOLES] : 0
+	found_amount += mix.get_gas(GAS_PLASMA)
 	return found_amount>=target_amount
 
 
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 4f5a5125183..316ab1fa2ee 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -90,7 +90,7 @@
 	desc = "Some kind of machine."
 	verb_say = "beeps"
 	verb_yell = "blares"
-	pressure_resistance = 15
+	//pressure_resistance = 15
 	pass_flags_self = PASSMACHINE
 	max_integrity = 200
 	layer = BELOW_OBJ_LAYER //keeps shit coming out of the machine from ending up underneath it.
@@ -536,10 +536,11 @@
 	if(!.)
 		return FALSE
 
-	var/turf/user_turf = get_turf(user)
+	/*var/turf/user_turf = get_turf(user)
 	var/turf/machine_turf = get_turf(src)
 	if(!(user_turf in machine_turf.atmos_adjacent_turfs))
 		return FALSE
+	*/
 
 	if((interaction_flags_machine & INTERACT_MACHINE_REQUIRES_SIGHT) && user.is_blind())
 		to_chat(user, span_warning("This machine requires sight to use."))
diff --git a/code/game/machinery/computer/atmos_computers/_air_sensor.dm b/code/game/machinery/computer/atmos_computers/_air_sensor.dm
index 72a3df3153e..7b4a83bad3c 100644
--- a/code/game/machinery/computer/atmos_computers/_air_sensor.dm
+++ b/code/game/machinery/computer/atmos_computers/_air_sensor.dm
@@ -16,13 +16,13 @@
 
 /obj/machinery/air_sensor/Initialize(mapload)
 	id_tag = chamber_id + "_sensor"
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 	radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
 	return ..()
 
 /obj/machinery/air_sensor/Destroy()
 	INVOKE_ASYNC(src, .proc/broadcast_destruction, src.frequency)
-	SSair.stop_processing_machine(src)
+	SSzas.stop_processing_machine(src)
 	SSradio.remove_object(src, frequency)
 	return ..()
 
diff --git a/code/game/machinery/computer/atmos_computers/_atmos_control.dm b/code/game/machinery/computer/atmos_computers/_atmos_control.dm
index 7651109971f..9d3416aa1e1 100644
--- a/code/game/machinery/computer/atmos_computers/_atmos_control.dm
+++ b/code/game/machinery/computer/atmos_computers/_atmos_control.dm
@@ -133,7 +133,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
 	data["maxOutput"] = MAX_OUTPUT_PRESSURE
 	data["control"] = control
 	data["reconnecting"] = reconnecting
-	data += return_atmos_handbooks()
+	//data += return_atmos_handbooks()
 	return data
 
 /obj/machinery/computer/atmos_control/ui_data(mob/user)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index b817ef75e3f..9e15c38656a 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1220,7 +1220,7 @@
 		filler.set_density(FALSE)
 	//PARIAH STATION EDIT END
 	flags_1 &= ~PREVENT_CLICK_UNDER_1
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	sleep(1)
 	layer = OPEN_DOOR_LAYER
 	update_icon(ALL, AIRLOCK_OPEN, TRUE)
@@ -1270,7 +1270,7 @@
 		if(multi_tile)
 			filler.density = TRUE
 		//PARIAH STATION EDIT END
-		air_update_turf(TRUE, TRUE)
+		//air_update_turf(TRUE, TRUE)
 	sleep(1)
 	if(!air_tight)
 		set_density(TRUE)
@@ -1279,7 +1279,7 @@
 		if(multi_tile)
 			filler.density = TRUE
 		//PARIAH STATION EDIT END
-		air_update_turf(TRUE, TRUE)
+		//air_update_turf(TRUE, TRUE)
 	sleep(4)
 	if(dangerous_close)
 		crush()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index ab7943b5c57..8e9b2fc379f 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -47,7 +47,7 @@
 	. = ..()
 	set_init_door_layer()
 	update_freelook_sight()
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 	register_context()
 	GLOB.airlocks += src
 	spark_system = new /datum/effect_system/spark_spread
@@ -101,7 +101,7 @@
 	if(spark_system)
 		qdel(spark_system)
 		spark_system = null
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	return ..()
 
 /**
@@ -169,8 +169,8 @@
 /obj/machinery/door/Move()
 	var/turf/T = loc
 	. = ..()
-	if(density) //Gotta be closed my friend
-		move_update_air(T)
+	/*if(density) //Gotta be closed my friend
+		move_update_air(T)*/
 
 /obj/machinery/door/CanAllowThrough(atom/movable/mover, border_dir)
 	. = ..()
@@ -183,7 +183,7 @@
 /obj/machinery/door/proc/bumpopen(mob/user)
 	if(operating || !can_open_with_hands)
 		return
-		
+
 	add_fingerprint(user)
 	if(!density || (obj_flags & EMAGGED))
 		return
@@ -353,7 +353,7 @@
 	update_appearance()
 	set_opacity(0)
 	operating = FALSE
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	update_freelook_sight()
 	if(autoclose)
 		autoclose_in(DOOR_CLOSE_WAIT)
@@ -383,7 +383,7 @@
 	if(visible && !glass)
 		set_opacity(1)
 	operating = FALSE
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 	update_freelook_sight()
 
 	if(!can_crush)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 3d4779d748e..f314b223636 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -46,7 +46,7 @@
 	///The merger_id and merger_typecache variables are used to make rows of firelocks activate at the same time.
 	var/merger_id = "firelocks"
 	var/static/list/merger_typecache
-	
+
 	///Overlay object for the warning lights. This and some plane settings allows the lights to glow in the dark.
 	var/mutable_appearance/warn_lights
 
@@ -239,7 +239,7 @@
 /obj/machinery/door/firedoor/proc/unregister_adjacent_turfs(atom/loc)
 	for(var/dir in GLOB.cardinals)
 		var/turf/checked_turf = get_step(get_turf(loc), dir)
-	
+
 		if(!checked_turf)
 			continue
 
@@ -270,7 +270,7 @@
 	var/turf/checked_turf = source
 	var/result = check_atmos(checked_turf)
 
-	if(result && TURF_SHARES(checked_turf))
+	if(result && Adjacent(checked_turf))
 		issue_turfs |= checked_turf
 		if(!alarm_type)
 			start_activation_process(result)
@@ -278,7 +278,7 @@
 		issue_turfs -= checked_turf
 		if(!length(issue_turfs))
 			start_deactivation_process()
-	
+
 
 /**
  * Begins activation process of us and our neighbors.
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index b6464443065..b989be0dbbf 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -72,8 +72,8 @@
 	if(atom_integrity == 0)
 		playsound(src, SFX_SHATTER, 70, TRUE)
 	electronics = null
-	var/turf/floor = get_turf(src)
-	floor.air_update_turf(TRUE, FALSE)
+	/*var/turf/floor = get_turf(src)
+	floor.air_update_turf(TRUE, FALSE)*/
 	return ..()
 
 /obj/machinery/door/window/update_icon_state()
@@ -214,7 +214,7 @@
 	icon_state ="[base_state]open"
 	sleep(10)
 	set_density(FALSE)
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	update_freelook_sight()
 
 	if(operating == 1) //emag again
@@ -236,7 +236,7 @@
 	icon_state = base_state
 
 	set_density(TRUE)
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 	update_freelook_sight()
 	sleep(10)
 
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index ab71b554508..99d1e3195f0 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -55,7 +55,7 @@ Buildable meters
 	update()
 	pixel_x += rand(-5, 5)
 	pixel_y += rand(-5, 5)
-	
+
 	//Flipping handled manually due to custom handling for trinary pipes
 	AddComponent(/datum/component/simple_rotation, ROTATION_NO_FLIPPING)
 	return ..()
@@ -171,7 +171,7 @@ Buildable meters
 	// See if we would conflict with any of the potentially interacting machines
 	for(var/obj/machinery/atmospherics/machine as anything in potentially_conflicting_machines)
 		// if the pipes have any directions in common, we can't place it that way.
-		var/our_init_dirs = SSair.get_init_dirs(pipe_type, fixed_dir(), p_init_dir)
+		var/our_init_dirs = SSzas.get_init_dirs(pipe_type, fixed_dir(), p_init_dir)
 		if(machine.get_init_directions() & our_init_dirs)
 			// We have a conflict!
 			if (length(potentially_conflicting_machines) != 1 || !try_smart_reconfiguration(machine, our_init_dirs, user))
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 17fc788ca5e..eca093c49b7 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -14,16 +14,16 @@
 /obj/structure/emergency_shield/Initialize(mapload)
 	. = ..()
 	setDir(pick(GLOB.cardinals))
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/emergency_shield/Destroy()
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	. = ..()
 
 /obj/structure/emergency_shield/Move()
 	var/turf/T = loc
-	. = ..()
-	move_update_air(T)
+	/*. = ..()
+	move_update_air(T)*/
 
 /obj/structure/emergency_shield/emp_act(severity)
 	. = ..()
@@ -101,7 +101,7 @@
 */
 /obj/structure/emergency_shield/cult/barrier/proc/Toggle()
 	set_density(!density)
-	air_update_turf(TRUE, !density)
+	//air_update_turf(TRUE, !density)
 	invisibility = initial(invisibility)
 	if(!density)
 		invisibility = INVISIBILITY_OBSERVER
@@ -114,7 +114,7 @@
 	density = TRUE
 	opacity = FALSE
 	anchored = FALSE
-	pressure_resistance = 2*ONE_ATMOSPHERE
+	//pressure_resistance = 2*ONE_ATMOSPHERE
 	req_access = list(ACCESS_ENGINE)
 	max_integrity = 100
 	var/active = FALSE
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 7233be61c25..3134a41d209 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -48,10 +48,10 @@
 	if(ispath(cell))
 		cell = new cell(src)
 	update_appearance()
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 
 /obj/machinery/space_heater/Destroy()
-	SSair.stop_processing_machine(src)
+	SSzas.stop_processing_machine(src)
 	return..()
 
 /obj/machinery/space_heater/on_deconstruction()
@@ -125,7 +125,7 @@
 		delta_temperature *= -1
 	if(delta_temperature)
 		enviroment.temperature += delta_temperature
-		air_update_turf(FALSE, FALSE)
+		//air_update_turf(FALSE, FALSE)
 	cell.use(required_energy / efficiency)
 
 /obj/machinery/space_heater/RefreshParts()
@@ -265,7 +265,7 @@
 	usr.visible_message(span_notice("[usr] switches [on ? "on" : "off"] \the [src]."), span_notice("You switch [on ? "on" : "off"] \the [src]."))
 	update_appearance()
 	if (on)
-		SSair.start_processing_machine(src)
+		SSzas.start_processing_machine(src)
 
 ///For use with heating reagents in a ghetto way
 /obj/machinery/space_heater/improvised_chem_heater
diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm
index 5a813c89084..abf34991f33 100644
--- a/code/game/objects/effects/anomalies.dm
+++ b/code/game/objects/effects/anomalies.dm
@@ -326,7 +326,8 @@
 		ticks -= releasedelay
 	var/turf/open/T = get_turf(src)
 	if(istype(T))
-		T.atmos_spawn_air("o2=5;plasma=5;TEMP=1000")
+		T.atmos_spawn_air(GAS_OXYGEN, 5, 1000)
+		T.atmos_spawn_air(GAS_PLASMA, 5, 1000)
 
 /obj/effect/anomaly/pyro/detonate()
 	INVOKE_ASYNC(src, .proc/makepyroslime)
@@ -334,7 +335,9 @@
 /obj/effect/anomaly/pyro/proc/makepyroslime()
 	var/turf/open/T = get_turf(src)
 	if(istype(T))
-		T.atmos_spawn_air("o2=500;plasma=500;TEMP=1000") //Make it hot and burny for the new slime
+		T.atmos_spawn_air(GAS_OXYGEN, 5, 1000)
+		T.atmos_spawn_air(GAS_PLASMA, 5, 1000)
+
 	var/new_colour = pick("red", "orange")
 	var/mob/living/simple_animal/slime/S = new(T, new_colour)
 	S.rabid = TRUE
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index a49d1548b38..80a9ab9b5ba 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -45,14 +45,13 @@
 	if(hotspot && istype(T) && T.air)
 		qdel(hotspot)
 		var/datum/gas_mixture/G = T.air
-		if(G.gases[/datum/gas/plasma])
-			var/plas_amt = min(30,G.gases[/datum/gas/plasma][MOLES]) //Absorb some plasma
-			G.gases[/datum/gas/plasma][MOLES] -= plas_amt
+		if(G.get_gas(GAS_PLASMA))
+			var/plas_amt = min(30, G.get_gas(GAS_PLASMA)) //Absorb some plasma
+			G.remove_gas(GAS_PLASMA, plas_amt)
 			absorbed_plasma += plas_amt
 		if(G.temperature > T20C)
 			G.temperature = max(G.temperature/2,T20C)
-		G.garbage_collect()
-		T.air_update_turf(FALSE, FALSE)
+		//T.air_update_turf(FALSE, FALSE)
 
 /obj/effect/particle_effect/foam/firefighting/kill_foam()
 	STOP_PROCESSING(SSfastprocess, src)
@@ -283,16 +282,16 @@
 
 /obj/structure/foamedmetal/Initialize(mapload)
 	. = ..()
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/foamedmetal/Destroy()
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	. = ..()
 
 /obj/structure/foamedmetal/Move()
 	var/turf/T = loc
 	. = ..()
-	move_update_air(T)
+	//move_update_air(T)
 
 /obj/structure/foamedmetal/attack_paw(mob/user, list/modifiers)
 	return attack_hand(user, modifiers)
@@ -364,12 +363,12 @@
 			G.temperature = 293.15
 			for(var/obj/effect/hotspot/H in O)
 				qdel(H)
-			var/list/G_gases = G.gases
+			var/list/G_gases = G.gas
 			for(var/I in G_gases)
-				if(I == /datum/gas/oxygen || I == /datum/gas/nitrogen)
+				if(I == GAS_OXYGEN || I == GAS_NITROGEN)
 					continue
-				G_gases[I][MOLES] = 0
-			G.garbage_collect()
+				G_gases[I] = 0
+			G.update_values()
 		for(var/obj/machinery/atmospherics/components/unary/U in O)
 			if(!U.welded)
 				U.welded = TRUE
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index 24b1af4ee2a..75308cce91a 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -173,15 +173,12 @@
 			var/datum/gas_mixture/G = T.air
 			if(!distcheck || get_dist(T, location) < blast) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air
 				G.temperature = temperature
-			T.air_update_turf(FALSE, FALSE)
+			//T.air_update_turf(FALSE, FALSE)
 			for(var/obj/effect/hotspot/H in T)
 				qdel(H)
-			var/list/G_gases = G.gases
-			if(G_gases[/datum/gas/plasma])
-				G.assert_gas(/datum/gas/nitrogen)
-				G_gases[/datum/gas/nitrogen][MOLES] += (G_gases[/datum/gas/plasma][MOLES])
-				G_gases[/datum/gas/plasma][MOLES] = 0
-				G.garbage_collect()
+			if(G.get_gas(GAS_PLASMA))
+				G.add_gas(GAS_NITROGEN, G.get_gas(GAS_PLASMA))
+				G.remove_gas(GAS_PLASMA, G.gas[GAS_PLASMA])
 		if (weldvents)
 			for(var/obj/machinery/atmospherics/components/unary/U in T)
 				if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber.
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index e9fb99dd5e8..d32d35ae8dd 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -86,7 +86,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e
 	///This is used to determine on which slots an item can fit.
 	var/slot_flags = 0
 	pass_flags = PASSTABLE
-	pressure_resistance = 4
+	//pressure_resistance = 4
 	/// This var exists as a weird proxy "owner" ref
 	/// It's used in a few places. Stop using it, and optimially replace all uses please
 	var/obj/item/master = null
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 2c9a60067f2..e2f7b63f5c5 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -1005,7 +1005,7 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
 						for(var/direction in GLOB.cardinals)
 							var/turf/C = get_step(W, direction)
 							var/list/dupes = checkdupes(C)
-							if((isspaceturf(C) || TURF_SHARES(C)) && !dupes.len)
+							if((isspaceturf(C) || C.TryGetNonDenseNeighbour()) && !dupes.len)
 								candidates += C
 						if(!candidates.len)
 							to_chat(user, span_warning("Valid target not found..."))
diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm
index f376c9d6358..cbc9d797ce6 100644
--- a/code/game/objects/items/RPD.dm
+++ b/code/game/objects/items/RPD.dm
@@ -510,7 +510,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
 				for (var/obj/machinery/atmospherics/O in S.nodes)
 					O.atmos_init()
 					O.add_member(src)
-				SSair.add_to_rebuild_queue(S)
+				SSzas.add_to_rebuild_queue(S)
 			// Finally, update our internal state - update_pipe_icon also updates dir and connections
 			S.update_pipe_icon()
 			user.visible_message(span_notice("[user] reprograms the \the [S]."),span_notice("You reprogram \the [S]."))
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index ec8483d5961..b8740740a76 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -194,7 +194,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
 
 	if(!reagents.has_reagent(/datum/reagent/oxygen)) //cigarettes need oxygen
 		var/datum/gas_mixture/air = return_air()
-		if(!air || !air.has_gas(/datum/gas/oxygen, 1)) //or oxygen on a tile to burn
+		if(!air || !air.has_gas(GAS_OXYGEN, 1)) //or oxygen on a tile to burn
 			to_chat(user, span_notice("Your [name] needs a source of oxygen to burn."))
 			return ..()
 
@@ -315,7 +315,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
 	user?.IgniteMob()
 	if(!reagents.has_reagent(/datum/reagent/oxygen)) //cigarettes need oxygen
 		var/datum/gas_mixture/air = return_air()
-		if(!air || !air.has_gas(/datum/gas/oxygen, 1)) //or oxygen on a tile to burn
+		if(!air || !air.has_gas(GAS_OXYGEN, 1)) //or oxygen on a tile to burn
 			extinguish()
 			return
 
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 905e7fdecab..123e215b394 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -142,7 +142,7 @@
 	var/delta_temperature = temp_to_give / environment.heat_capacity()
 	if(delta_temperature)
 		environment.temperature += delta_temperature
-		air_update_turf(FALSE, FALSE)
+		//air_update_turf(FALSE, FALSE)
 	if(admins_warned && internal_heat < max_heat * 0.75)
 		admins_warned = FALSE
 		message_admins("Power sink at ([x],[y],[z] - <A HREF='?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) has cooled down and will not explode.")
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index cf5316866e9..997d0da6585 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -101,7 +101,7 @@
 		ui.open()
 
 /obj/item/analyzer/ui_static_data(mob/user)
-	return return_atmos_handbooks()
+	return //return_atmos_handbooks()
 
 /obj/item/analyzer/ui_data(mob/user)
 	LAZYINITLIST(last_gasmix_data)
@@ -125,7 +125,7 @@
 
 /**
  * Outputs a message to the user describing the target's gasmixes.
- * 
+ *
  * Gets called by analyzer_act, which in turn is called by tool_act.
  * Also used in other chat-based gas scans.
  */
@@ -133,7 +133,7 @@
 	var/mixture = target.return_analyzable_air()
 	if(!mixture)
 		return FALSE
-	
+
 	var/icon = target
 	var/message = list()
 	if(!silent && isliving(user))
@@ -157,17 +157,17 @@
 
 		if(total_moles > 0)
 			message += span_notice("Moles: [round(total_moles, 0.01)] mol")
-				
-			var/list/cached_gases = air.gases
+
+			var/list/cached_gases = air.gas
 			for(var/id in cached_gases)
-				var/gas_concentration = cached_gases[id][MOLES]/total_moles
-				message += span_notice("[cached_gases[id][GAS_META][META_GAS_NAME]]: [round(cached_gases[id][MOLES], 0.01)] mol ([round(gas_concentration*100, 0.01)] %)")
+				var/gas_concentration = air.get_total_moles(gas_id)/total_moles
+				message += span_notice("[id]: [round(air.get_gas(id), 0.01)] mol ([round(gas_concentration*100, 0.01)] %)")
 			message += span_notice("Temperature: [round(temperature - T0C,0.01)] &deg;C ([round(temperature, 0.01)] K)")
 			message += span_notice("Volume: [volume] L")
 			message += span_notice("Pressure: [round(pressure, 0.01)] kPa")
 		else
 			message += airs.len > 1 ? span_notice("This node is empty!") : span_notice("[target] is empty!")
-		
+
 		gasmix_data += list(gas_mixture_parser(air, mix_name))
 
 	if(istype(tool))
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 730df0413be..c1234098dfd 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -202,9 +202,9 @@
 	for(var/turf/T in turflist)
 		if(T == previousturf)
 			continue //so we don't burn the tile we be standin on
-		var/list/turfs_sharing_with_prev = previousturf.get_atmos_adjacent_turfs(alldir=1)
+		/*var/list/turfs_sharing_with_prev = previousturf.TryGetNonDenseNeighbour()
 		if(!(T in turfs_sharing_with_prev))
-			break
+			break*/
 		if(igniter)
 			igniter.ignite_turf(src,T)
 		else
diff --git a/code/game/objects/items/grenades/atmos_grenades.dm b/code/game/objects/items/grenades/atmos_grenades.dm
index 27223969a34..a17fe6e9e32 100644
--- a/code/game/objects/items/grenades/atmos_grenades.dm
+++ b/code/game/objects/items/grenades/atmos_grenades.dm
@@ -70,6 +70,8 @@
 		var/distance_from_center = max(get_dist(turf_loc, loc), 1)
 		var/turf/open/floor_loc = turf_loc
 		floor_loc.atmos_spawn_air("n2=[n2_gas_amount / distance_from_center];o2=[o2_gas_amount / distance_from_center];TEMP=273")
+		floor_loc.atmos_spawn_air(GAS_NITROGEN, n2_gas_amount/distance_from_center, 273)
+		floor_loc.atmos_spawn_air(GAS_OXYGEN, o2_gas_amount/distance_from_center, 273)
 	qdel(src)
 
 /obj/item/grenade/gas_crystal/nitrous_oxide_crystal
diff --git a/code/game/objects/items/secret_documents.dm b/code/game/objects/items/secret_documents.dm
index 8c5780b1785..3c42f9c9396 100644
--- a/code/game/objects/items/secret_documents.dm
+++ b/code/game/objects/items/secret_documents.dm
@@ -18,7 +18,7 @@
 	throw_range = 1
 	throw_speed = 1
 	layer = MOB_LAYER
-	pressure_resistance = 2
+	//pressure_resistance = 2
 	resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
 
 ///Nanotrasen documents
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index 3e3eb90e583..14fafa34062 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -41,8 +41,7 @@
 /obj/item/tank/jetpack/populate_gas()
 	if(gas_type)
 		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))
+		our_mix.adjust_gas(gas_type, (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))
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index 093048267da..f2bab55a201 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -17,7 +17,7 @@
 	slot_flags = ITEM_SLOT_BACK
 	worn_icon = 'icons/mob/clothing/back.dmi' //since these can also get thrown into suit storage slots. if something goes on the belt, set this to null.
 	hitsound = 'sound/weapons/smash.ogg'
-	pressure_resistance = ONE_ATMOSPHERE * 5
+	//pressure_resistance = ONE_ATMOSPHERE * 5
 	force = 5
 	throwforce = 10
 	throw_speed = 1
@@ -89,7 +89,7 @@
 
 	AddComponent(/datum/component/atmos_reaction_recorder, reset_criteria = list(COMSIG_GASMIX_MERGING = air_contents, COMSIG_GASMIX_REMOVING = air_contents), target_list = reaction_info)
 
-	// This is separate from the reaction recorder. 
+	// This is separate from the reaction recorder.
 	// In this case we are only listening to determine if the tank is overpressurized but not destroyed.
 	RegisterSignal(air_contents, COMSIG_GASMIX_MERGED, .proc/merging_information)
 
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 08773b1cf19..a69ef63a050 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -1,7 +1,7 @@
 /// Inert structures, such as girders, machine frames, and crates/lockers.
 /obj/structure
 	icon = 'icons/obj/structures.dmi'
-	pressure_resistance = 8
+	//pressure_resistance = 8
 	max_integrity = 300
 	interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
 	layer = BELOW_OBJ_LAYER
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index a59bfebb0be..d025218944f 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -68,10 +68,10 @@
 
 /obj/structure/alien/resin/Initialize(mapload)
 	. = ..()
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/alien/resin/Destroy()
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	. = ..()
 
 /obj/structure/alien/resin/Move()
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 2cac5b155ae..971e5b2bd6c 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -31,7 +31,7 @@
 	var/obj/item/stack/initialized_mineral = new mineral // Okay this kinda sucks.
 	set_custom_materials(initialized_mineral.mats_per_unit, mineral_amount)
 	qdel(initialized_mineral)
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/falsewall/attack_hand(mob/user, list/modifiers)
 	if(opening)
@@ -55,7 +55,7 @@
 		set_opacity(density)
 		opening = FALSE
 		update_appearance()
-		air_update_turf(TRUE, !density)
+		//air_update_turf(TRUE, !density)
 
 /obj/structure/falsewall/update_icon(updates=ALL)//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
 	. = ..()
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 8274b934286..fe236a97e8a 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -11,7 +11,7 @@
 	anchored = TRUE
 	pass_flags_self = PASSGRILLE
 	flags_1 = CONDUCT_1
-	pressure_resistance = 5*ONE_ATMOSPHERE
+	//pressure_resistance = 5*ONE_ATMOSPHERE
 	armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, FIRE = 0, ACID = 0)
 	max_integrity = 50
 	integrity_failure = 0.4
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index 0e8c5023747..c0f1886ee61 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -106,7 +106,7 @@
 	. = ..()
 	var/turf/local = get_turf(loc)
 	ADD_TRAIT(local, TRAIT_FIREDOOR_STOP, TRAIT_GENERIC)
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/holosign/barrier/atmos/block_superconductivity() //Didn't used to do this, but it's "normal", and will help ease heat flow transitions with the players.
 	return TRUE
@@ -114,7 +114,7 @@
 /obj/structure/holosign/barrier/atmos/Destroy()
 	var/turf/local = get_turf(loc)
 	REMOVE_TRAIT(local, TRAIT_FIREDOOR_STOP, TRAIT_GENERIC)
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	return ..()
 
 /obj/structure/holosign/barrier/cyborg
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 0f709dcd547..1f49ac6602a 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -33,11 +33,11 @@
 	var/obj/item/stack/initialized_mineral = new sheetType // Okay this kinda sucks.
 	set_custom_materials(initialized_mineral.mats_per_unit, sheetAmount)
 	qdel(initialized_mineral)
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/mineral_door/Destroy()
 	if(!door_opened)
-		air_update_turf(TRUE, FALSE)
+		//air_update_turf(TRUE, FALSE)
 	. = ..()
 
 /obj/structure/mineral_door/Move()
@@ -104,7 +104,7 @@
 	set_density(FALSE)
 	door_opened = TRUE
 	layer = OPEN_DOOR_LAYER
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	update_appearance()
 	isSwitchingStates = FALSE
 
@@ -125,7 +125,7 @@
 	set_opacity(TRUE)
 	door_opened = FALSE
 	layer = initial(layer)
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 	update_appearance()
 	isSwitchingStates = FALSE
 
@@ -144,7 +144,7 @@
 /obj/structure/mineral_door/set_anchored(anchorvalue) //called in default_unfasten_wrench() chain
 	. = ..()
 	set_opacity(anchored ? !door_opened : FALSE)
-	air_update_turf(TRUE, anchorvalue)
+	//air_update_turf(TRUE, anchorvalue)
 
 /obj/structure/mineral_door/wrench_act(mob/living/user, obj/item/tool)
 	. = ..()
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index 8604fd64825..7de6274d8e1 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -35,7 +35,7 @@
 		return TRUE
 	set_anchored(!anchored)
 	update_atmos_behaviour()
-	air_update_turf(TRUE)
+	//air_update_turf(TRUE)
 	to_chat(user, span_notice("You [uraction] the floor."))
 	return TRUE
 
@@ -113,10 +113,10 @@
 
 /obj/structure/plasticflaps/Initialize(mapload)
 	. = ..()
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/plasticflaps/Destroy()
 	var/atom/oldloc = loc
 	. = ..()
 	if (oldloc)
-		oldloc.air_update_turf(TRUE, FALSE)
+		oldloc.//air_update_turf(TRUE, FALSE)
diff --git a/code/game/objects/structures/tram_walls.dm b/code/game/objects/structures/tram_walls.dm
index bb077f16bac..cfbbec9591f 100644
--- a/code/game/objects/structures/tram_walls.dm
+++ b/code/game/objects/structures/tram_walls.dm
@@ -30,7 +30,7 @@
 	var/obj/item/stack/initialized_mineral = new mineral
 	set_custom_materials(initialized_mineral.mats_per_unit, mineral_amount)
 	qdel(initialized_mineral)
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/tramwall/attackby(obj/item/welder, mob/user, params)
 	if(welder.tool_behaviour == TOOL_WELDER)
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index 951e1acbee2..64eaf8362c0 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -170,7 +170,7 @@
 		return
 	var/datum/gas_mixture/floor_mixture = loc.return_air()
 	if(pod.air_contents.equalize(floor_mixture)) //equalize the pod's mix with the tile it's on
-		air_update_turf(FALSE, FALSE)
+		//air_update_turf(FALSE, FALSE)
 
 /obj/structure/transit_tube/station/init_tube_dirs()
 	switch(dir)
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 3852bc3267f..ef5b5541cd5 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -33,7 +33,7 @@
 	. = ..()
 	if(set_dir)
 		setDir(set_dir)
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 	var/static/list/loc_connections = list(
 		COMSIG_ATOM_EXIT = .proc/on_exit,
@@ -44,7 +44,7 @@
 
 /obj/structure/windoor_assembly/Destroy()
 	set_density(FALSE)
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	return ..()
 
 /obj/structure/windoor_assembly/Move()
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 4e4e0a2a010..6a787119060 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -4,7 +4,7 @@
 	icon_state = "window"
 	density = TRUE
 	layer = ABOVE_OBJ_LAYER //Just above doors
-	pressure_resistance = 4*ONE_ATMOSPHERE
+	//pressure_resistance = 4*ONE_ATMOSPHERE
 	anchored = TRUE //initially is 0 for tile smoothing
 	flags_1 = ON_BORDER_1
 	max_integrity = 25
@@ -58,7 +58,7 @@
 	if(reinf && anchored)
 		state = RWINDOW_SECURE
 
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 	if(fulltile)
 		setDir()
@@ -248,7 +248,7 @@
 
 /obj/structure/window/set_anchored(anchorvalue)
 	..()
-	air_update_turf(TRUE, anchorvalue)
+	//air_update_turf(TRUE, anchorvalue)
 	update_nearby_icons()
 
 /obj/structure/window/proc/check_state(checked_state)
@@ -313,7 +313,7 @@
 		. += new /obj/item/shard(location)
 
 /obj/structure/window/proc/AfterRotation(mob/user, degrees)
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 
 /obj/structure/window/proc/on_painted(obj/structure/window/source, is_dark_color)
 	SIGNAL_HANDLER
@@ -324,7 +324,7 @@
 
 /obj/structure/window/Destroy()
 	set_density(FALSE)
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	update_nearby_icons()
 	return ..()
 
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 5e93cc1cf66..32ee69b0d81 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -183,7 +183,7 @@
 
 /turf/open/TakeTemperature(temp)
 	air.temperature += temp
-	air_update_turf(FALSE, FALSE)
+	//air_update_turf(FALSE, FALSE)
 
 /turf/open/proc/freeze_turf()
 	for(var/obj/I in contents)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 36d5d42f270..e4f54355ada 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -127,8 +127,10 @@ GLOBAL_LIST_EMPTY(station_turfs)
 	if(our_area.area_has_base_lighting && always_lit) //Only provide your own lighting if the area doesn't for you
 		add_overlay(GLOB.fullbright_overlay)
 
+	/*
 	if(requires_activation)
 		CALCULATE_ADJACENT_TURFS(src, KILL_EXCITED)
+	*/
 
 	if (light_power && light_range)
 		update_light()
@@ -158,9 +160,10 @@ GLOBAL_LIST_EMPTY(station_turfs)
 
 	return INITIALIZE_HINT_NORMAL
 
+/*
 /turf/proc/Initalize_Atmos(times_fired)
 	CALCULATE_ADJACENT_TURFS(src, NORMAL_TURF)
-
+*/
 /turf/Destroy(force)
 	. = QDEL_HINT_IWILLGC
 	if(!changing_turf)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 3c7d27283ac..7055901b8d3 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -604,7 +604,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
 	set category = "Debug"
 	if(!check_rights(R_DEBUG))
 		return
-	SSair.ui_interact(mob)
+	//SSair.ui_interact(mob)
 
 /client/proc/reload_cards()
 	set name = "Reload Cards"
diff --git a/code/modules/antagonists/abductor/equipment/glands/plasma.dm b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
index 9dc1cc0f9c7..07bfd96d02e 100644
--- a/code/modules/antagonists/abductor/equipment/glands/plasma.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
@@ -16,7 +16,7 @@
 	if(!owner)
 		return
 	owner.visible_message(span_danger("[owner] vomits a cloud of plasma!"))
-	var/turf/open/T = get_turf(owner)
+	var/turf/simulated/open/T = get_turf(owner)
 	if(istype(T))
-		T.atmos_spawn_air("plasma=50;TEMP=[T20C]")
+		T.atmos_spawn_air(GAS_PLASMA, 20, T20C)
 	owner.vomit()
diff --git a/code/modules/antagonists/blob/blob_mobs.dm b/code/modules/antagonists/blob/blob_mobs.dm
index 4a6aaecda03..66c27170f30 100644
--- a/code/modules/antagonists/blob/blob_mobs.dm
+++ b/code/modules/antagonists/blob/blob_mobs.dm
@@ -282,7 +282,7 @@
 	verb_exclaim = "roars"
 	verb_yell = "bellows"
 	force_threshold = 10
-	pressure_resistance = 50
+	//pressure_resistance = 50
 	mob_size = MOB_SIZE_LARGE
 	hud_type = /datum/hud/living/blobbernaut
 
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 818d0261a40..7734c3c363d 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -42,7 +42,7 @@
 	setDir(pick(GLOB.cardinals))
 	update_appearance()
 	if(atmosblock)
-		air_update_turf(TRUE, TRUE)
+		//air_update_turf(TRUE, TRUE)
 	ConsumeTile()
 	if(!QDELETED(src)) //Consuming our tile can in rare cases cause us to del
 		AddElement(/datum/element/swabable, CELL_LINE_TABLE_BLOB, CELL_VIRUS_TABLE_GENERIC, 2, 2)
@@ -69,7 +69,7 @@
 /obj/structure/blob/Destroy()
 	if(atmosblock)
 		atmosblock = FALSE
-		air_update_turf(TRUE, FALSE)
+		//air_update_turf(TRUE, FALSE)
 	if(overmind)
 		overmind.all_blobs -= src
 		overmind.blobs_legit -= src  //if it was in the legit blobs list, it isn't now
diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm
index d086050210c..a329a247081 100644
--- a/code/modules/antagonists/blob/structures/shield.dm
+++ b/code/modules/antagonists/blob/structures/shield.dm
@@ -32,7 +32,7 @@
 	. = ..()
 	if(. && atom_integrity > 0)
 		atmosblock = atom_integrity < (max_integrity * 0.5)
-		air_update_turf(TRUE, atmosblock)
+		//air_update_turf(TRUE, atmosblock)
 
 /obj/structure/blob/shield/update_icon_state()
 	icon_state = "[initial(icon_state)][(atom_integrity < (max_integrity * 0.5)) ? "_damaged" : null]"
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 49020e27a64..35fb5c34620 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -2,67 +2,91 @@
 Contains helper procs for airflow, handled in /connection_group.
 */
 
-mob/var/tmp/last_airflow_stun = 0
-mob/proc/airflow_stun()
+/mob/var/tmp/last_airflow_stun = 0
+/mob/proc/airflow_stun()
+	return
+/mob/living/airflow_stun()
 	if(stat == 2)
 		return 0
-	if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown)	return 0
+	if(last_airflow_stun > world.time - SSzas.settings.airflow_stun_cooldown)	return 0
 
-	if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
+	if(!(status_flags & CANSTUN) && !(status_flags & CANKNOCKDOWN))
 		to_chat(src, "<span class='notice'>You stay upright as the air rushes past you.</span>")
 		return 0
 	if(buckled)
 		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
 		return 0
-	if(!lying)
+	if(!body_position == LYING_DOWN)
 		to_chat(src, "<span class='warning'>The sudden rush of air knocks you over!</span>")
-	Weaken(5)
+
+	slip(5, null, GALOSHES_DONT_HELP|SLIDE, 0, TRUE)
 	last_airflow_stun = world.time
 
-mob/living/silicon/airflow_stun()
+/mob/living/silicon/airflow_stun()
 	return
 
-mob/living/carbon/slime/airflow_stun()
+/mob/living/carbon/slime/airflow_stun()
 	return
 
-mob/living/carbon/human/airflow_stun()
+/mob/living/carbon/human/airflow_stun()
 	if(!slip_chance())
 		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
 		return 0
 	..()
 
-atom/movable/proc/check_airflow_movable(n)
+/mob/proc/slip_chance()
+	return
+
+/mob/living/carbon/human/slip_chance(prob_slip = 10)
+	if(stat)
+		return FALSE
+	if(buckled)
+		return FALSE
+	if(shoes)
+		var/obj/item/clothing/shoes = shoes
+		if(shoes.clothing_flags & NOSLIP|NOSLIP_ICE)
+			return FALSE
+
+	if(m_intent == MOVE_INTENT_RUN) //No running in the halls!
+		prob_slip *= 2
+
+	if(HAS_TRAIT(src, TRAIT_NOSLIPALL))
+		return
+	return prob_slip
+
+/atom/movable/proc/check_airflow_movable(n)
 
 	if(anchored && !ismob(src)) return 0
 
-	if(!isobj(src) && n < vsc.airflow_dense_pressure) return 0
+	if(!isobj(src) && n < SSzas.settings.airflow_dense_pressure) return 0
 
 	return 1
 
-mob/check_airflow_movable(n)
-	if(n < vsc.airflow_heavy_pressure)
+/mob/check_airflow_movable(n)
+	if(n < SSzas.settings.airflow_heavy_pressure)
 		return 0
 	return 1
 
-mob/living/silicon/check_airflow_movable()
+/mob/living/silicon/check_airflow_movable()
 	return 0
 
+/obj/check_airflow_movable(n)
+	if(n < SSzas.settings.airflow_dense_pressure) return 0
 
-obj/check_airflow_movable(n)
-	if(isnull(w_class))
-		if(n < vsc.airflow_dense_pressure) return 0 //most non-item objs don't have a w_class yet
-	else
-		switch(w_class)
-			if(1,2)
-				if(n < vsc.airflow_lightest_pressure) return 0
-			if(3)
-				if(n < vsc.airflow_light_pressure) return 0
-			if(4,5)
-				if(n < vsc.airflow_medium_pressure) return 0
-			if(6)
-				if(n < vsc.airflow_heavy_pressure) return 0
-			if(7 to INFINITY)
-				if(n < vsc.airflow_dense_pressure) return 0
+	return ..()
+
+/obj/item/check_airflow_movable(n)
+	switch(w_class)
+		if(1,2)
+			if(n < SSzas.settings.airflow_lightest_pressure) return 0
+		if(3)
+			if(n < SSzas.settings.airflow_light_pressure) return 0
+		if(4,5)
+			if(n < SSzas.settings.airflow_medium_pressure) return 0
+		if(6)
+			if(n < SSzas.settings.airflow_heavy_pressure) return 0
+		if(7 to INFINITY)
+			if(n < SSzas.settings.airflow_dense_pressure) return 0
 	return ..()
 
 
@@ -80,8 +104,8 @@ obj/check_airflow_movable(n)
 		return 0
 	if(buckled)
 		return 0
-	var/obj/item/shoes = get_equipped_item(slot_shoes)
-	if(istype(shoes) && (shoes.item_flags & ITEM_FLAG_NOSLIP))
+	var/obj/item/clothing/shoes = get_item_by_slot(ITEM_SLOT_FEET)
+	if(istype(shoes) && (shoes.clothing_flags & NOSLIP))
 		return 0
 	return 1
 
@@ -98,52 +122,55 @@ obj/check_airflow_movable(n)
 		airborne_acceleration = 0
 		. = ..()
 
-atom/movable/proc/airflow_hit(atom/A)
+/atom/movable/proc/airflow_hit(atom/A)
 	airflow_speed = 0
 	airflow_dest = null
 	airborne_acceleration = 0
 
-mob/airflow_hit(atom/A)
+/mob/airflow_hit(atom/A)
 	for(var/mob/M in hearers(src))
 		M.show_message("<span class='danger'>\The [src] slams into \a [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
 	playsound(src.loc, "smash.ogg", 25, 1, -1)
 	var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh
-	Weaken(weak_amt)
 	. = ..()
 
-obj/airflow_hit(atom/A)
+/mob/living/airflow_hit(atom/A)
+	var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh
+	Knockdown(weak_amt)
+	return ..()
+
+/obj/airflow_hit(atom/A)
 	for(var/mob/M in hearers(src))
 		M.show_message("<span class='danger'>\The [src] slams into \a [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
 	playsound(src.loc, "smash.ogg", 25, 1, -1)
 	. = ..()
 
-obj/item/airflow_hit(atom/A)
+/obj/item/airflow_hit(atom/A)
 	airflow_speed = 0
 	airflow_dest = null
 
-mob/living/carbon/human/airflow_hit(atom/A)
-//	for(var/mob/M in hearers(src))
-//		M.show_message("<span class='danger'>[src] slams into [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
+/mob/living/carbon/human/airflow_hit(atom/A)
+	for(var/mob/M in hearers(src))
+		M.show_message("<span class='danger'>[src] slams into [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
 	playsound(src.loc, "punch", 25, 1, -1)
 	if (prob(33))
-		loc:add_blood(src)
-		bloody_body(src)
-	var/b_loss = min(airflow_speed, (airborne_acceleration*2)) * vsc.airflow_damage
+		var/obj/effect/decal/cleanable/blood/new_splatter = new(loc)
+
+	var/b_loss = min(airflow_speed, (airborne_acceleration*2)) * SSzas.settings.airflow_damage
 
-	apply_damage(b_loss/3, BRUTE, BP_HEAD, used_weapon = "Airflow")
+	apply_damage(b_loss/3, BRUTE, BODY_ZONE_HEAD)
 
-	apply_damage(b_loss/3, BRUTE, BP_CHEST, used_weapon =  "Airflow")
+	apply_damage(b_loss/3, BRUTE, BODY_ZONE_CHEST)
 
-	apply_damage(b_loss/3, BRUTE, BP_GROIN, used_weapon =  "Airflow")
 
 	if(airflow_speed > 10)
-		Paralyse(round(airflow_speed * vsc.airflow_stun))
-		Stun(paralysis + 3)
+		Paralyze(round(airflow_speed * SSzas.settings.airflow_stun))
+		Stun(round(airflow_speed * SSzas.settings.airflow_stun) + 3)
 	else
-		Stun(round(airflow_speed * vsc.airflow_stun/2))
-	. = ..()
+		Stun(round(airflow_speed * SSzas.settings.airflow_stun/2))
+	return ..()
 
-zone/proc/movables()
+/zone/proc/movables()
 	. = list()
 	for(var/turf/T in contents)
 		for(var/atom/movable/A in T)
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index fdf263052e7..1f4b9cf7beb 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -1,36 +1,21 @@
-
-/atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
-	//Purpose: Determines if the object (or airflow) can pass this atom.
-	//Called by: Movement, airflow.
-	//Inputs: The moving atom (optional), target turf, "height" and air group
-	//Outputs: Boolean if can pass.
-
-	return (!density || !height || air_group)
-
 /turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0)
-	if(!target) return 0
+	if(target.blocks_air||blocks_air)
+		return 0
 
-	if(istype(mover)) // turf/Enter(...) will perform more advanced checks
-		return !density
-
-	else // Now, doing more detailed checks for air movement and air group formation
-		if(target.blocks_air||blocks_air)
+	for(var/obj/obstacle in src)
+		if(!obstacle.CanPass(mover, target, height, air_group))
 			return 0
-
-		for(var/obj/obstacle in src)
-			if(!obstacle.CanPass(mover, target, height, air_group))
+	if(target != src)
+		for(var/obj/obstacle in target)
+			if(!obstacle.CanPass(mover, src, height, air_group))
 				return 0
-		if(target != src)
-			for(var/obj/obstacle in target)
-				if(!obstacle.CanPass(mover, src, height, air_group))
-					return 0
 
-		return 1
+	return ..()
 
 //Convenience function for atoms to update turfs they occupy
 /atom/movable/proc/update_nearby_tiles(need_rebuild)
 	for(var/turf/simulated/turf in locs)
-		SSair.mark_for_update(turf)
+		SSzas.mark_for_update(turf)
 
 	return 1
 
@@ -40,14 +25,14 @@
 // AIR_BLOCKED - Blocked
 // ZONE_BLOCKED - Not blocked, but zone boundaries will not cross.
 // BLOCKED - Blocked, zone boundaries will not cross even if opened.
-atom/proc/c_airblock(turf/other)
+/atom/proc/c_airblock(turf/other)
 	#ifdef ZASDBG
 	ASSERT(isturf(other))
 	#endif
 	return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1))
 
 // This is a legacy proc only here for compatibility - you probably should just use ATMOS_CANPASS_TURF directly.
-turf/c_airblock(turf/other)
+/turf/c_airblock(turf/other)
 	#ifdef ZASDBG
 	ASSERT(isturf(other))
 	#endif
@@ -55,5 +40,12 @@ turf/c_airblock(turf/other)
 	. = 0
 	ATMOS_CANPASS_TURF(., src, other)
 
-/atom/movable
-	var/atmos_canpass = CANPASS_ALWAYS
+/atom/proc/zas_mark_update()
+	var/turf/local_turf = get_turf(loc)
+	if(!local_turf)
+		return
+	SSzas.mark_for_update(local_turf)
+
+/atom
+	var/simulated = TRUE
+	var/can_atmos_pass = ATMOS_PASS_YES
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 17c8ea16281..c7f33a0aaaf 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -5,7 +5,7 @@
 /*
 
 Overview:
-	Connections are made between turfs by SSair.connect(). They represent a single point where two zones converge.
+	Connections are made between turfs by SSzas.connect(). They represent a single point where two zones converge.
 
 Class Vars:
 	A - Always a simulated turf.
@@ -60,19 +60,19 @@ Class Procs:
 
 /connection/New(turf/simulated/A, turf/simulated/B)
 	#ifdef ZASDBG
-	ASSERT(SSair.has_valid_zone(A))
-	//ASSERT(SSair.has_valid_zone(B))
+	ASSERT(SSzas.has_valid_zone(A))
+	//ASSERT(SSzas.has_valid_zone(B))
 	#endif
 	src.A = A
 	src.B = B
 	zoneA = A.zone
 	if(!istype(B))
 		mark_space()
-		edge = SSair.get_edge(A.zone,B)
+		edge = SSzas.get_edge(A.zone,B)
 		edge.add_connection(src)
 	else
 		zoneB = B.zone
-		edge = SSair.get_edge(A.zone,B.zone)
+		edge = SSzas.get_edge(A.zone,B.zone)
 		edge.add_connection(src)
 
 /connection/proc/mark_direct()
@@ -108,7 +108,7 @@ Class Procs:
 		erase()
 		return
 
-	var/block_status = SSair.air_blocked(A,B)
+	var/block_status = SSzas.air_blocked(A,B)
 	if(block_status & AIR_BLOCKED)
 //		log_debug("Blocked connection.")
 		erase()
@@ -133,7 +133,7 @@ Class Procs:
 				return
 			else
 				edge.remove_connection(src)
-				edge = SSair.get_edge(A.zone, B)
+				edge = SSzas.get_edge(A.zone, B)
 				edge.add_connection(src)
 				zoneA = A.zone
 
@@ -155,7 +155,7 @@ Class Procs:
 //		log_debug("Zones changed, \...")
 		if(A.zone && B.zone)
 			edge.remove_connection(src)
-			edge = SSair.get_edge(A.zone, B.zone)
+			edge = SSzas.get_edge(A.zone, B.zone)
 			edge.add_connection(src)
 			zoneA = A.zone
 			zoneB = B.zone
@@ -165,4 +165,4 @@ Class Procs:
 			return
 
 
-//	log_debug("valid.")
\ No newline at end of file
+//	log_debug("valid.")
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 17249aae155..caafd283649 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -2,7 +2,7 @@
 
 Overview:
 	These are what handle gas transfers between zones and into space.
-	They are found in a zone's edges list and in SSair.edges.
+	They are found in a zone's edges list and in SSzas.edges.
 	Each edge updates every air tick due to their role in gas transfer.
 	They come in two flavors, /connection_edge/zone and /connection_edge/unsimulated.
 	As the type names might suggest, they handle inter-zone and spacelike connections respectively.
@@ -49,7 +49,7 @@ Class Procs:
 	flow(list/movable, differential, repelled)
 		Airflow proc causing all objects in movable to be checked against a pressure differential.
 		If repelled is true, the objects move away from any turf in connecting_turfs, otherwise they approach.
-		A check against vsc.lightest_airflow_pressure should generally be performed before calling this.
+		A check against SSzas.settings.lightest_airflow_pressure should generally be performed before calling this.
 
 	get_connected_zone(zone/from)
 		Helper proc that allows getting the other zone of an edge given one of them.
@@ -86,7 +86,7 @@ Class Procs:
 /connection_edge/proc/contains_zone(zone/Z)
 
 /connection_edge/proc/erase()
-	SSair.remove_edge(src)
+	SSzas.remove_edge(src)
 //	log_debug("[type] Erased.")
 
 
@@ -99,11 +99,11 @@ Class Procs:
 		var/atom/movable/M = movable[i]
 
 		//If they're already being tossed, don't do it again.
-		if(M.last_airflow > world.time - vsc.airflow_delay) continue
+		if(M.last_airflow > world.time - SSzas.settings.airflow_delay) continue
 		if(M.airflow_speed) continue
 
 		//Check for knocking people over
-		if(ismob(M) && differential > vsc.airflow_stun_pressure)
+		if(ismob(M) && differential > SSzas.settings.airflow_stun_pressure)
 			if(M:status_flags & GODMODE) continue
 			M:airflow_stun()
 
@@ -158,7 +158,7 @@ Class Procs:
 	var/equiv = A.air.share_ratio(B.air, coefficient)
 
 	var/differential = A.air.return_pressure() - B.air.return_pressure()
-	if(abs(differential) >= vsc.airflow_lightest_pressure)
+	if(abs(differential) >= SSzas.settings.airflow_lightest_pressure)
 		var/list/attracted
 		var/list/repelled
 		if(differential > 0)
@@ -174,19 +174,19 @@ Class Procs:
 	if(equiv)
 		if(direct)
 			erase()
-			SSair.merge(A, B)
+			SSzas.merge(A, B)
 			return
 		else
 			A.air.equalize(B.air)
-			SSair.mark_edge_sleeping(src)
+			SSzas.mark_edge_sleeping(src)
 
-	SSair.mark_zone_update(A)
-	SSair.mark_zone_update(B)
+	SSzas.mark_zone_update(A)
+	SSzas.mark_zone_update(B)
 
 /connection_edge/zone/recheck()
 	if(!A.air.compare(B.air, vacuum_exception = 1))
 	// Edges with only one side being vacuum need processing no matter how close.
-		SSair.mark_edge_active(src)
+		SSzas.mark_edge_active(src)
 
 //Helper proc to get connections for a zone.
 /connection_edge/zone/proc/get_connected_zone(zone/from)
@@ -230,24 +230,24 @@ Class Procs:
 	var/equiv = A.air.share_space(air)
 
 	var/differential = A.air.return_pressure() - air.return_pressure()
-	if(abs(differential) >= vsc.airflow_lightest_pressure)
+	if(abs(differential) >= SSzas.settings.airflow_lightest_pressure)
 		var/list/attracted = A.movables()
 		flow(attracted, abs(differential), differential < 0)
 
 	if(equiv)
 		A.air.copy_from(air)
-		SSair.mark_edge_sleeping(src)
+		SSzas.mark_edge_sleeping(src)
 
-	SSair.mark_zone_update(A)
+	SSzas.mark_zone_update(A)
 
 /connection_edge/unsimulated/recheck()
 	// Edges with only one side being vacuum need processing no matter how close.
 	// Note: This handles the glaring flaw of a room holding pressure while exposed to space, but
 	// does not specially handle the less common case of a simulated room exposed to an unsimulated pressurized turf.
 	if(!A.air.compare(air, vacuum_exception = 1))
-		SSair.mark_edge_active(src)
+		SSzas.mark_edge_active(src)
 
-proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
+/proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
 	//This implements a simplistic version of the Stefan-Boltzmann law.
 	var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5
 	var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier))
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index 6f0a67fd3eb..0022e12c3ed 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -16,5 +16,5 @@ var/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark")
 	overlays += img
 	dbg_img = img
 
-proc/soft_assert(thing,fail)
-	if(!thing) message_admins(fail)
\ No newline at end of file
+/proc/soft_assert(thing,fail)
+	if(!thing) message_admins(fail)
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 4433dfefdd8..40e89108b7d 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -1,4 +1,4 @@
-client/proc/Zone_Info(turf/T as null|turf)
+/client/proc/Zone_Info(turf/T as null|turf)
 	set category = "Debug"
 	if(T)
 		if(istype(T,/turf/simulated) && T:zone)
@@ -15,9 +15,9 @@ client/proc/Zone_Info(turf/T as null|turf)
 				images -= zone_debug_images[zone]
 			zone_debug_images = null
 
-client/var/list/zone_debug_images
+/client/var/list/zone_debug_images
 
-client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
+/client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
 	set category = "Debug"
 	if(!istype(T))
 		return
@@ -76,7 +76,9 @@ client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
 		else
 			to_chat(mob, "both turfs can merge.")
 
-client/proc/ZASSettings()
+/*
+/client/proc/ZASSettings()
 	set category = "Debug"
 
-	vsc.SetDefault(mob)
+	SSzas.settings.SetDefault(mob)
+*/
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 477714c2c76..5f539ba0d12 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -11,7 +11,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /turf/var/obj/fire/fire = null
 
 //Some legacy definitions so fires can be started.
-atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
 	return null
 
 /atom/movable/proc/is_burnable()
@@ -20,7 +20,7 @@ atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed
 /mob/is_burnable()
 	return simulated
 
-turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
+/turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 
 
 /turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
@@ -42,7 +42,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 	return igniting
 
 /zone/proc/process_fire()
-	var/datum/gas_mixture/burn_gas = air.remove_ratio(vsc.fire_consuption_rate, fire_tiles.len)
+	var/datum/gas_mixture/burn_gas = air.remove_ratio(SSzas.settings.fire_consuption_rate, fire_tiles.len)
 
 	var/firelevel = burn_gas.react(src, fire_tiles, force_burn = 1, no_check = 1)
 
@@ -64,7 +64,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 		fuel_objs.Cut()
 
 	if(!fire_tiles.len)
-		SSair.active_fire_zones.Remove(src)
+		SSzas.active_fire_zones.Remove(src)
 
 /zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0)
 	if(!fuel_objs.len)
@@ -105,7 +105,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 		return 1
 
 	fire = new(src, fl)
-	SSair.active_fire_zones |= zone
+	SSzas.active_fire_zones |= zone
 
 	var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src
 	zone.fire_tiles |= src
@@ -158,7 +158,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 		A.fire_act(air_contents, air_contents.temperature, air_contents.volume)
 
 	//spread
-	for(var/direction in GLOB.cardinal)
+	for(var/direction in GLOB.cardinals)
 		var/turf/simulated/enemy_tile = get_step(my_tile, direction)
 
 		if(istype(enemy_tile))
@@ -179,7 +179,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 					continue
 
 				//Spread the fire.
-				if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0))
+				if(prob( 50 + 50 * (firelevel/SSzas.settings.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0))
 					enemy_tile.create_fire(firelevel)
 
 			else
@@ -195,17 +195,17 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 		qdel(src)
 		return
 
-	set_dir(pick(GLOB.cardinal))
+	setDir(pick(GLOB.cardinal))
 
 	var/datum/gas_mixture/air_contents = loc.return_air()
 	color = fire_color(air_contents.temperature)
 	set_light(0.5, 1, 3, l_color = color)
 
 	firelevel = fl
-	SSair.active_hotspots.Add(src)
+	SSzas.active_hotspots.Add(src)
 
 /obj/fire/proc/fire_color(var/env_temperature)
-	var/temperature = max(4000*sqrt(firelevel/vsc.fire_firelevel_multiplier), env_temperature)
+	var/temperature = max(4000*sqrt(firelevel/SSzas.settings.fire_firelevel_multiplier), env_temperature)
 	return heat2color(temperature)
 
 /obj/fire/Destroy()
@@ -213,7 +213,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 	if (istype(T))
 		set_light(0)
 		T.fire = null
-	SSair.active_hotspots.Remove(src)
+	SSzas.active_hotspots.Remove(src)
 	. = ..()
 
 /turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again.
@@ -238,9 +238,9 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 
 		//*** Get the fuel and oxidizer amounts
 		for(var/g in gas)
-			if(gas_data.flags[g] & XGM_GAS_FUEL)
+			if(SSzas.gas_data.flags[g] & XGM_GAS_FUEL)
 				gas_fuel += gas[g]
-			if(gas_data.flags[g] & XGM_GAS_OXIDIZER)
+			if(SSzas.gas_data.flags[g] & XGM_GAS_OXIDIZER)
 				total_oxidizers += gas[g]
 		gas_fuel *= group_multiplier
 		total_oxidizers *= group_multiplier
@@ -266,12 +266,12 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 		var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit
 
 		//vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).)
-		var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume*group_multiplier) / vsc.fire_firelevel_multiplier
+		var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume*group_multiplier) / SSzas.settings.fire_firelevel_multiplier
 		var/min_burn = 0.30*volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast
 		var/gas_reaction_progress = min(max(min_burn, gas_firelevel*gas_fuel)*FIRE_GAS_BURNRATE_MULT, gas_fuel)
 
 		//liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area.
-		var/liquid_firelevel = calculate_firelevel(liquid_fuel, total_oxidizers, reaction_limit, 0) / vsc.fire_firelevel_multiplier
+		var/liquid_firelevel = calculate_firelevel(liquid_fuel, total_oxidizers, reaction_limit, 0) / SSzas.settings.fire_firelevel_multiplier
 		var/liquid_reaction_progress = min((liquid_firelevel*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT, liquid_fuel)
 
 		var/firelevel = (gas_fuel*gas_firelevel + liquid_fuel*liquid_firelevel)/total_fuel
@@ -306,13 +306,13 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 		remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
 		var/datum/gas_mixture/burned_fuel = remove_by_flag(XGM_GAS_FUEL, used_gas_fuel)
 		for(var/g in burned_fuel.gas)
-			adjust_gas(gas_data.burn_product[g], burned_fuel.gas[g])
+			adjust_gas(SSzas.gas_data.burn_product[g], burned_fuel.gas[g])
 
 		if(zone)
 			zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())
 
 		//calculate the energy produced by the reaction and then set the new temperature of the mix
-		temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
+		temperature = (starting_energy + SSzas.settings.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
 		update_values()
 
 		#ifdef FIREDBG
@@ -325,10 +325,10 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 
 		return firelevel
 
-datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
+/datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
 	. = 0
 	for(var/g in gas)
-		if(gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1)
+		if(SSzas.gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1)
 			. = 1
 			break
 
@@ -340,14 +340,14 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
 
 	. = 0
 	for(var/g in gas)
-		if(gas_data.flags[g] & XGM_GAS_FUEL && gas[g] >= 0.1)
+		if(SSzas.gas_data.flags[g] & XGM_GAS_FUEL && gas[g] >= 0.1)
 			. = 1
 			break
 
 /datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid=null)
 	. = 0
 	for(var/g in gas)
-		if(gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1)
+		if(SSzas.gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
 			. = 1
 			break
 
@@ -359,11 +359,11 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
 
 	. = 0
 	for(var/g in gas)
-		if(gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1)
+		if(SSzas.gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
 			. = 1
 			break
 
-//returns a value between 0 and vsc.fire_firelevel_multiplier
+//returns a value between 0 and SSzas.settings.fire_firelevel_multiplier
 /datum/gas_mixture/proc/calculate_firelevel(total_fuel, total_oxidizers, reaction_limit, gas_volume)
 	//Calculates the firelevel based on one equation instead of having to do this multiple times in different areas.
 	var/firelevel = 0
@@ -388,13 +388,13 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
 		#endif
 
 		//toss everything together -- should produce a value between 0 and fire_firelevel_multiplier
-		firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * damping_multiplier
+		firelevel = SSzas.settings.fire_firelevel_multiplier * mix_multiplier * damping_multiplier
 
 	return max( 0, firelevel)
 
 
 /mob/living/proc/FireBurn(var/firelevel, var/last_temperature, var/pressure)
-	var/mx = 5 * firelevel/vsc.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
+	var/mx = 5 * firelevel/SSzas.settings.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
 	apply_damage(2.5*mx, BURN)
 	return mx
 
@@ -411,33 +411,27 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
 
 	//Get heat transfer coefficients for clothing.
 
-	for(var/obj/item/clothing/C in src)
-		if(l_hand == C || r_hand == C)
-			continue
-
+	for(var/obj/item/clothing/C in get_equipped_items())
 		if( C.max_heat_protection_temperature >= last_temperature )
 			if(C.body_parts_covered & HEAD)
 				head_exposure = 0
-			if(C.body_parts_covered & UPPER_TORSO)
+			if(C.body_parts_covered & CHEST)
 				chest_exposure = 0
-			if(C.body_parts_covered & LOWER_TORSO)
-				groin_exposure = 0
 			if(C.body_parts_covered & LEGS)
 				legs_exposure = 0
 			if(C.body_parts_covered & ARMS)
 				arms_exposure = 0
 	//minimize this for low-pressure environments
-	var/mx = 5 * firelevel/vsc.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
+	var/mx = 5 * firelevel/SSzas.settings.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
 
 	//Always check these damage procs first if fire damage isn't working. They're probably what's wrong.
 
-	apply_damage(0.9*mx*head_exposure,  BURN, BP_HEAD,  used_weapon =  "Fire")
-	apply_damage(2.5*mx*chest_exposure, BURN, BP_CHEST, used_weapon =  "Fire")
-	apply_damage(2.0*mx*groin_exposure, BURN, BP_GROIN, used_weapon =  "Fire")
-	apply_damage(0.6*mx*legs_exposure,  BURN, BP_L_LEG, used_weapon =  "Fire")
-	apply_damage(0.6*mx*legs_exposure,  BURN, BP_R_LEG, used_weapon =  "Fire")
-	apply_damage(0.4*mx*arms_exposure,  BURN, BP_L_ARM, used_weapon =  "Fire")
-	apply_damage(0.4*mx*arms_exposure,  BURN, BP_R_ARM, used_weapon =  "Fire")
+	apply_damage(0.9*mx*head_exposure,  BURN, BODY_ZONE_HEAD,  used_weapon =  "Fire")
+	apply_damage(2.5*mx*chest_exposure, BURN, BODY_ZONE_CHEST, used_weapon =  "Fire")
+	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_L_LEG, used_weapon =  "Fire")
+	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_R_LEG, used_weapon =  "Fire")
+	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_L_ARM, used_weapon =  "Fire")
+	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_R_ARM, used_weapon =  "Fire")
 
 	//return a truthy value of whether burning actually happened
 	return mx * (head_exposure + chest_exposure + groin_exposure + legs_exposure + arms_exposure)
diff --git a/code/modules/atmospherics/ZAS/Plasma.dm b/code/modules/atmospherics/ZAS/Plasma.dm
index e9543deb18d..a12977966c0 100644
--- a/code/modules/atmospherics/ZAS/Plasma.dm
+++ b/code/modules/atmospherics/ZAS/Plasma.dm
@@ -1,6 +1,6 @@
 GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contamination.dmi'))
 
-/pl_control
+/datum/pl_control
 	var/plasma_dmg = 3
 	var/plasma_dmg_name = "Plasma Damage Amount"
 	var/plasma_dmg_desc = "Self Descriptive"
@@ -91,7 +91,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat
 	//Burn skin if exposed.
 	if(SSzas.settings.plc.skin_burns)
 		if(!pl_head_protected() || !pl_suit_protected())
-			burn_skin(0.75)
+			//burn_skin(0.75)
 			if(prob(20))
 				to_chat(src, "<span class='danger'>Your skin burns!</span>")
 			updatehealth()
@@ -126,7 +126,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat
 	//Checks if the head is adequately sealed.
 	if(head)
 		if(SSzas.settings.plc.plasmaguard_only)
-			if(head.item_flags & PLASMAGUARD)
+			if(head.obj_flags & PLASMAGUARD)
 				return TRUE
 		else if(is_eyes_covered())
 			return TRUE
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 7166223f43c..a1229d928c8 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -1,8 +1,12 @@
-/turf/simulated/var/zone/zone
-/turf/simulated/var/open_directions
+/turf/simulated
+	var/zone/zone
+	var/open_directions
 
-/turf/var/needs_air_update = 0
-/turf/var/datum/gas_mixture/air
+/turf
+	var/needs_air_update = 0
+	var/datum/gas_mixture/air
+	var/list/initial_gas
+	var/heat_capacity = 1
 
 /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
 	if(graphic_add && graphic_add.len)
@@ -43,7 +47,7 @@
 
 			var/turf/simulated/sim = unsim
 			if(TURF_HAS_VALID_ZONE(sim))
-				SSair.connect(sim, src)
+				SSzas.connect(sim, src)
 
 // Helper for can_safely_remove_from_zone().
 #define GET_ZONE_NEIGHBOURS(T, ret) \
@@ -199,7 +203,7 @@
 					if(verbose) log_debug("Connecting to [sim.zone]")
 					#endif
 
-					SSair.connect(src, sim)
+					SSzas.connect(src, sim)
 
 
 			#ifdef ZASDBG
@@ -227,7 +231,7 @@
 	//At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug.
 
 	for(var/turf/T in postponed)
-		SSair.connect(src, T)
+		SSzas.connect(src, T)
 
 /turf/proc/post_update_air_properties()
 	if(connections) connections.update_all()
@@ -270,7 +274,7 @@
 /turf/simulated/return_air()
 	if(zone)
 		if(!zone.invalid)
-			SSair.mark_zone_update(zone)
+			SSzas.mark_zone_update(zone)
 			return zone.air
 		else
 			if(!air)
@@ -293,3 +297,27 @@
 	if(!air) air = new/datum/gas_mixture
 	air.copy_from(zone.air)
 	air.group_multiplier = 1
+
+/turf/simulated/atmos_spawn_air(gas_id, amount, initial_temperature)
+	var/datum/gas_mixture/new_gas = new
+	var/datum/gas_mixture/existing_gas = return_air()
+
+	new_gas.adjust_gas_temp(gas_id, amount, initial_temperature)
+	existing_gas.merge(new_gas)
+
+/proc/turf_contains_dense_objects(var/turf/T)
+	return T.contains_dense_objects()
+
+/turf/proc/contains_dense_objects()
+	if(density)
+		return 1
+	for(var/atom/movable/A as anything in src)
+		if(A.density && !(A.atom_flags & ON_BORDER_1))
+			return 1
+	return 0
+
+/turf/proc/TryGetNonDenseNeighbour()
+  for(var/d in GLOB.cardinals)
+    var/turf/T = get_step(src, d)
+    if (T && !turf_contains_dense_objects(T))
+      return T
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index dc504b2f7dd..508cec715f6 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -74,8 +74,8 @@
 			SSzas.gas_data.condensation_points[gas.id] = gas.condensation_point
 			SSzas.gas_data.condensation_products[gas.id] = gas.condensation_product
 
-		gas_data.breathed_product[gas.id] = gas.breathed_product
-		gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex
+		SSzas.gas_data.breathed_product[gas.id] = gas.breathed_product
+		SSzas.gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex
 
 	return 1
 
@@ -85,7 +85,7 @@
 	icon = 'icons/effects/tile_effects.dmi'
 	icon_state = "generic"
 	layer = FIRE_LAYER
-	appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR
+	appearance_flags = RESET_COLOR|PIXEL_SCALE|TILE_BOUND
 	mouse_opacity = 0
 	var/gas_id
 
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
new file mode 100644
index 00000000000..af3a25a5f84
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -0,0 +1,241 @@
+/datum/xgm_gas/oxygen
+	id = GAS_OXYGEN
+	name = "Oxygen"
+	specific_heat = 20	// J/(mol*K)
+	molar_mass = 0.032	// kg/mol
+	flags = XGM_GAS_OXIDIZER | XGM_GAS_FUSION_FUEL
+	breathed_product = /datum/reagent/oxygen
+	symbol_html = "O<sub>2</sub>"
+	symbol = "O2"
+
+
+/datum/xgm_gas/nitrogen
+	id = GAS_NITROGEN
+	name = "Nitrogen"
+	specific_heat = 20	// J/(mol*K)
+	molar_mass = 0.028	// kg/mol
+	symbol_html = "N<sub>2</sub>"
+	symbol = "N2"
+
+/datum/xgm_gas/carbon_dioxide
+	id = GAS_CO2
+	name = "Carbon Dioxide"
+	specific_heat = 30	// J/(mol*K)
+	molar_mass = 0.044	// kg/mol
+	symbol_html = "CO<sub>2</sub>"
+	symbol = "CO2"
+
+/datum/xgm_gas/methyl_bromide
+	id = GAS_METHYL_BROMIDE
+	name = "Methyl Bromide"
+	specific_heat = 42.59 // J/(mol*K)
+	molar_mass = 0.095	  // kg/mol
+	breathed_product = /datum/reagent/toxin/methyl_bromide
+	symbol_html = "CH<sub>3</sub>Br"
+	symbol = "CH3Br"
+
+/datum/xgm_gas/phoron
+	id = GAS_PLASMA
+	name = "Phoron"
+
+	//Note that this has a significant impact on TTV yield.
+	//Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure.
+	specific_heat = 200	// J/(mol*K)
+
+	//Hypothetical group 14 (same as carbon), period 8 element.
+	//Using multiplicity rule, it's atomic number is 162
+	//and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is:
+	molar_mass = 0.405	// kg/mol
+
+	tile_color = "#ff9940"
+	overlay_limit = 0.7
+	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL
+	breathed_product = /datum/reagent/toxin/phoron
+	symbol_html = "Ph"
+	symbol = "Ph"
+
+/datum/xgm_gas/sleeping_agent
+	id = GAS_N2O
+	name = "Nitrous Oxide"
+	specific_heat = 40	// J/(mol*K)
+	molar_mass = 0.044	// kg/mol. N2O
+	flags = XGM_GAS_OXIDIZER //N2O is a powerful oxidizer
+	breathed_product = /datum/reagent/nitrous_oxide
+	symbol_html = "N<sub>2</sub>O"
+	symbol = "N2O"
+
+/datum/xgm_gas/methane
+	id = GAS_METHANE
+	name = "Methane"
+	specific_heat = 30	// J/(mol*K)
+	molar_mass = 0.016	// kg/mol
+	flags = XGM_GAS_FUEL
+	symbol_html = "CH<sub>4</sub>"
+	symbol = "CH4"
+
+/datum/xgm_gas/alium
+	id = GAS_ALIEN
+	name = "Aliether"
+	hidden_from_codex = TRUE
+	symbol_html = "X"
+	symbol = "X"
+
+/datum/xgm_gas/alium/New()
+	var/num = rand(100,999)
+	name = "Compound #[num]"
+	specific_heat = rand(1, 400)	// J/(mol*K)
+	molar_mass = rand(20,800)/1000	// kg/mol
+	if(prob(40))
+		flags |= XGM_GAS_FUEL
+	else if(prob(40)) //it's prooobably a bad idea for gas being oxidizer to itself.
+		flags |= XGM_GAS_OXIDIZER
+	if(prob(40))
+		flags |= XGM_GAS_CONTAMINANT
+	if(prob(40))
+		flags |= XGM_GAS_FUSION_FUEL
+
+	symbol_html = "X<sup>[num]</sup>"
+	symbol = "X-[num]"
+	if(prob(50))
+		tile_color = RANDOM_RGB
+		overlay_limit = 0.5
+
+/datum/xgm_gas/hydrogen
+	id = GAS_HYDROGEN
+	name = "Hydrogen"
+	specific_heat = 100	// J/(mol*K)
+	molar_mass = 0.002	// kg/mol
+	flags = XGM_GAS_FUEL|XGM_GAS_FUSION_FUEL
+	burn_product = GAS_STEAM
+	symbol_html = "H<sub>2</sub>"
+	symbol = "H2"
+
+/datum/xgm_gas/hydrogen/deuterium
+	id = GAS_DEUTERIUM
+	name = "Deuterium"
+	symbol_html = "D"
+	symbol = "D"
+
+/datum/xgm_gas/hydrogen/tritium
+	id = GAS_TRITIUM
+	name = "Tritium"
+	symbol_html = "T"
+	symbol = "T"
+
+/datum/xgm_gas/helium
+	id = GAS_HELIUM
+	name = "Helium"
+	specific_heat = 80	// J/(mol*K)
+	molar_mass = 0.004	// kg/mol
+	flags = XGM_GAS_FUSION_FUEL
+	breathed_product = /datum/reagent/helium
+	symbol_html = "He"
+	symbol = "He"
+
+/datum/xgm_gas/argon
+	id = GAS_ARGON
+	name = "Argon"
+	specific_heat = 10	// J/(mol*K)
+	molar_mass = 0.018	// kg/mol
+	symbol_html = "Ar"
+	symbol = "Ar"
+
+// If narcosis is ever simulated, krypton has a narcotic potency seven times greater than regular airmix.
+/datum/xgm_gas/krypton
+	id = GAS_KRYPTON
+	name = "Krypton"
+	specific_heat = 5	// J/(mol*K)
+	molar_mass = 0.036	// kg/mol
+	symbol_html = "Kr"
+	symbol = "Kr"
+
+/datum/xgm_gas/neon
+	id = GAS_NEON
+	name = "Neon"
+	specific_heat = 20	// J/(mol*K)
+	molar_mass = 0.01	// kg/mol
+	symbol_html = "Ne"
+	symbol = "Ne"
+
+/datum/xgm_gas/xenon
+	id = GAS_XENON
+	name = "Xenon"
+	specific_heat = 3	// J/(mol*K)
+	molar_mass = 0.054	// kg/mol
+	breathed_product = /datum/reagent/nitrous_oxide/xenon
+	symbol_html = "Xe"
+	symbol = "Xe"
+
+/datum/xgm_gas/nitrodioxide
+	id = GAS_NO2
+	name = "Nitrogen Dioxide"
+	tile_color = "#ca6409"
+	specific_heat = 37	// J/(mol*K)
+	molar_mass = 0.054	// kg/mol
+	flags = XGM_GAS_OXIDIZER
+	breathed_product = /datum/reagent/toxin
+	symbol_html = "NO<sub>2</sub>"
+	symbol = "NO2"
+
+/datum/xgm_gas/nitricoxide
+	id = GAS_NO
+	name = "Nitric Oxide"
+
+	specific_heat = 10	// J/(mol*K)
+	molar_mass = 0.030	// kg/mol
+	flags = XGM_GAS_OXIDIZER
+	symbol_html = "NO"
+	symbol = "NO"
+
+/datum/xgm_gas/chlorine
+	id = GAS_CHLORINE
+	name = "Chlorine"
+	tile_color = "#c5f72d"
+	overlay_limit = 0.5
+	specific_heat = 5	// J/(mol*K)
+	molar_mass = 0.017	// kg/mol
+	flags = XGM_GAS_CONTAMINANT
+	breathed_product = /datum/reagent/toxin/chlorine
+	symbol_html = "Cl"
+	symbol = "Cl"
+
+/datum/xgm_gas/vapor
+	id = GAS_STEAM
+	name = "Steam"
+	tile_overlay = "generic"
+	overlay_limit = 0.5
+	specific_heat = 30	// J/(mol*K)
+	molar_mass = 0.020	// kg/mol
+	breathed_product =     /datum/reagent/water
+	condensation_product = /datum/reagent/water
+	condensation_point =   308.15 // 35C. Dew point is ~20C but this is better for gameplay considerations.
+	symbol_html = "H<sub>2</sub>O"
+	symbol = "H2O"
+
+/datum/xgm_gas/sulfurdioxide
+	id = GAS_SULFUR
+	name = "Sulfur Dioxide"
+
+	specific_heat = 30	// J/(mol*K)
+	molar_mass = 0.044	// kg/mol
+	symbol_html = "SO<sub>2</sub>"
+	symbol = "SO2"
+
+/datum/xgm_gas/ammonia
+	id = GAS_AMMONIA
+	name = "Ammonia"
+
+	specific_heat = 20	// J/(mol*K)
+	molar_mass = 0.017	// kg/mol
+	breathed_product = /datum/reagent/ammonia
+	symbol_html = "NH<sub>3</sub>"
+	symbol = "NH3"
+
+/datum/xgm_gas/carbon_monoxide
+	id = GAS_CO
+	name = "Carbon Monoxide"
+	specific_heat = 30	// J/(mol*K)
+	molar_mass = 0.028	// kg/mol
+	breathed_product = /datum/reagent/carbon_monoxide
+	symbol_html = "CO"
+	symbol = "CO"
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
new file mode 100644
index 00000000000..331194c445c
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -0,0 +1,553 @@
+/datum/gas_mixture
+	//Associative list of gas moles.
+	//Gases with 0 moles are not tracked and are pruned by update_values()
+	var/list/gas = list()
+	//Temperature in Kelvin of this gas mix.
+	var/temperature = 0
+
+	//Sum of all the gas moles in this mix.  Updated by update_values()
+	var/total_moles = 0
+	//Volume of this mix.
+	var/volume = CELL_VOLUME
+	//Size of the group this gas_mixture is representing.  1 for singletons.
+	var/group_multiplier = 1
+
+	//List of active tile overlays for this gas_mixture.  Updated by check_tile_graphic()
+	var/list/graphic = list()
+	//Cache of gas overlay objects
+	var/list/tile_overlay_cache
+
+/datum/gas_mixture/New(_volume = CELL_VOLUME, _temperature = 0, _group_multiplier = 1)
+	volume = _volume
+	temperature = _temperature
+	group_multiplier = _group_multiplier
+
+/datum/gas_mixture/proc/get_gas(gasid)
+	if(!gas.len)
+		return 0 //if the list is empty BYOND treats it as a non-associative list, which runtimes
+	return gas[gasid] * group_multiplier
+
+/datum/gas_mixture/proc/get_total_moles()
+	return total_moles * group_multiplier
+
+//Takes a gas string and the amount of moles to adjust by.  Calls update_values() if update isn't 0.
+/datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1)
+	if(moles == 0)
+		return
+
+	if (group_multiplier != 1)
+		gas[gasid] += moles/group_multiplier
+	else
+		gas[gasid] += moles
+
+	if(update)
+		update_values()
+
+
+//Same as adjust_gas(), but takes a temperature which is mixed in with the gas.
+/datum/gas_mixture/proc/adjust_gas_temp(gasid, moles, temp, update = 1)
+	if(moles == 0)
+		return
+
+	if(moles > 0 && abs(temperature - temp) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
+		var/self_heat_capacity = heat_capacity()
+		var/giver_heat_capacity = SSzas.gas_data.specific_heat[gasid] * moles
+		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
+		if(combined_heat_capacity != 0)
+			temperature = (temp * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
+
+	if (group_multiplier != 1)
+		gas[gasid] += moles/group_multiplier
+	else
+		gas[gasid] += moles
+
+	if(update)
+		update_values()
+
+
+//Variadic version of adjust_gas().  Takes any number of gas and mole pairs and applies them.
+/datum/gas_mixture/proc/adjust_multi()
+	ASSERT(!(args.len % 2))
+
+	for(var/i = 1; i < args.len; i += 2)
+		adjust_gas(args[i], args[i+1], update = 0)
+
+	update_values()
+
+
+//Variadic version of adjust_gas_temp().  Takes any number of gas, mole and temperature associations and applies them.
+/datum/gas_mixture/proc/adjust_multi_temp()
+	ASSERT(!(args.len % 3))
+
+	for(var/i = 1; i < args.len; i += 3)
+		adjust_gas_temp(args[i], args[i + 1], args[i + 2], update = 0)
+
+	update_values()
+
+
+//Merges all the gas from another mixture into this one.  Respects group_multipliers and adjusts temperature correctly.
+//Does not modify giver in any way.
+/datum/gas_mixture/proc/merge(const/datum/gas_mixture/giver)
+	if(!giver)
+		return
+
+	if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
+		var/self_heat_capacity = heat_capacity()
+		var/giver_heat_capacity = giver.heat_capacity()
+		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
+		if(combined_heat_capacity != 0)
+			temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity
+
+	if((group_multiplier != 1)||(giver.group_multiplier != 1))
+		for(var/g in giver.gas)
+			gas[g] += giver.gas[g] * giver.group_multiplier / group_multiplier
+	else
+		for(var/g in giver.gas)
+			gas[g] += giver.gas[g]
+
+	update_values()
+
+// Used to equalize the mixture between two zones before sleeping an edge.
+/datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer)
+	var/our_heatcap = heat_capacity()
+	var/share_heatcap = sharer.heat_capacity()
+
+	// Special exception: there isn't enough air around to be worth processing this edge next tick, zap both to zero.
+	if(total_moles + sharer.total_moles <= MINIMUM_AIR_TO_SUSPEND)
+		gas.Cut()
+		sharer.gas.Cut()
+
+	for(var/g in gas|sharer.gas)
+		var/comb = gas[g] + sharer.gas[g]
+		comb /= volume + sharer.volume
+		gas[g] = comb * volume
+		sharer.gas[g] = comb * sharer.volume
+
+	if(our_heatcap + share_heatcap)
+		temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap)
+	sharer.temperature = temperature
+
+	update_values()
+	sharer.update_values()
+
+	return 1
+
+
+//Returns the heat capacity of the gas mix based on the specific heat of the gases.
+/datum/gas_mixture/proc/heat_capacity()
+	. = 0
+	for(var/g in gas)
+		. += SSzas.gas_data.specific_heat[g] * gas[g]
+	. *= group_multiplier
+
+
+//Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB.
+/datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy)
+
+	if (total_moles == 0)
+		return 0
+
+	var/heat_capacity = heat_capacity()
+	if (thermal_energy < 0)
+		if (temperature < TCMB)
+			return 0
+		var/thermal_energy_limit = -(temperature - TCMB)*heat_capacity	//ensure temperature does not go below TCMB
+		thermal_energy = max( thermal_energy, thermal_energy_limit )	//thermal_energy and thermal_energy_limit are negative here.
+	temperature += thermal_energy/heat_capacity
+	return thermal_energy
+
+//Returns the thermal energy change required to get to a new temperature
+/datum/gas_mixture/proc/get_thermal_energy_change(var/new_temperature)
+	return heat_capacity()*(max(new_temperature, 0) - temperature)
+
+
+//Technically vacuum doesn't have a specific entropy. Just use a really big number (infinity would be ideal) here so that it's easy to add gas to vacuum and hard to take gas out.
+#define SPECIFIC_ENTROPY_VACUUM		150000
+
+
+//Returns the ideal gas specific entropy of the whole mix. This is the entropy per mole of /mixed/ gas.
+/datum/gas_mixture/proc/specific_entropy()
+	if (!gas.len || total_moles == 0)
+		return SPECIFIC_ENTROPY_VACUUM
+
+	. = 0
+	for(var/g in gas)
+		. += gas[g] * specific_entropy_gas(g)
+	. /= total_moles
+
+
+/*
+	It's arguable whether this should even be called entropy anymore. It's more "based on" entropy than actually entropy now.
+
+	Returns the ideal gas specific entropy of a specific gas in the mix. This is the entropy due to that gas per mole of /that/ gas in the mixture, not the entropy due to that gas per mole of gas mixture.
+
+	For the purposes of SS13, the specific entropy is just a number that tells you how hard it is to move gas. You can replace this with whatever you want.
+	Just remember that returning a SMALL number == adding gas to this gas mix is HARD, taking gas away is EASY, and that returning a LARGE number means the opposite (so a vacuum should approach infinity).
+
+	So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way
+	which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures.
+*/
+/datum/gas_mixture/proc/specific_entropy_gas(var/gasid)
+	if (!(gasid in gas) || gas[gasid] == 0)
+		return SPECIFIC_ENTROPY_VACUUM	//that gas isn't here
+
+	//group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure)
+	var/molar_mass = SSzas.gas_data.molar_mass[gasid]
+	var/specific_heat = SSzas.gas_data.specific_heat[gasid]
+	var/safe_temp = max(temperature, TCMB) // We're about to divide by this.
+	return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * safe_temp)) * (molar_mass*specific_heat*safe_temp)**(2/3) + 1 ) +  15 )
+
+	//alternative, simpler equation
+	//var/partial_pressure = gas[gasid] * R_IDEAL_GAS_EQUATION * temperature / volume
+	//return R_IDEAL_GAS_EQUATION * ( log (1 + IDEAL_GAS_ENTROPY_CONSTANT/partial_pressure) + 20 )
+
+
+//Updates the total_moles count and trims any empty gases.
+/datum/gas_mixture/proc/update_values()
+	total_moles = 0
+	for(var/g in gas)
+		if(gas[g] <= 0)
+			gas -= g
+		else
+			total_moles += gas[g]
+
+
+//Returns the pressure of the gas mix.  Only accurate if there have been no gas modifications since update_values() has been called.
+/datum/gas_mixture/proc/return_pressure()
+	if(volume)
+		return total_moles * R_IDEAL_GAS_EQUATION * temperature / volume
+	return 0
+
+
+//Removes moles from the gas mixture and returns a gas_mixture containing the removed air.
+/datum/gas_mixture/proc/remove(amount)
+	amount = min(amount, total_moles * group_multiplier) //Can not take more air than the gas mixture has!
+	if(amount <= 0)
+		return null
+
+	var/datum/gas_mixture/removed = new
+
+	for(var/g in gas)
+		removed.gas[g] = QUANTIZE((gas[g] / total_moles) * amount)
+		gas[g] -= removed.gas[g] / group_multiplier
+
+	removed.temperature = temperature
+	update_values()
+	removed.update_values()
+
+	return removed
+
+
+//Removes a ratio of gas from the mixture and returns a gas_mixture containing the removed air.
+/datum/gas_mixture/proc/remove_ratio(ratio, out_group_multiplier = 1)
+	if(ratio <= 0)
+		return null
+	out_group_multiplier = clamp(out_group_multiplier, 1, group_multiplier)
+
+	ratio = min(ratio, 1)
+
+	var/datum/gas_mixture/removed = new
+	removed.group_multiplier = out_group_multiplier
+
+	for(var/g in gas)
+		removed.gas[g] = (gas[g] * ratio * group_multiplier / out_group_multiplier)
+		gas[g] = gas[g] * (1 - ratio)
+
+	removed.temperature = temperature
+	removed.volume = volume * group_multiplier / out_group_multiplier
+	update_values()
+	removed.update_values()
+
+	return removed
+
+//Removes a volume of gas from the mixture and returns a gas_mixture containing the removed air with the given volume
+/datum/gas_mixture/proc/remove_volume(removed_volume)
+	var/datum/gas_mixture/removed = remove_ratio(removed_volume/(volume*group_multiplier), 1)
+	removed.volume = removed_volume
+	return removed
+
+//Removes moles from the gas mixture, limited by a given flag.  Returns a gax_mixture containing the removed air.
+/datum/gas_mixture/proc/remove_by_flag(flag, amount)
+	var/datum/gas_mixture/removed = new
+
+	if(!flag || amount <= 0)
+		return removed
+
+	var/sum = 0
+	for(var/g in gas)
+		if(SSzas.gas_data.flags[g] & flag)
+			sum += gas[g]
+
+	for(var/g in gas)
+		if(SSzas.gas_data.flags[g] & flag)
+			removed.gas[g] = QUANTIZE((gas[g] / sum) * amount)
+			gas[g] -= removed.gas[g] / group_multiplier
+
+	removed.temperature = temperature
+	update_values()
+	removed.update_values()
+
+	return removed
+
+//Returns the amount of gas that has the given flag, in moles
+/datum/gas_mixture/proc/get_by_flag(flag)
+	. = 0
+	for(var/g in gas)
+		if(SSzas.gas_data.flags[g] & flag)
+			. += gas[g]
+
+//Copies gas and temperature from another gas_mixture.
+/datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample)
+	gas = sample.gas.Copy()
+	temperature = sample.temperature
+
+	update_values()
+
+	return 1
+
+
+//Checks if we are within acceptable range of another gas_mixture to suspend processing or merge.
+/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample, var/vacuum_exception = 0)
+	if(!sample) return 0
+
+	if(vacuum_exception)
+		// Special case - If one of the two is zero pressure, the other must also be zero.
+		// This prevents suspending processing when an air-filled room is next to a vacuum,
+		// an edge case which is particually obviously wrong to players
+		if(total_moles == 0 && sample.total_moles != 0 || sample.total_moles == 0 && total_moles != 0)
+			return 0
+
+	var/list/marked = list()
+	for(var/g in gas)
+		if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \
+		((gas[g] < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g]) || \
+		(gas[g] > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g])))
+			return 0
+		marked[g] = 1
+
+	if(abs(return_pressure() - sample.return_pressure()) > MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND)
+		return 0
+
+	for(var/g in sample.gas)
+		if(!marked[g])
+			if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \
+			((gas[g] < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g]) || \
+			(gas[g] > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.gas[g])))
+				return 0
+
+	if(total_moles > MINIMUM_AIR_TO_SUSPEND)
+		if((abs(temperature - sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
+		((temperature < (1 - MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || \
+		(temperature > (1 + MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature)))
+			return 0
+
+	return 1
+
+//Rechecks the gas_mixture and adjusts the graphic list if needed.
+//Two lists can be passed by reference if you need know specifically which graphics were added and removed.
+/datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null)
+	for(var/obj/effect/gas_overlay/O in graphic)
+		if(gas[O.gas_id] <= SSzas.gas_data.overlay_limit[O.gas_id])
+			LAZYADD(graphic_remove, O)
+	for(var/g in SSzas.gas_data.overlay_limit)
+		//Overlay isn't applied for this gas, check if it's valid and needs to be added.
+		if(gas[g] > SSzas.gas_data.overlay_limit[g])
+			var/tile_overlay = get_tile_overlay(g)
+			if(!(tile_overlay in graphic))
+				LAZYADD(graphic_add, tile_overlay)
+	. = 0
+	//Apply changes
+	if(graphic_add && graphic_add.len)
+		graphic |= graphic_add
+		. = 1
+	if(graphic_remove && graphic_remove.len)
+		graphic -= graphic_remove
+		. = 1
+	if(graphic.len)
+		var/pressure_mod = clamp(return_pressure() / ONE_ATMOSPHERE, 0, 2)
+		for(var/obj/effect/gas_overlay/O in graphic)
+			var/concentration_mod = clamp(gas[O.gas_id] / total_moles, 0.1, 1)
+			var/new_alpha = min(230, round(pressure_mod * concentration_mod * 180, 5))
+			if(new_alpha != O.alpha)
+				O.update_alpha_animation(new_alpha)
+
+/datum/gas_mixture/proc/get_tile_overlay(gas_id)
+	if(!LAZYACCESS(tile_overlay_cache, gas_id))
+		LAZYSET(tile_overlay_cache, gas_id, new/obj/effect/gas_overlay(null, gas_id))
+	return tile_overlay_cache[gas_id]
+
+//Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier.
+/datum/gas_mixture/proc/add(datum/gas_mixture/right_side)
+	for(var/g in right_side.gas)
+		gas[g] += right_side.gas[g]
+
+	update_values()
+	return 1
+
+
+//Simpler version of remove(), adjusts gas amounts directly and doesn't account for group_multiplier.
+/datum/gas_mixture/proc/subtract(datum/gas_mixture/right_side)
+	for(var/g in right_side.gas)
+		gas[g] -= right_side.gas[g]
+
+	update_values()
+	return 1
+
+
+//Multiply all gas amounts by a factor.
+/datum/gas_mixture/proc/multiply(factor)
+	for(var/g in gas)
+		gas[g] *= factor
+
+	update_values()
+	return 1
+
+
+//Divide all gas amounts by a factor.
+/datum/gas_mixture/proc/divide(factor)
+	for(var/g in gas)
+		gas[g] /= factor
+
+	update_values()
+	return 1
+
+
+//Shares gas with another gas_mixture based on the amount of connecting tiles and a fixed lookup table.
+/datum/gas_mixture/proc/share_ratio(datum/gas_mixture/other, connecting_tiles, share_size = null, one_way = 0)
+	var/static/list/sharing_lookup_table = list(0.30, 0.40, 0.48, 0.54, 0.60, 0.66)
+	//Shares a specific ratio of gas between mixtures using simple weighted averages.
+	var/ratio = sharing_lookup_table[6]
+
+	var/size = max(1, group_multiplier)
+	if(isnull(share_size)) share_size = max(1, other.group_multiplier)
+
+	var/full_heat_capacity = heat_capacity()
+	var/s_full_heat_capacity = other.heat_capacity()
+
+	var/list/avg_gas = list()
+
+	for(var/g in gas)
+		avg_gas[g] += gas[g] * size
+
+	for(var/g in other.gas)
+		avg_gas[g] += other.gas[g] * share_size
+
+	for(var/g in avg_gas)
+		avg_gas[g] /= (size + share_size)
+
+	var/temp_avg = 0
+	if(full_heat_capacity + s_full_heat_capacity)
+		temp_avg = (temperature * full_heat_capacity + other.temperature * s_full_heat_capacity) / (full_heat_capacity + s_full_heat_capacity)
+
+	//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD.
+	if(sharing_lookup_table.len >= connecting_tiles) //6 or more interconnecting tiles will max at 42% of air moved per tick.
+		ratio = sharing_lookup_table[connecting_tiles]
+	//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
+
+	for(var/g in avg_gas)
+		gas[g] = max(0, (gas[g] - avg_gas[g]) * (1 - ratio) + avg_gas[g])
+		if(!one_way)
+			other.gas[g] = max(0, (other.gas[g] - avg_gas[g]) * (1 - ratio) + avg_gas[g])
+
+	temperature = max(0, (temperature - temp_avg) * (1-ratio) + temp_avg)
+	if(!one_way)
+		other.temperature = max(0, (other.temperature - temp_avg) * (1-ratio) + temp_avg)
+
+	update_values()
+	other.update_values()
+
+	return compare(other)
+
+
+//A wrapper around share_ratio for spacing gas at the same rate as if it were going into a large airless room.
+/datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air)
+	return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
+
+//Equalizes a list of gas mixtures.  Used for pipe networks.
+/proc/equalize_gases(list/datum/gas_mixture/gases)
+	//Calculate totals from individual components
+	var/total_volume = 0
+	var/total_thermal_energy = 0
+	var/total_heat_capacity = 0
+
+	var/list/total_gas = list()
+	for(var/datum/gas_mixture/gasmix in gases)
+		total_volume += gasmix.volume
+		var/temp_heatcap = gasmix.heat_capacity()
+		total_thermal_energy += gasmix.temperature * temp_heatcap
+		total_heat_capacity += temp_heatcap
+		for(var/g in gasmix.gas)
+			total_gas[g] += gasmix.gas[g]
+
+	if(total_volume > 0)
+		var/datum/gas_mixture/combined = new(total_volume)
+		combined.gas = total_gas
+
+		//Calculate temperature
+		if(total_heat_capacity > 0)
+			combined.temperature = total_thermal_energy / total_heat_capacity
+		combined.update_values()
+
+		//Allow for reactions
+		combined.react()
+
+		//Average out the gases
+		for(var/g in combined.gas)
+			combined.gas[g] /= total_volume
+
+		//Update individual gas_mixtures
+		for(var/datum/gas_mixture/gasmix in gases)
+			gasmix.gas = combined.gas.Copy()
+			gasmix.temperature = combined.temperature
+			gasmix.multiply(gasmix.volume)
+
+	return 1
+
+/datum/gas_mixture/proc/get_mass()
+	for(var/g in gas)
+		. += gas[g] * SSzas.gas_data.molar_mass[g] * group_multiplier
+
+/datum/gas_mixture/proc/specific_mass()
+	var/M = get_total_moles()
+	if(M)
+		return get_mass()/M
+
+////LINDA COMPATABILITY PROCS////
+/datum/gas_mixture/proc/return_volume()
+	return max(0, volume)
+
+/datum/gas_mixture/proc/return_temperature()
+	return temperature
+
+/datum/gas_mixture/proc/total_moles()
+	return total_moles
+
+/datum/gas_mixture/proc/has_gas(gas_id, required_amount)
+	var/amt = get_gas(gas_id)
+	return (amt >= required_amount)
+
+///THIS PROBABLY WILL NOT BE USED BUUUUT-
+/datum/gas_mixture/proc/mingle_with_turf(turf/simulated/target, mingle_volume)
+	var/datum/gas_mixture/air_sample = remove_ratio(mingle_volume/volume)
+	air_sample.volume = mingle_volume
+
+	if(istype(target) && target.zone)
+		//Have to consider preservation of group statuses
+		var/datum/gas_mixture/turf_copy = new
+
+		turf_copy.copy_from(target.zone.air)
+		turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group
+
+		equalize_gases(list(air_sample, turf_copy))
+		merge(air_sample)
+
+		turf_copy.subtract(target.zone.air)
+
+		target.zone.air.merge(turf_copy)
+
+	else
+		var/datum/gas_mixture/turf_air = target.return_air()
+
+		equalize_gases(list(air_sample, turf_air))
+		merge(air_sample)
+		//turf_air already modified by equalize_gases()
diff --git a/code/modules/atmospherics/ZAS/ZAS_Settings.dm b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
new file mode 100644
index 00000000000..1cf3d2fbee8
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
@@ -0,0 +1,78 @@
+/datum/zas_controller
+	var/datum/pl_control/plc
+
+	var/fire_consuption_rate = 0.25
+	var/fire_consuption_rate_NAME = "Fire - Air Consumption Ratio"
+	var/fire_consuption_rate_DESC = "Ratio of air removed and combusted per tick."
+
+	var/fire_firelevel_multiplier = 25
+	var/fire_firelevel_multiplier_NAME = "Fire - Firelevel Constant"
+	var/fire_firelevel_multiplier_DESC = "Multiplied by the equation for firelevel, affects mainly the extingiushing of fires."
+
+	//Note that this parameter and the phoron heat capacity have a significant impact on TTV yield.
+	var/fire_fuel_energy_release = 866000 //J/mol. Adjusted to compensate for fire energy release being fixed, was 397000
+	var/fire_fuel_energy_release_NAME = "Fire - Fuel energy release"
+	var/fire_fuel_energy_release_DESC = "The energy in joule released when burning one mol of a burnable substance"
+
+
+	var/IgnitionLevel = 0.5
+	var/IgnitionLevel_DESC = "Determines point at which fire can ignite"
+
+	var/airflow_lightest_pressure = 20
+	var/airflow_lightest_pressure_NAME = "Airflow - Small Movement Threshold %"
+	var/airflow_lightest_pressure_DESC = "Percent of 1 Atm. at which items with the small weight classes will move."
+
+	var/airflow_light_pressure = 35
+	var/airflow_light_pressure_NAME = "Airflow - Medium Movement Threshold %"
+	var/airflow_light_pressure_DESC = "Percent of 1 Atm. at which items with the medium weight classes will move."
+
+	var/airflow_medium_pressure = 50
+	var/airflow_medium_pressure_NAME = "Airflow - Heavy Movement Threshold %"
+	var/airflow_medium_pressure_DESC = "Percent of 1 Atm. at which items with the largest weight classes will move."
+
+	var/airflow_heavy_pressure = 65
+	var/airflow_heavy_pressure_NAME = "Airflow - Mob Movement Threshold %"
+	var/airflow_heavy_pressure_DESC = "Percent of 1 Atm. at which mobs will move."
+
+	var/airflow_dense_pressure = 85
+	var/airflow_dense_pressure_NAME = "Airflow - Dense Movement Threshold %"
+	var/airflow_dense_pressure_DESC = "Percent of 1 Atm. at which items with canisters and closets will move."
+
+	var/airflow_stun_pressure = 60
+	var/airflow_stun_pressure_NAME = "Airflow - Mob Stunning Threshold %"
+	var/airflow_stun_pressure_DESC = "Percent of 1 Atm. at which mobs will be stunned by airflow."
+
+	var/airflow_stun_cooldown = 60
+	var/airflow_stun_cooldown_NAME = "Aiflow Stunning - Cooldown"
+	var/airflow_stun_cooldown_DESC = "How long, in tenths of a second, to wait before stunning them again."
+
+	var/airflow_stun = 1
+	var/airflow_stun_NAME = "Airflow Impact - Stunning"
+	var/airflow_stun_DESC = "How much a mob is stunned when hit by an object."
+
+	var/airflow_damage = 3
+	var/airflow_damage_NAME = "Airflow Impact - Damage"
+	var/airflow_damage_DESC = "Damage from airflow impacts."
+
+	var/airflow_speed_decay = 1.5
+	var/airflow_speed_decay_NAME = "Airflow Speed Decay"
+	var/airflow_speed_decay_DESC = "How rapidly the speed gained from airflow decays."
+
+	var/airflow_delay = 30
+	var/airflow_delay_NAME = "Airflow Retrigger Delay"
+	var/airflow_delay_DESC = "Time in deciseconds before things can be moved by airflow again."
+
+	var/airflow_mob_slowdown = 1
+	var/airflow_mob_slowdown_NAME = "Airflow Slowdown"
+	var/airflow_mob_slowdown_DESC = "Time in tenths of a second to add as a delay to each movement by a mob if they are fighting the pull of the airflow."
+
+	var/connection_insulation = 1
+	var/connection_insulation_NAME = "Connections - Insulation"
+	var/connection_insulation_DESC = "Boolean, should doors forbid heat transfer?"
+
+	var/connection_temperature_delta = 10
+	var/connection_temperature_delta_NAME = "Connections - Temperature Difference"
+	var/connection_temperature_delta_DESC = "The smallest temperature difference which will cause heat to travel through doors."
+
+/datum/zas_controller/Initalize()
+	plc = new
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index aff8d23d929..9d20a386d9e 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -54,7 +54,7 @@ Class Procs:
 	var/last_air_temperature = TCMB
 
 /zone/New()
-	SSair.add_zone(src)
+	SSzas.add_zone(src)
 	air.temperature = TCMB
 	air.group_multiplier = 1
 	air.volume = CELL_VOLUME
@@ -63,7 +63,7 @@ Class Procs:
 #ifdef ZASDBG
 	ASSERT(!invalid)
 	ASSERT(istype(T))
-	ASSERT(!SSair.has_valid_zone(T))
+	ASSERT(!SSzas.has_valid_zone(T))
 #endif
 
 	var/datum/gas_mixture/turf_air = T.return_air()
@@ -73,7 +73,7 @@ Class Procs:
 	if(T.fire)
 		var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
 		fire_tiles.Add(T)
-		SSair.active_fire_zones |= src
+		SSzas.active_fire_zones |= src
 		if(fuel) fuel_objs += fuel
 	T.update_graphic(air.graphic)
 
@@ -116,11 +116,11 @@ Class Procs:
 		if(E.contains_zone(into))
 			continue //don't need to rebuild this edge
 		for(var/turf/T in E.connecting_turfs)
-			SSair.mark_for_update(T)
+			SSzas.mark_for_update(T)
 
 /zone/proc/c_invalidate()
 	invalid = 1
-	SSair.remove_zone(src)
+	SSzas.remove_zone(src)
 	#ifdef ZASDBG
 	for(var/turf/simulated/T in contents)
 		T.dbg(invalid_zone)
@@ -133,7 +133,7 @@ Class Procs:
 		T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
 		//T.dbg(invalid_zone)
 		T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
-		SSair.mark_for_update(T)
+		SSzas.mark_for_update(T)
 
 /zone/proc/add_tile_air(datum/gas_mixture/tile_air)
 	//air.volume += CELL_VOLUME
@@ -146,10 +146,10 @@ Class Procs:
 /zone/proc/tick()
 
 	// Update fires.
-	if(air.temperature >= PHORON_FLASHPOINT && !(src in SSair.active_fire_zones) && air.check_combustability() && contents.len)
+	if(air.temperature >= PHORON_FLASHPOINT && !(src in SSzas.active_fire_zones) && air.check_combustability() && contents.len)
 		var/turf/T = pick(contents)
 		if(istype(T))
-			T.create_fire(vsc.fire_firelevel_multiplier)
+			T.create_fire(SSzas.settings.fire_firelevel_multiplier)
 
 	// Update gas overlays.
 	if(air.check_tile_graphic(graphic_add, graphic_remove))
@@ -165,8 +165,8 @@ Class Procs:
 
 	// Handle condensation from the air.
 	for(var/g in air.gas)
-		var/product = gas_data.condensation_products[g]
-		if(product && air.temperature <= gas_data.condensation_points[g])
+		var/product = SSzas.gas_data.condensation_products[g]
+		if(product && air.temperature <= SSzas.gas_data.condensation_points[g])
 			var/condensation_area = air.group_multiplier
 			while(condensation_area > 0)
 				condensation_area--
@@ -190,7 +190,7 @@ Class Procs:
 /zone/proc/dbg_data(mob/M)
 	to_chat(M, name)
 	for(var/g in air.gas)
-		to_chat(M, "[gas_data.name[g]]: [air.gas[g]]")
+		to_chat(M, "[SSzas.gas_data.name[g]]: [air.gas[g]]")
 	to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
 	to_chat(M, "O2 per N2: [(air.gas[GAS_NITROGEN] ? air.gas[GAS_OXYGEN]/air.gas[GAS_NITROGEN] : "N/A")] Moles: [air.total_moles]")
 	to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])")
diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm
index 6403b4417aa..269c5722698 100644
--- a/code/modules/atmospherics/environmental/LINDA_fire.dm
+++ b/code/modules/atmospherics/environmental/LINDA_fire.dm
@@ -95,7 +95,7 @@
 		temperature = starting_temperature
 	perform_exposure()
 	setDir(pick(GLOB.cardinals))
-	air_update_turf(FALSE, FALSE)
+	//air_update_turf(FALSE, FALSE)
 	var/static/list/loc_connections = list(
 		COMSIG_ATOM_ENTERED = .proc/on_entered,
 	)
diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm
index 28743a43c47..0a1ce419a2c 100644
--- a/code/modules/atmospherics/environmental/LINDA_system.dm
+++ b/code/modules/atmospherics/environmental/LINDA_system.dm
@@ -118,7 +118,7 @@
 	var/turf/local_turf = get_turf(loc)
 	if(!local_turf)
 		return
-	local_turf.air_update_turf(update, remove)
+	local_turf./air_update_turf(update, remove)
 
 /**
  * A helper proc for dealing with atmos changes
@@ -139,8 +139,8 @@
 
 /atom/movable/proc/move_update_air(turf/target_turf)
 	if(isturf(target_turf))
-		target_turf.air_update_turf(TRUE, FALSE) //You're empty now
-	air_update_turf(TRUE, TRUE) //You aren't
+		target_turf.//air_update_turf(TRUE, FALSE) //You're empty now
+	//air_update_turf(TRUE, TRUE) //You aren't
 
 /atom/proc/atmos_spawn_air(text) //because a lot of people loves to copy paste awful code lets just make an easy proc to spawn your plasma fires
 	var/turf/open/local_turf = get_turf(src)
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
index 7627bf7c48e..6887aa8ca32 100644
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
@@ -80,14 +80,14 @@
 		return FALSE
 	air.merge(giver)
 	update_visuals()
-	air_update_turf(FALSE, FALSE)
+	//air_update_turf(FALSE, FALSE)
 	return TRUE
 
 /turf/open/remove_air(amount)
 	var/datum/gas_mixture/ours = return_air()
 	var/datum/gas_mixture/removed = ours.remove(amount)
 	update_visuals()
-	air_update_turf(FALSE, FALSE)
+	//air_update_turf(FALSE, FALSE)
 	return removed
 
 /turf/open/proc/copy_air_with_tile(turf/open/target_turf)
@@ -374,7 +374,7 @@
 
 /atom/movable
 	///How much delta pressure is needed for us to move
-	var/pressure_resistance = 10
+	var///pressure_resistance = 10
 	var/last_high_pressure_movement_air_cycle = 0
 
 /atom/movable/proc/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0)
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index acc3b5714f5..5c62143e0a6 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -217,10 +217,10 @@
 			continue
 		cur_tlv = TLV[gas_id]
 		data["environment_data"] += list(list(
-								"name" = environment.gases[gas_id][GAS_META][META_GAS_NAME],
-								"value" = environment.gases[gas_id][MOLES] / total_moles * 100,
+								"name" = environment.gas[gas_id],
+								"value" = environment.get_gas(gas_id) / total_moles * 100,
 								"unit" = "%",
-								"danger_level" = cur_tlv.get_danger_level(environment.gases[gas_id][MOLES] * partial_pressure)
+								"danger_level" = cur_tlv.get_danger_level(environment.get_gas(gas_id)* partial_pressure)
 		))
 
 	if(!locked || user.has_unlimited_silicon_privilege)
@@ -451,26 +451,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"set_filters" = list(
-						/datum/gas/carbon_dioxide,
-						/datum/gas/miasma,
-						/datum/gas/plasma,
-						/datum/gas/water_vapor,
-						/datum/gas/hypernoblium,
-						/datum/gas/nitrous_oxide,
-						/datum/gas/nitrium,
-						/datum/gas/tritium,
-						/datum/gas/bz,
-						/datum/gas/pluoxium,
-						/datum/gas/freon,
-						/datum/gas/hydrogen,
-						/datum/gas/healium,
-						/datum/gas/proto_nitrate,
-						/datum/gas/zauker,
-						/datum/gas/helium,
-						/datum/gas/antinoblium,
-						/datum/gas/halon,
-					),
+					"set_filters" = ALL_GASES,
 					"scrubbing" = 1,
 					"widenet" = 1
 				), signal_source)
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index 10759536c12..a6de2e9fef0 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -52,13 +52,13 @@
 	///Whether it can be painted
 	var/paintable = TRUE
 
-	///Is the thing being rebuilt by SSair or not. Prevents list bloat
+	///Is the thing being rebuilt by SSzas or not. Prevents list bloat
 	var/rebuilding = FALSE
 
 	///The bitflag that's being checked on ventcrawling. Default is to allow ventcrawling and seeing pipes.
 	var/vent_movement = VENTCRAWL_ALLOWED | VENTCRAWL_CAN_SEE
-	
-	///keeps the name of the object from being overridden if it's vareditted. 
+
+	///keeps the name of the object from being overridden if it's vareditted.
 	var/override_naming
 
 /obj/machinery/atmospherics/LateInitialize()
@@ -83,20 +83,20 @@
 		armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 100, ACID = 70)
 	..()
 	if(process)
-		SSair.start_processing_machine(src)
+		SSzas.start_processing_machine(src)
 	set_init_directions(init_dir)
 
 /obj/machinery/atmospherics/Initialize(mapload)
 	if(mapload && name != initial(name))
 		override_naming = TRUE
-	return ..()	
+	return ..()
 
 /obj/machinery/atmospherics/Destroy()
 	for(var/i in 1 to device_type)
 		nullify_node(i)
 
-	SSair.stop_processing_machine(src)
-	SSair.rebuild_queue -= src
+	SSzas.stop_processing_machine(src)
+	SSzas.rebuild_queue -= src
 
 	if(pipe_vision_img)
 		qdel(pipe_vision_img)
@@ -114,7 +114,7 @@
 	on = active
 	SEND_SIGNAL(src, COMSIG_ATMOS_MACHINE_SET_ON, on)
 
-/// This should only be called by SSair as part of the rebuild queue.
+/// This should only be called by SSzas as part of the rebuild queue.
 /// Handles rebuilding pipelines after init or they've been changed.
 /obj/machinery/atmospherics/proc/rebuild_pipes()
 	var/list/targets = get_rebuild_targets()
@@ -470,7 +470,7 @@
 	for(var/obj/machinery/atmospherics/A in nodes)
 		A.atmos_init()
 		A.add_member(src)
-	SSair.add_to_rebuild_queue(src)
+	SSzas.add_to_rebuild_queue(src)
 
 /obj/machinery/atmospherics/update_name()
 	if(!override_naming)
diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
index 65af7ccd181..4b9a7f12843 100644
--- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
+++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
@@ -99,7 +99,7 @@
 
 	call_reactions(env)
 
-	air_update_turf(FALSE, FALSE)
+	//air_update_turf(FALSE, FALSE)
 
 	if(anchored)
 		return
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm
index f461cbe8988..a482283b9ba 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm
@@ -28,7 +28,7 @@
 	var/datum/gas_mixture/internal = airs[1]
 
 	if(internal.equalize(external))
-		air_update_turf(FALSE, FALSE)
+		//air_update_turf(FALSE, FALSE)
 		update_parents()
 
 /obj/machinery/atmospherics/components/unary/passive_vent/layer2
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 8692049c791..f25b5df5dc2 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -46,7 +46,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 10, BIO = 100, FIRE = 80, ACID = 50)
 	max_integrity = 250
 	integrity_failure = 0.4
-	pressure_resistance = 7 * ONE_ATMOSPHERE
+	//pressure_resistance = 7 * ONE_ATMOSPHERE
 	req_access = list()
 
 	var/icon/canister_overlay_file = 'icons/obj/atmospherics/canisters.dmi'
@@ -551,7 +551,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		excited = TRUE
 
 		if(air_contents.release_gas_to(target_air, release_pressure) && !holding)
-			air_update_turf(FALSE, FALSE)
+			//air_update_turf(FALSE, FALSE)
 
 	var/our_pressure = air_contents.return_pressure()
 	var/our_temperature = air_contents.return_temperature()
diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
index c7f922c92f5..dcc57b43165 100644
--- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
+++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
@@ -22,12 +22,12 @@
 	air_contents = new
 	air_contents.volume = volume
 	air_contents.temperature = T20C
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/Destroy()
 	disconnect()
 	air_contents = null
-	SSair.stop_processing_machine(src)
+	SSzas.stop_processing_machine(src)
 
 	return ..()
 
@@ -50,7 +50,7 @@
 	excited = FALSE
 
 /obj/machinery/portable_atmospherics/return_air()
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 	return air_contents
 
 /obj/machinery/portable_atmospherics/return_analyzable_air()
@@ -80,7 +80,7 @@
 	pixel_x = new_port.pixel_x
 	pixel_y = new_port.pixel_y
 
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 	update_appearance()
 	return TRUE
 
@@ -101,7 +101,7 @@
 	pixel_x = 0
 	pixel_y = 0
 
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 	update_appearance()
 	return TRUE
 
@@ -139,7 +139,7 @@
 		holding = new_tank
 		RegisterSignal(holding, COMSIG_PARENT_QDELETING, .proc/unregister_holding)
 
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 	update_appearance()
 	return TRUE
 
@@ -193,10 +193,10 @@
 	add_fingerprint(user)
 	return ..()
 
-/// Holding tanks can get to zero integrity and be destroyed without other warnings due to pressure change. 
+/// Holding tanks can get to zero integrity and be destroyed without other warnings due to pressure change.
 /// This checks for that case and removes our reference to it.
 /obj/machinery/portable_atmospherics/proc/unregister_holding()
 	SIGNAL_HANDLER
-	
+
 	UnregisterSignal(holding, COMSIG_PARENT_QDELETING)
 	holding = null
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 7390affc0d1..26dfe3e8651 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -68,7 +68,7 @@
 		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.
+		//air_update_turf(FALSE, FALSE) // Update the environment if needed.
 
 	return ..()
 
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 399a35a083d..bbf6ed311c1 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -99,7 +99,7 @@
 	air_contents.merge(filtered) // Store filtered out gasses.
 	mixture.merge(filtering) // Returned the cleaned gas.
 	if(!holding)
-		air_update_turf(FALSE, FALSE)
+		//air_update_turf(FALSE, FALSE)
 
 /obj/machinery/portable_atmospherics/scrubber/emp_act(severity)
 	. = ..()
diff --git a/code/modules/awaymissions/cordon.dm b/code/modules/awaymissions/cordon.dm
index e85a2e346e4..31a4ddc7447 100644
--- a/code/modules/awaymissions/cordon.dm
+++ b/code/modules/awaymissions/cordon.dm
@@ -16,7 +16,6 @@
 
 /turf/cordon/AfterChange()
 	. = ..()
-	SSair.high_pressure_delta -= src
 
 /turf/cordon/attack_ghost(mob/dead/observer/user)
 	return FALSE
diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm
index 7b523f31606..ffbeb476971 100644
--- a/code/modules/hydroponics/fermenting_barrel.dm
+++ b/code/modules/hydroponics/fermenting_barrel.dm
@@ -5,7 +5,7 @@
 	icon_state = "barrel"
 	density = TRUE
 	anchored = FALSE
-	pressure_resistance = 2 * ONE_ATMOSPHERE
+	//pressure_resistance = 2 * ONE_ATMOSPHERE
 	max_integrity = 300
 	var/open = FALSE
 	var/can_open = TRUE
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index 7574ddee5fd..e95bb3ecc9e 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -122,7 +122,7 @@
 			)
 		)
 	for(var/turf/affected_turf as anything in template_and_bordering_turfs)
-		affected_turf.air_update_turf(TRUE, TRUE)
+		affected_turf.//air_update_turf(TRUE, TRUE)
 		affected_turf.levelupdate()
 
 /datum/map_template/proc/load_new_z(secret = FALSE)
diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm
index 53f37e45f13..bb6b5163e95 100644
--- a/code/modules/mining/aux_base.dm
+++ b/code/modules/mining/aux_base.dm
@@ -335,7 +335,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32)
 	icon = 'icons/obj/objects.dmi'
 	icon_state = "miningbeacon"
 	var/obj/docking_port/stationary/Mport //Linked docking port for the mining shuttle
-	pressure_resistance = 200 //So it does not get blown into lava.
+	//pressure_resistance = 200 //So it does not get blown into lava.
 	var/anti_spam_cd = 0 //The linking process might be a bit intensive, so this here to prevent over use.
 	var/console_range = 15 //Wifi range of the beacon to find the aux base console
 
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 0baefc9041b..36ba0ed593c 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -262,10 +262,10 @@
 
 /obj/structure/fans/Initialize(mapload)
 	. = ..()
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/fans/Destroy()
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	. = ..()
 //Invisible, indestructible fans
 /obj/structure/fans/tiny/invisible
diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm
index 67cef378df0..b18f588ca86 100644
--- a/code/modules/mining/satchel_ore_boxdm.dm
+++ b/code/modules/mining/satchel_ore_boxdm.dm
@@ -7,7 +7,7 @@
 	name = "ore box"
 	desc = "A heavy wooden box, which can be filled with a lot of ores."
 	density = TRUE
-	pressure_resistance = 5*ONE_ATMOSPHERE
+	//pressure_resistance = 5*ONE_ATMOSPHERE
 
 /obj/structure/ore_box/attackby(obj/item/W, mob/user, params)
 	if (istype(W, /obj/item/stack/ore))
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 30f8dbaebf2..b2b031b542b 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -10,7 +10,7 @@
 	mob_size = MOB_SIZE_LARGE
 	layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles
 	plane = GAME_PLANE_UPPER_FOV_HIDDEN
-	pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper.
+	//pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper.
 	butcher_results = list(/obj/item/food/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3)
 
 	var/alt_inhands_file = 'icons/mob/alienqueen.dmi'
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 6426cdb8f7f..99eb8cbedc4 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -1,7 +1,7 @@
 /mob/living/carbon
 	blood_volume = BLOOD_VOLUME_NORMAL
 	gender = MALE
-	pressure_resistance = 15
+	//pressure_resistance = 15
 	hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD)
 	has_limbs = TRUE
 	held_items = list(null, null)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 102d3475e36..032d9c6180e 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -7,7 +7,7 @@
 	appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
 	hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD)
 	hud_type = /datum/hud/human
-	pressure_resistance = 25
+	//pressure_resistance = 25
 	can_buckle = TRUE
 	buckle_lying = 0
 	mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 843e37598e8..dc34e8b2802 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -3,7 +3,7 @@
 	sight = 0
 	see_in_dark = 2
 	hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD)
-	pressure_resistance = 10
+	//pressure_resistance = 10
 
 	hud_type = /datum/hud/living
 
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 7db0ef33636..29dab1be903 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -27,7 +27,7 @@
 	maxbodytemp = INFINITY
 	healable = 0
 	faction = list("cult")
-	pressure_resistance = 100
+	//pressure_resistance = 100
 	unique_name = 1
 	AIStatus = AI_OFF //normal constructs don't have AI
 	loot = list(/obj/item/ectoplasm)
diff --git a/code/modules/mob/living/simple_animal/heretic_monsters.dm b/code/modules/mob/living/simple_animal/heretic_monsters.dm
index af19683a97f..83fd0b936a7 100644
--- a/code/modules/mob/living/simple_animal/heretic_monsters.dm
+++ b/code/modules/mob/living/simple_animal/heretic_monsters.dm
@@ -26,7 +26,7 @@
 	maxbodytemp = INFINITY
 	healable = FALSE
 	movement_type = GROUND
-	pressure_resistance = 100
+	//pressure_resistance = 100
 	del_on_death = TRUE
 	deathmessage = "implodes into itself."
 	loot = list(/obj/effect/gibspawner/human)
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 839af83ffea..92605a8db3e 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -39,7 +39,7 @@
 	minbodytemp = 0
 	maxbodytemp = 1500
 	faction = list("carp")
-	pressure_resistance = 200
+	//pressure_resistance = 200
 	gold_core_spawnable = HOSTILE_SPAWN
 	/// If the carp uses random coloring
 	var/random_color = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
index 84ae852cee5..23991e03a5a 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
@@ -28,7 +28,7 @@
 	atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
 	minbodytemp = 0
 	maxbodytemp = 1500
-	pressure_resistance = 300
+	//pressure_resistance = 300
 	gold_core_spawnable = NO_SPAWN //too spooky for science
 	light_system = MOVABLE_LIGHT
 	light_range = 1 // same glowing as visible player ghosts
diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
index c7d17ea8c37..15e3cd5e87b 100644
--- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
@@ -66,7 +66,7 @@
 	minbodytemp = 0
 	maxbodytemp = 1500
 	faction = list("carp")
-	pressure_resistance = 200
+	//pressure_resistance = 200
 	/// Current time since the the last rift was activated.  If set to -1, does not increment.
 	var/riftTimer = 0
 	/// Maximum amount of time which can pass without a rift before Space Dragon despawns.
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 4f171e7cdd9..04515064f8d 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -13,7 +13,7 @@
 	plane = GAME_PLANE_FOV_HIDDEN
 	animate_movement = SLIDE_STEPS
 	hud_possible = list(ANTAG_HUD)
-	pressure_resistance = 8
+	//pressure_resistance = 8
 	mouse_drag_pointer = MOUSE_ACTIVE_POINTER
 	throwforce = 10
 	blocks_emissive = EMISSIVE_BLOCK_GENERIC
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
index 1c373b4de40..066b0235777 100644
--- a/code/modules/movespeed/modifiers/mobs.dm
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -129,3 +129,8 @@
 
 /datum/movespeed_modifier/auto_wash
 	multiplicative_slowdown = 3
+
+/datum/movespeed_modifier/atmos_pressure
+	multiplicative_slowdown = 3
+	id = MOVESPEED_ID_MOB_ATMOS_AFFLICTION
+	variable = TRUE
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index ef22e798c6a..944f8201c2f 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -4,7 +4,7 @@
 	icon = 'icons/obj/bureaucracy.dmi'
 	icon_state = "folder"
 	w_class = WEIGHT_CLASS_SMALL
-	pressure_resistance = 2
+	//pressure_resistance = 2
 	resistance_flags = FLAMMABLE
 	/// The background color for tgui in hex (with a `#`)
 	var/bg_color = "#7f7f7f"
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 68b3d5dde5e..a7fe41bd0f6 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -26,7 +26,7 @@
 	w_class = WEIGHT_CLASS_TINY
 	throw_range = 1
 	throw_speed = 1
-	pressure_resistance = 0
+	//pressure_resistance = 0
 	slot_flags = ITEM_SLOT_HEAD
 	body_parts_covered = HEAD
 	resistance_flags = FLAMMABLE
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 720c4acd024..aa71b67c941 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -12,7 +12,7 @@
 	w_class = WEIGHT_CLASS_NORMAL
 	throw_speed = 3
 	throw_range = 7
-	pressure_resistance = 8
+	//pressure_resistance = 8
 	var/papertype = /obj/item/paper
 	var/total_paper = 30
 	var/list/papers = list()
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 2d9d207ac4f..47f078e3c94 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -23,7 +23,7 @@
 	throw_speed = 3
 	throw_range = 7
 	custom_materials = list(/datum/material/iron=10)
-	pressure_resistance = 2
+	//pressure_resistance = 2
 	grind_results = list(/datum/reagent/iron = 2, /datum/reagent/iodine = 1)
 	var/colour = "#000000" //what colour the ink is!
 	var/degrees = 0
@@ -309,7 +309,7 @@
 	force = 3
 	w_class = WEIGHT_CLASS_TINY
 	custom_materials = list(/datum/material/iron=10, /datum/material/diamond=100, /datum/material/titanium = 10)
-	pressure_resistance = 2
+	//pressure_resistance = 2
 	grind_results = list(/datum/reagent/iron = 2, /datum/reagent/iodine = 1)
 	tool_behaviour = TOOL_MINING //For the classic "digging out of prison with a spoon but you're in space so this analogy doesn't work" situation.
 	toolspeed = 10 //You will never willingly choose to use one of these over a shovel.
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index 2d61ca83c19..561aa52bb3d 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -9,7 +9,7 @@
 	throw_speed = 3
 	throw_range = 7
 	custom_materials = list(/datum/material/iron=60)
-	pressure_resistance = 2
+	//pressure_resistance = 2
 	attack_verb_continuous = list("stamps")
 	attack_verb_simple = list("stamp")
 
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index fb9abb17a68..98e31b31286 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -21,7 +21,7 @@
 
 /obj/machinery/field/containment/Initialize(mapload)
 	. = ..()
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 	RegisterSignal(src, COMSIG_ATOM_SINGULARITY_TRY_MOVE, .proc/block_singularity)
 	var/static/list/loc_connections = list(
 		COMSIG_ATOM_ENTERED = .proc/on_entered,
@@ -36,7 +36,7 @@
 		field_gen_2.fields -= src
 		field_gen_2 = null
 	can_atmos_pass = ATMOS_PASS_YES
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	return ..()
 
 //ATTACK HAND IGNORING PARENT RETURN VALUE
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index b37775f6610..15c3d10c2e2 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -200,7 +200,7 @@ no power level overlay is currently in the overlays list.
 /obj/machinery/field/generator/proc/turn_off()
 	active = FG_OFFLINE
 	can_atmos_pass = ATMOS_PASS_YES
-	air_update_turf(TRUE, FALSE)
+	//air_update_turf(TRUE, FALSE)
 	INVOKE_ASYNC(src, .proc/cleanup)
 	addtimer(CALLBACK(src, .proc/cool_down), 5 SECONDS)
 
@@ -276,7 +276,7 @@ no power level overlay is currently in the overlays list.
 		return
 	move_resist = INFINITY
 	can_atmos_pass = ATMOS_PASS_NO
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 	addtimer(CALLBACK(src, .proc/setup_field, 1), 1)
 	addtimer(CALLBACK(src, .proc/setup_field, 2), 2)
 	addtimer(CALLBACK(src, .proc/setup_field, 4), 3)
diff --git a/code/modules/power/supermatter/supermatter_process.dm b/code/modules/power/supermatter/supermatter_process.dm
index 3dfc5e0027f..e5f7a0e98d1 100644
--- a/code/modules/power/supermatter/supermatter_process.dm
+++ b/code/modules/power/supermatter/supermatter_process.dm
@@ -51,7 +51,7 @@
 			removed.gases[/datum/gas/oxygen][MOLES] = max(((device_energy + TCMB) - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
 			removed.garbage_collect()
 			env.merge(removed)
-			air_update_turf(FALSE, FALSE)
+			//air_update_turf(FALSE, FALSE)
 	else
 		if(takes_damage)
 			//causing damage
@@ -302,7 +302,7 @@
 	if(produces_gas)
 		removed.garbage_collect()
 		env.merge(removed)
-		air_update_turf(FALSE, FALSE)
+		//air_update_turf(FALSE, FALSE)
 
 /obj/machinery/power/supermatter_crystal/proc/psychological_examination()
 	// Defaults to a value less than 1. Over time the psyCoeff goes to 0 if
diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm
index c1a3ad037fe..1d6e9ced35a 100644
--- a/code/modules/power/turbine/turbine.dm
+++ b/code/modules/power/turbine/turbine.dm
@@ -471,7 +471,7 @@
 	//the compressor compresses down the gases from 2500 L to 1000 L
 	//the temperature and pressure rises up, you can regulate this to increase/decrease the amount of gas moved in.
 	var/compressor_work = do_calculations(input_turf_mixture, compressor.machine_gasmix, regulated = TRUE)
-	input_turf.air_update_turf(TRUE)
+	input_turf.//air_update_turf(TRUE)
 	var/compressor_pressure = max(compressor.machine_gasmix.return_pressure(), 0.01)
 
 	//the rotor moves the gases that expands from 1000 L to 3000 L, they cool down and both temperature and pressure lowers
@@ -496,7 +496,7 @@
 	add_avail(produced_energy)
 
 	turbine.machine_gasmix.pump_gas_to(output_turf.air, turbine.machine_gasmix.return_pressure())
-	output_turf.air_update_turf(TRUE)
+	output_turf.//air_update_turf(TRUE)
 
 /**
  * Handles all the calculations needed for the gases, work done, temperature increase/decrease
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 48d88b4654c..0bc8bc897a0 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -5,7 +5,7 @@
 	icon_state = "water"
 	density = TRUE
 	anchored = FALSE
-	pressure_resistance = 2*ONE_ATMOSPHERE
+	//pressure_resistance = 2*ONE_ATMOSPHERE
 	max_integrity = 300
 	///In units, how much the dispenser can hold
 	var/tank_volume = 1000
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index aca55ac9ea2..51ee0c75462 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -444,7 +444,7 @@
 	//Actually transfer the gas
 	var/datum/gas_mixture/removed = env.remove(transfer_moles)
 	air_contents.merge(removed)
-	air_update_turf(FALSE, FALSE)
+	//air_update_turf(FALSE, FALSE)
 
 	//if full enough, switch to ready mode
 	if(air_contents.return_pressure() >= SEND_PRESSURE)
diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm
index 5f24bc63241..56a14772878 100644
--- a/code/modules/recycling/disposal/construction.dm
+++ b/code/modules/recycling/disposal/construction.dm
@@ -8,7 +8,7 @@
 	icon_state = "conpipe"
 	anchored = FALSE
 	density = FALSE
-	pressure_resistance = 5*ONE_ATMOSPHERE
+	//pressure_resistance = 5*ONE_ATMOSPHERE
 	max_integrity = 200
 	var/obj/pipe_type = /obj/structure/disposalpipe/segment
 	var/pipename
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 111b2911c9e..e576126d4dd 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -375,7 +375,7 @@
 					heat_capacity = 1
 				removed.temperature = min((removed.temperature*heat_capacity + 100000)/heat_capacity, 1000)
 			env.merge(removed)
-			air_update_turf(FALSE, FALSE)
+			//air_update_turf(FALSE, FALSE)
 			investigate_log("Experimentor has released hot air.", INVESTIGATE_EXPERIMENTOR)
 			ejectItem(TRUE)
 		else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
@@ -421,7 +421,7 @@
 					heat_capacity = 1
 				removed.temperature = (removed.temperature*heat_capacity - 75000)/heat_capacity
 			env.merge(removed)
-			air_update_turf(FALSE, FALSE)
+			//air_update_turf(FALSE, FALSE)
 			investigate_log("Experimentor has released cold air.", INVESTIGATE_EXPERIMENTOR)
 			ejectItem(TRUE)
 		else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 78904de857c..bd5f34edbb5 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -106,7 +106,7 @@
 					removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000)
 
 				env.merge(removed)
-				air_update_turf(FALSE, FALSE)
+				//air_update_turf(FALSE, FALSE)
 
 /proc/fix_noid_research_servers()
 	var/list/no_id_servers = list()
diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm
index 09c22a92b08..56d2c56a8e9 100644
--- a/code/modules/research/xenobiology/crossbreeding/chilling.dm
+++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm
@@ -111,7 +111,7 @@ Chilling extracts:
 			G.gases[/datum/gas/plasma][MOLES] = 0
 			filtered = TRUE
 			G.garbage_collect()
-			T.air_update_turf(FALSE, FALSE)
+			T.//air_update_turf(FALSE, FALSE)
 	if(filtered)
 		user.visible_message(span_notice("Cracks spread throughout [src], and some air is sucked in!"))
 	else
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index 2ddc73e2527..43a0fd57ad8 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -58,9 +58,9 @@ All ShuttleMove procs go here
 	var/depth = baseturfs.len - shuttle_boundary + 1
 	newT.CopyOnTop(src, 1, depth, TRUE)
 	newT.blocks_air = TRUE
-	newT.air_update_turf(TRUE, FALSE)
+	newT.//air_update_turf(TRUE, FALSE)
 	blocks_air = TRUE
-	air_update_turf(TRUE, TRUE)
+	//air_update_turf(TRUE, TRUE)
 	if(isopenturf(newT))
 		var/turf/open/new_open = newT
 		new_open.copy_air_with_tile(src)
@@ -86,9 +86,9 @@ All ShuttleMove procs go here
 
 /turf/proc/lateShuttleMove(turf/oldT)
 	blocks_air = initial(blocks_air)
-	air_update_turf(TRUE, blocks_air)
+	//air_update_turf(TRUE, blocks_air)
 	oldT.blocks_air = initial(oldT.blocks_air)
-	oldT.air_update_turf(TRUE, oldT.blocks_air)
+	oldT.//air_update_turf(TRUE, oldT.blocks_air)
 
 
 /////////////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index 277680b8651..b88e07c23e5 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -468,8 +468,8 @@
 		var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
 		var/transfer_moles = 0
 		if(pressure_delta > 0) //cabin pressure lower than release pressure
-			if(tank_air.return_temperature() > 0)
-				transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
+			if(tank_air.temperature > 0)
+				transfer_moles = pressure_delta*cabin_air.volume/(cabin_air.temperature * R_IDEAL_GAS_EQUATION)
 				var/datum/gas_mixture/removed = tank_air.remove(transfer_moles)
 				cabin_air.merge(removed)
 		else if(pressure_delta < 0) //cabin pressure higher than release pressure
@@ -478,7 +478,7 @@
 			if(t_air)
 				pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
 			if(pressure_delta > 0) //if location pressure is lower than cabin pressure
-				transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
+				transfer_moles = pressure_delta*cabin_air.volume/(cabin_air.temperature * R_IDEAL_GAS_EQUATION)
 				var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
 				if(t_air)
 					t_air.merge(removed)
@@ -1242,7 +1242,7 @@
 ///fetches temp of the gas mixture we are using
 /obj/vehicle/sealed/mecha/return_temperature()
 	var/datum/gas_mixture/air = return_air()
-	return air?.return_temperature()
+	return air?.temperature
 
 
 
diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
index 276138e8b2d..d1b9f463f5f 100644
--- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm
@@ -447,7 +447,7 @@
 	if(!chassis || !chassis.internal_tank)
 		return FALSE
 	var/datum/gas_mixture/our_mix = chassis.internal_tank.return_air()
-	var/moles = our_mix.total_moles()
+	var/moles = our_mix.total_moles
 	if(moles < move_cost)
 		our_mix.remove(moles)
 		return FALSE
diff --git a/code/modules/wiremod/components/sensors/pressuresensor.dm b/code/modules/wiremod/components/sensors/pressuresensor.dm
index 06e45cc688a..c0509aac6f2 100644
--- a/code/modules/wiremod/components/sensors/pressuresensor.dm
+++ b/code/modules/wiremod/components/sensors/pressuresensor.dm
@@ -24,7 +24,7 @@
 		return
 	//Get environment info
 	var/datum/gas_mixture/environment = location.return_air()
-	var/total_moles = environment.total_moles()
+	var/total_moles = environment.total_moles
 	var/pressure = environment.return_pressure()
 	if(total_moles)
 		//If there's atmos, return pressure
diff --git a/code/modules/wiremod/components/sensors/tempsensor.dm b/code/modules/wiremod/components/sensors/tempsensor.dm
index e88d5dea1c3..c84282582cb 100644
--- a/code/modules/wiremod/components/sensors/tempsensor.dm
+++ b/code/modules/wiremod/components/sensors/tempsensor.dm
@@ -24,7 +24,7 @@
 		return
 	//Get environment info
 	var/datum/gas_mixture/environment = location.return_air()
-	var/total_moles = environment.total_moles()
+	var/total_moles = environment.total_moles
 	if(total_moles)
 		//If there's atmos, return temperature
 		result.set_output(round(environment.temperature,1))
diff --git a/tgstation.dme b/tgstation.dme
index a0d92e739f5..70c7b2536a0 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -194,6 +194,8 @@
 #include "code\__DEFINES\atmospherics\atmos_mapping_helpers.dm"
 #include "code\__DEFINES\atmospherics\atmos_mob_interaction.dm"
 #include "code\__DEFINES\atmospherics\atmos_piping.dm"
+#include "code\__DEFINES\atmospherics\ZAS.dm"
+#include "code\__DEFINES\atmospherics\ZAS_math.dm"
 #include "code\__DEFINES\dcs\flags.dm"
 #include "code\__DEFINES\dcs\helpers.dm"
 #include "code\__DEFINES\dcs\signals\signals_action.dm"
@@ -448,6 +450,7 @@
 #include "code\controllers\subsystem\achievements.dm"
 #include "code\controllers\subsystem\addiction.dm"
 #include "code\controllers\subsystem\ai_controllers.dm"
+#include "code\controllers\subsystem\airflow.dm"
 //#include "code\controllers\subsystem\air.dm"
 #include "code\controllers\subsystem\ambience.dm"
 #include "code\controllers\subsystem\assets.dm"
@@ -1389,7 +1392,7 @@
 #include "code\game\objects\effects\effect_system\effects_smoke.dm"
 #include "code\game\objects\effects\effect_system\effects_sparks.dm"
 #include "code\game\objects\effects\effect_system\effects_water.dm"
-#include "code\game\objects\effects\spawners\bombspawner.dm"
+//#include "code\game\objects\effects\spawners\bombspawner.dm"
 #include "code\game\objects\effects\spawners\costume.dm"
 #include "code\game\objects\effects\spawners\gibspawner.dm"
 #include "code\game\objects\effects\spawners\structure.dm"
@@ -2343,16 +2346,19 @@
 #include "code\modules\atmospherics\ZAS\Connection.dm"
 #include "code\modules\atmospherics\ZAS\ConnectionGroup.dm"
 #include "code\modules\atmospherics\ZAS\ConnectionManager.dm"
+#include "code\modules\atmospherics\ZAS\ZAS_Settings.dm"
 #include "code\modules\atmospherics\ZAS\Debug.dm"
 #include "code\modules\atmospherics\ZAS\Diagnostic.dm"
 #include "code\modules\atmospherics\ZAS\Fire.dm"
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\simple.dm"
 #include "code\modules\atmospherics\ZAS\Turf.dm"
+#include "code\modules\atmospherics\ZAS\XGM\gases.dm"
 #include "code\modules\atmospherics\ZAS\Zone.dm"
 #include "code\modules\atmospherics\ZAS\_docs.dm"
 #include "code\modules\atmospherics\ZAS\Airflow.dm"
 #include "code\modules\atmospherics\ZAS\Atom.dm"
 #include "code\modules\atmospherics\ZAS\Plasma.dm"
+#include "code\modules\atmospherics\ZAS\XGM\xgm_gas_mixture.dm"
 #include "code\modules\atmospherics\ZAS\XGM\gas_data.dm"
 #include "code\modules\atmospherics\machinery\portable\canister.dm"
 #include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm"

From 7a165cb586ef959e1a7c7f430e4a45c6559bdd10 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 14 Apr 2022 22:19:46 -0400
Subject: [PATCH 003/200] Under 1000 errors

---
 tgstation.dme | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tgstation.dme b/tgstation.dme
index 70c7b2536a0..ef7f70abfe1 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2290,7 +2290,7 @@
 */
 #include "code\modules\atmospherics\machinery\airalarm.dm"
 #include "code\modules\atmospherics\machinery\atmosmachinery.dm"
-#include "code\modules\atmospherics\machinery\bluespace_vendor.dm"
+//#include "code\modules\atmospherics\machinery\bluespace_vendor.dm"
 #include "code\modules\atmospherics\machinery\datum_pipeline.dm"
 #include "code\modules\atmospherics\machinery\components\components_base.dm"
 #include "code\modules\atmospherics\machinery\components\tank.dm"
@@ -2305,8 +2305,10 @@
 #include "code\modules\atmospherics\machinery\components\binary_devices\thermomachine.dm"
 #include "code\modules\atmospherics\machinery\components\binary_devices\valve.dm"
 #include "code\modules\atmospherics\machinery\components\binary_devices\volume_pump.dm"
+/*
 #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer.dm"
 #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer_reactions.dm"
+*/
 /*
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_core.dm"
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_defines.dm"
@@ -2337,6 +2339,7 @@
 #include "code\modules\atmospherics\machinery\pipes\layermanifold.dm"
 #include "code\modules\atmospherics\machinery\pipes\mapping.dm"
 #include "code\modules\atmospherics\machinery\pipes\multiz.dm"
+#include "code\modules\atmospherics\ZAS\atmos_primitives.dm"
 #include "code\modules\atmospherics\machinery\pipes\pipes.dm"
 #include "code\modules\atmospherics\machinery\pipes\smart.dm"
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\he_pipes.dm"

From 164fbc39c1a3daa178b8561946164d523bb000d2 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 15 Apr 2022 16:49:02 -0400
Subject: [PATCH 004/200] Checkpoint!

---
 code/__DEFINES/atmospherics/ZAS.dm            |  63 +-
 code/__DEFINES/atmospherics/atmos_helpers.dm  |   4 +-
 code/__DEFINES/atmospherics/temperature.dm    |  22 +
 code/__DEFINES/flags.dm                       |   8 +-
 code/__DEFINES/subsystems.dm                  |   1 +
 code/__HELPERS/_logging.dm                    |   2 +-
 code/__HELPERS/atmospherics.dm                |   2 +-
 code/__HELPERS/global_lists.dm                |   2 +-
 .../subsystem/processing/processing.dm        |   3 +-
 .../subsystem/processing/temperature.dm       |   5 +
 code/controllers/subsystem/zas.dm             |  21 +-
 code/datums/components/gas_leaker.dm          |   4 +-
 code/game/atoms.dm                            |   3 +
 code/game/machinery/computer/arcade/arcade.dm |   2 +-
 .../effects/effect_system/effects_foam.dm     |   2 +-
 .../effects/effect_system/effects_smoke.dm    |   6 +-
 code/game/objects/effects/glowshroom.dm       |   5 +-
 code/game/objects/items.dm                    |   2 +-
 code/game/objects/items/flamethrower.dm       |  27 +-
 code/game/objects/items/tanks/tank_types.dm   |  26 +-
 code/game/objects/items/tanks/tanks.dm        |   1 +
 code/game/objects/objs.dm                     |   3 +
 code/game/objects/structures/window.dm        |   3 +-
 code/modules/admin/verbs/fix_air.dm           |  69 ++-
 code/modules/assembly/bomb.dm                 |   6 +-
 code/modules/atmospherics/ZAS/Airflow.dm      |   3 +-
 code/modules/atmospherics/ZAS/Fire.dm         | 104 ++--
 code/modules/atmospherics/ZAS/Plasma.dm       |   8 +-
 code/modules/atmospherics/ZAS/Temperature.dm  |  58 ++
 code/modules/atmospherics/ZAS/Turf.dm         |   8 +-
 code/modules/atmospherics/ZAS/XGM/gas_data.dm |  48 +-
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  94 +--
 code/modules/atmospherics/ZAS/Zone.dm         |  15 +-
 .../atmospherics/ZAS/atmos_primitives.dm      | 537 ++++++++++++++++++
 .../atmospherics/machinery/airalarm.dm        |  39 +-
 .../components/binary_devices/circulator.dm   |   2 +-
 .../components/binary_devices/passive_gate.dm |   3 +-
 .../binary_devices/pressure_valve.dm          |   3 +-
 .../components/binary_devices/pump.dm         |   4 +-
 .../binary_devices/temperature_gate.dm        |   6 +-
 .../binary_devices/thermomachine.dm           |   2 +-
 .../machinery/components/components_base.dm   |   4 +-
 .../components/electrolyzer/electrolyzer.dm   |   4 +-
 .../atmospherics/machinery/components/tank.dm |   8 +-
 .../components/trinary_devices/filter.dm      |  13 +-
 .../components/unary_devices/cryo.dm          |   9 +-
 .../unary_devices/heat_exchanger.dm           |   6 +-
 .../components/unary_devices/vent_scrubber.dm |  53 +-
 .../atmospherics/machinery/datum_pipeline.dm  |  75 +--
 .../atmospherics/machinery/other/meter.dm     |   8 +-
 .../atmospherics/machinery/other/miner.dm     |   4 +-
 .../machinery/pipes/layermanifold.dm          |   2 +-
 .../atmospherics/machinery/pipes/pipes.dm     |   2 +-
 .../atmospherics/machinery/portable/pump.dm   |  41 +-
 .../machinery/portable/scrubber.dm            |  37 +-
 code/modules/awaymissions/away_props.dm       |  18 -
 code/modules/cargo/exports/large_objects.dm   |  24 +-
 tgstation.dme                                 |   5 +-
 58 files changed, 1067 insertions(+), 472 deletions(-)
 create mode 100644 code/__DEFINES/atmospherics/temperature.dm
 create mode 100644 code/controllers/subsystem/processing/temperature.dm
 create mode 100644 code/modules/atmospherics/ZAS/Temperature.dm
 create mode 100644 code/modules/atmospherics/ZAS/atmos_primitives.dm

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index b3e9fbcade6..364158806bf 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -202,8 +202,8 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
 #define ATMOSTANK_NITROGEN      90000 // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
 #define ATMOSTANK_OXYGEN        50000 // O2 is also important for airmix, but not as much as N2 as it's only 21% of it.
 #define ATMOSTANK_CO2           60000 // CO2 is used for the GUP, Charon, and Torch as the primary fuel propellant, and we need lots to stick around.
-#define ATMOSTANK_PHORON        25000
-#define ATMOSTANK_PHORON_FUEL	15000
+#define ATMOSTANK_PLASMA        25000
+#define ATMOSTANK_PLASMA_FUEL	15000
 #define ATMOSTANK_HYDROGEN      50000
 #define ATMOSTANK_HYDROGEN_FUEL 25000
 #define ATMOSTANK_NITROUSOXIDE  10000 // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
@@ -235,7 +235,8 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
 #define GAS_STEAM				"water"
 #define GAS_PLASMA				"phoron"
 
-#define ALL_GASES list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA)
+GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
+GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
 
 GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
 	     2,  1,  3,  8, 10,  9, 11,  4,  6,  5,  7, 12, 14, 13, 15,
@@ -244,25 +245,37 @@ GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
 	48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63
 ))
 
-#define ATOM_IS_TEMPERATURE_SENSITIVE(A) (A && !QDELETED(A) && !(A.atom_flags & ATOM_FLAG_NO_TEMP_CHANGE))
-#define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5
-#define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25
-
-#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
-	_atom.temperature = _temp; \
-	if(_atom.reagents) { \
-		HANDLE_REACTIONS(_atom.reagents); \
-	} \
-	QUEUE_TEMPERATURE_ATOMS(_atom);
-
-#define QUEUE_TEMPERATURE_ATOMS(_atoms) \
-	if(islist(_atoms)) { \
-		for(var/thing in _atoms) { \
-			var/atom/A = thing; \
-			if(ATOM_IS_TEMPERATURE_SENSITIVE(A)) { \
-				SStemperature.processing[A] = TRUE; \
-			} \
-		} \
-	} else if(ATOM_IS_TEMPERATURE_SENSITIVE(_atoms)) { \
-		SStemperature.processing[_atoms] = TRUE; \
-	}
+// The flow rate/effectiveness of various atmos devices is limited by their internal volume,
+// so for many atmos devices these will control maximum flow rates in L/s.
+#define ATMOS_DEFAULT_VOLUME_PUMP   200 // Liters.
+#define ATMOS_DEFAULT_VOLUME_FILTER 500 // L.
+#define ATMOS_DEFAULT_VOLUME_MIXER  500 // L.
+#define ATMOS_DEFAULT_VOLUME_PIPE   70  // L.
+
+// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
+/proc/heat2color(temp)
+	return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp))
+
+/proc/heat2color_r(temp)
+	temp /= 100
+	if(temp <= 66)
+		. = 255
+	else
+		. = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592))
+
+/proc/heat2color_g(temp)
+	temp /= 100
+	if(temp <= 66)
+		. = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661))
+	else
+		. = max(0, min(255, 288.1221695283 * ((temp - 60) ** -0.0755148492)))
+
+/proc/heat2color_b(temp)
+	temp /= 100
+	if(temp >= 66)
+		. = 255
+	else
+		if(temp <= 16)
+			. = 0
+		else
+			. = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307))
diff --git a/code/__DEFINES/atmospherics/atmos_helpers.dm b/code/__DEFINES/atmospherics/atmos_helpers.dm
index 433ecd3c7f7..20679527175 100644
--- a/code/__DEFINES/atmospherics/atmos_helpers.dm
+++ b/code/__DEFINES/atmospherics/atmos_helpers.dm
@@ -57,7 +57,9 @@ GLOBAL_LIST_INIT(nonoverlaying_gases, typecache_of_gases_with_no_overlays())
 		var/_GAS_OVERLAY = _GAS_META[META_GAS_OVERLAY];\
 		out_var += _GAS_OVERLAY[min(TOTAL_VISIBLE_STATES, CEILING(_GAS[MOLES] / MOLES_GAS_VISIBLE_STEP, 1))];\
 	}
-
+#define GAS_OVERLAYS(gases, outvar)\
+	out_var = list();\
+	for(var/_ID in gases)
 #ifdef TESTING
 GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
 #define CALCULATE_ADJACENT_TURFS(T, state) if (SSair.adjacent_rebuild[T]) { GLOB.atmos_adjacent_savings[1] += 1 } else { GLOB.atmos_adjacent_savings[2] += 1; SSair.adjacent_rebuild[T] = state}
diff --git a/code/__DEFINES/atmospherics/temperature.dm b/code/__DEFINES/atmospherics/temperature.dm
new file mode 100644
index 00000000000..d86e844aab9
--- /dev/null
+++ b/code/__DEFINES/atmospherics/temperature.dm
@@ -0,0 +1,22 @@
+#define ATOM_IS_TEMPERATURE_SENSITIVE(A) (A && !QDELETED(A) && !(A.flags_2 & NO_TEMP_CHANGE_2))
+#define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5
+#define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25
+
+#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
+	_atom.temperature = _temp; \
+	if(_atom.reagents) { \
+		START_PROCESSING(SSreagents, _atom.reagents); \
+	} \
+	QUEUE_TEMPERATURE_ATOMS(_atom);
+
+#define QUEUE_TEMPERATURE_ATOMS(_atoms) \
+	if(islist(_atoms)) { \
+		for(var/thing in _atoms) { \
+			var/atom/A = thing; \
+			if(ATOM_IS_TEMPERATURE_SENSITIVE(A)) { \
+				START_PROCESSING(SStemperature, A); \
+			} \
+		} \
+	} else if(ATOM_IS_TEMPERATURE_SENSITIVE(_atoms)) { \
+		START_PROCESSING(SStemperature, _atoms); \
+	}
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index 389a4f2681b..b1139fcf476 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -58,8 +58,14 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
 #define IS_PLAYER_COLORABLE_1 (1<<21)
 /// Whether or not this atom has contextual screentips when hovered OVER
 #define HAS_CONTEXTUAL_SCREENTIPS_1 (1<<22)
+
+
+//OH YEAH BABY FLAGS_2 HERE WE GO
 ///Plasma Contamination
-#define CONTAMINATED_1 (1<<23)
+#define CONTAMINATED_2 (1<<0)
+///Temperature does no change
+#define NO_TEMP_CHANGE_2 (1<<1)
+
 
 // Update flags for [/atom/proc/update_appearance]
 /// Update the atom's name
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 44e17d7c122..75bdba976db 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -174,6 +174,7 @@
 #define FIRE_PRIORITY_GARBAGE 15
 #define FIRE_PRIORITY_DATABASE 16
 #define FIRE_PRIORITY_AIRFLOW 17
+#define FIRE_PRIORITY_TEMPERATURE 18
 #define FIRE_PRIORITY_WET_FLOORS 20
 #define FIRE_PRIORITY_AIR 20
 #define FIRE_PRIORITY_NPC 20
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index bb72d342457..5c247ef1fc4 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
 /proc/log_atmos(text, datum/gas_mixture/mix)
 	var/message = text
 	message += "TEMP=[mix.return_temperature()],MOL=[mix.total_moles()],VOL=[mix.volume]"
-	for(var/key in mix.gas)
+	for(var/key in mix.get_gases())
 		message += "[key]=[mix.get_gas(key)];"
 	log_game(message)
 
diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index 2635c68c148..8dc421e33d7 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -41,7 +41,7 @@
 	)
 	if(!gasmix)
 		return
-	for(var/gas_path in gasmix.gas)
+	for(var/gas_path in gasmix.get_gases())
 		.["gases"] += list(list(
 			"[gas_path]",
 			"[gas_path]",
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 3c3bc0ee86c..02fd62bae6d 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -103,7 +103,7 @@ GLOBAL_LIST_INIT(WALLITEMS_INTERIOR, typecacheof(list(
 	/obj/item/radio/intercom,
 	/obj/item/storage/secure/safe,
 	/obj/machinery/airalarm,
-	/obj/machinery/bluespace_vendor,
+	///obj/machinery/bluespace_vendor,
 	/obj/machinery/newscaster,
 	/obj/machinery/button,
 	/obj/machinery/computer/security/telescreen,
diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm
index 058645da495..8d59e8318ea 100644
--- a/code/controllers/subsystem/processing/processing.dm
+++ b/code/controllers/subsystem/processing/processing.dm
@@ -9,6 +9,7 @@ SUBSYSTEM_DEF(processing)
 	var/stat_tag = "P" //Used for logging
 	var/list/processing = list()
 	var/list/currentrun = list()
+	var/const/process_proc = /datum/proc/Process //Francinum is going to KILL ME
 
 /datum/controller/subsystem/processing/stat_entry(msg)
 	msg = "[stat_tag]:[length(processing)]"
@@ -25,7 +26,7 @@ SUBSYSTEM_DEF(processing)
 		current_run.len--
 		if(QDELETED(thing))
 			processing -= thing
-		else if(thing.process(wait * 0.1) == PROCESS_KILL)
+		else if(call(thing, process_proc)(wait * 0.1) == PROCESS_KILL) //Fran is REALLY going to kill me
 			// fully stop so that a future START_PROCESSING will work
 			STOP_PROCESSING(src, thing)
 		if (MC_TICK_CHECK)
diff --git a/code/controllers/subsystem/processing/temperature.dm b/code/controllers/subsystem/processing/temperature.dm
new file mode 100644
index 00000000000..772a2086a57
--- /dev/null
+++ b/code/controllers/subsystem/processing/temperature.dm
@@ -0,0 +1,5 @@
+PROCESSING_SUBSYSTEM_DEF(temperature)
+	name = "Temperature"
+	priority = FIRE_PRIORITY_TEMPERATURE
+	wait = 5 SECONDS
+	process_proc = /atom/proc/ProcessAtomTemperature
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 26a3631b8e0..1e22bff9a18 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -69,8 +69,8 @@ SUBSYSTEM_DEF(zas)
 
 	//The variable setting controller
 	var/datum/zas_controller/settings
-	//XGM gas data
-	var/datum/xgm_gas_data/gas_data
+	//A reference to the global var
+	var/datum/xgm_gas_data/gas_data = xgm_gas_data
 
 	//Geometry lists
 	var/list/zones = list()
@@ -80,6 +80,7 @@ SUBSYSTEM_DEF(zas)
 	var/list/networks = list()
 	var/list/rebuild_queue = list()
 	var/list/expansion_queue = list()
+	var/list/pipe_init_dirs_cache = list()
 
 	//Atmos Machines
 	var/list/atmos_machinery = list()
@@ -170,13 +171,7 @@ SUBSYSTEM_DEF(zas)
 
 		CHECK_TICK
 
-	to_chat(world, span_boldannounce(
-		{"Total Simulated Turfs: [simulated_turf_count]
-		Total Zones: [zones.len]
-		Total Edges: [edges.len]
-		Total Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]
-		Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"}
-	))
+	to_chat(world, span_boldannounce("Total Simulated Turfs: [simulated_turf_count]\nTotal Zones: [zones.len]\nTotal Edges: [edges.len]\nTotal Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]\nTotal Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"))
 
 	to_chat(world, span_boldannounce("Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
 
@@ -293,7 +288,7 @@ SUBSYSTEM_DEF(zas)
 	curr_hotspot = processing_hotspots
 	if(current_process == SSZAS_HOTSPOTS)
 		while (curr_hotspot.len)
-			var/obj/fire/F = curr_hotspot[curr_hotspot.len]
+			var/obj/effect/hotspot/F = curr_hotspot[curr_hotspot.len]
 			curr_hotspot.len--
 
 			F.Process()
@@ -372,6 +367,12 @@ SUBSYSTEM_DEF(zas)
 	new_packet[SSZAS_REBUILD_QUEUE] = list(starting_point)
 	expansion_queue += list(new_packet)
 
+/datum/controller/subsystem/zas/proc/remove_from_expansion(datum/pipeline/line)
+	for(var/list/packet in expansion_queue)
+		if(packet[SSZAS_REBUILD_PIPELINE] == line)
+			expansion_queue -= packet
+			return
+
 /datum/controller/subsystem/zas/proc/add_zone(zone/z)
 	zones += z
 	z.name = "Zone [next_id++]"
diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm
index b5977d93bd5..f18a8cdd0d8 100644
--- a/code/datums/components/gas_leaker.dm
+++ b/code/datums/components/gas_leaker.dm
@@ -76,9 +76,11 @@
 	if(current_integrity > master.max_integrity * integrity_leak_percent)
 		return PROCESS_KILL
 	var/turf/location = get_turf(master)
+	var/datum/gas_mixture/open_air = location.return_air()
 	var/true_rate = (1 - (current_integrity / master.max_integrity)) * leak_rate
 	for(var/datum/gas_mixture/mix as anything in airs)
-		mix.mingle_with_turf(get_turf(parent), true_rate)//Not sure this is the best way to do this buuuuuut, ZASSED!
+		mix.leak_to_enviroment(open_air)
+
 
 #undef PROCESS_OBJ
 #undef PROCESS_MACHINE
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 8c5ba744de4..6fb8041ed77 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -17,6 +17,9 @@
 
 	///First atom flags var
 	var/flags_1 = NONE
+	///Second atom flags var
+	var/flags_2 = NONE
+
 	///Intearaction flags
 	var/interaction_flags_atom = NONE
 
diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm
index 1f6e3ecb07d..49695564831 100644
--- a/code/game/machinery/computer/arcade/arcade.dm
+++ b/code/game/machinery/computer/arcade/arcade.dm
@@ -550,7 +550,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
 			playsound(loc, 'sound/arcade/win.ogg', 50, TRUE)
 
 			if(obj_flags & EMAGGED)
-				new /obj/effect/spawner/newbomb/plasma(loc, /obj/item/assembly/timer)
+				//new /obj/effect/spawner/newbomb/plasma(loc, /obj/item/assembly/timer)
 				new /obj/item/clothing/head/collectable/petehat(loc)
 				message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.")
 				log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.")
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 80a9ab9b5ba..b4a27778235 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -47,7 +47,7 @@
 		var/datum/gas_mixture/G = T.air
 		if(G.get_gas(GAS_PLASMA))
 			var/plas_amt = min(30, G.get_gas(GAS_PLASMA)) //Absorb some plasma
-			G.remove_gas(GAS_PLASMA, plas_amt)
+			G.adjust_gas(GAS_PLASMA, -plas_amt)
 			absorbed_plasma += plas_amt
 		if(G.temperature > T20C)
 			G.temperature = max(G.temperature/2,T20C)
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index 75308cce91a..5eb1ba1b59f 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -77,7 +77,7 @@
 	if(!t_loc)
 		return
 	var/list/newsmokes = list()
-	for(var/turf/T in t_loc.get_atmos_adjacent_turfs())
+	for(var/turf/T in t_loc.get_adjacent_open_turfs())
 		var/obj/effect/particle_effect/smoke/foundsmoke = locate() in T //Don't spread smoke where there's already smoke!
 		if(foundsmoke)
 			continue
@@ -177,8 +177,8 @@
 			for(var/obj/effect/hotspot/H in T)
 				qdel(H)
 			if(G.get_gas(GAS_PLASMA))
-				G.add_gas(GAS_NITROGEN, G.get_gas(GAS_PLASMA))
-				G.remove_gas(GAS_PLASMA, G.gas[GAS_PLASMA])
+				G.adjust_gas(GAS_NITROGEN, G.get_gas(GAS_PLASMA))
+				G.adjust_gas(GAS_PLASMA, -G.gas[GAS_PLASMA])
 		if (weldvents)
 			for(var/obj/machinery/atmospherics/components/unary/U in T)
 				if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber.
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 505caab018b..91d64c25c76 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -136,7 +136,8 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
 
 /obj/structure/glowshroom/proc/Spread()
 	var/turf/ownturf = get_turf(src)
-	if(!TURF_SHARES(ownturf)) //If we are in a 1x1 room
+	var/list/turf/shares = ownturf.get_adjacent_open_turfs()
+	if(!length(shares)) //If we are in a 1x1 room
 		return //Deal with it not now
 
 	var/list/possible_locs = list()
@@ -146,7 +147,7 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
 	for(var/turf/open/floor/earth in oview(2,src))
 		if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs))
 			continue
-		if(!TURF_SHARES(earth))
+		if(!length(earth.get_adjacent_open_turfs()))
 			continue
 		possible_locs += earth
 
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index d32d35ae8dd..d7945bc10a6 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -82,7 +82,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e
 	var/stealthy_audio = FALSE
 
 	///How large is the object, used for stuff like whether it can fit in backpacks or not
-	var/w_class = WEIGHT_CLASS_NORMAL
+	w_class = WEIGHT_CLASS_NORMAL
 	///This is used to determine on which slots an item can fit.
 	var/slot_flags = 0
 	pass_flags = PASSTABLE
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index c1234098dfd..7fb83064e08 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -205,10 +205,7 @@
 		/*var/list/turfs_sharing_with_prev = previousturf.TryGetNonDenseNeighbour()
 		if(!(T in turfs_sharing_with_prev))
 			break*/
-		if(igniter)
-			igniter.ignite_turf(src,T)
-		else
-			default_ignite(T)
+		ignite_turf(src,T)
 		sleep(1)
 		previousturf = T
 	operating = FALSE
@@ -217,17 +214,17 @@
 			attack_self(M)
 
 
-/obj/item/flamethrower/proc/default_ignite(turf/target, release_amount = 0.05)
+/obj/item/flamethrower/proc/ignite_turf(turf/target, release_amount = 5)
 	//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/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 //Suffering
+	var/datum/gas_mixture/air_transfer = ptank.return_air().remove_ratio(release_amount)
+	//air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE
+	new/obj/effect/decal/cleanable/oil(target,air_transfer.get_by_flag(XGM_GAS_FUEL),get_dir(loc,target))
+	air_transfer.remove_by_flag(XGM_GAS_FUEL, 0)
 	target.assume_air(air_transfer)
 	//Burn it based on transfered gas
-	target.hotspot_expose((tank_mix.temperature*2) + 380,500)
+	//target.hotspot_expose(part4.air_contents.temperature*2,300)
+	target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE
 	//location.hotspot_expose(1000,500,1)
 
 /obj/item/flamethrower/Initialize(mapload)
@@ -257,7 +254,7 @@
 		owner.visible_message(span_danger("\The [attack_text] hits the fuel tank on [owner]'s [name], rupturing it! What a shot!"))
 		var/turf/target_turf = get_turf(owner)
 		log_game("A projectile ([hitby]) detonated a flamethrower tank held by [key_name(owner)] at [COORD(target_turf)]")
-		igniter.ignite_turf(src,target_turf, release_amount = 100)
+		ignite_turf(src,target_turf, release_amount = 100)
 		qdel(ptank)
 		return 1 //It hit the flamethrower, not them
 
@@ -265,15 +262,11 @@
 /obj/item/assembly/igniter/proc/flamethrower_process(turf/open/location)
 	location.hotspot_expose(heat,2)
 
-/obj/item/assembly/igniter/proc/ignite_turf(obj/item/flamethrower/F,turf/open/location,release_amount = 0.05)
-	F.default_ignite(location,release_amount)
-
 /obj/item/flamethrower/proc/instant_refill()
 	SIGNAL_HANDLER
 	if(ptank)
 		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)
+		tank_mix.gas[GAS_PLASMA] = (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/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm
index cd9eb15add2..4e3a3eab4ed 100644
--- a/code/game/objects/items/tanks/tank_types.dm
+++ b/code/game/objects/items/tanks/tank_types.dm
@@ -22,8 +22,7 @@
 
 
 /obj/item/tank/internals/oxygen/populate_gas()
-	air_contents.assert_gas(/datum/gas/oxygen)
-	air_contents.gases[/datum/gas/oxygen][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjust_gas(GAS_OXYGEN,(6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 
 /obj/item/tank/internals/oxygen/yellow
@@ -53,9 +52,8 @@
 	force = 10
 
 /obj/item/tank/internals/anesthetic/populate_gas()
-	air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide)
-	air_contents.gases[/datum/gas/oxygen][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
-	air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD
+	air_contents.adjust_gas(GAS_OXYGEN,(3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD)
+	air_contents.adjust_gas(GAS_NITROGEN, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD)
 
 /*
  * Plasma
@@ -72,8 +70,7 @@
 
 
 /obj/item/tank/internals/plasma/populate_gas()
-	air_contents.assert_gas(/datum/gas/plasma)
-	air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjust_gas(GAS_PLASMA, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, params)
 	if(istype(W, /obj/item/flamethrower))
@@ -89,8 +86,7 @@
 		return ..()
 
 /obj/item/tank/internals/plasma/full/populate_gas()
-	air_contents.assert_gas(/datum/gas/plasma)
-	air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjust_gas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasma/empty/populate_gas()
 	return
@@ -109,12 +105,10 @@
 	distribute_pressure = TANK_PLASMAMAN_RELEASE_PRESSURE
 
 /obj/item/tank/internals/plasmaman/populate_gas()
-	air_contents.assert_gas(/datum/gas/plasma)
-	air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjust_gas(GAS_PLASMA, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasmaman/full/populate_gas()
-	air_contents.assert_gas(/datum/gas/plasma)
-	air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjust_gas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 
 /obj/item/tank/internals/plasmaman/belt
@@ -129,8 +123,7 @@
 	w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
 
 /obj/item/tank/internals/plasmaman/belt/full/populate_gas()
-	air_contents.assert_gas(/datum/gas/plasma)
-	air_contents.gases[/datum/gas/plasma][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjust_gas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasmaman/belt/empty/populate_gas()
 	return
@@ -156,8 +149,7 @@
 
 
 /obj/item/tank/internals/emergency_oxygen/populate_gas()
-	air_contents.assert_gas(/datum/gas/oxygen)
-	air_contents.gases[/datum/gas/oxygen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjust_gas(GAS_OXYGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 
 /obj/item/tank/internals/emergency_oxygen/empty/populate_gas()
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index f2bab55a201..c69e23ee429 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -222,6 +222,7 @@
 	return air_contents.remove(amount)
 
 /obj/item/tank/return_air()
+	RETURN_TYPE(/datum/gas_mixture)
 	START_PROCESSING(SSobj, src)
 	return air_contents
 
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 288ec91c7c3..5742bd4febb 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -30,6 +30,9 @@
 
 	vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace.
 
+	///How large is the object, used for stuff like whether it can fit in backpacks or not
+	var/w_class = null
+
 	/// Map tag for something.  Tired of it being used on snowflake items.  Moved here for some semblance of a standard.
 	/// Next pr after the network fix will have me refactor door interactions, so help me god.
 	var/id_tag = null
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 6a787119060..3fa1b100076 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -331,8 +331,9 @@
 /obj/structure/window/Move()
 	var/turf/T = loc
 	. = ..()
+	/*
 	if(anchored)
-		move_update_air(T)
+		move_update_air(T)*/
 
 /obj/structure/window/can_atmos_pass(turf/T, vertical = FALSE)
 	if(!anchored || !density)
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index d1f535cb0f6..67f0f737e03 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -1,21 +1,50 @@
-// Proc taken from yogstation, credit to nichlas0010 for the original
-/client/proc/fix_air(turf/open/T in world)
-	set name = "Fix Air"
-	set category = "Admin.Game"
-	set desc = "Fixes air in specified radius."
-
-	if(!holder)
-		to_chat(src, "Only administrators may use this command.", confidential = TRUE)
+//Lifted 1:1 from Baystation
+/client/proc/fixatmos()
+	set category = "Admin"
+	set name = "Fix Atmospherics Grief"
+
+	if(!check_rights(R_ADMIN|R_DEBUG)) return
+
+	if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the map is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No")
 		return
-	if(check_rights(R_ADMIN,1))
-		var/range=input("Enter range:","Num",2) as num
-		message_admins("[key_name_admin(usr)] fixed air with range [range] in area [T.loc.name]")
-		log_game("[key_name_admin(usr)] fixed air with range [range] in area [T.loc.name]")
-		var/datum/gas_mixture/GM = new
-		for(var/turf/open/F in range(range,T))
-			if(F.blocks_air)
-			//skip walls
-				continue
-			GM.parse_gas_string(F.initial_gas_mix)
-			F.copy_air(GM)
-			F.update_visuals()
+
+	log_admin("Full atmosphere reset initiated by [usr].")
+	to_world("<span class = 'danger'>Initiating restart of atmosphere. The server may lag a bit.</span>")
+	sleep(10)
+	var/current_time = world.timeofday
+
+	// Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes.
+	for(var/obj/machinery/power/supermatter/S in SSmachines.machinery)
+		S.power = 0
+	to_chat(usr, "\[1/5\] - Supermatter depowered")
+
+	// Remove all gases from all pipenets
+	for(var/net in SSmachines.pipenets)
+		var/datum/pipe_network/PN = net
+		for(var/datum/gas_mixture/G in PN.gases)
+			G.gas = list()
+			G.update_values()
+
+	to_chat(usr, "\[2/5\] - All pipenets purged of gas.")
+
+	// Delete all zones.
+	for(var/zone/Z in world)
+		Z.c_invalidate()
+
+	to_chat(usr, "\[3/5\] - All ZAS Zones removed.")
+
+	var/list/unsorted_overlays = list()
+	for(var/id in gas_data.tile_overlay)
+		unsorted_overlays |= gas_data.tile_overlay[id]
+
+	for(var/turf/simulated/T in world)
+		T.air = null
+		T.overlays.Remove(unsorted_overlays)
+		T.zone = null
+
+	to_chat(usr, "\[4/5\] - All turfs reset to roundstart values.")
+
+	SSair.reboot()
+
+	to_chat(usr, "\[5/5\] - ZAS Rebooted")
+	to_world("<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>")
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index d033f862b88..2c01006f9d0 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -151,10 +151,8 @@
 	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/fuel_moles = our_mix.get_gas(GAS_PLASMA) + our_mix.get_gas(GAS_OXYGEN)/6
+	var/datum/gas_mixture/bomb_mixture = our_mix.copy_from()
 	var/strength = 1
 
 	var/turf/ground_zero = get_turf(loc)
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 35fb5c34620..06ea7684d26 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -131,7 +131,6 @@ Contains helper procs for airflow, handled in /connection_group.
 	for(var/mob/M in hearers(src))
 		M.show_message("<span class='danger'>\The [src] slams into \a [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
 	playsound(src.loc, "smash.ogg", 25, 1, -1)
-	var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh
 	. = ..()
 
 /mob/living/airflow_hit(atom/A)
@@ -154,7 +153,7 @@ Contains helper procs for airflow, handled in /connection_group.
 		M.show_message("<span class='danger'>[src] slams into [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
 	playsound(src.loc, "punch", 25, 1, -1)
 	if (prob(33))
-		var/obj/effect/decal/cleanable/blood/new_splatter = new(loc)
+		loc.add_blood_DNA(return_blood_DNA())
 
 	var/b_loss = min(airflow_speed, (airborne_acceleration*2)) * SSzas.settings.airflow_damage
 
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 5f539ba0d12..409646fcbd3 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -8,7 +8,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 //#define FIREDBG
 
-/turf/var/obj/fire/fire = null
+/turf/var/obj/effect/hotspot/fire = null
 
 //Some legacy definitions so fires can be started.
 /atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -26,14 +26,14 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
 	if(fire_protection > world.time-300)
 		return 0
-	if(locate(/obj/fire) in src)
+	if(locate(/obj/effect/hotspot) in src)
 		return 1
 	var/datum/gas_mixture/air_contents = return_air()
 	if(!air_contents || exposed_temperature < PHORON_MINIMUM_BURN_TEMPERATURE)
 		return 0
 
 	var/igniting = 0
-	var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in src
+	var/obj/effect/decal/cleanable/oil/liquid = locate() in src
 
 	if(air_contents.check_combustability(liquid))
 		igniting = 1
@@ -53,7 +53,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			if(T.fire)
 				T.fire.firelevel = firelevel
 			else
-				var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
+				var/obj/effect/decal/cleanable/oil/fuel = locate() in T
 				fire_tiles -= T
 				fuel_objs -= fuel
 	else
@@ -76,13 +76,13 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	var/fuel_to_remove = used_liquid_fuel/(fuel_objs.len*LIQUIDFUEL_AMOUNT_TO_MOL) //convert back to liquid volume units
 
 	for(var/O in fuel_objs)
-		var/obj/effect/decal/cleanable/liquid_fuel/fuel = O
+		var/obj/effect/decal/cleanable/oil/fuel = O
 		if(!istype(fuel))
 			fuel_objs -= fuel
 			continue
 
-		fuel.amount -= fuel_to_remove
-		if(fuel.amount <= 0)
+		fuel.reagent_amount -= fuel_to_remove
+		if(fuel.reagent_amount <= 0)
 			fuel_objs -= fuel
 			if(remove_fire)
 				var/turf/T = fuel.loc
@@ -93,10 +93,6 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	return 0
 
 /turf/simulated/create_fire(fl)
-
-	if(submerged())
-		return 1
-
 	if(fire)
 		fire.firelevel = max(fl, fire.firelevel)
 		return 1
@@ -107,32 +103,32 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	fire = new(src, fl)
 	SSzas.active_fire_zones |= zone
 
-	var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src
+	var/obj/effect/decal/cleanable/oil/fuel = locate() in src
 	zone.fire_tiles |= src
 	if(fuel) zone.fuel_objs += fuel
 
 	return 0
 
-/obj/fire
-	//Icon for fire on turfs.
-
+/obj/effect/hotspot
 	anchored = TRUE
-	mouse_opacity = 0
-
-	blend_mode = BLEND_ADD
-
+	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
 	icon = 'icons/effects/fire.dmi'
 	icon_state = "1"
-	light_color = "#ed9200"
-	layer = FIRE_LAYER
+	layer = GASFIRE_LAYER
+	plane = ABOVE_GAME_PLANE
+	blend_mode = BLEND_ADD
+	light_system = MOVABLE_LIGHT
+	light_range = LIGHT_RANGE_FIRE
+	light_power = 1
+	light_color = LIGHT_COLOR_FIRE
 
 	var/firelevel = 1 //Calculated by gas_mixture.calculate_firelevel()
 
-/obj/fire/Process()
+/obj/effect/hotspot/Process()
 	. = 1
 
 	var/turf/simulated/my_tile = loc
-	if(!istype(my_tile) || !my_tile.zone || my_tile.submerged())
+	if(!istype(my_tile) || !my_tile.zone)
 		if(my_tile && my_tile.fire == src)
 			my_tile.fire = null
 		qdel(src)
@@ -168,7 +164,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 				//if(!enemy_tile.zone.fire_tiles.len) TODO - optimize
 				var/datum/gas_mixture/acs = enemy_tile.return_air()
-				var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in enemy_tile
+				var/obj/effect/decal/cleanable/oil/liquid = locate() in enemy_tile
 				if(!acs || !acs.check_combustability(liquid))
 					continue
 
@@ -188,14 +184,14 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	animate(src, color = fire_color(air_contents.temperature), 5)
 	set_light(l_color = color)
 
-/obj/fire/New(newLoc,fl)
+/obj/effect/hotspot/New(newLoc,fl)
 	..()
 
 	if(!istype(loc, /turf))
 		qdel(src)
 		return
 
-	setDir(pick(GLOB.cardinal))
+	setDir(pick(GLOB.cardinals))
 
 	var/datum/gas_mixture/air_contents = loc.return_air()
 	color = fire_color(air_contents.temperature)
@@ -204,11 +200,11 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	firelevel = fl
 	SSzas.active_hotspots.Add(src)
 
-/obj/fire/proc/fire_color(var/env_temperature)
+/obj/effect/hotspot/proc/fire_color(var/env_temperature)
 	var/temperature = max(4000*sqrt(firelevel/SSzas.settings.fire_firelevel_multiplier), env_temperature)
 	return heat2color(temperature)
 
-/obj/fire/Destroy()
+/obj/effect/hotspot/Destroy()
 	var/turf/T = loc
 	if (istype(T))
 		set_light(0)
@@ -238,9 +234,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 		//*** Get the fuel and oxidizer amounts
 		for(var/g in gas)
-			if(SSzas.gas_data.flags[g] & XGM_GAS_FUEL)
+			if(xgm_gas_data.flags[g] & XGM_GAS_FUEL)
 				gas_fuel += gas[g]
-			if(SSzas.gas_data.flags[g] & XGM_GAS_OXIDIZER)
+			if(xgm_gas_data.flags[g] & XGM_GAS_OXIDIZER)
 				total_oxidizers += gas[g]
 		gas_fuel *= group_multiplier
 		total_oxidizers *= group_multiplier
@@ -248,8 +244,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		//Liquid Fuel
 		var/fuel_area = 0
 		if(zone)
-			for(var/obj/effect/decal/cleanable/liquid_fuel/fuel in zone.fuel_objs)
-				liquid_fuel += fuel.amount*LIQUIDFUEL_AMOUNT_TO_MOL
+			for(var/obj/effect/decal/cleanable/oil/fuel in zone.fuel_objs)
+				liquid_fuel += fuel.reagent_amount*LIQUIDFUEL_AMOUNT_TO_MOL
 				fuel_area++
 
 		total_fuel = gas_fuel + liquid_fuel
@@ -306,7 +302,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
 		var/datum/gas_mixture/burned_fuel = remove_by_flag(XGM_GAS_FUEL, used_gas_fuel)
 		for(var/g in burned_fuel.gas)
-			adjust_gas(SSzas.gas_data.burn_product[g], burned_fuel.gas[g])
+			adjust_gas(xgm_gas_data.burn_product[g], burned_fuel.gas[g])
 
 		if(zone)
 			zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())
@@ -328,7 +324,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
 	. = 0
 	for(var/g in gas)
-		if(SSzas.gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1)
 			. = 1
 			break
 
@@ -340,14 +336,14 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	. = 0
 	for(var/g in gas)
-		if(SSzas.gas_data.flags[g] & XGM_GAS_FUEL && gas[g] >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_FUEL && gas[g] >= 0.1)
 			. = 1
 			break
 
-/datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid=null)
+/datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/oil/liquid)
 	. = 0
 	for(var/g in gas)
-		if(SSzas.gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
 			. = 1
 			break
 
@@ -359,7 +355,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	. = 0
 	for(var/g in gas)
-		if(SSzas.gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
 			. = 1
 			break
 
@@ -417,6 +413,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 				head_exposure = 0
 			if(C.body_parts_covered & CHEST)
 				chest_exposure = 0
+			if(C.body_parts_covered & GROIN)
+				groin_exposure = 0
 			if(C.body_parts_covered & LEGS)
 				legs_exposure = 0
 			if(C.body_parts_covered & ARMS)
@@ -426,12 +424,30 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	//Always check these damage procs first if fire damage isn't working. They're probably what's wrong.
 
-	apply_damage(0.9*mx*head_exposure,  BURN, BODY_ZONE_HEAD,  used_weapon =  "Fire")
-	apply_damage(2.5*mx*chest_exposure, BURN, BODY_ZONE_CHEST, used_weapon =  "Fire")
-	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_L_LEG, used_weapon =  "Fire")
-	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_R_LEG, used_weapon =  "Fire")
-	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_L_ARM, used_weapon =  "Fire")
-	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_R_ARM, used_weapon =  "Fire")
+	apply_damage(0.9*mx*head_exposure,  BURN, BODY_ZONE_HEAD)
+	apply_damage(2.5*mx*chest_exposure, BURN, BODY_ZONE_CHEST)
+	apply_damage(2,0*mx*groin_exposure, BURN, BODY_ZONE_PRECISE_GROIN)
+	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_L_LEG)
+	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_R_LEG)
+	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_L_ARM)
+	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_R_ARM)
 
 	//return a truthy value of whether burning actually happened
 	return mx * (head_exposure + chest_exposure + groin_exposure + legs_exposure + arms_exposure)
+
+/turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
+	return
+
+/turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
+	var/dir_to = get_dir(src, adj_turf)
+
+	for(var/obj/structure/window/W in src)
+		if(W.dir == dir_to || W.fulltile) //Same direction or diagonal (full tile)
+			W.fire_act(adj_air, adj_temp, adj_volume)
+
+/*/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
+	burn(adj_temp)
+	if(adj_temp > material.melting_point)
+		take_damage(log(Frand(0.9, 1.1) * (adj_temp - material.melting_point)), BURN)
+
+	return ..()*/
diff --git a/code/modules/atmospherics/ZAS/Plasma.dm b/code/modules/atmospherics/ZAS/Plasma.dm
index a12977966c0..c8eab424a31 100644
--- a/code/modules/atmospherics/ZAS/Plasma.dm
+++ b/code/modules/atmospherics/ZAS/Plasma.dm
@@ -51,12 +51,12 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat
 
 /obj/item/contaminate()
 	//Do a contamination overlay? Temporary measure to keep contamination less deadly than it was.
-	if(!(flags_1 & CONTAMINATED_1))
-		flags_1 |= CONTAMINATED_1
+	if(!(flags_2 & CONTAMINATED_2))
+		flags_2 |= CONTAMINATED_2
 		add_overlay(GLOB.contamination_overlay)
 
 /obj/item/decontaminate()
-	flags_1 ~= CONTAMINATED_1
+	flags_2 ~= CONTAMINATED_2
 	cut_overlay(GLOB.contamination_overlay)
 
 
@@ -171,6 +171,6 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat
 		if(!env)
 			return
 		for(var/g in env.gas)
-			if(SSzas.gas_data.flags[g] & XGM_GAS_CONTAMINANT && env.gas[g] > SSzas.gas_data.overlay_limit[g] + 1)
+			if(xgm_gas_data.flags[g] & XGM_GAS_CONTAMINANT && env.gas[g] > xgm_gas_data.overlay_limit[g] + 1)
 				I.contaminate()
 				break
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
new file mode 100644
index 00000000000..6aa01691ad6
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -0,0 +1,58 @@
+#define MIN_TEMPERATURE_COEFFICIENT 1
+#define MAX_TEMPERATURE_COEFFICIENT 10
+
+/atom/var/temperature = T20C
+/atom/var/temperature_coefficient = MAX_TEMPERATURE_COEFFICIENT
+
+/atom/movable/Entered(var/atom/movable/atom, var/atom/old_loc)
+	. = ..()
+	QUEUE_TEMPERATURE_ATOMS(atom)
+
+/obj/temperature_coefficient = null
+
+/mob/temperature_coefficient = null
+
+/turf/temperature_coefficient = MIN_TEMPERATURE_COEFFICIENT
+
+/obj/Initialize()
+	. = ..()
+	temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - w_class, MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient
+
+/obj/proc/HandleObjectHeating(var/obj/item/heated_by, var/mob/user, var/adjust_temp)
+	if(ATOM_IS_TEMPERATURE_SENSITIVE(src))
+		visible_message(span_notice("\The [user] carefully heats \the [src] with \the [heated_by]."))
+		var/diff_temp = (adjust_temp - temperature)
+		if(diff_temp >= 0)
+			var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0)
+			ADJUST_ATOM_TEMPERATURE(src, min(adjust_temp, altered_temp))
+
+/mob/living/Initialize()
+	. = ..()
+	temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - FLOOR(mob_size/4, 1), MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient
+
+/atom/proc/ProcessAtomTemperature()
+	// Get our location temperature if possible.
+	// Nullspace is room temperature, clearly.
+	var/adjust_temp
+	if(loc)
+		if(!istype(loc, /turf/simulated))
+			adjust_temp = loc.temperature
+		else
+			var/turf/simulated/T = loc
+			if(T.zone && T.zone.air)
+				adjust_temp = T.zone.air.temperature
+			else
+				adjust_temp = T20C
+	else
+		adjust_temp = T20C
+
+	var/diff_temp = adjust_temp - temperature
+	if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
+		var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0)
+		ADJUST_ATOM_TEMPERATURE(src, (diff_temp > 0) ? min(adjust_temp, altered_temp) : max(adjust_temp, altered_temp))
+	else
+		temperature = adjust_temp
+		return PROCESS_KILL
+
+#undef MIN_TEMPERATURE_COEFFICIENT
+#undef MAX_TEMPERATURE_COEFFICIENT
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index a1229d928c8..5ae5dade602 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -301,8 +301,10 @@
 /turf/simulated/atmos_spawn_air(gas_id, amount, initial_temperature)
 	var/datum/gas_mixture/new_gas = new
 	var/datum/gas_mixture/existing_gas = return_air()
-
-	new_gas.adjust_gas_temp(gas_id, amount, initial_temperature)
+	if(isnull(initial_temperature))
+		new_gas.adjust_gas(gas_id, amount)
+	else
+		new_gas.adjust_gas_temp(gas_id, amount, initial_temperature)
 	existing_gas.merge(new_gas)
 
 /proc/turf_contains_dense_objects(var/turf/T)
@@ -312,7 +314,7 @@
 	if(density)
 		return 1
 	for(var/atom/movable/A as anything in src)
-		if(A.density && !(A.atom_flags & ON_BORDER_1))
+		if(A.density && !(A.flags_1 & ON_BORDER_1))
 			return 1
 	return 0
 
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index 508cec715f6..0906a8623b8 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -1,3 +1,4 @@
+GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data)
 /datum/xgm_gas_data
 	//Simple list of all the gas IDs.
 	var/list/gases = list()
@@ -49,33 +50,33 @@
 	var/symbol_html = "X"
 	var/symbol = "X"
 
-/datum/xgm_gas_data/Initialize()
+/datum/xgm_gas_data/New()
 	for(var/p in subtypesof(/datum/xgm_gas))
 		var/datum/xgm_gas/gas = new p //avoid initial() because of potential New() actions
 
-		if(gas.id in SSzas.gas_data.gases)
+		if(gas.id in xgm_gas_data.gases)
 			stack_trace("Duplicate gas id `[gas.id]` in `[p]`")
 
-		SSzas.gas_data.gases += gas.id
-		SSzas.gas_data.name[gas.id] = gas.name
-		SSzas.gas_data.specific_heat[gas.id] = gas.specific_heat
-		SSzas.gas_data.molar_mass[gas.id] = gas.molar_mass
+		xgm_gas_data.gases += gas.id
+		xgm_gas_data.name[gas.id] = gas.name
+		xgm_gas_data.specific_heat[gas.id] = gas.specific_heat
+		xgm_gas_data.molar_mass[gas.id] = gas.molar_mass
 		if(gas.overlay_limit)
-			SSzas.gas_data.overlay_limit[gas.id] = gas.overlay_limit
-			SSzas.gas_data.tile_overlay[gas.id] = gas.tile_overlay
-			SSzas.gas_data.tile_overlay_color[gas.id] = gas.tile_color
-		SSzas.gas_data.flags[gas.id] = gas.flags
-		SSzas.gas_data.burn_product[gas.id] = gas.burn_product
+			xgm_gas_data.overlay_limit[gas.id] = gas.overlay_limit
+			xgm_gas_data.tile_overlay[gas.id] = gas.tile_overlay
+			xgm_gas_data.tile_overlay_color[gas.id] = gas.tile_color
+		xgm_gas_data.flags[gas.id] = gas.flags
+		xgm_gas_data.burn_product[gas.id] = gas.burn_product
 
-		SSzas.gas_data.symbol_html[gas.id] = gas.symbol_html
-		SSzas.gas_data.symbol[gas.id] = gas.symbol
+		xgm_gas_data.symbol_html[gas.id] = gas.symbol_html
+		xgm_gas_data.symbol[gas.id] = gas.symbol
 
 		if(!isnull(gas.condensation_product) && !isnull(gas.condensation_point))
-			SSzas.gas_data.condensation_points[gas.id] = gas.condensation_point
-			SSzas.gas_data.condensation_products[gas.id] = gas.condensation_product
+			xgm_gas_data.condensation_points[gas.id] = gas.condensation_point
+			xgm_gas_data.condensation_products[gas.id] = gas.condensation_product
 
-		SSzas.gas_data.breathed_product[gas.id] = gas.breathed_product
-		SSzas.gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex
+		xgm_gas_data.breathed_product[gas.id] = gas.breathed_product
+		xgm_gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex
 
 	return 1
 
@@ -98,6 +99,13 @@
 /obj/effect/gas_overlay/Initialize(mapload, gas)
 	. = ..()
 	gas_id = gas
-	if(SSzas.gas_data.tile_overlay[gas_id])
-		icon_state = SSzas.gas_data.tile_overlay[gas_id]
-	color = SSzas.gas_data.tile_overlay_color[gas_id]
+	if(xgm_gas_data.tile_overlay[gas_id])
+		icon_state = xgm_gas_data.tile_overlay[gas_id]
+	color = xgm_gas_data.tile_overlay_color[gas_id]
+
+/proc/typecache_of_gases_with_no_overlays()
+	. = list()
+	for (var/gastype in subtypesof(/datum/xgm_gas))
+		var/datum/xgm_gas/gasvar = gastype
+		if (!initial(gasvar.tile_overlay))
+			.[gastype] = TRUE
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 331194c445c..8dc8599de41 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -51,7 +51,7 @@
 
 	if(moles > 0 && abs(temperature - temp) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
 		var/self_heat_capacity = heat_capacity()
-		var/giver_heat_capacity = SSzas.gas_data.specific_heat[gasid] * moles
+		var/giver_heat_capacity = xgm_gas_data.specific_heat[gasid] * moles
 		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
 		if(combined_heat_capacity != 0)
 			temperature = (temp * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
@@ -137,7 +137,7 @@
 /datum/gas_mixture/proc/heat_capacity()
 	. = 0
 	for(var/g in gas)
-		. += SSzas.gas_data.specific_heat[g] * gas[g]
+		. += xgm_gas_data.specific_heat[g] * gas[g]
 	. *= group_multiplier
 
 
@@ -192,8 +192,8 @@
 		return SPECIFIC_ENTROPY_VACUUM	//that gas isn't here
 
 	//group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure)
-	var/molar_mass = SSzas.gas_data.molar_mass[gasid]
-	var/specific_heat = SSzas.gas_data.specific_heat[gasid]
+	var/molar_mass = xgm_gas_data.molar_mass[gasid]
+	var/specific_heat = xgm_gas_data.specific_heat[gasid]
 	var/safe_temp = max(temperature, TCMB) // We're about to divide by this.
 	return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * safe_temp)) * (molar_mass*specific_heat*safe_temp)**(2/3) + 1 ) +  15 )
 
@@ -221,6 +221,8 @@
 
 //Removes moles from the gas mixture and returns a gas_mixture containing the removed air.
 /datum/gas_mixture/proc/remove(amount)
+	RETURN_TYPE(/datum/gas_mixture)
+
 	amount = min(amount, total_moles * group_multiplier) //Can not take more air than the gas mixture has!
 	if(amount <= 0)
 		return null
@@ -275,11 +277,11 @@
 
 	var/sum = 0
 	for(var/g in gas)
-		if(SSzas.gas_data.flags[g] & flag)
+		if(xgm_gas_data.flags[g] & flag)
 			sum += gas[g]
 
 	for(var/g in gas)
-		if(SSzas.gas_data.flags[g] & flag)
+		if(xgm_gas_data.flags[g] & flag)
 			removed.gas[g] = QUANTIZE((gas[g] / sum) * amount)
 			gas[g] -= removed.gas[g] / group_multiplier
 
@@ -293,7 +295,7 @@
 /datum/gas_mixture/proc/get_by_flag(flag)
 	. = 0
 	for(var/g in gas)
-		if(SSzas.gas_data.flags[g] & flag)
+		if(xgm_gas_data.flags[g] & flag)
 			. += gas[g]
 
 //Copies gas and temperature from another gas_mixture.
@@ -347,11 +349,11 @@
 //Two lists can be passed by reference if you need know specifically which graphics were added and removed.
 /datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null)
 	for(var/obj/effect/gas_overlay/O in graphic)
-		if(gas[O.gas_id] <= SSzas.gas_data.overlay_limit[O.gas_id])
+		if(gas[O.gas_id] <= xgm_gas_data.overlay_limit[O.gas_id])
 			LAZYADD(graphic_remove, O)
-	for(var/g in SSzas.gas_data.overlay_limit)
+	for(var/g in xgm_gas_data.overlay_limit)
 		//Overlay isn't applied for this gas, check if it's valid and needs to be added.
-		if(gas[g] > SSzas.gas_data.overlay_limit[g])
+		if(gas[g] > xgm_gas_data.overlay_limit[g])
 			var/tile_overlay = get_tile_overlay(g)
 			if(!(tile_overlay in graphic))
 				LAZYADD(graphic_add, tile_overlay)
@@ -463,49 +465,9 @@
 /datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air)
 	return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
 
-//Equalizes a list of gas mixtures.  Used for pipe networks.
-/proc/equalize_gases(list/datum/gas_mixture/gases)
-	//Calculate totals from individual components
-	var/total_volume = 0
-	var/total_thermal_energy = 0
-	var/total_heat_capacity = 0
-
-	var/list/total_gas = list()
-	for(var/datum/gas_mixture/gasmix in gases)
-		total_volume += gasmix.volume
-		var/temp_heatcap = gasmix.heat_capacity()
-		total_thermal_energy += gasmix.temperature * temp_heatcap
-		total_heat_capacity += temp_heatcap
-		for(var/g in gasmix.gas)
-			total_gas[g] += gasmix.gas[g]
-
-	if(total_volume > 0)
-		var/datum/gas_mixture/combined = new(total_volume)
-		combined.gas = total_gas
-
-		//Calculate temperature
-		if(total_heat_capacity > 0)
-			combined.temperature = total_thermal_energy / total_heat_capacity
-		combined.update_values()
-
-		//Allow for reactions
-		combined.react()
-
-		//Average out the gases
-		for(var/g in combined.gas)
-			combined.gas[g] /= total_volume
-
-		//Update individual gas_mixtures
-		for(var/datum/gas_mixture/gasmix in gases)
-			gasmix.gas = combined.gas.Copy()
-			gasmix.temperature = combined.temperature
-			gasmix.multiply(gasmix.volume)
-
-	return 1
-
 /datum/gas_mixture/proc/get_mass()
 	for(var/g in gas)
-		. += gas[g] * SSzas.gas_data.molar_mass[g] * group_multiplier
+		. += gas[g] * xgm_gas_data.molar_mass[g] * group_multiplier
 
 /datum/gas_mixture/proc/specific_mass()
 	var/M = get_total_moles()
@@ -526,28 +488,10 @@
 	var/amt = get_gas(gas_id)
 	return (amt >= required_amount)
 
-///THIS PROBABLY WILL NOT BE USED BUUUUT-
-/datum/gas_mixture/proc/mingle_with_turf(turf/simulated/target, mingle_volume)
-	var/datum/gas_mixture/air_sample = remove_ratio(mingle_volume/volume)
-	air_sample.volume = mingle_volume
-
-	if(istype(target) && target.zone)
-		//Have to consider preservation of group statuses
-		var/datum/gas_mixture/turf_copy = new
-
-		turf_copy.copy_from(target.zone.air)
-		turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group
-
-		equalize_gases(list(air_sample, turf_copy))
-		merge(air_sample)
-
-		turf_copy.subtract(target.zone.air)
-
-		target.zone.air.merge(turf_copy)
-
-	else
-		var/datum/gas_mixture/turf_air = target.return_air()
+/datum/gas_mixture/proc/get_gases()
+	RETURN_TYPE(/list)
+	update_values()
+	return gas
 
-		equalize_gases(list(air_sample, turf_air))
-		merge(air_sample)
-		//turf_air already modified by equalize_gases()
+/datum/gas_mixture/proc/leak_to_enviroment(datum/gas_mixture/environment)
+	pump_gas_passive(src, environment, calculate_transfer_moles(src, environment, src.return_pressure() - environment.return_pressure()))
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 9d20a386d9e..a46df8e036a 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -71,7 +71,7 @@ Class Procs:
 	T.zone = src
 	contents.Add(T)
 	if(T.fire)
-		var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
+		var/obj/effect/decal/cleanable/oil/fuel = locate() in T
 		fire_tiles.Add(T)
 		SSzas.active_fire_zones |= src
 		if(fuel) fuel_objs += fuel
@@ -87,7 +87,7 @@ Class Procs:
 	contents.Remove(T)
 	fire_tiles.Remove(T)
 	if(T.fire)
-		var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
+		var/obj/effect/decal/cleanable/oil/fuel = locate() in T
 		fuel_objs -= fuel
 	T.zone = null
 	T.update_graphic(graphic_remove = air.graphic)
@@ -164,9 +164,10 @@ Class Procs:
 			E.recheck()
 
 	// Handle condensation from the air.
+	/*
 	for(var/g in air.gas)
-		var/product = SSzas.gas_data.condensation_products[g]
-		if(product && air.temperature <= SSzas.gas_data.condensation_points[g])
+		var/product = xgm_gas_data.condensation_products[g]
+		if(product && air.temperature <= xgm_gas_data.condensation_points[g])
 			var/condensation_area = air.group_multiplier
 			while(condensation_area > 0)
 				condensation_area--
@@ -176,6 +177,7 @@ Class Procs:
 					break
 				air.adjust_gas(g, -condense_amt)
 				flooding.add_fluid(condense_amt, product)
+	*/
 
 	// Update atom temperature.
 	if(abs(air.temperature - last_air_temperature) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
@@ -190,12 +192,11 @@ Class Procs:
 /zone/proc/dbg_data(mob/M)
 	to_chat(M, name)
 	for(var/g in air.gas)
-		to_chat(M, "[SSzas.gas_data.name[g]]: [air.gas[g]]")
+		to_chat(M, "[xgm_gas_data.name[g]]: [air.gas[g]]")
 	to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
 	to_chat(M, "O2 per N2: [(air.gas[GAS_NITROGEN] ? air.gas[GAS_OXYGEN]/air.gas[GAS_NITROGEN] : "N/A")] Moles: [air.total_moles]")
 	to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])")
-//	to_chat(M, "Unsimulated: [unsimulated_contents.len]")
-//	to_chat(M, "Edges: [edges.len]")
+	to_chat(M, "Edges: [edges.len]")
 	if(invalid) to_chat(M, "Invalid!")
 	var/zone_edges = 0
 	var/space_edges = 0
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
new file mode 100644
index 00000000000..a56ff737f08
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -0,0 +1,537 @@
+/*
+	Atmos processes
+
+	These procs generalize various processes used by atmos machinery, such as pumping, filtering, or scrubbing gas, allowing them to be reused elsewhere.
+	If no gas was moved/pumped/filtered/whatever, they return a negative number.
+	Otherwise they return the amount of energy needed to do whatever it is they do (equivalently power if done over 1 second).
+	In the case of free-flowing gas you can do things with gas and still use 0 power, hence the distinction between negative and non-negative return values.
+*/
+
+/*
+/obj/machinery/atmospherics/var/last_flow_rate = 0
+/obj/machinery/atmospherics/var/last_power_draw = 0
+/obj/machinery/portable_atmospherics/var/last_flow_rate = 0
+
+*/
+
+// These balance how easy or hard it is to create huge pressure gradients with pumps and filters.
+// Lower values means it takes longer to create large pressures differences.
+// Has no effect on pumping gasses from high pressure to low, only from low to high.
+#define ATMOS_PUMP_EFFICIENCY   2.5
+#define ATMOS_FILTER_EFFICIENCY 2.5
+
+// Will not bother pumping or filtering if the gas source as fewer than this amount of moles, to help with performance.
+#define MINIMUM_MOLES_TO_PUMP   0.01
+#define MINIMUM_MOLES_TO_FILTER 0.04
+
+
+/obj/machinery/atmospherics/var/debug = 0
+
+/client/proc/atmos_toggle_debug(var/obj/machinery/atmospherics/M in world)
+	set name = "Toggle Debug Messages"
+	set category = "Debug"
+	M.debug = !M.debug
+	to_chat(usr, "[M]: Debug messages toggled [M.debug? "on" : "off"].")
+
+//Generalized gas pumping proc.
+//Moves gas from one gas_mixture to another and returns the amount of power needed (assuming 1 second), or -1 if no gas was pumped.
+//transfer_moles - Limits the amount of moles to transfer. The actual amount of gas moved may also be limited by available_power, if given.
+//available_power - the maximum amount of power that may be used when moving gas. If null then the transfer is not limited by power.
+/proc/pump_gas(var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/transfer_moles = null, var/available_power = null)
+	if (source.total_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing
+		return -1
+
+	if (isnull(transfer_moles))
+		transfer_moles = source.total_moles
+	else
+		transfer_moles = min(source.total_moles, transfer_moles)
+
+	//Calculate the amount of energy required and limit transfer_moles based on available power
+	var/specific_power = calculate_specific_power(source, sink)/ATMOS_PUMP_EFFICIENCY //this has to be calculated before we modify any gas mixtures
+	if (!isnull(available_power) && specific_power > 0)
+		transfer_moles = min(transfer_moles, available_power / specific_power)
+
+	if (transfer_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing
+		return -1
+
+	/*
+	//Update flow rate meter
+	if (istype(M, /obj/machinery/atmospherics))
+		var/obj/machinery/atmospherics/A = M
+		A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+
+		if (A.debug)
+			A.visible_message("[A]: source entropy: [round(source.specific_entropy(), 0.01)] J/Kmol --> sink entropy: [round(sink.specific_entropy(), 0.01)] J/Kmol")
+			A.visible_message("[A]: specific entropy change = [round(sink.specific_entropy() - source.specific_entropy(), 0.01)] J/Kmol")
+			A.visible_message("[A]: specific power = [round(specific_power, 0.1)] W/mol")
+			A.visible_message("[A]: moles transferred = [transfer_moles] mol")
+
+	if (istype(M, /obj/machinery/portable_atmospherics))
+		var/obj/machinery/portable_atmospherics/P = M
+		P.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+	*/
+
+	var/datum/gas_mixture/removed = source.remove(transfer_moles)
+	if (!removed) //Just in case
+		return -1
+
+	var/power_draw = specific_power*transfer_moles
+
+	sink.merge(removed)
+
+	return power_draw
+
+//Gas 'pumping' proc for the case where the gas flow is passive and driven entirely by pressure differences (but still one-way).
+/proc/pump_gas_passive(var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/transfer_moles = null)
+	if (source.total_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing
+		return -1
+
+	if (isnull(transfer_moles))
+		transfer_moles = source.total_moles
+	else
+		transfer_moles = min(source.total_moles, transfer_moles)
+
+	var/equalize_moles = calculate_equalize_moles(source, sink)
+	transfer_moles = min(transfer_moles, equalize_moles)
+
+	if (transfer_moles < MINIMUM_MOLES_TO_PUMP) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	/*
+	//Update flow rate meter
+	if (istype(M, /obj/machinery/atmospherics))
+		var/obj/machinery/atmospherics/A = M
+		A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+		if (A.debug)
+			A.visible_message("[A]: moles transferred = [transfer_moles] mol")
+
+	if (istype(M, /obj/machinery/portable_atmospherics))
+		var/obj/machinery/portable_atmospherics/P = M
+		P.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+	*/
+
+	var/datum/gas_mixture/removed = source.remove(transfer_moles)
+	if(!removed) //Just in case
+		return -1
+	sink.merge(removed)
+
+	return 0
+
+//Generalized gas scrubbing proc.
+//Selectively moves specified gasses one gas_mixture to another and returns the amount of power needed (assuming 1 second), or -1 if no gas was filtered.
+//filtering - A list of gasids to be scrubbed from source
+//total_transfer_moles - Limits the amount of moles to scrub. The actual amount of gas scrubbed may also be limited by available_power, if given.
+//available_power - the maximum amount of power that may be used when scrubbing gas. If null then the scrubbing is not limited by power.
+/proc/scrub_gas(var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/total_transfer_moles = null, var/available_power = null)
+	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	filtering = filtering & source.gas	//only filter gasses that are actually there. DO NOT USE &=
+
+	//Determine the specific power of each filterable gas type, and the total amount of filterable gas (gasses selected to be scrubbed)
+	var/total_filterable_moles = 0			//the total amount of filterable gas
+	var/list/specific_power_gas = list()	//the power required to remove one mole of pure gas, for each gas type
+	for (var/g in filtering)
+		if (source.gas[g] < MINIMUM_MOLES_TO_FILTER)
+			continue
+
+		var/specific_power = calculate_specific_power_gas(g, source, sink)/ATMOS_FILTER_EFFICIENCY
+		specific_power_gas[g] = specific_power
+		total_filterable_moles += source.gas[g]
+
+	if (total_filterable_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	//now that we know the total amount of filterable gas, we can calculate the amount of power needed to scrub one mole of gas
+	var/total_specific_power = 0		//the power required to remove one mole of filterable gas
+	for (var/g in filtering)
+		var/ratio = source.gas[g]/total_filterable_moles //this converts the specific power per mole of pure gas to specific power per mole of scrubbed gas
+		total_specific_power += specific_power_gas[g]*ratio
+
+	//Figure out how much of each gas to filter
+	if (isnull(total_transfer_moles))
+		total_transfer_moles = total_filterable_moles
+	else
+		total_transfer_moles = min(total_transfer_moles, total_filterable_moles)
+
+	//limit transfer_moles based on available power
+	if (!isnull(available_power) && total_specific_power > 0)
+		total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power)
+
+	if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	/*
+	//Update flow rate var
+	if (istype(M, /obj/machinery/atmospherics))
+		var/obj/machinery/atmospherics/A = M
+		A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+	if (istype(M, /obj/machinery/portable_atmospherics))
+		var/obj/machinery/portable_atmospherics/P = M
+		P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+	*/
+
+	var/power_draw = 0
+	for (var/g in filtering)
+		var/transfer_moles = source.gas[g]
+		//filter gas in proportion to the mole ratio
+		transfer_moles = min(transfer_moles, total_transfer_moles*(source.gas[g]/total_filterable_moles))
+
+		//use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop.
+		source.adjust_gas(g, -transfer_moles, update=0)
+		sink.adjust_gas_temp(g, transfer_moles, source.temperature, update=0)
+
+		power_draw += specific_power_gas[g]*transfer_moles
+
+	//Remix the resulting gases
+	sink.update_values()
+	source.update_values()
+
+	return power_draw
+
+//Generalized gas filtering proc.
+//Filtering is a bit different from scrubbing. Instead of selectively moving the targeted gas types from one gas mix to another, filtering splits
+//the input gas into two outputs: one that contains /only/ the targeted gas types, and another that completely clean of the targeted gas types.
+//filtering - A list of gasids to be filtered. These gasses get moved to sink_filtered, while the other gasses get moved to sink_clean.
+//total_transfer_moles - Limits the amount of moles to input. The actual amount of gas filtered may also be limited by available_power, if given.
+//available_power - the maximum amount of power that may be used when filtering gas. If null then the filtering is not limited by power.
+/proc/filter_gas(var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink_filtered, var/datum/gas_mixture/sink_clean, var/total_transfer_moles = null, var/available_power = null)
+	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	filtering = filtering & source.gas	//only filter gasses that are actually there. DO NOT USE &=
+
+	var/total_specific_power = 0		//the power required to remove one mole of input gas
+	var/total_filterable_moles = 0		//the total amount of filterable gas
+	var/total_unfilterable_moles = 0	//the total amount of non-filterable gas
+	var/list/specific_power_gas = list()	//the power required to remove one mole of pure gas, for each gas type
+	for (var/g in source.get_gases())
+		if (source.gas[g] < MINIMUM_MOLES_TO_FILTER)
+			continue
+
+		if (g in filtering)
+			specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_filtered)/ATMOS_FILTER_EFFICIENCY
+			total_filterable_moles += source.gas[g]
+		else
+			specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_clean)/ATMOS_FILTER_EFFICIENCY
+			total_unfilterable_moles += source.gas[g]
+
+		var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix
+		total_specific_power += specific_power_gas[g]*ratio
+
+	//Figure out how much of each gas to filter
+	if (isnull(total_transfer_moles))
+		total_transfer_moles = source.total_moles
+	else
+		total_transfer_moles = min(total_transfer_moles, source.total_moles)
+
+	//limit transfer_moles based on available power
+	if (!isnull(available_power) && total_specific_power > 0)
+		total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power)
+
+	if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	//Update flow rate var
+	/*
+	if (istype(M, /obj/machinery/atmospherics))
+		var/obj/machinery/atmospherics/A = M
+		A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+	*/
+
+	var/datum/gas_mixture/removed = source.remove(total_transfer_moles)
+	if (!removed) //Just in case
+		return -1
+
+	var/filtered_power_used = 0		//power used to move filterable gas to sink_filtered
+	var/unfiltered_power_used = 0	//power used to move unfilterable gas to sink_clean
+	for (var/g in removed.gas)
+		var/power_used = specific_power_gas[g]*removed.gas[g]
+
+		if (g in filtering)
+			//use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop.
+			sink_filtered.adjust_gas_temp(g, removed.gas[g], removed.temperature, update=0)
+			removed.adjust_gas(g, -removed.gas[g], update=0)
+			filtered_power_used += power_used
+		else
+			unfiltered_power_used += power_used
+
+	sink_filtered.update_values()
+	removed.update_values()
+
+	sink_clean.merge(removed)
+
+	return filtered_power_used + unfiltered_power_used
+
+//For omni devices. Instead filtering is an associative list mapping gasids to gas mixtures.
+//I don't like the copypasta, but I decided to keep both versions of gas filtering as filter_gas is slightly faster (doesn't create as many temporary lists, doesn't call update_values() as much)
+//filter_gas can be removed and replaced with this proc if need be.
+/proc/filter_gas_multi(var/obj/machinery/M, var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink_clean, var/total_transfer_moles = null, var/available_power = null)
+	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	filtering = filtering & source.gas	//only filter gasses that are actually there. DO NOT USE &=
+
+	var/total_specific_power = 0		//the power required to remove one mole of input gas
+	var/total_filterable_moles = 0		//the total amount of filterable gas
+	var/total_unfilterable_moles = 0	//the total amount of non-filterable gas
+	var/list/specific_power_gas = list()	//the power required to remove one mole of pure gas, for each gas type
+	for (var/g in source.gas)
+		if (source.gas[g] < MINIMUM_MOLES_TO_FILTER)
+			continue
+
+		if (g in filtering)
+			var/datum/gas_mixture/sink_filtered = filtering[g]
+			specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_filtered)/ATMOS_FILTER_EFFICIENCY
+			total_filterable_moles += source.gas[g]
+		else
+			specific_power_gas[g] = calculate_specific_power_gas(g, source, sink_clean)/ATMOS_FILTER_EFFICIENCY
+			total_unfilterable_moles += source.gas[g]
+
+		var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix
+		total_specific_power += specific_power_gas[g]*ratio
+
+	//Figure out how much of each gas to filter
+	if (isnull(total_transfer_moles))
+		total_transfer_moles = source.total_moles
+	else
+		total_transfer_moles = min(total_transfer_moles, source.total_moles)
+
+	//limit transfer_moles based on available power
+	if (!isnull(available_power) && total_specific_power > 0)
+		total_transfer_moles = min(total_transfer_moles, available_power/total_specific_power)
+
+	if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	/*
+	//Update Flow Rate var
+	if (istype(M, /obj/machinery/atmospherics))
+		var/obj/machinery/atmospherics/A = M
+		A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+	if (istype(M, /obj/machinery/portable_atmospherics))
+		var/obj/machinery/portable_atmospherics/P = M
+		P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
+	*/
+
+	var/datum/gas_mixture/removed = source.remove(total_transfer_moles)
+	if (!removed) //Just in case
+		return -1
+
+	var/list/filtered_power_used = list()		//power used to move filterable gas to the filtered gas mixes
+	var/unfiltered_power_used = 0	//power used to move unfilterable gas to sink_clean
+	for (var/g in removed.gas)
+		var/power_used = specific_power_gas[g]*removed.gas[g]
+
+		if (g in filtering)
+			var/datum/gas_mixture/sink_filtered = filtering[g]
+			//use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop.
+			sink_filtered.adjust_gas_temp(g, removed.gas[g], removed.temperature, update=1)
+			removed.adjust_gas(g, -removed.gas[g], update=0)
+			if (power_used)
+				filtered_power_used[sink_filtered] = power_used
+		else
+			unfiltered_power_used += power_used
+
+	removed.update_values()
+
+	var/power_draw = unfiltered_power_used
+	for (var/datum/gas_mixture/sink_filtered in filtered_power_used)
+		power_draw += filtered_power_used[sink_filtered]
+
+	sink_clean.merge(removed)
+
+	return power_draw
+
+//Similar deal as the other atmos process procs.
+//mix_sources maps input gas mixtures to mix ratios. The mix ratios MUST add up to 1.
+/proc/mix_gas(var/list/mix_sources, var/datum/gas_mixture/sink, var/total_transfer_moles = null, var/available_power = null)
+	if (!mix_sources.len)
+		return -1
+
+	var/total_specific_power = 0	//the power needed to mix one mole of gas
+	var/total_mixing_moles = null	//the total amount of gas that can be mixed, given our mix ratios
+	var/total_input_volume = 0		//for flow rate calculation
+	var/total_input_moles = 0		//for flow rate calculation
+	var/list/source_specific_power = list()
+	for (var/datum/gas_mixture/source in mix_sources)
+		if (source.total_moles < MINIMUM_MOLES_TO_FILTER)
+			return -1	//either mix at the set ratios or mix no gas at all
+
+		var/mix_ratio = mix_sources[source]
+		if (!mix_ratio)
+			continue	//this gas is not being mixed in
+
+		//mixing rate is limited by the source with the least amount of available gas
+		var/this_mixing_moles = source.total_moles/mix_ratio
+		if (isnull(total_mixing_moles) || total_mixing_moles > this_mixing_moles)
+			total_mixing_moles = this_mixing_moles
+
+		source_specific_power[source] = calculate_specific_power(source, sink)*mix_ratio/ATMOS_FILTER_EFFICIENCY
+		total_specific_power += source_specific_power[source]
+		total_input_volume += source.volume
+		total_input_moles += source.total_moles
+
+	if (total_mixing_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	if (isnull(total_transfer_moles))
+		total_transfer_moles = total_mixing_moles
+	else
+		total_transfer_moles = min(total_mixing_moles, total_transfer_moles)
+
+	//limit transfer_moles based on available power
+	if (!isnull(available_power) && total_specific_power > 0)
+		total_transfer_moles = min(total_transfer_moles, available_power / total_specific_power)
+
+	if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+		return -1
+
+	/*
+	//Update flow rate var
+	if (istype(M, /obj/machinery/atmospherics))
+		var/obj/machinery/atmospherics/A = M
+		A.last_flow_rate = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here
+	if (istype(M, /obj/machinery/portable_atmospherics))
+		var/obj/machinery/portable_atmospherics/P = M
+		P.last_flow_rate = (total_transfer_moles/total_input_moles)*total_input_volume //group_multiplier gets divided out here
+	*/
+
+	var/total_power_draw = 0
+	for (var/datum/gas_mixture/source in mix_sources)
+		var/mix_ratio = mix_sources[source]
+		if (!mix_ratio)
+			continue
+
+		var/transfer_moles = total_transfer_moles * mix_ratio
+
+		var/datum/gas_mixture/removed = source.remove(transfer_moles)
+
+		var/power_draw = transfer_moles * source_specific_power[source]
+		total_power_draw += power_draw
+
+		sink.merge(removed)
+
+	return total_power_draw
+
+/*
+	Helper procs for various things.
+*/
+
+//Calculates the amount of power needed to move one mole from source to sink.
+/proc/calculate_specific_power(datum/gas_mixture/source, datum/gas_mixture/sink)
+	//Calculate the amount of energy required
+	var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature
+	var/specific_entropy = sink.specific_entropy() - source.specific_entropy() //sink is gaining moles, source is loosing
+	var/specific_power = 0	// W/mol
+
+	//If specific_entropy is < 0 then power is required to move gas
+	if (specific_entropy < 0)
+		specific_power = -specific_entropy*air_temperature		//how much power we need per mole
+
+	return specific_power
+
+//Calculates the amount of power needed to move one mole of a certain gas from source to sink.
+/proc/calculate_specific_power_gas(var/gasid, datum/gas_mixture/source, datum/gas_mixture/sink)
+	//Calculate the amount of energy required
+	var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature
+	var/specific_entropy = sink.specific_entropy_gas(gasid) - source.specific_entropy_gas(gasid) //sink is gaining moles, source is loosing
+	var/specific_power = 0	// W/mol
+
+	//If specific_entropy is < 0 then power is required to move gas
+	if (specific_entropy < 0)
+		specific_power = -specific_entropy*air_temperature		//how much power we need per mole
+
+	return specific_power
+
+//Calculates the APPROXIMATE amount of moles that would need to be transferred to change the pressure of sink by pressure_delta
+//If set, sink_volume_mod adjusts the effective output volume used in the calculation. This is useful when the output gas_mixture is
+//part of a pipenetwork, and so it's volume isn't representative of the actual volume since the gas will be shared across the pipenetwork when it processes.
+/proc/calculate_transfer_moles(datum/gas_mixture/source, datum/gas_mixture/sink, var/pressure_delta, var/sink_volume_mod=0)
+	if(source.temperature == 0 || source.total_moles == 0) return 0
+
+	var/output_volume = (sink.volume * sink.group_multiplier) + sink_volume_mod
+	var/source_total_moles = source.total_moles * source.group_multiplier
+
+	var/air_temperature = source.temperature
+	if(sink.total_moles > 0 && sink.temperature > 0)
+		//estimate the final temperature of the sink after transfer
+		var/estimate_moles = pressure_delta*output_volume/(sink.temperature * R_IDEAL_GAS_EQUATION)
+		var/sink_heat_capacity = sink.heat_capacity()
+		var/transfer_heat_capacity = source.heat_capacity()*estimate_moles/source_total_moles
+		air_temperature = (sink.temperature*sink_heat_capacity  + source.temperature*transfer_heat_capacity) / (sink_heat_capacity + transfer_heat_capacity)
+
+	//get the number of moles that would have to be transfered to bring sink to the target pressure
+	return pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION)
+
+//Calculates the APPROXIMATE amount of moles that would need to be transferred to bring source and sink to the same pressure
+/proc/calculate_equalize_moles(datum/gas_mixture/source, datum/gas_mixture/sink)
+	if(source.temperature == 0) return 0
+
+	//Make the approximation that the sink temperature is unchanged after transferring gas
+	var/source_volume = source.volume * source.group_multiplier
+	var/sink_volume = sink.volume * sink.group_multiplier
+
+	var/source_pressure = source.return_pressure()
+	var/sink_pressure = sink.return_pressure()
+
+	return (source_pressure - sink_pressure)/(R_IDEAL_GAS_EQUATION * (source.temperature/source_volume + sink.temperature/sink_volume))
+
+//Determines if the atmosphere is safe (for humans). Safe atmosphere:
+// - Is between 80 and 120kPa
+// - Has between 17% and 30% oxygen
+// - Has temperature between -10C and 50C
+// - Has no or only minimal phoron or N2O
+/proc/get_atmosphere_issues(datum/gas_mixture/atmosphere, var/returntext = 0)
+	var/list/status = list()
+	if(!atmosphere)
+		status.Add("No atmosphere present.")
+
+	// Temperature check
+	if((atmosphere.temperature > (T0C + 50)) || (atmosphere.temperature < (T0C - 10)))
+		status.Add("Temperature too [atmosphere.temperature > (T0C + 50) ? "high" : "low"].")
+
+	// Pressure check
+	var/pressure = atmosphere.return_pressure()
+	if((pressure > 120) || (pressure < 80))
+		status.Add("Pressure too [pressure > 120 ? "high" : "low"].")
+
+	// Gas concentration checks
+	var/oxygen = 0
+	var/phoron = 0
+	var/carbondioxide = 0
+	var/nitrousoxide = 0
+	var/hydrogen = 0
+	if(atmosphere.total_moles) // Division by zero prevention
+		oxygen = (atmosphere.gas[GAS_OXYGEN] / atmosphere.total_moles) * 100 // Percentage of the gas
+		phoron = (atmosphere.gas[GAS_PLASMA] / atmosphere.total_moles) * 100
+		carbondioxide = (atmosphere.gas[GAS_CO2] / atmosphere.total_moles) * 100
+		nitrousoxide = (atmosphere.gas[GAS_N2O] / atmosphere.total_moles) * 100
+		hydrogen = (atmosphere.gas[GAS_HYDROGEN] / atmosphere.total_moles) * 100
+
+	if(!oxygen)
+		status.Add("No oxygen.")
+	else if((oxygen > 30) || (oxygen < 17))
+		status.Add("Oxygen too [oxygen > 30 ? "high" : "low"].")
+
+
+
+	if(phoron > 0.1)		// Toxic even in small amounts.
+		status.Add("Phoron contamination.")
+	if(nitrousoxide > 0.1)	// Probably slightly less dangerous but still.
+		status.Add("N2O contamination.")
+	if(hydrogen > 2.5)	// Not too dangerous, but flammable.
+		status.Add("Hydrogen contamination.")
+	if(carbondioxide > 5)	// Not as dangerous until very large amount is present.
+		status.Add("CO2 concentration high.")
+
+
+	if(returntext)
+		return jointext(status, " ")
+	else
+		return status.len
+
+#undef MINIMUM_MOLES_TO_PUMP
+#undef MINIMUM_MOLES_TO_FILTER
+#undef ATMOS_PUMP_EFFICIENCY
+#undef ATMOS_FILTER_EFFICIENCY
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 5c62143e0a6..c82ce10a04c 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -96,7 +96,16 @@
 
 	var/static/list/atmos_connections = list(COMSIG_TURF_EXPOSE = .proc/check_air_dangerlevel)
 
-	var/list/TLV = list( // Breathable air.
+	var/list/TLV = list(
+		"pressure" = new/datum/tlv(HAZARD_LOW_PRESSURE, WARNING_LOW_PRESSURE, WARNING_HIGH_PRESSURE, HAZARD_HIGH_PRESSURE),
+		"temperature" = new/datum/tlv(BODYTEMP_COLD_WARNING_1, BODYTEMP_COLD_WARNING_1+10, BODYTEMP_HEAT_WARNING_1-27, BODYTEMP_HEAT_WARNING_1),
+		GAS_OXYGEN = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
+		GAS_NITROGEN = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_CO2 = new/datum/tlv(-1, -1, 5, 10),
+		GAS_PLASMA = new/datum/tlv/dangerous,
+		GAS_N2O = new/datum/tlv/dangerous,
+	)
+	/* // Breathable air.
 		"pressure" = new/datum/tlv(HAZARD_LOW_PRESSURE, WARNING_LOW_PRESSURE, WARNING_HIGH_PRESSURE, HAZARD_HIGH_PRESSURE), // kPa. Values are hazard_min, warning_min, warning_max, hazard_max
 		"temperature" = new/datum/tlv(BODYTEMP_COLD_WARNING_1, BODYTEMP_COLD_WARNING_1+10, BODYTEMP_HEAT_WARNING_1-27, BODYTEMP_HEAT_WARNING_1),
 		/datum/gas/oxygen = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
@@ -119,7 +128,7 @@
 		/datum/gas/helium = new/datum/tlv/dangerous,
 		/datum/gas/antinoblium = new/datum/tlv/dangerous,
 		/datum/gas/halon = new/datum/tlv/dangerous
-	)
+		)*/
 
 /obj/machinery/airalarm/Initialize(mapload, ndir, nbuild)
 	. = ..()
@@ -212,7 +221,7 @@
 	))
 	var/total_moles = environment.total_moles()
 	var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume
-	for(var/gas_id in environment.gases)
+	for(var/gas_id in environment.get_gases())
 		if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
 			continue
 		cur_tlv = TLV[gas_id]
@@ -287,11 +296,11 @@
 		thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "warning_max", "selected" = selected.warning_max))
 		thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "hazard_max", "selected" = selected.hazard_max))
 
-		for(var/gas_id in GLOB.meta_gas_info)
+		for(var/gas_id in GLOB.all_gases)
 			if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
 				continue
 			selected = TLV[gas_id]
-			thresholds += list(list("name" = GLOB.meta_gas_info[gas_id][META_GAS_NAME], "settings" = list()))
+			thresholds += list(list("name" = gas_id, "settings" = list()))
 			thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "hazard_min", "selected" = selected.hazard_min))
 			thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "warning_min", "selected" = selected.warning_min))
 			thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "warning_max", "selected" = selected.warning_max))
@@ -437,7 +446,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"set_filters" = list(/datum/gas/carbon_dioxide),
+					"set_filters" = list(GAS_CO2),
 					"scrubbing" = 1,
 					"widenet" = 0
 				), signal_source)
@@ -451,7 +460,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"set_filters" = ALL_GASES,
+					"set_filters" = GLOB.all_gases,
 					"scrubbing" = 1,
 					"widenet" = 1
 				), signal_source)
@@ -478,7 +487,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"set_filters" = list(/datum/gas/carbon_dioxide),
+					"set_filters" = list(GAS_CO2),
 					"scrubbing" = 1,
 					"widenet" = 0
 				), signal_source)
@@ -599,7 +608,7 @@
 	//cache for sanic speed (lists are references anyways)
 	var/list/cached_tlv = TLV
 
-	var/list/env_gases = environment.gases
+	var/list/env_gases = environment.get_gases()
 	var/partial_pressure = R_IDEAL_GAS_EQUATION * exposed_temperature / environment.volume
 
 	current_tlv = cached_tlv["pressure"]
@@ -614,9 +623,7 @@
 		if(!(gas_id in cached_tlv)) // We're not interested in this gas, it seems.
 			continue
 		current_tlv = cached_tlv[gas_id]
-		gas_dangerlevel = max(gas_dangerlevel, current_tlv.get_danger_level(env_gases[gas_id][MOLES] * partial_pressure))
-
-	environment.garbage_collect()
+		gas_dangerlevel = max(gas_dangerlevel, current_tlv.get_danger_level(env_gases[gas_id] * partial_pressure))
 
 	var/old_danger_level = danger_level
 	danger_level = max(pressure_dangerlevel, temperature_dangerlevel, gas_dangerlevel)
@@ -935,9 +942,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 			"Temperature" = "temperature"
 		)
 
-		for(var/gas_id in GLOB.meta_gas_info)
-			component_options[GLOB.meta_gas_info[gas_id][META_GAS_NAME]] = gas_id2path(gas_id)
-
+		for(var/gas_id in GLOB.common_gases)
+			//component_options[GLOB.meta_gas_info[gas_id][META_GAS_NAME]] = gas_id2path(gas_id)
+			component_options |= gas_id
 	air_alarm_options = add_option_port("Air Alarm Options", component_options)
 	options_map = component_options
 
@@ -962,7 +969,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 		pressure.set_output(round(environment.return_pressure()))
 		temperature.set_output(round(environment.temperature))
 		if(ispath(options_map[current_option]))
-			gas_amount.set_output(round(environment.gases[options_map[current_option]][MOLES]))
+			gas_amount.set_output(round(environment.get_gases()[options_map[current_option]]))
 		return
 
 	var/datum/tlv/settings = connected_alarm.TLV[options_map[current_option]]
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
index af52c1a78a8..01c3dc5e8e7 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
@@ -122,7 +122,7 @@
 		if(node2)
 			node2.atmos_init()
 			node2.add_member(src)
-		SSair.add_to_rebuild_queue(src)
+		SSzas.add_to_rebuild_queue(src)
 
 	return TRUE
 
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index 4c82f903a49..ba50629b708 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -56,7 +56,8 @@ Passive gate is similar to the regular pump except:
 
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
-	if(air1.release_gas_to(air2, target_pressure))
+	var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
+	if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)) >= 0)//pump_gas() will return a negative number if no flow occurred
 		update_parents()
 
 //Radio remote control
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm
index c5b3a43dc50..81c1c28c16f 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm
@@ -55,7 +55,8 @@
 	var/datum/gas_mixture/air2 = airs[2]
 
 	if(air1.return_pressure() > target_pressure)
-		if(air1.release_gas_to(air2, air1.return_pressure()))
+		var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
+		if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)))
 			update_parents()
 			is_gas_flowing = TRUE
 	else
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 1f372947f6e..c9a98bb535f 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -64,8 +64,8 @@
 
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
-
-	if(air1.pump_gas_to(air2, target_pressure))
+	var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
+	if(pump_gas(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)))
 		update_parents()
 
 /**
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 b9295a4d2cd..a6de5c17fa4 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm
@@ -59,14 +59,16 @@
 
 	if(!inverted)
 		if(air1.temperature < target_temperature)
-			if(air1.release_gas_to(air2, air1.return_pressure()))
+			var/transfer_moles = (ATMOS_DEFAULT_VOLUME_PUMP/air1.volume)*air1.total_moles
+			if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)))
 				update_parents()
 				is_gas_flowing = TRUE
 		else
 			is_gas_flowing = FALSE
 	else
 		if(air1.temperature > target_temperature)
-			if(air1.release_gas_to(air2, air1.return_pressure()))
+			var/transfer_moles = (ATMOS_DEFAULT_VOLUME_PUMP/air1.volume)*air1.total_moles
+			if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)))
 				update_parents()
 				is_gas_flowing = TRUE
 		else
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
index 253b8195c72..13c03a29c7d 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
@@ -333,7 +333,7 @@
 	if(node2)
 		node2.atmos_init()
 		node2.add_member(src)
-	SSair.add_to_rebuild_queue(src)
+	SSzas.add_to_rebuild_queue(src)
 
 /obj/machinery/atmospherics/components/binary/thermomachine/proc/disconnect_pipes()
 	var/obj/machinery/atmospherics/node1 = nodes[1]
diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm
index bc98e87f3c6..e7fb23f7e9a 100644
--- a/code/modules/atmospherics/machinery/components/components_base.dm
+++ b/code/modules/atmospherics/machinery/components/components_base.dm
@@ -197,7 +197,7 @@
  * This way gases won't get stuck
  */
 /obj/machinery/atmospherics/components/proc/update_parents()
-	if(!SSair.initialized)
+	if(!SSzas.initialized)
 		return
 	if(rebuilding)
 		update_parents_after_rebuild = TRUE
@@ -206,7 +206,7 @@
 		var/datum/pipeline/parent = parents[i]
 		if(!parent)
 			WARNING("Component is missing a pipenet! Rebuilding...")
-			SSair.add_to_rebuild_queue(src)
+			SSzas.add_to_rebuild_queue(src)
 		else
 			parent.update = TRUE
 
diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
index 4b9a7f12843..02ec0bb294c 100644
--- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
+++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
@@ -32,7 +32,7 @@
 	. = ..()
 	if(ispath(cell))
 		cell = new cell(src)
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 	update_appearance()
 
 /obj/machinery/electrolyzer/Destroy()
@@ -115,8 +115,6 @@
 
 		current_reaction.react(loc, env, working_power)
 
-	env.garbage_collect()
-
 /obj/machinery/electrolyzer/RefreshParts()
 	var/manipulator = 0
 	var/cap = 0
diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index ac3ebde272c..b02041cd51c 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -136,9 +136,7 @@
 	var/pressure_limit = max_pressure * safety_margin
 
 	var/moles_to_add = (pressure_limit * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
-	air_contents.assert_gas(gastype)
-	air_contents.gases[gastype][MOLES] += moles_to_add
-	air_contents.archive()
+	air_contents.adjust_gas(gastype, moles_to_add)
 
 /obj/machinery/atmospherics/components/tank/process_atmos()
 	if(air_contents.react(src))
@@ -365,8 +363,8 @@
 
 /obj/machinery/atmospherics/components/tank/air/Initialize(mapload)
 	. = ..()
-	fill_to_pressure(/datum/gas/oxygen, safety_margin = (O2STANDARD * 0.5))
-	fill_to_pressure(/datum/gas/nitrogen, safety_margin = (N2STANDARD * 0.5))
+	fill_to_pressure(GAS_OXYGEN, safety_margin = (O2STANDARD * 0.5))
+	fill_to_pressure(GAS_NITROGEN, safety_margin = (N2STANDARD * 0.5))
 
 /obj/machinery/atmospherics/components/tank/carbon_dioxide
 	gas_type = /datum/gas/carbon_dioxide
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 6f7af747d85..78fd349b75c 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -99,11 +99,7 @@
 	// If no filter is set, we just try to forward everything to air3 to avoid gas being outright lost.
 	if(filtering)
 		var/datum/gas_mixture/filtered_out = new
-
-		for(var/gas in removed.gases & filter_type)
-			var/datum/gas_mixture/removing = removed.remove_specific_ratio(gas, 1)
-			if(removing)
-				filtered_out.merge(removing)
+		filter_gas(filtering, removed, filtered_out, removed, null, INFINITY)
 		// Send things to the side output if we can, return them to the input if we can't.
 		// This means that other gases continue to flow to the main output if the side output is blocked.
 		if (side_output_full)
@@ -111,7 +107,6 @@
 		else
 			air2.merge(filtered_out)
 		// Make sure we don't send any now-empty gas entries to the main output
-		removed.garbage_collect()
 
 	// Send things to the main output if we can, return them to the input if we can't.
 	// This lets filtered gases continue to flow to the side output in a manner consistent with the main output behavior.
@@ -134,14 +129,14 @@
 
 /obj/machinery/atmospherics/components/trinary/filter/ui_data()
 	var/data = list()
+	var/static/all_gases = GLOB.all_gases
 	data["on"] = on
 	data["rate"] = round(transfer_rate)
 	data["max_rate"] = round(MAX_TRANSFER_RATE)
 
 	data["filter_types"] = list()
-	for(var/path in GLOB.meta_gas_info)
-		var/list/gas = GLOB.meta_gas_info[path]
-		data["filter_types"] += list(list("name" = gas[META_GAS_NAME], "gas_id" = gas[META_GAS_ID], "enabled" = (path in filter_type)))
+	for(var/gas in GLOB.all_gases)
+		data["filter_types"] += list(list("name" = gas[META_GAS_NAME], "enabled" = (path in filter_type)))
 
 	return data
 
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index c172844d47c..1abfa24475c 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -278,11 +278,13 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 
 	var/datum/gas_mixture/air1 = airs[1]
 
-	if(!nodes[1] || !airs[1] || !air1.gases.len || air1.total_moles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work.
+	/* PARIAH EDIT REMOVAL - HUGBOX BARGAGE
+	if(!nodes[1] || !airs[1] || !air1.gas.len || air1.total_moles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work.
 		var/msg = "Insufficient cryogenic gas, shutting down."
 		radio.talk_into(src, msg, radio_channel)
 		set_on(FALSE)
 		return
+	*/
 
 	if(occupant)
 		var/mob/living/mob_occupant = occupant
@@ -306,9 +308,6 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 				var/mob/living/carbon/human/humi = mob_occupant
 				humi.adjust_coretemperature(humi.bodytemperature - humi.coretemperature)
 
-
-		air1.garbage_collect()
-
 		if(air1.temperature > 2000)
 			take_damage(clamp((air1.temperature)/200, 10, 20), BURN)
 
@@ -555,7 +554,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 		if(node)
 			node.atmos_init()
 			node.add_member(src)
-		SSair.add_to_rebuild_queue(src)
+		SSzas.add_to_rebuild_queue(src)
 
 #undef MAX_TEMPERATURE
 #undef CRYO_MULTIPLY_FACTOR
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 5c6cacb5518..887bd167a35 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
@@ -53,11 +53,11 @@
 	if(!partner)
 		partner_ref = null
 		return
-	if(SSair.times_fired <= update_cycle)
+	if(SSzas.times_fired <= update_cycle)
 		return
 
-	update_cycle = SSair.times_fired
-	partner.update_cycle = SSair.times_fired
+	update_cycle = SSzas.times_fired
+	partner.update_cycle = SSzas.times_fired
 
 	var/datum/gas_mixture/air_contents = airs[1]
 	var/datum/gas_mixture/partnerair_contents = partner.airs[1]
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 d2b1d4bfee4..b1d46b02494 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -21,7 +21,7 @@
 	///The mode of the scrubber (SCRUBBING or SIPHONING)
 	var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing
 	///The list of gases we are filtering
-	var/list/filter_types = list(/datum/gas/carbon_dioxide)
+	var/list/filter_types = list(GAS_CO2)
 	///Rate of the scrubber to remove gases from the air
 	var/volume_rate = 200
 	///is this scrubber acting on the 3x3 area around it.
@@ -47,7 +47,7 @@
 	for(var/to_filter in filter_types)
 		if(istext(to_filter))
 			filter_types -= to_filter
-			filter_types += gas_id2path(to_filter)
+			filter_types += to_filter
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/Initialize(mapload)
 	. = ..()
@@ -69,13 +69,6 @@
 	if(!islist(filter_or_filters))
 		filter_or_filters = list(filter_or_filters)
 
-	for(var/gas_to_filter in filter_or_filters)
-		var/translated_gas = istext(gas_to_filter) ? gas_id2path(gas_to_filter) : gas_to_filter
-
-		if(ispath(translated_gas, /datum/gas))
-			filter_types |= translated_gas
-			continue
-
 	var/turf/open/our_turf = get_turf(src)
 
 	if(!isopenturf(our_turf))
@@ -93,12 +86,6 @@
 	if(!islist(filter_or_filters))
 		filter_or_filters = list(filter_or_filters)
 
-	for(var/gas_to_filter in filter_or_filters)
-		var/translated_gas = istext(gas_to_filter) ? gas_id2path(gas_to_filter) : gas_to_filter
-
-		if(ispath(translated_gas, /datum/gas))
-			filter_types -= translated_gas
-			continue
 
 	var/turf/open/our_turf = get_turf(src)
 	var/datum/gas_mixture/turf_gas
@@ -117,13 +104,6 @@
 		filter_or_filters = list(filter_or_filters)
 
 	for(var/gas_to_filter in filter_or_filters)
-		var/translated_gas = istext(gas_to_filter) ? gas_id2path(gas_to_filter) : gas_to_filter
-
-		if(ispath(translated_gas, /datum/gas))
-			if(translated_gas in filter_types)
-				filter_types -= translated_gas
-			else
-				filter_types |= translated_gas
 
 	var/turf/open/our_turf = get_turf(src)
 
@@ -172,9 +152,8 @@
 		return FALSE
 
 	var/list/f_types = list()
-	for(var/path in GLOB.meta_gas_info)
-		var/list/gas = GLOB.meta_gas_info[path]
-		f_types += list(list("gas_id" = gas[META_GAS_ID], "gas_name" = gas[META_GAS_NAME], "enabled" = (path in filter_types)))
+	for(var/gas_id in GLOB.common_gases)
+		f_types += list(list("gas_id" = gas_id, "gas_name" = gas_id, "enabled" = (gas_id in filter_types)))
 
 	var/datum/signal/signal = new(list(
 		"tag" = id_tag,
@@ -223,7 +202,7 @@
 		on = FALSE
 		return FALSE
 
-	var/list/changed_gas = air.gases
+	var/list/changed_gas = air.gas
 
 	if(!changed_gas)
 		return FALSE
@@ -260,38 +239,30 @@
 		return FALSE
 	var/datum/gas_mixture/environment = tile.return_air()
 	var/datum/gas_mixture/air_contents = airs[1]
-	var/list/env_gases = environment.gases
 
 	if(air_contents.return_pressure() >= 50 * ONE_ATMOSPHERE)
 		return FALSE
 
 	if(scrubbing == SCRUBBING)
-		if(length(env_gases & filter_types))
+		if(length(environment.gas & filter_types))
 			///contains all of the gas we're sucking out of the tile, gets put into our parent pipenet
 			var/datum/gas_mixture/filtered_out = new
-			var/list/filtered_gases = filtered_out.gases
 			filtered_out.temperature = environment.temperature
 
 			///maximum percentage of the turfs gas we can filter
 			var/removal_ratio =  min(1, volume_rate / environment.volume)
 
 			var/total_moles_to_remove = 0
-			for(var/gas in filter_types & env_gases)
-				total_moles_to_remove += env_gases[gas][MOLES]
+			for(var/gas in filter_types & environment.get_gases())
+				total_moles_to_remove += environment.get_gas(gas)
 
 			if(total_moles_to_remove == 0)//sometimes this gets non gc'd values
-				environment.garbage_collect()
 				return FALSE
 
-			for(var/gas in filter_types & env_gases)
-				filtered_out.add_gas(gas)
-				//take this gases portion of removal_ratio of the turfs air, or all of that gas if less than or equal to MINIMUM_MOLES_TO_SCRUB
-				var/transfered_moles = max(QUANTIZE(env_gases[gas][MOLES] * removal_ratio * (env_gases[gas][MOLES] / total_moles_to_remove)), min(MINIMUM_MOLES_TO_SCRUB, env_gases[gas][MOLES]))
-
-				filtered_gases[gas][MOLES] = transfered_moles
-				env_gases[gas][MOLES] -= transfered_moles
+			//take this gases portion of removal_ratio of the turfs air, or all of that gas if less than or equal to MINIMUM_MOLES_TO_SCRUB
+			var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles
+			scrub_gas(filter_types, environment, filtered_out, transfer_moles, INFINITY)
 
-			environment.garbage_collect()
 
 			//Remix the resulting gases
 			air_contents.merge(filtered_out)
@@ -315,7 +286,7 @@
 /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/check_turfs()
 	adjacent_turfs.Cut()
 	var/turf/local_turf = get_turf(src)
-	adjacent_turfs = local_turf.get_atmos_adjacent_turfs(alldir = TRUE)
+	adjacent_turfs = get_adjacent_open_turfs(local_turf)
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/receive_signal(datum/signal/signal)
 	if(!is_operational || !signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index dcb96442951..ff2433045ec 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -14,19 +14,19 @@
 	other_airs = list()
 	members = list()
 	other_atmos_machines = list()
-	SSair.networks += src
+	SSzas.networks += src
 
 /datum/pipeline/Destroy()
-	SSair.networks -= src
+	SSzas.networks -= src
 	if(building)
-		SSair.remove_from_expansion(src)
+		SSzas.remove_from_expansion(src)
 	if(air?.volume)
 		temporarily_store_air()
 	for(var/obj/machinery/atmospherics/pipe/considered_pipe in members)
 		considered_pipe.parent = null
 		if(QDELETED(considered_pipe))
 			continue
-		SSair.add_to_rebuild_queue(considered_pipe)
+		SSzas.add_to_rebuild_queue(considered_pipe)
 	for(var/obj/machinery/atmospherics/components/considered_component in other_atmos_machines)
 		considered_component.nullify_pipenet(src)
 	return ..()
@@ -56,7 +56,7 @@
 		air = new
 
 	air.volume = volume
-	SSair.add_to_expansion(src, base)
+	SSzas.add_to_expansion(src, base)
 
 ///Has the same effect as build_pipeline(), but this doesn't queue its work, so overrun abounds. It's useful for the pregame
 /datum/pipeline/proc/build_pipeline_blocking(obj/machinery/atmospherics/base)
@@ -238,33 +238,44 @@
 			pipeline_list |= atmos_machine.return_pipenets_for_reconcilation(src)
 			gas_mixture_list |= atmos_machine.return_airs_for_reconcilation(src)
 
-	var/total_thermal_energy = 0
-	var/total_heat_capacity = 0
-	var/datum/gas_mixture/total_gas_mixture = new(0)
-
-	var/list/total_gases = total_gas_mixture.gases
-
-	for(var/datum/gas_mixture/gas_mixture as anything in gas_mixture_list)
-		total_gas_mixture.volume += gas_mixture.volume
-
-		// This is sort of a combined merge + heat_capacity calculation
+	equalize_gases(gas_mixture_list)
 
-		var/list/giver_gases = gas_mixture.gases
-		//gas transfer
-		for(var/giver_id in giver_gases)
-			var/giver_gas_data = giver_gases[giver_id]
-			ASSERT_GAS(giver_id, total_gas_mixture)
-			total_gases[giver_id][MOLES] += giver_gas_data[MOLES]
-			total_heat_capacity += giver_gas_data[MOLES] * giver_gas_data[GAS_META][META_GAS_SPECIFIC_HEAT]
 
-		total_thermal_energy += THERMAL_ENERGY(gas_mixture)
-
-	total_gas_mixture.temperature = total_heat_capacity ? (total_thermal_energy / total_heat_capacity) : 0
-
-	total_gas_mixture.garbage_collect()
+/proc/equalize_gases(list/datum/gas_mixture/gases)
+	//Calculate totals from individual components
+	var/total_volume = 0
+	var/total_thermal_energy = 0
+	var/total_heat_capacity = 0
 
-	if(total_gas_mixture.volume > 0)
-		//Update individual gas_mixtures by volume ratio
-		for(var/mixture in gas_mixture_list)
-			var/datum/gas_mixture/gas_mixture = mixture
-			gas_mixture.copy_from(total_gas_mixture, gas_mixture.volume / total_gas_mixture.volume)
+	var/list/total_gas = list()
+	for(var/datum/gas_mixture/gasmix in gases)
+		total_volume += gasmix.volume
+		var/temp_heatcap = gasmix.heat_capacity()
+		total_thermal_energy += gasmix.temperature * temp_heatcap
+		total_heat_capacity += temp_heatcap
+		for(var/g in gasmix.get_gases())
+			total_gas[g] += gasmix.gas[g]
+
+	if(total_volume > 0)
+		var/datum/gas_mixture/combined = new(total_volume)
+		combined.gas = total_gas
+
+		//Calculate temperature
+		if(total_heat_capacity > 0)
+			combined.temperature = total_thermal_energy / total_heat_capacity
+		combined.update_values()
+
+		//Allow for reactions
+		combined.react()
+
+		//Average out the gases
+		for(var/g in combined.get_gases())
+			combined.gas[g] /= total_volume
+
+		//Update individual gas_mixtures
+		for(var/datum/gas_mixture/gasmix in gases)
+			gasmix.gas = combined.gas.Copy()
+			gasmix.temperature = combined.temperature
+			gasmix.multiply(gasmix.volume)
+
+	return 1
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 192c8ff2458..767fa2534e3 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -18,7 +18,7 @@
 	var/target_layer = PIPING_LAYER_DEFAULT
 
 /obj/machinery/meter/Destroy()
-	SSair.stop_processing_machine(src)
+	SSzas.stop_processing_machine(src)
 	target = null
 	return ..()
 
@@ -26,7 +26,7 @@
 	if(!isnull(new_piping_layer))
 		target_layer = new_piping_layer
 
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 
 	if(!target)
 		reattach_to_layer()
@@ -50,10 +50,10 @@
 
 /obj/machinery/meter/on_set_is_operational(old_value)
 	if(is_operational)
-		SSair.start_processing_machine(src)//dont set icon_state here because it will be reset on next process() if it ever happens
+		SSzas.start_processing_machine(src)//dont set icon_state here because it will be reset on next process() if it ever happens
 	else
 		icon_state = "meter"
-		SSair.stop_processing_machine(src)
+		SSzas.stop_processing_machine(src)
 
 /obj/machinery/meter/process_atmos()
 	var/datum/gas_mixture/pipe_air = target.return_air()
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 457352b6ab8..f83b314f5df 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -134,9 +134,7 @@
 	if(!isopenturf(O))
 		return FALSE
 	var/datum/gas_mixture/merger = new
-	merger.assert_gas(spawn_id)
-	merger.gases[spawn_id][MOLES] = spawn_mol * delta_time
-	merger.temperature = spawn_temp
+	merger.adjust_gas_temp(spawn_id, spawn_mol * delta_time, spawn_temp)
 	O.assume_air(merger)
 
 /obj/machinery/atmospherics/miner/attack_ai(mob/living/silicon/user)
diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
index 9a3abdb16c5..74cac69ed1b 100644
--- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
@@ -34,7 +34,7 @@
 /obj/machinery/atmospherics/pipe/layer_manifold/proc/nullify_all_nodes()
 	for(var/obj/machinery/atmospherics/node in nodes)
 		node.disconnect(src)
-		SSair.add_to_rebuild_queue(node)
+		SSzas.add_to_rebuild_queue(node)
 	front_nodes = null
 	back_nodes = null
 	nodes = list()
diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm
index 2f6d7d45297..f0fe7850ab3 100644
--- a/code/modules/atmospherics/machinery/pipes/pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/pipes.dm
@@ -33,7 +33,7 @@
 	var/obj/machinery/atmospherics/old_node = nodes[i]
 	. = ..()
 	if(old_node)
-		SSair.add_to_rebuild_queue(old_node)
+		SSzas.add_to_rebuild_queue(old_node)
 
 /obj/machinery/atmospherics/pipe/destroy_network()
 	QDEL_NULL(parent)
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 26dfe3e8651..72945fca32a 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -57,18 +57,33 @@
 
 	excited = TRUE
 
+	var/pressure_delta
+	var/output_volume
+	var/air_temperature
 	var/turf/local_turf = 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.return_air() : air_contents)
-		receiving = (holding ? air_contents : local_turf.return_air())
+	var/datum/gas_mixture/environment
+	if(holding)
+		environment = holding.air_contents
+	else
+		environment = loc.return_air()
+
+	if(direction == PUMP_OUT)
+		pressure_delta = target_pressure - environment.return_pressure()
+		output_volume = environment.volume * environment.group_multiplier
+		air_temperature = environment.temperature? environment.temperature : air_contents.temperature
 	else
-		sending = (holding ? air_contents : local_turf.return_air())
-		receiving = (holding ? holding.return_air() : air_contents)
+		pressure_delta = environment.return_pressure() - target_pressure
+		output_volume = air_contents.volume * air_contents.group_multiplier
+		air_temperature = air_contents.temperature? air_contents.temperature : environment.temperature
+
+	var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION)
 
-	if(sending.pump_gas_to(receiving, target_pressure) && !holding)
-		//air_update_turf(FALSE, FALSE) // Update the environment if needed.
+	if (pressure_delta > 0.01)
+		if (direction == PUMP_OUT)
+			pump_gas(src, air_contents, environment, transfer_moles)
+		else
+			pump_gas(src, environment, air_contents, transfer_moles)
+	//air_update_turf(FALSE, FALSE) // Update the environment if needed.
 
 	return ..()
 
@@ -81,7 +96,7 @@
 	if(prob(50 / severity))
 		on = !on
 		if(on)
-			SSair.start_processing_machine(src)
+			SSzas.start_processing_machine(src)
 	if(prob(100 / severity))
 		direction = PUMP_OUT
 	target_pressure = rand(0, 100 * ONE_ATMOSPHERE)
@@ -132,10 +147,10 @@
 		if("power")
 			on = !on
 			if(on)
-				SSair.start_processing_machine(src)
+				SSzas.start_processing_machine(src)
 			if(on && !holding)
-				var/plasma = air_contents.gases[/datum/gas/plasma]
-				var/n2o = air_contents.gases[/datum/gas/nitrous_oxide]
+				var/plasma = air_contents.get_gas(GAS_PLASMA)
+				var/n2o = air_contents.get_gas(GAS_N2O)
 				if(n2o || plasma)
 					message_admins("[ADMIN_LOOKUPFLW(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [ADMIN_VERBOSEJMP(src)]")
 					log_admin("[key_name(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [AREACOORD(src)]")
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index bbf6ed311c1..049e69d4ce3 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -17,6 +17,7 @@
 	var/overpressure_m = 80
 	///Should the machine use overlay in update_overlays() when open/close?
 	var/use_overlays = TRUE
+	var/power_rating = 7500
 	///List of gases that can be scrubbed
 	var/list/scrubbing = list(
 		/datum/gas/plasma,
@@ -82,24 +83,18 @@
 	if(air_contents.return_pressure() >= overpressure_m * ONE_ATMOSPHERE)
 		return
 
-	var/transfer_moles = min(1, volume_rate / mixture.volume) * mixture.total_moles()
+	var/transfer_moles = min(1, volume_rate/mixture.volume)*mixture.total_moles
 
-	var/datum/gas_mixture/filtering = mixture.remove(transfer_moles) // Remove part of the mixture to filter.
+	var/datum/gas_mixture/gas2scrub = mixture.remove(transfer_moles) // Remove part of the mixture to filter.
 	var/datum/gas_mixture/filtered = new
-	if(!filtering)
+	if(!scrubbing)
 		return
 
-	filtered.temperature = filtering.temperature
-	for(var/gas in filtering.gases & scrubbing)
-		filtered.add_gas(gas)
-		filtered.gases[gas][MOLES] = filtering.gases[gas][MOLES] // Shuffle the "bad" gasses to the filtered mixture.
-		filtering.gases[gas][MOLES] = 0
-	filtering.garbage_collect() // Now that the gasses are set to 0, clean up the mixture.
-
-	air_contents.merge(filtered) // Store filtered out gasses.
-	mixture.merge(filtering) // Returned the cleaned gas.
+	scrub_gas(scrubbing, gas2scrub, air_contents, transfer_moles, power_rating)
+	/*
 	if(!holding)
-		//air_update_turf(FALSE, FALSE)
+		air_update_turf(FALSE, FALSE)
+	*/
 
 /obj/machinery/portable_atmospherics/scrubber/emp_act(severity)
 	. = ..()
@@ -109,7 +104,7 @@
 		if(prob(50 / severity))
 			on = !on
 			if(on)
-				SSair.start_processing_machine(src)
+				SSzas.start_processing_machine(src)
 		update_appearance()
 
 /obj/machinery/portable_atmospherics/scrubber/ui_interact(mob/user, datum/tgui/ui)
@@ -126,9 +121,8 @@
 
 	data["id_tag"] = -1 //must be defined in order to reuse code between portable and vent scrubbers
 	data["filter_types"] = list()
-	for(var/path in GLOB.meta_gas_info)
-		var/list/gas = GLOB.meta_gas_info[path]
-		data["filter_types"] += list(list("gas_id" = gas[META_GAS_ID], "gas_name" = gas[META_GAS_NAME], "enabled" = (path in scrubbing)))
+	for(var/gas_id in GLOB.common_gases)
+		data["filter_types"] += list(list("gas_id" = gas_id, "gas_name" = gas_id, "enabled" = (gas_id in scrubbing)))
 
 	if(holding)
 		data["holding"] = list()
@@ -158,14 +152,14 @@
 		if("power")
 			on = !on
 			if(on)
-				SSair.start_processing_machine(src)
+				SSzas.start_processing_machine(src)
 			. = TRUE
 		if("eject")
 			if(holding)
 				replace_tank(usr, FALSE)
 				. = TRUE
 		if("toggle_filter")
-			scrubbing ^= gas_id2path(params["val"])
+			scrubbing ^= params["val"]
 			. = TRUE
 	update_appearance()
 
@@ -179,6 +173,7 @@
 	anchored = TRUE
 	active_power_usage = 500
 	idle_power_usage = 10
+	power_rating = 100000
 
 	overpressure_m = 200
 	volume_rate = 1500
@@ -208,9 +203,7 @@
 	excited = TRUE
 
 	if(!holding)
-		var/turf/T = get_turf(src)
-		for(var/turf/AT in T.get_atmos_adjacent_turfs(alldir = TRUE))
-			scrub(AT.return_air())
+		scrub(get_turf(src).return_air())
 
 	return ..()
 
diff --git a/code/modules/awaymissions/away_props.dm b/code/modules/awaymissions/away_props.dm
index 71d04598086..077f8abd42a 100644
--- a/code/modules/awaymissions/away_props.dm
+++ b/code/modules/awaymissions/away_props.dm
@@ -10,24 +10,6 @@
 	. = ..()
 	return . && (REVERSE_DIR(border_dir) == dir || get_turf(mover) == get_turf(src))
 
-
-/obj/effect/wind
-	name = "wind effect"
-	desc = "Creates pressure effect in it's direction. Use sparingly."
-	icon = 'icons/effects/mapping_helpers.dmi'
-	icon_state = "field_dir"
-	invisibility = INVISIBILITY_MAXIMUM
-	var/strength = 30
-
-/obj/effect/wind/Initialize(mapload)
-	. = ..()
-	START_PROCESSING(SSobj,src)
-
-/obj/effect/wind/process()
-	var/turf/open/T = get_turf(src)
-	if(istype(T))
-		T.consider_pressure_difference(get_step(T,dir),strength)
-
 //Keep these rare due to cost of doing these checks
 /obj/effect/path_blocker
 	name = "magic barrier"
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index 422082a060f..885aa0b1a12 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -106,30 +106,12 @@
 	var/obj/machinery/portable_atmospherics/canister/C = O
 	var/worth = cost
 	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/nitrium,
-								/datum/gas/hypernoblium,
-								/datum/gas/miasma,
-								/datum/gas/tritium,
-								/datum/gas/pluoxium,
-								/datum/gas/freon,
-								/datum/gas/hydrogen,
-								/datum/gas/healium,
-								/datum/gas/proto_nitrate,
-								/datum/gas/zauker,
-								/datum/gas/helium,
-								/datum/gas/antinoblium,
-								/datum/gas/halon,
-								)
+	var/list/gases_to_check = GLOB.all_gases
 
 	for(var/gasID in gases_to_check)
-		canister_mix.assert_gas(gasID)
-		if(canister_gas[gasID][MOLES] > 0)
-			worth += get_gas_value(gasID, canister_gas[gasID][MOLES])
+		if(canister_mix.get_gas(gasID) > 0)
+			worth += get_gas_value(gasID, canister_gas.get_gas(gasID))
 
-	canister_mix.garbage_collect()
 	return worth
 
 /datum/export/large/gas_canister/proc/get_gas_value(datum/gas/gasType, moles)
diff --git a/tgstation.dme b/tgstation.dme
index ef7f70abfe1..ec89a81aa47 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -194,6 +194,7 @@
 #include "code\__DEFINES\atmospherics\atmos_mapping_helpers.dm"
 #include "code\__DEFINES\atmospherics\atmos_mob_interaction.dm"
 #include "code\__DEFINES\atmospherics\atmos_piping.dm"
+#include "code\__DEFINES\atmospherics\temperature.dm"
 #include "code\__DEFINES\atmospherics\ZAS.dm"
 #include "code\__DEFINES\atmospherics\ZAS_math.dm"
 #include "code\__DEFINES\dcs\flags.dm"
@@ -553,6 +554,7 @@
 #include "code\controllers\subsystem\processing\quirks.dm"
 #include "code\controllers\subsystem\processing\reagents.dm"
 #include "code\controllers\subsystem\processing\singulo.dm"
+#include "code\controllers\subsystem\processing\temperature.dm"
 #include "code\controllers\subsystem\processing\station.dm"
 #include "code\controllers\subsystem\processing\tramprocess.dm"
 #include "code\controllers\subsystem\processing\wet_floors.dm"
@@ -2323,7 +2325,7 @@
 #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\mixer.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_devices.dm"
-#include "code\modules\atmospherics\machinery\components\unary_devices\bluespace_sender.dm"
+//#include "code\modules\atmospherics\machinery\components\unary_devices\bluespace_sender.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\cryo.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\heat_exchanger.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\outlet_injector.dm"
@@ -2339,6 +2341,7 @@
 #include "code\modules\atmospherics\machinery\pipes\layermanifold.dm"
 #include "code\modules\atmospherics\machinery\pipes\mapping.dm"
 #include "code\modules\atmospherics\machinery\pipes\multiz.dm"
+#include "code\modules\atmospherics\ZAS\Temperature.dm"
 #include "code\modules\atmospherics\ZAS\atmos_primitives.dm"
 #include "code\modules\atmospherics\machinery\pipes\pipes.dm"
 #include "code\modules\atmospherics\machinery\pipes\smart.dm"

From dd47faf7783d1a92cb3edf06bbaa84c0df649a43 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 15 Apr 2022 18:13:04 -0400
Subject: [PATCH 005/200] Gonna pull the trigger soon

---
 code/__DEFINES/atmospherics/ZAS.dm            | 13 ++++
 code/datums/mutations/actions.dm              |  3 +-
 code/game/objects/effects/mines.dm            |  4 +-
 code/game/objects/items/devices/PDA/PDA.dm    |  6 +-
 .../items/devices/scanners/gas_analyzer.dm    |  2 +-
 code/game/objects/structures/aliens.dm        |  6 +-
 code/game/objects/structures/bonfire.dm       |  6 +-
 .../crates_lockers/closets/bodybag.dm         |  5 +-
 code/game/objects/structures/mineral_doors.dm |  2 +
 code/game/objects/structures/plasticflaps.dm  |  4 +-
 .../transit_tubes/transit_tube_pod.dm         |  5 +-
 .../objects/structures/windoor_assembly.dm    |  4 +-
 code/game/turfs/change_turf.dm                | 66 ++++++++++++++-----
 code/game/turfs/closed/_closed.dm             |  3 +-
 code/game/turfs/closed/wall/mineral_walls.dm  |  2 +-
 code/game/turfs/closed/walls.dm               |  2 +-
 code/modules/admin/verbs/fix_air.dm           | 17 +++--
 code/modules/atmospherics/ZAS/Turf.dm         |  2 +
 code/modules/atmospherics/ZAS/XGM/gas_data.dm | 10 +++
 .../atmospherics/machinery/airalarm.dm        |  1 -
 code/modules/cargo/bounties/engineering.dm    |  4 +-
 code/modules/cargo/exports/large_objects.dm   |  6 +-
 code/modules/cargo/packs.dm                   | 13 ++--
 code/modules/unit_tests/gas_transfer.dm       | 13 ++--
 24 files changed, 127 insertions(+), 72 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 364158806bf..326f7f63016 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -198,6 +198,19 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
 #define ZONE_ACTIVE   1
 #define ZONE_SLEEPING 0
 
+//OPEN TURF ATMOS
+/// the default air mix that open turfs spawn
+#define OPENTURF_DEFAULT_ATMOS list(GAS_OXYGEN=MOLESO2ATMOS, GAS_NITROGEN=MOLESN2ATMOS)
+//#define OPENTURF_LOW_PRESSURE "o2=14;n2=30;TEMP=293.15"
+/// -193,15°C telecommunications. also used for xenobiology slime killrooms
+//#define TCOMMS_ATMOS "n2=100;TEMP=80"
+/// space
+#define AIRLESS_ATMOS list()
+/// -93.15°C snow and ice turfs
+//#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180"
+/// -14°C kitchen coldroom, just might loss your tail; higher amount of mol to reach about 101.3 kpA
+//#define KITCHEN_COLDROOM_ATMOS "o2=26;n2=97;TEMP=[COLD_ROOM_TEMP]"
+
 // Defines how much of certain gas do the Atmospherics tanks start with. Values are in kpa per tile (assuming 20C)
 #define ATMOSTANK_NITROGEN      90000 // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
 #define ATMOSTANK_OXYGEN        50000 // O2 is also important for airmix, but not as much as N2 as it's only 21% of it.
diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm
index 8096870697e..5367666877e 100644
--- a/code/datums/mutations/actions.dm
+++ b/code/datums/mutations/actions.dm
@@ -41,6 +41,7 @@
 
 /obj/effect/proc_holder/spell/targeted/olfaction/cast(list/targets, mob/living/user = usr)
 	//can we sniff? is there miasma in the air?
+	/*
 	var/datum/gas_mixture/air = user.loc.return_air()
 	var/list/cached_gases = air.gases
 
@@ -48,7 +49,7 @@
 		user.adjust_disgust(sensitivity * 45)
 		to_chat(user, span_warning("With your overly sensitive nose, you get a whiff of stench and feel sick! Try moving to a cleaner area!"))
 		return
-
+	*/.
 	var/atom/sniffed = user.get_active_held_item()
 	if(sniffed)
 		var/old_target = tracking_target
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index 0faa180d74f..957717fa2d5 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -113,7 +113,9 @@
 	var/gas_type = "o2"
 
 /obj/effect/mine/gas/mineEffect(mob/victim)
-	atmos_spawn_air("[gas_type]=[gas_amount]")
+	if(isopenturf(loc))
+		var/turf/open/openloc = loc
+		openloc.atmos_spawn_air(gas_type, gas_amount)
 
 
 /obj/effect/mine/gas/plasma
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index a2ef23449fc..f91cba16e89 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -447,7 +447,7 @@ GLOBAL_LIST_EMPTY(PDAs)
 					dat += "Unable to obtain a reading.<br>"
 				else
 					var/datum/gas_mixture/environment = T.return_air()
-					var/list/env_gases = environment.gases
+					var/list/env_gases = environment.get_gases()
 
 					var/pressure = environment.return_pressure()
 					var/total_moles = environment.total_moles()
@@ -456,9 +456,9 @@ GLOBAL_LIST_EMPTY(PDAs)
 
 					if (total_moles)
 						for(var/id in env_gases)
-							var/gas_level = env_gases[id][MOLES]/total_moles
+							var/gas_level = environment.get_gas(id)/total_moles
 							if(gas_level > 0)
-								dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100, 0.01)]%<br>"
+								dat += "[env_gases[id]]: [round(gas_level*100, 0.01)]%<br>"
 
 					dat += "Temperature: [round(environment.temperature-T0C)]&deg;C<br>"
 				dat += "<br>"
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index 997d0da6585..3f2f88e3f6c 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -160,7 +160,7 @@
 
 			var/list/cached_gases = air.gas
 			for(var/id in cached_gases)
-				var/gas_concentration = air.get_total_moles(gas_id)/total_moles
+				var/gas_concentration = air.get_gas(id)/total_moles
 				message += span_notice("[id]: [round(air.get_gas(id), 0.01)] mol ([round(gas_concentration*100, 0.01)] %)")
 			message += span_notice("Temperature: [round(temperature - T0C,0.01)] &deg;C ([round(temperature, 0.01)] K)")
 			message += span_notice("Volume: [volume] L")
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index d025218944f..07c969e0739 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -73,12 +73,12 @@
 /obj/structure/alien/resin/Destroy()
 	//air_update_turf(TRUE, FALSE)
 	. = ..()
-
+/*
 /obj/structure/alien/resin/Move()
 	var/turf/T = loc
 	. = ..()
 	move_update_air(T)
-
+*/
 /obj/structure/alien/resin/wall
 	name = "resin wall"
 	desc = "Thick resin solidified into a wall."
@@ -202,7 +202,7 @@
 		qdel(src)
 		return
 	//lets try to grow in a direction
-	for(var/turf/check_turf in src_turf.get_atmos_adjacent_turfs())
+	for(var/turf/check_turf in src_turf.get_adjacent_open_turfs())
 		//we cannot grow on blacklisted turfs
 		if(is_type_in_list(check_turf, blacklisted_turfs))
 			continue
diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm
index 6bfb760817f..916c42c01e8 100644
--- a/code/game/objects/structures/bonfire.dm
+++ b/code/game/objects/structures/bonfire.dm
@@ -98,9 +98,9 @@
 /obj/structure/bonfire/proc/check_oxygen()
 	if(isopenturf(loc))
 		var/turf/open/bonfire_turf = loc
-		if(bonfire_turf.air)
-			var/loc_gases = bonfire_turf.air.gases
-			if(loc_gases[/datum/gas/oxygen] && loc_gases[/datum/gas/oxygen][MOLES] >= 5)
+		var/datum/gas_mixture/local_gas = bonfire_turf.return_air()
+		if(local_gas)
+			if(local_gas.has_gas(GAS_OXYGEN, 5))
 				return TRUE
 	return FALSE
 
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 8aa3ce169af..9ee3e118680 100644
--- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm
+++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
@@ -325,9 +325,8 @@
 	air_contents = new(50) //liters
 	air_contents.temperature = T20C
 
-	air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide)
-	air_contents.gases[/datum/gas/oxygen][MOLES] = (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
-	air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD
+	air_contents.adjust_gas(GAS_OXYGEN, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD)
+	air_contents.adjust_gas(GAS_N2O, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD)
 
 /obj/structure/closet/body_bag/environmental/prisoner/syndicate/Destroy()
 	if(air_contents)
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 1f49ac6602a..5b255b11866 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -43,8 +43,10 @@
 /obj/structure/mineral_door/Move()
 	var/turf/T = loc
 	. = ..()
+	/*
 	if(!door_opened)
 		move_update_air(T)
+	*/
 
 /obj/structure/mineral_door/Bumped(atom/movable/AM)
 	..()
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index 7de6274d8e1..cab6be77908 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -115,8 +115,10 @@
 	. = ..()
 	//air_update_turf(TRUE, TRUE)
 
+/*
 /obj/structure/plasticflaps/Destroy()
 	var/atom/oldloc = loc
 	. = ..()
 	if (oldloc)
-		oldloc.//air_update_turf(TRUE, FALSE)
+		oldloc./air_update_turf(TRUE, FALSE)
+*/
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 1d1d5028d00..d26ff609d11 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -14,9 +14,8 @@
 
 /obj/structure/transit_tube_pod/Initialize(mapload)
 	. = ..()
-	air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen)
-	air_contents.gases[/datum/gas/oxygen][MOLES] = MOLES_O2STANDARD
-	air_contents.gases[/datum/gas/nitrogen][MOLES] = MOLES_N2STANDARD
+	air_contents.adjust_gas(GAS_OXYGEN, MOLES_O2STANDARD)
+	air_contents.adjust_gas(GAS_NITROGEN, MOLES_N2STANDARD)
 	air_contents.temperature = T20C
 
 /obj/structure/transit_tube_pod/Destroy()
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index ef5b5541cd5..7354b182b93 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -46,12 +46,12 @@
 	set_density(FALSE)
 	//air_update_turf(TRUE, FALSE)
 	return ..()
-
+/*
 /obj/structure/windoor_assembly/Move()
 	var/turf/T = loc
 	. = ..()
 	move_update_air(T)
-
+*/
 /obj/structure/windoor_assembly/update_icon_state()
 	icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]"
 	return ..()
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 544ee271a55..1671adb019a 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -15,8 +15,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 
 	if(turf_type)
 		var/turf/newT = ChangeTurf(turf_type, baseturf_type, flags)
-		SSair.remove_from_active(newT)
-		CALCULATE_ADJACENT_TURFS(newT, KILL_EXCITED)
+		SSzas.mark_for_update(newT)
+		//CALCULATE_ADJACENT_TURFS(newT, KILL_EXCITED)
 
 /turf/proc/copyTurf(turf/T)
 	if(T.type != type)
@@ -82,6 +82,15 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	var/old_bp = blueprint_data
 	blueprint_data = null
 
+	if(connections) connections.erase_all()
+
+	if(istype(src,/turf/simulated))
+		//Yeah, we're just going to rebuild the whole thing.
+		//Despite this being called a bunch during explosions,
+		//the zone will only really do heavy lifting once.
+		var/turf/simulated/S = src
+		if(S.zone) S.zone.rebuild()
+
 	var/list/old_baseturfs = baseturfs
 	var/old_type = type
 
@@ -95,6 +104,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	var/list/old_signal_procs = signal_procs?.Copy()
 	var/turf/W = new path(src)
 
+	SSzas.mark_for_update(src) //handle the addition of the new turf.
+
 	// WARNING WARNING
 	// Turfs DO NOT lose their signals when they get replaced, REMEMBER THIS
 	// It's possible because turfs are fucked, and if you have one in a list and it's replaced with another one, the list ref points to the new turf
@@ -150,32 +161,22 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 
 	return W
 
+/*
 /turf/open/ChangeTurf(path, list/new_baseturfs, flags) //Resist the temptation to make this default to keeping air.
 	if ((flags & CHANGETURF_INHERIT_AIR) && ispath(path, /turf/open))
 		var/datum/gas_mixture/stashed_air = new()
 		stashed_air.copy_from(air)
-		var/stashed_state = excited
-		var/datum/excited_group/stashed_group = excited_group
 		. = ..() //If path == type this will return us, don't bank on making a new type
 		if (!.) // changeturf failed or didn't do anything
 			return
 		var/turf/open/newTurf = .
 		newTurf.air.copy_from(stashed_air)
-		newTurf.excited = stashed_state
-		newTurf.excited_group = stashed_group
-		#ifdef VISUALIZE_ACTIVE_TURFS
-		if(stashed_state)
-			newTurf.add_atom_colour(COLOR_VIBRANT_LIME, TEMPORARY_COLOUR_PRIORITY)
-		#endif
-		if(stashed_group)
-			if(stashed_group.should_display || SSair.display_all_groups)
-				stashed_group.display_turf(newTurf)
+		SSzas.mark_for_update(newTurf)
 	else
-		SSair.remove_from_active(src) //Clean up wall excitement, and refresh excited groups
 		if(ispath(path,/turf/closed) || ispath(path,/turf/cordon))
 			flags |= CHANGETURF_RECALC_ADJACENT
 		return ..()
-
+*/
 /// Take off the top layer turf and replace it with the next baseturf down
 /turf/proc/ScrapeAway(amount=1, flags)
 	if(!amount)
@@ -296,12 +297,12 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 //If you modify this function, ensure it works correctly with lateloaded map templates.
 /turf/proc/AfterChange(flags, oldType) //called after a turf has been replaced in ChangeTurf()
 	levelupdate()
-	if(flags & CHANGETURF_RECALC_ADJACENT)
+	/*if(flags & CHANGETURF_RECALC_ADJACENT)
 		immediate_calculate_adjacent_turfs()
 		if(ispath(oldType, /turf/closed) && istype(src, /turf/open))
 			SSair.add_to_active(src)
 	else //In effect, I want closed turfs to make their tile active when sheered, but we need to queue it since they have no adjacent turfs
-		CALCULATE_ADJACENT_TURFS(src, (!(ispath(oldType, /turf/closed) && istype(src, /turf/open)) ? NORMAL_TURF : MAKE_ACTIVE))
+		CALCULATE_ADJACENT_TURFS(src, (!(ispath(oldType, /turf/closed) && istype(src, /turf/open)) ? NORMAL_TURF : MAKE_ACTIVE))*/
 	//update firedoor adjacency
 	var/list/turfs_to_check = get_adjacent_open_turfs(src) | src
 	for(var/I in turfs_to_check)
@@ -318,6 +319,35 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 		Assimilate_Air()
 
 //////Assimilate Air//////
+/turf/open/proc/Assimilate_Air()
+	var/list/turf/turf_list = get_adjacent_open_turfs()
+	var/turf_count = LAZYLEN(turf_list)
+	if(blocks_air || !turf_count)
+		return
+	var/datum/gas_mixture/total = new
+	var/list/total_gases = total.gas
+	turf_list += src
+	turf_count += 1
+	var/energy = 0
+	var/heat_cap = 0
+	for(var/turf/T in turf_list)
+		var/datum/gas_mixture/turf_mix = T.air
+		var/capacity = turf_mix.heat_capacity()
+		energy += turf_mix.temperature * capacity
+		heat_cap += capacity
+
+		var/list/giver_gases = turf_mix.gas
+		for(var/giver_id in giver_gases)
+			total_gases[giver_id] = giver_gases[giver_id]
+
+	total.temperature = energy / heat_cap
+	for(var/id in total_gases)
+		total_gases[id] /= turf_count
+
+	for(var/turf/T as anything in turf_list)
+		T.air.copy_from(total)
+		SSzas.mark_for_update(T)
+/*
 /turf/open/proc/Assimilate_Air()
 	var/turf_count = LAZYLEN(atmos_adjacent_turfs)
 	if(blocks_air || !turf_count) //if there weren't any open turfs, no need to update.
@@ -355,7 +385,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 		T.air.copy_from(total)
 		T.update_visuals()
 		SSair.add_to_active(T)
-
+*/
 /turf/proc/ReplaceWithLattice()
 	ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
 	new /obj/structure/lattice(locate(x, y, z))
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index 7555793bb0c..ab242277f66 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -6,10 +6,11 @@
 	blocks_air = TRUE
 	rad_insulation = RAD_MEDIUM_INSULATION
 	pass_flags_self = PASSCLOSEDTURF
-
+/*
 /turf/closed/AfterChange()
 	. = ..()
 	SSair.high_pressure_delta -= src
+*/
 
 /turf/closed/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
 	return FALSE
diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm
index 67fc5685339..cff9015aa77 100644
--- a/code/game/turfs/closed/wall/mineral_walls.dm
+++ b/code/game/turfs/closed/wall/mineral_walls.dm
@@ -128,7 +128,7 @@
 	icon_state = "plasma_wall-0"
 	base_icon_state = "plasma_wall"
 	sheet_type = /obj/item/stack/sheet/mineral/plasma
-	thermal_conductivity = 0.04
+	//thermal_conductivity = 0.04
 	smoothing_flags = SMOOTH_BITMASK
 	smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASMA_WALLS)
 	canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS)
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index 956fd09768b..d6cfdd3e1b6 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -10,7 +10,7 @@
 
 	thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
 	heat_capacity = 62500 //a little over 5 cm thick , 62500 for 1 m by 2.5 m by 0.25 m iron wall. also indicates the temperature at wich the wall will melt (currently only able to melt with H/E pipes)
-
+	blocks_air = TRUE
 	baseturfs = /turf/open/floor/plating
 
 	flags_ricochet = RICOCHET_HARD
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index 67f0f737e03..2faf3321614 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -9,19 +9,18 @@
 		return
 
 	log_admin("Full atmosphere reset initiated by [usr].")
-	to_world("<span class = 'danger'>Initiating restart of atmosphere. The server may lag a bit.</span>")
+	to_chat(world, "<span class = 'danger'>Initiating restart of atmosphere. The server may lag a bit.</span>")
 	sleep(10)
 	var/current_time = world.timeofday
 
 	// Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes.
-	for(var/obj/machinery/power/supermatter/S in SSmachines.machinery)
+	for(var/obj/machinery/power/supermatter_crystal/S in GLOB.machines)
 		S.power = 0
 	to_chat(usr, "\[1/5\] - Supermatter depowered")
 
 	// Remove all gases from all pipenets
-	for(var/net in SSmachines.pipenets)
-		var/datum/pipe_network/PN = net
-		for(var/datum/gas_mixture/G in PN.gases)
+	for(var/datum/pipeline/PN as anything in SSzas.networks)
+		for(var/datum/gas_mixture/G in PN.air & PN.other_airs)
 			G.gas = list()
 			G.update_values()
 
@@ -34,8 +33,8 @@
 	to_chat(usr, "\[3/5\] - All ZAS Zones removed.")
 
 	var/list/unsorted_overlays = list()
-	for(var/id in gas_data.tile_overlay)
-		unsorted_overlays |= gas_data.tile_overlay[id]
+	for(var/id in xgm_gas_data.tile_overlay)
+		unsorted_overlays |= xgm_gas_data.tile_overlay[id]
 
 	for(var/turf/simulated/T in world)
 		T.air = null
@@ -44,7 +43,7 @@
 
 	to_chat(usr, "\[4/5\] - All turfs reset to roundstart values.")
 
-	SSair.reboot()
+	SSzas.Reboot()
 
 	to_chat(usr, "\[5/5\] - ZAS Rebooted")
-	to_world("<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>")
+	to_chat(world, "<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>")
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 5ae5dade602..54c3b091f3c 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -7,6 +7,8 @@
 	var/datum/gas_mixture/air
 	var/list/initial_gas
 	var/heat_capacity = 1
+	var/thermal_conductivity = 0.05
+	var/list/initial_gas_mix
 
 /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
 	if(graphic_add && graphic_add.len)
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index 0906a8623b8..64885c3c810 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -31,6 +31,11 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data)
 	var/list/symbol_html = list()
 	var/list/symbol = list()
 
+	//Base sell values
+	var/list/base_value = list()
+	//Purchasable?
+	var/list/purchaseable = list()
+
 /datum/xgm_gas
 	var/id = ""
 	var/name = "Unnamed Gas"
@@ -49,6 +54,8 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data)
 	var/hidden_from_codex
 	var/symbol_html = "X"
 	var/symbol = "X"
+	var/base_value = 1
+	var/purchaseable = FALSE
 
 /datum/xgm_gas_data/New()
 	for(var/p in subtypesof(/datum/xgm_gas))
@@ -78,6 +85,9 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data)
 		xgm_gas_data.breathed_product[gas.id] = gas.breathed_product
 		xgm_gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex
 
+		xgm_gas_data.base_value[gas.id] = gas.base_value
+		xgm_gas_data.purchaseable[gas.id] = gas.purchaseable
+
 	return 1
 
 /obj/effect/gas_overlay
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index c82ce10a04c..61edb735bfd 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -916,7 +916,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 	var/datum/port/input/request_data
 
 	var/datum/port/output/pressure
-	var/datum/port/output/temperature
 	var/datum/port/output/gas_amount
 
 	var/obj/machinery/airalarm/connected_alarm
diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm
index c3216543b63..258133aea57 100644
--- a/code/modules/cargo/bounties/engineering.dm
+++ b/code/modules/cargo/bounties/engineering.dm
@@ -11,9 +11,9 @@
 		return FALSE
 	var/obj/item/tank/T = O
 	var/datum/gas_mixture/our_mix = T.return_air()
-	if(!our_mix.gases[gas_type])
+	if(!our_mix.get_gas(gas_type))
 		return FALSE
-	return our_mix.gases[gas_type][MOLES] >= moles_required
+	return our_mix.get_gas(gas_type) >= moles_required
 
 /datum/bounty/item/engineering/gas/nitrium_tank
 	name = "Full Tank of Nitrium"
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index 885aa0b1a12..e26ec5efd3a 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -110,10 +110,10 @@
 
 	for(var/gasID in gases_to_check)
 		if(canister_mix.get_gas(gasID) > 0)
-			worth += get_gas_value(gasID, canister_gas.get_gas(gasID))
+			worth += get_gas_value(gasID, canister_mix.get_gas(gasID))
 
 	return worth
 
-/datum/export/large/gas_canister/proc/get_gas_value(datum/gas/gasType, moles)
-	var/baseValue = initial(gasType.base_value)
+/datum/export/large/gas_canister/proc/get_gas_value(gastype, moles)
+	var/baseValue = xgm_gas_data.base_value[gastype]
 	return round((baseValue/k_elasticity) * (1 - NUM_E**(-1 * k_elasticity * moles)))
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index d7a31b3ace2..7370fbc4fb5 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -1111,25 +1111,24 @@
 	// This is the amount of moles in a default canister
 	var/moleCount = (initial(fakeCanister.maximum_pressure) * initial(fakeCanister.filled)) * initial(fakeCanister.volume) / (R_IDEAL_GAS_EQUATION * T20C)
 
-	for(var/gasType in GLOB.meta_gas_info)
-		var/datum/gas/gas = gasType
-		var/name = initial(gas.name)
-		if(!initial(gas.purchaseable))
+	for(var/gasType in xgm_gas_data.gases)
+		var/name = xgm_gas_data.name[gasType]
+		if(!xgm_gas_data.purchaseable[gasType])
 			continue
 		var/datum/supply_pack/materials/pack = new
 		pack.name = "[name] Canister"
 		pack.desc = "Contains a canister of [name]."
-		if(initial(gas.dangerous))
+		if(xgm_gas_data.flags[gasType] & XGM_GAS_FUEL)
 			pack.desc = "[pack.desc] Requires Atmospherics access to open."
 			pack.access = ACCESS_ATMOSPHERICS
 			pack.access_view = ACCESS_ATMOSPHERICS
 		pack.crate_name = "[name] canister crate"
 		pack.id = "[type]([name])"
 
-		pack.cost = cost + moleCount * initial(gas.base_value) * 1.6
+		pack.cost = cost + moleCount * xgm_gas_data.base_value[gasType] * 1.6
 		pack.cost = CEILING(pack.cost, 10)
 
-		pack.contains = list(GLOB.gas_id_to_canister[initial(gas.id)])
+		pack.contains = list(GLOB.gas_id_to_canister[gasType])
 
 		pack.crate_type = crate_type
 
diff --git a/code/modules/unit_tests/gas_transfer.dm b/code/modules/unit_tests/gas_transfer.dm
index 32f973d7244..097a9a5efdb 100644
--- a/code/modules/unit_tests/gas_transfer.dm
+++ b/code/modules/unit_tests/gas_transfer.dm
@@ -8,24 +8,21 @@
 
 		first_mix.volume = 200
 		second_mix.volume = 200
-
-		ASSERT_GAS(/datum/gas/hypernoblium, first_mix)
-		ASSERT_GAS(/datum/gas/tritium, second_mix)
-		first_mix.gases[/datum/gas/hypernoblium][MOLES] = tempNmoles
-		second_mix.gases[/datum/gas/tritium][MOLES] = 200
+		first_mix.adjust_gas(GAS_OXYGEN, tempNmoles)
+		second_mix.adjust_gas(GAS_NITROGEN, 200)
 		first_mix.temperature = tempNmoles
 		second_mix.temperature = T20C
 
 		var/initial_pressure = second_mix.return_pressure()
 		// A constant value would be nicer but there will be cases when even MOLAR_ACCURACY amounts would far exceed the pressure so we need to scale it somewhat.
 		var/additional_pressure = (tempNmoles / 1000) + 500
-		
+
 		/* ERROR MARGIN CALCULATION
 		 * We calculate how much would the pressure change if MOLAR_ACCURACY amount of hothotgas is imparted on the cold mix.
 		 * This number gets really big for very high temperatures so it's somewhat meaningless, but our main goal is to ensure the code doesn't break.
-		 */ 
+		 */
 		var/error_margin = first_mix.gas_pressure_minimum_transfer(second_mix) - initial_pressure
-		
+
 		first_mix.pump_gas_to(second_mix, (initial_pressure + additional_pressure))
 		var/margin = abs(second_mix.return_pressure() - (initial_pressure+additional_pressure))
 

From ed898121239309dd976f937be1b8f60ee662d9bb Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 17 Apr 2022 17:45:33 -0400
Subject: [PATCH 006/200] Co-authored-by: Gallyus
 <francinum@users.noreply.github.com>

---
 code/__DEFINES/atmospherics/ZAS.dm            |  49 ++------
 code/__DEFINES/atmospherics/atmos_helpers.dm  |   5 +-
 .../atmospherics/atmos_mapping_helpers.dm     |   4 +-
 code/__HELPERS/zas.dm                         |  27 +++++
 .../subsystem/processing/processing.dm        |   2 +-
 code/datums/components/crafting/recipes.dm    |  19 +--
 .../circuitboards/machine_circuitboards.dm    | 109 +++++++++---------
 .../objects/items/grenades/atmos_grenades.dm  |   7 +-
 code/game/turfs/closed/minerals.dm            |  16 +--
 code/game/turfs/open/_open.dm                 |   5 +-
 code/game/turfs/open/asteroid.dm              |   4 +-
 code/game/turfs/open/floor/fancy_floor.dm     |   2 +-
 code/game/turfs/open/floor/iron_floor.dm      |  12 +-
 code/game/turfs/open/floor/misc_floor.dm      |   5 +-
 .../turfs/open/floor/plating/misc_plating.dm  |   2 +-
 code/game/turfs/open/floor/reinf_floor.dm     |  23 ++--
 code/game/turfs/open/ice.dm                   |   2 +-
 code/game/turfs/open/snow.dm                  |   2 +-
 code/game/turfs/open/space/space.dm           |   4 +-
 code/game/turfs/turf.dm                       |   1 -
 .../traitor/equipment/Malf_Modules.dm         |  12 +-
 code/modules/atmospherics/ZAS/Turf.dm         |   6 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm    |   2 +-
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  19 +++
 .../environmental/LINDA_system.dm             |   2 +-
 .../atmospherics/machinery/components/tank.dm |   2 +-
 .../machinery/portable/canister.dm            |  62 +++++-----
 .../machinery/portable/scrubber.dm            |   3 +-
 .../awaymissions/mission_code/snowdin.dm      |   4 +-
 code/modules/clothing/masks/gas_filter.dm     |  49 +++-----
 code/modules/clothing/under/accessories.dm    |   3 +-
 code/modules/events/spacevine.dm              |  20 ++--
 code/modules/flufftext/Hallucination.dm       |   2 +-
 code/modules/holodeck/area_copy.dm            |   3 +-
 code/modules/holodeck/turfs.dm                |   4 +-
 code/modules/mapping/map_template.dm          |   2 +-
 code/modules/mob/camera/camera.dm             |   4 +-
 code/modules/mob/living/carbon/alien/life.dm  |  16 +--
 .../carbon/human/species_types/plasmamen.dm   |   8 +-
 code/modules/mob/living/carbon/life.dm        |  28 ++---
 code/modules/mob/living/life.dm               |   2 +-
 code/modules/mob/living/living.dm             |   4 +-
 .../mob/living/simple_animal/bot/bot.dm       |   2 +-
 .../mob/living/simple_animal/bot/firebot.dm   |   2 +-
 .../mob/living/simple_animal/hostile/tree.dm  |   8 +-
 .../mob/living/simple_animal/simple_animal.dm |  13 +--
 .../mob/living/simple_animal/slime/life.dm    |   4 +-
 code/modules/mob/mob.dm                       |   7 +-
 code/modules/mod/modules/modules_timeline.dm  |   5 +-
 .../file_system/programs/atmosscan.dm         |   4 +-
 code/modules/power/generator.dm               |   4 +-
 .../projectile/bullets/revolver.dm            |   2 +-
 code/modules/reagents/chem_splash.dm          |   4 +-
 .../research/ordnance/tank_compressor.dm      |  10 +-
 code/modules/shuttle/on_move.dm               |   2 +-
 code/modules/vehicles/mecha/_mecha.dm         |   4 +-
 tgstation.dme                                 |   1 +
 57 files changed, 320 insertions(+), 309 deletions(-)
 create mode 100644 code/__HELPERS/zas.dm

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 326f7f63016..95bb23b2daf 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -200,9 +200,11 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
 
 //OPEN TURF ATMOS
 /// the default air mix that open turfs spawn
-#define OPENTURF_DEFAULT_ATMOS list(GAS_OXYGEN=MOLESO2ATMOS, GAS_NITROGEN=MOLESN2ATMOS)
+#define OPENTURF_DEFAULT_ATMOS list(GAS_OXYGEN = MOLES_O2ATMOS, GAS_NITROGEN=MOLES_N2ATMOS)
+#define OPENTURF_LOW_PRESSURE list(GAS_OXYGEN = 14, GAS_NITROGEB = 30)
 //#define OPENTURF_LOW_PRESSURE "o2=14;n2=30;TEMP=293.15"
 /// -193,15°C telecommunications. also used for xenobiology slime killrooms
+#define TCOMMS_ATMOS list(GAS_NITROGEN = 100)
 //#define TCOMMS_ATMOS "n2=100;TEMP=80"
 /// space
 #define AIRLESS_ATMOS list()
@@ -212,14 +214,15 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
 //#define KITCHEN_COLDROOM_ATMOS "o2=26;n2=97;TEMP=[COLD_ROOM_TEMP]"
 
 // Defines how much of certain gas do the Atmospherics tanks start with. Values are in kpa per tile (assuming 20C)
-#define ATMOSTANK_NITROGEN      90000 // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
-#define ATMOSTANK_OXYGEN        50000 // O2 is also important for airmix, but not as much as N2 as it's only 21% of it.
-#define ATMOSTANK_CO2           60000 // CO2 is used for the GUP, Charon, and Torch as the primary fuel propellant, and we need lots to stick around.
-#define ATMOSTANK_PLASMA        25000
-#define ATMOSTANK_PLASMA_FUEL	15000
-#define ATMOSTANK_HYDROGEN      50000
-#define ATMOSTANK_HYDROGEN_FUEL 25000
-#define ATMOSTANK_NITROUSOXIDE  10000 // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
+#define ATMOSTANK_NITROGEN      list(GAS_NITROGEN = 90000) // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
+#define ATMOSTANK_OXYGEN        list(GAS_OXYGEN = 50000) // O2 is also important for airmix, but not as much as N2 as it's only 21% of it.
+#define ATMOSTANK_CO2           list(GAS_CO2 = 60000) // CO2 is used for the GUP, Charon, and Torch as the primary fuel propellant, and we need lots to stick around.
+#define ATMOSTANK_PLASMA        list(GAS_PHORON = 25000)
+#define ATMOSTANK_PLASMA_FUEL	list(GAS_PHORON = 15000)
+#define ATMOSTANK_HYDROGEN      list(GAS_HYDROGEN = 50000)
+#define ATMOSTANK_HYDROGEN_FUEL list(GAS_HYDROGEN = 25000)
+#define ATMOSTANK_NITROUSOXIDE  list(GAS_N2O = 10000) // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
+#define ATMOSTANK_AIRMIX		list(GAS_OXYGEN = 2644, GAS_NITROGEN = 10580)
 
 #define MAX_PUMP_PRESSURE		15000	// Maximal pressure setting for pumps and vents
 #define MAX_OMNI_PRESSURE		15000	// Maximal output(s) pressure for omni devices (filters/mixers)
@@ -264,31 +267,3 @@ GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
 #define ATMOS_DEFAULT_VOLUME_FILTER 500 // L.
 #define ATMOS_DEFAULT_VOLUME_MIXER  500 // L.
 #define ATMOS_DEFAULT_VOLUME_PIPE   70  // L.
-
-// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
-/proc/heat2color(temp)
-	return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp))
-
-/proc/heat2color_r(temp)
-	temp /= 100
-	if(temp <= 66)
-		. = 255
-	else
-		. = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592))
-
-/proc/heat2color_g(temp)
-	temp /= 100
-	if(temp <= 66)
-		. = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661))
-	else
-		. = max(0, min(255, 288.1221695283 * ((temp - 60) ** -0.0755148492)))
-
-/proc/heat2color_b(temp)
-	temp /= 100
-	if(temp >= 66)
-		. = 255
-	else
-		if(temp <= 16)
-			. = 0
-		else
-			. = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307))
diff --git a/code/__DEFINES/atmospherics/atmos_helpers.dm b/code/__DEFINES/atmospherics/atmos_helpers.dm
index 20679527175..1ad834b85eb 100644
--- a/code/__DEFINES/atmospherics/atmos_helpers.dm
+++ b/code/__DEFINES/atmospherics/atmos_helpers.dm
@@ -31,7 +31,7 @@
 #define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity())
 
 ///Directly adds a gas to a gas mixture without checking for its presence beforehand, use only if is certain the absence of said gas
-#define ADD_GAS(gas_id, out_list)\
+//#define ADD_GAS(gas_id, out_list)\
 	var/list/tmp_gaslist = GLOB.gaslist_cache[gas_id]; out_list[gas_id] = tmp_gaslist.Copy();
 
 ///Adds a gas to a gas mixture but checks if is already present, faster than the same proc
@@ -57,9 +57,6 @@ GLOBAL_LIST_INIT(nonoverlaying_gases, typecache_of_gases_with_no_overlays())
 		var/_GAS_OVERLAY = _GAS_META[META_GAS_OVERLAY];\
 		out_var += _GAS_OVERLAY[min(TOTAL_VISIBLE_STATES, CEILING(_GAS[MOLES] / MOLES_GAS_VISIBLE_STEP, 1))];\
 	}
-#define GAS_OVERLAYS(gases, outvar)\
-	out_var = list();\
-	for(var/_ID in gases)
 #ifdef TESTING
 GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
 #define CALCULATE_ADJACENT_TURFS(T, state) if (SSair.adjacent_rebuild[T]) { GLOB.atmos_adjacent_savings[1] += 1 } else { GLOB.atmos_adjacent_savings[2] += 1; SSair.adjacent_rebuild[T] = state}
diff --git a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
index 94517b21795..d84e3877269 100644
--- a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
+++ b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
@@ -1,4 +1,4 @@
-//OPEN TURF ATMOS
+/*//OPEN TURF ATMOS
 /// the default air mix that open turfs spawn
 #define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15"
 #define OPENTURF_LOW_PRESSURE "o2=14;n2=30;TEMP=293.15"
@@ -35,7 +35,7 @@
 #define ATMOS_TANK_HELIUM "helium=100000;TEMP=293.15"
 #define ATMOS_TANK_ANTINOBLIUM "antinoblium=100000;TEMP=293.15"
 #define ATMOS_TANK_AIRMIX "o2=2644;n2=10580;TEMP=293.15"
-
+*/
 //LAVALAND
 /// what pressure you have to be under to increase the effect of equipment meant for lavaland
 #define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50
diff --git a/code/__HELPERS/zas.dm b/code/__HELPERS/zas.dm
new file mode 100644
index 00000000000..cf159d36c00
--- /dev/null
+++ b/code/__HELPERS/zas.dm
@@ -0,0 +1,27 @@
+// heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
+/proc/heat2color(temp)
+	return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp))
+
+/proc/heat2color_r(temp)
+	temp /= 100
+	if(temp <= 66)
+		. = 255
+	else
+		. = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592))
+
+/proc/heat2color_g(temp)
+	temp /= 100
+	if(temp <= 66)
+		. = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661))
+	else
+		. = max(0, min(255, 288.1221695283 * ((temp - 60) ** -0.0755148492)))
+
+/proc/heat2color_b(temp)
+	temp /= 100
+	if(temp >= 66)
+		. = 255
+	else
+		if(temp <= 16)
+			. = 0
+		else
+			. = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307))
diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm
index 8d59e8318ea..665f4915f42 100644
--- a/code/controllers/subsystem/processing/processing.dm
+++ b/code/controllers/subsystem/processing/processing.dm
@@ -9,7 +9,7 @@ SUBSYSTEM_DEF(processing)
 	var/stat_tag = "P" //Used for logging
 	var/list/processing = list()
 	var/list/currentrun = list()
-	var/const/process_proc = /datum/proc/Process //Francinum is going to KILL ME
+	var/const/process_proc = /datum/proc/process //Francinum is going to FUCK ME (Of course I will~)
 
 /datum/controller/subsystem/processing/stat_entry(msg)
 	msg = "[stat_tag]:[length(processing)]"
diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm
index b74eee0faf3..8354f718661 100644
--- a/code/datums/components/crafting/recipes.dm
+++ b/code/datums/components/crafting/recipes.dm
@@ -1228,15 +1228,16 @@
 				)
 	category = CAT_MISC
 
-/datum/crafting_recipe/bluespace_vendor_mount
-	name = "Bluespace Vendor Wall Mount"
-	result = /obj/item/wallframe/bluespace_vendor_mount
-	time = 6 SECONDS
-	reqs = list(/obj/item/stack/sheet/iron = 15,
-				/obj/item/stack/sheet/glass = 10,
-				/obj/item/stack/cable_coil = 10,
-				)
-	category = CAT_MISC
+//We'll fix you if we're forced to. Nobody will miss you.
+// /datum/crafting_recipe/bluespace_vendor_mount
+// 	name = "Bluespace Vendor Wall Mount"
+// 	result = /obj/item/wallframe/bluespace_vendor_mount
+// 	time = 6 SECONDS
+// 	reqs = list(/obj/item/stack/sheet/iron = 15,
+// 				/obj/item/stack/sheet/glass = 10,
+// 				/obj/item/stack/cable_coil = 10,
+// 				)
+// 	category = CAT_MISC
 
 /datum/crafting_recipe/shutters
 	name = "Shutters"
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index a686a22745b..2c46da75401 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -288,60 +288,61 @@
 	. = ..()
 	. += span_notice("It is set to layer [pipe_layer].")
 
-/obj/item/circuitboard/machine/HFR_fuel_input
-	name = "HFR Fuel Input (Machine Board)"
-	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/fuel_input
-	req_components = list(
-		/obj/item/stack/sheet/plasteel = 5)
-
-/obj/item/circuitboard/machine/HFR_waste_output
-	name = "HFR Waste Output (Machine Board)"
-	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/waste_output
-	req_components = list(
-		/obj/item/stack/sheet/plasteel = 5)
-
-/obj/item/circuitboard/machine/HFR_moderator_input
-	name = "HFR Moderator Input (Machine Board)"
-	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/moderator_input
-	req_components = list(
-		/obj/item/stack/sheet/plasteel = 5)
-
-/obj/item/circuitboard/machine/HFR_core
-	name = "HFR core (Machine Board)"
-	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/core
-	req_components = list(
-		/obj/item/stack/cable_coil = 10,
-		/obj/item/stack/sheet/glass = 10,
-		/obj/item/stack/sheet/plasteel = 10)
-
-/obj/item/circuitboard/machine/HFR_corner
-	name = "HFR Corner (Machine Board)"
-	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/hypertorus/corner
-	req_components = list(
-		/obj/item/stack/sheet/plasteel = 5)
-
-/obj/item/circuitboard/machine/HFR_interface
-	name = "HFR Interface (Machine Board)"
-	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/hypertorus/interface
-	req_components = list(
-		/obj/item/stack/cable_coil = 10,
-		/obj/item/stack/sheet/glass = 10,
-		/obj/item/stack/sheet/plasteel = 5)
-
-/obj/item/circuitboard/machine/crystallizer
-	name = "Crystallizer (Machine Board)"
-	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/atmospherics/components/binary/crystallizer
-	req_components = list(
-		/obj/item/stack/cable_coil = 10,
-		/obj/item/stack/sheet/glass = 10,
-		/obj/item/stack/sheet/plasteel = 5)
+//FIXME: HYPERGARBAGE DONUT CREATION CODE
+// /obj/item/circuitboard/machine/HFR_fuel_input
+// 	name = "HFR Fuel Input (Machine Board)"
+// 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
+// 	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/fuel_input
+// 	req_components = list(
+// 		/obj/item/stack/sheet/plasteel = 5)
+
+// /obj/item/circuitboard/machine/HFR_waste_output
+// 	name = "HFR Waste Output (Machine Board)"
+// 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
+// 	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/waste_output
+// 	req_components = list(
+// 		/obj/item/stack/sheet/plasteel = 5)
+
+// /obj/item/circuitboard/machine/HFR_moderator_input
+// 	name = "HFR Moderator Input (Machine Board)"
+// 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
+// 	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/moderator_input
+// 	req_components = list(
+// 		/obj/item/stack/sheet/plasteel = 5)
+
+// /obj/item/circuitboard/machine/HFR_core
+// 	name = "HFR core (Machine Board)"
+// 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
+// 	build_path = /obj/machinery/atmospherics/components/unary/hypertorus/core
+// 	req_components = list(
+// 		/obj/item/stack/cable_coil = 10,
+// 		/obj/item/stack/sheet/glass = 10,
+// 		/obj/item/stack/sheet/plasteel = 10)
+
+// /obj/item/circuitboard/machine/HFR_corner
+// 	name = "HFR Corner (Machine Board)"
+// 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
+// 	build_path = /obj/machinery/hypertorus/corner
+// 	req_components = list(
+// 		/obj/item/stack/sheet/plasteel = 5)
+
+// /obj/item/circuitboard/machine/HFR_interface
+// 	name = "HFR Interface (Machine Board)"
+// 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
+// 	build_path = /obj/machinery/hypertorus/interface
+// 	req_components = list(
+// 		/obj/item/stack/cable_coil = 10,
+// 		/obj/item/stack/sheet/glass = 10,
+// 		/obj/item/stack/sheet/plasteel = 5)
+
+// /obj/item/circuitboard/machine/crystallizer
+// 	name = "Crystallizer (Machine Board)"
+// 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
+// 	build_path = /obj/machinery/atmospherics/components/binary/crystallizer
+// 	req_components = list(
+// 		/obj/item/stack/cable_coil = 10,
+// 		/obj/item/stack/sheet/glass = 10,
+// 		/obj/item/stack/sheet/plasteel = 5)
 
 /obj/item/circuitboard/machine/bluespace_sender
 	name = "Bluespace Sender (Machine Board)"
diff --git a/code/game/objects/items/grenades/atmos_grenades.dm b/code/game/objects/items/grenades/atmos_grenades.dm
index a17fe6e9e32..70df29ce9b6 100644
--- a/code/game/objects/items/grenades/atmos_grenades.dm
+++ b/code/game/objects/items/grenades/atmos_grenades.dm
@@ -39,7 +39,7 @@
 	playsound(src, 'sound/effects/spray2.ogg', 100, TRUE)
 	var/list/connected_turfs = detect_room(origin = get_turf(src), max_size = fix_range)
 	var/datum/gas_mixture/base_mix = new
-	base_mix.parse_gas_string(OPENTURF_DEFAULT_ATMOS)
+	base_mix.gas = OPENTURF_DEFAULT_ATMOS
 	for(var/turf/open/turf_fix in connected_turfs)
 		if(turf_fix.blocks_air)
 			continue
@@ -69,7 +69,7 @@
 			continue
 		var/distance_from_center = max(get_dist(turf_loc, loc), 1)
 		var/turf/open/floor_loc = turf_loc
-		floor_loc.atmos_spawn_air("n2=[n2_gas_amount / distance_from_center];o2=[o2_gas_amount / distance_from_center];TEMP=273")
+		//floor_loc.atmos_spawn_air("n2=[n2_gas_amount / distance_from_center];o2=[o2_gas_amount / distance_from_center];TEMP=273")
 		floor_loc.atmos_spawn_air(GAS_NITROGEN, n2_gas_amount/distance_from_center, 273)
 		floor_loc.atmos_spawn_air(GAS_OXYGEN, o2_gas_amount/distance_from_center, 273)
 	qdel(src)
@@ -95,7 +95,8 @@
 			continue
 		var/distance_from_center = max(get_dist(turf_loc, loc), 1)
 		var/turf/open/floor_loc = turf_loc
-		floor_loc.atmos_spawn_air("n2o=[n2o_gas_amount / distance_from_center];TEMP=273")
+		//floor_loc.atmos_spawn_air("n2o=[n2o_gas_amount / distance_from_center];TEMP=273")
+		floor_loc.atmos_spawn_air(GAS_N2O, n2o_gas_amount/distance_from_center, 273)
 	qdel(src)
 
 /obj/item/grenade/gas_crystal/crystal_foam
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index 1b9815b3827..001b8ff266d 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -134,7 +134,7 @@
 	var/turf/open/mined = ScrapeAway(null, flags)
 	addtimer(CALLBACK(src, .proc/AfterChange, flags, old_type), 1, TIMER_UNIQUE)
 	playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) //beautiful destruction
-	mined.update_visuals()
+	//mined.update_visuals()
 
 /turf/closed/mineral/attack_animal(mob/living/simple_animal/user, list/modifiers)
 	if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
@@ -357,7 +357,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	turf_type = /turf/open/misc/asteroid/snow/ice
 	baseturfs = /turf/open/misc/asteroid/snow/ice
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	defer_change = TRUE
 
 /turf/closed/mineral/uranium
@@ -375,7 +375,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	turf_type = /turf/open/misc/asteroid/snow/ice
 	baseturfs = /turf/open/misc/asteroid/snow/ice
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	defer_change = TRUE
 
 /turf/closed/mineral/gold
@@ -412,7 +412,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	turf_type = /turf/open/misc/asteroid/snow/ice
 	baseturfs = /turf/open/misc/asteroid/snow/ice
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	defer_change = TRUE
 
 /turf/closed/mineral/bananium
@@ -463,7 +463,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS)
 	baseturfs = /turf/open/misc/asteroid/snow
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	turf_type = /turf/open/misc/asteroid/snow
 	defer_change = TRUE
 
@@ -601,7 +601,7 @@
 		flags = CHANGETURF_DEFER_CHANGE
 	var/turf/open/mined = ScrapeAway(null, flags)
 	addtimer(CALLBACK(src, .proc/AfterChange, flags, old_type), 1, TIMER_UNIQUE)
-	mined.update_visuals()
+	//mined.update_visuals()
 
 /turf/closed/mineral/gibtonite/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
@@ -616,7 +616,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	turf_type = /turf/open/misc/asteroid/snow/ice
 	baseturfs = /turf/open/misc/asteroid/snow/ice
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	defer_change = TRUE
 
 /turf/closed/mineral/gibtonite/ice/icemoon
@@ -660,7 +660,7 @@
 	var/turf/open/mined = ScrapeAway(null, flags)
 	addtimer(CALLBACK(src, .proc/AfterChange, flags, old_type), 1, TIMER_UNIQUE)
 	playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) //beautiful destruction
-	mined.update_visuals()
+	//mined.update_visuals()
 	H.mind?.adjust_experience(/datum/skill/mining, 100) //yay!
 
 /turf/closed/mineral/strong/proc/drop_ores()
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 32ee69b0d81..8adc73747e2 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -35,7 +35,7 @@
 
 /turf/open/update_icon()
 	. = ..()
-	update_visuals()
+	//update_visuals()
 
 /turf/open/indestructible
 	name = "floor"
@@ -160,7 +160,7 @@
 	icon_state = "bluespace"
 	blocks_air = TRUE
 	baseturfs = /turf/open/indestructible/airblock
-
+/*
 /turf/open/Initalize_Atmos(times_fired)
 	excited = FALSE
 	update_visuals()
@@ -174,6 +174,7 @@
 			//testing("Active turf found. Return value of compare(): [is_active]")
 			excited = TRUE
 			SSair.active_turfs += src
+*/
 
 /turf/open/GetHeatCapacity()
 	. = air.heat_capacity()
diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index 2a0769a1c24..0b5cff08629 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -158,7 +158,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	icon_state = "snow"
 	base_icon_state = "snow"
 	broken_state = "snow_dug"
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	slowdown = 2
 	flags_1 = NONE
 	planetary_atmos = TRUE
@@ -222,7 +222,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	temperature = 180
 
 /turf/open/misc/asteroid/snow/atmosphere
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	planetary_atmos = FALSE
 
 /turf/open/misc/asteroid/snow/standard_air
diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm
index d0be8a5e753..9757cceb226 100644
--- a/code/game/turfs/open/floor/fancy_floor.dm
+++ b/code/game/turfs/open/floor/fancy_floor.dm
@@ -157,7 +157,7 @@
 	icon_state = "snow"
 	flags_1 = NONE
 	floor_tile = null
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	bullet_bounce_sound = null
 	tiled_dirt = FALSE
 
diff --git a/code/game/turfs/open/floor/iron_floor.dm b/code/game/turfs/open/floor/iron_floor.dm
index cafd386c142..af4f1fa0772 100644
--- a/code/game/turfs/open/floor/iron_floor.dm
+++ b/code/game/turfs/open/floor/iron_floor.dm
@@ -31,10 +31,11 @@
 
 /turf/open/floor/iron/telecomms
 	initial_gas_mix = TCOMMS_ATMOS
+	temperature = 80
 
 /turf/open/floor/iron/icemoon
 	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
-
+	temperature = 80
 /turf/open/floor/iron/edge
 	icon_state = "floor_edge"
 	base_icon_state = "floor_edge"
@@ -150,7 +151,7 @@
 
 /turf/open/floor/iron/dark/telecomms
 	initial_gas_mix = TCOMMS_ATMOS
-
+	temperature = 80
 /turf/open/floor/iron/dark/side/airless
 	initial_gas_mix = AIRLESS_ATMOS
 
@@ -230,7 +231,7 @@
 
 /turf/open/floor/iron/white/telecomms
 	initial_gas_mix = TCOMMS_ATMOS
-
+	temperature = 80
 /turf/open/floor/iron/white/side/airless
 	initial_gas_mix = AIRLESS_ATMOS
 
@@ -306,10 +307,7 @@
 
 /turf/open/floor/iron/kitchen_coldroom
 	name = "cold room floor"
-
-/turf/open/floor/iron/kitchen_coldroom/Initialize(mapload)
-	initial_gas_mix = KITCHEN_COLDROOM_ATMOS
-	return ..()
+	temperature = COLD_ROOM_TEMP
 
 /turf/open/floor/iron/kitchen_coldroom/freezerfloor
 	icon_state = "freezerfloor"
diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm
index bb65ee31383..d92d26dd145 100644
--- a/code/game/turfs/open/floor/misc_floor.dm
+++ b/code/game/turfs/open/floor/misc_floor.dm
@@ -38,6 +38,7 @@
 
 /turf/open/floor/circuit/telecomms
 	initial_gas_mix = TCOMMS_ATMOS
+	temperature = 80
 
 /turf/open/floor/circuit/telecomms/mainframe
 	name = "mainframe base"
@@ -65,6 +66,7 @@
 
 /turf/open/floor/circuit/green/telecomms
 	initial_gas_mix = TCOMMS_ATMOS
+	temperature = 80
 
 /turf/open/floor/circuit/green/telecomms/mainframe
 	name = "mainframe base"
@@ -89,6 +91,7 @@
 
 /turf/open/floor/circuit/red/telecomms
 	initial_gas_mix = TCOMMS_ATMOS
+	temperature = 80
 
 /turf/open/floor/pod
 	name = "pod floor"
@@ -213,7 +216,7 @@
 	AddElement(/datum/element/rust)
 
 /turf/open/floor/plating/plasma
-	initial_gas_mix = ATMOS_TANK_PLASMA
+	initial_gas_mix = ATMOSTANK_PLASMA
 
 /turf/open/floor/plating/plasma/rust/Initialize(mapload)
 	. = ..()
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
index cad8d5d3c35..e3e2ba87426 100644
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ b/code/game/turfs/open/floor/plating/misc_plating.dm
@@ -44,7 +44,7 @@
 	icon = 'icons/turf/snow.dmi'
 	icon_state = "snowplating"
 	base_icon_state = "snowplating"
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	temperature = 180
 	attachment_holes = FALSE
 	planetary_atmos = TRUE
diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm
index b5c1c3cd71e..4b08509ec6c 100644
--- a/code/game/turfs/open/floor/reinf_floor.dm
+++ b/code/game/turfs/open/floor/reinf_floor.dm
@@ -100,26 +100,27 @@
 /turf/open/floor/engine/n2o
 	article = "an"
 	name = "\improper N2O floor"
-	initial_gas_mix = ATMOS_TANK_N2O
+	initial_gas_mix = ATMOSTANK_NITROUSOXIDE
 
 /turf/open/floor/engine/co2
 	name = "\improper CO2 floor"
-	initial_gas_mix = ATMOS_TANK_CO2
+	initial_gas_mix = ATMOSTANK_CO2
 
 /turf/open/floor/engine/plasma
 	name = "plasma floor"
-	initial_gas_mix = ATMOS_TANK_PLASMA
+	initial_gas_mix = ATMOSTANK_PLASMA
 
 /turf/open/floor/engine/o2
 	name = "\improper O2 floor"
-	initial_gas_mix = ATMOS_TANK_O2
+	initial_gas_mix = ATMOSTANK_OXYGEN
 
 /turf/open/floor/engine/n2
 	article = "an"
 	name = "\improper N2 floor"
-	initial_gas_mix = ATMOS_TANK_N2
+	initial_gas_mix = ATMOSTANK_NITROGEN
 
-/turf/open/floor/engine/bz
+
+/*/turf/open/floor/engine/bz
 	name = "\improper BZ floor"
 	initial_gas_mix = ATMOS_TANK_BZ
 
@@ -134,12 +135,13 @@
 /turf/open/floor/engine/healium
 	name = "\improper Healium floor"
 	initial_gas_mix = ATMOS_TANK_HEALIUM
-
+*/
 /turf/open/floor/engine/h2
 	article = "an"
 	name = "\improper H2 floor"
-	initial_gas_mix = ATMOS_TANK_H2
+	initial_gas_mix = ATMOSTANK_HYDROGEN
 
+/*
 /turf/open/floor/engine/hypernoblium
 	name = "\improper Hypernoblium floor"
 	initial_gas_mix = ATMOS_TANK_HYPERNOBLIUM
@@ -180,10 +182,10 @@
 /turf/open/floor/engine/antinoblium
 	name = "\improper Antinoblium floor"
 	initial_gas_mix = ATMOS_TANK_ANTINOBLIUM
-
+*/
 /turf/open/floor/engine/air
 	name = "air floor"
-	initial_gas_mix = ATMOS_TANK_AIRMIX
+	initial_gas_mix = ATMOSTANK_AIRMIX
 
 
 
@@ -223,3 +225,4 @@
 
 /turf/open/floor/engine/telecomms
 	initial_gas_mix = TCOMMS_ATMOS
+	temperature = 80
diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm
index 4a9a55b53da..da29593d3a8 100644
--- a/code/game/turfs/open/ice.dm
+++ b/code/game/turfs/open/ice.dm
@@ -4,7 +4,7 @@
 	icon = 'icons/turf/floors/ice_turf.dmi'
 	icon_state = "ice_turf-0"
 	base_icon_state = "ice_turf-0"
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	temperature = 180
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/misc/ice
diff --git a/code/game/turfs/open/snow.dm b/code/game/turfs/open/snow.dm
index 4017240e3fd..66d1bfc571a 100644
--- a/code/game/turfs/open/snow.dm
+++ b/code/game/turfs/open/snow.dm
@@ -5,7 +5,7 @@
 	desc = "Looks cold."
 	icon_state = "snow"
 	planetary_atmos = TRUE
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	slowdown = 2
 	bullet_sizzle = TRUE
 	footstep = FOOTSTEP_SAND
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index 1a81515e940..866590ed64e 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -14,7 +14,7 @@
 	var/destination_y
 
 	var/static/datum/gas_mixture/immutable/space/space_gas = new
-	run_later = TRUE
+	// run_later = TRUE
 	plane = PLANE_SPACE
 	layer = SPACE_LAYER
 	light_power = 0.25
@@ -55,8 +55,10 @@
 	if(our_area.area_has_base_lighting && always_lit) //Only provide your own lighting if the area doesn't for you
 		add_overlay(GLOB.fullbright_overlay)
 
+	/*
 	if(requires_activation)
 		SSair.add_to_active(src, TRUE)
+	*/
 
 	if (light_system == STATIC_LIGHT && light_power && light_range)
 		update_light()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index e4f54355ada..64d4c935819 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -21,7 +21,6 @@ GLOBAL_LIST_EMPTY(station_turfs)
 	// This shouldn't be modified directly, use the helper procs.
 	var/list/baseturfs = /turf/baseturf_bottom
 
-	var/temperature = T20C
 	///Used for fire, if a melting temperature was reached, it will be destroyed
 	var/to_be_destroyed = 0
 	///The max temperature of the fire which it was subjected to
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index cb331aac9e8..9c84efd5524 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -29,12 +29,12 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
 		/obj/machinery/atmospherics/components/unary/portables_connector,
 		/obj/machinery/atmospherics/components/unary/passive_vent,
 		/obj/machinery/atmospherics/components/unary/heat_exchanger,
-		/obj/machinery/atmospherics/components/unary/hypertorus/core,
-		/obj/machinery/atmospherics/components/unary/hypertorus/waste_output,
-		/obj/machinery/atmospherics/components/unary/hypertorus/moderator_input,
-		/obj/machinery/atmospherics/components/unary/hypertorus/fuel_input,
-		/obj/machinery/hypertorus/interface,
-		/obj/machinery/hypertorus/corner,
+		// /obj/machinery/atmospherics/components/unary/hypertorus/core,
+		// /obj/machinery/atmospherics/components/unary/hypertorus/waste_output,
+		// /obj/machinery/atmospherics/components/unary/hypertorus/moderator_input,
+		// /obj/machinery/atmospherics/components/unary/hypertorus/fuel_input,
+		// /obj/machinery/hypertorus/interface,
+		// /obj/machinery/hypertorus/corner,
 		/obj/machinery/atmospherics/components/binary/valve,
 		/obj/machinery/portable_atmospherics/canister,
 	)))
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 54c3b091f3c..22f9e45529b 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -9,6 +9,10 @@
 	var/heat_capacity = 1
 	var/thermal_conductivity = 0.05
 	var/list/initial_gas_mix
+	var/planetary_atmos //Let's just let this exist for now.
+
+#warn !!TEMPORARY PROCDEF!!
+/turf/open/proc/atmos_spawn_air(...)
 
 /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
 	if(graphic_add && graphic_add.len)
@@ -300,7 +304,7 @@
 	air.copy_from(zone.air)
 	air.group_multiplier = 1
 
-/turf/simulated/atmos_spawn_air(gas_id, amount, initial_temperature)
+/turf/simulated/proc/atmos_spawn_air(gas_id, amount, initial_temperature)
 	var/datum/gas_mixture/new_gas = new
 	var/datum/gas_mixture/existing_gas = return_air()
 	if(isnull(initial_temperature))
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index af3a25a5f84..ec311df2592 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -50,7 +50,7 @@
 	tile_color = "#ff9940"
 	overlay_limit = 0.7
 	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL
-	breathed_product = /datum/reagent/toxin/phoron
+	breathed_product = /datum/reagent/toxin/plasma
 	symbol_html = "Ph"
 	symbol = "Ph"
 
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 8dc8599de41..aa85da6b36f 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -495,3 +495,22 @@
 
 /datum/gas_mixture/proc/leak_to_enviroment(datum/gas_mixture/environment)
 	pump_gas_passive(src, environment, calculate_transfer_moles(src, environment, src.return_pressure() - environment.return_pressure()))
+
+/**
+ * Takes the amount of the gas you want to PP as an argument
+ * So I don't have to do some hacky switches/defines/magic strings
+ * eg:
+ * Plas_PP = get_partial_pressure(gas_mixture.plasma)
+ * O2_PP = get_partial_pressure(gas_mixture.oxygen)
+ * get_breath_partial_pressure(gas_pp) --> gas_pp/total_moles()*breath_pp = pp
+ * get_true_breath_pressure(pp) --> gas_pp = pp/breath_pp*total_moles()
+ *
+ * 10/20*5 = 2.5
+ * 10 = 2.5/5*20
+ */
+
+/datum/gas_mixture/proc/get_breath_partial_pressure(gas_pressure)
+	return (gas_pressure * R_IDEAL_GAS_EQUATION * temperature) / BREATH_VOLUME
+///inverse
+/datum/gas_mixture/proc/get_true_breath_pressure(partial_pressure)
+	return (partial_pressure * BREATH_VOLUME) / (R_IDEAL_GAS_EQUATION * temperature)
diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm
index 0a1ce419a2c..27fa67895fa 100644
--- a/code/modules/atmospherics/environmental/LINDA_system.dm
+++ b/code/modules/atmospherics/environmental/LINDA_system.dm
@@ -118,7 +118,7 @@
 	var/turf/local_turf = get_turf(loc)
 	if(!local_turf)
 		return
-	local_turf./air_update_turf(update, remove)
+	//local_turf.air_update_turf(update, remove)
 
 /**
  * A helper proc for dealing with atmos changes
diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index b02041cd51c..8613c267306 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -190,7 +190,7 @@
 			continue
 		node.atmos_init()
 		node.add_member(src)
-	SSair.add_to_rebuild_queue(src)
+	SSzas.add_to_rebuild_queue(src)
 
 	update_parents()
 
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index f25b5df5dc2..968dc8f08f0 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	var/filled = 0.5
 	///Maximum pressure allowed on initialize inside the canister, multiplied by the filled var
 	var/maximum_pressure = 90 * ONE_ATMOSPHERE
-	///Stores the path of the gas for mapped canisters
+	///Stores the id of the gas for mapped canisters
 	var/gas_type
 	///Player controlled var that set the release pressure of the canister
 	var/release_pressure = ONE_ATMOSPHERE
@@ -100,8 +100,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	else
 		create_gas()
 
-	if(ispath(gas_type, /datum/gas))
-		desc = "[GLOB.meta_gas_info[gas_type][META_GAS_NAME]]. [GLOB.meta_gas_info[gas_type][META_GAS_DESC]]"
+	desc = "[xgm_gas_data.name[gas_type]]."
 
 	update_window()
 
@@ -272,7 +271,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	heat_limit = 1e12
 	pressure_limit = 1e14
 	mode = CANISTER_TIER_3
-
+/*
 /obj/machinery/portable_atmospherics/canister/fusion_test/create_gas()
 	air_contents.add_gases(/datum/gas/hydrogen, /datum/gas/tritium)
 	air_contents.gases[/datum/gas/hydrogen][MOLES] = 300
@@ -285,12 +284,11 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	desc = "A mixture of N2O and Oxygen"
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#9fba6c#3d4680"
-
+*/
 /obj/machinery/portable_atmospherics/canister/anesthetic_mix/create_gas()
-	air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide)
-	air_contents.gases[/datum/gas/oxygen][MOLES] = (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
-	air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
-	SSair.start_processing_machine(src)
+	air_contents.add(GAS_OXYGEN, (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.add(GAS_N2O, (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	SSzas.start_processing_machine(src)
 
 /**
  * Getter for the amount of time left in the timer of prototype canisters
@@ -363,17 +361,15 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 /obj/machinery/portable_atmospherics/canister/proc/create_gas()
 	if(!gas_type)
 		return
-	air_contents.add_gas(gas_type)
 	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)
+	air_contents.add(gas_type,(maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	SSzas.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)
+	air_contents.add(GAS_OXYGEN, (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.add(GAS_NITROGEN, (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	SSzas.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/update_icon_state()
 	if(machine_stat & BROKEN)
@@ -425,10 +421,10 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	cut_overlay(window)
 	window = image(icon, icon_state="window-base", layer=FLOAT_LAYER)
 	var/list/window_overlays = list()
-	for(var/visual in air_contents.return_visuals())
+	/*for(var/visual in air_contents.return_visuals())
 		var/image/new_visual = image(visual, layer=FLOAT_LAYER)
 		new_visual.filters = alpha_filter
-		window_overlays += new_visual
+		window_overlays += new_visual*/
 	window.overlays = window_overlays
 	add_overlay(window)
 
@@ -497,7 +493,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	. = ..()
 	if(!. || QDELETED(src))
 		return
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/atom_break(damage_flag)
 	. = ..()
@@ -547,10 +543,20 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	// Handle gas transfer.
 	if(valve_open)
 		var/turf/location = get_turf(src)
-		var/datum/gas_mixture/target_air = holding?.return_air() || location.return_air()
-		excited = TRUE
+		var/datum/gas_mixture/environment
+		if(holding)
+			environment = holding.air_contents
+		else
+			environment = location.return_air()
+
+		var/env_pressure = environment.return_pressure()
+		var/pressure_delta = release_pressure - env_pressure
+
+		if((air_contents.temperature > 0) && (pressure_delta > 0))
+			var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta)
+			transfer_moles = min(transfer_moles, (ATMOS_DEFAULT_VOLUME_PUMP/air_contents.volume)*air_contents.total_moles) //flow rate limit
 
-		if(air_contents.release_gas_to(target_air, release_pressure) && !holding)
+			var/returnval = pump_gas_passive(air_contents, environment, transfer_moles)
 			//air_update_turf(FALSE, FALSE)
 
 	var/our_pressure = air_contents.return_pressure()
@@ -667,17 +673,15 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 			var/n = 0
 			valve_open = !valve_open
 			if(valve_open)
-				SSair.start_processing_machine(src)
+				SSzas.start_processing_machine(src)
 				logmsg = "Valve was <b>opened</b> by [key_name(usr)], starting a transfer into \the [holding || "air"].<br>"
 				if(!holding)
 					var/list/gaseslog = list() //list for logging all gases in canister
-					for(var/id in air_contents.gases)
-						var/gas = air_contents.gases[id]
-						gaseslog[gas[GAS_META][META_GAS_NAME]] = gas[MOLES]	//adds gases to gaseslog
-						if(!gas[GAS_META][META_GAS_DANGER])
+					for(var/gas in air_contents.gas)
+						gaseslog[xgm_gas_data.name[gas]] = air_contents.get_gas(gas)	//adds gases to gaseslog
+						if(!xgm_gas_data.flags[gas] & XGM_GAS_CONTAMINANT|XGM_GAS_FUEL)
 							continue
-						if(gas[MOLES] > (gas[GAS_META][META_GAS_MOLES_VISIBLE] || MOLES_GAS_VISIBLE)) //if moles_visible is undefined, default to default visibility
-							danger = TRUE //at least 1 danger gas
+						danger = TRUE //at least 1 danger gas
 					logmsg = "[key_name(usr)] <b>opened</b> a canister that contains the following:"
 					admin_msg = "[key_name(usr)] <b>opened</b> a canister that contains the following at [ADMIN_VERBOSEJMP(src)]:"
 					for(var/name in gaseslog)
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 049e69d4ce3..9e62a111907 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -203,7 +203,8 @@
 	excited = TRUE
 
 	if(!holding)
-		scrub(get_turf(src).return_air())
+		var/turf/muhturf = get_turf(src)
+		scrub(muhturf.return_air())
 
 	return ..()
 
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index a7d07884a71..551d8ca3596 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -6,7 +6,7 @@
 	requires_power = FALSE
 	static_lighting = FALSE
 	base_lighting_alpha = 255
-	
+
 /area/awaymission/snowdin/outside
 	name = "Snowdin Tundra Plains"
 	icon_state = "awaycontent25"
@@ -157,7 +157,7 @@
 //liquid plasma!!!!!!//
 
 /turf/open/floor/iron/dark/snowdin
-	initial_gas_mix = FROZEN_ATMOS
+	temperature = 180
 	planetary_atmos = 1
 	temperature = 180
 
diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm
index 09dafd7e415..5b5d2d7e96f 100644
--- a/code/modules/clothing/masks/gas_filter.dm
+++ b/code/modules/clothing/masks/gas_filter.dm
@@ -29,25 +29,14 @@
 
 	///List of gases with high filter priority
 	var/list/high_filtering_gases = list(
-		/datum/gas/plasma,
-		/datum/gas/carbon_dioxide,
-		/datum/gas/nitrous_oxide
-		)
+		GAS_PLASMA,
+		GAS_CO2,
+		GAS_N2O
+	)
 	///List of gases with medium filter priority
-	var/list/mid_filtering_gases = list(
-		/datum/gas/nitrium,
-		/datum/gas/freon,
-		/datum/gas/hypernoblium,
-		/datum/gas/bz
-		)
+	var/list/mid_filtering_gases = list()
 	///List of gases with low filter priority
-	var/list/low_filtering_gases = list(
-		/datum/gas/healium,
-		/datum/gas/proto_nitrate,
-		/datum/gas/halon,
-		/datum/gas/tritium,
-		/datum/gas/zauker
-		)
+	var/list/low_filtering_gases = list()
 
 /obj/item/gas_filter/examine(mob/user)
 	. = ..()
@@ -65,29 +54,29 @@
 
 	var/danger_points = 0
 
-	for(var/gas_id in breath.gases)
+	for(var/gas_id in breath.gas)
 		if(gas_id in high_filtering_gases)
-			if(breath.gases[gas_id][MOLES] > HIGH_FILTERING_MOLES)
-				breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(breath.get_gas(gas_id) > HIGH_FILTERING_MOLES)
+				breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 0.5
 				continue
-			breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.05
 			continue
 		if(gas_id in mid_filtering_gases)
-			if(breath.gases[gas_id][MOLES] > MID_FILTERING_MOLES)
-				breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(breath.get_gas(gas_id) > MID_FILTERING_MOLES)
+				breath.get_gas(gas_id) = max(breath.get_gas(gas_id)- filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 0.75
 				continue
-			breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.15
 			continue
 		if(gas_id in low_filtering_gases)
-			if(breath.gases[gas_id][MOLES] > LOW_FILTERING_MOLES)
-				breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(breath.get_gas(gas_id)> LOW_FILTERING_MOLES)
+				breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 1
 				continue
-			breath.gases[gas_id][MOLES] = max(breath.gases[gas_id][MOLES] - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.5
 			continue
 
@@ -106,7 +95,7 @@
 /obj/item/gas_filter/plasmaman
 	name = "plasmaman atmospheric gas filter"
 	high_filtering_gases = list(
-		/datum/gas/oxygen,
-		/datum/gas/carbon_dioxide,
-		/datum/gas/nitrous_oxide
+		GAS_OXYGEN,
+		GAS_CO2,
+		GAS_N2O
 		)
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index da8b23ac5a8..8612cae4cb2 100755
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -269,7 +269,8 @@
 	return exposed_temperature > 300
 
 /obj/item/clothing/accessory/medal/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	atmos_spawn_air("plasma=20;TEMP=[exposed_temperature]")
+	var/open/turf/turfloc = get_turf(src)
+	turfloc.atmos_spawn_air(GAS_PLASMA, 20, exposed_temperature)
 	visible_message(span_danger("\The [src] bursts into flame!"), span_userdanger("Your [src] bursts into flame!"))
 	qdel(src)
 
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index 91dd2ef8cb1..fec5b4a45a8 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -265,10 +265,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.gases[/datum/gas/oxygen])
+		if(!gas_mix.get_gas(GAS_OXYGEN))
 			return
-		gas_mix.gases[/datum/gas/oxygen][MOLES] = max(gas_mix.gases[/datum/gas/oxygen][MOLES] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
-		gas_mix.garbage_collect()
+		gas_mix.gas[GAS_OXYGEN] = max(gas_mix.get_gas(GAS_OXYGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/nitro_eater
 	name = "Nitrogen consuming"
@@ -280,10 +279,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.gases[/datum/gas/nitrogen])
+		if(!gas_mix.get_gas(GAS_NITROGEN))
 			return
-		gas_mix.gases[/datum/gas/nitrogen][MOLES] = max(gas_mix.gases[/datum/gas/nitrogen][MOLES] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
-		gas_mix.garbage_collect()
+		gas_mix.gas[GAS_NITROGEN] = max(gas_mix.get_gas(GAS_NITROGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/carbondioxide_eater
 	name = "CO2 consuming"
@@ -295,10 +293,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.gases[/datum/gas/carbon_dioxide])
+		if(!gas_mix.get_gas(GAS_OXYGEN))
 			return
-		gas_mix.gases[/datum/gas/carbon_dioxide][MOLES] = max(gas_mix.gases[/datum/gas/carbon_dioxide][MOLES] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
-		gas_mix.garbage_collect()
+		gas_mix.gas[GAS_CO2] = max(gas_mix.get_gas(GAS_CO2) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/plasma_eater
 	name = "Plasma consuming"
@@ -310,10 +307,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.gases[/datum/gas/plasma])
+		if(!gas_mix.get_gas(GAS_PLASMA))
 			return
-		gas_mix.gases[/datum/gas/plasma][MOLES] = max(gas_mix.gases[/datum/gas/plasma][MOLES] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
-		gas_mix.garbage_collect()
+		gas_mix.gas[GAS_PLASMA] = max(gas_mix.get_gas(GAS_PLASMA) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/thorns
 	name = "Thorny"
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 204ed0792d2..c3706114a6e 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -223,7 +223,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
 	for(var/turf/FT in flood_turfs)
 		for(var/dir in GLOB.cardinals)
 			var/turf/T = get_step(FT, dir)
-			if((T in flood_turfs) || !TURFS_CAN_SHARE(T, FT) || isspaceturf(T)) //If we've gottem already, or if they're not alright to spread with.
+			if((T in flood_turfs) /*|| !TURFS_CAN_SHARE(T, FT)*/ || isspaceturf(T)) //If we've gottem already, or if they're not alright to spread with.
 				continue
 			var/obj/effect/plasma_image_holder/pih = new(T)
 			var/image/new_plasma = image(image_icon, pih, image_state, FLY_LAYER)
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index 054f5d59abc..e413cf7438c 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -140,8 +140,9 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
 			B.vars[V] = T.vars[V]
 		toupdate += B
 
-	if(toupdate.len)
+	/*if(toupdate.len)
 		for(var/turf/T1 in toupdate)
 			CALCULATE_ADJACENT_TURFS(T1, KILL_EXCITED)
+	*/
 
 	return copiedobjs
diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm
index e6df49e2a9f..a78fb3f85e4 100644
--- a/code/modules/holodeck/turfs.dm
+++ b/code/modules/holodeck/turfs.dm
@@ -47,8 +47,8 @@
 
 /turf/open/floor/holofloor/plating/burnmix
 	name = "burn-mix floor"
-	initial_gas_mix = BURNMIX_ATMOS
-
+	// initial_gas_mix = BURNMIX_ATMOS
+	//TODO: cause warcrimes later
 /turf/open/floor/holofloor/grass
 	gender = PLURAL
 	name = "lush grass"
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index e95bb3ecc9e..08f872c3072 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -122,7 +122,7 @@
 			)
 		)
 	for(var/turf/affected_turf as anything in template_and_bordering_turfs)
-		affected_turf.//air_update_turf(TRUE, TRUE)
+		//affected_turf.air_update_turf(TRUE, TRUE)
 		affected_turf.levelupdate()
 
 /datum/map_template/proc/load_new_z(secret = FALSE)
diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm
index 2d1ea422c7a..70474c2753d 100644
--- a/code/modules/mob/camera/camera.dm
+++ b/code/modules/mob/camera/camera.dm
@@ -14,10 +14,10 @@
 /mob/camera/Initialize(mapload)
 	. = ..()
 	SSpoints_of_interest.make_point_of_interest(src)
-
+/*
 /mob/camera/experience_pressure_difference()
 	return
-
+*/
 /mob/camera/canUseStorage()
 	return FALSE
 
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 19e6a17ac30..67fe76feebc 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -16,28 +16,22 @@
 	var/plasma_used = 0
 	var/plas_detect_threshold = 0.02
 	var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
-	var/list/breath_gases = breath.gases
-
-	breath.assert_gases(/datum/gas/plasma, /datum/gas/oxygen)
 
 	//Partial pressure of the plasma in our breath
-	var/Plasma_pp = (breath_gases[/datum/gas/plasma][MOLES]/breath.total_moles())*breath_pressure
+	var/Plasma_pp = (breath.get_gas(GAS_PLASMA)/breath.total_moles())*breath_pressure
 
 	if(Plasma_pp > plas_detect_threshold) // Detect plasma in air
-		adjustPlasma(breath_gases[/datum/gas/plasma][MOLES]*250)
+		adjustPlasma(breath.get_gas(GAS_PLASMA)*250)
 		throw_alert(ALERT_XENO_PLASMA, /atom/movable/screen/alert/alien_plas)
 
-		plasma_used = breath_gases[/datum/gas/plasma][MOLES]
+		plasma_used = breath.get_gas(GAS_PLASMA)
 
 	else
 		clear_alert(ALERT_XENO_PLASMA)
 
 	//Breathe in plasma and out oxygen
-	breath_gases[/datum/gas/plasma][MOLES] -= plasma_used
-	breath_gases[/datum/gas/oxygen][MOLES] += plasma_used
-
-	breath.garbage_collect()
-
+	breath.adjust_gas(GAS_PLASMA, -plasma_used)
+	breath.adjust_gas(GAS_OXYGEN, plasma_used)
 	//BREATH TEMPERATURE
 	handle_breath_temperature(breath)
 
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 5d34c91b2b3..1f16739d278 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -73,11 +73,11 @@
 	if(!atmos_sealed && (!istype(H.w_uniform, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman) || !istype(H.gloves, /obj/item/clothing/gloves)))
 		var/datum/gas_mixture/environment = H.loc.return_air()
 		if(environment?.total_moles())
-			if(environment.gases[/datum/gas/hypernoblium] && (environment.gases[/datum/gas/hypernoblium][MOLES]) >= 5)
+			 /*if(environment.gases[/datum/gas/hypernoblium] && (environment.gases[/datum/gas/hypernoblium][MOLES]) >= 5)
 				if(H.on_fire && H.fire_stacks > 0)
-					H.adjust_fire_stacks(-10 * delta_time)
-			else if(!HAS_TRAIT(H, TRAIT_NOFIRE) && !HAS_TRAIT(H, TRAIT_NOSELFIGNITION))
-				if(environment.gases[/datum/gas/oxygen] && (environment.gases[/datum/gas/oxygen][MOLES]) >= 1) //Same threshhold that extinguishes fire
+					H.adjust_fire_stacks(-10 * delta_time)*/
+			if(!HAS_TRAIT(H, TRAIT_NOFIRE) && !HAS_TRAIT(H, TRAIT_NOSELFIGNITION))
+				if(environment.has_gas(GAS_OXYGEN, 1)) //Same threshhold that extinguishes fire
 					H.adjust_fire_stacks(0.25 * delta_time)
 					if(!H.on_fire && H.fire_stacks > 0)
 						H.visible_message(span_danger("[H]'s body reacts with the atmosphere and bursts into flames!"),span_userdanger("Your body reacts with the atmosphere and bursts into flame!"))
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 74062b0efa5..33fef9d52f5 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -158,11 +158,9 @@
 	var/oxygen_used = 0
 	var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
 
-	var/list/breath_gases = breath.gases
-	breath.assert_gases(/datum/gas/oxygen, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz)
-	var/O2_partialpressure = (breath_gases[/datum/gas/oxygen][MOLES]/breath.total_moles())*breath_pressure
-	var/Plasma_partialpressure = (breath_gases[/datum/gas/plasma][MOLES]/breath.total_moles())*breath_pressure
-	var/CO2_partialpressure = (breath_gases[/datum/gas/carbon_dioxide][MOLES]/breath.total_moles())*breath_pressure
+	var/O2_partialpressure = (breath.get_gas(GAS_OXYGEN)/breath.total_moles())*breath_pressure
+	var/Plasma_partialpressure = (breath.get_gas(GAS_OXYGEN)/breath.total_moles())*breath_pressure
+	var/CO2_partialpressure = (breath.get_gas(GAS_CO2)/breath.total_moles())*breath_pressure
 
 
 	//OXYGEN
@@ -173,7 +171,7 @@
 			var/ratio = 1 - O2_partialpressure/safe_oxy_min
 			adjustOxyLoss(min(5*ratio, 3))
 			failed_last_breath = TRUE
-			oxygen_used = breath_gases[/datum/gas/oxygen][MOLES]*ratio
+			oxygen_used = breath.get_gas(GAS_OXYGEN)*ratio
 		else
 			adjustOxyLoss(3)
 			failed_last_breath = TRUE
@@ -183,11 +181,11 @@
 		failed_last_breath = FALSE
 		if(health >= crit_threshold)
 			adjustOxyLoss(-5)
-		oxygen_used = breath_gases[/datum/gas/oxygen][MOLES]
+		oxygen_used = breath.get_gas(GAS_OXYGEN)
 		clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
 
-	breath_gases[/datum/gas/oxygen][MOLES] -= oxygen_used
-	breath_gases[/datum/gas/carbon_dioxide][MOLES] += oxygen_used
+	breath.adjust_gas(GAS_OXYGEN, -oxygen_used)
+	breath.adjust_gas(GAS_CO2, oxygen_used)
 
 	//CARBON DIOXIDE
 	if(CO2_partialpressure > safe_co2_max)
@@ -206,15 +204,15 @@
 
 	//PLASMA
 	if(Plasma_partialpressure > safe_plas_max)
-		var/ratio = (breath_gases[/datum/gas/plasma][MOLES]/safe_plas_max) * 10
+		var/ratio = breath.get_gas(GAS_PLASMA)/safe_plas_max * 10
 		adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE))
 		throw_alert(ALERT_TOO_MUCH_PLASMA, /atom/movable/screen/alert/too_much_plas)
 	else
 		clear_alert(ALERT_TOO_MUCH_PLASMA)
 
 	//NITROUS OXIDE
-	if(breath_gases[/datum/gas/nitrous_oxide])
-		var/SA_partialpressure = (breath_gases[/datum/gas/nitrous_oxide][MOLES]/breath.total_moles())*breath_pressure
+	if(breath.get_gas(GAS_N2O))
+		var/SA_partialpressure = (breath.get_gas(GAS_N2O)/breath.total_moles())*breath_pressure
 		if(SA_partialpressure > SA_para_min)
 			throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o)
 			SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria")
@@ -234,14 +232,16 @@
 		clear_alert(ALERT_TOO_MUCH_N2O)
 
 	//BZ (Facepunch port of their Agent B)
+	/*
 	if(breath_gases[/datum/gas/bz])
 		var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.total_moles())*breath_pressure
 		if(bz_partialpressure > 1)
 			hallucination += 10
 		else if(bz_partialpressure > 0.01)
 			hallucination += 5
-
+	*/
 	//NITRIUM
+	/*
 	if(breath_gases[/datum/gas/nitrium])
 		var/nitrium_partialpressure = (breath_gases[/datum/gas/nitrium][MOLES]/breath.total_moles())*breath_pressure
 		if(nitrium_partialpressure > 0.5)
@@ -295,7 +295,7 @@
 		SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")
 
 	breath.garbage_collect()
-
+	*/
 	//BREATH TEMPERATURE
 	handle_breath_temperature(breath)
 
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 3f8447ade8c..49b16216520 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -121,7 +121,7 @@
 		extinguish_mob()
 		return TRUE //mob was put out, on_fire = FALSE via extinguish_mob(), no need to update everything down the chain.
 	var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
-	if(!G.gases[/datum/gas/oxygen] || G.gases[/datum/gas/oxygen][MOLES] < 1)
+	if(!G.has_gas(GAS_OXYGEN, 1))
 		extinguish_mob() //If there's no oxygen in the tile we're on, put out the fire
 		return TRUE
 	var/turf/location = get_turf(src)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 36c2f1f3b7d..9a6fe5c5460 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -958,7 +958,7 @@
 		return pick("ltrails_1", "ltrails_2")
 	else
 		return pick("trails_1", "trails_2")
-
+/*
 /mob/living/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0)
 	playsound(src, 'sound/effects/space_wind.ogg', 50, TRUE)
 	if(buckled || mob_negates_gravity())
@@ -988,7 +988,7 @@
 					pressure_resistance_prob_delta -= 20
 					break
 	..(pressure_difference, direction, pressure_resistance_prob_delta)
-
+*/
 /mob/living/can_resist()
 	if(next_move > world.time)
 		return FALSE
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index f21ebabf39e..4cef50b5668 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -496,7 +496,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r
 	var/turf/T = get_turf(src)
 	if(!T)
 		return
-	var/list/adjacent = T.get_atmos_adjacent_turfs(1)
+	var/list/adjacent = T.get_adjacent_open_turfs()
 	if(shuffle) //If we were on the same tile as another bot, let's randomize our choices so we dont both go the same way
 		adjacent = shuffle(adjacent)
 		shuffle = FALSE
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index 9ffc4680868..acfc70af4f6 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -153,7 +153,7 @@
 
 	else if(isturf(target))
 		var/turf/open/T = target
-		if(T.active_hotspot)
+		if(T.fire)
 			return TRUE
 
 	return FALSE
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index e982b5bfc38..e9bcf6f4fc6 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -56,14 +56,14 @@
 	if(!is_tree || !isopenturf(loc))
 		return
 	var/turf/open/T = src.loc
-	if(!T.air || !T.air.gases[/datum/gas/carbon_dioxide])
+	if(!T.air || !T.air.has_gas(GAS_CO2))
 		return
 
-	var/co2 = T.air.gases[/datum/gas/carbon_dioxide][MOLES]
+	var/co2 = T.air.get_gas(GAS_CO2)
 	if(co2 > 0 && DT_PROB(13, delta_time))
 		var/amt = min(co2, 9)
-		T.air.gases[/datum/gas/carbon_dioxide][MOLES] -= amt
-		T.atmos_spawn_air("o2=[amt]")
+		T.air.adjust_gas(GAS_CO2, -amt)
+		T.atmos_spawn_air(GAS_OXYGEN, amt)
 
 /mob/living/simple_animal/hostile/tree/AttackingTarget()
 	. = ..()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 8ccb075e757..92608dcab13 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -317,15 +317,12 @@
 	if(isturf(loc) && isopenturf(loc))
 		var/turf/open/ST = loc
 		if(ST.air)
-			var/ST_gases = ST.air.gases
-			ST.air.assert_gases(arglist(GLOB.hardcoded_gases))
+			var/datum/gas_mixture/muhair = ST.return_air()
 
-			var/plas = ST_gases[/datum/gas/plasma][MOLES]
-			var/oxy = ST_gases[/datum/gas/oxygen][MOLES]
-			var/n2 = ST_gases[/datum/gas/nitrogen][MOLES]
-			var/co2 = ST_gases[/datum/gas/carbon_dioxide][MOLES]
-
-			ST.air.garbage_collect()
+			var/plas = muhair.get_gas(GAS_PLASMA)
+			var/oxy = muhair.get_gas(GAS_OXYGEN)
+			var/n2 = muhair.get_gas(GAS_NITROGEN)
+			var/co2 = muhair.get_gas(GAS_CO2)
 
 			if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
 				. = FALSE
diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm
index 5afb8ac74a0..1e544408ae6 100644
--- a/code/modules/mob/living/simple_animal/slime/life.dm
+++ b/code/modules/mob/living/simple_animal/slime/life.dm
@@ -141,7 +141,7 @@
 				adjustBruteLoss(round(sqrt(bodytemperature)) * delta_time)
 	else
 		REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, SLIME_COLD)
-
+	/*
 	if(stat != DEAD)
 		var/bz_percentage =0
 		if(environment.gases[/datum/gas/bz])
@@ -161,7 +161,7 @@
 					to_chat(src, span_notice("You wake up from the stasis."))
 					set_stat(CONSCIOUS)
 					regenerate_icons()
-
+	*/
 	updatehealth()
 
 
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index b1a55366fbb..87631e7d383 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -126,10 +126,9 @@
 
 	var/t = "[span_notice("Coordinates: [x],[y] ")]\n"
 	t += "[span_danger("Temperature: [environment.temperature] ")]\n"
-	for(var/id in environment.gases)
-		var/gas = environment.gases[id]
-		if(gas[MOLES])
-			t+="[span_notice("[gas[GAS_META][META_GAS_NAME]]: [gas[MOLES]] ")]\n"
+	for(var/id in environment.gas)
+		if(gas[id])
+			t+="[span_notice("[gas]: [gas[MOLES]] ")]\n"
 
 	to_chat(usr, t)
 
diff --git a/code/modules/mod/modules/modules_timeline.dm b/code/modules/mod/modules/modules_timeline.dm
index 69bcbe667c2..40f9be53009 100644
--- a/code/modules/mod/modules/modules_timeline.dm
+++ b/code/modules/mod/modules/modules_timeline.dm
@@ -411,9 +411,8 @@
 
 /obj/structure/chrono_field/return_air() //we always have nominal air and temperature
 	var/datum/gas_mixture/fresh_air = new
-	fresh_air.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen)
-	fresh_air.gases[/datum/gas/oxygen][MOLES] = MOLES_O2STANDARD
-	fresh_air.gases[/datum/gas/nitrogen][MOLES] = MOLES_N2STANDARD
+	fresh_air.gas[GAS_OXYGEN] = MOLES_O2STANDARD
+	fresh_air.gas[GAS_NITROGEN] = MOLES_N2STANDARD
 	fresh_air.temperature = T20C
 	return fresh_air
 
diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm
index fe09b4b971e..fe744c72ecf 100644
--- a/code/modules/modular_computers/file_system/programs/atmosscan.dm
+++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm
@@ -16,7 +16,7 @@
 		to_chat(user, span_warning("\The [computer] flashes an error: \"hardware\\sensorpackage\\startup.bin -- file not found\"."))
 
 /datum/computer_file/program/atmosscan/ui_static_data(mob/user)
-	return return_atmos_handbooks()
+	return //return_atmos_handbooks()
 
 /datum/computer_file/program/atmosscan/ui_data(mob/user)
 	var/list/data = get_header_data()
@@ -27,7 +27,7 @@
 	if(!air_sensor)
 		data["gasmixes"] = list(gas_mixture_parser(null, "No Sensors Detected!"))
 		return data
-	
+
 	data["gasmixes"] = list(gas_mixture_parser(air, "Sensor Reading")) //Null air wont cause errors, don't worry.
 	return data
 
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index e3e84e04511..d5b7e185874 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -20,12 +20,12 @@
 	AddComponent(/datum/component/simple_rotation)
 	find_circs()
 	connect_to_network()
-	SSair.start_processing_machine(src)
+	SSzas.start_processing_machine(src)
 	update_appearance()
 
 /obj/machinery/power/generator/Destroy()
 	kill_circs()
-	SSair.stop_processing_machine(src)
+	SSzas.stop_processing_machine(src)
 	return ..()
 
 /obj/machinery/power/generator/update_overlays()
diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm
index 8a0b0ca51a5..14bef9e7193 100644
--- a/code/modules/projectiles/projectile/bullets/revolver.dm
+++ b/code/modules/projectiles/projectile/bullets/revolver.dm
@@ -93,7 +93,7 @@
 /obj/projectile/bullet/c38/iceblox //see /obj/projectile/temp for the original code
 	name = ".38 Iceblox bullet"
 	damage = 20
-	var/temperature = 100
+	temperature = 100
 	ricochets_max = 0
 
 /obj/projectile/bullet/c38/iceblox/on_hit(atom/target, blocked = FALSE)
diff --git a/code/modules/reagents/chem_splash.dm b/code/modules/reagents/chem_splash.dm
index 4b4a95809ab..b731da461c9 100644
--- a/code/modules/reagents/chem_splash.dm
+++ b/code/modules/reagents/chem_splash.dm
@@ -97,8 +97,8 @@
 		for(var/turf/T in turflist)
 			if(accessible[T])
 				continue
-			for(var/thing in T.get_atmos_adjacent_turfs(alldir = TRUE))
-				var/turf/NT = thing
+			//for(var/thing in T.get_atmos_adjacent_turfs(alldir = TRUE))
+			for(var/turf/NT as anything in T.get_adjacent_open_turfs())
 				if(!(NT in accessible))
 					continue
 				if(!(get_dir(T,NT) in GLOB.cardinals))
diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm
index a94c28316a0..75070f324f2 100644
--- a/code/modules/research/ordnance/tank_compressor.dm
+++ b/code/modules/research/ordnance/tank_compressor.dm
@@ -86,7 +86,7 @@
 		return FALSE
 	update_appearance()
 	return TRUE
-	
+
 /obj/machinery/atmospherics/components/binary/tank_compressor/crowbar_act(mob/living/user, obj/item/tool)
 	if(active || inserted_tank)
 		return FALSE
@@ -119,7 +119,7 @@
 	if(nodes[2])
 		nodes[2].atmos_init()
 		nodes[2].add_member(src)
-	SSair.add_to_rebuild_queue(src)
+	SSzas.add_to_rebuild_queue(src)
 	update_appearance()
 
 /// Glorified volume pump.
@@ -172,7 +172,7 @@
 	return COMSIG_CANCEL_EXPLOSION
 
 /**
- * Everytime a tank is destroyed or a new tank is inserted, our buffer is flushed. 
+ * Everytime a tank is destroyed or a new tank is inserted, our buffer is flushed.
  * Mole requirements in experiments are tracked by buffer data.
  */
 /obj/machinery/atmospherics/components/binary/tank_compressor/proc/flush_buffer()
@@ -194,7 +194,7 @@
 	new_record.timestamp = station_time_timestamp()
 	for(var/gas_path in leaked_gas_buffer.gases)
 		new_record.gas_data[gas_path] = leaked_gas_buffer.gases[gas_path][MOLES]
-	
+
 	compressor_record += new_record
 	record_number += 1
 	say("Buffer data stored.")
@@ -207,7 +207,7 @@
 		if(experiment.required_gas in gas_data)
 			if(gas_data[experiment.required_gas] > MINIMUM_MOLE_COUNT)
 				passed_experiments += list(experiment.type = gas_data[experiment.required_gas])
-	
+
 	return passed_experiments
 
 /obj/machinery/atmospherics/components/binary/tank_compressor/proc/print(mob/user, datum/data/compressor_record/record)
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index 43a0fd57ad8..f72f19c96ad 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -58,7 +58,7 @@ All ShuttleMove procs go here
 	var/depth = baseturfs.len - shuttle_boundary + 1
 	newT.CopyOnTop(src, 1, depth, TRUE)
 	newT.blocks_air = TRUE
-	newT.//air_update_turf(TRUE, FALSE)
+	//newT.air_update_turf(TRUE, FALSE)
 	blocks_air = TRUE
 	//air_update_turf(TRUE, TRUE)
 	if(isopenturf(newT))
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index b88e07c23e5..ab3145e92da 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -215,9 +215,7 @@
 	cabin_air = new
 	cabin_air.volume = 200
 	cabin_air.temperature = T20C
-	cabin_air.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen)
-	cabin_air.gases[/datum/gas/oxygen][MOLES] = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
-	cabin_air.gases[/datum/gas/nitrogen][MOLES] = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+	cabin_air.adjust_multi(GAS_OXYGEN, (O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)), GAS_NITROGEN, (N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)))
 
 	add_cell()
 	add_scanmod()
diff --git a/tgstation.dme b/tgstation.dme
index ec89a81aa47..bcf59cab7ec 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -355,6 +355,7 @@
 #include "code\__HELPERS\verbs.dm"
 #include "code\__HELPERS\view.dm"
 #include "code\__HELPERS\weakref.dm"
+//#include "code\__HELPERS\zas.dm"
 #include "code\__HELPERS\sorts\__main.dm"
 #include "code\__HELPERS\sorts\InsertSort.dm"
 #include "code\__HELPERS\sorts\MergeSort.dm"

From 9001e9902e67d3f77eff00689acf9200aae64912 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 17 Apr 2022 18:19:45 -0400
Subject: [PATCH 007/200] adds immutable mixtures

---
 .../ZAS/XGM/xgm_immutable_gas_mixture.dm      | 58 +++++++++++++++++++
 tgstation.dme                                 |  1 +
 2 files changed, 59 insertions(+)
 create mode 100644 code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm

diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
new file mode 100644
index 00000000000..efbdc276daf
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
@@ -0,0 +1,58 @@
+/datum/gas_mixture/immutable
+	temperature = TCMB
+	var/initial_temperature = TCMB
+
+/datum/gas_mixture/immutable/update_values()
+	temperature = initial_temperature
+	return ..()
+
+/datum/gas_mixture/immutable/adjust_gas()
+	return
+
+/datum/gas_mixture/immutable/remove()
+	return new type
+
+/datum/gas_mixture/immutable/add()
+	return TRUE
+
+/datum/gas_mixture/immutable/subtract()
+	return TRUE
+
+/datum/gas_mixture/immutable/divide()
+	return TRUE
+
+/datum/gas_mixture/immutable/multiply()
+	return TRUE
+
+/datum/gas_mixture/immutable/adjust_gas_temp()
+	return
+
+/datum/gas_mixture/immutable/adjust_multi()
+	return
+
+/datum/gas_mixture/immutable/adjust_multi_temp()
+	return
+
+/datum/gas_mixture/immutable/merge()
+	return
+
+/datum/gas_mixture/immutable/copy_from()
+	return
+
+/datum/gas_mixture/immutable/heat_capacity()
+	return HEAT_CAPACITY_VACUUM
+
+/datum/gas_mixture/immutable/remove_ratio()
+	return new type
+
+/datum/gas_mixture/immutable/remove_volume()
+	return new type
+
+/datum/gas_mixture/immutable/remove_by_flag()
+	return new type
+
+/datum/gas_mixture/immutable/share_ratio(datum/gas_mixture/other, connecting_tiles, share_size, one_way)
+	. = ..()
+	temperature = initial_temperature
+
+
diff --git a/tgstation.dme b/tgstation.dme
index bcf59cab7ec..e3a64ff6816 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2360,6 +2360,7 @@
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\simple.dm"
 #include "code\modules\atmospherics\ZAS\Turf.dm"
 #include "code\modules\atmospherics\ZAS\XGM\gases.dm"
+#include "code\modules\atmospherics\ZAS\XGM\xgm_immutable_gas_mixture.dm"
 #include "code\modules\atmospherics\ZAS\Zone.dm"
 #include "code\modules\atmospherics\ZAS\_docs.dm"
 #include "code\modules\atmospherics\ZAS\Airflow.dm"

From 5f3b937fadc0d7672e944f388a0fe08594e57633 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 17 Apr 2022 19:31:36 -0400
Subject: [PATCH 008/200] !!!/SIMULATED/ REMOVAL!!!

---
 code/__DEFINES/atmospherics/ZAS.dm            |  3 +-
 code/__DEFINES/atmospherics/atmos_helpers.dm  |  6 +-
 code/__DEFINES/wounds.dm                      |  1 -
 code/__HELPERS/maths.dm                       |  3 +
 code/controllers/subsystem/zas.dm             | 10 ++-
 code/game/turfs/change_turf.dm                |  6 +-
 code/game/turfs/open/space/space.dm           |  1 +
 code/modules/admin/verbs/fix_air.dm           |  5 +-
 .../abductor/equipment/glands/plasma.dm       |  2 +-
 code/modules/atmospherics/ZAS/Atom.dm         |  5 +-
 code/modules/atmospherics/ZAS/Connection.dm   | 14 +++--
 code/modules/atmospherics/ZAS/Diagnostic.dm   |  9 +--
 code/modules/atmospherics/ZAS/Fire.dm         | 40 +++++++-----
 code/modules/atmospherics/ZAS/Temperature.dm  |  5 +-
 code/modules/atmospherics/ZAS/Turf.dm         | 63 ++++++++++++-------
 code/modules/atmospherics/ZAS/Zone.dm         | 22 +++++--
 16 files changed, 130 insertions(+), 65 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 95bb23b2daf..367469bb075 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -21,8 +21,9 @@
 #define SOUTHDOWN (SOUTH|DOWN)
 #define WESTDOWN (WEST|DOWN)
 
-#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid)
+//#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid) ZASTURF
 
+#define TURF_HAS_VALID_ZONE(T) (!istype(T, /turf/open/space) && T:zone && !T:zone:invalid)
 #ifdef MULTIZAS
 
 var/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
diff --git a/code/__DEFINES/atmospherics/atmos_helpers.dm b/code/__DEFINES/atmospherics/atmos_helpers.dm
index 1ad834b85eb..6ac20c153a3 100644
--- a/code/__DEFINES/atmospherics/atmos_helpers.dm
+++ b/code/__DEFINES/atmospherics/atmos_helpers.dm
@@ -31,8 +31,10 @@
 #define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity())
 
 ///Directly adds a gas to a gas mixture without checking for its presence beforehand, use only if is certain the absence of said gas
-//#define ADD_GAS(gas_id, out_list)\
-	var/list/tmp_gaslist = GLOB.gaslist_cache[gas_id]; out_list[gas_id] = tmp_gaslist.Copy();
+/*
+#define ADD_GAS(gas_id, out_list)\
+	var/list/tmp_gaslist = GLOB.gaslist_cache[gas_id];out_list[gas_id] = tmp_gaslist.Copy();
+*/
 
 ///Adds a gas to a gas mixture but checks if is already present, faster than the same proc
 #define ASSERT_GAS(gas_id, gas_mixture) if (!gas_mixture.gases[gas_id]) { ADD_GAS(gas_id, gas_mixture.gases) };
diff --git a/code/__DEFINES/wounds.dm b/code/__DEFINES/wounds.dm
index f30947c0362..7e7ba8abd8e 100644
--- a/code/__DEFINES/wounds.dm
+++ b/code/__DEFINES/wounds.dm
@@ -60,7 +60,6 @@ GLOBAL_LIST_INIT(global_all_wound_types, list(/datum/wound/blunt/critical, /datu
 	/datum/wound/pierce/critical, /datum/wound/pierce/severe, /datum/wound/pierce/moderate,
 	/datum/wound/burn/critical, /datum/wound/burn/severe, /datum/wound/burn/moderate))
 
-
 // ~burn wound infection defines
 // Thresholds for infection for burn wounds, once infestation hits each threshold, things get steadily worse
 /// below this has no ill effects from infection
diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm
index 49cab9bf273..41b2532999c 100644
--- a/code/__HELPERS/maths.dm
+++ b/code/__HELPERS/maths.dm
@@ -133,3 +133,6 @@
 			return "centuple"
 		else //It gets too tedious to use latin prefixes from here.
 			return "[number]-tuple"
+
+/// A random real number between low and high inclusive
+#define Frand(low, high) ( rand() * ((high) - (low)) + (low) )
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 1e22bff9a18..ff50915b87b 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -165,7 +165,10 @@ SUBSYSTEM_DEF(zas)
 	to_chat(world, span_boldannounce("Processing Geometry..."))
 
 	var/simulated_turf_count = 0
-	for(var/turf/simulated/S)
+	//for(var/turf/simulated/S) ZASTURF
+	for(var/turf/S)
+		if(istype(S, /turf/open/space))
+			continue
 		simulated_turf_count++
 		S.update_air_properties()
 
@@ -411,7 +414,8 @@ SUBSYSTEM_DEF(zas)
 		B.c_merge(A)
 		mark_zone_update(A)
 
-/datum/controller/subsystem/zas/proc/connect(turf/simulated/A, turf/simulated/B)
+//datum/controller/subsystem/zas/proc/connect(turf/simulated/A, turf/simulated/B) //ZASTURF
+/datum/controller/subsystem/zas/proc/connect(turf/A, turf/B)
 	#ifdef ZASDBG
 	ASSERT(istype(A))
 	ASSERT(isturf(B))
@@ -425,7 +429,7 @@ SUBSYSTEM_DEF(zas)
 	if(block & AIR_BLOCKED) return
 
 	var/direct = !(block & ZONE_BLOCKED)
-	var/space = !istype(B)
+	var/space = istype(B, /turf/open/space)
 
 	if(!space)
 		if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0)))
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 1671adb019a..4e402941ffa 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -83,13 +83,17 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	blueprint_data = null
 
 	if(connections) connections.erase_all()
-
+	/* ZASTURF
 	if(istype(src,/turf/simulated))
 		//Yeah, we're just going to rebuild the whole thing.
 		//Despite this being called a bunch during explosions,
 		//the zone will only really do heavy lifting once.
 		var/turf/simulated/S = src
 		if(S.zone) S.zone.rebuild()
+	*/
+
+	if(simulated && zone)
+		zone.rebuild()
 
 	var/list/old_baseturfs = baseturfs
 	var/old_type = type
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index 866590ed64e..9fbc6d1c1f2 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -8,6 +8,7 @@
 	temperature = TCMB
 	thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
 	heat_capacity = 700000
+	simulated = FALSE
 
 	var/destination_z
 	var/destination_x
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index 2faf3321614..0098317ce9f 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -36,7 +36,10 @@
 	for(var/id in xgm_gas_data.tile_overlay)
 		unsorted_overlays |= xgm_gas_data.tile_overlay[id]
 
-	for(var/turf/simulated/T in world)
+	//for(var/turf/simulated/T in world) ZASTURF
+	for(var/turf/T in world)
+		if(!T.simulated)
+			continue
 		T.air = null
 		T.overlays.Remove(unsorted_overlays)
 		T.zone = null
diff --git a/code/modules/antagonists/abductor/equipment/glands/plasma.dm b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
index 07bfd96d02e..41377d2db17 100644
--- a/code/modules/antagonists/abductor/equipment/glands/plasma.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
@@ -16,7 +16,7 @@
 	if(!owner)
 		return
 	owner.visible_message(span_danger("[owner] vomits a cloud of plasma!"))
-	var/turf/simulated/open/T = get_turf(owner)
+	var/turf/open/T = get_turf(owner)
 	if(istype(T))
 		T.atmos_spawn_air(GAS_PLASMA, 20, T20C)
 	owner.vomit()
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index 1f4b9cf7beb..56cb4d0c0a4 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -14,7 +14,10 @@
 
 //Convenience function for atoms to update turfs they occupy
 /atom/movable/proc/update_nearby_tiles(need_rebuild)
-	for(var/turf/simulated/turf in locs)
+	//for(var/turf/simulated/turf in locs) ZASTURF
+	for(var/turf/turf in locs)
+		if(istype(turf, /turf/open/space))
+			continue
 		SSzas.mark_for_update(turf)
 
 	return 1
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index c7f33a0aaaf..55721a9e347 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -48,9 +48,12 @@ Class Procs:
 		Makes numerous checks to decide whether the connection is still valid. Erases it automatically if not.
 
 */
-
+/* ZASTURF
 /connection/var/turf/simulated/A
 /connection/var/turf/simulated/B
+*/
+/connection/var/turf/A
+/connection/var/turf/B
 /connection/var/zone/zoneA
 /connection/var/zone/zoneB
 
@@ -58,7 +61,8 @@ Class Procs:
 
 /connection/var/state = 0
 
-/connection/New(turf/simulated/A, turf/simulated/B)
+//connection/New(turf/simulated/A, turf/simulated/B) ZASTURF
+/connection/New(turf/A, turf/B)
 	#ifdef ZASDBG
 	ASSERT(SSzas.has_valid_zone(A))
 	//ASSERT(SSzas.has_valid_zone(B))
@@ -66,7 +70,7 @@ Class Procs:
 	src.A = A
 	src.B = B
 	zoneA = A.zone
-	if(!istype(B))
+	if(istype(B /turf/open/space))
 		mark_space()
 		edge = SSzas.get_edge(A.zone,B)
 		edge.add_connection(src)
@@ -103,7 +107,7 @@ Class Procs:
 
 /connection/proc/update()
 //	log_debug("Updated, \...")
-	if(!istype(A,/turf/simulated))
+	if(istype(A,/turf/open/space))
 //		log_debug("Invalid A.")
 		erase()
 		return
@@ -118,7 +122,7 @@ Class Procs:
 	else
 		mark_direct()
 
-	var/b_is_space = !istype(B,/turf/simulated)
+	var/b_is_space = istype(B,/turf/open/space)
 
 	if(state & CONNECTION_SPACE)
 		if(!b_is_space)
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 40e89108b7d..785b83078bb 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -17,9 +17,9 @@
 
 /client/var/list/zone_debug_images
 
-/client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf)
+/client/proc/Test_ZAS_Connection(var/turf/T as turf) //ZASTURF
 	set category = "Debug"
-	if(!istype(T))
+	if(istype(T, /turf/open/space)) //ZASTURF
 		return
 
 	var/direction_list = list(\
@@ -43,8 +43,9 @@
 			to_chat(mob, "No air passage :x")
 		return
 
-	var/turf/simulated/other_turf = get_step(T, direction_list[direction])
-	if(!istype(other_turf))
+	//var/turf/simulated/other_turf = get_step(T, direction_list[direction]) ZASTURF
+	var/turf/other_turf = get_step(T, direction_list[direction])
+	if(istype(other_turf, /turf/open/space))
 		return
 
 	var/t_block = T.c_airblock(other_turf)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 409646fcbd3..1037a7a5b3e 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -57,7 +57,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 				fire_tiles -= T
 				fuel_objs -= fuel
 	else
-		for(var/turf/simulated/T in fire_tiles)
+		//for(var/turf/simulated/T in fire_tiles) ZASTURF
+		for(var/turf/T in fire_tiles)
 			if(istype(T.fire))
 				qdel(T.fire)
 		fire_tiles.Cut()
@@ -92,7 +93,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /turf/proc/create_fire(fl)
 	return 0
 
-/turf/simulated/create_fire(fl)
+//turf/simulated/create_fire(fl) ZASTURF
+/turf/create_fire(fl)
 	if(fire)
 		fire.firelevel = max(fl, fire.firelevel)
 		return 1
@@ -109,6 +111,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	return 0
 
+/turf/open/space/create_fire()
+	return
+
 /obj/effect/hotspot
 	anchored = TRUE
 	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
@@ -127,8 +132,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /obj/effect/hotspot/Process()
 	. = 1
 
-	var/turf/simulated/my_tile = loc
-	if(!istype(my_tile) || !my_tile.zone)
+	//var/turf/simulated/my_tile = loc ZASTURF
+	var/turf/my_tile = loc
+	if(istype(my_tile, /turf/open/space) || !my_tile.zone)
 		if(my_tile && my_tile.fire == src)
 			my_tile.fire = null
 		qdel(src)
@@ -155,9 +161,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	//spread
 	for(var/direction in GLOB.cardinals)
-		var/turf/simulated/enemy_tile = get_step(my_tile, direction)
-
-		if(istype(enemy_tile))
+		//var/turf/simulated/enemy_tile = get_step(my_tile, direction) ZASTURF
+		var/turf/enemy_tile = get_step(my_tile, direction)
+		if(!istype(enemy_tile, /turf/open/space))
 			if(my_tile.open_directions & direction) //Grab all valid bordering tiles
 				if(!enemy_tile.zone || enemy_tile.fire)
 					continue
@@ -212,10 +218,15 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	SSzas.active_hotspots.Remove(src)
 	. = ..()
 
-/turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again.
+//turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. ZASTURF
+/turf/var/fire_protection = 0
 /turf/proc/apply_fire_protection()
-/turf/simulated/apply_fire_protection()
 	fire_protection = world.time
+/*/turf/simulated/apply_fire_protection() ZASTURF
+	fire_protection = world.time*/
+
+/turf/open/space/apply_fire_protection()
+	return
 
 //Returns the firelevel
 /datum/gas_mixture/proc/react(zone/zone, force_burn, no_check = 0)
@@ -438,16 +449,17 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
 	return
 
-/turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
+//turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) ZASTURF
+/turf/open/floor/adjacent_fire_act(turf/open/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
 	var/dir_to = get_dir(src, adj_turf)
 
 	for(var/obj/structure/window/W in src)
 		if(W.dir == dir_to || W.fulltile) //Same direction or diagonal (full tile)
 			W.fire_act(adj_air, adj_temp, adj_volume)
 
-/*/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
+/turf/closed/wall/adjacent_fire_act(turf/open/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
 	burn(adj_temp)
-	if(adj_temp > material.melting_point)
-		take_damage(log(Frand(0.9, 1.1) * (adj_temp - material.melting_point)), BURN)
+	if(adj_temp > heat_capacity)
+		take_damage(log(Frand(0.9, 1.1) * (adj_temp - heat_capacity)), BURN)
 
-	return ..()*/
+	return ..()
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 6aa01691ad6..6d502cbebbb 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -35,10 +35,11 @@
 	// Nullspace is room temperature, clearly.
 	var/adjust_temp
 	if(loc)
-		if(!istype(loc, /turf/simulated))
+		if(!loc.simulated)
 			adjust_temp = loc.temperature
 		else
-			var/turf/simulated/T = loc
+			//var/turf/simulated/T = loc
+			var/turf/T = loc
 			if(T.zone && T.zone.air)
 				adjust_temp = T.zone.air.temperature
 			else
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 22f9e45529b..ac359e9e743 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -1,4 +1,4 @@
-/turf/simulated
+/turf
 	var/zone/zone
 	var/open_directions
 
@@ -11,10 +11,8 @@
 	var/list/initial_gas_mix
 	var/planetary_atmos //Let's just let this exist for now.
 
-#warn !!TEMPORARY PROCDEF!!
-/turf/open/proc/atmos_spawn_air(...)
-
-/turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
+///turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) ZASTURF
+/turf/open/proc/update_graphic(list/graphic_add = null, list/graphic_null = null)
 	if(graphic_add && graphic_add.len)
 		vis_contents += graphic_add
 	if(graphic_remove && graphic_remove.len)
@@ -49,19 +47,20 @@
 		if(r_block & AIR_BLOCKED)
 			continue
 
-		if(istype(unsim, /turf/simulated))
-
-			var/turf/simulated/sim = unsim
+		//if(istype(unsim, /turf/simulated)) ZASTURF
+		if(unsim.simulated)
+			//var/turf/simulated/sim = unsim
 			if(TURF_HAS_VALID_ZONE(sim))
 				SSzas.connect(sim, src)
 
 // Helper for can_safely_remove_from_zone().
+//ZASTURF - MACRO IM NOT COMMENTING THIS SHIT OUT
 #define GET_ZONE_NEIGHBOURS(T, ret) \
 	ret = 0; \
 	if (T.zone) { \
 		for (var/_gzn_dir in gzn_check) { \
-			var/turf/simulated/other = get_step(T, _gzn_dir); \
-			if (istype(other) && other.zone == T.zone) { \
+			var/turf/other = get_step(T, _gzn_dir); \
+			if (!istype(other, /turf/open/space) && other.zone == T.zone) { \
 				var/block; \
 				ATMOS_CANPASS_TURF(block, other, T); \
 				if (!(block & AIR_BLOCKED)) { \
@@ -77,7 +76,8 @@
 	This implementation may produce false negatives but it (hopefully) will not produce any false postiives.
 */
 
-/turf/simulated/proc/can_safely_remove_from_zone()
+///turf/simulated/proc/can_safely_remove_from_zone() ZASTURF
+/turf/proc/can_safely_remove_from_zone()
 	if(!zone)
 		return 1
 
@@ -88,8 +88,10 @@
 		//for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH)
 		if((dir & check_dirs) == dir)
 			//check that they are connected by the corner turf
-			var/turf/simulated/T = get_step(src, dir)
-			if (!istype(T))
+			//var/turf/simulated/T = get_step(src, dir) ZASTURF
+			var/turf/T = get_step(src, dir)
+			//if (!istype(T)) ZASTURF
+			if (istype(T, /turf/open/space))
 				. &= ~dir
 				continue
 
@@ -101,7 +103,8 @@
 	//it is safe to remove src from the zone if all cardinals are connected by corner turfs
 	. = !.
 
-/turf/simulated/update_air_properties()
+//turf/simulated/update_air_properties() ZAS
+/turf/open/update_air_properties()
 
 	if(zone && zone.invalid) //this turf's zone is in the process of being rebuilt
 		c_copy_air() //not very efficient :(
@@ -160,8 +163,9 @@
 
 			//Check that our zone hasn't been cut off recently.
 			//This happens when windows move or are constructed. We need to rebuild.
-			if((previously_open & d) && istype(unsim, /turf/simulated))
-				var/turf/simulated/sim = unsim
+			//if((previously_open & d) && istype(unsim, /turf/simulated)) ZAS
+			if((previously_open & d) && !istype(unsim, /turf/open/space))
+				var/turf/sim = unsim
 				if(zone && sim.zone == zone)
 					zone.rebuild()
 					return
@@ -170,9 +174,10 @@
 
 		open_directions |= d
 
-		if(istype(unsim, /turf/simulated))
+		//if(istype(unsim, /turf/simulated)) ZASTURF
+		if(!istype(unsim, /turf/open/space))
 
-			var/turf/simulated/sim = unsim
+			var/turf/sim = unsim
 			sim.open_directions |= GLOB.reverse_dir[d]
 
 			if(TURF_HAS_VALID_ZONE(sim))
@@ -263,11 +268,13 @@
 	var/datum/gas_mixture/GM = return_air()
 	return GM.remove(amount)
 
-/turf/simulated/assume_air(datum/gas_mixture/giver)
+///turf/simulated/assume_air(datum/gas_mixture/giver) ZASTURF
+/turf/proc/assume_air(datum/gas_mixture/giver)
 	var/datum/gas_mixture/my_air = return_air()
 	my_air.merge(giver)
 
-/turf/simulated/assume_gas(gasid, moles, temp = null)
+//turf/simulated/assume_gas(gasid, moles, temp = null) ZASTURF
+/turf/proc/assume_gas(gasid, moles, temp = null)
 	var/datum/gas_mixture/my_air = return_air()
 
 	if(isnull(temp))
@@ -277,7 +284,8 @@
 
 	return 1
 
-/turf/simulated/return_air()
+//turf/simulated/return_air() ZASTURF
+/turf/proc/return_air()
 	if(zone)
 		if(!zone.invalid)
 			SSzas.mark_zone_update(zone)
@@ -299,12 +307,18 @@
 		air.gas = initial_gas.Copy()
 	air.update_values()
 
-/turf/simulated/proc/c_copy_air()
+//turf/simulated/proc/c_copy_air() ZASTURF
+/turf/proc/c_copy_air()
 	if(!air) air = new/datum/gas_mixture
 	air.copy_from(zone.air)
 	air.group_multiplier = 1
 
-/turf/simulated/proc/atmos_spawn_air(gas_id, amount, initial_temperature)
+/*/turf/open/space/c_copy_air()
+	return
+*/
+
+//turf/simulated/proc/atmos_spawn_air(gas_id, amount, initial_temperature) ZASTURF
+/turf/proc/atmos_spawn_air(gas_id, amount, initial_temperature)
 	var/datum/gas_mixture/new_gas = new
 	var/datum/gas_mixture/existing_gas = return_air()
 	if(isnull(initial_temperature))
@@ -313,6 +327,9 @@
 		new_gas.adjust_gas_temp(gas_id, amount, initial_temperature)
 	existing_gas.merge(new_gas)
 
+/turf/open/space/atmos_spawn_air()
+	return
+
 /proc/turf_contains_dense_objects(var/turf/T)
 	return T.contains_dense_objects()
 
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index a46df8e036a..b56ea3e74d5 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -104,7 +104,10 @@ Class Procs:
 	ASSERT(!into.invalid)
 #endif
 	c_invalidate()
-	for(var/turf/simulated/T in contents)
+	//for(var/turf/simulated/T in contents) ZASTURF
+	for(var/turf/T in contents)
+		if(istype(T, /turf/open/space))
+			continue
 		into.add(T)
 		T.update_graphic(graphic_remove = air.graphic)
 		#ifdef ZASDBG
@@ -122,14 +125,19 @@ Class Procs:
 	invalid = 1
 	SSzas.remove_zone(src)
 	#ifdef ZASDBG
-	for(var/turf/simulated/T in contents)
-		T.dbg(invalid_zone)
+	//for(var/turf/simulated/T in contents) ZASTURF
+	for(var/turf/T in contents)
+		if(!istype(T, /turf/open/space))
+			T.dbg(invalid_zone)
 	#endif
 
 /zone/proc/rebuild()
 	if(invalid) return //Short circuit for explosions where rebuild is called many times over.
 	c_invalidate()
-	for(var/turf/simulated/T in contents)
+	//for(var/turf/simulated/T in contents) ZASTURF
+	for(var/turf/T in contents)
+		if(istype(T, /turf/open/space))
+			continue
 		T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
 		//T.dbg(invalid_zone)
 		T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
@@ -153,7 +161,8 @@ Class Procs:
 
 	// Update gas overlays.
 	if(air.check_tile_graphic(graphic_add, graphic_remove))
-		for(var/turf/simulated/T in contents)
+		//for(var/turf/simulated/T in contents)
+		for(var/turf/T in contents)
 			T.update_graphic(graphic_add, graphic_remove)
 		graphic_add.len = 0
 		graphic_remove.len = 0
@@ -182,7 +191,8 @@ Class Procs:
 	// Update atom temperature.
 	if(abs(air.temperature - last_air_temperature) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		last_air_temperature = air.temperature
-		for(var/turf/simulated/T in contents)
+		//for(var/turf/simulated/T in contents) ZASTURF
+		for(var/turf/T in contents)
 			for(var/check_atom in T.contents)
 				var/atom/checking = check_atom
 				if(checking.simulated)

From ca43d37e34b53d7e5600625f7c9448ea34000fef Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 18 Apr 2022 02:02:47 -0400
Subject: [PATCH 009/200] ITS TIME

---
 code/controllers/subsystem/zas.dm             |  14 +++
 code/game/gamemodes/objective_items.dm        |   2 +-
 code/game/objects/effects/countdown.dm        |   4 +-
 code/game/objects/items/melee/misc.dm         |   6 +-
 .../objects/items/stacks/sheets/mineral.dm    |   3 +-
 code/game/objects/structures/bonfire.dm       |   4 +-
 code/game/turfs/open/space/space.dm           |   4 +-
 code/modules/admin/admin_verbs.dm             |   2 +-
 code/modules/admin/verbs/fix_air.dm           |   4 +-
 .../traitor/equipment/Malf_Modules.dm         |   2 +-
 code/modules/atmospherics/ZAS/Connection.dm   |   2 +-
 code/modules/atmospherics/ZAS/Fire.dm         |  10 +-
 code/modules/atmospherics/ZAS/Turf.dm         |  15 +--
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  18 ++++
 .../ZAS/XGM/xgm_immutable_gas_mixture.dm      |   4 +-
 .../atmospherics/machinery/airalarm.dm        |   5 +-
 .../atmospherics/machinery/components/tank.dm |   2 +-
 .../components/trinary_devices/filter.dm      |  43 ++++----
 .../atmospherics/machinery/other/meter.dm     |   6 +-
 .../machinery/portable/canister.dm            |   2 +-
 code/modules/clothing/under/accessories.dm    |   2 +-
 .../kitchen_machinery/smartfridge.dm          |   3 +-
 .../modules/hydroponics/unique_plant_genes.dm |   5 +-
 code/modules/mapping/map_template.dm          |   7 +-
 .../living/simple_animal/hostile/regalrat.dm  |   4 +-
 code/modules/mob/mob.dm                       |   4 +-
 .../computers/item/tablet_presets.dm          |   4 +-
 .../computers/machinery/console_presets.dm    |   2 +-
 code/modules/power/lighting/light_items.dm    |   3 +-
 code/modules/power/singularity/singularity.dm |   3 +-
 .../mapGeneratorModules/helpers.dm            |   3 +-
 .../mapGenerators/repair.dm                   |   2 +-
 .../projectile/special/temperature.dm         |   8 +-
 .../chemistry/reagents/toxin_reagents.dm      |   4 +-
 .../chemistry/recipes/slime_extracts.dm       |   5 +-
 .../research/ordnance/doppler_array.dm        |   4 +-
 .../research/ordnance/tank_compressor.dm      |   7 +-
 .../xenobiology/crossbreeding/chilling.dm     |   8 +-
 .../ruins/lavalandruin_code/syndicate_base.dm |   3 +-
 code/modules/shuttle/on_move.dm               |   4 +-
 code/modules/surgery/organs/lungs.dm          | 101 +++++++++---------
 code/modules/unit_tests/breath.dm             |   4 +-
 code/modules/unit_tests/gas_transfer.dm       |   2 +
 tgstation.dme                                 |   8 +-
 44 files changed, 206 insertions(+), 146 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index ff50915b87b..aeb1e6ba1a8 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -555,3 +555,17 @@ SUBSYSTEM_DEF(zas)
 		qdel(temp)
 
 	return pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"]
+
+/datum/controller/subsystem/zas/proc/setup_template_machinery(list/atmos_machines)
+	var/obj/machinery/atmospherics/AM
+	for(var/A in 1 to atmos_machines.len)
+		AM = atmos_machines[A]
+		AM.atmos_init()
+		CHECK_TICK
+
+	for(var/A in 1 to atmos_machines.len)
+		AM = atmos_machines[A]
+		var/list/targets = AM.get_rebuild_targets()
+		for(var/datum/pipeline/build_off as anything in targets)
+			build_off.build_pipeline_blocking(AM)
+		CHECK_TICK
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index 4c66c5e301d..771eb72ce5b 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -283,7 +283,7 @@
 	..()
 
 /datum/objective_item/steal/supermatter/TargetExists()
-	return GLOB.main_supermatter_engine != null
+	return //GLOB.main_supermatter_engine != null
 
 //Items with special checks!
 /datum/objective_item/steal/plasma
diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm
index e5be8ffc0c0..9106e88ed11 100644
--- a/code/game/objects/effects/countdown.dm
+++ b/code/game/objects/effects/countdown.dm
@@ -93,10 +93,12 @@
 	color = "#00ff80"
 
 /obj/effect/countdown/supermatter/get_value()
-	var/obj/machinery/power/supermatter_crystal/S = attached_to
+/*
+	/var/obj/machinery/power/supermatter_crystal/S = attached_to
 	if(!istype(S))
 		return
 	return "<div align='center' valign='middle' style='position:relative; top:0px; left:0px'>[round(S.get_integrity_percent(), 1)]%</div>"
+	*/
 
 /obj/effect/countdown/transformer
 	name = "transformer countdown"
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 371a2eeb34f..12a78e769d0 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -171,6 +171,7 @@
 	playsound(get_turf(src), hitsound, 75, TRUE, -1)
 	return TOXLOSS
 
+/*
 /obj/item/melee/supermatter_sword
 	name = "supermatter sword"
 	desc = "In a station full of bad ideas, this might just be the worst."
@@ -272,7 +273,7 @@
 
 /obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna)
 	return FALSE
-
+*/
 /obj/item/melee/curator_whip
 	name = "curator's whip"
 	desc = "Somewhat eccentric and outdated, it still stings like hell to be hit by."
@@ -294,7 +295,7 @@
 		var/mob/living/carbon/human/human_target = target
 		human_target.drop_all_held_items()
 		human_target.visible_message(span_danger("[user] disarms [human_target]!"), span_userdanger("[user] disarmed you!"))
-
+/*
 /obj/item/melee/roastingstick
 	name = "advanced roasting stick"
 	desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits."
@@ -413,6 +414,7 @@
 		QDEL_NULL(beam)
 		playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE)
 		to_chat(user, span_notice("You put [src] away."))
+*/
 
 /obj/item/melee/cleric_mace
 	name = "cleric mace"
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 66372fcc4eb..d85f33be32b 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -457,7 +457,8 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
 		return ..()
 
 /obj/item/stack/sheet/mineral/coal/fire_act(exposed_temperature, exposed_volume)
-	atmos_spawn_air("co2=[amount*10];TEMP=[exposed_temperature]")
+	var/turf/muhturf = get_turf(src)
+	muhturf.atmos_spawn_air(GAS_CO2, amount*10, exposed_temperature)
 	qdel(src)
 
 /obj/item/stack/sheet/mineral/coal/five
diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm
index 916c42c01e8..327dcf0b93a 100644
--- a/code/game/objects/structures/bonfire.dm
+++ b/code/game/objects/structures/bonfire.dm
@@ -61,6 +61,7 @@
 				return ..()
 	if(used_item.get_temperature())
 		start_burning()
+	/*
 	if(grill)
 		if(istype(used_item, /obj/item/melee/roastingstick))
 			return FALSE
@@ -75,7 +76,8 @@
 				used_item.pixel_x = used_item.base_pixel_x + clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2)
 				used_item.pixel_y = used_item.base_pixel_y + clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2)
 		else
-			return ..()
+			return ..()*/
+	return ..()
 
 
 /obj/structure/bonfire/attack_hand(mob/user, list/modifiers)
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index 9fbc6d1c1f2..2c044d922b3 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -14,7 +14,7 @@
 	var/destination_x
 	var/destination_y
 
-	var/static/datum/gas_mixture/immutable/space/space_gas = new
+	var/static/datum/gas_mixture/immutable/space_gas = new
 	// run_later = TRUE
 	plane = PLANE_SPACE
 	layer = SPACE_LAYER
@@ -94,7 +94,7 @@
 
 /turf/open/space/AfterChange()
 	..()
-	atmos_overlay_types = null
+	//atmos_overlay_types = null
 
 /turf/open/space/Assimilate_Air()
 	return
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 7055901b8d3..3f04ef1b941 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -19,7 +19,7 @@ GLOBAL_PROTECT(admin_verbs_default)
 	/client/proc/mark_datum_mapview,
 	/client/proc/tag_datum_mapview,
 	/client/proc/debugstatpanel,
-	/client/proc/fix_air, /*resets air in designated radius to its default atmos composition*/
+	/client/proc/fixatmos, /*resets air in designated radius to its default atmos composition*/
 	/client/proc/requests
 	)
 GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index 0098317ce9f..8762e7edeea 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -14,8 +14,8 @@
 	var/current_time = world.timeofday
 
 	// Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes.
-	for(var/obj/machinery/power/supermatter_crystal/S in GLOB.machines)
-		S.power = 0
+	/*for(var/obj/machinery/power/supermatter_crystal/S in GLOB.machines)
+		S.power = 0*/
 	to_chat(usr, "\[1/5\] - Supermatter depowered")
 
 	// Remove all gases from all pipenets
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index 9c84efd5524..8386386f162 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -3,7 +3,7 @@
 
 GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
 		/obj/machinery/field/containment,
-		/obj/machinery/power/supermatter_crystal,
+		//obj/machinery/power/supermatter_crystal,
 		/obj/machinery/doomsday_device,
 		/obj/machinery/nuclearbomb,
 		/obj/machinery/nuclearbomb/selfdestruct,
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 55721a9e347..674c6265dd6 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -70,7 +70,7 @@ Class Procs:
 	src.A = A
 	src.B = B
 	zoneA = A.zone
-	if(istype(B /turf/open/space))
+	if(istype(B, /turf/open/space))
 		mark_space()
 		edge = SSzas.get_edge(A.zone,B)
 		edge.add_connection(src)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 1037a7a5b3e..33968da3bed 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -446,7 +446,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	//return a truthy value of whether burning actually happened
 	return mx * (head_exposure + chest_exposure + groin_exposure + legs_exposure + arms_exposure)
 
-/turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
+//turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
+/turf/proc/adjacent_fire_act(turf/source, exposed_temperature, exposed_volume)
 	return
 
 //turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) ZASTURF
@@ -458,8 +459,13 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			W.fire_act(adj_air, adj_temp, adj_volume)
 
 /turf/closed/wall/adjacent_fire_act(turf/open/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
-	burn(adj_temp)
+	//burn(adj_temp)
 	if(adj_temp > heat_capacity)
 		take_damage(log(Frand(0.9, 1.1) * (adj_temp - heat_capacity)), BURN)
 
 	return ..()
+
+/obj/effect/dummy/lighting_obj/moblight/fire
+	name = "fire"
+	light_color = LIGHT_COLOR_FIRE
+	light_range = LIGHT_RANGE_FIRE
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index ac359e9e743..2c223d56dba 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -12,7 +12,7 @@
 	var/planetary_atmos //Let's just let this exist for now.
 
 ///turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) ZASTURF
-/turf/open/proc/update_graphic(list/graphic_add = null, list/graphic_null = null)
+/turf/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
 	if(graphic_add && graphic_add.len)
 		vis_contents += graphic_add
 	if(graphic_remove && graphic_remove.len)
@@ -50,8 +50,8 @@
 		//if(istype(unsim, /turf/simulated)) ZASTURF
 		if(unsim.simulated)
 			//var/turf/simulated/sim = unsim
-			if(TURF_HAS_VALID_ZONE(sim))
-				SSzas.connect(sim, src)
+			if(TURF_HAS_VALID_ZONE(unsim))
+				SSzas.connect(unsim, src)
 
 // Helper for can_safely_remove_from_zone().
 //ZASTURF - MACRO IM NOT COMMENTING THIS SHIT OUT
@@ -246,14 +246,15 @@
 
 /turf/proc/post_update_air_properties()
 	if(connections) connections.update_all()
-
+/*
 /turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
-	return 0
+	return 0*/
 
-/turf/proc/assume_gas(gasid, moles, temp = 0)
-	return 0
+/*/turf/proc/assume_gas(gasid, moles, temp = 0)
+	return 0*/
 
 /turf/return_air()
+	RETURN_TYPE(/datum/gas_mixture)
 	//Create gas mixture to hold data for passing
 	var/datum/gas_mixture/GM = new
 
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index aa85da6b36f..bb115cccdd8 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -493,6 +493,24 @@
 	update_values()
 	return gas
 
+/datum/gas_mixture/proc/return_visuals()
+	update_values()
+	check_tile_graphic()
+	return graphic
+
+/datum/gas_mixture/proc/copy()
+	RETURN_TYPE(/datum/gas_mixture)
+	var/datum/gas_mixture/new_gas = new
+	update_values()
+	new_gas.gas = src.gas
+	new_gas.temperature = src.temperature
+	new_gas.total_moles = src.total_moles
+	return new_gas
+
+/turf/open/proc/copy_air_with_tile(turf/open/target_turf)
+	if(istype(target_turf))
+		air.copy_from(target_turf.air)
+
 /datum/gas_mixture/proc/leak_to_enviroment(datum/gas_mixture/environment)
 	pump_gas_passive(src, environment, calculate_transfer_moles(src, environment, src.return_pressure() - environment.return_pressure()))
 
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
index efbdc276daf..f1fb6daff8b 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
@@ -6,7 +6,7 @@
 	temperature = initial_temperature
 	return ..()
 
-/datum/gas_mixture/immutable/adjust_gas()
+/datum/gas_mixture/immutable/adjust_gas(gasid, moles, update = 1)
 	return
 
 /datum/gas_mixture/immutable/remove()
@@ -24,7 +24,7 @@
 /datum/gas_mixture/immutable/multiply()
 	return TRUE
 
-/datum/gas_mixture/immutable/adjust_gas_temp()
+/datum/gas_mixture/immutable/adjust_gas_temp(gasid, moles, temp, update = 1)
 	return
 
 /datum/gas_mixture/immutable/adjust_multi()
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 61edb735bfd..39e7ecefdcb 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -917,6 +917,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 
 	var/datum/port/output/pressure
 	var/datum/port/output/gas_amount
+	var/datum/port/output/my_temperature
 
 	var/obj/machinery/airalarm/connected_alarm
 	var/list/options_map
@@ -929,7 +930,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 	request_data = add_input_port("Request Atmosphere Data", PORT_TYPE_SIGNAL)
 
 	pressure = add_output_port("Pressure", PORT_TYPE_NUMBER)
-	temperature = add_output_port("Temperature", PORT_TYPE_NUMBER)
+	my_temperature = add_output_port("Temperature", PORT_TYPE_NUMBER)
 	gas_amount = add_output_port("Chosen Gas Amount", PORT_TYPE_NUMBER)
 
 /obj/item/circuit_component/air_alarm/populate_options()
@@ -966,7 +967,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 		var/turf/alarm_turf = get_turf(connected_alarm)
 		var/datum/gas_mixture/environment = alarm_turf.return_air()
 		pressure.set_output(round(environment.return_pressure()))
-		temperature.set_output(round(environment.temperature))
+		my_temperature.set_output(round(environment.temperature))
 		if(ispath(options_map[current_option]))
 			gas_amount.set_output(round(environment.get_gases()[options_map[current_option]]))
 		return
diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index 8613c267306..951134dc6d8 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -268,7 +268,7 @@
 	window = image(icon, icon_state = "window-bg", layer = FLOAT_LAYER)
 
 	var/list/new_underlays = list()
-	for(var/obj/effect/overlay/gas/gas as anything in air_contents.return_visuals())
+	for(var/obj/effect/gas_overlay/gas as anything in air_contents.return_visuals())
 		var/image/new_underlay = image(gas.icon, icon_state = gas.icon_state, layer = FLOAT_LAYER)
 		new_underlay.filters = alpha_mask_filter(icon = icon(icon, icon_state = "window-bg"))
 		new_underlays += new_underlay
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 78fd349b75c..a565712f11f 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -136,7 +136,7 @@
 
 	data["filter_types"] = list()
 	for(var/gas in GLOB.all_gases)
-		data["filter_types"] += list(list("name" = gas[META_GAS_NAME], "enabled" = (path in filter_type)))
+		data["filter_types"] += list(list("name" = xgm_gas_data[gas], "enabled" = (gas in filter_type)))
 
 	return data
 
@@ -161,15 +161,15 @@
 				transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE)
 				investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS)
 		if("toggle_filter")
-			if(!gas_id2path(params["val"]))
+			if(!params["val"])
 				return TRUE
-			filter_type ^= gas_id2path(params["val"])
+			filter_type ^= params["val"]
 			var/change
-			if(gas_id2path(params["val"]) in filter_type)
+			if(params["val"] in filter_type)
 				change = "added"
 			else
 				change = "removed"
-			var/gas_name = GLOB.meta_gas_info[gas_id2path(params["val"])][META_GAS_NAME]
+			var/gas_name = xgm_gas_data.name[params["val"]]
 			investigate_log("[key_name(usr)] [change] [gas_name] from the filter type.", INVESTIGATE_ATMOS)
 			. = TRUE
 	update_appearance()
@@ -227,19 +227,20 @@
 	icon_state = "filter_on-0"
 /obj/machinery/atmospherics/components/trinary/filter/atmos/n2
 	name = "nitrogen filter"
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list(GAS_N2O)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/o2
 	name = "oxygen filter"
-	filter_type = list(/datum/gas/oxygen)
+	filter_type = list(GAS_OXYGEN)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/co2
 	name = "carbon dioxide filter"
-	filter_type = list(/datum/gas/carbon_dioxide)
+	filter_type = list(GAS_CO2)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/n2o
 	name = "nitrous oxide filter"
-	filter_type = list(/datum/gas/nitrous_oxide)
+	filter_type = list(GAS_N2O)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/plasma
 	name = "plasma filter"
-	filter_type = list(/datum/gas/plasma)
+	filter_type = list(GAS_PLASMA)
+/*
 /obj/machinery/atmospherics/components/trinary/filter/atmos/bz
 	name = "bz filter"
 	filter_type = list(/datum/gas/bz)
@@ -252,9 +253,11 @@
 /obj/machinery/atmospherics/components/trinary/filter/atmos/healium
 	name = "healium filter"
 	filter_type = list(/datum/gas/healium)
+*/
 /obj/machinery/atmospherics/components/trinary/filter/atmos/h2
 	name = "hydrogen filter"
-	filter_type = list(/datum/gas/hydrogen)
+	filter_type = list(GAS_HYDROGEN)
+/*
 /obj/machinery/atmospherics/components/trinary/filter/atmos/hypernoblium
 	name = "hypernoblium filter"
 	filter_type = list(/datum/gas/hypernoblium)
@@ -287,25 +290,26 @@
 /obj/machinery/atmospherics/components/trinary/filter/atmos/antinoblium
 	name = "antinoblium filter"
 	filter_type = list(/datum/gas/antinoblium)
-
+*/
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped //This feels wrong, I know
 	icon_state = "filter_on-0_f"
 	flipped = TRUE
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2
 	name = "nitrogen filter"
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list(GAS_NITROGEN)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2
 	name = "oxygen filter"
-	filter_type = list(/datum/gas/oxygen)
+	filter_type = list(GAS_OXYGEN)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2
 	name = "carbon dioxide filter"
-	filter_type = list(/datum/gas/carbon_dioxide)
+	filter_type = list(GAS_CO2)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2o
 	name = "nitrous oxide filter"
-	filter_type = list(/datum/gas/nitrous_oxide)
+	filter_type = list(GAS_N2O)
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma
 	name = "plasma filter"
-	filter_type = list(/datum/gas/plasma)
+	filter_type = list(GAS_PLASMA)
+	/*
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/bz
 	name = "bz filter"
 	filter_type = list(/datum/gas/bz)
@@ -318,9 +322,11 @@
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/healium
 	name = "healium filter"
 	filter_type = list(/datum/gas/healium)
+*/
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/h2
 	name = "hydrogen filter"
-	filter_type = list(/datum/gas/hydrogen)
+	filter_type = list(GAS_HYDROGEN)
+/*
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/hypernoblium
 	name = "hypernoblium filter"
 	filter_type = list(/datum/gas/hypernoblium)
@@ -351,6 +357,7 @@
 /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/antinoblium
 	name = "antinoblium filter"
 	filter_type = list(/datum/gas/antinoblium)
+*/
 
 // These two filter types have critical_machine flagged to on and thus causes the area they are in to be exempt from the Grid Check event.
 
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 767fa2534e3..b40d85073c1 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -154,7 +154,7 @@
 	///Pressure of the pipenet
 	var/datum/port/output/pressure
 	///Temperature of the pipenet
-	var/datum/port/output/temperature
+	var/datum/port/output/net_temperature
 
 	///The component parent object
 	var/obj/machinery/meter/connected_meter
@@ -163,7 +163,7 @@
 	request_data = add_input_port("Request Meter Data", PORT_TYPE_SIGNAL, trigger = .proc/request_meter_data)
 
 	pressure = add_output_port("Pressure", PORT_TYPE_NUMBER)
-	temperature = add_output_port("Temperature", PORT_TYPE_NUMBER)
+	net_temperature = add_output_port("Temperature", PORT_TYPE_NUMBER)
 
 /obj/item/circuit_component/atmos_meter/register_usb_parent(atom/movable/shell)
 	. = ..()
@@ -180,7 +180,7 @@
 		return
 	var/datum/gas_mixture/environment = connected_meter.target.return_air()
 	pressure.set_output(environment.return_pressure())
-	temperature.set_output(environment.temperature)
+	net_temperature.set_output(environment.temperature)
 
 // TURF METER - REPORTS A TILE'S AIR CONTENTS
 // why are you yelling?
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 968dc8f08f0..961929d52ed 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -679,7 +679,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 					var/list/gaseslog = list() //list for logging all gases in canister
 					for(var/gas in air_contents.gas)
 						gaseslog[xgm_gas_data.name[gas]] = air_contents.get_gas(gas)	//adds gases to gaseslog
-						if(!xgm_gas_data.flags[gas] & XGM_GAS_CONTAMINANT|XGM_GAS_FUEL)
+						if(!(xgm_gas_data.flags[gas] & XGM_GAS_CONTAMINANT|XGM_GAS_FUEL))
 							continue
 						danger = TRUE //at least 1 danger gas
 					logmsg = "[key_name(usr)] <b>opened</b> a canister that contains the following:"
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 8612cae4cb2..632348c29d5 100755
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -269,7 +269,7 @@
 	return exposed_temperature > 300
 
 /obj/item/clothing/accessory/medal/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	var/open/turf/turfloc = get_turf(src)
+	var/turf/turfloc = get_turf(src)
 	turfloc.atmos_spawn_air(GAS_PLASMA, 20, exposed_temperature)
 	visible_message(span_danger("\The [src] bursts into flame!"), span_userdanger("Your [src] bursts into flame!"))
 	qdel(src)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 8ecf86d9684..fde566b6c08 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -370,7 +370,8 @@
 	. = ..()
 	if(. & EMP_PROTECT_SELF)
 		return
-	atmos_spawn_air("TEMP=1000")
+	var/turf/T = get_turf(src)
+	T.atmos_spawn_air(GAS_OXYGEN, 1, 1000)
 
 
 // ----------------------------
diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm
index a53924cf2f3..225eef969fe 100644
--- a/code/modules/hydroponics/unique_plant_genes.dm
+++ b/code/modules/hydroponics/unique_plant_genes.dm
@@ -621,13 +621,12 @@
 		stop_gas()
 		return
 
-	var/turf/open/tray_turf = get_turf(tray)
+	var/turf/tray_turf = get_turf(tray)
 	if(abs(ONE_ATMOSPHERE - tray_turf.return_air().return_pressure()) > (seed.potency / 10 + 10)) // clouds can begin showing at around 50-60 potency in standard atmos
 		return
 
 	var/datum/gas_mixture/stank = new
-	ADD_GAS(/datum/gas/miasma, stank.gases)
-	stank.gases[/datum/gas/miasma][MOLES] = (seed.yield + 6) * 3.5 * MIASMA_CORPSE_MOLES * delta_time // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses
+	stank.adjust_gas(GAS_METHANE, (seed.yield + 6) * 3.5 * MIASMA_CORPSE_MOLES * delta_time) // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses
 	stank.temperature = T20C // without this the room would eventually freeze and miasma mining would be easier
 	tray_turf.assume_air(stank)
 
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index 08f872c3072..00497473f12 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -105,7 +105,7 @@
 	// NOTE, now that Initialize and LateInitialize run correctly, do we really
 	// need these two below?
 	SSmachines.setup_template_powernets(cables)
-	SSair.setup_template_machinery(atmos_machines)
+	SSzas.setup_template_machinery(atmos_machines)
 	SSshuttle.setup_shuttles(ports)
 
 	//calculate all turfs inside the border
@@ -156,11 +156,13 @@
 
 	var/list/border = block(locate(max(T.x-1, 1), max(T.y-1, 1),  T.z),
 							locate(min(T.x+width+1, world.maxx), min(T.y+height+1, world.maxy), T.z))
+	/*
 	for(var/L in border)
 		var/turf/turf_to_disable = L
 		SSair.remove_from_active(turf_to_disable) //stop processing turfs along the border to prevent runtimes, we return it in initTemplateBounds()
 		turf_to_disable.atmos_adjacent_turfs?.Cut()
-
+	*/
+	SSzas.can_fire = FALSE
 	// Accept cached maps, but don't save them automatically - we don't want
 	// ruins clogging up memory for the whole round.
 	var/datum/parsed_map/parsed = cached_map || new(file(mappath))
@@ -187,6 +189,7 @@
 		generate_ceiling(affected_turfs)
 
 	log_game("[name] loaded at [T.x],[T.y],[T.z]")
+	SSzas.can_fire = TRUE
 	return bounds
 
 /datum/map_template/proc/generate_ceiling(affected_turfs)
diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
index 4bc3466dfc8..d556498e188 100644
--- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
@@ -113,9 +113,9 @@
 
 /mob/living/simple_animal/hostile/regalrat/handle_environment(datum/gas_mixture/environment)
 	. = ..()
-	if(stat == DEAD || !environment || !environment.gases[/datum/gas/miasma])
+	if(stat == DEAD || !environment || !environment.get_gas(GAS_METHANE))
 		return
-	var/miasma_percentage = environment.gases[/datum/gas/miasma][MOLES] / environment.total_moles()
+	var/miasma_percentage = environment.gas[GAS_METHANE] / environment.total_moles()
 	if(miasma_percentage>=0.25)
 		heal_bodypart_damage(1)
 
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 87631e7d383..7191222d288 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -127,8 +127,8 @@
 	var/t = "[span_notice("Coordinates: [x],[y] ")]\n"
 	t += "[span_danger("Temperature: [environment.temperature] ")]\n"
 	for(var/id in environment.gas)
-		if(gas[id])
-			t+="[span_notice("[gas]: [gas[MOLES]] ")]\n"
+		if(!environment.get_gas(id))
+			t+="[span_notice("[xgm_gas_data.name[environment.gas]]: [environment.get_gas(id)] ")]\n"
 
 	to_chat(usr, t)
 
diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm
index bbde8533364..acd31b0135b 100644
--- a/code/modules/modular_computers/computers/item/tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/tablet_presets.dm
@@ -73,7 +73,7 @@
 	. = ..()
 	var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
 	hard_drive.store_file(new /datum/computer_file/program/alarm_monitor)
-	hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
+	//hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
 
 /obj/item/modular_computer/tablet/preset/advanced/security/Initialize(mapload)
 	. = ..()
@@ -93,7 +93,7 @@
 	. = ..()
 	var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
 	hard_drive.store_file(new /datum/computer_file/program/alarm_monitor)
-	hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
+	//hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
 
 /// Given to Nuke Ops members.
 /obj/item/modular_computer/tablet/nukeops/Initialize(mapload)
diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm
index e2e79eed7d0..3263088816b 100644
--- a/code/modules/modular_computers/computers/machinery/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console_presets.dm
@@ -36,7 +36,7 @@
 	var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
 	hard_drive.store_file(new/datum/computer_file/program/power_monitor())
 	hard_drive.store_file(new/datum/computer_file/program/alarm_monitor())
-	hard_drive.store_file(new/datum/computer_file/program/supermatter_monitor())
+	//hard_drive.store_file(new/datum/computer_file/program/supermatter_monitor())
 
 // ===== RESEARCH CONSOLE =====
 /obj/machinery/modular_computer/console/preset/research
diff --git a/code/modules/power/lighting/light_items.dm b/code/modules/power/lighting/light_items.dm
index c9a39ba40fc..58856a46ba9 100644
--- a/code/modules/power/lighting/light_items.dm
+++ b/code/modules/power/lighting/light_items.dm
@@ -135,5 +135,6 @@
 		force = 5
 		playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE)
 		if(rigged)
-			atmos_spawn_air("plasma=5") //5u of plasma are required to rig a light bulb/tube
+			var/turf/T = get_turf(src)
+			T.atmos_spawn_air(GAS_PLASMA, 5) //5u of plasma are required to rig a light bulb/tube
 		update()
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 5636cac5203..76d358296e4 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -290,11 +290,12 @@
 /obj/singularity/proc/consume(atom/thing)
 	var/gain = thing.singularity_act(current_size, src)
 	energy += gain
-	if(istype(thing, /obj/machinery/power/supermatter_crystal) && !consumed_supermatter)
+	/*if(istype(thing, /obj/machinery/power/supermatter_crystal) && !consumed_supermatter)
 		desc = "[initial(desc)] It glows fiercely with inner fire."
 		name = "supermatter-charged [initial(name)]"
 		consumed_supermatter = TRUE
 		set_light(10)
+		*/
 
 /obj/singularity/proc/check_cardinals_range(steps, retry_with_move = FALSE)
 	. = length(GLOB.cardinals) //Should be 4.
diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm
index 844b41c05c7..6f82e45a4bf 100644
--- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm
+++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm
@@ -9,6 +9,7 @@
 /datum/map_generator_module/bottom_layer/repressurize/generate()
 	if(!mother)
 		return
+	/*
 	var/list/map = mother.map
 	for(var/turf/T in map)
 		SSair.remove_from_active(T)
@@ -16,7 +17,7 @@
 		if(T.air)
 			T.air.copy_from_turf(T)
 		SSair.add_to_active(T, TRUE)
-
+*/
 /datum/map_generator_module/bottom_layer/massdelete
 	spawnableAtoms = list()
 	spawnableTurfs = list()
diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm
index b305ac2c438..21789898daa 100644
--- a/code/modules/procedural_mapping/mapGenerators/repair.dm
+++ b/code/modules/procedural_mapping/mapGenerators/repair.dm
@@ -51,7 +51,7 @@
 
 	SSatoms.InitializeAtoms(atoms)
 	SSmachines.setup_template_powernets(cables)
-	SSair.setup_template_machinery(atmos_machines)
+	SSzas.setup_template_machinery(atmos_machines)
 	GLOB.reloading_map = FALSE
 
 /datum/map_generator/repair
diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm
index 6f6e39004e5..a3db79507f4 100644
--- a/code/modules/projectiles/projectile/special/temperature.dm
+++ b/code/modules/projectiles/projectile/special/temperature.dm
@@ -5,22 +5,22 @@
 	damage_type = BURN
 	nodamage = FALSE
 	armor_flag = ENERGY
-	var/temperature = -50 // reduce the body temperature by 50 points
+	var/adj_temperature = -50 // reduce the body temperature by 50 points
 
 /obj/projectile/temp/on_hit(atom/target, blocked = 0)
 	. = ..()
 	if(iscarbon(target))
 		var/mob/living/carbon/hit_mob = target
-		var/thermal_protection = 1 - hit_mob.get_insulation_protection(hit_mob.bodytemperature + temperature)
+		var/thermal_protection = 1 - hit_mob.get_insulation_protection(hit_mob.bodytemperature + adj_temperature)
 
 		// The new body temperature is adjusted by the bullet's effect temperature
 		// Reduce the amount of the effect temperature change based on the amount of insulation the mob is wearing
-		hit_mob.adjust_bodytemperature((thermal_protection * temperature) + temperature)
+		hit_mob.adjust_bodytemperature((thermal_protection * adj_temperature) + adj_temperature)
 
 	else if(isliving(target))
 		var/mob/living/L = target
 		// the new body temperature is adjusted by the bullet's effect temperature
-		L.adjust_bodytemperature((1 - blocked) * temperature)
+		L.adjust_bodytemperature((1 - blocked) * adj_temperature)
 
 /obj/projectile/temp/hot
 	name = "heat beam"
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 5cbd3f2d9d1..bb1805373f3 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -107,8 +107,8 @@
 	if(!holder.my_atom)
 		return
 
-	var/atom/A = holder.my_atom
-	A.atmos_spawn_air("plasma=[volume];TEMP=[holder.chem_temp]")
+	var/turf/T = get_turf(holder.my_atom)
+	T.atmos_spawn_air(GAS_PLASMA, volume, holder.chem_temp)
 	holder.del_reagent(type)
 
 /datum/reagent/toxin/plasma/expose_turf(turf/open/exposed_turf, reac_volume)
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 331a8431dac..9996cf5e216 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -210,10 +210,9 @@
 
 /datum/chemical_reaction/slime/slimefreeze/proc/freeze(datum/reagents/holder)
 	if(holder?.my_atom)
-		var/turf/open/T = get_turf(holder.my_atom)
+		var/turf/T = get_turf(holder.my_atom)
 		if(istype(T))
-			var/datum/gas/gastype = /datum/gas/nitrogen
-			T.atmos_spawn_air("[initial(gastype.id)]=50;TEMP=2.7")
+			T.atmos_spawn_air(GAS_NITROGEN, 50, 2.7)
 
 /datum/chemical_reaction/slime/slimefireproof
 	required_reagents = list(/datum/reagent/water = 1)
diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm
index 56c93fbbe79..08103972c0e 100644
--- a/code/modules/research/ordnance/doppler_array.dm
+++ b/code/modules/research/ordnance/doppler_array.dm
@@ -284,8 +284,8 @@
 		// Make sure the list is indexed first.
 		if(reaction_data.len)
 			for (var/path in reaction_data[TANK_RESULTS_REACTION])
-				var/datum/gas_reaction/reaction_path = path
-				record_data["reaction_results"] += initial(reaction_path.name)
+				//var/datum/gas_reaction/reaction_path = path
+				record_data["reaction_results"] += "UNIMPLIMENTED - GAS REACTIONS"
 			if(TANK_MERGE_OVERPRESSURE in reaction_data[TANK_RESULTS_MISC])
 				record_data["reaction_results"] += "Tank overpressurized before reaction"
 
diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm
index 75070f324f2..824c7437c80 100644
--- a/code/modules/research/ordnance/tank_compressor.dm
+++ b/code/modules/research/ordnance/tank_compressor.dm
@@ -192,8 +192,8 @@
 	new_record.name = "Log Recording #[record_number]"
 	new_record.experiment_source = inserted_tank.name
 	new_record.timestamp = station_time_timestamp()
-	for(var/gas_path in leaked_gas_buffer.gases)
-		new_record.gas_data[gas_path] = leaked_gas_buffer.gases[gas_path][MOLES]
+	for(var/gas_path in leaked_gas_buffer.gas)
+		new_record.gas_data[gas_path] = leaked_gas_buffer.gas[gas_path]
 
 	compressor_record += new_record
 	record_number += 1
@@ -358,7 +358,6 @@
 			"gases" = list()
 		)
 		for (var/path in record.gas_data)
-			var/datum/gas/gas_path = path
-			single_record_data["gases"] += list(initial(gas_path.name) = record.gas_data[gas_path])
+			single_record_data["gases"] += list(path = record.gas_data[path])
 		data["records"] += list(single_record_data)
 	return data
diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm
index 56d2c56a8e9..d649701840c 100644
--- a/code/modules/research/xenobiology/crossbreeding/chilling.dm
+++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm
@@ -104,14 +104,12 @@ Chilling extracts:
 		to_chat(user, span_warning("[src] can't affect such a large area."))
 		return
 	var/filtered = FALSE
-	for(var/turf/open/T in A)
+	for(var/turf/T in A)
 		var/datum/gas_mixture/G = T.air
 		if(istype(G))
-			G.assert_gas(/datum/gas/plasma)
-			G.gases[/datum/gas/plasma][MOLES] = 0
+			G.gas[GAS_PLASMA] = 0
 			filtered = TRUE
-			G.garbage_collect()
-			T.//air_update_turf(FALSE, FALSE)
+			//T.air_update_turf(FALSE, FALSE)
 	if(filtered)
 		user.visible_message(span_notice("Cracks spread throughout [src], and some air is sucked in!"))
 	else
diff --git a/code/modules/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/ruins/lavalandruin_code/syndicate_base.dm
index 1fd36f7a7d1..55c6bb5fc5d 100644
--- a/code/modules/ruins/lavalandruin_code/syndicate_base.dm
+++ b/code/modules/ruins/lavalandruin_code/syndicate_base.dm
@@ -45,7 +45,7 @@
 	new /obj/item/organ/tongue/tied(src)
 	new /obj/item/autosurgeon/organ/syndicate/commsagent(src)
 	new	/obj/item/clothing/gloves/radio(src)
-
+/*
 /obj/machinery/power/supermatter_crystal/shard/syndicate
 	name = "syndicate supermatter shard"
 	desc = "Your benefactors conveinently neglected to mention it's already assembled."
@@ -61,3 +61,4 @@
 		return
 	else
 		. = ..()
+*/
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index f72f19c96ad..17659877f5b 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -88,7 +88,7 @@ All ShuttleMove procs go here
 	blocks_air = initial(blocks_air)
 	//air_update_turf(TRUE, blocks_air)
 	oldT.blocks_air = initial(oldT.blocks_air)
-	oldT.//air_update_turf(TRUE, oldT.blocks_air)
+	//oldT.air_update_turf(TRUE, oldT.blocks_air)
 
 
 /////////////////////////////////////////////////////////////////////////////////////
@@ -254,7 +254,7 @@ All ShuttleMove procs go here
 			A.atmos_init()
 			if(A.return_pipenet())
 				A.add_member(src)
-		SSair.add_to_rebuild_queue(src)
+		SSzas.add_to_rebuild_queue(src)
 	else
 		// atmos_init() calls update_appearance(), so we don't need to call it
 		update_appearance()
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 7f7889f7f1f..cb1f8f01062 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -110,34 +110,35 @@
 			breather.throw_alert(ALERT_NOT_ENOUGH_NITRO, /atom/movable/screen/alert/not_enough_nitro)
 		return FALSE
 
-	for(var/gas_id in GLOB.meta_gas_info)
-		breath.assert_gas(gas_id)
-
 	if(istype(breather.wear_mask) && (breather.wear_mask.clothing_flags & GAS_FILTERING) && breather.wear_mask.has_filter)
 		breath = breather.wear_mask.consume_filter(breath)
 
 	var/gas_breathed = 0
 
-	var/list/breath_gases = breath.gases
+	//var/list/breath_gases = breath.gases
+	//Handle subtypes' breath processing
+	handle_gas_override(breather, breath, gas_breathed)
 
 	//Partial pressures in our breath
-	var/O2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES]))
-	var/N2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrogen][MOLES])
-	var/Plasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/plasma][MOLES])
-	var/CO2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])
+	var/O2_moles = breath.get_gas(GAS_OXYGEN)
+	var/N2_moles = breath.get_gas(GAS_NITROGEN)
+	var/plasma_moles = breath.get_gas(GAS_PLASMA)
+	var/CO2_moles = breath.get_gas(GAS_CO2)
+
+	var/O2_pp = breath.get_breath_partial_pressure(O2_moles)//+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES]))
+	var/N2_pp = breath.get_breath_partial_pressure(N2_moles)
+	var/Plasma_pp = breath.get_breath_partial_pressure(plasma_moles)
+	var/CO2_pp = breath.get_breath_partial_pressure(CO2_moles)
 	//Vars for n2o and healium induced euphorias.
 	var/n2o_euphoria = EUPHORIA_LAST_FLAG
 	var/healium_euphoria = EUPHORIA_LAST_FLAG
 
-	//Handle subtypes' breath processing
-	handle_gas_override(breather,breath_gases, gas_breathed)
-
 	//-- OXY --//
 
 	//Too much oxygen! //Yes, some species may not like it.
 	if(safe_oxygen_max)
 		if(O2_pp > safe_oxygen_max)
-			var/ratio = (breath_gases[/datum/gas/oxygen][MOLES]/safe_oxygen_max) * 10
+			var/ratio = (O2_moles/safe_oxygen_max) * 10
 			breather.apply_damage_type(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type)
 			breather.throw_alert(ALERT_TOO_MUCH_OXYGEN, /atom/movable/screen/alert/too_much_oxy)
 		else
@@ -146,18 +147,18 @@
 	//Too little oxygen!
 	if(safe_oxygen_min)
 		if(O2_pp < safe_oxygen_min)
-			gas_breathed = handle_too_little_breath(breather, O2_pp, safe_oxygen_min, breath_gases[/datum/gas/oxygen][MOLES])
+			gas_breathed = handle_too_little_breath(breather, O2_pp, safe_oxygen_min, O2_moles)
 			breather.throw_alert(ALERT_NOT_ENOUGH_OXYGEN, /atom/movable/screen/alert/not_enough_oxy)
 		else
 			breather.failed_last_breath = FALSE
 			if(breather.health >= breather.crit_threshold)
 				breather.adjustOxyLoss(-5)
-			gas_breathed = breath_gases[/datum/gas/oxygen][MOLES]
+			gas_breathed = O2_moles
 			breather.clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
 
 	//Exhale
-	breath_gases[/datum/gas/oxygen][MOLES] -= gas_breathed
-	breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
+	breath.adjust_gas(GAS_OXYGEN, -gas_breathed)
+	breath.adjust_gas(GAS_CO2, gas_breathed)
 	gas_breathed = 0
 
 	//-- Nitrogen --//
@@ -165,7 +166,7 @@
 	//Too much nitrogen!
 	if(safe_nitro_max)
 		if(N2_pp > safe_nitro_max)
-			var/ratio = (breath_gases[/datum/gas/nitrogen][MOLES]/safe_nitro_max) * 10
+			var/ratio = (N2_moles/safe_nitro_max) * 10
 			breather.apply_damage_type(clamp(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type)
 			breather.throw_alert(ALERT_TOO_MUCH_NITRO, /atom/movable/screen/alert/too_much_nitro)
 		else
@@ -174,18 +175,18 @@
 	//Too little nitrogen!
 	if(safe_nitro_min)
 		if(N2_pp < safe_nitro_min)
-			gas_breathed = handle_too_little_breath(breather, N2_pp, safe_nitro_min, breath_gases[/datum/gas/nitrogen][MOLES])
+			gas_breathed = handle_too_little_breath(breather, N2_pp, safe_nitro_min, N2_moles)
 			breather.throw_alert(ALERT_NOT_ENOUGH_NITRO, /atom/movable/screen/alert/not_enough_nitro)
 		else
 			breather.failed_last_breath = FALSE
 			if(breather.health >= breather.crit_threshold)
 				breather.adjustOxyLoss(-5)
-			gas_breathed = breath_gases[/datum/gas/nitrogen][MOLES]
+			gas_breathed = N2_moles
 			breather.clear_alert(ALERT_NOT_ENOUGH_NITRO)
 
 	//Exhale
-	breath_gases[/datum/gas/nitrogen][MOLES] -= gas_breathed
-	breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
+	breath.adjust_gas(GAS_NITROGEN, -gas_breathed)
+	breath.adjust_gas(GAS_CO2, gas_breathed)
 	gas_breathed = 0
 
 	//-- CO2 --//
@@ -211,18 +212,18 @@
 	//Too little CO2!
 	if(safe_co2_min)
 		if(CO2_pp < safe_co2_min)
-			gas_breathed = handle_too_little_breath(breather, CO2_pp, safe_co2_min, breath_gases[/datum/gas/carbon_dioxide][MOLES])
+			gas_breathed = handle_too_little_breath(breather, CO2_pp, safe_co2_min, CO2_moles)
 			breather.throw_alert(ALERT_NOT_ENOUGH_CO2, /atom/movable/screen/alert/not_enough_co2)
 		else
 			breather.failed_last_breath = FALSE
 			if(breather.health >= breather.crit_threshold)
 				breather.adjustOxyLoss(-5)
-			gas_breathed = breath_gases[/datum/gas/carbon_dioxide][MOLES]
+			gas_breathed = CO2_moles
 			breather.clear_alert(ALERT_NOT_ENOUGH_CO2)
 
 	//Exhale
-	breath_gases[/datum/gas/carbon_dioxide][MOLES] -= gas_breathed
-	breath_gases[/datum/gas/oxygen][MOLES] += gas_breathed
+	breath.adjust_gas(GAS_CO2, -gas_breathed)
+	breath.adjust_gas(GAS_OXYGEN, gas_breathed)
 	gas_breathed = 0
 
 
@@ -231,7 +232,7 @@
 	//Too much plasma!
 	if(safe_plasma_max)
 		if(Plasma_pp > safe_plasma_max)
-			var/ratio = (breath_gases[/datum/gas/plasma][MOLES]/safe_plasma_max) * 10
+			var/ratio = (plasma_moles/safe_plasma_max) * 10
 			breather.apply_damage_type(clamp(ratio, plas_breath_dam_min, plas_breath_dam_max), plas_damage_type)
 			breather.throw_alert(ALERT_TOO_MUCH_PLASMA, /atom/movable/screen/alert/too_much_plas)
 		else
@@ -241,18 +242,18 @@
 	//Too little plasma!
 	if(safe_plasma_min)
 		if(Plasma_pp < safe_plasma_min)
-			gas_breathed = handle_too_little_breath(breather, Plasma_pp, safe_plasma_min, breath_gases[/datum/gas/plasma][MOLES])
+			gas_breathed = handle_too_little_breath(breather, Plasma_pp, safe_plasma_min, plasma_moles)
 			breather.throw_alert(ALERT_NOT_ENOUGH_PLASMA, /atom/movable/screen/alert/not_enough_plas)
 		else
 			breather.failed_last_breath = FALSE
 			if(breather.health >= breather.crit_threshold)
 				breather.adjustOxyLoss(-5)
-			gas_breathed = breath_gases[/datum/gas/plasma][MOLES]
+			gas_breathed = plasma_moles
 			breather.clear_alert(ALERT_NOT_ENOUGH_PLASMA)
 
 	//Exhale
-	breath_gases[/datum/gas/plasma][MOLES] -= gas_breathed
-	breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
+	breath.adjust_gas(GAS_PLASMA, -gas_breathed)
+	breath.adjust_gas(GAS_CO2, gas_breathed)
 	gas_breathed = 0
 
 
@@ -261,8 +262,8 @@
 	if(breath) // If there's some other shit in the air lets deal with it here.
 
 	// N2O
-
-		var/SA_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrous_oxide][MOLES])
+		var/n2o_moles = breath.get_gas(GAS_N2O)
+		var/SA_pp = breath.get_breath_partial_pressure(n2o_moles)
 		if(SA_pp > SA_para_min) // Enough to make us stunned for a bit
 			breather.throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o)
 			breather.Unconscious(60) // 60 gives them one second to wake up and run away a bit!
@@ -277,7 +278,7 @@
 			n2o_euphoria = EUPHORIA_INACTIVE
 			breather.clear_alert(ALERT_TOO_MUCH_N2O)
 
-
+	/*
 	// BZ
 
 		var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES])
@@ -428,6 +429,7 @@
 		// Clear out moods when no miasma at all
 		else
 			SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
+		*/
 
 		if (n2o_euphoria == EUPHORIA_ACTIVE || healium_euphoria == EUPHORIA_ACTIVE)
 			SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "chemical_euphoria", /datum/mood_event/chemical_euphoria)
@@ -436,12 +438,12 @@
 		// Activate mood on first flag, remove on second, do nothing on third.
 
 		handle_breath_temperature(breath, breather)
-		breath.garbage_collect()
+		breath.update_values()
 
 	return TRUE
 
 ///override this for breath handling unique to lung subtypes, breath_gas is the list of gas in the breath while gas breathed is just what is being added or removed from that list, just as they are when this is called in check_breath()
-/obj/item/organ/lungs/proc/handle_gas_override(mob/living/carbon/human/breather, list/breath_gas, gas_breathed)
+/obj/item/organ/lungs/proc/handle_gas_override(mob/living/carbon/human/breather, datum/gas_mixture/breath, gas_breathed)
 	return
 
 /obj/item/organ/lungs/proc/handle_too_little_breath(mob/living/carbon/human/suffocator = null, breath_pp = 0, safe_breath_min = 0, true_pp = 0)
@@ -524,8 +526,8 @@
 
 /obj/item/organ/lungs/slime/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather_slime)
 	. = ..()
-	if (breath?.gases[/datum/gas/plasma])
-		var/plasma_pp = breath.get_breath_partial_pressure(breath.gases[/datum/gas/plasma][MOLES])
+	if (breath.get_gas(GAS_PLASMA))
+		var/plasma_pp = breath.get_breath_partial_pressure(breath.get_gas(GAS_PLASMA))
 		owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
 
 /obj/item/organ/lungs/cybernetic
@@ -578,7 +580,7 @@
 // Normal oxygen is 21 kPa partial pressure, but SS13 humans can tolerate down
 // to 16 kPa. So it follows that ashwalkers, as humanoids, follow the same rules.
 #define GAS_TOLERANCE 5
-
+/*
 /obj/item/organ/lungs/ashwalker/Initialize(mapload)
 	. = ..()
 
@@ -590,23 +592,14 @@
 	// Take a "breath" of the air
 	var/datum/gas_mixture/breath = mix.remove(mix.total_moles() * BREATH_PERCENTAGE)
 
-	var/list/breath_gases = breath.gases
-
-	breath.assert_gases(
-		/datum/gas/oxygen,
-		/datum/gas/plasma,
-		/datum/gas/carbon_dioxide,
-		/datum/gas/nitrogen,
-		/datum/gas/bz,
-		/datum/gas/miasma,
-	)
-
 	var/oxygen_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])
 	var/nitrogen_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrogen][MOLES])
 	var/plasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/plasma][MOLES])
 	var/carbon_dioxide_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])
+	/*
 	var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES])
 	var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma][MOLES])
+	*/
 
 	safe_oxygen_min = max(0, oxygen_pp - GAS_TOLERANCE)
 	safe_nitro_min = max(0, nitrogen_pp - GAS_TOLERANCE)
@@ -621,13 +614,16 @@
 	safe_co2_max = carbon_dioxide_pp + GAS_TOLERANCE * 2
 
 	// The lung tolerance against BZ is also increased the amount of BZ in the base air
+	/*
 	BZ_trip_balls_min += bz_pp
 	BZ_brain_damage_min += bz_pp
+	*/
 
 	// Lungs adapted to a high miasma atmosphere do not process it, and breathe it back out
-	if(miasma_pp)
-		suffers_miasma = FALSE
 
+	//if(miasma_pp)
+		//suffers_miasma = FALSE
+*/
 #undef GAS_TOLERANCE
 
 /obj/item/organ/lungs/ethereal
@@ -638,10 +634,11 @@
 	heat_level_2_threshold = 473
 	heat_level_3_threshold = 1073
 
-
+/*
 /obj/item/organ/lungs/ethereal/handle_gas_override(mob/living/carbon/human/breather, list/breath_gases, gas_breathed)
 	// H2O electrolysis
 	gas_breathed = breath_gases[/datum/gas/water_vapor][MOLES]
 	breath_gases[/datum/gas/oxygen][MOLES] += gas_breathed
 	breath_gases[/datum/gas/hydrogen][MOLES] += gas_breathed*2
 	breath_gases[/datum/gas/water_vapor][MOLES] -= gas_breathed
+*/
diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index d564b291a60..4a88ca40646 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -26,7 +26,7 @@
 	//Prep the floor
 	to_fill.initial_gas_mix = OPENTURF_DEFAULT_ATMOS
 	to_fill.air = new
-	to_fill.air.copy_from_turf(to_fill)
+	to_fill.air.copy_from(to_fill.return_air())
 
 	lab_rat.breathe()
 
@@ -66,7 +66,7 @@
 	//Prep the floor
 	to_fill.initial_gas_mix = LAVALAND_DEFAULT_ATMOS
 	to_fill.air = new
-	to_fill.air.copy_from_turf(to_fill)
+	to_fill.air.copy_from(to_fill.return_air())
 
 	lab_rat.breathe()
 
diff --git a/code/modules/unit_tests/gas_transfer.dm b/code/modules/unit_tests/gas_transfer.dm
index 097a9a5efdb..9a7b4a78d62 100644
--- a/code/modules/unit_tests/gas_transfer.dm
+++ b/code/modules/unit_tests/gas_transfer.dm
@@ -2,6 +2,7 @@
 /datum/unit_test/atmospheric_gas_transfer
 
 /datum/unit_test/atmospheric_gas_transfer/Run()
+	/*
 	for (var/tempNmoles in list(1e4, 1e6, 1e8, 1e10, 1e12))
 		var/datum/gas_mixture/first_mix = allocate(/datum/gas_mixture)
 		var/datum/gas_mixture/second_mix = allocate(/datum/gas_mixture)
@@ -27,3 +28,4 @@
 		var/margin = abs(second_mix.return_pressure() - (initial_pressure+additional_pressure))
 
 		TEST_ASSERT(margin<=error_margin, "Gas pressure pumping test failed for [tempNmoles]. Expected pressure = [initial_pressure+additional_pressure] +/- [error_margin]. Got [second_mix.return_pressure()].")
+	*/
diff --git a/tgstation.dme b/tgstation.dme
index e3a64ff6816..e28066aea52 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -355,7 +355,7 @@
 #include "code\__HELPERS\verbs.dm"
 #include "code\__HELPERS\view.dm"
 #include "code\__HELPERS\weakref.dm"
-//#include "code\__HELPERS\zas.dm"
+#include "code\__HELPERS\zas.dm"
 #include "code\__HELPERS\sorts\__main.dm"
 #include "code\__HELPERS\sorts\InsertSort.dm"
 #include "code\__HELPERS\sorts\MergeSort.dm"
@@ -3574,7 +3574,7 @@
 #include "code\modules\modular_computers\file_system\programs\secureye.dm"
 #include "code\modules\modular_computers\file_system\programs\signaler.dm"
 #include "code\modules\modular_computers\file_system\programs\skill_tracker.dm"
-#include "code\modules\modular_computers\file_system\programs\sm_monitor.dm"
+//#include "code\modules\modular_computers\file_system\programs\sm_monitor.dm"
 #include "code\modules\modular_computers\file_system\programs\techweb.dm"
 #include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
 #include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm"
@@ -3693,15 +3693,19 @@
 #include "code\modules\power\singularity\field_generator.dm"
 #include "code\modules\power\singularity\narsie.dm"
 #include "code\modules\power\singularity\singularity.dm"
+/*
 #include "code\modules\power\supermatter\supermatter.dm"
 #include "code\modules\power\supermatter\supermatter_hit_procs.dm"
 #include "code\modules\power\supermatter\supermatter_process.dm"
 #include "code\modules\power\supermatter\supermatter_radiation.dm"
+*/
 #include "code\modules\power\tesla\coil.dm"
 #include "code\modules\power\tesla\energy_ball.dm"
+/*
 #include "code\modules\power\turbine\turbine.dm"
 #include "code\modules\power\turbine\turbine_computer.dm"
 #include "code\modules\power\turbine\turbine_parts.dm"
+*/
 #include "code\modules\procedural_mapping\mapGenerator.dm"
 #include "code\modules\procedural_mapping\mapGeneratorModule.dm"
 #include "code\modules\procedural_mapping\mapGeneratorObj.dm"

From 05c5e8ac1edb79ddbc04bb098f4d4daf4607841e Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Mon, 18 Apr 2022 02:41:27 -0400
Subject: [PATCH 010/200] ZAS HELL

---
 _maps/atmostest.json                    |    6 +
 _maps/map_files/debug/atmos_mintest.dmm | 1193 +++++++++++++++++++++++
 2 files changed, 1199 insertions(+)
 create mode 100644 _maps/atmostest.json
 create mode 100644 _maps/map_files/debug/atmos_mintest.dmm

diff --git a/_maps/atmostest.json b/_maps/atmostest.json
new file mode 100644
index 00000000000..7fdd314ba1e
--- /dev/null
+++ b/_maps/atmostest.json
@@ -0,0 +1,6 @@
+{
+	"version": 1,
+	"map_name": "ZAS HELL",
+	"map_path": "map_files/debug",
+	"map_file": "atmos_mintest.dmm",
+}
diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
new file mode 100644
index 00000000000..5628c573064
--- /dev/null
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -0,0 +1,1193 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/open/space/basic,
+/area/space)
+"b" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"c" = (
+/obj/effect/spawner/structure/window/plasma,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"d" = (
+/obj/machinery/door/poddoor{
+	id = "c1vent";
+	name = "c1vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"e" = (
+/obj/machinery/door/poddoor{
+	id = "c2vent";
+	name = "c2vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"f" = (
+/obj/machinery/door/poddoor{
+	id = "c3vent";
+	name = "c3vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"g" = (
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"h" = (
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"i" = (
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"j" = (
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"k" = (
+/obj/item/card/id/advanced/debug,
+/obj/structure/rack,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"l" = (
+/obj/machinery/power/rtg/debug,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"m" = (
+/obj/machinery/door/poddoor{
+	id = "c1toc2";
+	name = "c1toc2"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"n" = (
+/obj/machinery/door/poddoor{
+	id = "c2toc3";
+	name = "c2toc3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"o" = (
+/obj/effect/landmark/latejoin,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"p" = (
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"q" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"r" = (
+/obj/machinery/atmospherics/miner/plasma,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"s" = (
+/obj/machinery/atmospherics/miner/n2o,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"t" = (
+/obj/effect/landmark/observer_start,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"u" = (
+/obj/effect/turf_decal/trimline,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"v" = (
+/obj/effect/turf_decal/trimline,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"w" = (
+/obj/effect/turf_decal/trimline,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"x" = (
+/obj/effect/turf_decal/bot_red,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"y" = (
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"z" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"A" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"B" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"C" = (
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/structure/rack,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"D" = (
+/obj/machinery/button/door{
+	id = "c1toc2";
+	name = "c1toc2"
+	},
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"E" = (
+/obj/machinery/button/door{
+	id = "c2toc3";
+	name = "c2toc3"
+	},
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"F" = (
+/obj/machinery/button/door{
+	id = "c1vent";
+	name = "c1vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"G" = (
+/obj/machinery/button/door{
+	id = "c2vent";
+	name = "c2vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"H" = (
+/obj/machinery/button/door{
+	id = "c3vent";
+	name = "c3vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"I" = (
+/obj/structure/cable,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"J" = (
+/obj/item/pipe_dispenser,
+/obj/structure/table/reinforced,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"K" = (
+/obj/machinery/portable_atmospherics/canister/plasma,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"L" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"M" = (
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"N" = (
+/obj/machinery/door/airlock/public,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"O" = (
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"P" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"Q" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"R" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"S" = (
+/obj/machinery/door/airlock/external/glass,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"T" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/public,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"U" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"V" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"W" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+b
+b
+c
+c
+c
+b
+b
+b
+c
+b
+b
+b
+c
+c
+c
+c
+c
+c
+c
+c
+b
+b
+b
+c
+c
+c
+b
+b
+a
+"}
+(3,1,1) = {"
+a
+b
+g
+g
+g
+g
+g
+b
+g
+g
+g
+b
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+g
+g
+g
+g
+g
+b
+a
+"}
+(4,1,1) = {"
+a
+c
+g
+l
+p
+l
+g
+c
+g
+I
+g
+c
+g
+q
+g
+g
+q
+g
+g
+g
+q
+g
+c
+g
+g
+q
+g
+g
+c
+a
+"}
+(5,1,1) = {"
+a
+c
+g
+g
+q
+p
+p
+T
+p
+p
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+N
+g
+g
+P
+g
+g
+c
+a
+"}
+(6,1,1) = {"
+a
+c
+g
+l
+p
+l
+g
+c
+g
+p
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+c
+g
+g
+g
+g
+g
+c
+a
+"}
+(7,1,1) = {"
+a
+b
+g
+g
+g
+p
+y
+b
+g
+p
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+g
+g
+g
+g
+g
+b
+a
+"}
+(8,1,1) = {"
+a
+b
+b
+c
+c
+c
+b
+b
+g
+p
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+b
+c
+N
+c
+b
+b
+a
+"}
+(9,1,1) = {"
+a
+b
+h
+h
+h
+h
+h
+b
+g
+p
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+g
+g
+g
+g
+g
+b
+a
+"}
+(10,1,1) = {"
+a
+d
+h
+h
+h
+h
+h
+c
+g
+p
+g
+c
+g
+q
+g
+g
+q
+g
+g
+g
+q
+g
+c
+g
+g
+g
+g
+g
+c
+a
+"}
+(11,1,1) = {"
+a
+d
+h
+U
+r
+u
+z
+c
+F
+I
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+c
+g
+g
+g
+g
+g
+c
+a
+"}
+(12,1,1) = {"
+a
+d
+h
+h
+h
+h
+h
+c
+g
+p
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+N
+g
+g
+P
+g
+g
+c
+a
+"}
+(13,1,1) = {"
+a
+b
+h
+h
+h
+h
+h
+b
+g
+p
+g
+c
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+c
+g
+g
+q
+g
+g
+c
+a
+"}
+(14,1,1) = {"
+a
+b
+b
+m
+m
+m
+b
+D
+g
+p
+g
+b
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+c
+g
+g
+g
+g
+g
+c
+a
+"}
+(15,1,1) = {"
+a
+b
+i
+i
+i
+i
+i
+b
+g
+p
+g
+N
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+g
+g
+g
+g
+g
+b
+a
+"}
+(16,1,1) = {"
+a
+e
+i
+i
+i
+v
+i
+c
+g
+p
+g
+N
+g
+q
+g
+g
+q
+g
+g
+g
+q
+g
+b
+b
+c
+N
+c
+b
+b
+a
+"}
+(17,1,1) = {"
+a
+e
+i
+V
+i
+i
+A
+c
+G
+I
+g
+N
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+g
+g
+g
+g
+g
+b
+a
+"}
+(18,1,1) = {"
+a
+e
+i
+i
+i
+v
+i
+c
+g
+p
+g
+b
+J
+g
+g
+g
+g
+g
+g
+g
+g
+g
+c
+g
+g
+g
+g
+g
+c
+a
+"}
+(19,1,1) = {"
+a
+b
+i
+i
+i
+i
+i
+b
+g
+p
+g
+c
+K
+g
+g
+g
+g
+g
+g
+g
+g
+g
+N
+g
+g
+q
+g
+g
+c
+a
+"}
+(20,1,1) = {"
+a
+b
+b
+n
+n
+n
+b
+E
+g
+p
+g
+c
+K
+g
+g
+g
+g
+g
+g
+g
+g
+g
+c
+g
+g
+P
+g
+g
+c
+a
+"}
+(21,1,1) = {"
+a
+b
+j
+j
+j
+j
+j
+b
+g
+p
+g
+c
+K
+q
+g
+g
+q
+g
+g
+g
+q
+g
+c
+g
+g
+g
+g
+g
+c
+a
+"}
+(22,1,1) = {"
+a
+f
+j
+j
+j
+w
+j
+c
+g
+p
+g
+c
+L
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+g
+g
+g
+g
+g
+b
+a
+"}
+(23,1,1) = {"
+a
+f
+j
+W
+s
+w
+B
+c
+H
+I
+g
+c
+L
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+b
+c
+N
+c
+b
+b
+a
+"}
+(24,1,1) = {"
+a
+f
+j
+j
+j
+w
+j
+c
+g
+p
+g
+c
+L
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+O
+O
+O
+O
+O
+b
+a
+"}
+(25,1,1) = {"
+a
+b
+j
+j
+j
+j
+j
+b
+g
+p
+g
+c
+M
+g
+g
+g
+g
+g
+g
+g
+g
+g
+c
+O
+O
+O
+O
+O
+c
+a
+"}
+(26,1,1) = {"
+a
+b
+b
+c
+c
+c
+b
+b
+g
+p
+g
+c
+M
+g
+g
+g
+g
+g
+g
+g
+g
+g
+N
+O
+O
+Q
+O
+O
+S
+a
+"}
+(27,1,1) = {"
+a
+c
+k
+o
+t
+x
+C
+c
+g
+q
+g
+c
+M
+q
+g
+g
+q
+g
+g
+g
+q
+g
+c
+O
+O
+R
+O
+O
+c
+a
+"}
+(28,1,1) = {"
+a
+b
+g
+g
+q
+g
+g
+N
+g
+g
+g
+b
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+b
+O
+O
+O
+O
+O
+b
+a
+"}
+(29,1,1) = {"
+a
+b
+b
+c
+c
+c
+b
+b
+b
+c
+b
+b
+b
+c
+c
+c
+c
+c
+c
+c
+c
+b
+b
+b
+c
+S
+c
+b
+b
+a
+"}
+(30,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}

From a1444e745e2f882d04d96b39c0bbb4bda2100966 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 18 Apr 2022 04:02:35 -0400
Subject: [PATCH 011/200] it compiles

---
 code/__HELPERS/atmospherics.dm                |   4 +-
 .../subsystem/processing/processing.dm        |   2 +-
 code/controllers/subsystem/zas.dm             |   6 +-
 code/datums/atmosphere/planetary.dm           |  34 +++++-----
 code/datums/components/gas_leaker.dm          |   2 +-
 code/game/machinery/doors/door.dm             |   2 +-
 code/game/machinery/doors/firedoor.dm         |   2 +-
 code/game/machinery/doors/windowdoor.dm       |   2 +-
 .../effects/effect_system/effects_smoke.dm    |   2 +-
 code/game/objects/effects/glowshroom.dm       |   4 +-
 .../circuitboards/computer_circuitboards.dm   |   2 +-
 .../circuitboards/machine_circuitboards.dm    |  10 +--
 code/game/objects/items/powerfist.dm          |   4 +-
 code/game/objects/items/tanks/jetpack.dm      |   4 +-
 code/game/objects/structures/aliens.dm        |   2 +-
 .../objects/structures/industrial_lift.dm     |   2 +-
 .../structures/transit_tubes/station.dm       |   5 +-
 .../objects/structures/windoor_assembly.dm    |   2 +-
 code/game/objects/structures/window.dm        |   4 +-
 code/game/turfs/open/space/space.dm           |   3 +-
 .../antagonists/blob/structures/_blob.dm      |   2 +-
 code/modules/atmospherics/ZAS/Airflow.dm      |   7 +-
 code/modules/atmospherics/ZAS/Atom.dm         |   6 +-
 code/modules/atmospherics/ZAS/Debug.dm        |  16 ++---
 code/modules/atmospherics/ZAS/Fire.dm         |   2 +-
 code/modules/atmospherics/ZAS/Plasma.dm       |   6 +-
 code/modules/atmospherics/ZAS/Turf.dm         |   7 +-
 code/modules/atmospherics/ZAS/XGM/gas_data.dm |   4 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm    |  10 +--
 code/modules/atmospherics/ZAS/ZAS_Settings.dm |   5 +-
 .../atmospherics/machinery/airalarm.dm        |  30 ++++-----
 .../atmospherics/machinery/components/tank.dm |  13 ++--
 .../atmospherics/machinery/other/miner.dm     |  40 +++++------
 .../machinery/portable/canister.dm            |  63 +++++++++---------
 .../machinery/portable/scrubber.dm            |  19 ++----
 code/modules/cargo/bounties/engineering.dm    |  12 ++--
 code/modules/cargo/exports/large_objects.dm   |   2 +-
 code/modules/cargo/packs.dm                   |   6 +-
 code/modules/clothing/masks/gas_filter.dm     |   3 +-
 .../experisci/experiment/experiments.dm       |  12 ++--
 code/modules/mining/equipment/survival_pod.dm |   2 +-
 .../mob/living/simple_animal/bot/bot.dm       |   2 +-
 code/modules/reagents/chem_splash.dm          |   2 +-
 code/modules/recycling/disposal/bin.dm        |   2 +-
 .../research/designs/machine_designs.dm       |  14 ++--
 code/modules/research/designs/misc_designs.dm |   2 +-
 .../modules/research/designs/power_designs.dm |   6 +-
 .../icons/effects/contamination.dmi           | Bin 0 -> 709 bytes
 .../icons/effects/tile_effects.dmi            | Bin 0 -> 1514 bytes
 .../master_files/icons/testing/Zone.dmi       | Bin 0 -> 955 bytes
 .../master_files/icons/testing/air_meter.dmi  | Bin 0 -> 463 bytes
 .../icons/testing/atmos_testing.dmi           | Bin 0 -> 390 bytes
 .../icons/testing/turf_analysis.dmi           | Bin 0 -> 1144 bytes
 53 files changed, 198 insertions(+), 195 deletions(-)
 create mode 100644 modular_pariah/master_files/icons/effects/contamination.dmi
 create mode 100644 modular_pariah/master_files/icons/effects/tile_effects.dmi
 create mode 100644 modular_pariah/master_files/icons/testing/Zone.dmi
 create mode 100644 modular_pariah/master_files/icons/testing/air_meter.dmi
 create mode 100644 modular_pariah/master_files/icons/testing/atmos_testing.dmi
 create mode 100644 modular_pariah/master_files/icons/testing/turf_analysis.dmi

diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index 8dc421e33d7..ca0c2fc006a 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -1,11 +1,11 @@
-/proc/molar_cmp_less_than(a,b,epsilon = MAXIMUM_ERROR_GAS_REMOVAL)
+/*/proc/molar_cmp_less_than(a,b,epsilon = MAXIMUM_ERROR_GAS_REMOVAL)
 	return (a < (b + epsilon))
 
 /proc/molar_cmp_greater_than(a,b,epsilon = MAXIMUM_ERROR_GAS_REMOVAL)
 	return ((a + epsilon) > b)
 
 /proc/molar_cmp_equals(a,b,epsilon = MAXIMUM_ERROR_GAS_REMOVAL)
-	return (((a + epsilon) > b) && ((a - epsilon) < b))
+	return (((a + epsilon) > b) && ((a - epsilon) < b))*/
 
 /** A simple rudimentary gasmix to information list converter. Can be used for UIs.
  * Args:
diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm
index 665f4915f42..8f7380198bd 100644
--- a/code/controllers/subsystem/processing/processing.dm
+++ b/code/controllers/subsystem/processing/processing.dm
@@ -9,7 +9,7 @@ SUBSYSTEM_DEF(processing)
 	var/stat_tag = "P" //Used for logging
 	var/list/processing = list()
 	var/list/currentrun = list()
-	var/const/process_proc = /datum/proc/process //Francinum is going to FUCK ME (Of course I will~)
+	var/process_proc = /datum/proc/process //Francinum is going to FUCK ME (Of course I will~)
 
 /datum/controller/subsystem/processing/stat_entry(msg)
 	msg = "[stat_tag]:[length(processing)]"
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index aeb1e6ba1a8..d593c053d63 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -70,7 +70,7 @@ SUBSYSTEM_DEF(zas)
 	//The variable setting controller
 	var/datum/zas_controller/settings
 	//A reference to the global var
-	var/datum/xgm_gas_data/gas_data = xgm_gas_data
+	var/datum/xgm_gas_data/gas_data
 
 	//Geometry lists
 	var/list/zones = list()
@@ -160,7 +160,7 @@ SUBSYSTEM_DEF(zas)
 
 	var/starttime = REALTIMEOFDAY
 	settings = new
-	gas_data = new
+	gas_data = xgm_gas_data
 
 	to_chat(world, span_boldannounce("Processing Geometry..."))
 
@@ -294,7 +294,7 @@ SUBSYSTEM_DEF(zas)
 			var/obj/effect/hotspot/F = curr_hotspot[curr_hotspot.len]
 			curr_hotspot.len--
 
-			F.Process()
+			F.process()
 
 			if (MC_TICK_CHECK)
 				return
diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm
index 83596399b71..da84dcf888c 100644
--- a/code/datums/atmosphere/planetary.dm
+++ b/code/datums/atmosphere/planetary.dm
@@ -3,19 +3,19 @@
 	id = LAVALAND_DEFAULT_ATMOS
 
 	base_gases = list(
-		/datum/gas/oxygen=5,
-		/datum/gas/nitrogen=10,
+		GAS_OXYGEN = 5,
+		GAS_NITROGEN = 10,
 	)
 	normal_gases = list(
-		/datum/gas/oxygen=10,
-		/datum/gas/nitrogen=10,
-		/datum/gas/carbon_dioxide=10,
+		GAS_OXYGEN = 10,
+		GAS_NITROGEN = 10,
+		GAS_CO2 = 10,
 	)
 	restricted_gases = list(
-		/datum/gas/plasma=0.1,
-		/datum/gas/bz=1.2,
-		/datum/gas/miasma=1.2,
-		/datum/gas/water_vapor=0.1,
+		GAS_PLASMA =0.1,
+		///datum/gas/bz=1.2,
+		///datum/gas/miasma=1.2,
+		///datum/gas/water_vapor=0.1,
 	)
 	restricted_chance = 30
 
@@ -29,18 +29,18 @@
 	id = ICEMOON_DEFAULT_ATMOS
 
 	base_gases = list(
-		/datum/gas/oxygen=5,
-		/datum/gas/nitrogen=10,
+		GAS_OXYGEN = 5,
+		GAS_NITROGEN = 10,
 	)
 	normal_gases = list(
-		/datum/gas/oxygen=10,
-		/datum/gas/nitrogen=10,
-		/datum/gas/carbon_dioxide=10,
+		GAS_OXYGEN = 10,
+		GAS_NITROGEN = 10,
+		GAS_CO2 = 10,
 	)
 	restricted_gases = list(
-		/datum/gas/plasma=0.1,
-		/datum/gas/water_vapor=0.1,
-		/datum/gas/miasma=1.2,
+		GAS_PLASMA=0.1,
+		///datum/gas/water_vapor=0.1,
+		///datum/gas/miasma=1.2,
 	)
 	restricted_chance = 20
 
diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm
index f18a8cdd0d8..eaf24de0001 100644
--- a/code/datums/components/gas_leaker.dm
+++ b/code/datums/components/gas_leaker.dm
@@ -77,7 +77,7 @@
 		return PROCESS_KILL
 	var/turf/location = get_turf(master)
 	var/datum/gas_mixture/open_air = location.return_air()
-	var/true_rate = (1 - (current_integrity / master.max_integrity)) * leak_rate
+	//var/true_rate = (1 - (current_integrity / master.max_integrity)) * leak_rate
 	for(var/datum/gas_mixture/mix as anything in airs)
 		mix.leak_to_enviroment(open_air)
 
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 8e9b2fc379f..0cbee448c4a 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -167,7 +167,7 @@
 		return
 
 /obj/machinery/door/Move()
-	var/turf/T = loc
+	//var/turf/T = loc
 	. = ..()
 	/*if(density) //Gotta be closed my friend
 		move_update_air(T)*/
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index f314b223636..8c2b1ab3bcb 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -659,7 +659,7 @@
 		leaving.Bump(src)
 		return COMPONENT_ATOM_BLOCK_EXIT
 
-/obj/machinery/door/firedoor/border_only/can_atmos_pass(turf/T, vertical = FALSE)
+/obj/machinery/door/firedoor/border_only/c_block(turf/T, vertical = FALSE)
 	if(get_dir(loc, T) == dir)
 		return !density
 	else
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index b989be0dbbf..89f43331e89 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -173,7 +173,7 @@
 
 	return TRUE
 
-/obj/machinery/door/window/can_atmos_pass(turf/T, vertical = FALSE)
+/obj/machinery/door/window/c_block(turf/T, vertical = FALSE)
 	if(get_dir(loc, T) == dir)
 		return !density
 	else
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index 5eb1ba1b59f..bc15a1782cb 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -77,7 +77,7 @@
 	if(!t_loc)
 		return
 	var/list/newsmokes = list()
-	for(var/turf/T in t_loc.get_adjacent_open_turfs())
+	for(var/turf/T in get_adjacent_open_turfs(t_loc))
 		var/obj/effect/particle_effect/smoke/foundsmoke = locate() in T //Don't spread smoke where there's already smoke!
 		if(foundsmoke)
 			continue
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 91d64c25c76..2c87da4834f 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -136,7 +136,7 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
 
 /obj/structure/glowshroom/proc/Spread()
 	var/turf/ownturf = get_turf(src)
-	var/list/turf/shares = ownturf.get_adjacent_open_turfs()
+	var/list/turf/shares = get_adjacent_open_turfs(ownturf)
 	if(!length(shares)) //If we are in a 1x1 room
 		return //Deal with it not now
 
@@ -147,7 +147,7 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
 	for(var/turf/open/floor/earth in oview(2,src))
 		if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs))
 			continue
-		if(!length(earth.get_adjacent_open_turfs()))
+		if(!length(get_adjacent_open_turfs(earth)))
 			continue
 		possible_locs += earth
 
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index dd22f011c53..39274306b89 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -222,7 +222,7 @@
 /obj/item/circuitboard/computer/turbine_computer
 	name = "Turbine Computer (Computer Board)"
 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/computer/turbine_computer
+	//build_path = /obj/machinery/computer/turbine_computer
 
 //Generic
 
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 2c46da75401..b1625a5e1ef 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -201,7 +201,7 @@
 /obj/item/circuitboard/machine/turbine_compressor
 	name = "Turbine - Inlet Compressor (Machine Board)"
 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/power/turbine/inlet_compressor/constructed
+	//build_path = /obj/machinery/power/turbine/inlet_compressor/constructed
 	req_components = list(
 		/obj/item/stack/cable_coil = 5,
 		/obj/item/stack/sheet/iron = 5)
@@ -209,7 +209,7 @@
 /obj/item/circuitboard/machine/turbine_rotor
 	name = "Turbine - Core Rotor (Machine Board)"
 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/power/turbine/core_rotor/constructed
+	//build_path = /obj/machinery/power/turbine/core_rotor/constructed
 	req_components = list(
 		/obj/item/stack/cable_coil = 5,
 		/obj/item/stack/sheet/iron = 5)
@@ -217,7 +217,7 @@
 /obj/item/circuitboard/machine/turbine_stator
 	name = "Turbine - Turbine Outlet (Machine Board)"
 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/power/turbine/turbine_outlet/constructed
+	//build_path = /obj/machinery/power/turbine/turbine_outlet/constructed
 	req_components = list(
 		/obj/item/stack/cable_coil = 5,
 		/obj/item/stack/sheet/iron = 5)
@@ -347,7 +347,7 @@
 /obj/item/circuitboard/machine/bluespace_sender
 	name = "Bluespace Sender (Machine Board)"
 	greyscale_colors = CIRCUIT_COLOR_ENGINEERING
-	build_path = /obj/machinery/atmospherics/components/unary/bluespace_sender
+	//build_path = /obj/machinery/atmospherics/components/unary/bluespace_sender
 	req_components = list(
 		/obj/item/stack/cable_coil = 10,
 		/obj/item/stack/sheet/glass = 10,
@@ -483,7 +483,7 @@
 /obj/item/circuitboard/machine/electrolyzer
 	name = "Electrolyzer (Machine Board)"
 	greyscale_colors = CIRCUIT_COLOR_GENERIC
-	build_path = /obj/machinery/electrolyzer
+	//build_path = /obj/machinery/electrolyzer
 	req_components = list(
 		/obj/item/stock_parts/manipulator = 2,
 		/obj/item/stock_parts/capacitor = 2,
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index e4bb53e9841..4cd66ae96e0 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -92,14 +92,14 @@
 		target.visible_message(span_danger("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!"), \
 			span_userdanger("[user]'s punches you!"))
 		return
-	if(!molar_cmp_equals(gasused.total_moles(), gasperfist * fisto_setting))
+	/*if(!molar_cmp_equals(gasused.total_moles(), gasperfist * fisto_setting))
 		to_chat(user, span_warning("\The [src]'s piston-ram lets out a weak hiss, it needs more gas!"))
 		playsound(loc, 'sound/weapons/punch4.ogg', 50, TRUE)
 		target.apply_damage((force / 2), BRUTE)
 		target.visible_message(span_danger("[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!"), \
 			span_userdanger("[user]'s punch strikes with force!"))
 		return
-
+	*/
 	target.apply_damage(force * fisto_setting, BRUTE, wound_bonus = CANT_WOUND)
 	target.visible_message(span_danger("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!"), \
 		span_userdanger("You cry out in pain as [user]'s punch flings you backwards!"))
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index 14fafa34062..40e1586635c 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -8,7 +8,7 @@
 	w_class = WEIGHT_CLASS_BULKY
 	distribute_pressure = ONE_ATMOSPHERE * O2STANDARD
 	actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
-	var/gas_type = /datum/gas/oxygen
+	var/gas_type = GAS_OXYGEN
 	var/on = FALSE
 	var/stabilizers = FALSE
 	var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not
@@ -209,4 +209,4 @@
 	icon_state = "jetpack-black"
 	inhand_icon_state = "jetpack-black"
 	distribute_pressure = 0
-	gas_type = /datum/gas/carbon_dioxide
+	gas_type = GAS_CO2
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index 07c969e0739..d9eaf40ce12 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -202,7 +202,7 @@
 		qdel(src)
 		return
 	//lets try to grow in a direction
-	for(var/turf/check_turf in src_turf.get_adjacent_open_turfs())
+	for(var/turf/check_turf in get_adjacent_open_turfs(src_turf))
 		//we cannot grow on blacklisted turfs
 		if(is_type_in_list(check_turf, blacklisted_turfs))
 			continue
diff --git a/code/game/objects/structures/industrial_lift.dm b/code/game/objects/structures/industrial_lift.dm
index 9d8d3c14539..3a0326f56aa 100644
--- a/code/game/objects/structures/industrial_lift.dm
+++ b/code/game/objects/structures/industrial_lift.dm
@@ -8,7 +8,7 @@
 	var/list/lift_platforms
 	/// Typepath list of what to ignore smashing through, controls all lifts
 	var/list/ignored_smashthroughs = list(
-		/obj/machinery/power/supermatter_crystal,
+		//obj/machinery/power/supermatter_crystal,
 		/obj/structure/holosign
 	)
 
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index 64eaf8362c0..1072a24a227 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -169,8 +169,9 @@
 	if(QDELETED(pod))
 		return
 	var/datum/gas_mixture/floor_mixture = loc.return_air()
-	if(pod.air_contents.equalize(floor_mixture)) //equalize the pod's mix with the tile it's on
-		//air_update_turf(FALSE, FALSE)
+	/*if(pod.air_contents.equalize(floor_mixture)) //equalize the pod's mix with the tile it's on
+		air_update_turf(FALSE, FALSE)
+	*/
 
 /obj/structure/transit_tube/station/init_tube_dirs()
 	switch(dir)
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 7354b182b93..9cb53c83a5f 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -69,7 +69,7 @@
 	if(istype(mover, /obj/structure/windoor_assembly) || istype(mover, /obj/machinery/door/window))
 		return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
 
-/obj/structure/windoor_assembly/can_atmos_pass(turf/T, vertical = FALSE)
+/obj/structure/windoor_assembly/c_block(turf/T, vertical = FALSE)
 	if(get_dir(loc, T) == dir)
 		return !density
 	else
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 3fa1b100076..b10ec13e00a 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -329,13 +329,13 @@
 	return ..()
 
 /obj/structure/window/Move()
-	var/turf/T = loc
+	//var/turf/T = loc
 	. = ..()
 	/*
 	if(anchored)
 		move_update_air(T)*/
 
-/obj/structure/window/can_atmos_pass(turf/T, vertical = FALSE)
+/obj/structure/window/c_block(turf/T, vertical = FALSE)
 	if(!anchored || !density)
 		return TRUE
 	return !(fulltile || dir == get_dir(loc, T))
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index 2c044d922b3..86d4c46115d 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -84,9 +84,10 @@
 		var/turf/T = locate(destination_x, destination_y, destination_z)
 		user.forceMove(T)
 
+/*
 /turf/open/space/Initalize_Atmos(times_fired)
 	return
-
+*/
 /turf/open/space/TakeTemperature(temp)
 
 /turf/open/space/RemoveLattice()
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 7734c3c363d..7e7c9947c04 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -98,7 +98,7 @@
 /obj/structure/blob/block_superconductivity()
 	return atmosblock
 
-/obj/structure/blob/can_atmos_pass(turf/T, vertical = FALSE)
+/obj/structure/blob/c_block(turf/T, vertical = FALSE)
 	return !atmosblock
 
 /obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind.
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 06ea7684d26..a085b95e0ef 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -34,6 +34,9 @@ Contains helper procs for airflow, handled in /connection_group.
 		return 0
 	..()
 
+/atom/movable/proc/experience_pressure_difference()
+	return
+
 /mob/proc/slip_chance()
 	return
 
@@ -43,8 +46,8 @@ Contains helper procs for airflow, handled in /connection_group.
 	if(buckled)
 		return FALSE
 	if(shoes)
-		var/obj/item/clothing/shoes = shoes
-		if(shoes.clothing_flags & NOSLIP|NOSLIP_ICE)
+		var/obj/item/clothing/myshoes = shoes
+		if(myshoes.clothing_flags & NOSLIP|NOSLIP_ICE)
 			return FALSE
 
 	if(m_intent == MOVE_INTENT_RUN) //No running in the halls!
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index 56cb4d0c0a4..8beaf560c01 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -1,4 +1,4 @@
-/turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0)
+/*/turf/CanPass(atom/movable/mover, , height=1.5,air_group=0)
 	if(target.blocks_air||blocks_air)
 		return 0
 
@@ -11,6 +11,7 @@
 				return 0
 
 	return ..()
+*/
 
 //Convenience function for atoms to update turfs they occupy
 /atom/movable/proc/update_nearby_tiles(need_rebuild)
@@ -52,3 +53,6 @@
 /atom
 	var/simulated = TRUE
 	var/can_atmos_pass = ATMOS_PASS_YES
+
+/atom/proc/c_block(turf/target_turf, vertical = FALSE)
+	return
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index 0022e12c3ed..6fc387fc79e 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -1,11 +1,11 @@
-var/image/assigned = image('icons/Testing/Zone.dmi', icon_state = "assigned")
-var/image/created = image('icons/Testing/Zone.dmi', icon_state = "created")
-var/image/merged = image('icons/Testing/Zone.dmi', icon_state = "merged")
-var/image/invalid_zone = image('icons/Testing/Zone.dmi', icon_state = "invalid")
-var/image/air_blocked = image('icons/Testing/Zone.dmi', icon_state = "block")
-var/image/zone_blocked = image('icons/Testing/Zone.dmi', icon_state = "zoneblock")
-var/image/blocked = image('icons/Testing/Zone.dmi', icon_state = "fullblock")
-var/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark")
+var/image/assigned = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "assigned")
+var/image/created = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "created")
+var/image/merged = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "merged")
+var/image/invalid_zone = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "invalid")
+var/image/air_blocked = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "block")
+var/image/zone_blocked = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "zoneblock")
+var/image/blocked = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "fullblock")
+var/image/mark = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "mark")
 
 /connection_edge/var/dbg_out = 0
 
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 33968da3bed..8b138ef620a 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -129,7 +129,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	var/firelevel = 1 //Calculated by gas_mixture.calculate_firelevel()
 
-/obj/effect/hotspot/Process()
+/obj/effect/hotspot/process()
 	. = 1
 
 	//var/turf/simulated/my_tile = loc ZASTURF
diff --git a/code/modules/atmospherics/ZAS/Plasma.dm b/code/modules/atmospherics/ZAS/Plasma.dm
index c8eab424a31..64f28ec787d 100644
--- a/code/modules/atmospherics/ZAS/Plasma.dm
+++ b/code/modules/atmospherics/ZAS/Plasma.dm
@@ -1,4 +1,4 @@
-GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contamination.dmi'))
+GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_files/icons/effects/contamination.dmi'))
 
 /datum/pl_control
 	var/plasma_dmg = 3
@@ -56,7 +56,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat
 		add_overlay(GLOB.contamination_overlay)
 
 /obj/item/decontaminate()
-	flags_2 ~= CONTAMINATED_2
+	flags_2 &= ~CONTAMINATED_2
 	cut_overlay(GLOB.contamination_overlay)
 
 
@@ -166,7 +166,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat
 /turf/Entered(obj/item/I)
 	. = ..()
 	//Items that are in plasma, but not on a mob, can still be contaminated.
-	if(istype(I) && SSzas && SSzas.settings.plc.cloth_contamination && I.can_contaminate())
+	if(istype(I) && SSzas && SSzas.settings?.plc.cloth_contamination && I.can_contaminate())
 		var/datum/gas_mixture/env = return_air(1)
 		if(!env)
 			return
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 2c223d56dba..bfe223bb8f3 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -252,6 +252,8 @@
 
 /*/turf/proc/assume_gas(gasid, moles, temp = 0)
 	return 0*/
+/atom/movable/proc/block_superconductivity()
+	return
 
 /turf/return_air()
 	RETURN_TYPE(/datum/gas_mixture)
@@ -270,7 +272,7 @@
 	return GM.remove(amount)
 
 ///turf/simulated/assume_air(datum/gas_mixture/giver) ZASTURF
-/turf/proc/assume_air(datum/gas_mixture/giver)
+/turf/assume_air(datum/gas_mixture/giver)
 	var/datum/gas_mixture/my_air = return_air()
 	my_air.merge(giver)
 
@@ -286,7 +288,8 @@
 	return 1
 
 //turf/simulated/return_air() ZASTURF
-/turf/proc/return_air()
+/turf/return_air()
+	RETURN_TYPE(/datum/gas_mixture)
 	if(zone)
 		if(!zone.invalid)
 			SSzas.mark_zone_update(zone)
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index 64885c3c810..bd5a51db51f 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -1,4 +1,4 @@
-GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data)
+GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data) = new
 /datum/xgm_gas_data
 	//Simple list of all the gas IDs.
 	var/list/gases = list()
@@ -93,7 +93,7 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data)
 /obj/effect/gas_overlay
 	name = "gas"
 	desc = "You shouldn't be clicking this."
-	icon = 'icons/effects/tile_effects.dmi'
+	icon = 'modular_pariah/master_files/icons/effects/tile_effects.dmi'
 	icon_state = "generic"
 	layer = FIRE_LAYER
 	appearance_flags = RESET_COLOR|PIXEL_SCALE|TILE_BOUND
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index ec311df2592..1f38fa75453 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -30,7 +30,7 @@
 	name = "Methyl Bromide"
 	specific_heat = 42.59 // J/(mol*K)
 	molar_mass = 0.095	  // kg/mol
-	breathed_product = /datum/reagent/toxin/methyl_bromide
+	//breathed_product = /datum/reagent/toxin/methyl_bromide
 	symbol_html = "CH<sub>3</sub>Br"
 	symbol = "CH3Br"
 
@@ -128,7 +128,7 @@
 	specific_heat = 80	// J/(mol*K)
 	molar_mass = 0.004	// kg/mol
 	flags = XGM_GAS_FUSION_FUEL
-	breathed_product = /datum/reagent/helium
+	//breathed_product = /datum/reagent/helium
 	symbol_html = "He"
 	symbol = "He"
 
@@ -162,7 +162,7 @@
 	name = "Xenon"
 	specific_heat = 3	// J/(mol*K)
 	molar_mass = 0.054	// kg/mol
-	breathed_product = /datum/reagent/nitrous_oxide/xenon
+	//breathed_product = /datum/reagent/nitrous_oxide/xenon
 	symbol_html = "Xe"
 	symbol = "Xe"
 
@@ -195,7 +195,7 @@
 	specific_heat = 5	// J/(mol*K)
 	molar_mass = 0.017	// kg/mol
 	flags = XGM_GAS_CONTAMINANT
-	breathed_product = /datum/reagent/toxin/chlorine
+	//breathed_product = /datum/reagent/toxin/chlorine
 	symbol_html = "Cl"
 	symbol = "Cl"
 
@@ -236,6 +236,6 @@
 	name = "Carbon Monoxide"
 	specific_heat = 30	// J/(mol*K)
 	molar_mass = 0.028	// kg/mol
-	breathed_product = /datum/reagent/carbon_monoxide
+	//breathed_product = /datum/reagent/carbon_monoxide
 	symbol_html = "CO"
 	symbol = "CO"
diff --git a/code/modules/atmospherics/ZAS/ZAS_Settings.dm b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
index 1cf3d2fbee8..430d48f9d49 100644
--- a/code/modules/atmospherics/ZAS/ZAS_Settings.dm
+++ b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
@@ -1,5 +1,5 @@
 /datum/zas_controller
-	var/datum/pl_control/plc
+	var/datum/pl_control/plc = new
 
 	var/fire_consuption_rate = 0.25
 	var/fire_consuption_rate_NAME = "Fire - Air Consumption Ratio"
@@ -73,6 +73,3 @@
 	var/connection_temperature_delta = 10
 	var/connection_temperature_delta_NAME = "Connections - Temperature Difference"
 	var/connection_temperature_delta_DESC = "The smallest temperature difference which will cause heat to travel through doors."
-
-/datum/zas_controller/Initalize()
-	plc = new
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 39e7ecefdcb..657444209d1 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -824,13 +824,13 @@
 	TLV = list(
 		"pressure" = new/datum/tlv/no_checks,
 		"temperature" = new/datum/tlv/no_checks,
-		/datum/gas/oxygen = new/datum/tlv/no_checks,
-		/datum/gas/nitrogen = new/datum/tlv/no_checks,
-		/datum/gas/carbon_dioxide = new/datum/tlv/no_checks,
-		/datum/gas/miasma = new/datum/tlv/no_checks,
-		/datum/gas/plasma = new/datum/tlv/no_checks,
-		/datum/gas/nitrous_oxide = new/datum/tlv/no_checks,
-		/datum/gas/bz = new/datum/tlv/no_checks,
+		GAS_OXYGEN = new/datum/tlv/no_checks,
+		GAS_NITROGEN = new/datum/tlv/no_checks,
+		GAS_CO2 = new/datum/tlv/no_checks,
+		//datum/gas/miasma = new/datum/tlv/no_checks,
+		GAS_PLASMA = new/datum/tlv/no_checks,
+		GAS_N2O = new/datum/tlv/no_checks,
+		/*/datum/gas/bz = new/datum/tlv/no_checks,
 		/datum/gas/hypernoblium = new/datum/tlv/no_checks,
 		/datum/gas/water_vapor = new/datum/tlv/no_checks,
 		/datum/gas/tritium = new/datum/tlv/no_checks,
@@ -843,19 +843,19 @@
 		/datum/gas/zauker = new/datum/tlv/dangerous,
 		/datum/gas/helium = new/datum/tlv/dangerous,
 		/datum/gas/antinoblium = new/datum/tlv/dangerous,
-		/datum/gas/halon = new/datum/tlv/dangerous,
+		/datum/gas/halon = new/datum/tlv/dangerous,*/
 	)
 
 /obj/machinery/airalarm/kitchen_cold_room // Kitchen cold rooms start off at -14°C or 259.15K.
 	TLV = list(
 		"pressure" = new/datum/tlv(ONE_ATMOSPHERE * 0.8, ONE_ATMOSPHERE *  0.9, ONE_ATMOSPHERE * 1.1, ONE_ATMOSPHERE * 1.2), // kPa
 		"temperature" = new/datum/tlv(COLD_ROOM_TEMP-40, COLD_ROOM_TEMP-20, COLD_ROOM_TEMP+20, COLD_ROOM_TEMP+40),
-		/datum/gas/oxygen = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
-		/datum/gas/nitrogen = new/datum/tlv(-1, -1, 1000, 1000),
-		/datum/gas/carbon_dioxide = new/datum/tlv(-1, -1, 5, 10),
-		/datum/gas/miasma = new/datum/tlv/(-1, -1, 2, 5),
-		/datum/gas/plasma = new/datum/tlv/dangerous,
-		/datum/gas/nitrous_oxide = new/datum/tlv/dangerous,
+		GAS_OXYGEN = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
+		GAS_NITROGEN = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_CO2 = new/datum/tlv(-1, -1, 5, 10),
+		//datum/gas/miasma = new/datum/tlv/(-1, -1, 2, 5),
+		GAS_PLASMA = new/datum/tlv/dangerous,
+		/*/datum/gas/nitrous_oxide = new/datum/tlv/dangerous,
 		/datum/gas/bz = new/datum/tlv/dangerous,
 		/datum/gas/hypernoblium = new/datum/tlv(-1, -1, 1000, 1000), // Hyper-Noblium is inert and nontoxic
 		/datum/gas/water_vapor = new/datum/tlv/dangerous,
@@ -869,7 +869,7 @@
 		/datum/gas/zauker = new/datum/tlv/dangerous,
 		/datum/gas/helium = new/datum/tlv/dangerous,
 		/datum/gas/antinoblium = new/datum/tlv/dangerous,
-		/datum/gas/halon = new/datum/tlv/dangerous,
+		/datum/gas/halon = new/datum/tlv/dangerous,*/
 	)
 
 /obj/machinery/airalarm/unlocked
diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index 951134dc6d8..4d7981e0086 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -367,21 +367,21 @@
 	fill_to_pressure(GAS_NITROGEN, safety_margin = (N2STANDARD * 0.5))
 
 /obj/machinery/atmospherics/components/tank/carbon_dioxide
-	gas_type = /datum/gas/carbon_dioxide
+	gas_type = GAS_CO2
 
 /obj/machinery/atmospherics/components/tank/plasma
-	gas_type = /datum/gas/plasma
+	gas_type = GAS_PLASMA
 
 /obj/machinery/atmospherics/components/tank/nitrogen
-	gas_type = /datum/gas/nitrogen
+	gas_type = GAS_NITROGEN
 
 /obj/machinery/atmospherics/components/tank/oxygen
-	gas_type = /datum/gas/oxygen
+	gas_type = GAS_OXYGEN
 
 /obj/machinery/atmospherics/components/tank/nitrous
-	gas_type = /datum/gas/nitrous_oxide
+	gas_type = GAS_N2O
 
-/obj/machinery/atmospherics/components/tank/bz
+/*ics/components/tank/bz
 	gas_type = /datum/gas/bz
 
 /obj/machinery/atmospherics/components/tank/freon
@@ -425,6 +425,7 @@
 
 /obj/machinery/atmospherics/components/tank/antinoblium
 	gas_type = /datum/gas/antinoblium
+*/
 
 ///////////////////////////////////////////////////////////////////
 // Tank Frame Structure
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index f83b314f5df..0577b44b910 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -145,99 +145,99 @@
 /obj/machinery/atmospherics/miner/n2o
 	name = "\improper N2O Gas Miner"
 	overlay_color = "#FFCCCC"
-	spawn_id = /datum/gas/nitrous_oxide
+	//spawn_id = /datum/gas/nitrous_oxide
 
 /obj/machinery/atmospherics/miner/nitrogen
 	name = "\improper N2 Gas Miner"
 	overlay_color = "#CCFFCC"
-	spawn_id = /datum/gas/nitrogen
+	//spawn_id = /datum/gas/nitrogen
 
 /obj/machinery/atmospherics/miner/oxygen
 	name = "\improper O2 Gas Miner"
 	overlay_color = "#007FFF"
-	spawn_id = /datum/gas/oxygen
+	//spawn_id = /datum/gas/oxygen
 
 /obj/machinery/atmospherics/miner/plasma
 	name = "\improper Plasma Gas Miner"
 	overlay_color = "#FF0000"
-	spawn_id = /datum/gas/plasma
+	//spawn_id = /datum/gas/plasma
 
 /obj/machinery/atmospherics/miner/carbon_dioxide
 	name = "\improper CO2 Gas Miner"
 	overlay_color = "#CDCDCD"
-	spawn_id = /datum/gas/carbon_dioxide
+	//spawn_id = /datum/gas/carbon_dioxide
 
 /obj/machinery/atmospherics/miner/bz
 	name = "\improper BZ Gas Miner"
 	overlay_color = "#FAFF00"
-	spawn_id = /datum/gas/bz
+	//spawn_id = /datum/gas/bz
 
 /obj/machinery/atmospherics/miner/water_vapor
 	name = "\improper Water Vapor Gas Miner"
 	overlay_color = "#99928E"
-	spawn_id = /datum/gas/water_vapor
+	//spawn_id = /datum/gas/water_vapor
 
 /obj/machinery/atmospherics/miner/freon
 	name = "\improper Freon Gas Miner"
 	overlay_color = "#61edff"
-	spawn_id = /datum/gas/freon
+	//spawn_id = /datum/gas/freon
 
 /obj/machinery/atmospherics/miner/halon
 	name = "\improper Halon Gas Miner"
 	overlay_color = "#5f0085"
-	spawn_id = /datum/gas/halon
+	//spawn_id = /datum/gas/halon
 
 /obj/machinery/atmospherics/miner/healium
 	name = "\improper Healium Gas Miner"
 	overlay_color = "#da4646"
-	spawn_id = /datum/gas/healium
+	//spawn_id = /datum/gas/healium
 
 /obj/machinery/atmospherics/miner/hydrogen
 	name = "\improper Hydrogen Gas Miner"
 	overlay_color = "#ffffff"
-	spawn_id = /datum/gas/hydrogen
+	//spawn_id = /datum/gas/hydrogen
 
 /obj/machinery/atmospherics/miner/hypernoblium
 	name = "\improper Hypernoblium Gas Miner"
 	overlay_color = "#00f7ff"
-	spawn_id = /datum/gas/hypernoblium
+	//spawn_id = /datum/gas/hypernoblium
 
 /obj/machinery/atmospherics/miner/miasma
 	name = "\improper Miasma Gas Miner"
 	overlay_color = "#395806"
-	spawn_id = /datum/gas/miasma
+	//spawn_id = /datum/gas/miasma
 
 /obj/machinery/atmospherics/miner/nitrium
 	name = "\improper Nitrium Gas Miner"
 	overlay_color = "#752b00"
-	spawn_id = /datum/gas/nitrium
+	//spawn_id = /datum/gas/nitrium
 
 /obj/machinery/atmospherics/miner/pluoxium
 	name = "\improper Pluoxium Gas Miner"
 	overlay_color = "#4b54a3"
-	spawn_id = /datum/gas/pluoxium
+	//spawn_id = /datum/gas/pluoxium
 
 /obj/machinery/atmospherics/miner/proto_nitrate
 	name = "\improper Proto-Nitrate Gas Miner"
 	overlay_color = "#00571d"
-	spawn_id = /datum/gas/proto_nitrate
+	//spawn_id = /datum/gas/proto_nitrate
 
 /obj/machinery/atmospherics/miner/tritium
 	name = "\improper Tritium Gas Miner"
 	overlay_color = "#15ff00"
-	spawn_id = /datum/gas/tritium
+	//spawn_id = /datum/gas/tritium
 
 /obj/machinery/atmospherics/miner/zauker
 	name = "\improper Zauker Gas Miner"
 	overlay_color = "#022e00"
-	spawn_id = /datum/gas/zauker
+	//spawn_id = /datum/gas/zauker
 
 /obj/machinery/atmospherics/miner/helium
 	name = "\improper Helium Gas Miner"
 	overlay_color = "#022e00"
-	spawn_id = /datum/gas/helium
+	//spawn_id = /datum/gas/helium
 
 /obj/machinery/atmospherics/miner/antinoblium
 	name = "\improper Antinoblium Gas Miner"
 	overlay_color = "#022e00"
-	spawn_id = /datum/gas/antinoblium
+	//spawn_id = /datum/gas/antinoblium
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 961929d52ed..f8149762cf4 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -10,12 +10,12 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 
 /proc/init_gas_id_to_canister()
 	return sort_list(list(
-		"n2" = /obj/machinery/portable_atmospherics/canister/nitrogen,
-		"o2" = /obj/machinery/portable_atmospherics/canister/oxygen,
-		"co2" = /obj/machinery/portable_atmospherics/canister/carbon_dioxide,
-		"plasma" = /obj/machinery/portable_atmospherics/canister/plasma,
-		"n2o" = /obj/machinery/portable_atmospherics/canister/nitrous_oxide,
-		"nitrium" = /obj/machinery/portable_atmospherics/canister/nitrium,
+		GAS_NITROGEN = /obj/machinery/portable_atmospherics/canister/nitrogen,
+		GAS_OXYGEN = /obj/machinery/portable_atmospherics/canister/oxygen,
+		GAS_CO2 = /obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+		GAS_PLASMA = /obj/machinery/portable_atmospherics/canister/plasma,
+		GAS_N2O = /obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+		/*"nitrium" = /obj/machinery/portable_atmospherics/canister/nitrium,
 		"bz" = /obj/machinery/portable_atmospherics/canister/bz,
 		"air" = /obj/machinery/portable_atmospherics/canister/air,
 		"water_vapor" = /obj/machinery/portable_atmospherics/canister/water_vapor,
@@ -31,9 +31,10 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		"zauker" = /obj/machinery/portable_atmospherics/canister/zauker,
 		"helium" = /obj/machinery/portable_atmospherics/canister/helium,
 		"antinoblium" = /obj/machinery/portable_atmospherics/canister/antinoblium,
-		"halon" = /obj/machinery/portable_atmospherics/canister/halon
+		"halon" = /obj/machinery/portable_atmospherics/canister/halon*/
 	))
 
+
 /obj/machinery/portable_atmospherics/canister
 	name = "canister"
 	desc = "A canister for the storage of gas."
@@ -132,7 +133,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	desc = "Pre-mixed air."
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#c6c0b5"
-
+/*
 /obj/machinery/portable_atmospherics/canister/antinoblium
 	name = "Antinoblium canister"
 	gas_type = /datum/gas/antinoblium
@@ -145,13 +146,13 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	gas_type = /datum/gas/bz
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#9b5d7f#d0d2a0"
-
+*/
 /obj/machinery/portable_atmospherics/canister/carbon_dioxide
 	name = "Carbon dioxide canister"
-	gas_type = /datum/gas/carbon_dioxide
+	gas_type = GAS_CO2
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#4e4c48"
-
+/*
 /obj/machinery/portable_atmospherics/canister/freon
 	name = "Freon canister"
 	gas_type = /datum/gas/freon
@@ -179,10 +180,11 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	filled = 1
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#9b5d7f#368bff"
-
+*/
+/*
 /obj/machinery/portable_atmospherics/canister/hydrogen
 	name = "Hydrogen canister"
-	gas_type = /datum/gas/hydrogen
+	gas_type = GAS_HYDROGEN
 	filled = 1
 	greyscale_config = /datum/greyscale_config/canister/stripe
 	greyscale_colors = "#bdc2c0#ffffff"
@@ -193,19 +195,19 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	filled = 1
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#009823#f7d5d3"
-
+*/
 /obj/machinery/portable_atmospherics/canister/nitrogen
 	name = "Nitrogen canister"
-	gas_type = /datum/gas/nitrogen
+	gas_type = GAS_NITROGEN
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#d41010"
 
 /obj/machinery/portable_atmospherics/canister/nitrous_oxide
 	name = "Nitrous oxide canister"
-	gas_type = /datum/gas/nitrous_oxide
+	gas_type = GAS_N2O
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#c63e3b#f7d5d3"
-
+/*
 /obj/machinery/portable_atmospherics/canister/nitrium
 	name = "Nitrium canister"
 	gas_type = /datum/gas/nitrium
@@ -217,13 +219,14 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	gas_type = /datum/gas/hypernoblium
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#6399fc#b2b2b2"
+*/
 
 /obj/machinery/portable_atmospherics/canister/oxygen
 	name = "Oxygen canister"
-	gas_type = /datum/gas/oxygen
+	gas_type = GAS_OXYGEN
 	greyscale_config = /datum/greyscale_config/canister/stripe
 	greyscale_colors = "#2786e5#e8fefe"
-
+/*
 /obj/machinery/portable_atmospherics/canister/pluoxium
 	name = "Pluoxium canister"
 	gas_type = /datum/gas/pluoxium
@@ -236,13 +239,13 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	filled = 1
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#008200#33cc33"
-
+*/
 /obj/machinery/portable_atmospherics/canister/plasma
 	name = "Plasma canister"
-	gas_type = /datum/gas/plasma
+	gas_type = GAS_PLASMA
 	greyscale_config = /datum/greyscale_config/canister/hazard
 	greyscale_colors = "#f62800#000000"
-
+/*
 /obj/machinery/portable_atmospherics/canister/tritium
 	name = "Tritium canister"
 	gas_type = /datum/gas/tritium
@@ -262,7 +265,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	filled = 1
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#009a00#006600"
-
+*/
 // Special canisters below here
 
 /obj/machinery/portable_atmospherics/canister/fusion_test
@@ -286,8 +289,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	greyscale_colors = "#9fba6c#3d4680"
 */
 /obj/machinery/portable_atmospherics/canister/anesthetic_mix/create_gas()
-	air_contents.add(GAS_OXYGEN, (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
-	air_contents.add(GAS_N2O, (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjust_gas(GAS_OXYGEN, (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjust_gas(GAS_N2O, (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	SSzas.start_processing_machine(src)
 
 /**
@@ -327,7 +330,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 /obj/machinery/portable_atmospherics/canister/proto/default/oxygen
 	name = "prototype canister"
 	desc = "A prototype canister for a prototype bike, what could go wrong?"
-	gas_type = /datum/gas/oxygen
+	gas_type = GAS_OXYGEN
 	filled = 1
 	release_pressure = ONE_ATMOSPHERE*2
 
@@ -363,12 +366,12 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		return
 	if(starter_temp)
 		air_contents.temperature = starter_temp
-	air_contents.add(gas_type,(maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjust_gas(gas_type,(maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	SSzas.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/air/create_gas()
-	air_contents.add(GAS_OXYGEN, (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
-	air_contents.add(GAS_NITROGEN, (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjust_gas(GAS_OXYGEN, (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjust_gas(GAS_NITROGEN, (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	SSzas.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/update_icon_state()
@@ -556,7 +559,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 			var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta)
 			transfer_moles = min(transfer_moles, (ATMOS_DEFAULT_VOLUME_PUMP/air_contents.volume)*air_contents.total_moles) //flow rate limit
 
-			var/returnval = pump_gas_passive(air_contents, environment, transfer_moles)
+			pump_gas_passive(air_contents, environment, transfer_moles)
 			//air_update_turf(FALSE, FALSE)
 
 	var/our_pressure = air_contents.return_pressure()
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 9e62a111907..22cd1108322 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -20,20 +20,9 @@
 	var/power_rating = 7500
 	///List of gases that can be scrubbed
 	var/list/scrubbing = list(
-		/datum/gas/plasma,
-		/datum/gas/carbon_dioxide,
-		/datum/gas/nitrous_oxide,
-		/datum/gas/bz,
-		/datum/gas/nitrium,
-		/datum/gas/tritium,
-		/datum/gas/hypernoblium,
-		/datum/gas/water_vapor,
-		/datum/gas/freon,
-		/datum/gas/hydrogen,
-		/datum/gas/healium,
-		/datum/gas/proto_nitrate,
-		/datum/gas/zauker,
-		/datum/gas/halon,
+		GAS_PLASMA,
+		GAS_CO2,
+		GAS_N2O,
 	)
 
 /obj/machinery/portable_atmospherics/scrubber/Destroy()
@@ -86,7 +75,7 @@
 	var/transfer_moles = min(1, volume_rate/mixture.volume)*mixture.total_moles
 
 	var/datum/gas_mixture/gas2scrub = mixture.remove(transfer_moles) // Remove part of the mixture to filter.
-	var/datum/gas_mixture/filtered = new
+	//var/datum/gas_mixture/filtered = new
 	if(!scrubbing)
 		return
 
diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm
index 258133aea57..4ed14e40d11 100644
--- a/code/modules/cargo/bounties/engineering.dm
+++ b/code/modules/cargo/bounties/engineering.dm
@@ -4,7 +4,7 @@
 	reward = CARGO_CRATE_VALUE * 15
 	wanted_types = list(/obj/item/tank = TRUE)
 	var/moles_required = 20 // A full tank is 28 moles, but CentCom ignores that fact.
-	var/gas_type = /datum/gas/pluoxium
+	var/gas_type
 
 /datum/bounty/item/engineering/gas/applies_to(obj/O)
 	if(!..())
@@ -18,28 +18,28 @@
 /datum/bounty/item/engineering/gas/nitrium_tank
 	name = "Full Tank of Nitrium"
 	description = "The non-human staff of Station 88 has been volunteered to test performance enhancing drugs. Ship them a tank full of Nitrium so they can get started. (20 Moles)"
-	gas_type = /datum/gas/nitrium
+//	gas_type = /datum/gas/nitrium
 
 /datum/bounty/item/engineering/gas/freon_tank
 	name = "Full Tank of Freon"
 	description = "The Supermatter of station 33 has started the delamination process. Deliver a tank of Freon gas to help them stop it! (20 Moles)"
-	gas_type = /datum/gas/freon
+	//gas_type = /datum/gas/freon
 
 /datum/bounty/item/engineering/gas/tritium_tank
 	name = "Full Tank of Tritium"
 	description = "Station 49 is looking to kickstart their research program. Ship them a tank full of Tritium. (20 Moles)"
-	gas_type = /datum/gas/tritium
+	//gas_type = /datum/gas/tritium
 
 /datum/bounty/item/engineering/gas/hydrogen_tank
 	name = "Full Tank of Hydrogen"
 	description = "Our R&D department is working on the development of more efficient electrical batteries using hydrogen as a catalyst. Ship us a tank full of it. (20 Moles)"
-	gas_type = /datum/gas/hydrogen
+	//gas_type = /datum/gas/hydrogen
 
 /datum/bounty/item/engineering/gas/zauker_tank
 	name = "Full Tank of Zauker"
 	description = "The main planet of \[REDACTED] has been chosen as testing grounds for the new weapon that uses Zauker gas. Ship us a tank full of it. (20 Moles)"
 	reward = CARGO_CRATE_VALUE * 20
-	gas_type = /datum/gas/zauker
+	//gas_type = /datum/gas/zauker
 
 /datum/bounty/item/engineering/emitter
 	name = "Emitter"
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index e26ec5efd3a..cc0948b1902 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -79,7 +79,7 @@
 /datum/export/large/supermatter
 	cost = CARGO_CRATE_VALUE * 16
 	unit_name = "supermatter shard"
-	export_types = list(/obj/machinery/power/supermatter_crystal/shard)
+	//export_types = list(/obj/machinery/power/supermatter_crystal/shard)
 
 /datum/export/large/grounding_rod
 	cost = CARGO_CRATE_VALUE * 1.2
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 7370fbc4fb5..514e1eaa7bd 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -953,7 +953,7 @@
 	desc = "The power of the heavens condensed into a single crystal. Requires CE access to open."
 	cost = CARGO_CRATE_VALUE * 20
 	access = ACCESS_CE
-	contains = list(/obj/machinery/power/supermatter_crystal/shard)
+	//contains = list(/obj/machinery/power/supermatter_crystal/shard)
 	crate_name = "supermatter shard crate"
 	crate_type = /obj/structure/closet/crate/secure/engineering
 	dangerous = TRUE
@@ -974,7 +974,7 @@
 	desc = "The new and improved fusion reactor. Requires CE access to open."
 	cost = CARGO_CRATE_VALUE * 23
 	access = ACCESS_CE
-	contains = list(/obj/item/hfr_box/corner,
+	/*contains = list(/obj/item/hfr_box/corner,
 					/obj/item/hfr_box/corner,
 					/obj/item/hfr_box/corner,
 					/obj/item/hfr_box/corner,
@@ -982,7 +982,7 @@
 					/obj/item/hfr_box/body/moderator_input,
 					/obj/item/hfr_box/body/waste_output,
 					/obj/item/hfr_box/body/interface,
-					/obj/item/hfr_box/core)
+					/obj/item/hfr_box/core)*/
 	crate_name = "HFR crate"
 	crate_type = /obj/structure/closet/crate/secure/engineering
 	dangerous = TRUE
diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm
index 5b5d2d7e96f..6aa40cb46c2 100644
--- a/code/modules/clothing/masks/gas_filter.dm
+++ b/code/modules/clothing/masks/gas_filter.dm
@@ -51,7 +51,7 @@
  *
  */
 /obj/item/gas_filter/proc/reduce_filter_status(datum/gas_mixture/breath)
-
+/*
 	var/danger_points = 0
 
 	for(var/gas_id in breath.gas)
@@ -82,6 +82,7 @@
 
 	filter_status = max(filter_status - danger_points - FILTERS_CONSTANT_WEAR, 0)
 	return breath
+*/
 
 /obj/item/gas_filter/damaged
 	name = "damaged gas filter"
diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm
index c3c4e8b4180..2455708bf28 100644
--- a/code/modules/experisci/experiment/experiments.dm
+++ b/code/modules/experisci/experiment/experiments.dm
@@ -82,7 +82,7 @@
 	sanitized_misc = TRUE
 	sanitized_reactions = TRUE
 	require_all = FALSE
-	required_reactions = list(/datum/gas_reaction/h2fire, /datum/gas_reaction/tritfire)
+	//required_reactions = list(/datum/gas_reaction/h2fire, /datum/gas_reaction/tritfire)
 
 /datum/experiment/ordnance/explosive/nobliumbomb
 	name = "Noblium Explosives"
@@ -92,7 +92,7 @@
 	experiment_proper = TRUE
 	sanitized_misc = TRUE
 	sanitized_reactions = TRUE
-	required_reactions = list(/datum/gas_reaction/nobliumformation)
+	//required_reactions = list(/datum/gas_reaction/nobliumformation)
 
 /datum/experiment/ordnance/explosive/pressurebomb
 	name = "Reactionless Explosives"
@@ -109,7 +109,7 @@
 	gain = list(20,60,120)
 	target_amount = list(20,120,500)
 	experiment_proper = TRUE
-	required_gas = /datum/gas/nitrium
+	//required_gas = /datum/gas/nitrium
 
 /datum/experiment/ordnance/gaseous/bz
 	name = "BZ Gas Shells"
@@ -117,7 +117,7 @@
 	gain = list(25,50)
 	target_amount = list(200,600)
 	experiment_proper = TRUE
-	required_gas = /datum/gas/bz
+	//required_gas = /datum/gas/bz
 
 /datum/experiment/ordnance/gaseous/noblium
 	name = "Noblium Gas Shells"
@@ -125,7 +125,7 @@
 	gain = list(10,40,80)
 	target_amount = list(15,55,250)
 	experiment_proper = TRUE
-	required_gas = /datum/gas/hypernoblium
+	//required_gas = /datum/gas/hypernoblium
 
 /datum/experiment/ordnance/gaseous/halon
 	name = "Halon Gas Shells"
@@ -133,7 +133,7 @@
 	gain = list(10,30,60)
 	target_amount = list(15,55,250)
 	experiment_proper = TRUE
-	required_gas = /datum/gas/halon
+	//required_gas = /datum/gas/halon
 
 /datum/experiment/scanning/random/material/meat
 	name = "Biological Material Scanning Experiment"
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 36ba0ed593c..57bd0bb9579 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -290,7 +290,7 @@
 		/obj/item/ship_in_a_bottle,
 		/obj/item/gun/energy/pulse,
 		/obj/item/book/granter/martial/carp,
-		/obj/item/melee/supermatter_sword,
+		//obj/item/melee/supermatter_sword,
 		/obj/item/shield/changeling,
 		/obj/item/lava_staff,
 		/obj/item/energy_katana,
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 4cef50b5668..f34469e17e6 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -496,7 +496,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r
 	var/turf/T = get_turf(src)
 	if(!T)
 		return
-	var/list/adjacent = T.get_adjacent_open_turfs()
+	var/list/adjacent = get_adjacent_open_turfs(T)
 	if(shuffle) //If we were on the same tile as another bot, let's randomize our choices so we dont both go the same way
 		adjacent = shuffle(adjacent)
 		shuffle = FALSE
diff --git a/code/modules/reagents/chem_splash.dm b/code/modules/reagents/chem_splash.dm
index b731da461c9..9393c64761d 100644
--- a/code/modules/reagents/chem_splash.dm
+++ b/code/modules/reagents/chem_splash.dm
@@ -98,7 +98,7 @@
 			if(accessible[T])
 				continue
 			//for(var/thing in T.get_atmos_adjacent_turfs(alldir = TRUE))
-			for(var/turf/NT as anything in T.get_adjacent_open_turfs())
+			for(var/turf/NT as anything in get_adjacent_open_turfs(T))
 				if(!(NT in accessible))
 					continue
 				if(!(get_dir(T,NT) in GLOB.cardinals))
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 51ee0c75462..acde57a3028 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -76,7 +76,7 @@
 
 /obj/machinery/disposal/LateInitialize()
 	//this will get a copy of the air turf and take a SEND PRESSURE amount of air from it
-	var/atom/L = loc
+	var/turf/L = loc
 	var/datum/gas_mixture/env = new
 	env.copy_from(L.return_air())
 	var/datum/gas_mixture/removed = env.remove(SEND_PRESSURE + 1)
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index 40c7d7b112f..0b070ddfa50 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -689,7 +689,7 @@
 	name = "Machine Design (HFR Core)"
 	desc = "The circuit board for an HFR Core."
 	id = "HFR_core"
-	build_path = /obj/item/circuitboard/machine/HFR_core
+	//build_path = /obj/item/circuitboard/machine/HFR_core
 	category = list ("Engineering Machinery")
 	departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
 
@@ -697,7 +697,7 @@
 	name = "Machine Design (HFR fuel input)"
 	desc = "The circuit board for an HFR fuel input."
 	id = "HFR_fuel_input"
-	build_path = /obj/item/circuitboard/machine/HFR_fuel_input
+	//build_path = /obj/item/circuitboard/machine/HFR_fuel_input
 	category = list ("Engineering Machinery")
 	departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
 
@@ -705,7 +705,7 @@
 	name = "Machine Design (HFR waste output)"
 	desc = "The circuit board for an HFR waste output."
 	id = "HFR_waste_output"
-	build_path = /obj/item/circuitboard/machine/HFR_waste_output
+	//build_path = /obj/item/circuitboard/machine/HFR_waste_output
 	category = list ("Engineering Machinery")
 	departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
 
@@ -713,7 +713,7 @@
 	name = "Machine Design (HFR moderator input)"
 	desc = "The circuit board for an HFR moderator input."
 	id = "HFR_moderator_input"
-	build_path = /obj/item/circuitboard/machine/HFR_moderator_input
+	//build_path = /obj/item/circuitboard/machine/HFR_moderator_input
 	category = list ("Engineering Machinery")
 	departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
 
@@ -721,7 +721,7 @@
 	name = "Machine Design (HFR corner)"
 	desc = "The circuit board for an HFR corner."
 	id = "HFR_corner"
-	build_path = /obj/item/circuitboard/machine/HFR_corner
+	//build_path = /obj/item/circuitboard/machine/HFR_corner
 	category = list ("Engineering Machinery")
 	departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
 
@@ -729,7 +729,7 @@
 	name = "Machine Design (HFR interface)"
 	desc = "The circuit board for an HFR interface."
 	id = "HFR_interface"
-	build_path = /obj/item/circuitboard/machine/HFR_interface
+	//build_path = /obj/item/circuitboard/machine/HFR_interface
 	category = list ("Engineering Machinery")
 	departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
 
@@ -737,7 +737,7 @@
 	name = "Machine Design (Crystallizer)"
 	desc = "The circuit board for a crystallizer."
 	id = "crystallizer"
-	build_path = /obj/item/circuitboard/machine/crystallizer
+	//build_path = /obj/item/circuitboard/machine/crystallizer
 	category = list ("Engineering Machinery")
 	departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
 
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 89a9280a677..6b31f2247e2 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -233,7 +233,7 @@
 	id = "roastingstick"
 	build_type = PROTOLATHE | AWAY_LATHE
 	materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/bluespace = 250)
-	build_path = /obj/item/melee/roastingstick
+	//build_path = /obj/item/melee/roastingstick
 	category = list("Equipment")
 	departmental_flags = DEPARTMENTAL_FLAG_SERVICE
 
diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm
index 8fb730f544a..aa1b0d9ee7f 100644
--- a/code/modules/research/designs/power_designs.dm
+++ b/code/modules/research/designs/power_designs.dm
@@ -88,7 +88,7 @@
 	build_type = PROTOLATHE | AUTOLATHE
 	materials = list(/datum/material/iron = 500)
 	construction_time = 100
-	build_path = /obj/item/turbine_parts/compressor
+	//build_path = /obj/item/turbine_parts/compressor
 	category = list("Misc","Power Designs","Machinery","initial")
 
 /datum/design/turbine_part_rotor
@@ -98,7 +98,7 @@
 	build_type = PROTOLATHE | AUTOLATHE
 	materials = list(/datum/material/iron = 500)
 	construction_time = 100
-	build_path = /obj/item/turbine_parts/rotor
+	//build_path = /obj/item/turbine_parts/rotor
 	category = list("Misc","Power Designs","Machinery","initial")
 
 /datum/design/turbine_part_stator
@@ -108,5 +108,5 @@
 	build_type = PROTOLATHE | AUTOLATHE
 	materials = list(/datum/material/iron = 500)
 	construction_time = 100
-	build_path = /obj/item/turbine_parts/stator
+	//build_path = /obj/item/turbine_parts/stator
 	category = list("Misc","Power Designs","Machinery","initial")
diff --git a/modular_pariah/master_files/icons/effects/contamination.dmi b/modular_pariah/master_files/icons/effects/contamination.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..367394213be967bd895459f2bfa2c14fa443c5cf
GIT binary patch
literal 709
zcmV;$0y_PPP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80001KdQ@0+L}hbh
za%pgMX>V=-0C=1w$Gr-GAQT4B+4~e9x<`MjODN%>?;vRDP=QLleuLXN0-N5AgR+L+
zSZaQ5NUXz1?8~7gNGvn46!V!{Pi?+MNN`Rp<WeCq5j%>%Vz+>H3d$P#0h+fM3zl+5
zLI3~)7fD1xR9J=WR<VleKomXq@k$FTA+R41*uozW{R0t%Y3yE#AXzNZuSK@E5JXbM
z&Som{3k>)Jsn!oz5K`Oc6?$bhPBMw?V&hct=H{F;ckVq7?RGmna{YNI`%}PE0D!-B
zKL|&IWxvw^0BrXs0D$`2U2n#9@M=|n$=i!VW{Kb$w?u&U;t=&a4TPh?vJNIy^#PSU
z@oZ9eTlUVhYE{4zL8K#a*PHQne?sEfq*ms~1n>@9J@L<!+v<s|&QVlu!u-z42rLl*
zd%qHH?I~bzcRu?rXyV_9{1pMMp2*xe=qRV(;_iHgR!?Mg@r+Xtjt0vj@WitT0NRVg
z&AT*~6i$5OG?X?WlQ+A=DDiAcW4X$c=bzJ9QsUWkuGGxfjD-T296<K@_Uc?*&q-r>
z&DrixS2w(nuQ;A~HZ{A$$Rwh)0?qC)I?5?2B-v3;iM>D-l6W>9<<tQXaqRQ$)iL#j
zRzNr!EZ>u_>&|uO$o`*y=B1j`d-9bPRiUyIy6eq2ocLskAOp^g*Y7mI77U!7GMxBM
zoj;^P0cyjQiKs%Z!{SvqhFmfoARmz$`)I#VQEm|qU^oI@2P@NoG?tXclB(nutx_js
z*HeMnl+swPE?o}*m$}DEmkaoG1I{0oIbo3tGP!yqvP7WEGrD0VE7pyf?m|+QbGHB{
r$j9=)RdVhY@SE%5*Yc-;hYR=*Heq6+wrW&r00000NkvXXu0mjf7gI{B

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/icons/effects/tile_effects.dmi b/modular_pariah/master_files/icons/effects/tile_effects.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..a1b92ff11dcb9f2167baf28d9daae8187d078c01
GIT binary patch
literal 1514
zcmV<G1r_><P)<h;3K|Lk000e1NJLTq002M$001Be1^@s6qMd$(0001XdQ@0+L}hbh
za%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex7wuvIWN;^NFm
z%}mcIfpCgT5=&AQY!#H!Q}a@bGLx0KI8!o<iWO`X47oVdiV|~EA#Aw1cmfKQ6<qyX
z6kL2gxd8NrCc=Qv(!2lw1uscNK~!jgwOPw@<2Vd#kaC>)|IeJm9>=joVGin+T3kEH
zidj~rM2i#}1o2K}=5MTH0&oFv1rRunw7J%10C#?K!Rzth`h(xxNJBIyKCAKY9sEX`
zlhJrKX0Fft=I;0tfXGZlM9s_^5y;E~frtY?)d(~lA~U1gCpr>NM8ss@YP0Z5W|k-T
zt)p9v#=?WuPw*w2hzRFBw3uY9MMTj~5|HGOnNvh0e+O3SgF?7P#Je3vhzEWE+;ZjA
z-z6DaB4X+AtAxzUk<deYQ3&^lc>4zay~mHt{D(g#+ZdU7A!AKaw!?!0XnYSo->_@Q
zj+{A1#2?PZSbg%n<4?Shh5L#f9^_@=d+>R|t|5-!BI2XNF94Qe`#u27nc1-3ifksy
zoNRc>qmDNF`@=o6t%I~KoCClw?B=8K0MIgXA%5cllgx^r9)GdF597u08+gIQzjFWj
zk~ajb_C8TcNv0&VjW9I>I65b3$Bl=TMm=nwv_$h*$*1hR(H99{<_DUGOhgygUqoPa
zauarqnr)x7MDvhjU1i+q>DH#qluZguw>)9J(TPBFW<CHsGE=nW{NA`eXJ+AhS8E9Y
zMq3UV{07*~LV~>VnOL=G#;(m_!oG05kyb4LCf?|jnPL|93=)EQXjidH!RU~Ph?bcT
z-l8;C^sbyQShc0{Ml11qpAa+)$6pM;=rD%AP^%qZ^e&t)0PaN+AtTjpSszvRrZfe2
zbS)xo*nI^+8@3zhHEg1%uUKt*0Z<eQ{cwEm_;P%DxkSVryRQ(w==S(6A}aAq;Q`<H
z@jG^J+dPg(gzQ@CxY-}4cdTmHGb@v-COCJJg<-g0H4%CK#Wja}D%Kl+hCdt6jxUoc
zCb&(5Wxu48LA8NN4`e6=+QrwVZ?tAkb7PKs4sn{}I*7l#z+Vg>ukfWZ6?^_6J1Q0l
z-ar+z2%vFDQ+bHVOsS{q-dUWKPw*8&h3_Wv3cs2u{fjQ&HvkctdBagPlTvz+u?c(r
zyk&q4U9N^<hpX779oTQ#Yk--wt~jcu@MpeP4kCPo#^njVCq<6GrQ?R*0L-#0EzFsD
z<wpX$n}j_tI3(;~G%$}oQ60n7a=Qua1&ZhPjTxx$Rq$wdUeM#KmMEOpFYqgX=H9en
z4T)}G@~jue*2<edIJ=Jc1mF@8!LYW9zAIF)J0iF9`T~DqL@B)a_6dH~IljPOLo1UO
zt$LLP?B4oebNAq0Syj9)r=N{yC2o%|A<Z`T9K`WuuFuNpm-xyAdqy;r-TlHEBByR&
zcF)hivfHQHp+ArhWp`KXh1O5uF91F!u&I#e>v^f**?z)MJ#YA@`U%R#N9uVcDQEi$
zL-joOo$e=iKj3UVuW`1Ypz82cJ#X7i^%J(V7vuH(*?z)MJ#XVwKcQfE4%%?*1n{su
z6?^Ke3J?sD3EDg9D~p`Dz6si5xH~5?eD4G>+n$0wsZx>z37xbZU-f}#FF2;oTTMPv
z&yV&KhU$3?_7jw~jnwm_{e+=<9)taag7JEOw4X3k&ttHkP=Mij{-^p0r|NkO_7fDp
zN9y^}e!@^akHLO|qQHiq=j!>N?k9Y^p0{(n!vD0Nu>Ft&A%m4dkgdy0`~UIYJLb2w
z%zVcl*8}V)kU?oypX`J&SS+=c_us-Ec6E3BZ7nn3h_6ELVffOlaHhrhnR@=G`U$7%
zc?|XwioFo=v-SK>^%MS6J#YA@`U#QizsLWtdj3281ZmKzdj1RiFZ&690cia=`?d<|
QRsaA107*qoM6N<$f;TbqKmY&$

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/icons/testing/Zone.dmi b/modular_pariah/master_files/icons/testing/Zone.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..1d8ab8516693cc287bfae96341b7294a28458047
GIT binary patch
literal 955
zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSi>g8*N?cNllZ!G7N;32F7#J$%
z^qxJ-b;v+~<w5Z$5$|g8`l_?8L0)`st&fz=)>+1>va!kk{Xzw;rk!UG9QWaUzAc#f
zMBGQw<V6o09X8)CE?ce{El^-pls2*FY_w-&It$}fiNN$ZTIbZdI9X&YW-pE_IIX`t
zSm`nMgQklj2A@`!g%~V<{8fL~4ugFwpKY&V=}#@%XZc;#etvcaJLjhGKb$w$Wy^E%
zp5Dp8z;wma#WAE}&f7aD3vWA!FkIvpS1Pg;wPtNkxbJayiHHc3WcOU5nt(!M&qPIo
z`UCIECxxt%3cM`QbYs@K*ZbTSsogVf?|*mx{FRT7qu+gqFKQ1rV{R~Ju%HUDqilce
z@7X`u-x#s?cT{xh7617AY^$d2v+vXIAHRO5?$3kpQ}&7bE4BYUDqU$?6If-mY0>4S
z+x~~oi#{e4BV5k(kcZ(M!vivjOYeEC_6Hg=|2?-Lnc?2*<5%1&rt3vsKKk-s#jm0t
zZ|ZXF!+zfVw&mb%VUBc$f|v7|Hpxyqs`LDGAzL_u#UHK-ds)+pS;+_r@BLac>SF86
z!Wnja5pCE9HDyQI_Db8j;@AH^E|rxN4E}YKrM+-A$Cu~;Q*DQn>8z>t(^sgyWSo=#
zQ&sI*4bS|JAV&tlr%DB%)`to@9Qh<@@pF5qu)~oeAme+esKb#zK*s#ldJP>vfogt-
zN;({Q3=}yWBJFVG3&)&44_EOiB-OC^{j<2rE?{WGq+Y)#lttj8eB)&Mvsp|XJ3x%P
ztALEY11IaxyaF<8FZ%s6S<U0{IWm=@*1AzDuaxo6|9SDhs+!U_uVQ%j_JicXlGU6G
z^7HR=EQ@qyaJGLXd9dOtyTP~OeS$r~r3}IRpCk?zTxI+4LeNfGV%aH%XI6W%S^lo#
zPI#C6+wH^7RZJ1Dj`RuM3HN32o`2Q2>Gmp)1y?j<m3K^&b9njrr(1!hZA0^<=b!hM
bJ$NGjT2$c-qeK)aYchDc`njxgN@xNA=?{z~

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/icons/testing/air_meter.dmi b/modular_pariah/master_files/icons/testing/air_meter.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..56d1ff18a59fe713829890d2473e15d812725fdd
GIT binary patch
literal 463
zcmV;=0WkiFP)<h;3K|Lk000e1NJLTq00IC2001Ba0{{R3mSx@60000IP)t-sz`(!&
z00930Gynh0007JY|Nk;w&Kv*$00DGTPE!Ct=GbNc004)2R9JLGWpiV4X>fFDZ*Bkp
zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryMDlSPZNd>Z%l(;xkGK-3VOhYctw4%h^
zR0tccAhoC{zlfkJ1A;0H392w6sKS__3KN1VObMzmBdEfhpb86uDl7?y7!iR=I8+S@
z2dg2@a8*`t^>YCy9{_Y7n2TBb(m4PC0N6=HK~!jg?U}&|!!Qg*?SlvK2o-dIk_ieK
zASwL)S1G2KG%Ynnj-^=A?c>vX*s_d6@G2E^&X#kCM3<j=nr^D|Jl{Fl1)NR*6W9f~
zfU^l`3|tX_SH^)r$^|SXC%Xa?O2%>^kT7tq2Vf<-V!LikKmyTr1DF#K@Oaw*!vR+X
zBw+muU^D>{=sO3P6CeyMe+0A(Xx;>s0r$TKl>zr3gp>gvKME@Y{K&f_-~KTq4agM0
ze-29n@&tUzg8{n$7r+%D4a5X?0WM%KK-p(y_s>zg^#n*2I#_hWzXAXN002ovPDHLk
FV1l&Ftup`s

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/icons/testing/atmos_testing.dmi b/modular_pariah/master_files/icons/testing/atmos_testing.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..142bd4cbb1a4e3ed36b08be40fe05379ea402280
GIT binary patch
literal 390
zcmeAS@N?(olHy`uVBq!ia0vp^3xHUGgAGVdtuOuxq_V3*B1&9Ri<65o3raHc^B5Q^
z<^+co6qSDe5?t`{>k}<+U9EFx&IfM@HMnT}Kugb4$1`+8Xuv67ol}0gMj?+L`JB|z
z3IobMdE}$*b;h@K!^JC-f-BF>@F-Pdx%x0@!I}rJo-cav==DifhDRUmE;&v95e~HW
znx~6nNX4ADHw^g>83?dm%-0jU-&tI+{Od`l#sHomCugIxd$=Yx>AJmsFl|jXUr2A+
zmp?h)`{mD>zdCqs`<KT*-4=fSD*sv3=6>&=!jlZGMh**k0yLOKPJx+Gp%;xgwtTs6
z`*6ki-v{=-|9_Tug-Ue6{rTsgv0ce4NYCGYgm*>G!m|fs1>=(%X6fu*AKv=?nV?R8
zLgBL?ZlSXm?|yW?gHem~^S|j8EZoo7pvEHEfSozdtJTHHcB<!opbr^5UHx3vIVCg!
E03RZ$`~Uy|

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/icons/testing/turf_analysis.dmi b/modular_pariah/master_files/icons/testing/turf_analysis.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..e3aac1ebd05b8bc12b1be6e6cb2ab5f2325cae37
GIT binary patch
literal 1144
zcmV-;1c&>HP)<h;3K|Lk000e1NJLTq00O`O001Be1^@s69Q4ja0001^dQ@0+L}hbh
za%pgMX>V=-0C=30%&`i>Fc5&@xp|7C-NkAgvq+0%XkQ^j?g9Z#%B8KZ?;z+R_T2vA
z<8R>HU+f6oVAV=oVoqQ{@Aj(9ekL$b*Q&zE1q`&R3heLn>Nki9;~H`CH<#0<E=!px
zA>m)&5H@*Et;D!%W+WESgT%;pM~RW|w8Y4FCy9~nJac}0l>V-m(EXGR^kWCzVAT`5
z^}wWWGIzfK00WRoL_t(|obBDgaoac;fKhN~uc;#iBzLKeG>`_UGROjw2GWLfUsvM-
zm`gItp+$+5DEuJ#-pS+f7?5Sj-(X;%YMQ1?flhTDIsEQ*)z9cD#QL%C$6tMai=INP
zD)j9yT-WXU_y2PFTt&|Ti1Baq1X4<=tG<SeTXp}Xlv4VVV%`Ja(w{%RQE$P8{Oxa>
z_mFYx)2EPehuZgVA>-Dceua!X)U-{=xTpFQGVV~*v?1f3PGu}Uv~AGqzb@nT55y=U
zfK&QEMspcP_gm%~{1Dx_W3;e!kK8dD72RWU$7ob^kI5aQQPDjncZ^0w_n6!<8Wr73
zIv(pTrIgO+wy<||aya~X{x6>Yhy4>h0RUjSzwtZ#n0+|(p7Vp}|6u|c09N8!@QUF5
zxE8!3_%Q+)09N2u=!)R&yA`@3cs>CP0EO!ZZhzlz|6>unUH!oA@B8h4EQ03|zyMIN
zvG~3AIT5@)WAS_Kb0T;;0So{$9glUFJ2r2f_~0~%ybi~@%N?7yPJD10#C!r6017uH
za7FNTO$l5PJWny_00RIY%?aBQBKY2xja=VjE9Qi42@!m6%SNv6agP;X0AMlC?nxHE
z>-OxP<Q(yvk^lw(7WQZai{EW{G=g)*Z%P6f0C<795iEYUWo`uLjNg<5FaYo(QzKaX
zZqw8V&K<ug`6oC4;EGoq^L9Me-7s*6<196<kbcf9j(IyA>uwmh!*P}x_g+X_0R{kI
zSF8X703R&1f;#0UJ6j;iv(#3EDL2_gY=N)>3;?{u)Ub7(^EOQl+lcF&1uy`xxVfvk
zB6wTouIlEFU;zvOEb7rM4I+3O9^KNAGlB&$0I-;6_w$P2b$fO{Z>|XTPjCQm!?mNk
zmiXGOTH^7S^fSD6bk`DJyH!g(eivZ?Kmq37WX874y~&L7319%2VCqd~Ih@aJRnjWy
z9!$N-EQiavt@ggs{44<s05{y*lj;oHZM(N8HR23go+p3-;Eu5f7Qg#27Qy0oy#z1-
zOfdB#2exVIMGmZk00w}G#;)>>m<#!hUF91w7oH=40bquH@QUC4=?Aa)U9V!!0q&}=
zq2qr^!N0>he+jkCd-N1SweR1erx2=Xo9HQoYMM5B3ZdF|eXoDvyKlmG{i>#ELeH%`
z)pg|XyVq4eqo)w-$G#tb_5Ce+3bCqvAKTe=`~LmETt15!*s0%R>)aAGmE$G=0000<
KMNUMnLSTZF(=i$V

literal 0
HcmV?d00001


From bb27b18eb2d68eb485a1de55e57b3dbabb6f7f97 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 18 Apr 2022 04:14:39 -0400
Subject: [PATCH 012/200] atmostest

---
 _maps/atmostest.json                | 4 ++--
 code/controllers/master.dm          | 3 ++-
 code/modules/admin/verbs/fix_air.dm | 4 ++++
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/_maps/atmostest.json b/_maps/atmostest.json
index 7fdd314ba1e..3435e944864 100644
--- a/_maps/atmostest.json
+++ b/_maps/atmostest.json
@@ -2,5 +2,5 @@
 	"version": 1,
 	"map_name": "ZAS HELL",
 	"map_path": "map_files/debug",
-	"map_file": "atmos_mintest.dmm",
-}
+	"map_file": "atmos_mintest.dmm"
+}
\ No newline at end of file
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 88dadb8b52e..33b8f24cfdc 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -109,7 +109,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
 			for(var/global_var in global.vars)
 				if (istype(global.vars[global_var], /datum/controller/subsystem))
 					existing_subsystems += global.vars[global_var]
-					
+
 			//Either init a new SS or if an existing one was found use that
 			for(var/I in subsystem_types)
 				var/ss_idx = existing_subsystems.Find(I)
@@ -221,6 +221,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
 		if (SS.flags & SS_NO_INIT || SS.initialized) //Don't init SSs with the correspondig flag or if they already are initialzized
 			continue
 		current_initializing_subsystem = SS
+		to_chat(world, span_blue(span_boldannounce("Initializing [SS.name]...")))
 		SS.Initialize(REALTIMEOFDAY)
 		CHECK_TICK
 	current_initializing_subsystem = null
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index 8762e7edeea..d4d7c0a4bda 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -7,7 +7,10 @@
 
 	if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the map is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No")
 		return
+	if(!fix_atmos_grief())
+		to_chat(world, span_danger("Atmospherics reboot failed!"))
 
+/proc/fix_atmos_grief()
 	log_admin("Full atmosphere reset initiated by [usr].")
 	to_chat(world, "<span class = 'danger'>Initiating restart of atmosphere. The server may lag a bit.</span>")
 	sleep(10)
@@ -50,3 +53,4 @@
 
 	to_chat(usr, "\[5/5\] - ZAS Rebooted")
 	to_chat(world, "<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>")
+	return TRUE

From a0fb535185d1d7d6030890e25d54e7c5d3f24eaa Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Mon, 18 Apr 2022 04:12:07 -0400
Subject: [PATCH 013/200] cummies

---
 code/controllers/master.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 33b8f24cfdc..b54d8e2727b 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -221,7 +221,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
 		if (SS.flags & SS_NO_INIT || SS.initialized) //Don't init SSs with the correspondig flag or if they already are initialzized
 			continue
 		current_initializing_subsystem = SS
-		to_chat(world, span_blue(span_boldannounce("Initializing [SS.name]...")))
+		to_chat(world, span_blue(span_bold("Initializing [SS.name]...")))
 		SS.Initialize(REALTIMEOFDAY)
 		CHECK_TICK
 	current_initializing_subsystem = null

From 7d53e70122d37a4a52fe4064bf69a908308bfc99 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 18 Apr 2022 20:11:20 -0400
Subject: [PATCH 014/200] AMONG US

---
 _maps/map_files/generic/CentCom.dmm           |  8 ++--
 code/__DEFINES/atmospherics/ZAS.dm            |  6 ++-
 code/controllers/subsystem/zas.dm             |  4 +-
 code/game/atoms.dm                            |  4 +-
 code/game/atoms_movable.dm                    |  4 +-
 code/game/machinery/doors/door.dm             | 24 ++++++++----
 code/game/machinery/doors/firedoor.dm         |  8 ++--
 code/game/machinery/doors/poddoor.dm          |  1 +
 code/game/machinery/doors/windowdoor.dm       |  9 +++--
 code/game/machinery/shieldgen.dm              |  4 +-
 .../effects/effect_system/effects_foam.dm     |  7 ++--
 code/game/objects/effects/forcefields.dm      |  4 +-
 code/game/objects/effects/spiderwebs.dm       |  2 +-
 .../items/devices/forcefieldprojector.dm      |  2 +-
 code/game/objects/structures/aliens.dm        |  2 +-
 code/game/objects/structures/false_walls.dm   | 10 +++--
 code/game/objects/structures/holosign.dm      |  2 +-
 code/game/objects/structures/mineral_doors.dm |  2 +-
 code/game/objects/structures/plasticflaps.dm  |  4 +-
 code/game/objects/structures/tram_walls.dm    |  2 +-
 .../objects/structures/windoor_assembly.dm    | 11 +++---
 code/game/objects/structures/window.dm        | 14 +++----
 code/game/shuttle_engines.dm                  |  2 +-
 code/game/turfs/change_turf.dm                | 11 ++----
 code/game/turfs/closed/walls.dm               |  3 +-
 code/game/turfs/open/_open.dm                 |  2 +-
 code/game/turfs/turf.dm                       |  6 ++-
 code/modules/admin/verbs/fix_air.dm           |  2 +-
 .../antagonists/blob/structures/_blob.dm      |  4 +-
 code/modules/art/statues.dm                   |  2 +-
 code/modules/atmospherics/ZAS/Atom.dm         | 17 ++++++---
 code/modules/atmospherics/ZAS/Connection.dm   | 32 ++++++++--------
 .../atmospherics/ZAS/ConnectionGroup.dm       | 10 ++---
 code/modules/atmospherics/ZAS/Fire.dm         | 22 +++++------
 code/modules/atmospherics/ZAS/Temperature.dm  |  4 +-
 code/modules/atmospherics/ZAS/Turf.dm         | 16 ++++----
 code/modules/atmospherics/ZAS/XGM/gas_data.dm | 38 +++++++++----------
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  1 -
 code/modules/atmospherics/ZAS/Zone.dm         |  6 +--
 code/modules/error_handler/error_viewer.dm    |  2 +-
 code/modules/mining/equipment/survival_pod.dm |  2 +-
 .../simple_animal/hostile/megafauna/drake.dm  |  2 +-
 .../power/singularity/containment_field.dm    |  4 +-
 .../power/singularity/field_generator.dm      |  6 +--
 code/modules/power/turbine/turbine.dm         |  2 +-
 .../xenobiology/crossbreeding/_misc.dm        |  2 +-
 .../modules/large_doors/code/large_doors.dm   |  2 +-
 47 files changed, 179 insertions(+), 155 deletions(-)

diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 008b149633a..0684d3dc817 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -5273,7 +5273,7 @@
 /area/syndicate_mothership/control)
 "sm" = (
 /obj/structure/window/paperframe{
-	can_atmos_pass = 0
+	can_atmos_pass = 4
 	},
 /obj/effect/turf_decal/siding/wood{
 	dir = 1
@@ -11365,7 +11365,7 @@
 /area/centcom/prison)
 "Qu" = (
 /obj/structure/window/paperframe{
-	can_atmos_pass = 0
+	can_atmos_pass = 4
 	},
 /obj/effect/turf_decal/siding/wood,
 /obj/effect/turf_decal/siding/wood{
@@ -11659,7 +11659,7 @@
 /area/centcom/supplypod)
 "Rv" = (
 /obj/structure/window/paperframe{
-	can_atmos_pass = 0
+	can_atmos_pass = 4
 	},
 /turf/open/floor/wood/tile,
 /area/centcom/holding)
@@ -14013,7 +14013,7 @@
 	dir = 4
 	},
 /obj/structure/window/paperframe{
-	can_atmos_pass = 0
+	can_atmos_pass = 4
 	},
 /turf/open/floor/sepia,
 /area/centcom/holding)
diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 367469bb075..64bea7e4b0f 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,6 +1,7 @@
-//#define ZASDBG
+#define ZASDBG
 //#define MULTIZAS
 
+#define AIR_ALLOWED 0
 #define AIR_BLOCKED 1
 #define ZONE_BLOCKED 2
 #define BLOCKED 3
@@ -109,7 +110,8 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
 
 #endif
 
-
+//#define ATMOS_CANPASS(A, O) ( A.can_atmos_pass == CANPASS_PROC ? A.c_airblock(O) : ( A.can_atmos_pass == CANPASS_DENSITY? !A.density : A.can_atmos_pass))
+#define ATMOS_CANPASS_NOTTURF(A) (A.can_atmos_pass == CANPASS_DENSITY ? !A.density : A.can_atmos_pass)
 #define CELL_VOLUME        2500 // Liters in a cell.
 #define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) // Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C.
 
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index d593c053d63..d678d9885f5 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -235,7 +235,7 @@ SUBSYSTEM_DEF(zas)
 			T.needs_air_update = 0
 			#ifdef ZASDBG
 			T.overlays -= mark
-			updated++
+			//updated++
 			#endif
 
 			if (MC_TICK_CHECK)
@@ -253,7 +253,7 @@ SUBSYSTEM_DEF(zas)
 			T.needs_air_update = 0
 			#ifdef ZASDBG
 			T.overlays -= mark
-			updated++
+			//updated++
 			#endif
 
 			if (MC_TICK_CHECK)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 6fb8041ed77..6f7bae3f3f7 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -337,9 +337,11 @@
 	return TRUE
 
 /// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir.
-/atom/proc/CanPass(atom/movable/mover, border_dir)
+/atom/proc/CanPass(atom/movable/mover, border_dir, air_group)
 	SHOULD_CALL_PARENT(TRUE)
 	SHOULD_BE_PURE(TRUE)
+	if(!mover)
+		return FALSE
 	if(mover.movement_type & PHASING)
 		return TRUE
 	. = CanAllowThrough(mover, border_dir)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index bdaa6a41803..0579c638246 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -114,8 +114,8 @@
 
 	if(loc)
 		//Restore air flow if we were blocking it (movables with ATMOS_PASS_PROC will need to do this manually if necessary)
-		if(((can_atmos_pass == ATMOS_PASS_DENSITY && density) || can_atmos_pass == ATMOS_PASS_NO) && isturf(loc))
-			can_atmos_pass = ATMOS_PASS_YES
+		if(((can_atmos_pass == CANPASS_DENSITY && density) || can_atmos_pass == CANPASS_NEVER) && isturf(loc))
+			can_atmos_pass = CANPASS_ALWAYS
 			//air_update_turf(TRUE, FALSE)
 		loc.handle_atom_del(src)
 
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 0cbee448c4a..6967aa1e5cf 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -13,7 +13,7 @@
 	pass_flags_self = PASSDOORS
 	max_integrity = 350
 	armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, FIRE = 80, ACID = 70)
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_PROC
 	flags_1 = PREVENT_CLICK_UNDER_1
 	receive_ricochet_chance_mod = 0.8
 	damage_deflection = 10
@@ -42,6 +42,8 @@
 	var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access
 	var/can_crush = TRUE /// Whether or not the door can crush mobs.
 	var/can_open_with_hands = TRUE /// Whether or not the door can be opened by hand (used for blast doors and shutters)
+	///If set, air zones cannot merge across the door even when it is opened.
+	var/block_air_zones = TRUE
 
 /obj/machinery/door/Initialize(mapload)
 	. = ..()
@@ -57,6 +59,7 @@
 	else
 		flags_1 &= ~PREVENT_CLICK_UNDER_1
 
+	update_nearby_tiles(TRUE)
 	//doors only block while dense though so we have to use the proc
 	real_explosion_block = explosion_block
 	explosion_block = EXPLOSION_BLOCK_PROC
@@ -101,9 +104,14 @@
 	if(spark_system)
 		qdel(spark_system)
 		spark_system = null
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles()
 	return ..()
 
+/obj/machinery/door/c_airblock(turf/other)
+	if(block_air_zones)
+		return density ? AIR_BLOCKED : ZONE_BLOCKED
+	return density ? AIR_BLOCKED : AIR_ALLOWED
+
 /**
  * Signal handler for checking if we notify our surrounding that access requirements are lifted accordingly to a newly set security level
  *
@@ -167,13 +175,13 @@
 		return
 
 /obj/machinery/door/Move()
-	//var/turf/T = loc
+	update_nearby_tiles(TRUE)
 	. = ..()
-	/*if(density) //Gotta be closed my friend
-		move_update_air(T)*/
 
-/obj/machinery/door/CanAllowThrough(atom/movable/mover, border_dir)
+
+/obj/machinery/door/CanAllowThrough(atom/movable/mover, border_dir, air_group)
 	. = ..()
+	if(air_group) return !block_air_zones
 	if(.)
 		return
 	// Snowflake handling for PASSGLASS.
@@ -353,7 +361,7 @@
 	update_appearance()
 	set_opacity(0)
 	operating = FALSE
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles(TRUE)
 	update_freelook_sight()
 	if(autoclose)
 		autoclose_in(DOOR_CLOSE_WAIT)
@@ -383,7 +391,7 @@
 	if(visible && !glass)
 		set_opacity(1)
 	operating = FALSE
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles(TRUE)
 	update_freelook_sight()
 
 	if(!can_crush)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 8c2b1ab3bcb..e1e85fd8c33 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -611,7 +611,7 @@
 	icon = 'icons/obj/doors/edge_Doorfire.dmi'
 	can_crush = FALSE
 	flags_1 = ON_BORDER_1
-	can_atmos_pass = ATMOS_PASS_PROC
+	can_atmos_pass = CANPASS_PROC
 
 /obj/machinery/door/firedoor/border_only/closed
 	icon_state = "door_closed"
@@ -659,11 +659,11 @@
 		leaving.Bump(src)
 		return COMPONENT_ATOM_BLOCK_EXIT
 
-/obj/machinery/door/firedoor/border_only/c_block(turf/T, vertical = FALSE)
+/obj/machinery/door/firedoor/border_only/c_airblock(turf/T, vertical = FALSE)
 	if(get_dir(loc, T) == dir)
-		return !density
+		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	else
-		return TRUE
+		return  AIR_ALLOWED
 
 /obj/machinery/door/firedoor/heavy
 	name = "heavy firelock"
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 4941064217f..59356ad6b28 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -14,6 +14,7 @@
 	resistance_flags = FIRE_PROOF
 	damage_deflection = 70
 	can_open_with_hands = FALSE
+	block_air_zones = FALSE
 	var/datum/crafting_recipe/recipe_type = /datum/crafting_recipe/blast_doors
 	var/deconstruction = BLASTDOOR_FINISHED // deconstruction step
 	var/id = 1
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 89f43331e89..ee6f874ec15 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -14,7 +14,7 @@
 	flags_1 = ON_BORDER_1
 	opacity = FALSE
 	pass_flags_self = PASSGLASS
-	can_atmos_pass = ATMOS_PASS_PROC
+	can_atmos_pass = CANPASS_PROC
 	interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
 	network_id = NETWORK_DOOR_AIRLOCKS
 	set_dir_on_move = FALSE
@@ -61,6 +61,7 @@
 
 	AddElement(/datum/element/connect_loc, loc_connections)
 	AddElement(/datum/element/atmos_sensitive, mapload)
+	update_nearby_tiles(TRUE)
 
 /obj/machinery/door/window/ComponentInitialize()
 	. = ..()
@@ -173,11 +174,11 @@
 
 	return TRUE
 
-/obj/machinery/door/window/c_block(turf/T, vertical = FALSE)
+/obj/machinery/door/window/c_airblock(turf/T, vertical = FALSE)
 	if(get_dir(loc, T) == dir)
-		return !density
+		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	else
-		return TRUE
+		return ZONE_BLOCKED
 
 //used in the AStar algorithm to determinate if the turf the door is on is passable
 /obj/machinery/door/window/CanAStarPass(obj/item/card/id/ID, to_dir)
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index eca093c49b7..6261ae09e41 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -9,7 +9,7 @@
 	anchored = TRUE
 	resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
 	max_integrity = 200 //The shield can only take so much beating (prevents perma-prisons)
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 
 /obj/structure/emergency_shield/Initialize(mapload)
 	. = ..()
@@ -73,7 +73,7 @@
 
 /obj/structure/emergency_shield/cult/barrier
 	density = FALSE //toggled on right away by the parent rune
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 	///The rune that created the shield itself. Used to delete the rune when the shield is destroyed.
 	var/obj/effect/rune/parent_rune
 
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index b4a27778235..b12c4b91580 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -276,16 +276,17 @@
 	desc = "A lightweight foamed metal wall that can be used as base to construct a wall."
 	gender = PLURAL
 	max_integrity = 20
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_NEVER
 	///Var used to prevent spamming of the construction sound
 	var/next_beep = 0
 
 /obj/structure/foamedmetal/Initialize(mapload)
 	. = ..()
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles(TRUE)
 
 /obj/structure/foamedmetal/Destroy()
-	//air_update_turf(TRUE, FALSE)
+	set_density(0)
+	update_nearby_tiles(TRUE)
 	. = ..()
 
 /obj/structure/foamedmetal/Move()
diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm
index 9c41da052a8..5fc593ba9f6 100644
--- a/code/game/objects/effects/forcefields.dm
+++ b/code/game/objects/effects/forcefields.dm
@@ -5,7 +5,7 @@
 	anchored = TRUE
 	opacity = FALSE
 	density = TRUE
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 	var/timeleft = 300 //Set to 0 for permanent forcefields (ugh)
 
 /obj/effect/forcefield/Initialize(mapload)
@@ -21,7 +21,7 @@
 	name = "glowing wall"
 	icon = 'icons/effects/cult/effects.dmi'
 	icon_state = "cultshield"
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 	timeleft = 200
 
 /// A form of the cult forcefield that lasts permanently.
diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm
index 8ec5ec113c5..fcb6096eb50 100644
--- a/code/game/objects/effects/spiderwebs.dm
+++ b/code/game/objects/effects/spiderwebs.dm
@@ -77,7 +77,7 @@
 	desc = "A solid thick wall of web, airtight enough to block air flow."
 	icon_state = "sealedweb"
 	sealed = TRUE
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 
 /obj/structure/spider/stickyweb/genetic //for the spider genes in genetics
 	genetic = TRUE
diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm
index 0a46b63e6cc..53a88c6febb 100644
--- a/code/game/objects/items/devices/forcefieldprojector.dm
+++ b/code/game/objects/items/devices/forcefieldprojector.dm
@@ -103,7 +103,7 @@
 	density = TRUE
 	mouse_opacity = MOUSE_OPACITY_OPAQUE
 	resistance_flags = INDESTRUCTIBLE
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_NEVER
 	armor = list(MELEE = 0, BULLET = 25, LASER = 50, ENERGY = 50, BOMB = 25, BIO = 100, FIRE = 100, ACID = 100)
 	var/obj/item/forcefield_projector/generator
 
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index d9eaf40ce12..38f4e3a2871 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -63,7 +63,7 @@
 	canSmoothWith = list(SMOOTH_GROUP_ALIEN_RESIN)
 	max_integrity = 200
 	var/resintype = null
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 
 
 /obj/structure/alien/resin/Initialize(mapload)
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 971e5b2bd6c..27ecc8d49a4 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -16,7 +16,7 @@
 	smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
 	canSmoothWith = list(SMOOTH_GROUP_WALLS)
 	can_be_unanchored = FALSE
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_PROC
 	rad_insulation = RAD_MEDIUM_INSULATION
 	material_flags = MATERIAL_EFFECTS
 	var/mineral = /obj/item/stack/sheet/iron
@@ -31,7 +31,8 @@
 	var/obj/item/stack/initialized_mineral = new mineral // Okay this kinda sucks.
 	set_custom_materials(initialized_mineral.mats_per_unit, mineral_amount)
 	qdel(initialized_mineral)
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles(TRUE)
+
 
 /obj/structure/falsewall/attack_hand(mob/user, list/modifiers)
 	if(opening)
@@ -55,7 +56,10 @@
 		set_opacity(density)
 		opening = FALSE
 		update_appearance()
-		//air_update_turf(TRUE, !density)
+		update_nearby_tiles(TRUE)
+
+/obj/structure/falsewall/c_airblock(turf/other)
+	return density ? ZONE_BLOCKED : AIR_BLOCKED
 
 /obj/structure/falsewall/update_icon(updates=ALL)//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
 	. = ..()
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index c0f1886ee61..62daaf3102a 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -94,7 +94,7 @@
 	icon_state = "holo_firelock"
 	density = FALSE
 	anchored = TRUE
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 	alpha = 150
 	rad_insulation = RAD_LIGHT_INSULATION
 
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 5b255b11866..ab9b1f7a944 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -13,7 +13,7 @@
 	icon_state = "metal"
 	max_integrity = 200
 	armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, FIRE = 50, ACID = 50)
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 	rad_insulation = RAD_MEDIUM_INSULATION
 	material_flags = MATERIAL_EFFECTS
 	material_modifier = 0.25
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index cab6be77908..587e1c90f79 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -7,7 +7,7 @@
 	armor = list(MELEE = 100, BULLET = 80, LASER = 80, ENERGY = 100, BOMB = 50, BIO = 100, FIRE = 50, ACID = 50)
 	density = FALSE
 	anchored = TRUE
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 
 /obj/structure/plasticflaps/opaque
 	opacity = TRUE
@@ -41,7 +41,7 @@
 
 ///Update the flaps behaviour to gases, if not anchored will let air pass through
 /obj/structure/plasticflaps/proc/update_atmos_behaviour()
-	can_atmos_pass = anchored ? ATMOS_PASS_YES : ATMOS_PASS_NO
+	can_atmos_pass = anchored ? CANPASS_ALWAYS : CANPASS_NEVER
 
 /obj/structure/plasticflaps/wirecutter_act(mob/living/user, obj/item/W)
 	. = ..()
diff --git a/code/game/objects/structures/tram_walls.dm b/code/game/objects/structures/tram_walls.dm
index cfbbec9591f..ff1df4f5dd2 100644
--- a/code/game/objects/structures/tram_walls.dm
+++ b/code/game/objects/structures/tram_walls.dm
@@ -16,7 +16,7 @@
 	smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS)
 	canSmoothWith = list(SMOOTH_GROUP_WALLS)
 	can_be_unanchored = FALSE
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 	rad_insulation = RAD_MEDIUM_INSULATION
 	material_flags = MATERIAL_EFFECTS
 	var/mineral = /obj/item/stack/sheet/iron
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 9cb53c83a5f..027caa35524 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -27,7 +27,7 @@
 	var/facing = "l" //Does the windoor open to the left or right?
 	var/secure = FALSE //Whether or not this creates a secure windoor
 	var/state = "01" //How far the door assembly has progressed
-	can_atmos_pass = ATMOS_PASS_PROC
+	can_atmos_pass = CANPASS_PROC
 
 /obj/structure/windoor_assembly/Initialize(mapload, loc, set_dir)
 	. = ..()
@@ -41,10 +41,11 @@
 
 	AddElement(/datum/element/connect_loc, loc_connections)
 	AddComponent(/datum/component/simple_rotation, ROTATION_NEEDS_ROOM)
+	update_nearby_tiles(TRUE)
 
 /obj/structure/windoor_assembly/Destroy()
 	set_density(FALSE)
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles()
 	return ..()
 /*
 /obj/structure/windoor_assembly/Move()
@@ -69,11 +70,11 @@
 	if(istype(mover, /obj/structure/windoor_assembly) || istype(mover, /obj/machinery/door/window))
 		return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
 
-/obj/structure/windoor_assembly/c_block(turf/T, vertical = FALSE)
+/obj/structure/windoor_assembly/c_airblock(turf/T, vertical = FALSE)
 	if(get_dir(loc, T) == dir)
-		return !density
+		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	else
-		return TRUE
+		return ZONE_BLOCKED
 
 /obj/structure/windoor_assembly/proc/on_exit(datum/source, atom/movable/leaving, direction)
 	SIGNAL_HANDLER
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index b10ec13e00a..2ee0237f9fb 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -11,7 +11,7 @@
 	can_be_unanchored = TRUE
 	resistance_flags = ACID_PROOF
 	armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 100)
-	can_atmos_pass = ATMOS_PASS_PROC
+	can_atmos_pass = CANPASS_PROC
 	rad_insulation = RAD_VERY_LIGHT_INSULATION
 	pass_flags_self = PASSGLASS
 	set_dir_on_move = FALSE
@@ -313,7 +313,7 @@
 		. += new /obj/item/shard(location)
 
 /obj/structure/window/proc/AfterRotation(mob/user, degrees)
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles(TRUE)
 
 /obj/structure/window/proc/on_painted(obj/structure/window/source, is_dark_color)
 	SIGNAL_HANDLER
@@ -329,16 +329,16 @@
 	return ..()
 
 /obj/structure/window/Move()
-	//var/turf/T = loc
+	update_nearby_tiles()
 	. = ..()
 	/*
 	if(anchored)
 		move_update_air(T)*/
 
-/obj/structure/window/c_block(turf/T, vertical = FALSE)
+/obj/structure/window/c_airblock(turf/T, vertical = FALSE)
 	if(!anchored || !density)
-		return TRUE
-	return !(fulltile || dir == get_dir(loc, T))
+		return ZONE_BLOCKED
+	return (fulltile || dir == get_dir(loc, T)) ? AIR_BLOCKED : ZONE_BLOCKED
 
 //This proc is used to update the icons of nearby windows.
 /obj/structure/window/proc/update_nearby_icons()
@@ -739,7 +739,7 @@
 	glass_type = /obj/item/stack/sheet/paperframes
 	heat_resistance = 233
 	decon_speed = 10
-	can_atmos_pass = ATMOS_PASS_YES
+	can_atmos_pass = CANPASS_ALWAYS
 	resistance_flags = FLAMMABLE
 	armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
 	knock_sound = SFX_PAGE_TURN
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index eba89bf0bc0..e508198fb0d 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -10,7 +10,7 @@
 	smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS)
 	max_integrity = 500
 	armor = list(MELEE = 100, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 70) //default + ignores melee
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 
 /obj/structure/shuttle/engine
 	name = "engine"
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 4e402941ffa..8a5988300a9 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -40,8 +40,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 			var/datum/component/wet_floor/WF = T.AddComponent(/datum/component/wet_floor)
 			WF.InheritComponent(slip)
 		if (copy_air)
-			var/turf/open/openTurf = T
-			openTurf.air.copy_from(air)
+			var/turf/openTurf = T
+			T.air.copy_from(air)
 
 //wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself
 /turf/proc/TerraformTurf(path, new_baseturf, flags)
@@ -83,17 +83,12 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	blueprint_data = null
 
 	if(connections) connections.erase_all()
-	/* ZASTURF
 	if(istype(src,/turf/simulated))
 		//Yeah, we're just going to rebuild the whole thing.
 		//Despite this being called a bunch during explosions,
 		//the zone will only really do heavy lifting once.
 		var/turf/simulated/S = src
 		if(S.zone) S.zone.rebuild()
-	*/
-
-	if(simulated && zone)
-		zone.rebuild()
 
 	var/list/old_baseturfs = baseturfs
 	var/old_type = type
@@ -324,7 +319,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 
 //////Assimilate Air//////
 /turf/open/proc/Assimilate_Air()
-	var/list/turf/turf_list = get_adjacent_open_turfs()
+	var/list/turf/turf_list = get_adjacent_open_turfs(src)
 	var/turf_count = LAZYLEN(turf_list)
 	if(blocks_air || !turf_count)
 		return
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index d6cfdd3e1b6..3dc68a83fa0 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -7,10 +7,9 @@
 	icon_state = "wall-0"
 	base_icon_state = "wall"
 	explosion_block = 1
-
+	blocks_air = AIR_BLOCKED
 	thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
 	heat_capacity = 62500 //a little over 5 cm thick , 62500 for 1 m by 2.5 m by 0.25 m iron wall. also indicates the temperature at wich the wall will melt (currently only able to melt with H/E pipes)
-	blocks_air = TRUE
 	baseturfs = /turf/open/floor/plating
 
 	flags_ricochet = RICOCHET_HARD
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 8adc73747e2..5f12102a624 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -148,7 +148,7 @@
 
 /turf/open/indestructible/binary
 	name = "tear in the fabric of reality"
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 	baseturfs = /turf/open/indestructible/binary
 	icon_state = "binary"
 	footstep = null
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 64d4c935819..4f680b91b90 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -26,7 +26,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
 	///The max temperature of the fire which it was subjected to
 	var/max_fire_temperature_sustained = 0
 
-	var/blocks_air = FALSE
+	var/blocks_air = AIR_ALLOWED
 
 	var/list/image/blueprint_data //for the station blueprints, images of objects eg: pipes
 
@@ -99,6 +99,10 @@ GLOBAL_LIST_EMPTY(station_turfs)
 		stack_trace("Warning: [src]([type]) initialized multiple times!")
 	flags_1 |= INITIALIZED_1
 
+	if(!blocks_air || !simulated)
+		air = new
+		air.copy_from(src.return_air())
+
 	// by default, vis_contents is inherited from the turf that was here before
 	vis_contents.Cut()
 
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index d4d7c0a4bda..78edeb5893a 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -23,7 +23,7 @@
 
 	// Remove all gases from all pipenets
 	for(var/datum/pipeline/PN as anything in SSzas.networks)
-		for(var/datum/gas_mixture/G in PN.air & PN.other_airs)
+		for(var/datum/gas_mixture/G in list(PN.air) & PN.other_airs)
 			G.gas = list()
 			G.update_values()
 
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 7e7c9947c04..b5c383f9f66 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -9,7 +9,7 @@
 	anchored = TRUE
 	layer = BELOW_MOB_LAYER
 	pass_flags_self = PASSBLOB
-	can_atmos_pass = ATMOS_PASS_PROC
+	can_atmos_pass = CANPASS_PROC
 	obj_flags = CAN_BE_HIT|BLOCK_Z_OUT_DOWN // stops blob mobs from falling on multiz.
 	/// How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed.
 	var/point_return = 0
@@ -98,7 +98,7 @@
 /obj/structure/blob/block_superconductivity()
 	return atmosblock
 
-/obj/structure/blob/c_block(turf/T, vertical = FALSE)
+/obj/structure/blob/c_airblock(turf/T, vertical = FALSE)
 	return !atmosblock
 
 /obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind.
diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm
index 06327591c95..e5d2b0ae346 100644
--- a/code/modules/art/statues.dm
+++ b/code/modules/art/statues.dm
@@ -6,7 +6,7 @@
 	density = TRUE
 	anchored = FALSE
 	max_integrity = 100
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 	material_modifier = 0.5
 	material_flags = MATERIAL_EFFECTS | MATERIAL_AFFECT_STATISTICS
 	blocks_emissive = EMISSIVE_BLOCK_UNIQUE
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index 8beaf560c01..2834b6c0860 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -1,4 +1,4 @@
-/*/turf/CanPass(atom/movable/mover, , height=1.5,air_group=0)
+/*/turf/CanPass(atom/movable/mover, border_dir, height=1.5,air_group=0)
 	if(target.blocks_air||blocks_air)
 		return 0
 
@@ -33,7 +33,12 @@
 	#ifdef ZASDBG
 	ASSERT(isturf(other))
 	#endif
-	return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1))
+	if(can_atmos_pass == CANPASS_PROC)
+		CRASH("Atmos pass assigned proc when proc doesn't exist.")
+	//var/direction = get_dir(src, other)
+	//return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1))
+	//return (AIR_BLOCKED*!CanPass(other, direction, 0))|(ZONE_BLOCKED*!CanPass(other, direction, 1))
+	return (AIR_BLOCKED*!ATMOS_CANPASS_NOTTURF(src))
 
 // This is a legacy proc only here for compatibility - you probably should just use ATMOS_CANPASS_TURF directly.
 /turf/c_airblock(turf/other)
@@ -52,7 +57,7 @@
 
 /atom
 	var/simulated = TRUE
-	var/can_atmos_pass = ATMOS_PASS_YES
-
-/atom/proc/c_block(turf/target_turf, vertical = FALSE)
-	return
+	var/can_atmos_pass = CANPASS_ALWAYS
+#ifdef ZASDBG
+	var/verbose = FALSE
+#endif
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 674c6265dd6..11506523110 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -64,7 +64,7 @@ Class Procs:
 //connection/New(turf/simulated/A, turf/simulated/B) ZASTURF
 /connection/New(turf/A, turf/B)
 	#ifdef ZASDBG
-	ASSERT(SSzas.has_valid_zone(A))
+	//ASSERT(TURF_HAS_VALID_ZONE(A))
 	//ASSERT(SSzas.has_valid_zone(B))
 	#endif
 	src.A = A
@@ -83,13 +83,13 @@ Class Procs:
 	if(!direct())
 		state |= CONNECTION_DIRECT
 		edge.direct++
-//	log_debug("Marked direct.")
+//	log_admin("Marked direct.")
 
 /connection/proc/mark_indirect()
 	if(direct())
 		state &= ~CONNECTION_DIRECT
 		edge.direct--
-//	log_debug("Marked indirect.")
+//	log_admin("Marked indirect.")
 
 /connection/proc/mark_space()
 	state |= CONNECTION_SPACE
@@ -103,18 +103,18 @@ Class Procs:
 /connection/proc/erase()
 	edge.remove_connection(src)
 	state |= CONNECTION_INVALID
-//	log_debug("Connection Erased: [state]")
+//	log_admin("Connection Erased: [state]")
 
 /connection/proc/update()
-//	log_debug("Updated, \...")
+//	log_admin("Updated, \...")
 	if(istype(A,/turf/open/space))
-//		log_debug("Invalid A.")
+//		log_admin("Invalid A.")
 		erase()
 		return
 
 	var/block_status = SSzas.air_blocked(A,B)
 	if(block_status & AIR_BLOCKED)
-//		log_debug("Blocked connection.")
+//		log_admin("Blocked connection.")
 		erase()
 		return
 	else if(block_status & ZONE_BLOCKED)
@@ -126,14 +126,14 @@ Class Procs:
 
 	if(state & CONNECTION_SPACE)
 		if(!b_is_space)
-//			log_debug("Invalid B.")
+//			log_admin("Invalid B.")
 			erase()
 			return
 		if(A.zone != zoneA)
-//			log_debug("Zone changed, \...")
+//			log_admin("Zone changed, \...")
 			if(!A.zone)
 				erase()
-//				log_debug("erased.")
+//				log_admin("erased.")
 				return
 			else
 				edge.remove_connection(src)
@@ -141,22 +141,22 @@ Class Procs:
 				edge.add_connection(src)
 				zoneA = A.zone
 
-//		log_debug("valid.")
+//		log_admin("valid.")
 		return
 
 	else if(b_is_space)
-//		log_debug("Invalid B.")
+//		log_admin("Invalid B.")
 		erase()
 		return
 
 	if(A.zone == B.zone)
-//		log_debug("A == B")
+//		log_admin("A == B")
 		erase()
 		return
 
 	if(A.zone != zoneA || (zoneB && (B.zone != zoneB)))
 
-//		log_debug("Zones changed, \...")
+//		log_admin("Zones changed, \...")
 		if(A.zone && B.zone)
 			edge.remove_connection(src)
 			edge = SSzas.get_edge(A.zone, B.zone)
@@ -164,9 +164,9 @@ Class Procs:
 			zoneA = A.zone
 			zoneB = B.zone
 		else
-//			log_debug("erased.")
+//			log_admin("erased.")
 			erase()
 			return
 
 
-//	log_debug("valid.")
+//	log_admin("valid.")
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index caafd283649..66b88abfc1e 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -72,11 +72,11 @@ Class Procs:
 /connection_edge/proc/add_connection(connection/c)
 	coefficient++
 	if(c.direct()) direct++
-//	log_debug("Connection added: [type] Coefficient: [coefficient]")
+//	log_admin("Connection added: [type] Coefficient: [coefficient]")
 
 
 /connection_edge/proc/remove_connection(connection/c)
-//	log_debug("Connection removed: [type] Coefficient: [coefficient-1]")
+//	log_admin("Connection removed: [type] Coefficient: [coefficient-1]")
 
 	coefficient--
 	if(coefficient <= 0)
@@ -87,7 +87,7 @@ Class Procs:
 
 /connection_edge/proc/erase()
 	SSzas.remove_edge(src)
-//	log_debug("[type] Erased.")
+//	log_admin("[type] Erased.")
 
 
 /connection_edge/proc/tick()
@@ -131,7 +131,7 @@ Class Procs:
 	A.edges.Add(src)
 	B.edges.Add(src)
 	//id = edge_id(A,B)
-//	log_debug("New edge between [A] and [B]")
+//	log_admin("New edge between [A] and [B]")
 
 
 /connection_edge/zone/add_connection(connection/c)
@@ -202,7 +202,7 @@ Class Procs:
 	A.edges.Add(src)
 	air = B.return_air()
 	//id = 52*A.id
-//	log_debug("New edge from [A] to [B].")
+//	log_admin("New edge from [A] to [B].")
 
 
 /connection_edge/unsimulated/add_connection(connection/c)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 8b138ef620a..95d2cc6c467 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -234,8 +234,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null)))
 
 		#ifdef FIREDBG
-		log_debug("***************** FIREDBG *****************")
-		log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!")
+		log_admin("***************** FIREDBG *****************")
+		log_admin("Burning [zone? zone.name : "zoneless gas_mixture"]!")
 		#endif
 
 		var/gas_fuel = 0
@@ -288,13 +288,13 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
 
 		#ifdef FIREDBG
-		log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")
-		log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")
-		log_debug("firelevel -> [firelevel] (gas: [gas_firelevel], liquid: [liquid_firelevel])")
-		log_debug("liquid_reaction_progress = [liquid_reaction_progress]")
-		log_debug("gas_reaction_progress = [gas_reaction_progress]")
-		log_debug("total_reaction_progress = [total_reaction_progress]")
-		log_debug("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ")
+		log_admin("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")
+		log_admin("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")
+		log_admin("firelevel -> [firelevel] (gas: [gas_firelevel], liquid: [liquid_firelevel])")
+		log_admin("liquid_reaction_progress = [liquid_reaction_progress]")
+		log_admin("gas_reaction_progress = [gas_reaction_progress]")
+		log_admin("total_reaction_progress = [total_reaction_progress]")
+		log_admin("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ")
 		#endif
 
 		//if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out
@@ -323,8 +323,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		update_values()
 
 		#ifdef FIREDBG
-		log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
-		log_debug("new temperature = [temperature]; new pressure = [return_pressure()]")
+		log_admin("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
+		log_admin("new temperature = [temperature]; new pressure = [return_pressure()]")
 		#endif
 
 		if (temperature<220)
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 6d502cbebbb..4dd66a56b9c 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -39,7 +39,9 @@
 			adjust_temp = loc.temperature
 		else
 			//var/turf/simulated/T = loc
-			var/turf/T = loc
+			var/turf/T = get_turf(loc)
+			if(!istype(T))
+				return
 			if(T.zone && T.zone.air)
 				adjust_temp = T.zone.air.temperature
 			else
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index bfe223bb8f3..afbe60689b3 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -114,7 +114,7 @@
 	ATMOS_CANPASS_TURF(s_block, src, src)
 	if(s_block & AIR_BLOCKED)
 		#ifdef ZASDBG
-		if(verbose) log_debug("Self-blocked.")
+		//if(verbose) log_admin("Self-blocked.")
 		//dbg(blocked)
 		#endif
 		if(zone)
@@ -147,7 +147,7 @@
 		if(block & AIR_BLOCKED)
 
 			#ifdef ZASDBG
-			if(verbose) log_debug("[d] is blocked.")
+			if(verbose) log_admin("[d] is blocked.")
 			//unsim.dbg(air_blocked, turn(180,d))
 			#endif
 
@@ -157,7 +157,7 @@
 		if(r_block & AIR_BLOCKED)
 
 			#ifdef ZASDBG
-			if(verbose) log_debug("[d] is blocked.")
+			if(verbose) log_admin("[d] is blocked.")
 			//dbg(air_blocked, d)
 			#endif
 
@@ -190,7 +190,7 @@
 					//    we are blocking them and not blocking ourselves - this prevents tiny zones from forming on doorways.
 					if(((block & ZONE_BLOCKED) && !(r_block & ZONE_BLOCKED)) || ((r_block & ZONE_BLOCKED) && !(s_block & ZONE_BLOCKED)))
 						#ifdef ZASDBG
-						if(verbose) log_debug("[d] is zone blocked.")
+						if(verbose) log_admin("[d] is zone blocked.")
 
 						//dbg(zone_blocked, d)
 						#endif
@@ -205,22 +205,22 @@
 
 						#ifdef ZASDBG
 						dbg(assigned)
-						if(verbose) log_debug("Added to [zone]")
+						if(verbose) log_admin("Added to [zone]")
 						#endif
 
 				else if(sim.zone != zone)
 
 					#ifdef ZASDBG
-					if(verbose) log_debug("Connecting to [sim.zone]")
+					if(verbose) log_admin("Connecting to [sim.zone]")
 					#endif
 
 					SSzas.connect(src, sim)
 
 
 			#ifdef ZASDBG
-				else if(verbose) log_debug("[d] has same zone.")
+				else if(verbose) log_admin("[d] has same zone.")
 
-			else if(verbose) log_debug("[d] has invalid zone.")
+			else if(verbose) log_admin("[d] has invalid zone.")
 			#endif
 
 		else
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index bd5a51db51f..532ce87360c 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -61,32 +61,32 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data) = new
 	for(var/p in subtypesof(/datum/xgm_gas))
 		var/datum/xgm_gas/gas = new p //avoid initial() because of potential New() actions
 
-		if(gas.id in xgm_gas_data.gases)
-			stack_trace("Duplicate gas id `[gas.id]` in `[p]`")
+		//if(gas.id in xgm_gas_data.gases)
+			//stack_trace("Duplicate gas id `[gas.id]` in `[p]`")
 
-		xgm_gas_data.gases += gas.id
-		xgm_gas_data.name[gas.id] = gas.name
-		xgm_gas_data.specific_heat[gas.id] = gas.specific_heat
-		xgm_gas_data.molar_mass[gas.id] = gas.molar_mass
+		gases += gas.id
+		name[gas.id] = gas.name
+		specific_heat[gas.id] = gas.specific_heat
+		molar_mass[gas.id] = gas.molar_mass
 		if(gas.overlay_limit)
-			xgm_gas_data.overlay_limit[gas.id] = gas.overlay_limit
-			xgm_gas_data.tile_overlay[gas.id] = gas.tile_overlay
-			xgm_gas_data.tile_overlay_color[gas.id] = gas.tile_color
-		xgm_gas_data.flags[gas.id] = gas.flags
-		xgm_gas_data.burn_product[gas.id] = gas.burn_product
+			overlay_limit[gas.id] = gas.overlay_limit
+			tile_overlay[gas.id] = gas.tile_overlay
+			tile_overlay_color[gas.id] = gas.tile_color
+		flags[gas.id] = gas.flags
+		burn_product[gas.id] = gas.burn_product
 
-		xgm_gas_data.symbol_html[gas.id] = gas.symbol_html
-		xgm_gas_data.symbol[gas.id] = gas.symbol
+		symbol_html[gas.id] = gas.symbol_html
+		symbol[gas.id] = gas.symbol
 
 		if(!isnull(gas.condensation_product) && !isnull(gas.condensation_point))
-			xgm_gas_data.condensation_points[gas.id] = gas.condensation_point
-			xgm_gas_data.condensation_products[gas.id] = gas.condensation_product
+			condensation_points[gas.id] = gas.condensation_point
+			condensation_products[gas.id] = gas.condensation_product
 
-		xgm_gas_data.breathed_product[gas.id] = gas.breathed_product
-		xgm_gas_data.hidden_from_codex[gas.id] = gas.hidden_from_codex
+		breathed_product[gas.id] = gas.breathed_product
+		hidden_from_codex[gas.id] = gas.hidden_from_codex
 
-		xgm_gas_data.base_value[gas.id] = gas.base_value
-		xgm_gas_data.purchaseable[gas.id] = gas.purchaseable
+		base_value[gas.id] = gas.base_value
+		purchaseable[gas.id] = gas.purchaseable
 
 	return 1
 
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index bb115cccdd8..0ea9c9697f9 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -304,7 +304,6 @@
 	temperature = sample.temperature
 
 	update_values()
-
 	return 1
 
 
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index b56ea3e74d5..cb183465d3a 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -59,11 +59,11 @@ Class Procs:
 	air.group_multiplier = 1
 	air.volume = CELL_VOLUME
 
-/zone/proc/add(turf/simulated/T)
+/zone/proc/add(turf/T)
 #ifdef ZASDBG
 	ASSERT(!invalid)
 	ASSERT(istype(T))
-	ASSERT(!SSzas.has_valid_zone(T))
+	ASSERT(!TURF_HAS_VALID_ZONE(T))
 #endif
 
 	var/datum/gas_mixture/turf_air = T.return_air()
@@ -77,7 +77,7 @@ Class Procs:
 		if(fuel) fuel_objs += fuel
 	T.update_graphic(air.graphic)
 
-/zone/proc/remove(turf/simulated/T)
+/zone/proc/remove(turf/T)
 #ifdef ZASDBG
 	ASSERT(!invalid)
 	ASSERT(istype(T))
diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm
index fbaa0ca3fae..56c5a082c09 100644
--- a/code/modules/error_handler/error_viewer.dm
+++ b/code/modules/error_handler/error_viewer.dm
@@ -116,7 +116,7 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache)
 	//  from the same source hasn't been shown too recently
 	if (error_source.next_message_at <= world.time)
 		var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly
-		//log_debug("Runtime in <b>[e.file]</b>, line <b>[e.line]</b>: <b>[html_encode(e.name)]</b> [error_entry.make_link(viewtext)]")
+		//log_admin("Runtime in <b>[e.file]</b>, line <b>[e.line]</b>: <b>[html_encode(e.name)]</b> [error_entry.make_link(viewtext)]")
 		var/err_msg_delay
 		if(config?.loaded)
 			err_msg_delay = CONFIG_GET(number/error_msg_delay)
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 57bd0bb9579..510e942ac7a 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -233,7 +233,7 @@
 	density = TRUE
 	var/buildstacktype = /obj/item/stack/sheet/iron
 	var/buildstackamount = 5
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 
 /obj/structure/fans/deconstruct()
 	if(!(flags_1 & NODECONSTRUCT_1))
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 51d2a3a4736..756ffc9cd74 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -285,7 +285,7 @@
 	anchored = TRUE
 	opacity = FALSE
 	density = TRUE
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 	duration = 82
 	color = COLOR_DARK_ORANGE
 
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 98e31b31286..a0a004e1ad6 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -11,7 +11,7 @@
 	use_power = NO_POWER_USE
 	interaction_flags_atom = NONE
 	interaction_flags_machine = NONE
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 	light_range = 4
 	layer = ABOVE_OBJ_LAYER
 	///First of the generators producing the containment field
@@ -35,7 +35,7 @@
 	if(field_gen_2)
 		field_gen_2.fields -= src
 		field_gen_2 = null
-	can_atmos_pass = ATMOS_PASS_YES
+	can_atmos_pass = CANPASS_ALWAYS
 	//air_update_turf(TRUE, FALSE)
 	return ..()
 
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 15c3d10c2e2..7e3a4b06481 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -32,7 +32,7 @@ no power level overlay is currently in the overlays list.
 	density = TRUE
 	use_power = NO_POWER_USE
 	max_integrity = 500
-	can_atmos_pass = ATMOS_PASS_YES
+	can_atmos_pass = CANPASS_ALWAYS
 	//100% immune to lasers and energy projectiles since it absorbs their energy.
 	armor = list(MELEE = 25, BULLET = 10, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 50, ACID = 70)
 	///Amount of energy stored, used for visual overlays (over 9000?)
@@ -199,7 +199,7 @@ no power level overlay is currently in the overlays list.
 
 /obj/machinery/field/generator/proc/turn_off()
 	active = FG_OFFLINE
-	can_atmos_pass = ATMOS_PASS_YES
+	can_atmos_pass = CANPASS_ALWAYS
 	//air_update_turf(TRUE, FALSE)
 	INVOKE_ASYNC(src, .proc/cleanup)
 	addtimer(CALLBACK(src, .proc/cool_down), 5 SECONDS)
@@ -275,7 +275,7 @@ no power level overlay is currently in the overlays list.
 		turn_off()
 		return
 	move_resist = INFINITY
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 	//air_update_turf(TRUE, TRUE)
 	addtimer(CALLBACK(src, .proc/setup_field, 1), 1)
 	addtimer(CALLBACK(src, .proc/setup_field, 2), 2)
diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm
index 1d6e9ced35a..3155d9a7c6f 100644
--- a/code/modules/power/turbine/turbine.dm
+++ b/code/modules/power/turbine/turbine.dm
@@ -1,7 +1,7 @@
 /obj/machinery/power/turbine
 	density = TRUE
 	resistance_flags = FIRE_PROOF
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 
 	///Theoretical volume of gas that's moving through the turbine, it expands the further it goes
 	var/gas_theoretical_volume = 0
diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm
index 8ca7afff9ba..a9a7c578af1 100644
--- a/code/modules/research/xenobiology/crossbreeding/_misc.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm
@@ -134,7 +134,7 @@ Slimecrossing Items
 	desc = "A mass of solidified slime gel - completely impenetrable, but it's melting away!"
 	icon = 'icons/obj/slimecrossing.dmi'
 	icon_state = "slimebarrier_thick"
-	can_atmos_pass = ATMOS_PASS_NO
+	can_atmos_pass = CANPASS_NEVER
 	opacity = TRUE
 	timeleft = 100
 
diff --git a/modular_pariah/modules/large_doors/code/large_doors.dm b/modular_pariah/modules/large_doors/code/large_doors.dm
index 7b161926250..f4ce1ee62a1 100644
--- a/modular_pariah/modules/large_doors/code/large_doors.dm
+++ b/modular_pariah/modules/large_doors/code/large_doors.dm
@@ -61,7 +61,7 @@
 	density = TRUE
 	opacity = TRUE
 	anchored = TRUE
-	can_atmos_pass = ATMOS_PASS_DENSITY
+	can_atmos_pass = CANPASS_DENSITY
 	var/parent_airlock
 
 /obj/airlock_filler_object/CanAllowThrough(atom/movable/mover, turf/target)

From e0e920af2b163783d30edf5ee3094275c6e982f9 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 18 Apr 2022 21:26:29 -0400
Subject: [PATCH 015/200] SSzas refactor + initial gas stuff

---
 .../IceRuins/icemoon_surface_asteroid.dmm     |  10 +-
 ...cemoon_underground_abandoned_homestead.dmm |  54 +--
 ..._underground_abandoned_plasma_facility.dmm |  70 +--
 .../icemoon_underground_frozen_comms.dmm      |  44 +-
 .../IceRuins/icemoon_underground_lavaland.dmm |   8 +-
 .../IceRuins/icemoon_underground_library.dmm  |  96 ++---
 .../icemoon_underground_wendigo_cave.dmm      |   6 +-
 .../lavaland_surface_biodome_winter.dmm       |   6 +-
 .../LavaRuins/lavaland_surface_cultaltar.dmm  |  16 +-
 .../LavaRuins/lavaland_surface_hermit.dmm     |   2 +-
 .../LavaRuins/lavaland_surface_pizzaparty.dmm |  72 ++--
 .../LavaRuins/lavaland_surface_ufo_crash.dmm  |  26 +-
 _maps/RandomRuins/SpaceRuins/TheDerelict.dmm  |  10 +-
 .../RandomRuins/SpaceRuins/caravanambush.dmm  |  22 +-
 .../SpaceRuins/hilbertshoteltestingsite.dmm   |   6 +-
 .../RandomRuins/SpaceRuins/thelizardsgas.dmm  |  12 +-
 _maps/RandomRuins/SpaceRuins/vaporwave.dmm    |  12 +-
 _maps/RandomZLevels/caves.dmm                 | 406 +++++++++---------
 _maps/RandomZLevels/challenge.dmm             |  10 +-
 _maps/RandomZLevels/moonoutpost19.dmm         | 338 +++++++--------
 _maps/RandomZLevels/snowdin.dmm               |  36 +-
 _maps/RandomZLevels/undergroundoutpost45.dmm  |  98 ++---
 _maps/RandomZLevels/wildwest.dmm              |   6 +-
 .../map_files/Deltastation/DeltaStation2.dmm  |   4 +-
 .../IcemoonUnderground_Above.dmm              |  24 +-
 _maps/map_files/MetaStation/MetaStation.dmm   |   6 +-
 _maps/map_files/generic/CentCom.dmm           |  36 +-
 .../maintenance_miningsolar_3.dmm             |   2 +-
 _maps/shuttles/ruin_caravan_victim.dmm        |  38 +-
 _maps/templates/battlecruiser_starfury.dmm    |   6 +-
 .../templates/heretic_sacrifice_template.dmm  |  40 +-
 code/controllers/subsystem/zas.dm             | 369 ++++++++++++----
 code/game/turfs/closed/minerals.dm            |  32 +-
 code/game/turfs/open/_open.dm                 |  12 +-
 code/game/turfs/open/ashplanet.dm             |   2 +-
 code/game/turfs/open/asteroid.dm              |  22 +-
 code/game/turfs/open/basalt.dm                |   2 +-
 code/game/turfs/open/chasm.dm                 |   6 +-
 code/game/turfs/open/floor/fancy_floor.dm     |  80 ++--
 code/game/turfs/open/floor/hull.dm            |   2 +-
 code/game/turfs/open/floor/iron_floor.dm      |  32 +-
 code/game/turfs/open/floor/mineral_floor.dm   |  26 +-
 code/game/turfs/open/floor/misc_floor.dm      |  20 +-
 .../turfs/open/floor/plating/misc_plating.dm  |  14 +-
 code/game/turfs/open/floor/reinf_floor.dm     |  50 +--
 code/game/turfs/open/glass.dm                 |   2 +-
 code/game/turfs/open/grass.dm                 |   2 +-
 code/game/turfs/open/ice.dm                   |   2 +-
 code/game/turfs/open/lava.dm                  |   6 +-
 code/game/turfs/open/openspace.dm             |   4 +-
 code/game/turfs/open/planet.dm                |   6 +-
 code/game/turfs/open/snow.dm                  |   2 +-
 code/game/turfs/open/water.dm                 |   6 +-
 code/modules/atmospherics/ZAS/Turf.dm         |   3 +-
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |   1 +
 .../environmental/LINDA_turf_tile.dm          |  14 +-
 .../atmospherics/gasmixtures/gas_mixture.dm   |   2 +-
 .../awaymissions/mission_code/snowdin.dm      |   4 +-
 code/modules/holodeck/turfs.dm                |   4 +-
 .../ruins/icemoonruin_code/hotsprings.dm      |   2 +-
 .../lavalandruin_code/elephantgraveyard.dm    |   2 +-
 code/modules/unit_tests/breath.dm             |  12 +-
 62 files changed, 1240 insertions(+), 1025 deletions(-)

diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
index 42ca9e3a167..26856fe193f 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
@@ -12,7 +12,7 @@
 /obj/item/clothing/shoes/bronze,
 /obj/item/clothing/head/bronze,
 /turf/open/floor/bronze{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/icemoon/surface)
 "m" = (
@@ -20,12 +20,12 @@
 	name = "empowered bronze spear"
 	},
 /turf/open/floor/bronze{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/icemoon/surface)
 "o" = (
 /turf/open/floor/bronze{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/icemoon/surface)
 "A" = (
@@ -66,7 +66,7 @@
 "L" = (
 /mob/living/simple_animal/hostile/megafauna/clockwork_defender,
 /turf/open/floor/bronze{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/icemoon/surface)
 "M" = (
@@ -95,7 +95,7 @@
 	},
 /obj/item/pen,
 /turf/open/floor/bronze{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/icemoon/surface)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm
index 035d091871c..9fc33f694ed 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm
@@ -6,7 +6,7 @@
 "cP" = (
 /mob/living/simple_animal/hostile/asteroid/polarbear,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "dy" = (
@@ -27,7 +27,7 @@
 	},
 /obj/item/plate,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "ht" = (
@@ -38,7 +38,7 @@
 /obj/structure/barricade/wooden/crude/snow,
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "kj" = (
@@ -58,7 +58,7 @@
 /area/icemoon/underground/explored)
 "ng" = (
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "nq" = (
@@ -78,7 +78,7 @@
 	dir = 8
 	},
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "qd" = (
@@ -103,14 +103,14 @@
 	pixel_y = 11
 	},
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "uA" = (
 /obj/structure/barricade/wooden/snowed,
 /turf/open/floor/wood{
 	icon_state = "wood-broken6";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "uG" = (
@@ -128,7 +128,7 @@
 /obj/item/ammo_casing/shotgun/buckshot,
 /obj/item/ammo_casing/shotgun/buckshot,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "vk" = (
@@ -153,7 +153,7 @@
 	pixel_y = 3
 	},
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "wl" = (
@@ -163,7 +163,7 @@
 /obj/effect/turf_decal/siding/wood,
 /obj/structure/mineral_door/wood,
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "wN" = (
@@ -174,7 +174,7 @@
 	dir = 4
 	},
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "yO" = (
@@ -190,13 +190,13 @@
 "zT" = (
 /obj/structure/bed/dogbed,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Cv" = (
 /obj/structure/bookcase/random/religion,
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Ea" = (
@@ -212,7 +212,7 @@
 	pixel_y = 5
 	},
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "El" = (
@@ -221,7 +221,7 @@
 	},
 /obj/item/flashlight/lantern,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Ez" = (
@@ -249,14 +249,14 @@
 	dir = 8
 	},
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Hy" = (
 /obj/structure/barricade/wooden/crude/snow,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "HF" = (
@@ -268,7 +268,7 @@
 	pixel_y = -8
 	},
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Iz" = (
@@ -280,7 +280,7 @@
 	pixel_y = -7
 	},
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Mf" = (
@@ -294,7 +294,7 @@
 /obj/structure/bed,
 /obj/item/bedsheet/patriot,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "NP" = (
@@ -312,12 +312,12 @@
 /obj/item/seeds/coffee,
 /obj/item/seeds/coffee,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "QI" = (
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Rf" = (
@@ -336,7 +336,7 @@
 /obj/structure/mineral_door/wood,
 /obj/item/assembly/mousetrap/armed,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Sv" = (
@@ -365,14 +365,14 @@
 /obj/structure/barricade/wooden/snowed,
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Vf" = (
 /obj/structure/barricade/wooden/snowed,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "VV" = (
@@ -384,7 +384,7 @@
 	dir = 8
 	},
 /turf/open/floor/stone{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Zg" = (
@@ -394,7 +394,7 @@
 	},
 /obj/structure/mineral_door/wood,
 /turf/open/floor/wood/large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
index c322b7c33d0..3d95d429115 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
@@ -307,7 +307,7 @@
 /obj/item/storage/toolbox/electrical,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "dY" = (
@@ -450,7 +450,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "gD" = (
@@ -501,7 +501,7 @@
 /obj/item/pickaxe,
 /obj/item/clothing/head/hardhat/weldhat/orange,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "hd" = (
@@ -509,7 +509,7 @@
 /obj/structure/closet/crate,
 /obj/item/stack/sheet/mineral/plasma/five,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "hr" = (
@@ -651,7 +651,7 @@
 	},
 /obj/structure/plasticflaps,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "ja" = (
@@ -679,7 +679,7 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/light/broken/directional/west,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "jN" = (
@@ -719,7 +719,7 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "ku" = (
@@ -801,7 +801,7 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/turf_decal/caution,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "lG" = (
@@ -851,7 +851,7 @@
 /obj/item/flashlight/lantern,
 /obj/machinery/light/small/built/directional/west,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "ms" = (
@@ -876,7 +876,7 @@
 "mA" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "mG" = (
@@ -969,7 +969,7 @@
 	name = "Interior Access"
 	},
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "oc" = (
@@ -1005,7 +1005,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "oE" = (
@@ -1141,7 +1141,7 @@
 /obj/machinery/atmospherics/components/tank/plasma,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "qP" = (
@@ -1226,7 +1226,7 @@
 	},
 /obj/item/stack/sheet/mineral/plasma/thirty,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "sq" = (
@@ -1376,7 +1376,7 @@
 	},
 /mob/living/simple_animal/hostile/asteroid/wolf,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "uq" = (
@@ -1414,7 +1414,7 @@
 /obj/item/tank/internals/emergency_oxygen/empty,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "ve" = (
@@ -1447,7 +1447,7 @@
 	},
 /obj/effect/mapping_helpers/airlock/abandoned,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "wc" = (
@@ -1469,7 +1469,7 @@
 /obj/machinery/atmospherics/components/tank/air,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "wu" = (
@@ -1615,7 +1615,7 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/power/apc/auto_name/directional/west,
 /turf/open/floor/iron/smooth_large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "Ae" = (
@@ -1698,7 +1698,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "BJ" = (
@@ -1781,14 +1781,14 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "CJ" = (
 /obj/effect/turf_decal/delivery,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "CU" = (
@@ -2034,7 +2034,7 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "Id" = (
@@ -2101,7 +2101,7 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/light/small/built/directional/west,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "Jp" = (
@@ -2138,7 +2138,7 @@
 /mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer,
 /obj/machinery/light_switch/directional/north,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "Jy" = (
@@ -2360,7 +2360,7 @@
 /obj/machinery/power/smes/engineering,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "MU" = (
@@ -2442,7 +2442,7 @@
 /obj/machinery/light/small/directional/north,
 /obj/machinery/light_switch/directional/north,
 /turf/open/floor/iron/smooth_large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "Ny" = (
@@ -2516,7 +2516,7 @@
 "OF" = (
 /obj/effect/decal/cleanable/glass,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "OJ" = (
@@ -2526,7 +2526,7 @@
 	},
 /obj/machinery/light_switch/directional/north,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "OM" = (
@@ -2564,7 +2564,7 @@
 	dir = 1
 	},
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "Px" = (
@@ -2648,7 +2648,7 @@
 /obj/machinery/door/airlock/external/glass/ruin,
 /obj/effect/mapping_helpers/airlock/abandoned,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "Qn" = (
@@ -2696,7 +2696,7 @@
 /obj/structure/rack,
 /obj/effect/turf_decal/bot_white,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "Rf" = (
@@ -2970,7 +2970,7 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_half{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "Xj" = (
@@ -2984,7 +2984,7 @@
 /obj/structure/cable,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/operations)
 "XC" = (
@@ -2992,7 +2992,7 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/light/small/broken/directional/west,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/plasma_facility/commons)
 "XI" = (
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm
index b737262d596..e23841cab79 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm
@@ -19,7 +19,7 @@
 /obj/structure/table/reinforced/rglass,
 /obj/item/radio/intercom,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "cO" = (
@@ -40,7 +40,7 @@
 	},
 /obj/machinery/door/airlock/external/glass/ruin,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "gz" = (
@@ -57,7 +57,7 @@
 /area/icemoon/underground/unexplored/rivers)
 "kr" = (
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "oj" = (
@@ -65,18 +65,18 @@
 /obj/structure/bed,
 /obj/item/bedsheet/dorms,
 /turf/open/floor/iron/grimy{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "oD" = (
 /mob/living/simple_animal/hostile/asteroid/wolf,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "oT" = (
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "qS" = (
@@ -89,13 +89,13 @@
 	pixel_y = 7
 	},
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "rm" = (
 /obj/structure/table/reinforced/rglass,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "rn" = (
@@ -110,7 +110,7 @@
 "st" = (
 /obj/machinery/door/airlock/public,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "sM" = (
@@ -132,13 +132,13 @@
 "uz" = (
 /obj/structure/tank_dispenser,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "vh" = (
 /obj/item/chair/plastic,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "wg" = (
@@ -152,7 +152,7 @@
 	pixel_y = 20
 	},
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "wP" = (
@@ -166,7 +166,7 @@
 /obj/structure/closet/wardrobe/grey,
 /obj/item/clothing/gloves/color/plasmaman,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "yW" = (
@@ -185,7 +185,7 @@
 /obj/item/clothing/head/helmet/space/plasmaman,
 /obj/item/clothing/mask/breath,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "zk" = (
@@ -220,7 +220,7 @@
 /obj/item/toy/crayon/spraycan,
 /obj/machinery/light/small/directional/north,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Cu" = (
@@ -265,7 +265,7 @@
 /obj/structure/dresser,
 /obj/machinery/light/small/broken/directional/west,
 /turf/open/floor/iron/grimy{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "GH" = (
@@ -286,7 +286,7 @@
 /obj/structure/closet/wardrobe/grey,
 /obj/effect/spawner/random/maintenance/three,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Jh" = (
@@ -330,13 +330,13 @@
 /obj/effect/turf_decal/siding/wood,
 /obj/machinery/door/airlock/shuttle,
 /turf/open/floor/iron/grimy{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "NO" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/grimy{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Oi" = (
@@ -379,7 +379,7 @@
 /obj/effect/turf_decal/stripes/line,
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/iron/smooth{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "SR" = (
@@ -412,14 +412,14 @@
 	},
 /obj/machinery/light/small/directional/south,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Ws" = (
 /obj/structure/closet/wardrobe/grey,
 /obj/item/clothing/under/plasmaman,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/powered/shuttle)
 "Zd" = (
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
index cc8a6ae371f..7746d05bf10 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
@@ -12,7 +12,7 @@
 	},
 /obj/item/pen,
 /turf/open/misc/asteroid{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/icemoon/underground)
 "q" = (
@@ -34,7 +34,7 @@
 "A" = (
 /obj/effect/mob_spawn/corpse/human/skeleton,
 /turf/open/misc/asteroid{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/icemoon/underground)
 "E" = (
@@ -56,12 +56,12 @@
 "V" = (
 /obj/item/storage/toolbox/mechanical/old/clean,
 /turf/open/misc/asteroid{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/icemoon/underground)
 "Z" = (
 /turf/open/misc/asteroid{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/icemoon/underground)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm
index 4124628eafa..357144bca96 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm
@@ -16,25 +16,25 @@
 /area/icemoon/underground/unexplored)
 "ae" = (
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "af" = (
 /obj/item/stack/sheet/mineral/wood,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "ag" = (
 /obj/item/feather,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "ah" = (
 /obj/structure/bookcase/random,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "ai" = (
@@ -64,21 +64,21 @@
 "ao" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "ap" = (
 /obj/item/stack/sheet/mineral/wood,
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aq" = (
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "ar" = (
@@ -87,7 +87,7 @@
 "at" = (
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "au" = (
@@ -108,7 +108,7 @@
 "az" = (
 /obj/item/paper/crumpled/fluff/stations/lavaland/library/diary,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aA" = (
@@ -118,7 +118,7 @@
 "aB" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken6";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aC" = (
@@ -127,28 +127,28 @@
 /area/ruin/unpowered/buried_library)
 "aD" = (
 /turf/open/floor/carpet/black{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aE" = (
 /obj/item/stack/sheet/mineral/wood,
 /obj/item/book/manual/random,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aG" = (
 /obj/structure/table/bronze,
 /obj/item/stack/ore/slag,
 /turf/open/floor/carpet/black{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aH" = (
 /obj/structure/table/bronze,
 /obj/item/statuebust/hippocratic,
 /turf/open/floor/carpet/black{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aI" = (
@@ -169,7 +169,7 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aM" = (
@@ -180,13 +180,13 @@
 "aN" = (
 /obj/structure/statue/sandstone/venus,
 /turf/open/floor/carpet/black{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aO" = (
 /mob/living/simple_animal/pet/fox,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aP" = (
@@ -197,13 +197,13 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aR" = (
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aS" = (
@@ -219,7 +219,7 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aU" = (
@@ -230,7 +230,7 @@
 /obj/item/stack/sheet/mineral/wood,
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "aW" = (
@@ -250,7 +250,7 @@
 /obj/structure/fluff/paper/stack,
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "ba" = (
@@ -268,7 +268,7 @@
 	dir = 1
 	},
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bd" = (
@@ -278,7 +278,7 @@
 	},
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "be" = (
@@ -286,7 +286,7 @@
 	dir = 5
 	},
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bf" = (
@@ -295,7 +295,7 @@
 	dir = 4
 	},
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bg" = (
@@ -306,7 +306,7 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /mob/living/simple_animal/pet/fox,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bi" = (
@@ -321,7 +321,7 @@
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
 	icon_state = "wood-broken4";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bl" = (
@@ -345,7 +345,7 @@
 /obj/structure/mineral_door/wood,
 /obj/structure/barricade/wooden/crude/snow,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "br" = (
@@ -368,26 +368,26 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken4";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bw" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bx" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "by" = (
 /obj/structure/statue/bronze/marx,
 /turf/open/floor/carpet/black{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bz" = (
@@ -403,7 +403,7 @@
 "bB" = (
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/carpet/black{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bC" = (
@@ -413,34 +413,34 @@
 	},
 /mob/living/simple_animal/pet/fox,
 /turf/open/floor/wood{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bD" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bE" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bF" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bG" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken6";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bH" = (
@@ -448,28 +448,28 @@
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
 	icon_state = "wood-broken4";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bI" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bJ" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken2";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bK" = (
 /obj/item/stack/sheet/mineral/wood,
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bL" = (
@@ -478,7 +478,7 @@
 	},
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bM" = (
@@ -487,7 +487,7 @@
 	},
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bN" = (
@@ -495,20 +495,20 @@
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bP" = (
 /obj/item/paper/crumpled/bloody/fluff/stations/lavaland/library/warning,
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 "bQ" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/ruin/unpowered/buried_library)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
index 910598c44b4..e58ad558b34 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
@@ -15,7 +15,7 @@
 "q" = (
 /mob/living/simple_animal/hostile/megafauna/wendigo,
 /turf/open/indestructible/necropolis{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "z" = (
@@ -23,7 +23,7 @@
 	id = "wendigo arena"
 	},
 /turf/open/indestructible/necropolis{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "K" = (
@@ -34,7 +34,7 @@
 /area/icemoon/underground/unexplored)
 "N" = (
 /turf/open/indestructible/necropolis{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "U" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
index e381d3dc0e0..cd6d52fab41 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
@@ -204,7 +204,7 @@
 	dir = 1
 	},
 /turf/open/floor/wood{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180";
+	initial_gas = "o2=22;n2=82;TEMP=180";
 	name = "bridge"
 	},
 /area/ruin/powered/snow_biodome)
@@ -276,7 +276,7 @@
 /obj/machinery/light/built/directional/north,
 /obj/effect/mapping_helpers/no_lava,
 /turf/open/floor/pod/dark{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/powered/snow_biodome)
 "og" = (
@@ -423,7 +423,7 @@
 "PM" = (
 /obj/effect/turf_decal/siding/wood,
 /turf/open/floor/wood{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180";
+	initial_gas = "o2=22;n2=82;TEMP=180";
 	name = "bridge"
 	},
 /area/ruin/powered/snow_biodome)
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
index a2b3d227d5d..553b09f55fc 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
@@ -4,7 +4,7 @@
 /area/template_noop)
 "b" = (
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "c" = (
@@ -24,21 +24,21 @@
 "g" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "i" = (
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "k" = (
 /obj/effect/decal/remains/human,
 /obj/item/melee/cultblade,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "l" = (
@@ -46,13 +46,13 @@
 /obj/item/clothing/shoes/cult,
 /obj/item/clothing/suit/hooded/cultrobes,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "m" = (
 /obj/effect/decal/remains/human,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "o" = (
@@ -74,7 +74,7 @@
 	name = "ohfuck"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "q" = (
@@ -83,7 +83,7 @@
 /obj/item/clothing/suit/hooded/cultrobes,
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered/cultaltar)
 "s" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
index 8ce56831f6b..5ec32d26957 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
@@ -164,7 +164,7 @@
 "J" = (
 /obj/effect/spawner/structure/window/reinforced/shuttle,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/powered)
 "L" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
index ba0c6f9a672..1bb066f4c07 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
@@ -15,14 +15,14 @@
 "e" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "f" = (
 /obj/structure/table/wood,
 /obj/item/storage/box/cups,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "g" = (
@@ -32,27 +32,27 @@
 	},
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "h" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "i" = (
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "j" = (
 /obj/item/food/pizzaslice/mushroom,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "k" = (
@@ -60,7 +60,7 @@
 /obj/effect/spawner/random/food_or_drink/pizzaparty,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "l" = (
@@ -70,42 +70,42 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/cobweb/cobweb2,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "m" = (
 /obj/item/chair/wood/wings,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "n" = (
 /obj/structure/glowshroom/single,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "o" = (
 /obj/item/plate,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "p" = (
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "q" = (
 /obj/item/chair/wood/wings,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "r" = (
@@ -116,25 +116,25 @@
 	name = "party hat"
 	},
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "s" = (
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "t" = (
 /obj/structure/chair/wood/wings,
 /obj/effect/decal/remains/human,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "u" = (
 /obj/structure/glowshroom/single,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "v" = (
@@ -146,21 +146,21 @@
 /obj/item/kitchen/fork,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "x" = (
 /obj/structure/table/wood,
 /obj/effect/spawner/random/food_or_drink/pizzaparty,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "y" = (
 /obj/structure/table/wood,
 /obj/item/plate,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "z" = (
@@ -168,7 +168,7 @@
 /obj/structure/glowshroom/single,
 /obj/item/a_gift,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "A" = (
@@ -176,7 +176,7 @@
 /obj/item/plate,
 /obj/item/kitchen/fork,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "C" = (
@@ -185,7 +185,7 @@
 	},
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "D" = (
@@ -193,47 +193,47 @@
 /obj/item/food/pizzaslice/margherita,
 /obj/item/plate,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "E" = (
 /obj/structure/table/wood,
 /obj/item/food/pizzaslice/meat,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "F" = (
 /obj/structure/table/wood,
 /obj/item/food/cake/birthday,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "G" = (
 /obj/structure/table/wood,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "H" = (
 /obj/item/chair/wood/wings,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "I" = (
 /obj/item/kitchen/fork,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "J" = (
 /obj/structure/glowshroom/single,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "K" = (
@@ -243,21 +243,21 @@
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "L" = (
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "M" = (
 /obj/effect/decal/cleanable/dirt,
 /obj/item/a_gift,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "N" = (
@@ -269,19 +269,19 @@
 /obj/item/knife/kitchen,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "P" = (
 /obj/machinery/light/directional/east,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "Q" = (
 /turf/open/floor/plating{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
index 372731e7223..e06a4ff91d2 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
@@ -16,12 +16,12 @@
 	team_number = 100
 	},
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "k" = (
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "l" = (
@@ -29,59 +29,59 @@
 	team_number = 100
 	},
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "o" = (
 /obj/item/hemostat/alien,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "p" = (
 /obj/effect/mob_spawn/corpse/human/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "q" = (
 /obj/structure/closet/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "s" = (
 /obj/structure/table/optable/abductor,
 /obj/item/cautery/alien,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "t" = (
 /obj/structure/table/abductor,
 /obj/item/storage/box/alienhandcuffs,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "v" = (
 /obj/item/scalpel/alien,
 /obj/item/surgical_drapes,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "w" = (
 /obj/item/retractor/alien,
 /obj/item/paper/guides/antag/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "y" = (
 /obj/machinery/abductor/gland_dispenser,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "z" = (
@@ -89,13 +89,13 @@
 /obj/item/surgicaldrill/alien,
 /obj/item/circular_saw/alien,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 "A" = (
 /obj/structure/bed/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas_mix = "LAVALAND_ATMOS"
+	initial_gas = "LAVALAND_ATMOS"
 	},
 /area/ruin/unpowered)
 
diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
index 37862ff0d6e..638fa459a2b 100644
--- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
+++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
@@ -2443,7 +2443,7 @@
 "lw" = (
 /obj/machinery/portable_atmospherics/canister/air,
 /turf/open/floor/engine/air{
-	initial_gas_mix = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
 	},
 /area/ruin/space/derelict/atmospherics)
 "lx" = (
@@ -2519,7 +2519,7 @@
 	chamber_id = "ks13"
 	},
 /turf/open/floor/engine/air{
-	initial_gas_mix = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
 	},
 /area/ruin/space/derelict/atmospherics)
 "lO" = (
@@ -2527,7 +2527,7 @@
 	chamber_id = "ks13"
 	},
 /turf/open/floor/engine/air{
-	initial_gas_mix = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
 	},
 /area/ruin/space/derelict/atmospherics)
 "lP" = (
@@ -2666,7 +2666,7 @@
 "mq" = (
 /turf/open/floor/iron{
 	icon_state = "damaged2";
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/space/derelict/atmospherics)
 "mr" = (
@@ -3157,7 +3157,7 @@
 	chamber_id = "ks13"
 	},
 /turf/open/floor/engine/air{
-	initial_gas_mix = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
 	},
 /area/ruin/space/derelict/atmospherics)
 "rC" = (
diff --git a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
index 0f8fa5f5f77..269f8102e67 100644
--- a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
+++ b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
@@ -112,7 +112,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "aD" = (
@@ -132,7 +132,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "aI" = (
@@ -148,14 +148,14 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "aM" = (
 /obj/effect/decal/cleanable/blood,
 /obj/effect/turf_decal/tile/blue,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "aN" = (
@@ -193,7 +193,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "aR" = (
@@ -486,7 +486,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "gY" = (
@@ -513,7 +513,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "hm" = (
@@ -610,7 +610,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "hB" = (
@@ -813,7 +813,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter2)
 "ix" = (
@@ -883,7 +883,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter3)
 "iT" = (
@@ -923,7 +923,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter2)
 "ja" = (
diff --git a/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm b/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm
index b73909ba583..1e7ece5606b 100644
--- a/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm
+++ b/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm
@@ -223,7 +223,7 @@
 /area/ruin/unpowered/no_grav)
 "K" = (
 /turf/open/floor/iron/stairs/right{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 "Q" = (
@@ -237,12 +237,12 @@
 /area/ruin/space/has_grav/hilbertresearchfacility)
 "U" = (
 /turf/open/floor/iron/stairs/medium{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 "X" = (
 /turf/open/floor/iron/stairs/left{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 
diff --git a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm
index 58a0bfafca9..74dee33ca80 100644
--- a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm
+++ b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm
@@ -118,7 +118,7 @@
 	chamber_id = "lizardgas"
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas_mix = "plasma=35000;TEMP=293.15"
+	initial_gas = "plasma=35000;TEMP=293.15"
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "mN" = (
@@ -298,7 +298,7 @@
 /area/template_noop)
 "DG" = (
 /turf/open/floor/engine/plasma{
-	initial_gas_mix = "plasma=35000;TEMP=293.15"
+	initial_gas = "plasma=35000;TEMP=293.15"
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Es" = (
@@ -423,7 +423,7 @@
 "OQ" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/floor/engine/plasma{
-	initial_gas_mix = "plasma=35000;TEMP=293.15"
+	initial_gas = "plasma=35000;TEMP=293.15"
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Pb" = (
@@ -457,7 +457,7 @@
 	name = "Zingo"
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas_mix = "plasma=35000;TEMP=293.15"
+	initial_gas = "plasma=35000;TEMP=293.15"
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "RB" = (
@@ -499,7 +499,7 @@
 	dir = 4
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas_mix = "plasma=35000;TEMP=293.15"
+	initial_gas = "plasma=35000;TEMP=293.15"
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Um" = (
@@ -549,7 +549,7 @@
 	chamber_id = "lizardgas"
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas_mix = "plasma=35000;TEMP=293.15"
+	initial_gas = "plasma=35000;TEMP=293.15"
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Ys" = (
diff --git a/_maps/RandomRuins/SpaceRuins/vaporwave.dmm b/_maps/RandomRuins/SpaceRuins/vaporwave.dmm
index e988f85602b..f20af636567 100644
--- a/_maps/RandomRuins/SpaceRuins/vaporwave.dmm
+++ b/_maps/RandomRuins/SpaceRuins/vaporwave.dmm
@@ -118,13 +118,13 @@
 /obj/effect/turf_decal/sand,
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 "B" = (
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 "C" = (
@@ -135,7 +135,7 @@
 	},
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 "D" = (
@@ -155,14 +155,14 @@
 	},
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 "G" = (
 /obj/effect/turf_decal/stripes/asteroid/line,
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 "H" = (
@@ -216,7 +216,7 @@
 /obj/machinery/light/small/directional/north,
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/ruin/unpowered/no_grav)
 
diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm
index 65506463dd4..ba60d17af25 100644
--- a/_maps/RandomZLevels/caves.dmm
+++ b/_maps/RandomZLevels/caves.dmm
@@ -11,14 +11,14 @@
 "ad" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ah" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
@@ -27,25 +27,25 @@
 /area/awaymission/caves/bmp_asteroid/level_three)
 "ao" = (
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ap" = (
 /obj/structure/destructible/cult/pylon,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ar" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "as" = (
 /obj/effect/decal/cleanable/blood/gibs/old,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "au" = (
@@ -58,7 +58,7 @@
 /obj/item/clothing/mask/gas/clown_hat,
 /obj/item/organ/heart/demon,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "av" = (
@@ -67,13 +67,13 @@
 	name = "shock rune"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aw" = (
 /obj/effect/decal/remains/human,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ax" = (
@@ -87,39 +87,39 @@
 	},
 /obj/item/coin/antagtoken,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "az" = (
 /obj/structure/constructshell,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aA" = (
 /obj/structure/girder/cult,
 /obj/item/stack/sheet/runed_metal,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aB" = (
 /obj/structure/spawner/skeleton,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aC" = (
 /obj/structure/bed,
 /obj/item/bedsheet/cult,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aD" = (
 /obj/item/stack/sheet/runed_metal,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aE" = (
@@ -132,7 +132,7 @@
 	name = "\proper an extremely flamboyant book"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aF" = (
@@ -143,13 +143,13 @@
 	name = "weak forcefield"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aG" = (
 /obj/item/ectoplasm,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aH" = (
@@ -158,7 +158,7 @@
 "aI" = (
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aJ" = (
@@ -166,7 +166,7 @@
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aK" = (
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aM" = (
@@ -175,7 +175,7 @@
 	id = "minedeep"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aP" = (
@@ -185,33 +185,33 @@
 	name = "rusty ladder"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aR" = (
 /obj/effect/forcefield/cult,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aS" = (
 /obj/structure/girder/cult,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aV" = (
 /obj/effect/forcefield/cult,
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aW" = (
 /obj/structure/barricade/wooden,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aX" = (
@@ -225,7 +225,7 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aZ" = (
@@ -234,26 +234,26 @@
 	name = "flame rune"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ba" = (
 /obj/structure/destructible/cult/item_dispenser/altar,
 /obj/item/book/granter/martial/plasma_fist/nobomb,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bf" = (
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bl" = (
 /obj/structure/ore_box,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "bm" = (
@@ -261,7 +261,7 @@
 	calibrated = 0
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bn" = (
@@ -272,14 +272,14 @@
 /obj/effect/decal/cleanable/blood,
 /obj/structure/spawner/skeleton,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bz" = (
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bA" = (
@@ -287,25 +287,25 @@
 /obj/item/necromantic_stone,
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bC" = (
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "bD" = (
 /mob/living/simple_animal/hostile/skeleton,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "bE" = (
 /obj/structure/destructible/cult/pylon,
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bF" = (
@@ -315,7 +315,7 @@
 	name = "rusty ladder"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "bK" = (
@@ -327,7 +327,7 @@
 "bM" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid)
@@ -337,7 +337,7 @@
 "bO" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
@@ -350,12 +350,12 @@
 "bS" = (
 /obj/structure/barricade/wooden,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "bT" = (
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "bU" = (
@@ -369,19 +369,19 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "bY" = (
 /mob/living/simple_animal/hostile/skeleton,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "ca" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "ce" = (
@@ -390,12 +390,12 @@
 	id = "mineintro"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cf" = (
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cg" = (
@@ -407,7 +407,7 @@
 "cl" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cm" = (
@@ -415,24 +415,24 @@
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cn" = (
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cp" = (
 /obj/structure/table,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cr" = (
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cs" = (
 /obj/item/shard,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "ct" = (
@@ -440,36 +440,36 @@
 /obj/item/stack/rods,
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cu" = (
 /obj/effect/decal/cleanable/blood/gibs,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cv" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cw" = (
 /obj/item/stack/rods,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cx" = (
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "cA" = (
 /obj/effect/decal/remains/xeno,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cB" = (
@@ -478,7 +478,7 @@
 	},
 /obj/effect/decal/cleanable/xenoblood,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cC" = (
@@ -486,13 +486,13 @@
 /obj/item/restraints/handcuffs/cable,
 /obj/item/restraints/handcuffs/cable,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cD" = (
 /obj/effect/decal/remains/human,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cE" = (
@@ -502,19 +502,19 @@
 	},
 /obj/item/stack/rods,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cF" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cH" = (
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cK" = (
@@ -528,7 +528,7 @@
 /obj/machinery/door/window/left/directional/east,
 /obj/effect/decal/cleanable/xenoblood/xgibs,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cO" = (
@@ -537,19 +537,19 @@
 	},
 /obj/machinery/door/window/left/directional/east,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cP" = (
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cR" = (
 /obj/effect/landmark/awaystart,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cS" = (
@@ -559,7 +559,7 @@
 	icon_state = "right"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cT" = (
@@ -570,13 +570,13 @@
 	icon_state = "right"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cV" = (
 /obj/effect/decal/cleanable/xenoblood/xgibs,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cW" = (
@@ -584,20 +584,20 @@
 	dir = 4
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cX" = (
 /obj/structure/table,
 /obj/item/melee/baton/security,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cY" = (
 /obj/structure/glowshroom/single,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "cZ" = (
@@ -606,7 +606,7 @@
 	pixel_x = 32
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "db" = (
@@ -614,13 +614,13 @@
 /obj/machinery/cell_charger,
 /obj/item/stock_parts/cell/crap,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "dd" = (
 /obj/structure/closet/emcloset,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "df" = (
@@ -631,7 +631,7 @@
 /obj/item/grenade/syndieminibomb/concussion,
 /obj/item/grenade/syndieminibomb/concussion,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "dg" = (
@@ -645,7 +645,7 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "dh" = (
@@ -832,20 +832,20 @@
 /area/awaymission/caves/northblock)
 "ec" = (
 /turf/open/floor/wood{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "ed" = (
 /obj/structure/bed,
 /obj/effect/landmark/awaystart,
 /turf/open/floor/wood{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "ee" = (
 /obj/structure/girder,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "eg" = (
@@ -882,24 +882,24 @@
 "em" = (
 /obj/structure/closet/secure_closet/personal,
 /turf/open/floor/wood{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "en" = (
 /obj/effect/decal/cleanable/shreds,
 /turf/open/floor/wood{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "eo" = (
 /obj/item/stack/rods,
 /turf/open/floor/wood{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "ep" = (
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "er" = (
@@ -917,7 +917,7 @@
 "et" = (
 /obj/effect/decal/cleanable/shreds,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "ev" = (
@@ -1076,18 +1076,18 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fy" = (
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fz" = (
 /obj/structure/barricade/wooden,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fA" = (
@@ -1131,7 +1131,7 @@
 /area/awaymission/caves/bmp_asteroid)
 "fQ" = (
 /turf/open/floor/plating/elevatorshaft{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	name = "elevator flooring"
 	},
 /area/awaymission/caves/bmp_asteroid)
@@ -1142,14 +1142,14 @@
 "fU" = (
 /obj/effect/landmark/awaystart,
 /turf/open/floor/plating/elevatorshaft{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	name = "elevator flooring"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fW" = (
 /obj/structure/girder,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fY" = (
@@ -1163,7 +1163,7 @@
 	id = "mineintro"
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gb" = (
@@ -1173,7 +1173,7 @@
 "gc" = (
 /obj/item/stack/rods,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gf" = (
@@ -1185,20 +1185,20 @@
 /obj/structure/table/reinforced,
 /obj/item/storage/box/donkpockets,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gh" = (
 /obj/structure/table/reinforced,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gi" = (
 /obj/structure/table/reinforced,
 /obj/item/stack/rods,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gj" = (
@@ -1218,13 +1218,13 @@
 "go" = (
 /obj/structure/chair/stool/directional/west,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gp" = (
 /obj/structure/table_frame,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gq" = (
@@ -1272,7 +1272,7 @@
 "gB" = (
 /obj/machinery/mech_bay_recharge_port,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gC" = (
@@ -1284,7 +1284,7 @@
 /obj/item/storage/toolbox/mechanical,
 /obj/item/clothing/glasses/material,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gG" = (
@@ -1300,12 +1300,12 @@
 "gI" = (
 /obj/structure/chair/stool/directional/west,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gJ" = (
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gK" = (
@@ -1323,19 +1323,19 @@
 "gN" = (
 /obj/structure/holohoop,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gO" = (
 /obj/structure/closet/emcloset,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gP" = (
 /obj/item/toy/beach_ball/holoball,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gU" = (
@@ -1343,7 +1343,7 @@
 	dir = 1
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gX" = (
@@ -1354,7 +1354,7 @@
 /obj/effect/baseturf_helper/lava,
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = "n2=23;o2=14;TEMP=2.7";
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
@@ -1372,19 +1372,19 @@
 /area/awaymission/caves/northblock)
 "hq" = (
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "hr" = (
 /obj/structure/spider/stickyweb,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "hw" = (
 /obj/structure/barricade/wooden,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "hQ" = (
@@ -1394,19 +1394,19 @@
 "hT" = (
 /obj/structure/flora/rock,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "jH" = (
 /obj/structure/spawner/mining/basilisk,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "jU" = (
 /obj/structure/spawner/mining/basilisk,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "ki" = (
@@ -1418,7 +1418,7 @@
 /obj/item/gun/energy/laser/captain/scattershot,
 /obj/item/slimepotion/fireproof,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "kw" = (
@@ -1426,7 +1426,7 @@
 	pixel_y = -32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "kE" = (
@@ -1447,13 +1447,13 @@
 "ml" = (
 /mob/living/simple_animal/hostile/asteroid/fugu,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "ms" = (
 /obj/structure/spawner/mining/goliath,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "mX" = (
@@ -1461,7 +1461,7 @@
 	name = "Mining cart"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "nw" = (
@@ -1475,18 +1475,18 @@
 	name = "rusted mine"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "nY" = (
 /obj/item/slimepotion/fireproof,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "oI" = (
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "pc" = (
@@ -1498,13 +1498,13 @@
 /obj/item/mjollnir,
 /mob/living/simple_animal/hostile/giant_spider/nurse,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "qD" = (
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "qE" = (
@@ -1514,7 +1514,7 @@
 "ra" = (
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "rl" = (
@@ -1525,12 +1525,12 @@
 	amount = 12
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "rv" = (
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "rF" = (
@@ -1540,7 +1540,7 @@
 "sl" = (
 /obj/structure/spawner/mining/hivelord,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "sw" = (
@@ -1550,19 +1550,19 @@
 "sE" = (
 /obj/item/greentext,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "sI" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "sT" = (
 /obj/structure/spawner/mining/hivelord,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "tz" = (
@@ -1573,7 +1573,7 @@
 "tU" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "uN" = (
@@ -1593,13 +1593,13 @@
 "vX" = (
 /obj/effect/forcefield/cult,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "wl" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "ww" = (
@@ -1608,13 +1608,13 @@
 "wT" = (
 /obj/structure/destructible/cult/pylon,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "xs" = (
 /obj/item/bedsheet/patriot,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "yS" = (
@@ -1630,50 +1630,50 @@
 /obj/item/slimepotion/fireproof,
 /obj/item/clothing/glasses/thermal,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "yV" = (
 /obj/structure/flora/rock,
 /obj/item/soulstone/anybody,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "zn" = (
 /obj/effect/landmark/awaystart,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "zH" = (
 /obj/structure/flora/rock,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "zN" = (
 /obj/machinery/light/small/directional/north,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "zR" = (
 /obj/effect/decal/cleanable/ash,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "zS" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Aj" = (
 /obj/structure/grille,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "AN" = (
@@ -1682,13 +1682,13 @@
 	name = "shock rune"
 	},
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "AZ" = (
 /obj/structure/girder,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Bd" = (
@@ -1697,54 +1697,54 @@
 	name = "flame rune"
 	},
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "Bo" = (
 /obj/structure/ore_box,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Bs" = (
 /obj/effect/landmark/awaystart,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Bz" = (
 /mob/living/simple_animal/hostile/giant_spider/nurse,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "BH" = (
 /obj/structure/spawner/skeleton,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "BK" = (
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "BL" = (
 /obj/item/stack/rods,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "BQ" = (
 /obj/effect/decal/remains/human,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Cc" = (
 /obj/item/gun/energy/laser/captain/scattershot,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "CB" = (
@@ -1753,7 +1753,7 @@
 	name = "Cave Bat"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Ds" = (
@@ -1761,7 +1761,7 @@
 	pixel_x = 5
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "DH" = (
@@ -1772,7 +1772,7 @@
 	pixel_x = 5
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "DO" = (
@@ -1783,7 +1783,7 @@
 	},
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Fj" = (
@@ -1792,13 +1792,13 @@
 	desc = "It's a beachball with a face crudely drawn onto it with some soot."
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "FI" = (
 /obj/machinery/light/directional/south,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "FS" = (
@@ -1810,7 +1810,7 @@
 "FV" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Gt" = (
@@ -1824,31 +1824,31 @@
 "HK" = (
 /obj/structure/destructible/cult/pylon,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Ik" = (
 /obj/item/stack/rods,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "IN" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "IY" = (
 /obj/structure/spider/cocoon,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "IZ" = (
 /obj/item/clothing/head/collectable/wizard,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Jp" = (
@@ -1859,26 +1859,26 @@
 	pixel_x = 32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "JD" = (
 /obj/structure/ore_box,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Kh" = (
 /obj/machinery/light/small/built/directional/west,
 /turf/open/floor/wood{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/northblock)
 "KY" = (
 /obj/structure/table,
 /obj/item/paper/crumpled/awaymissions/caves/unsafe_area,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Ls" = (
@@ -1886,7 +1886,7 @@
 	pixel_x = -32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Ly" = (
@@ -1900,7 +1900,7 @@
 	amount = 15
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Mk" = (
@@ -1910,19 +1910,19 @@
 "Mq" = (
 /obj/structure/flora/rock,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Mw" = (
 /obj/item/shard,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "MB" = (
 /obj/item/grown/log,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "MC" = (
@@ -1935,7 +1935,7 @@
 "MM" = (
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Np" = (
@@ -1944,7 +1944,7 @@
 	name = "rusted mine"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "NO" = (
@@ -1952,25 +1952,25 @@
 /obj/structure/filingcabinet,
 /obj/item/paper/fluff/awaymissions/caves/omega,
 /turf/open/floor/iron{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "NX" = (
 /obj/effect/decal/cleanable/blood/gibs/old,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "OA" = (
 /obj/item/gun/ballistic/automatic/pistol/deagle/gold,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "OE" = (
 /obj/machinery/light/directional/west,
 /turf/open/floor/plating{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/research)
 "OJ" = (
@@ -1979,7 +1979,7 @@
 	name = "Cave Bat"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "OX" = (
@@ -2001,7 +2001,7 @@
 "Rm" = (
 /obj/effect/decal/remains/human,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "Rp" = (
@@ -2012,38 +2012,38 @@
 	},
 /obj/machinery/light/small/built/directional/east,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Ry" = (
 /obj/structure/grille,
 /obj/structure/barricade/wooden,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "RJ" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "SV" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Tj" = (
 /obj/item/assembly/igniter,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "TT" = (
 /obj/item/ectoplasm,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "Uu" = (
@@ -2056,7 +2056,7 @@
 /obj/effect/decal/remains/human,
 /obj/item/clothing/under/misc/patriotsuit,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "VK" = (
@@ -2064,7 +2064,7 @@
 	name = "spooky skeleton remains"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Wj" = (
@@ -2086,13 +2086,13 @@
 	pixel_x = -32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Xs" = (
 /mob/living/simple_animal/hostile/giant_spider/hunter,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "XG" = (
@@ -2101,44 +2101,44 @@
 	name = "rusted mine"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "XN" = (
 /obj/item/grenade/syndieminibomb/concussion,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "XR" = (
 /obj/structure/spider/stickyweb,
 /mob/living/simple_animal/hostile/giant_spider/hunter,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "YG" = (
 /obj/item/organ/brain/alien,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "YZ" = (
 /mob/living/simple_animal/hostile/skeleton,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Zj" = (
 /obj/effect/decal/remains/human,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "ZS" = (
 /obj/structure/barricade/wooden,
 /turf/open/misc/asteroid/basalt{
-	initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = "n2=23;o2=14;TEMP=2.7"
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 
diff --git a/_maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/challenge.dmm
index 6189d9d5e58..dc8acaa83f5 100644
--- a/_maps/RandomZLevels/challenge.dmm
+++ b/_maps/RandomZLevels/challenge.dmm
@@ -450,18 +450,18 @@
 /area/awaymission/challenge/main)
 "bF" = (
 /turf/open/floor/iron/white/corner{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/challenge/main)
 "bG" = (
 /turf/open/floor/iron/white/side{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/challenge/main)
 "bH" = (
 /turf/open/floor/iron/white/corner{
 	dir = 8;
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/challenge/main)
 "bI" = (
@@ -529,7 +529,7 @@
 "bQ" = (
 /obj/item/gun/ballistic/revolver/russian,
 /turf/open/floor/iron/white/side{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/challenge/main)
 "bR" = (
@@ -560,7 +560,7 @@
 "bU" = (
 /obj/effect/turf_decal/stripes/line,
 /turf/open/floor/iron/white{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/challenge/main)
 "bV" = (
diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm
index 3d405d7d6ae..0687985225b 100644
--- a/_maps/RandomZLevels/moonoutpost19.dmm
+++ b/_maps/RandomZLevels/moonoutpost19.dmm
@@ -549,7 +549,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -563,7 +563,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "bZ" = (
@@ -576,7 +576,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -584,7 +584,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -597,7 +597,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -611,7 +611,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -626,7 +626,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -640,7 +640,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -652,7 +652,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -665,7 +665,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -678,7 +678,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -748,14 +748,14 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cp" = (
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cq" = (
@@ -765,7 +765,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -783,7 +783,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cs" = (
@@ -795,7 +795,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -803,7 +803,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cu" = (
@@ -811,7 +811,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -823,7 +823,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -880,7 +880,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -897,7 +897,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -909,7 +909,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -921,7 +921,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cH" = (
@@ -934,7 +934,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -946,7 +946,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -957,7 +957,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -975,7 +975,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -990,7 +990,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1045,7 +1045,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1054,7 +1054,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged4";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1071,7 +1071,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1088,7 +1088,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cU" = (
@@ -1107,7 +1107,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1116,7 +1116,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1125,7 +1125,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged3";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1142,7 +1142,7 @@
 /turf/open/floor/iron{
 	dir = 1;
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1161,14 +1161,14 @@
 	},
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "da" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "db" = (
@@ -1200,7 +1200,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1222,7 +1222,7 @@
 /turf/open/floor/iron{
 	dir = 1;
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1236,14 +1236,14 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "di" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dj" = (
@@ -1268,7 +1268,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1279,7 +1279,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1289,7 +1289,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1298,7 +1298,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1312,7 +1312,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg3";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1325,7 +1325,7 @@
 	},
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dr" = (
@@ -1337,7 +1337,7 @@
 /obj/item/suppressor,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "ds" = (
@@ -1374,7 +1374,7 @@
 /obj/effect/mapping_helpers/airlock/cyclelink_helper,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dw" = (
@@ -1387,7 +1387,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1395,7 +1395,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dy" = (
@@ -1409,7 +1409,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1428,7 +1428,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1436,7 +1436,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1448,7 +1448,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1467,7 +1467,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1476,7 +1476,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1484,7 +1484,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -1840,7 +1840,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/research)
 "fc" = (
@@ -2306,7 +2306,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "gf" = (
@@ -3611,7 +3611,7 @@
 /obj/item/shard,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "iU" = (
@@ -3886,7 +3886,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -3894,14 +3894,14 @@
 /obj/structure/grille,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "jC" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "jD" = (
@@ -4105,7 +4105,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4115,7 +4115,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4125,7 +4125,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4135,7 +4135,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4145,7 +4145,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4154,7 +4154,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4164,7 +4164,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged3";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4329,14 +4329,14 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "kC" = (
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "kD" = (
@@ -4348,7 +4348,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged4";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4356,7 +4356,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4365,7 +4365,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged5";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4374,7 +4374,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4455,7 +4455,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "kQ" = (
@@ -4464,7 +4464,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg3";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4618,7 +4618,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4630,7 +4630,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4770,7 +4770,7 @@
 	dir = 8
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4804,7 +4804,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4814,7 +4814,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4943,7 +4943,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5084,7 +5084,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5226,7 +5226,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5240,7 +5240,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5311,7 +5311,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5366,7 +5366,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5376,7 +5376,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5407,7 +5407,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "no" = (
@@ -5432,7 +5432,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5463,7 +5463,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5471,7 +5471,7 @@
 /obj/item/pickaxe/drill,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "nw" = (
@@ -5484,7 +5484,7 @@
 	},
 /turf/open/floor/iron/cafeteria{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5506,7 +5506,7 @@
 	},
 /turf/open/floor/iron/cafeteria{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5519,7 +5519,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5555,7 +5555,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5568,7 +5568,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg3";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5581,7 +5581,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5594,7 +5594,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5659,7 +5659,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5670,7 +5670,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5714,7 +5714,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5749,7 +5749,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5761,7 +5761,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5771,7 +5771,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5784,7 +5784,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5792,7 +5792,7 @@
 /obj/structure/chair/comfy/black,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "ob" = (
@@ -5806,7 +5806,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5818,7 +5818,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5830,7 +5830,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "oz" = (
@@ -5838,7 +5838,7 @@
 /obj/structure/alien/egg/burst,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "oJ" = (
@@ -5848,7 +5848,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "oT" = (
@@ -5886,7 +5886,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "qw" = (
@@ -5897,7 +5897,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "qD" = (
@@ -5907,7 +5907,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "qK" = (
@@ -5915,7 +5915,7 @@
 /obj/effect/turf_decal/stripes/asteroid/line,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5929,7 +5929,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "rk" = (
@@ -5943,7 +5943,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5953,14 +5953,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "rD" = (
 /obj/item/trash/candy,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "sb" = (
@@ -5970,7 +5970,7 @@
 /obj/effect/decal/cleanable/blood/splatter,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "si" = (
@@ -5978,7 +5978,7 @@
 /mob/living/simple_animal/hostile/alien/sentinel,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "sy" = (
@@ -5988,7 +5988,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "sM" = (
@@ -5998,7 +5998,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "tb" = (
@@ -6006,7 +6006,7 @@
 /obj/effect/decal/cleanable/blood,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "tK" = (
@@ -6019,7 +6019,7 @@
 /obj/item/clothing/glasses/night,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "uf" = (
@@ -6033,14 +6033,14 @@
 /obj/structure/alien/egg,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "uR" = (
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "vm" = (
@@ -6048,7 +6048,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "vJ" = (
@@ -6058,7 +6058,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6073,7 +6073,7 @@
 /obj/item/clothing/mask/facehugger/impregnated,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "vV" = (
@@ -6088,7 +6088,7 @@
 "wq" = (
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "wx" = (
@@ -6097,7 +6097,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "wT" = (
@@ -6107,14 +6107,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "xI" = (
 /obj/item/storage/bag/ore,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "yz" = (
@@ -6123,7 +6123,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "zp" = (
@@ -6132,7 +6132,7 @@
 /obj/effect/decal/cleanable/blood/gibs,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "zF" = (
@@ -6154,7 +6154,7 @@
 /obj/effect/decal/cleanable/blood,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "BH" = (
@@ -6162,7 +6162,7 @@
 /obj/structure/bed/nest,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "CY" = (
@@ -6170,7 +6170,7 @@
 /obj/effect/decal/cleanable/blood/gibs,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "DF" = (
@@ -6187,7 +6187,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6225,7 +6225,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6243,7 +6243,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6256,7 +6256,7 @@
 /obj/item/mining_scanner,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "Ku" = (
@@ -6264,7 +6264,7 @@
 /mob/living/simple_animal/hostile/alien,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "KG" = (
@@ -6275,7 +6275,7 @@
 /obj/item/gun/ballistic/automatic/pistol,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "Li" = (
@@ -6315,7 +6315,7 @@
 /obj/item/clothing/head/helmet,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "OO" = (
@@ -6323,7 +6323,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "Pn" = (
@@ -6348,14 +6348,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "PS" = (
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "Rm" = (
@@ -6369,14 +6369,14 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "Sg" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "SE" = (
@@ -6390,7 +6390,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6406,7 +6406,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "Uq" = (
@@ -6414,14 +6414,14 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "UY" = (
 /obj/structure/alien/weeds/node,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "VE" = (
@@ -6432,7 +6432,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -6440,7 +6440,7 @@
 /obj/structure/alien/weeds/node,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 "Wf" = (
@@ -6457,7 +6457,7 @@
 /mob/living/simple_animal/hostile/alien,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "Yn" = (
@@ -6467,7 +6467,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6477,7 +6477,7 @@
 /obj/effect/decal/cleanable/blood,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/hive)
 "Zf" = (
@@ -6487,7 +6487,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6514,14 +6514,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "Zz" = (
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "ZZ" = (
@@ -6531,7 +6531,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
 	},
 /area/awaymission/moonoutpost19/main)
 
diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm
index 7b90f38797a..123f4959e96 100644
--- a/_maps/RandomZLevels/snowdin.dmm
+++ b/_maps/RandomZLevels/snowdin.dmm
@@ -2083,7 +2083,7 @@
 /area/awaymission/snowdin/outside)
 "gc" = (
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -2379,14 +2379,14 @@
 "gU" = (
 /obj/effect/decal/remains/human,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
 "gV" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -2611,7 +2611,7 @@
 "hF" = (
 /obj/structure/destructible/cult/pylon,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -2873,7 +2873,7 @@
 	max_mobs = 5
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -2883,7 +2883,7 @@
 	name = "Caleb Reed"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -3594,7 +3594,7 @@
 	name = "Jacob Ullman"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -6002,7 +6002,7 @@
 "qg" = (
 /obj/structure/flora/rock/pile/icy,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -7165,7 +7165,7 @@
 /obj/structure/closet/crate/wooden,
 /obj/effect/spawner/random/exotic/antag_gear_strong,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -7516,7 +7516,7 @@
 /area/awaymission/snowdin/cave)
 "xl" = (
 /turf/open/floor/plating/elevatorshaft{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180"
+	initial_gas = "o2=22;n2=82;TEMP=180"
 	},
 /area/awaymission/snowdin/cave)
 "xn" = (
@@ -7688,7 +7688,7 @@
 	width = 6
 	},
 /turf/open/floor/plating/elevatorshaft{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180"
+	initial_gas = "o2=22;n2=82;TEMP=180"
 	},
 /area/awaymission/snowdin/cave)
 "xL" = (
@@ -8481,7 +8481,7 @@
 /area/awaymission/snowdin/outside)
 "AD" = (
 /turf/open/floor/plating{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180"
+	initial_gas = "o2=22;n2=82;TEMP=180"
 	},
 /area/awaymission/snowdin/outside)
 "AE" = (
@@ -9404,7 +9404,7 @@
 	state_open = 1
 	},
 /turf/open/floor/mineral/plastitanium{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180";
+	initial_gas = "o2=22;n2=82;TEMP=180";
 	planetary_atmos = 1;
 	temperature = 180
 	},
@@ -9416,7 +9416,7 @@
 /obj/effect/turf_decal/weather/snow,
 /obj/machinery/suit_storage_unit/syndicate,
 /turf/open/floor/mineral/plastitanium{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180";
+	initial_gas = "o2=22;n2=82;TEMP=180";
 	planetary_atmos = 1;
 	temperature = 180
 	},
@@ -9430,7 +9430,7 @@
 	state_open = 1
 	},
 /turf/open/floor/mineral/plastitanium{
-	initial_gas_mix = "o2=22;n2=82;TEMP=180";
+	initial_gas = "o2=22;n2=82;TEMP=180";
 	planetary_atmos = 1;
 	temperature = 180
 	},
@@ -11157,7 +11157,7 @@
 /obj/structure/closet/crate/wooden,
 /obj/effect/spawner/random/exotic/antag_gear,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -11452,7 +11452,7 @@
 /obj/structure/closet/crate/wooden,
 /obj/effect/spawner/random/exotic/antag_gear_weak,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
@@ -13465,7 +13465,7 @@
 "XP" = (
 /obj/effect/spawner/random/structure/crate_abandoned,
 /turf/open/floor/engine/cult{
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120";
+	initial_gas = "n2=82;plasma=24;TEMP=120";
 	temperature = 120
 	},
 /area/awaymission/snowdin/cave/cavern)
diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm
index ebf98cfda57..1f0f9c58969 100644
--- a/_maps/RandomZLevels/undergroundoutpost45.dmm
+++ b/_maps/RandomZLevels/undergroundoutpost45.dmm
@@ -29,7 +29,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -827,7 +827,7 @@
 /obj/effect/decal/cleanable/blood/gibs/limb,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -4187,7 +4187,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11484,7 +11484,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11492,7 +11492,7 @@
 "zq" = (
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11522,7 +11522,7 @@
 /obj/structure/bed/nest,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11531,7 +11531,7 @@
 /obj/effect/decal/cleanable/blood/gibs/up,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11566,7 +11566,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11598,7 +11598,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11618,7 +11618,7 @@
 /obj/effect/decal/cleanable/blood/splatter,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11629,7 +11629,7 @@
 /obj/effect/decal/cleanable/blood/gibs/down,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11638,7 +11638,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11656,7 +11656,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11702,7 +11702,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11723,7 +11723,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -11787,7 +11787,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11798,7 +11798,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11816,7 +11816,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11825,7 +11825,7 @@
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11862,7 +11862,7 @@
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11892,7 +11892,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11932,7 +11932,7 @@
 /obj/effect/decal/cleanable/blood/splatter,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11941,7 +11941,7 @@
 /obj/structure/closet/crate,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11958,7 +11958,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11968,7 +11968,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11976,7 +11976,7 @@
 "Lz" = (
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 351.9
 	},
@@ -11991,7 +11991,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12014,7 +12014,7 @@
 /obj/machinery/light/small/directional/east,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12023,7 +12023,7 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12032,7 +12032,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12041,7 +12041,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12086,7 +12086,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12095,7 +12095,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12127,7 +12127,7 @@
 /obj/effect/turf_decal/stripes/asteroid/line,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -12191,7 +12191,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12226,7 +12226,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12256,7 +12256,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12268,7 +12268,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12284,7 +12284,7 @@
 /obj/structure/alien/resin/membrane,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12301,7 +12301,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12311,7 +12311,7 @@
 /obj/effect/decal/cleanable/blood/gibs/down,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12323,7 +12323,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -12332,7 +12332,7 @@
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12353,7 +12353,7 @@
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 351.9
 	},
@@ -12376,7 +12376,7 @@
 /obj/structure/ore_box,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12407,7 +12407,7 @@
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12418,7 +12418,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12458,7 +12458,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12468,7 +12468,7 @@
 /obj/effect/decal/cleanable/blood/gibs/core,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
 	name = "Cave Floor";
 	temperature = 363.9
 	},
diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/wildwest.dmm
index 9a56772f448..ee8a08708c7 100644
--- a/_maps/RandomZLevels/wildwest.dmm
+++ b/_maps/RandomZLevels/wildwest.dmm
@@ -52,7 +52,7 @@
 /area/awaymission/wildwest/vault)
 "an" = (
 /turf/open/floor/cult{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/wildwest/vault)
 "ao" = (
@@ -131,7 +131,7 @@
 "aL" = (
 /obj/item/paper/fluff/awaymissions/wildwest/grinder,
 /turf/open/floor/cult{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/wildwest/vault)
 "aM" = (
@@ -143,7 +143,7 @@
 "aO" = (
 /obj/effect/mob_spawn/corpse/human/syndicatecommando,
 /turf/open/floor/cult{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/awaymission/wildwest/vault)
 "aP" = (
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index ec58427dbd3..65c82e57c34 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -4066,7 +4066,7 @@
 	dir = 4
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "o2=0.01;n2=0.01;TEMP=2.7";
+	initial_gas = "o2=0.01;n2=0.01;TEMP=2.7";
 	luminosity = 2;
 	temperature = 2.7
 	},
@@ -4323,7 +4323,7 @@
 	dir = 4
 	},
 /turf/open/floor/plating{
-	initial_gas_mix = "o2=0.01;n2=0.01;TEMP=2.7";
+	initial_gas = "o2=0.01;n2=0.01;TEMP=2.7";
 	luminosity = 2;
 	temperature = 2.7
 	},
diff --git a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
index 61c914cfd8e..d7d11e59677 100644
--- a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
+++ b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
@@ -471,7 +471,7 @@
 /area/medical/virology)
 "bE" = (
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "bF" = (
@@ -1246,7 +1246,7 @@
 	dir = 9
 	},
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "dP" = (
@@ -2194,7 +2194,7 @@
 "gv" = (
 /obj/effect/turf_decal/weather/snow/corner,
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "gw" = (
@@ -4768,7 +4768,7 @@
 /area/medical/virology)
 "nB" = (
 /turf/open/misc/dirt/dark{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "nC" = (
@@ -5720,7 +5720,7 @@
 	dir = 8
 	},
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "qq" = (
@@ -5776,7 +5776,7 @@
 	dir = 6
 	},
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "qy" = (
@@ -7268,7 +7268,7 @@
 	dir = 5
 	},
 /turf/open/misc/dirt/dark{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "ux" = (
@@ -9524,7 +9524,7 @@
 	dir = 4
 	},
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "Bv" = (
@@ -9562,7 +9562,7 @@
 "BA" = (
 /obj/structure/closet/crate/grave,
 /turf/open/misc/dirt/dark{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "BB" = (
@@ -13350,7 +13350,7 @@
 	dir = 10
 	},
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "LO" = (
@@ -14362,7 +14362,7 @@
 "ON" = (
 /obj/structure/closet/crate/grave,
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "OO" = (
@@ -17211,7 +17211,7 @@
 	pixel_y = 32
 	},
 /turf/open/misc/dirt{
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 	},
 /area/icemoon/underground/explored)
 "Wt" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 991d082eb75..25d0e048ad4 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -17790,7 +17790,7 @@
 "ffP" = (
 /obj/effect/spawner/random/structure/grille,
 /turf/open/floor/plating/foam{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/space/nearstation)
 "ffR" = (
@@ -31103,7 +31103,7 @@
 "kiE" = (
 /obj/item/book/manual/nuclear,
 /turf/open/floor/plating/foam{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/space/nearstation)
 "kiM" = (
@@ -51852,7 +51852,7 @@
 /area/security/checkpoint/supply)
 "rLv" = (
 /turf/open/floor/plating/foam{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/space/nearstation)
 "rLz" = (
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 0684d3dc817..d1a641f467a 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -170,7 +170,7 @@
 "aU" = (
 /obj/structure/flora/tree/dead,
 /turf/open/misc/asteroid/basalt/wasteland{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/centcom/holding)
 "aV" = (
@@ -1540,7 +1540,7 @@
 	invisibility = 100
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0
 	},
 /area/awaymission/errorroom)
@@ -2031,7 +2031,7 @@
 /area/centcom/briefing)
 "hs" = (
 /turf/open/misc/asteroid/basalt/wasteland{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/centcom/holding)
 "ht" = (
@@ -2295,7 +2295,7 @@
 /area/tdome/administration)
 "ik" = (
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0
 	},
 /area/awaymission/errorroom)
@@ -4403,7 +4403,7 @@
 	pixel_y = 4
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "pi" = (
@@ -4667,7 +4667,7 @@
 /area/tdome/administration)
 "qe" = (
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "qf" = (
@@ -7395,7 +7395,7 @@
 "zi" = (
 /obj/item/rupee,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0
 	},
 /area/awaymission/errorroom)
@@ -7750,7 +7750,7 @@
 	pixel_y = -4
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "Am" = (
@@ -9226,7 +9226,7 @@
 	dir = 8
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "Hj" = (
@@ -9679,7 +9679,7 @@
 /obj/item/flashlight/lantern,
 /turf/open/misc/ironsand{
 	color = "#525252";
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/centcom/holding)
 "Kd" = (
@@ -9843,7 +9843,7 @@
 	pixel_y = -3
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "KU" = (
@@ -10536,7 +10536,7 @@
 "NS" = (
 /turf/open/misc/ironsand{
 	color = "#525252";
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/centcom/holding)
 "NU" = (
@@ -10795,7 +10795,7 @@
 "OC" = (
 /obj/structure/flora/rock/pile,
 /turf/open/misc/asteroid/basalt/wasteland{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/centcom/holding)
 "OD" = (
@@ -11022,7 +11022,7 @@
 	pixel_y = -4
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "Pq" = (
@@ -11647,7 +11647,7 @@
 /area/centcom/evacuation)
 "Rt" = (
 /turf/open/water{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "Ru" = (
@@ -12585,7 +12585,7 @@
 	pixel_y = 4
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = "o2=22;n2=82;TEMP=293.15"
 	},
 /area/centcom/holding)
 "UM" = (
@@ -12696,7 +12696,7 @@
 /obj/structure/flora/rock/pile,
 /turf/open/misc/ironsand{
 	color = "#525252";
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/centcom/holding)
 "Vg" = (
@@ -14020,7 +14020,7 @@
 "ZE" = (
 /obj/effect/landmark/error,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0
 	},
 /area/awaymission/errorroom)
diff --git a/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm b/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm
index 58060d7c320..79b829540f0 100644
--- a/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm
+++ b/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm
@@ -35,7 +35,7 @@
 "z" = (
 /obj/structure/mecha_wreckage/ripley,
 /turf/open/floor/iron/recharge_floor/asteroid{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/mine/explored)
 "B" = (
diff --git a/_maps/shuttles/ruin_caravan_victim.dmm b/_maps/shuttles/ruin_caravan_victim.dmm
index 9d1d6a721f8..8cc0f305110 100644
--- a/_maps/shuttles/ruin_caravan_victim.dmm
+++ b/_maps/shuttles/ruin_caravan_victim.dmm
@@ -79,7 +79,7 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "ct" = (
@@ -98,7 +98,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "cX" = (
@@ -108,7 +108,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "ec" = (
@@ -170,7 +170,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "gw" = (
@@ -182,7 +182,7 @@
 /obj/effect/decal/cleanable/blood,
 /obj/effect/turf_decal/tile/blue,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "gH" = (
@@ -207,7 +207,7 @@
 	},
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "kv" = (
@@ -282,7 +282,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "mZ" = (
@@ -300,7 +300,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "od" = (
@@ -355,7 +355,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "qp" = (
@@ -366,7 +366,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "qM" = (
@@ -504,7 +504,7 @@
 	specialfunctions = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "zd" = (
@@ -596,7 +596,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "DQ" = (
@@ -625,7 +625,7 @@
 	},
 /mob/living/simple_animal/hostile/syndicate/melee/sword/space/stormtrooper,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "EQ" = (
@@ -640,7 +640,7 @@
 	},
 /mob/living/simple_animal/hostile/syndicate/ranged/smg/space,
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "EW" = (
@@ -657,7 +657,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "Fv" = (
@@ -727,7 +727,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "Ko" = (
@@ -739,7 +739,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "KC" = (
@@ -817,7 +817,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "Ov" = (
@@ -839,7 +839,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "TEMP=2.7"
+	initial_gas = "TEMP=2.7"
 	},
 /area/shuttle/caravan/freighter1)
 "OK" = (
diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm
index 260ca72400d..90095876f35 100644
--- a/_maps/templates/battlecruiser_starfury.dmm
+++ b/_maps/templates/battlecruiser_starfury.dmm
@@ -34,7 +34,7 @@
 	},
 /obj/machinery/computer/med_data/syndie,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=100;TEMP=80";
+	initial_gas = "n2=100;TEMP=80";
 	temperature = 80
 	},
 /area/shuttle/sbc_starfury)
@@ -158,7 +158,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=100;TEMP=80";
+	initial_gas = "n2=100;TEMP=80";
 	temperature = 80
 	},
 /area/shuttle/sbc_starfury)
@@ -2054,7 +2054,7 @@
 	},
 /obj/machinery/light/directional/east,
 /turf/open/floor/iron/dark{
-	initial_gas_mix = "n2=100;TEMP=80";
+	initial_gas = "n2=100;TEMP=80";
 	temperature = 80
 	},
 /area/shuttle/sbc_starfury)
diff --git a/_maps/templates/heretic_sacrifice_template.dmm b/_maps/templates/heretic_sacrifice_template.dmm
index 5c58d7d3aa6..c11ea116bc0 100644
--- a/_maps/templates/heretic_sacrifice_template.dmm
+++ b/_maps/templates/heretic_sacrifice_template.dmm
@@ -25,7 +25,7 @@
 "dX" = (
 /obj/effect/decal/cleanable/oil,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -63,7 +63,7 @@
 "lz" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -106,7 +106,7 @@
 	dir = 10
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -141,7 +141,7 @@
 	},
 /obj/effect/decal/cleanable/oil,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -153,7 +153,7 @@
 "qu" = (
 /obj/effect/turf_decal/weather/dirt,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -165,7 +165,7 @@
 	dir = 5
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -178,7 +178,7 @@
 "sb" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -188,7 +188,7 @@
 	dir = 9
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -220,7 +220,7 @@
 	dir = 4
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -262,7 +262,7 @@
 /obj/structure/stone_tile/slab,
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -294,7 +294,7 @@
 /area/heretic_sacrifice/rust)
 "Bw" = (
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -351,7 +351,7 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -378,7 +378,7 @@
 	},
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -388,7 +388,7 @@
 	dir = 5
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -402,7 +402,7 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -440,7 +440,7 @@
 "KP" = (
 /obj/structure/stone_tile/surrounding_tile,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -476,7 +476,7 @@
 "NA" = (
 /obj/structure/stone_tile/burnt,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -486,7 +486,7 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -503,7 +503,7 @@
 	dir = 10
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
@@ -513,7 +513,7 @@
 	dir = 6
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15";
+	initial_gas = "o2=22;n2=82;TEMP=293.15";
 	planetary_atmos = 0;
 	slowdown = 0
 	},
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index d678d9885f5..f3b847cab8f 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -66,6 +66,10 @@ SUBSYSTEM_DEF(zas)
 	priority = FIRE_PRIORITY_AIR
 	init_order = INIT_ORDER_AIR
 	flags = SS_POST_FIRE_TIMING
+	runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
+	wait = 0.5 SECONDS
+
+	var/cached_cost = 0
 
 	//The variable setting controller
 	var/datum/zas_controller/settings
@@ -101,17 +105,8 @@ SUBSYSTEM_DEF(zas)
 	var/tmp/list/processing_zones
 
 	//Currently processing
-	var/list/curr_tiles
-	var/list/curr_defer
-	var/list/curr_edges
-	var/list/curr_fire
-	var/list/curr_hotspot
-	var/list/curr_zones
-	var/list/curr_machines
-	var/list/curr_atoms
-
-
-	var/current_process = SSZAS_TILES
+	var/list/currentrun = list()
+	var/current_process = SSZAS_PIPENETS
 	var/active_zones = 0
 	var/next_id = 1
 
@@ -189,64 +184,270 @@ SUBSYSTEM_DEF(zas)
 	..(timeofday)
 
 /datum/controller/subsystem/zas/fire(resumed = FALSE)
+	var/timer = TICK_USAGE_REAL
 	if (!resumed)
 		processing_edges = active_edges.Copy()
 		processing_fires = active_fire_zones.Copy()
 		processing_hotspots = active_hotspots.Copy()
 
+		// Every time we fire, we want to make sure pipenets are rebuilt. The game state could have changed between each fire() proc call
+	// and anything missing a pipenet can lead to unintended behaviour at worse and various runtimes at best.
+	if(length(rebuild_queue) || length(expansion_queue))
+		timer = TICK_USAGE_REAL
+		process_rebuilds()
+		//This does mean that the apperent rebuild costs fluctuate very quickly, this is just the cost of having them always process, no matter what
+		if(state != SS_RUNNING)
+			return
+
+	if(current_process == SSZAS_PIPENETS || !resumed)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_pipenets(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_MACHINES
 
-	curr_machines = atmos_machinery
 	if(current_process == SSZAS_MACHINES)
-		while (curr_machines.len)
-			var/obj/machinery/atmospherics/current_machine = curr_machines[curr_machines.len]
-			curr_machines.len--
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_atmos_machinery(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_TILES
+
+	if(current_process == SSZAS_TILES)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_tiles(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_DEFERED_TILES
+
+	if(current_process == SSZAS_DEFERED_TILES)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_deferred_tiles(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_EDGES
 
-			if(!current_machine)
-				atmos_machinery -= current_machine
-			if(current_machine.process_atmos() == PROCESS_KILL)
-				stop_processing_machine(current_machine)
+	if(current_process == SSZAS_EDGES)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_edges(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_FIRES
 
-			if(MC_TICK_CHECK)
-				return
+	if(current_process == SSZAS_FIRES)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_fires(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_HOTSPOTS
 
-	current_process = SSZAS_TILES
-	curr_tiles = tiles_to_update
-	if(current_process == SSZAS_TILES || !resumed)
-		while (curr_tiles.len)
-			var/turf/T = curr_tiles[curr_tiles.len]
-			curr_tiles.len--
+	if(current_process == SSZAS_HOTSPOTS)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_hotspots(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_ZONES
 
-			if (!T)
-				if (MC_TICK_CHECK)
-					return
+	if(current_process == SSZAS_ZONES)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_zones(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSZAS_ATOMS
+
+	if(current_process == SSZAS_ATOMS)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_atoms(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+
+
+	current_process = SSZAS_PIPENETS
+
+/datum/controller/subsystem/zas/proc/process_rebuilds()
+	//Yes this does mean rebuilding pipenets can freeze up the subsystem forever, but if we're in that situation something else is very wrong
+	var/list/currentrun = rebuild_queue
+	while(currentrun.len || length(expansion_queue))
+		while(currentrun.len && !length(expansion_queue)) //If we found anything, process that first
+			var/obj/machinery/atmospherics/remake = currentrun[currentrun.len]
+			currentrun.len--
+			if (!remake)
 				continue
+			remake.rebuild_pipes()
+			if (MC_TICK_CHECK)
+				return
 
-			//check if the turf is self-zone-blocked
-			var/c_airblock
-			ATMOS_CANPASS_TURF(c_airblock, T, T)
-			if(c_airblock & ZONE_BLOCKED)
-				deferred += T
-				if (MC_TICK_CHECK)
-					return
+		var/list/queue = expansion_queue
+		while(queue.len)
+			var/list/pack = queue[queue.len]
+			//We operate directly with the pipeline like this because we can trust any rebuilds to remake it properly
+			var/datum/pipeline/linepipe = pack[SSAIR_REBUILD_PIPELINE]
+			var/list/border = pack[SSAIR_REBUILD_QUEUE]
+			expand_pipeline(linepipe, border)
+			if(state != SS_RUNNING) //expand_pipeline can fail a tick check, we shouldn't let things get too fucky here
+				return
+
+			linepipe.building = FALSE
+			queue.len--
+			if (MC_TICK_CHECK)
+				return
+
+///Rebuilds a pipeline by expanding outwards, while yielding when sane
+/datum/controller/subsystem/zas/proc/expand_pipeline(datum/pipeline/net, list/border)
+	while(border.len)
+		var/obj/machinery/atmospherics/borderline = border[border.len]
+		border.len--
+
+		var/list/result = borderline.pipeline_expansion(net)
+		if(!length(result))
+			continue
+		for(var/obj/machinery/atmospherics/considered_device in result)
+			if(!istype(considered_device, /obj/machinery/atmospherics/pipe))
+				considered_device.set_pipenet(net, borderline)
+				net.add_machinery_member(considered_device)
 				continue
+			var/obj/machinery/atmospherics/pipe/item = considered_device
+			if(net.members.Find(item))
+				continue
+			if(item.parent)
+				var/static/pipenetwarnings = 10
+				if(pipenetwarnings > 0)
+					log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) around [AREACOORD(item)].")
+					pipenetwarnings--
+				if(pipenetwarnings == 0)
+					log_mapping("build_pipeline(): further messages about pipenets will be suppressed")
 
-			T.update_air_properties()
-			T.post_update_air_properties()
-			T.needs_air_update = 0
-			#ifdef ZASDBG
-			T.overlays -= mark
-			//updated++
-			#endif
+			net.members += item
+			border += item
+
+			net.air.volume += item.volume
+			item.parent = net
+
+			if(item.air_temporary)
+				net.air.merge(item.air_temporary)
+				item.air_temporary = null
+
+		if (MC_TICK_CHECK)
+			return
+
+/datum/controller/subsystem/zas/proc/process_pipenets(resumed = FALSE)
+	if (!resumed)
+		src.currentrun = networks.Copy()
+	//cache for sanic speed (lists are references anyways)
+	var/list/currentrun = src.currentrun
+	while(currentrun.len)
+		var/datum/thing = currentrun[currentrun.len]
+		currentrun.len--
+		if(thing)
+			thing.process()
+		else
+			networks.Remove(thing)
+		if(MC_TICK_CHECK)
+			return
+
+/datum/controller/subsystem/zas/proc/process_atmos_machinery(resumed = FALSE)
+	if (!resumed)
+		src.currentrun = atmos_machinery.Copy()
+	//cache for sanic speed (lists are references anyways)
+	var/list/currentrun = src.currentrun
+	while(currentrun.len)
+		var/obj/machinery/M = currentrun[currentrun.len]
+		currentrun.len--
+		if(!M)
+			atmos_machinery -= M
+		if(M.process_atmos() == PROCESS_KILL)
+			stop_processing_machine(M)
+		if(MC_TICK_CHECK)
+			return
+
+/datum/controller/subsystem/zas/proc/process_tiles(resumed = FALSE)
+	if(!resumed)
+		src.currentrun = tiles_to_update.Copy()
+
+	var/list/currentrun = src.currentrun
+	while (currentrun.len)
+		var/turf/T = currentrun[currentrun.len]
+		currentrun.len--
+
+		if (!T)
+			if (MC_TICK_CHECK)
+				return
+			continue
 
+		//check if the turf is self-zone-blocked
+		var/c_airblock
+		ATMOS_CANPASS_TURF(c_airblock, T, T)
+		if(c_airblock & ZONE_BLOCKED)
+			deferred += T
 			if (MC_TICK_CHECK)
 				return
+			continue
+
+		T.update_air_properties()
+		T.post_update_air_properties()
+		T.needs_air_update = 0
+		#ifdef ZASDBG
+		T.overlays -= mark
+		//updated++
+		#endif
+
+		if (MC_TICK_CHECK)
+			return
+
+/datum/controller/subsystem/zas/proc/process_deferred_tiles(resumed)
+	if(!resumed)
+		src.currentrun = deferred.Copy()
+	var/list/currentrun = src.currentrun
 
-	current_process = SSZAS_DEFERED_TILES
-	curr_defer = deferred
 	if(current_process == SSZAS_DEFERED_TILES)
-		while (curr_defer.len)
-			var/turf/T = curr_defer[curr_defer.len]
-			curr_defer.len--
+		while (currentrun.len)
+			var/turf/T = currentrun[currentrun.len]
+			currentrun.len--
 
 			T.update_air_properties()
 			T.post_update_air_properties()
@@ -259,12 +460,15 @@ SUBSYSTEM_DEF(zas)
 			if (MC_TICK_CHECK)
 				return
 
-	current_process = SSZAS_EDGES
-	curr_edges = processing_edges
+/datum/controller/subsystem/zas/proc/process_edges(resumed)
+	if(!resumed)
+		src.currentrun = active_edges.Copy()
+	var/list/currentrun = src.currentrun
+
 	if(current_process == SSZAS_EDGES)
-		while (curr_edges.len)
-			var/connection_edge/edge = curr_edges[curr_edges.len]
-			curr_edges.len--
+		while (currentrun.len)
+			var/connection_edge/edge = currentrun[currentrun.len]
+			currentrun.len--
 
 			if (!edge)
 				if (MC_TICK_CHECK)
@@ -275,36 +479,45 @@ SUBSYSTEM_DEF(zas)
 			if (MC_TICK_CHECK)
 				return
 
-	current_process = SSZAS_FIRES
-	curr_fire = processing_fires
+/datum/controller/subsystem/zas/proc/process_fires(resumed)
+	if(!resumed)
+		src.currentrun = active_fire_zones.Copy()
+	var/list/currentrun = src.currentrun
+
 	if(current_process == SSZAS_FIRES)
-		while (curr_fire.len)
-			var/zone/Z = curr_fire[curr_fire.len]
-			curr_fire.len--
+		while (currentrun.len)
+			var/zone/Z = currentrun[currentrun.len]
+			currentrun.len--
 
 			Z.process_fire()
 
 			if (MC_TICK_CHECK)
 				return
 
-	current_process = SSZAS_HOTSPOTS
-	curr_hotspot = processing_hotspots
+/datum/controller/subsystem/zas/proc/process_hotspots(resumed)
+	if(!resumed)
+		src.currentrun = active_hotspots.Copy()
+	var/list/currentrun = src.currentrun
+
 	if(current_process == SSZAS_HOTSPOTS)
-		while (curr_hotspot.len)
-			var/obj/effect/hotspot/F = curr_hotspot[curr_hotspot.len]
-			curr_hotspot.len--
+		while (currentrun.len)
+			var/obj/effect/hotspot/F = currentrun[currentrun.len]
+			currentrun.len--
 
 			F.process()
 
 			if (MC_TICK_CHECK)
 				return
 
-	current_process = SSZAS_ZONES
-	curr_zones = processing_zones
+/datum/controller/subsystem/zas/proc/process_zones(resumed)
+	if(!resumed)
+		src.currentrun = zones_to_update.Copy()
+	var/list/currentrun = src.currentrun
+
 	if(current_process == SSZAS_ZONES)
-		while (curr_zones.len)
-			var/zone/Z = curr_zones[curr_zones.len]
-			curr_zones.len--
+		while (currentrun.len)
+			var/zone/Z = currentrun[currentrun.len]
+			currentrun.len--
 
 			Z.tick()
 			Z.needs_update = FALSE
@@ -312,20 +525,22 @@ SUBSYSTEM_DEF(zas)
 			if (MC_TICK_CHECK)
 				return
 
-	current_process = SSZAS_ATOMS
-	curr_atoms = atom_process
+/datum/controller/subsystem/zas/proc/process_atoms(resumed)
+	if(!resumed)
+		src.currentrun = atom_process.Copy()
+
+	var/list/currentrun = src.currentrun
+
 	if(current_process == SSZAS_ATOMS)
-		while(curr_atoms.len)
-		var/atom/talk_to = curr_atoms[curr_atoms.len]
-		curr_atoms.len--
+		while(currentrun.len)
+		var/atom/talk_to = currentrun[currentrun.len]
+		currentrun.len--
 		if(!talk_to)
 			return
 		talk_to.process_exposure()
 		if(MC_TICK_CHECK)
 			return
 
-	current_process = SSZAS_MACHINES
-
 /**
  * Adds a given machine to the processing system for SSAIR_ATMOSMACHINERY processing.
  *
@@ -357,7 +572,7 @@ SUBSYSTEM_DEF(zas)
 	// the currentrun list, which is a cache of atmos_machinery. Remove it from that list
 	// as well to prevent processing qdeleted objects in the cache.
 	if(current_process == SSZAS_MACHINES)
-		curr_machines -= machine
+		currentrun -= machine
 
 /datum/controller/subsystem/zas/proc/add_to_rebuild_queue(obj/machinery/atmospherics/atmos_machine)
 	if(istype(atmos_machine, /obj/machinery/atmospherics) && !atmos_machine.rebuilding)
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index 001b8ff266d..a300002430b 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -10,7 +10,7 @@
 	smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS)
 	canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS)
 	baseturfs = /turf/open/misc/asteroid/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 	opacity = TRUE
 	density = TRUE
 	layer = EDGED_TURF_LAYER
@@ -224,7 +224,7 @@
 /turf/closed/mineral/random/high_chance/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
 	baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	defer_change = TRUE
 	mineralSpawnChanceList = list(
 		/obj/item/stack/ore/uranium = 35, /obj/item/stack/ore/diamond = 30, /obj/item/stack/ore/gold = 45, /obj/item/stack/ore/titanium = 45,
@@ -249,7 +249,7 @@
 /turf/closed/mineral/random/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
 	baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	defer_change = TRUE
 
 	mineralChance = 10
@@ -269,7 +269,7 @@
 	defer_change = TRUE
 	turf_type = /turf/open/misc/asteroid/snow/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	weak_turf = TRUE
 
 /turf/closed/mineral/random/snow/Change_Ore(ore_type, random = 0)
@@ -311,7 +311,7 @@
 /turf/closed/mineral/random/labormineral/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
 	baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	defer_change = TRUE
 	mineralSpawnChanceList = list(
 		/obj/item/stack/ore/uranium = 3, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 8, /obj/item/stack/ore/titanium = 8,
@@ -330,7 +330,7 @@
 	defer_change = TRUE
 	turf_type = /turf/open/misc/asteroid/snow/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	defer_change = TRUE
 	mineralSpawnChanceList = list(
 		/obj/item/stack/ore/uranium = 3, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 8, /obj/item/stack/ore/titanium = 8,
@@ -385,7 +385,7 @@
 /turf/closed/mineral/gold/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
 	baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	defer_change = TRUE
 
 /turf/closed/mineral/silver
@@ -395,7 +395,7 @@
 /turf/closed/mineral/silver/ice/icemoon
 	turf_type = /turf/open/misc/asteroid/snow/ice/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/ice/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/closed/mineral/titanium
 	mineralType = /obj/item/stack/ore/titanium
@@ -428,13 +428,13 @@
 /turf/closed/mineral/bscrystal/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
 	baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	defer_change = TRUE
 
 /turf/closed/mineral/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt
 	baseturfs = /turf/open/misc/asteroid/basalt
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 
 /turf/closed/mineral/volcanic/lava_land_surface
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
@@ -450,7 +450,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS)
 	baseturfs = /turf/open/misc/ashplanet/wateryrock
-	initial_gas_mix = OPENTURF_LOW_PRESSURE
+	initial_gas = OPENTURF_LOW_PRESSURE
 	turf_type = /turf/open/misc/ashplanet/rocky
 	defer_change = TRUE
 
@@ -470,7 +470,7 @@
 /turf/closed/mineral/snowmountain/icemoon
 	turf_type = /turf/open/misc/asteroid/snow/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/closed/mineral/snowmountain/cavern
 	name = "ice cavern rock"
@@ -485,7 +485,7 @@
 /turf/closed/mineral/snowmountain/cavern/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/ice/icemoon
 	turf_type = /turf/open/misc/asteroid/snow/ice/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 //yoo RED ROCK RED ROCK
 
@@ -606,7 +606,7 @@
 /turf/closed/mineral/gibtonite/volcanic
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
 	baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	defer_change = TRUE
 
 /turf/closed/mineral/gibtonite/ice
@@ -622,14 +622,14 @@
 /turf/closed/mineral/gibtonite/ice/icemoon
 	turf_type = /turf/open/misc/asteroid/snow/ice/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/ice/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/closed/mineral/strong
 	name = "Very strong rock"
 	desc = "Seems to be stronger than the other rocks in the area. Only a master of mining techniques could destroy this."
 	turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
 	baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	defer_change = 1
 	smooth_icon = 'icons/turf/walls/rock_wall.dmi'
 	base_icon_state = "rock_wall"
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 5f12102a624..3a7e3da9931 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -1,7 +1,7 @@
 /turf/open
 	plane = FLOOR_PLANE
 	var/slowdown = 0 //negative for faster, positive for slower
-
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 	var/footstep = null
 	var/barefootstep = null
 	var/clawfootstep = null
@@ -97,7 +97,7 @@
 	icon = 'icons/turf/floors.dmi'
 	icon_state = "necro1"
 	baseturfs = /turf/open/indestructible/necropolis
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	footstep = FOOTSTEP_LAVA
 	barefootstep = FOOTSTEP_LAVA
 	clawfootstep = FOOTSTEP_LAVA
@@ -110,7 +110,7 @@
 		icon_state = "necro[rand(2,3)]"
 
 /turf/open/indestructible/necropolis/air
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 
 /turf/open/indestructible/boss //you put stone tiles on this and use it as a base
 	name = "necropolis floor"
@@ -118,15 +118,15 @@
 	icon_state = "boss"
 	baseturfs = /turf/open/indestructible/boss
 	planetary_atmos = TRUE
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 
 /turf/open/indestructible/boss/air
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 
 /turf/open/indestructible/hierophant
 	icon = 'icons/turf/floors/hierophant_floor.dmi'
 	planetary_atmos = TRUE
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	baseturfs = /turf/open/indestructible/hierophant
 	smoothing_flags = SMOOTH_CORNERS
 	tiled_dirt = FALSE
diff --git a/code/game/turfs/open/ashplanet.dm b/code/game/turfs/open/ashplanet.dm
index 920728f1cf9..a83fd860e3f 100644
--- a/code/game/turfs/open/ashplanet.dm
+++ b/code/game/turfs/open/ashplanet.dm
@@ -7,7 +7,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	desc = "The ground is covered in volcanic ash."
 	baseturfs = /turf/open/misc/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 
 	footstep = FOOTSTEP_SAND
diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index 0b5cff08629..054f171f03c 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -119,7 +119,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	baseturfs = /turf/open/lava/smooth
 
 /turf/open/misc/asteroid/basalt/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/misc/asteroid/basalt/Initialize(mapload)
 	. = ..()
@@ -135,17 +135,17 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 ///////Surface. The surface is warm, but survivable without a suit. Internals are required. The floors break to chasms, which drop you into the underground.
 
 /turf/open/misc/asteroid/basalt/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/lava/smooth/lava_land_surface
 
 /turf/open/misc/asteroid/lowpressure
-	initial_gas_mix = OPENTURF_LOW_PRESSURE
+	initial_gas = OPENTURF_LOW_PRESSURE
 	baseturfs = /turf/open/misc/asteroid/lowpressure
 	turf_type = /turf/open/misc/asteroid/lowpressure
 
 /turf/open/misc/asteroid/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 	baseturfs = /turf/open/misc/asteroid/airless
 	turf_type = /turf/open/misc/asteroid/airless
 
@@ -178,11 +178,11 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/snow/icemoon
 	baseturfs = /turf/open/openspace/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	slowdown = 0
 
 /turf/open/lava/plasma/ice_moon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	baseturfs = /turf/open/lava/plasma/ice_moon
 	planetary_atmos = TRUE
 
@@ -190,7 +190,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	name = "icy snow"
 	desc = "Looks colder."
 	baseturfs = /turf/open/misc/asteroid/snow/ice
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120"
+	initial_gas = "n2=82;plasma=24;TEMP=120"
 	floor_variance = 0
 	icon_state = "snow-ice"
 	base_icon_state = "snow-ice"
@@ -204,7 +204,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/snow/ice/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/ice/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	slowdown = 0
 
@@ -212,10 +212,10 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	return FALSE
 
 /turf/open/misc/asteroid/snow/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/misc/asteroid/snow/temperatre
-	initial_gas_mix = "o2=22;n2=82;TEMP=255.37"
+	initial_gas = "o2=22;n2=82;TEMP=255.37"
 
 //Used in SnowCabin.dm
 /turf/open/misc/asteroid/snow/snow_cabin
@@ -226,5 +226,5 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	planetary_atmos = FALSE
 
 /turf/open/misc/asteroid/snow/standard_air
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 	planetary_atmos = FALSE
diff --git a/code/game/turfs/open/basalt.dm b/code/game/turfs/open/basalt.dm
index ce1b547fdcc..fd4f2f327cf 100644
--- a/code/game/turfs/open/basalt.dm
+++ b/code/game/turfs/open/basalt.dm
@@ -4,7 +4,7 @@
 	desc = "Rough volcanic floor that can be dug up for basalt."
 	icon = 'icons/turf/floors.dmi'
 	icon_state = "basalt"
-	initial_gas_mix = OPENTURF_LOW_PRESSURE
+	initial_gas = OPENTURF_LOW_PRESSURE
 
 /turf/open/misc/basalt/Initialize(mapload)
 	. = ..()
diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm
index 7fbc2a0e82d..693a5965a68 100644
--- a/code/game/turfs/open/chasm.dm
+++ b/code/game/turfs/open/chasm.dm
@@ -77,7 +77,7 @@
 
 // Chasms for Lavaland, with planetary atmos and lava glow
 /turf/open/chasm/lavaland
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/chasm/lavaland
 	light_range = 1.9 //slightly less range than lava
@@ -89,7 +89,7 @@
 	icon = 'icons/turf/floors/icechasms.dmi'
 	icon_state = "icechasms-255"
 	base_icon_state = "icechasms"
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/chasm/icemoon
 	light_range = 1.9
@@ -101,7 +101,7 @@
 	icon = 'icons/turf/floors/junglechasm.dmi'
 	icon_state = "junglechasm-255"
 	base_icon_state = "junglechasm"
-	initial_gas_mix = OPENTURF_LOW_PRESSURE
+	initial_gas = OPENTURF_LOW_PRESSURE
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/chasm/jungle
 
diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm
index 9757cceb226..b0f342ff46d 100644
--- a/code/game/turfs/open/floor/fancy_floor.dm
+++ b/code/game/turfs/open/floor/fancy_floor.dm
@@ -72,7 +72,7 @@
 	temperature = 180
 
 /turf/open/floor/wood/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/wood/tile
 	icon_state = "wood_tile"
@@ -353,34 +353,34 @@
 
 //*****Airless versions of all of the above.*****
 /turf/open/floor/carpet/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/black/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/blue/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/cyan/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/green/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/orange/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/purple/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/red/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/royalblack/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/royalblue/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20)
 	. = (prob(probability) || force)
@@ -670,91 +670,91 @@
 	canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK_NODOTS)
 
 /turf/open/floor/carpet/neon/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/white/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/black/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/red/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/orange/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/yellow/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/lime/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/green/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/teal/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/cyan/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/blue/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/purple/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/violet/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/pink/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/white/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/black/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/red/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/orange/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/yellow/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/lime/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/green/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/teal/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/cyan/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/blue/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/purple/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/violet/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/carpet/neon/simple/pink/nodots/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/fakepit
 	desc = "A clever illusion designed to look like a bottomless pit."
diff --git a/code/game/turfs/open/floor/hull.dm b/code/game/turfs/open/floor/hull.dm
index de34e3a2d7f..c65e96f6ad6 100644
--- a/code/game/turfs/open/floor/hull.dm
+++ b/code/game/turfs/open/floor/hull.dm
@@ -3,7 +3,7 @@
 	name = "exterior hull plating"
 	desc = "Sturdy exterior hull plating that separates you from the uncaring vacuum of space."
 	icon_state = "regular_hull"
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 	temperature = TCMB
 
 /turf/open/floor/engine/hull/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) //no rcd destroying this flooring
diff --git a/code/game/turfs/open/floor/iron_floor.dm b/code/game/turfs/open/floor/iron_floor.dm
index af4f1fa0772..af92db181a7 100644
--- a/code/game/turfs/open/floor/iron_floor.dm
+++ b/code/game/turfs/open/floor/iron_floor.dm
@@ -27,14 +27,14 @@
 
 
 /turf/open/floor/iron/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/telecomms
-	initial_gas_mix = TCOMMS_ATMOS
+	initial_gas = TCOMMS_ATMOS
 	temperature = 80
 
 /turf/open/floor/iron/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	temperature = 80
 /turf/open/floor/iron/edge
 	icon_state = "floor_edge"
@@ -147,19 +147,19 @@
 	floor_tile = /obj/item/stack/tile/iron/dark/textured_large
 
 /turf/open/floor/iron/dark/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/dark/telecomms
-	initial_gas_mix = TCOMMS_ATMOS
+	initial_gas = TCOMMS_ATMOS
 	temperature = 80
 /turf/open/floor/iron/dark/side/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/dark/corner/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/checker/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/white
 	icon_state = "white"
@@ -227,19 +227,19 @@
 	floor_tile = /obj/item/stack/tile/iron/white/textured_large
 
 /turf/open/floor/iron/white/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/white/telecomms
-	initial_gas_mix = TCOMMS_ATMOS
+	initial_gas = TCOMMS_ATMOS
 	temperature = 80
 /turf/open/floor/iron/white/side/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/white/corner/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/cafeteria/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/recharge_floor
 	icon_state = "recharge_floor"
@@ -286,7 +286,7 @@
 	floor_tile = /obj/item/stack/tile/iron/showroomfloor
 
 /turf/open/floor/iron/showroomfloor/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/solarpanel
 	icon_state = "solarpanel"
@@ -294,7 +294,7 @@
 	floor_tile = /obj/item/stack/tile/iron/solarpanel
 
 /turf/open/floor/iron/solarpanel/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 
 /turf/open/floor/iron/freezer
@@ -303,7 +303,7 @@
 	floor_tile = /obj/item/stack/tile/iron/freezer
 
 /turf/open/floor/iron/freezer/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/iron/kitchen_coldroom
 	name = "cold room floor"
diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm
index d816680006f..8157fce2dc2 100644
--- a/code/game/turfs/open/floor/mineral_floor.dm
+++ b/code/game/turfs/open/floor/mineral_floor.dm
@@ -77,35 +77,35 @@
 	return // titanium does not rust
 
 /turf/open/floor/mineral/titanium/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/yellow
 	icon_state = "titanium_yellow"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/yellow
 
 /turf/open/floor/mineral/titanium/yellow/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/blue
 	icon_state = "titanium_blue"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/blue
 
 /turf/open/floor/mineral/titanium/blue/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/white
 	icon_state = "titanium_white"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/white
 
 /turf/open/floor/mineral/titanium/white/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/purple
 	icon_state = "titanium_purple"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/purple
 
 /turf/open/floor/mineral/titanium/purple/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 // OLD TITANIUM (titanium floor tiles before PR #50454)
 /turf/open/floor/mineral/titanium/tiled
@@ -117,35 +117,35 @@
 	return list("titanium_dam1_old","titanium_dam2_old","titanium_dam3_old","titanium_dam4_old","titanium_dam5_old")
 
 /turf/open/floor/mineral/titanium/tiled/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/tiled/yellow
 	icon_state = "titanium_tiled_yellow"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/tiled/yellow
 
 /turf/open/floor/mineral/titanium/tiled/yellow/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/tiled/blue
 	icon_state = "titanium_tiled_blue"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/tiled/blue
 
 /turf/open/floor/mineral/titanium/tiled/blue/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/tiled/white
 	icon_state = "titanium_tiled_white"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/tiled/white
 
 /turf/open/floor/mineral/titanium/tiled/white/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/titanium/tiled/purple
 	icon_state = "titanium_tiled_purple"
 	floor_tile = /obj/item/stack/tile/mineral/titanium/tiled/purple
 
 /turf/open/floor/mineral/titanium/tiled/purple/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 //PLASTITANIUM (syndieshuttle)
 /turf/open/floor/mineral/plastitanium
@@ -161,14 +161,14 @@
 	return // plastitanium does not rust
 
 /turf/open/floor/mineral/plastitanium/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/mineral/plastitanium/red
 	icon_state = "plastitanium_red"
 	floor_tile = /obj/item/stack/tile/mineral/plastitanium/red
 
 /turf/open/floor/mineral/plastitanium/red/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 //Used in SnowCabin.dm
 /turf/open/floor/mineral/plastitanium/red/snow_cabin
@@ -221,7 +221,7 @@
 		sound_cooldown = world.time + 10
 
 /turf/open/floor/mineral/bananium/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 //DIAMOND
 
diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm
index d92d26dd145..3879144366b 100644
--- a/code/game/turfs/open/floor/misc_floor.dm
+++ b/code/game/turfs/open/floor/misc_floor.dm
@@ -34,10 +34,10 @@
 	on = FALSE
 
 /turf/open/floor/circuit/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/circuit/telecomms
-	initial_gas_mix = TCOMMS_ATMOS
+	initial_gas = TCOMMS_ATMOS
 	temperature = 80
 
 /turf/open/floor/circuit/telecomms/mainframe
@@ -62,10 +62,10 @@
 	floor_tile = /obj/item/stack/tile/circuit/green/anim
 
 /turf/open/floor/circuit/green/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/circuit/green/telecomms
-	initial_gas_mix = TCOMMS_ATMOS
+	initial_gas = TCOMMS_ATMOS
 	temperature = 80
 
 /turf/open/floor/circuit/green/telecomms/mainframe
@@ -87,10 +87,10 @@
 	floor_tile = /obj/item/stack/tile/circuit/red/anim
 
 /turf/open/floor/circuit/red/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/circuit/red/telecomms
-	initial_gas_mix = TCOMMS_ATMOS
+	initial_gas = TCOMMS_ATMOS
 	temperature = 80
 
 /turf/open/floor/pod
@@ -157,11 +157,11 @@
 
 /turf/open/floor/bronze/filled/lavaland
 	planetary_atmos = TRUE
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 
 /turf/open/floor/bronze/filled/icemoon
 	planetary_atmos = TRUE
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/floor/white
 	name = "white floor"
@@ -216,7 +216,7 @@
 	AddElement(/datum/element/rust)
 
 /turf/open/floor/plating/plasma
-	initial_gas_mix = ATMOSTANK_PLASMA
+	initial_gas = ATMOSTANK_PLASMA
 
 /turf/open/floor/plating/plasma/rust/Initialize(mapload)
 	. = ..()
@@ -266,4 +266,4 @@
 	return
 
 /turf/open/floor/cult/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
index e3e2ba87426..c0b6e9cb9d6 100644
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ b/code/game/turfs/open/floor/plating/misc_plating.dm
@@ -1,14 +1,14 @@
 
 /turf/open/floor/plating/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/plating/lowpressure
-	initial_gas_mix = OPENTURF_LOW_PRESSURE
+	initial_gas = OPENTURF_LOW_PRESSURE
 	baseturfs = /turf/open/floor/plating/lowpressure
 
 /turf/open/floor/plating/icemoon
 	icon_state = "plating"
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/floor/plating/abductor
 	name = "alien floor"
@@ -54,10 +54,10 @@
 	heavyfootstep = FOOTSTEP_GENERIC_HEAVY
 
 /turf/open/floor/plating/snowed/cavern
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120"
+	initial_gas = "n2=82;plasma=24;TEMP=120"
 
 /turf/open/floor/plating/snowed/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/floor/plating/snowed/smoothed
 	icon = 'icons/turf/floors/snow_turf.dmi'
@@ -76,12 +76,12 @@
 	temperature = 180
 
 /turf/open/floor/plating/snowed/smoothed/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/floor/plating/lavaland_atmos
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/lava/smooth/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 
 /turf/open/floor/plating/elevatorshaft
 	name = "elevator shaft"
diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm
index 4b08509ec6c..0b9c2394b3c 100644
--- a/code/game/turfs/open/floor/reinf_floor.dm
+++ b/code/game/turfs/open/floor/reinf_floor.dm
@@ -19,7 +19,7 @@
 	. += span_notice("The reinforcement rods are <b>wrenched</b> firmly in place.")
 
 /turf/open/floor/engine/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/engine/break_tile()
 	return //unbreakable
@@ -100,92 +100,92 @@
 /turf/open/floor/engine/n2o
 	article = "an"
 	name = "\improper N2O floor"
-	initial_gas_mix = ATMOSTANK_NITROUSOXIDE
+	initial_gas = ATMOSTANK_NITROUSOXIDE
 
 /turf/open/floor/engine/co2
 	name = "\improper CO2 floor"
-	initial_gas_mix = ATMOSTANK_CO2
+	initial_gas = ATMOSTANK_CO2
 
 /turf/open/floor/engine/plasma
 	name = "plasma floor"
-	initial_gas_mix = ATMOSTANK_PLASMA
+	initial_gas = ATMOSTANK_PLASMA
 
 /turf/open/floor/engine/o2
 	name = "\improper O2 floor"
-	initial_gas_mix = ATMOSTANK_OXYGEN
+	initial_gas = ATMOSTANK_OXYGEN
 
 /turf/open/floor/engine/n2
 	article = "an"
 	name = "\improper N2 floor"
-	initial_gas_mix = ATMOSTANK_NITROGEN
+	initial_gas = ATMOSTANK_NITROGEN
 
 
 /*/turf/open/floor/engine/bz
 	name = "\improper BZ floor"
-	initial_gas_mix = ATMOS_TANK_BZ
+	initial_gas = ATMOS_TANK_BZ
 
 /turf/open/floor/engine/freon
 	name = "\improper Freon floor"
-	initial_gas_mix = ATMOS_TANK_FREON
+	initial_gas = ATMOS_TANK_FREON
 
 /turf/open/floor/engine/halon
 	name = "\improper Halon floor"
-	initial_gas_mix = ATMOS_TANK_HALON
+	initial_gas = ATMOS_TANK_HALON
 
 /turf/open/floor/engine/healium
 	name = "\improper Healium floor"
-	initial_gas_mix = ATMOS_TANK_HEALIUM
+	initial_gas = ATMOS_TANK_HEALIUM
 */
 /turf/open/floor/engine/h2
 	article = "an"
 	name = "\improper H2 floor"
-	initial_gas_mix = ATMOSTANK_HYDROGEN
+	initial_gas = ATMOSTANK_HYDROGEN
 
 /*
 /turf/open/floor/engine/hypernoblium
 	name = "\improper Hypernoblium floor"
-	initial_gas_mix = ATMOS_TANK_HYPERNOBLIUM
+	initial_gas = ATMOS_TANK_HYPERNOBLIUM
 
 /turf/open/floor/engine/miasma
 	name = "\improper Miasma floor"
-	initial_gas_mix = ATMOS_TANK_MIASMA
+	initial_gas = ATMOS_TANK_MIASMA
 
 /turf/open/floor/engine/nitrium
 	name = "\improper nitrium floor"
-	initial_gas_mix = ATMOS_TANK_NITRIUM
+	initial_gas = ATMOS_TANK_NITRIUM
 
 /turf/open/floor/engine/pluoxium
 	name = "\improper Pluoxium floor"
-	initial_gas_mix = ATMOS_TANK_PLUOXIUM
+	initial_gas = ATMOS_TANK_PLUOXIUM
 
 /turf/open/floor/engine/proto_nitrate
 	name = "\improper Proto-Nitrate floor"
-	initial_gas_mix = ATMOS_TANK_PROTO_NITRATE
+	initial_gas = ATMOS_TANK_PROTO_NITRATE
 
 /turf/open/floor/engine/tritium
 	name = "\improper Tritium floor"
-	initial_gas_mix = ATMOS_TANK_TRITIUM
+	initial_gas = ATMOS_TANK_TRITIUM
 
 /turf/open/floor/engine/h2o
 	article = "an"
 	name = "\improper H2O floor"
-	initial_gas_mix = ATMOS_TANK_H2O
+	initial_gas = ATMOS_TANK_H2O
 
 /turf/open/floor/engine/zauker
 	name = "\improper Zauker floor"
-	initial_gas_mix = ATMOS_TANK_ZAUKER
+	initial_gas = ATMOS_TANK_ZAUKER
 
 /turf/open/floor/engine/helium
 	name = "\improper Helium floor"
-	initial_gas_mix = ATMOS_TANK_HELIUM
+	initial_gas = ATMOS_TANK_HELIUM
 
 /turf/open/floor/engine/antinoblium
 	name = "\improper Antinoblium floor"
-	initial_gas_mix = ATMOS_TANK_ANTINOBLIUM
+	initial_gas = ATMOS_TANK_ANTINOBLIUM
 */
 /turf/open/floor/engine/air
 	name = "air floor"
-	initial_gas_mix = ATMOSTANK_AIRMIX
+	initial_gas = ATMOSTANK_AIRMIX
 
 
 
@@ -217,12 +217,12 @@
 	QDEL_NULL(realappearance)
 
 /turf/open/floor/engine/cult/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/engine/vacuum
 	name = "vacuum floor"
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/floor/engine/telecomms
-	initial_gas_mix = TCOMMS_ATMOS
+	initial_gas = TCOMMS_ATMOS
 	temperature = 80
diff --git a/code/game/turfs/open/glass.dm b/code/game/turfs/open/glass.dm
index 30af15393c9..cfb6b2a0c4d 100644
--- a/code/game/turfs/open/glass.dm
+++ b/code/game/turfs/open/glass.dm
@@ -42,7 +42,7 @@
 	icon_state = "reinf_glass-0"
 	base_icon_state = "reinf_glass"
 	floor_tile = /obj/item/stack/tile/rglass
-	initial_gas_mix = "ICEMOON_ATMOS"
+	initial_gas = "ICEMOON_ATMOS"
 
 /turf/open/floor/glass/reinforced/setup_broken_states()
 	return list("reinf_glass-damaged1", "reinf_glass-damaged2", "reinf_glass-damaged3")
diff --git a/code/game/turfs/open/grass.dm b/code/game/turfs/open/grass.dm
index b1ecd34165d..1f65573db01 100644
--- a/code/game/turfs/open/grass.dm
+++ b/code/game/turfs/open/grass.dm
@@ -29,4 +29,4 @@
 		icon = smooth_icon
 
 /turf/open/misc/grass/lavaland
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm
index da29593d3a8..8cd466fcefb 100644
--- a/code/game/turfs/open/ice.dm
+++ b/code/game/turfs/open/ice.dm
@@ -34,7 +34,7 @@
 
 /turf/open/misc/ice/icemoon
 	baseturfs = /turf/open/openspace/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	slowdown = 0
 
 /turf/open/misc/ice/icemoon/no_planet_atmos
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 5c82669420f..37c2f2b7815 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -44,7 +44,7 @@
 	return
 
 /turf/open/lava/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/lava/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
 	if(burn_stuff(arrived))
@@ -233,9 +233,9 @@
 	canSmoothWith = list(SMOOTH_GROUP_FLOOR_LAVA)
 
 /turf/open/lava/smooth/lava_land_surface
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/lava/smooth/lava_land_surface
 
 /turf/open/lava/smooth/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm
index f2d890b5c63..154e956b95f 100644
--- a/code/game/turfs/open/openspace.dm
+++ b/code/game/turfs/open/openspace.dm
@@ -24,7 +24,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
 	var/can_build_on = TRUE
 
 /turf/open/openspace/airless
-	initial_gas_mix = AIRLESS_ATMOS
+	initial_gas = AIRLESS_ATMOS
 
 /turf/open/openspace/airless/planetary
 	planetary_atmos = TRUE
@@ -166,7 +166,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
 /turf/open/openspace/icemoon
 	name = "ice chasm"
 	baseturfs = /turf/open/openspace/icemoon
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	var/replacement_turf = /turf/open/misc/asteroid/snow/icemoon
 	/// Replaces itself with replacement_turf if the turf below this one is in a no ruins allowed area (usually ruins themselves)
diff --git a/code/game/turfs/open/planet.dm b/code/game/turfs/open/planet.dm
index 6c1ae311ae9..30e7a430020 100644
--- a/code/game/turfs/open/planet.dm
+++ b/code/game/turfs/open/planet.dm
@@ -6,7 +6,7 @@
 	icon_state = "dirt"
 	base_icon_state = "dirt"
 	baseturfs = /turf/open/chasm/jungle
-	initial_gas_mix = OPENTURF_LOW_PRESSURE
+	initial_gas = OPENTURF_LOW_PRESSURE
 	planetary_atmos = TRUE
 	footstep = FOOTSTEP_SAND
 	barefootstep = FOOTSTEP_SAND
@@ -20,7 +20,7 @@
 
 /turf/open/misc/dirt/jungle
 	slowdown = 0.5
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 
 /turf/open/misc/dirt/jungle/dark
 	icon_state = "greenerdirt"
@@ -46,7 +46,7 @@
 
 /turf/open/misc/grass/jungle
 	name = "jungle grass"
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	baseturfs = /turf/open/misc/dirt
 	desc = "Greener on the other side."
diff --git a/code/game/turfs/open/snow.dm b/code/game/turfs/open/snow.dm
index 66d1bfc571a..c1504c049cd 100644
--- a/code/game/turfs/open/snow.dm
+++ b/code/game/turfs/open/snow.dm
@@ -24,4 +24,4 @@
 /turf/open/misc/snow/actually_safe
 	slowdown = 0
 	planetary_atmos = FALSE
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm
index 02e19e94890..37003cc214d 100644
--- a/code/game/turfs/open/water.dm
+++ b/code/game/turfs/open/water.dm
@@ -4,7 +4,7 @@
 	icon = 'icons/turf/floors.dmi'
 	icon_state = "riverwater_motion"
 	baseturfs = /turf/open/chasm/lavaland
-	initial_gas_mix = OPENTURF_LOW_PRESSURE
+	initial_gas = OPENTURF_LOW_PRESSURE
 	planetary_atmos = TRUE
 	slowdown = 1
 	bullet_sizzle = TRUE
@@ -17,7 +17,7 @@
 	heavyfootstep = FOOTSTEP_WATER
 
 /turf/open/water/jungle
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 
 /turf/open/water/beach
 	planetary_atmos = FALSE
@@ -30,4 +30,4 @@
 
 //Same turf, but instead used in the Beach Biodome
 /turf/open/water/beach/biodome
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index afbe60689b3..09799615bdd 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -5,10 +5,9 @@
 /turf
 	var/needs_air_update = 0
 	var/datum/gas_mixture/air
-	var/list/initial_gas
 	var/heat_capacity = 1
 	var/thermal_conductivity = 0.05
-	var/list/initial_gas_mix
+	var/list/initial_gas
 	var/planetary_atmos //Let's just let this exist for now.
 
 ///turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) ZASTURF
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 0ea9c9697f9..1d520237b4b 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -481,6 +481,7 @@
 	return temperature
 
 /datum/gas_mixture/proc/total_moles()
+	update_values()
 	return total_moles
 
 /datum/gas_mixture/proc/has_gas(gas_id, required_amount)
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
index 6887aa8ca32..be85db9b29a 100644
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
@@ -23,7 +23,7 @@
 	 * approximation of MOLES_O2STANDARD and MOLES_N2STANDARD pending byond allowing constant expressions to be embedded in constant strings
 	 * If someone will place 0 of some gas there, SHIT WILL BREAK. Do not do that.
 	**/
-	var/initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	var/initial_gas = OPENTURF_DEFAULT_ATMOS
 
 /turf/open
 	//used for spacewind
@@ -41,7 +41,7 @@
 
 	///If there is an active hotspot on us store a reference to it here
 	var/obj/effect/hotspot/active_hotspot
-	/// air will slowly revert to initial_gas_mix
+	/// air will slowly revert to initial_gas
 	var/planetary_atmos = FALSE
 	/// once our paired turfs are finished with all other shares, do one 100% share
 	/// exists so things like space can ask to take 100% of a tile's gas
@@ -59,10 +59,10 @@
 		air = new
 		air.copy_from_turf(src)
 		if(planetary_atmos)
-			if(!SSair.planetary[initial_gas_mix])
+			if(!SSair.planetary[initial_gas])
 				var/datum/gas_mixture/immutable/planetary/mix = new
-				mix.parse_string_immutable(initial_gas_mix)
-				SSair.planetary[initial_gas_mix] = mix
+				mix.parse_string_immutable(initial_gas)
+				SSair.planetary[initial_gas] = mix
 	. = ..()
 
 /turf/open/Destroy()
@@ -317,7 +317,7 @@
 	/******************* GROUP HANDLING FINISH *********************************************************************/
 
 	if (planetary_atmos) //share our air with the "atmosphere" "above" the turf
-		var/datum/gas_mixture/planetary_mix = SSair.planetary[initial_gas_mix]
+		var/datum/gas_mixture/planetary_mix = SSair.planetary[initial_gas]
 		// archive ourself again so we don't accidentally share more gas than we currently have
 		LINDA_CYCLE_ARCHIVE(src)
 		if(our_air.compare(planetary_mix))
@@ -484,7 +484,7 @@
 
 	for(var/turf/open/group_member as anything in turf_list)
 		if(group_member.planetary_atmos) //We do this as a hack to try and minimize unneeded excited group spread over planetary turfs
-			group_member.air.copy_from(SSair.planetary[group_member.initial_gas_mix]) //Comes with a cost of "slower" drains, but it's worth it
+			group_member.air.copy_from(SSair.planetary[group_member.initial_gas]) //Comes with a cost of "slower" drains, but it's worth it
 		else
 			group_member.air.copy_from(shared_mix) //Otherwise just set the mix to a copy of our equalized mix
 		group_member.update_visuals()
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index c7d96d7c721..7e8146e6a88 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -307,7 +307,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 ///Copies all gas info from the turf into the gas list along with temperature
 ///Returns: TRUE if we are mutable, FALSE otherwise
 /datum/gas_mixture/proc/copy_from_turf(turf/model)
-	parse_gas_string(model.initial_gas_mix)
+	parse_gas_string(model.initial_gas)
 
 	//acounts for changes in temperature
 	var/turf/model_parent = model.parent_type
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index 551d8ca3596..126a92bd4f7 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -165,7 +165,7 @@
 	name = "liquid plasma"
 	desc = "A flowing stream of chilled liquid plasma. You probably shouldn't get in."
 	icon_state = "liquidplasma"
-	initial_gas_mix = "n2=82;plasma=24;TEMP=120"
+	initial_gas = "n2=82;plasma=24;TEMP=120"
 	baseturfs = /turf/open/lava/plasma
 
 	light_range = 3
@@ -226,7 +226,7 @@
 
 //mafia specific tame happy plasma (normal atmos, no slowdown)
 /turf/open/lava/plasma/mafia
-	initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	initial_gas = OPENTURF_DEFAULT_ATMOS
 	baseturfs = /turf/open/lava/plasma/mafia
 	slowdown = 0
 
diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm
index a78fb3f85e4..3e10c363752 100644
--- a/code/modules/holodeck/turfs.dm
+++ b/code/modules/holodeck/turfs.dm
@@ -47,7 +47,7 @@
 
 /turf/open/floor/holofloor/plating/burnmix
 	name = "burn-mix floor"
-	// initial_gas_mix = BURNMIX_ATMOS
+	// initial_gas = BURNMIX_ATMOS
 	//TODO: cause warcrimes later
 /turf/open/floor/holofloor/grass
 	gender = PLURAL
@@ -167,7 +167,7 @@
 	tiled_dirt = FALSE
 
 /turf/open/floor/holofloor/snow/cold
-	initial_gas_mix = "nob=7500;TEMP=2.7"
+	initial_gas = "nob=7500;TEMP=2.7"
 
 /turf/open/floor/holofloor/dark
 	icon_state = "darkfull"
diff --git a/code/modules/ruins/icemoonruin_code/hotsprings.dm b/code/modules/ruins/icemoonruin_code/hotsprings.dm
index e396f872980..af9be4f5989 100644
--- a/code/modules/ruins/icemoonruin_code/hotsprings.dm
+++ b/code/modules/ruins/icemoonruin_code/hotsprings.dm
@@ -13,7 +13,7 @@
 /turf/open/water/cursed_spring
 	baseturfs = /turf/open/water/cursed_spring
 	planetary_atmos = TRUE
-	initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/water/cursed_spring/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
 	. = ..()
diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
index 88a6560770d..cb457ecab3e 100644
--- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -37,7 +37,7 @@
 	base_icon_state = "wasteland"
 	baseturfs = /turf/open/misc/asteroid/basalt/wasteland
 	digResult = /obj/item/stack/ore/glass/basalt
-	initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	initial_gas = LAVALAND_DEFAULT_ATMOS
 	slowdown = 0.5
 	floor_variance = 30
 
diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index 4a88ca40646..02224722411 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -24,13 +24,13 @@
 
 	var/turf/open/to_fill = run_loc_floor_bottom_left
 	//Prep the floor
-	to_fill.initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	to_fill.initial_gas = OPENTURF_DEFAULT_ATMOS
 	to_fill.air = new
 	to_fill.air.copy_from(to_fill.return_air())
 
 	lab_rat.breathe()
 
-	TEST_ASSERT(!lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN), "Humans can't get a full breath from the standard initial_gas_mix on a turf")
+	TEST_ASSERT(!lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN), "Humans can't get a full breath from the standard initial_gas on a turf")
 
 /// Tests to make sure plasmaman can breath from their internal tanks
 /datum/unit_test/breath_sanity_plasmamen
@@ -64,16 +64,16 @@
 
 	var/turf/open/to_fill = run_loc_floor_bottom_left
 	//Prep the floor
-	to_fill.initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+	to_fill.initial_gas = LAVALAND_DEFAULT_ATMOS
 	to_fill.air = new
 	to_fill.air.copy_from(to_fill.return_air())
 
 	lab_rat.breathe()
 
-	TEST_ASSERT(!lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN), "Ashwalkers can't get a full breath from the Lavaland's initial_gas_mix on a turf")
+	TEST_ASSERT(!lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN), "Ashwalkers can't get a full breath from the Lavaland's initial_gas on a turf")
 
 /datum/unit_test/breath_sanity_ashwalker/Destroy()
-	//Reset initial_gas_mix to avoid future issues on other tests
+	//Reset initial_gas to avoid future issues on other tests
 	var/turf/open/to_fill = run_loc_floor_bottom_left
-	to_fill.initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+	to_fill.initial_gas = OPENTURF_DEFAULT_ATMOS
 	return ..()

From bccff85f2f7ac55f0485126f803eb40df79d3676 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 18 Apr 2022 22:18:45 -0400
Subject: [PATCH 016/200] Space wind tweaks

---
 code/__DEFINES/atmospherics/temperature.dm    |   6 +++-
 code/controllers/subsystem/zas.dm             |  30 +++++++++---------
 .../atmospherics/ZAS/ConnectionGroup.dm       |   1 +
 code/modules/atmospherics/ZAS/Turf.dm         |  22 +++++++++----
 .../master_files/sound/effects/space_wind.ogg | Bin 0 -> 22791 bytes
 .../sound/effects/space_wind_big.ogg          | Bin 0 -> 37047 bytes
 6 files changed, 36 insertions(+), 23 deletions(-)
 create mode 100644 modular_pariah/master_files/sound/effects/space_wind.ogg
 create mode 100644 modular_pariah/master_files/sound/effects/space_wind_big.ogg

diff --git a/code/__DEFINES/atmospherics/temperature.dm b/code/__DEFINES/atmospherics/temperature.dm
index d86e844aab9..bac65da5b79 100644
--- a/code/__DEFINES/atmospherics/temperature.dm
+++ b/code/__DEFINES/atmospherics/temperature.dm
@@ -2,11 +2,15 @@
 #define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5
 #define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25
 
-#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
+/*#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
 	_atom.temperature = _temp; \
 	if(_atom.reagents) { \
 		START_PROCESSING(SSreagents, _atom.reagents); \
 	} \
+	QUEUE_TEMPERATURE_ATOMS(_atom);*/
+
+#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
+	_atom.temperature = _temp; \
 	QUEUE_TEMPERATURE_ATOMS(_atom);
 
 #define QUEUE_TEMPERATURE_ATOMS(_atoms) \
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index f3b847cab8f..04e57f1353a 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -144,10 +144,10 @@ SUBSYSTEM_DEF(zas)
 	if(!can_fire)
 		msg += "REBOOTING..."
 	else
-		msg += "TtU: [length(tiles_to_update)]"
-		msg += "ZtU: [length(zones_to_update)]"
-		msg += "AFZ: [length(active_fire_zones)]"
-		msg += "AH: [length(active_hotspots)]"
+		msg += "TtU: [length(tiles_to_update)] "
+		msg += "ZtU: [length(zones_to_update)] "
+		msg += "AFZ: [length(active_fire_zones)] "
+		msg += "AH: [length(active_hotspots)] "
 		msg += "AE: [length(active_edges)]"
 	return ..()
 
@@ -407,7 +407,7 @@ SUBSYSTEM_DEF(zas)
 
 /datum/controller/subsystem/zas/proc/process_tiles(resumed = FALSE)
 	if(!resumed)
-		src.currentrun = tiles_to_update.Copy()
+		src.currentrun = tiles_to_update
 
 	var/list/currentrun = src.currentrun
 	while (currentrun.len)
@@ -441,7 +441,7 @@ SUBSYSTEM_DEF(zas)
 
 /datum/controller/subsystem/zas/proc/process_deferred_tiles(resumed)
 	if(!resumed)
-		src.currentrun = deferred.Copy()
+		src.currentrun = deferred
 	var/list/currentrun = src.currentrun
 
 	if(current_process == SSZAS_DEFERED_TILES)
@@ -511,7 +511,7 @@ SUBSYSTEM_DEF(zas)
 
 /datum/controller/subsystem/zas/proc/process_zones(resumed)
 	if(!resumed)
-		src.currentrun = zones_to_update.Copy()
+		src.currentrun = zones_to_update
 	var/list/currentrun = src.currentrun
 
 	if(current_process == SSZAS_ZONES)
@@ -527,19 +527,19 @@ SUBSYSTEM_DEF(zas)
 
 /datum/controller/subsystem/zas/proc/process_atoms(resumed)
 	if(!resumed)
-		src.currentrun = atom_process.Copy()
+		src.currentrun = atom_process
 
 	var/list/currentrun = src.currentrun
 
 	if(current_process == SSZAS_ATOMS)
 		while(currentrun.len)
-		var/atom/talk_to = currentrun[currentrun.len]
-		currentrun.len--
-		if(!talk_to)
-			return
-		talk_to.process_exposure()
-		if(MC_TICK_CHECK)
-			return
+			var/atom/talk_to = currentrun[currentrun.len]
+			currentrun.len--
+			if(!talk_to)
+				return
+			talk_to.process_exposure()
+			if(MC_TICK_CHECK)
+				return
 
 /**
  * Adds a given machine to the processing system for SSAIR_ATMOSMACHINERY processing.
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 66b88abfc1e..fcc71024f78 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -168,6 +168,7 @@ Class Procs:
 			attracted = B.movables()
 			repelled = A.movables()
 
+		playsound(pick(connecting_turfs), 'modular_pariah/master_files/sound/effects/space_wind_big.ogg', 100, TRUE, null, pressure_affected = FALSE)
 		flow(attracted, abs(differential), 0)
 		flow(repelled, abs(differential), 1)
 
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 09799615bdd..ecd4a9cf8d6 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -257,14 +257,22 @@
 /turf/return_air()
 	RETURN_TYPE(/datum/gas_mixture)
 	//Create gas mixture to hold data for passing
-	var/datum/gas_mixture/GM = new
-
-	if(initial_gas)
-		GM.gas = initial_gas.Copy()
-	GM.temperature = temperature
-	GM.update_values()
+	if(zone)
+		if(!zone.invalid)
+			SSzas.mark_zone_update(zone)
+			return zone.air
+		else
+			if(!air)
+				make_air()
+			c_copy_air()
+			return air
+	else
+		if(!air)
+			make_air()
+		return air
 
-	return GM
+/turf/open/space/return_air()
+	return air
 
 /turf/remove_air(amount as num)
 	var/datum/gas_mixture/GM = return_air()
diff --git a/modular_pariah/master_files/sound/effects/space_wind.ogg b/modular_pariah/master_files/sound/effects/space_wind.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..3709cdb05575345259e84a219111f6ffd8cdbd38
GIT binary patch
literal 22791
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
D;Syu-

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/sound/effects/space_wind_big.ogg b/modular_pariah/master_files/sound/effects/space_wind_big.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..6e8934bb6038cee722bccb22b8a07ee62e55d6f6
GIT binary patch
literal 37047
zcmb@tby!?I_b56*aW7EZ-Q69E``}*OihI!(DemqzNO6baEmqv!T8djK?q}1!@Av!e
zx%WBepSvfMC&^k_D@&6d1{EtSbr3Y@pNEY4Z)1bzJ027Xl!v2>sg3LN5Y+36e^8wN
zBDX-PJkR{k^E?v@=%vyvhhY{x{Xd^sn7@=50R$ZzCu<fJ7b~*2Hl|vC=#$Bjaj>y-
zuyL?)lF_NyJJ>k6Sh!j^xY0jz5(mEOj+SnoCN37j;^vN~7G&b?<~D9Njt*p8ENsAs
zosXTHj7~>M^|hm!ij%8`g}sxbi^*F74mLJE7It<PHg0+nfXHic4Jl!O4-YdNKQjlL
z1_!4A7molpCo>zb02><=>_01%kko<#AprR7ie!C(6LFd#5C#bJhKe37(Nc~cl9W&9
zot7l~-0EWsPfH5#!!wIw@Bg<V<1)tqfnI<D=@4TIx8-cd_^t40V_fq1ZIt;+$lxQ?
zHuw?0T+o;~6gL#xIgHU$BcSTSf&l%C$&!a)gP$wYF!E45p!!JUGDu#M<$}aen)d;T
zV~{LJkz=nYQCVQGv@k|spRQp-0-3pCN?wtDR?Doa1J2Obb&P)}>z@koj~rycS|s4`
z%`qepp2>&N7pJ)Zr2dLU1_}hk1j)o>%hh5J*Ak6RQmOoAQp4h&<djm^P|^e*cSCIt
zi+K<Cc@IC`v=IFkKi!rP{e=+2s}K{s(0|Ic-}=>a`6D_R6ey39KV_4?fP$dl2Y&%f
zaA*ZI$oyF)WQYkA^a+J>#g?{JHknP<<xTd(bxgx`D1T4@-+A%88c?21M)CivSn8%&
z{NIb1^&kUC4AA9(Gtq!El@yq2z=a9^kA??9fKA1~Onoj~GOk<$u0lYOaeMtONpbXC
z5&d5yJewT^5@RRob0+!*XameV?ZU0?Dm?G1G!LlaStI}F=lvgl0R$n>woI`NMBt1w
z`J<LVfGl1<f+WgcP5?q!{!g-uiHx&Rezc6OyfW;}>7H<nOxo76w9G#id^?7}3D}Z;
zD7`N)eImnkOb#Uj^0(#vG84YCYzi2|-^oJj$2S4+Y^E~c%NBKjxw;b>+oi48Kr1{c
zleV!{<1f8`+@j1VYpjR=J1`@BDbubM(GY0em}ec2B0i7(@9rZ8*v(`CuRr?(nO_W?
zDK>dAc_N8hELvh7`yhQ0Npy^~d|8kx7@rp6_Ti7@WFSy5#vd>KxBBDCf4#UUA%bCu
zu6~4LnCZEy_&O$VQ1cZ-5``V`VkU0Di=!L2b6l(VW$hr1b9#)BB(OX^<Zna)MkO<k
z6Nkh96C|N&E<^MsKvev<;eJt#V-ipPR~bJgQhP}alt~U|bxvVT4NYwid)-v`<>nB>
z1^4xNzxDZOW8BdH-Ld`?IUpctg8#&1l4%tCKvs~l1ma%<{~I~Z*aPuI-{Pqh>Zp{a
zm_~ndshn|5Vo9lSDXHTaPU5&vzp_y0F`VYMnAWtI^{`lMve0k#({1`EVE%^9`n>yp
zMb2}GQ1HiW$|k({pUBChi}}G9Ln)U)rJF$GonjT9QI?*wS5|=ZzeSF9L`hmiNm#^A
zSPWfwicNUNr`CeELsbW#|F7jgkt5?m1r#81q+F=}D{{Koi6nt&s$)_*`zxdHB%n|?
zDct`y00`6_hobN&kEnr}XTjXFU}jAX;s0~Q0MJ=3rD-levB@A1J_xki2WTB5p)f@c
zqf>i`pN{*=h}{yqcg+WqCLZJRE8SF{pRTcFj2#jdZ=lZ@Ptj|FCZMTIUn;&cCx^fc
z52U>pAT=P|B*NHx@l2z{2gzPXu_NFIhq1$v2Th10P=_ROAdn}=fqU_Q?l-dFBndhE
zq&ToF1Oy5M!2@69{E0XmD6uRM=tG=q7&`)v8HNBtnHvW96JAgpKP|N@nmipf1VdgP
z0C4P3nUBdKQWs&%%asMif$1O+Re4)_2%fq;vj+wk2?79Y=o_*1<(c~<*b&lQ!5lk9
z!C*ZAkit(30cODGCnbRGAVqTkz->Zqk1Pocwkb=R(W9eo1OU{@b9#2{#dD@8e@Imp
z&6wKKH_ho){9#`7%={T3$Ly*s4^N&vCQc8`0M=qL_DpI@oDNbnr6&hzRFzkthRjLO
zS2oU>DwZ`8$jbqw^yJDKXY?v78}S4Y=tG`Y)sUhW!47$4MhE%B90D+JY<gzipaHgd
zo?%<r4=^tS1hivsnzM~&?<X=F<%eLK+0ysV=tVI%5t&tRd;XF96|kyC0KnW2sN~P8
zn1LCJm3;*Ae@Fq$=k%g08wu3q0Re3l%YdzPq_Gjt6`1kNqY)1vHGpTw3~ayMP$07I
zU=CI5L3t1v60kYLk@shDBGC8Y1^1Id@PaVt`_f!7C?I&QXcGNEOa9w)i=H_6<+EKd
z<mu^wZCP~#*vsDp75DxCg@jhT07*cD@Pd;}NBDQh02>6yfus0$h=Rf32n=up`%YGn
zs=RzMSdo4EdCay9EYIHmXROR3>Uj(Upxg*-{aHa667=+qbHH3TfExs|AOOq-SOWUi
z1Ly&G5XhYA!5=(o$c$bjc`#UBjvA6;8p#f{0K6o<NcI#BuzVSS7g^g6mIw0Q95B|O
z0q_M37FFA?r!N1jE?`X04mf7PqXDNa=?OXMWT^$~FCp-Ge_R$D&=iU(3VUdlD+UKb
zyeo<XJh=<t2u0>#2^(^VqP#41(JOwy&%hk?`4Ckw4Rw)*9z6(j2&nh4TY`?uoEj7d
z5A0q=*ubGCGzm~cKar$7pk=ctz^8$+og^?Ia+)hp5dr%JaP9%LM`ShvsLM45&;>9y
z@C?|=GW)xmAc8;)PQd0{qh{{<AwCZXPiRmXuuHJZ|IsT!2p)iq0O68l-v$;fU-q|~
z1peElr+$W#1J-$lN&sQ^+y#^-pZ(m;PfC(N0JaH0b0L7jAxRo~3=jYrP?gqSz1miS
zK)+tVgYuvWwPg6{36Poo$Or}M24Yzpj@<0|WE2ckz&i1s*U6TTf=y8O5+n<p%1{9L
z;eqJ-<6H7_^v_=L>?zN#_H6urx^}=?p1XL0f1q~kp?|w(D9;PGW1rLe1GO7z{HJRt
z4@8_@CHGDe5ZZHku4AwuGA=$)An`(tz!$kmoj3X9j8K6>AdoEmpMxb3UC&B?w#L8b
zO!ngcwEk!8Piy-hz{s<4qWHIop66z{Dg*BS9tI>97)_Ch74-t=Sw;lF)KMmX+&@mf
zFzJtileGvSSwSzKJsL<*)DXb)nVUxV>FJXJQJ6hm0$spKD{6tvWmnet$}E}~$Yv4D
z{RFN@fNB7F0RIG%-~xa$mmx|2i~<O1089e_qm4Vy3ISS`ttHP?<_ug<grBK2ZfE%b
zYDg2}1Bp>D@O_n^(*17j^hXaXAdoaYAOYGxmP-B`rhg5`07U#Bmw4`)KgX}zUx38m
ze*uCgo&)<2KvjYs0?dH_V|4OhRr!AbFXibVN&k|9JjdlfC@-HK3oP*0P5z!q{*wCR
zabS7Gzj%KRD@iY(7x{Mv;DFC~`F{am`9FU9OzN2);JoDj0suyTnEwHQB@n3p1AqVo
zfK~kk0F3@^JyQXJCjQtHGx?Qi3BESTdrBmHn!oY&9oYW<#kHmScRnSMXa1q|?<)TP
z@BV+X0F@4-z<2K=5?blV2{00&viym`S3tylO*4xTrv<`T&o1qQs>E(l(Ukn#T5fsq
zXJvtbFqz}nElo<0m#^%5Wfqkl1O_tz85GEeb7&Is%#E+~BWt(y?BMf@fDHQVU{xJK
zaq@PRTX<$Q{5wnHbo7l2rcvDUdOm1n4FG}0O9Q)6{xBfJv(FK@j&fhEC;*f*?5eoo
zb6qitAq%$A+&fu57y{QbdeN=hByJPpJ0x!MmB21ICJayR`>VB4$8MB+XDtX_0Aby>
z9B^#A6XC0zAP089lP7wfQN&yD?8f=8h=S1su1QcpgV9bPF$1=QIDz4ssW3v7ZjARp
zenA3-0UKHrkbr{!+Qc;CZ>axQFas|MG<?7TT&JgMWa?A&k7DKD1?bSZ6PTIt<f&lx
zL@e>x8P&+-Hy^c}f^Y->Y-qq+4n`QD5!V=uq&d^0Rt<T6+uEHZ@()=JSqk4!#Fh2z
zn9T?2XxW>vIfAhpmh|?3bZ%N+>lVc>SJsyzzXP1#K_5UM7)%Z<1Z=VQ?@>T}VzP12
zAS7fI;;&L-Vl3o^-FZ%me6-m-z?*s42u65V9~pZ-0UbjzOkf{us4r-6VnMd8C6EQi
zV4}|uUIIY^<AV;77!)EO-}g}3wO_%6S$XOj`_Fuy->WwOEi8g43ewXzcYj@j5Haz|
z>Dl?k<<x+53_N6@Yaj_~1%_E$Zu1EUiHJ$OmX?)QR8|FR{O86ZFfi~Bt{6}U2L8R1
z=w|pc1bV)cct(uu;%&#X)_W>=vVD5<Wb|b9Wc}pu<n&|*eC%JteT)2X@}*{_aQ=eg
z;IhqXz0>FH_@Zt8tZ%f0_iEkuv(-~h{ic?}WDZegOi|3KR;6(L<+sLx;k(g_)gEFL
z9G^O=yWGN{IJ>&D_3mgtzE#fD%L8KWR~p}4ToRk_q=icT8tt*pp}r!wE@o$XRFF=2
z?>{mSYDW&I>Ip_lz3cE6n(YZW+Sgz9H>Euiv_HDhLAC6RrP4U_A+z4D6{K)jA8}n@
zR_L$}s%6Y(dmr;kcw2W|?nl>tU+jA+XpkQ6ixoj#LMTG7e$%Hm(e2+yZL`G}g$|>2
z%Vk37^o>?k8J0$y+v=_U)V;Tqj#ojKYqsws8Yju{u5Es82YvO-JmVj2BgIWB8)vT9
z8T3-Qq<nH;V#s_^Bj3`r95RCMUHU^HNc?Cls5QTq8;hWJAmn55T&hEKfc)e9p6<wf
z!n%JG3lTi2s4-nLHWTGS&N1Ac{+5C^RC~0`A_UpTTQnOTi&L*Q!cIA_cyaPH&;EPd
z!mU}?r}5Ms$=_@?Heu<B@xq=5#MKvO!$ddV5|K`pI_eMxZQz^Q-jy5$dKJ++A`m>x
zIF@Rz$#h!knTo8TMH9bWm^g|exn+Q}Jvd>k9I{3uefvmET4_Df<(|kgpg(@M7$qWT
zROz2;>5VPLUjlg@5<U9?8Z&N&E)!n={j48hf3{j)Su9-D>$U{^O6wgdjc;$ejv?p$
zaK1CE8>cx!4=~2wNwjNCdf6C!G_Q1YB0J9N3pc8MRVt7oQN{*Obgsd9uU!<`X_0*8
z(~Ojh$Ak)c#o`9JQ?h6GLGzA^6KR7@kvfWb3G=ucw8FVf)ct}-y5^^SYBoy!k`wCf
zd9{_fQQPS<leKE-qz0Rmokb=F?6G|WuK&;%%fr>-Sw7kQ_a*RNM6@IW%Dvb@&D?In
ztjSj)b%$`7F%_}6F2ujxOTzVNnQU0cw58E@goj6q*(2nT0${~e+`Z<|Jy+z1am(k0
zZp~UVU9ai*-@II7%}LE&Us18!s(;zcr7h&gk#`s?cwfm@7R&NOwHc0g_!^m7C~4GL
zXtP6w)HO(@7qw2shune}g%qP)saYGRh)$<^P~Nx@QwZ9$q*WkazisAsMeaA_vzHYi
z#cVp%t{&}&1~JDQv5S6`p_YzImfju#k80fNW7~A01uxGXgk#t<?+fPUI<e{0Ib0i-
zoQY9wP^4t%zgDQF5*gCN{%%?H5G5g<>N<Dn#khliaz+~qrh^@vmuNMr$ly-joDr6m
zFl*-w^sSXX6%>zkYfnK|i!~Tp;k*6-g9btY8QF66%9J954iny`>@f~>vX<#Meyk?a
z_2JYHzi?=t;bXJO58O$YD)xCzn3D2J^$k<j{`L6c4C;PW(i5D;g^N9hpnv;bKcwe$
zr|?7|F4mzj4Nm7a<5+qJrvv=H9>p{2EO>O<@+K`o#fLN8O*(^z#%x&rCllV7OZMh#
z<Tr~)YFP^z%EF7E1iB!P1CJ}zFar6lreobc`o8h!V}<kdlMb%!G$Gd>eR10l$Z+t&
zl!mV>Rs~BHxg&4;VDmnoAmiA_7@sF2n%YS8-s&X}yyIA^dWVGk$|J*}GP7{&Jwe82
zP9IhD{rB#lsgrMckHKxL_7oKF`nu$YsTS{u6R^@^ijSnp1oHa(V@@wZy#lia(?R-{
zPJ9&8-ZOe1)sW|)@}P+ARA})uvnft;$r*o-GHIq*nWH0h<ZlO+QyV}ZnQ7}J9V+l(
zEr4}j1k!(@_)0FTwteRJ0_6XW>pHoDgbws^ZK9d^RP9yP7*vMhtI@AYan$ntRvGD`
zc)2{=hH15-&`Y7CnYgN;$ffc5P-T0~c%OI1tnj=rJnzkejmrv3zg-h~ZXP_eMM$rN
z^0`KJI2STC({~ttE=ZI78BeoZZ!_+fD|!i?%wl1%f}408Yg*WajP))ji`?GfOgHqs
zo+qByba%@`WMALQbiq63yE5iTSCdxr$-twB>8eyCjhE}%FZV@Koi8s?(xYNv4noRD
z<0lem9O`kx@hA1$G<KUfeWa|P?&gOUhqmmruHuwW^%a|OPrYgcq!4Z#?tU%e^u%~D
zU<knnkTk)cn)RF}1tY#4vHuK3Llrln)BwLOghv7%U}i!d5m0ZUb?Um^o)E>=RcC5I
zt(C)-Z+br{`O|v2f=_=CoS5!up|g~<3)a2%c-Mau5ZmWbc5FwHEsuo=4@=pL@Mgt`
z(vZRc^r+jrL99<1f*7~s*XrwbRtYg1CsmM4e*dzCZ>zr2d`ul|qkpDFL!UPh;L3HG
z-n5!gPQ4$rO4<v*Gu*H7Lb5XWO@rPir__j^L=qkxdTkpeCfC$gdOB|N_HS7q9=dqD
zS^S=wAFsTbyS7EEJBy1u&nWIiyB5_Sb1QFRT#Ap32^o$E^G(bR=~FDHg<ijj*T&qp
zx~^9#-ZOW9$I<}PiolKTvWr9-s$)4;z^_WrBpD#oo<1RAc<z?Kj`*?`qn)yv_vx$W
z19gwt53ziEzP_}}jwGA3=~R(if?H?^nR(YPEWJAU&)Tf)ip>&({jq_dq`t84HysdF
z&5yK`y{XP={NwG~?cdwI+x6vQCFi2d-m}B~NLIPfGT{0~6{lQSDO+P67?;&9ilHD?
z^hI{hAS2bhn>G%n0@wBPg<fna5{vCm-R@TH!L@5xY@3a#CPM03J4$jJM&;?<pZnY&
zkVy23t}(aKL41nK@(8wgyJW@)Q_QJ#Jwyh<u}psK%U=dHQg>zev(N2?lhbl66-$v6
zfPFAImZ)3R`vqp$LQTvqEHuI!*QcU1_)Ql#?Kq64m8o%>X!j6eoE5axx$?|CDs4+x
zOGk*bfS$1i3&k`$vQZ?n#m5H42WH`bymR<jwDz}~jrX#jDrfP=Q@0a6{dBZ%W(8Pd
zJ^lRPJP3yNaqfy8yNfNj?L{1;%1htox3=qO6*{QvdH)a}d5Ireho9e5G~nSgpDO!{
zD+9egJ9LM1R3QI)#%22lhstL?nauC|*fy5JqrbjLhd_ZUESZ+02Dv)Vd{Mvje+%F-
zRw5^bJE~S<Eyh3F`w{!C+Hj({;LGG{ix(Av3|@K1db>B@2H$pz#&+P<O;2vcFA_FN
ztV0Dw<7IOF(~%6bsABW+>4!Hf+CE<}kT6qa;w76?G$|a10}R{z%4C<kdpuJlk_^`5
zUhI-=lY(merlyz94<twiO^mua5$n^Z3?No3Et11kI?aVj6hB@hf;kpE2&Z`D-n$BP
zxXT!pK52K_7D0JT7}=!1)y<STPu|>S>Xbnbu<@{FyvAgSM;Qy>wu`~i6Jh$T@Jqmw
z-|#Wo51GHY%hY~y{{DSOCnFX68|YO2<uPg`LL66)J41UJ*(pg?r^?u*J|<*kX5-J|
zW(0Q`Ry)a)w+R<3Yvf%`o5DnmffO+GQAXP*TTU}-I#PF`(E*Kybgf(+pLtcZ<A+ee
z%!Nrv`?M<K`GYL(h)Ye^;-ijpehy0xQ9{iiVS6rVs&l@@dMhmw=ul4*+?;)tux=`%
zfVE^3$`4Su#+M!A@Y*@yM7gP!eL)u0akLPRg^+pK(a}DReKPn@W12KY=EkBlIc%i!
z_Yj0$=d!QGhq@@PmXr<3QmHa08JAH%m9BJqkuKbe)>`Dw(^}rUZ4U}ihN%8FUx<_i
zJ>CRe6D+~NZnF90*c%_rP9E5k_xm)}dn$?OW4wz=xh%HVk(UAo-ibm!1s$EE!kW<s
zWVBqozAWbP`tkdFaZncJ(@x-4q4oL6x<K;Wa!yCcmdMMN^L`SRF|{t~8@K+kc_M>3
zW}9ks1?i~!1@YnF)AiDTd6kMqzL+`QuFlfLlMemJvg6x;ekzE9|5J?Qe#B4}{91J3
zWMe+p*v^sgw|;>whXLou{;RNLW6kn16Do&+t=*sCliRAyLappK4O7e|*iU&@bor@a
zk-l;`-EQ@aVK@)gky9;n0wThZW`(@J@PxTIB{rGx^VrxYOPlaYj3kjwWkC@yuM;^d
z`E2gbl+{gC>5dcx(O6<G8WTJxv*dADQPrc7^0);QeIdWnWD9$BOCBG<4;McrhRVa&
ziqRQk7h|$SLaWCUcjhk>zlXCXmB&Eat-mg{-$XKX4nDaT0PP3G@7Veqa?EOW=1$zq
zQOF^INEnLFNtVz-3$JhU>^CU;WU-njj|b4TJeNq`rdaHMZD^WXv*S!N(paRSSC!Uw
zweUqNnV!Ny`4KDDoPD^g%$ksZl$-6>54J1Neo#yp$CSO=tgU$WvuE~g8TEETBpNCv
z1_y5!U6!C%B65ZOM}sa4xBGc63$L5zm^-c~vf0P(wclAQw2z4P#7BjbLW~JkcE%Y~
zF<sk_d3_Nmk?5z9EK0OIrs!W^IX7Jzp-uV>6z~kl^=KaDqVJ%nuFgKl1bu(RDWVZa
z>{z(4`Wa8=g9RxT_!$5fQoY6amNL)-c2PC!MxAJ#lne1Tw$qOD1QWBY*o2A6h27~o
zZ|+kz(MM(wjnLvJ9=tmI<fZ<UiJia?l>SDs(dY~v`>0=8!JoJ7_oLVmx%b7j$-j($
zTvJBPIvJZ6%<na6#8RL)(=|Y6IK|+OjyZ3v4W2X`+Lkxt6|;eK*O>%3Ti10=ATBet
zlrezd{1++1?87h{;6hhXpi>Bmad&H#zgAI?fF&IERy0ta9_Z-t)9vjPGK;#0>6*4Z
z>c`93{kKwaz3beMR7LS2rUv;m!EXrmFoX(115(>;PCw3DSilulf9&u<3C-GtX?_Wv
zO?7a+gHvH~bko&$O><T)I8-vpm6aCone&X4d~Y=G>DQLujKMoEerub@V#Gd8_S|#V
z3<6&JbyUm4mo_#wuaca5>xc3PON`3a1LLLW_QXu+_ABYLmNeOQ^j@&}B#$1DTy`#4
zUb;C?6vD!VgEwKN2@iy;*Bsb>eaYj^pkRMY>_o@Zl|$_q={q_<Fmsr7ED}=)EwL{-
z&)t+ox*hr1rm(ew76Q5z;q%|D*%gswxV>?F5eQ)*B%q}`q56?xoUdVQJ>Y|TX#EN4
z(Eq2yLg~?+^Sr6pEmc6W9~6>CxrA#~&>HuANY|v>>a_Mje28I~Cm0iDF0!cZ5z}H*
zzStSZpTGB>XGRqCM$cd2!P5V{oK<^(cp7(NU{UyxZ4z-cdAD!Itzye;n9#b?B@I_K
zP!@JzrexBXgh#4CU~UMR-?vDKhr+?3q-U|!I$R*8mHGFn`F!3`+Y?`9wO>-k*2hzM
z$<TM-sKHjlJ7XgFsVe^826Y)83FdA=Ix04J1gK#{H$;V<{m%CE?|w2Iz(EVJ!=Ej+
zBG)ORU1$1M7gEu$mhlI%Y%UfOpD-#>aJka{Fn1GZtmEG^9&_S(vX}6FeOU=P2>UGA
zHhj1kHSz*0Y^5M$?<K@gXfLiXpGEwwYQfucU9UpEFw+vc2!)IN1?8L@=huaJLjLU~
zl?qgS1Mz5vcyA~l88owh58Is|gzas3s{!19im^%u(2^QBjbhS4K8Tx|$;H&^*MIQT
zZBV$jGu1s#YjkbZ<=Ek)H4LHDT|C}tD{J9D_}n#g;at{SYM~GFJ!Jts;)6}MDRl60
zQz;h+@t->iz5ltRfB~9nK`0M+z<q@2)7vMrCwrhacrtm?2JS1gpNw)4gWnM12hinV
zj5Ir#pORCr^|a_6vj<yz>vUz;EL8a7@M(GDqwWCBc&JQyl6N9DUjIr-e7IA2Wb{X6
zm7>%g-IlsbM(rwRQMENX)`{vu4+lEJ+^MHWTIEvRFp1NhL1%)UYV;B>rEQQjY<dQ@
zOu0$EIX_)y4(zYvEw^bw?AjCypMy~17|gUO4JX)1^Ct#MB)dtDEIJ3Y@p!uF6h$(H
znA_b_-#sceN+tPsw*n&6ZKT=IB-O!%3#>Rq30zl<3e>OTM+kfMp=TCQog_aDzTVjj
z-+u=+^NML0Zca5x;+0DdwZ*AyM36@K>25vT!wr8a9Qxr@hi67p?*0*TF*QBiXvs>W
z<kPwMw;83;&(Jm|;Mz3a7I5Fyn|oVH(Rw$Q%d<&NSswidA-Ej)R4pUMwVxf6%MB`7
zBaznDO&uYqG55@p7#v#)Q${Ra!_slyR8j-2yX6hBcKCeBbEvyRACUbQVVnr>p}N^T
z83obxn%>`T%zvxlpCWW1C19U@%n2)jy=kxyhR7iWDouX(KgXJ4%tsHkACOLT^LumH
zEy6oB5ES6!UQ|(oKL`Umts%K|YJJhNopw>`+{y2oxG`k<?e<`6%ifdDPN`)s?`@q1
zdB8Pk*DNz`^IC4JdgWN@D@4~{=q{(%#bMR>wgE*5H)L)j4sVH_BMAG3`?x702!<c|
z?sX{VaZsI;Fd5&sd=11+NtWcEE(kYjhBa|O@4NjmGRpHdU8{WXRK4&Q)2MoI$HbIT
z(Z{A<r>Xa1UwOr2S)v$fiz5@#Qb*fg(H+-nooIddg4@&Hcs4nDnO<knocYQIr7#Cd
zoa~|qyTbk40Y`{P<DhDRR&O63O^agedUWINY!96I9@eV&SpO{u^ti^8%ldm7Wbe2<
zE<ukcTfm{ny!ge)t86CkN3XgY?=sg+$oOPW_y9vA@D7P+ZjJs34-Hr2=kU#~sFtT=
zWSZ&J>B_;#moK@@y?1VQ@D`(k!A^wLt3b2o>@^jve{!Ll^X<`t)c13DY7qky($O@t
z3i>Wlj1o*7`;sU<#_uLEe3oM_jtP&OuDkb>7+V6|9P1w>sI3_eyza&aYsa&V#oq;x
z$AVKbQ{b7V1^K<~Yce@SMy{504?4l)I&5$m`C$|0VvnL)4-?G>w<|YmwbdR592?*l
zq@CeiT}PQRS=r@sSxX7TvYHzwreBLF9d-xm-eAyv<Xo5j;dsfr`W<Sr(ca6l+Db|+
zuH`okH@_<5(7lp;1)a+q?WfAN1N!U}jU=^j`?_PvM9ONqq`O9hubVnDrpg~G7ZL8X
zS;N^c*EWxN`Q7V>PTM?dFV=;AvaixzHer0jSYxZ$Zpj^}+$trnG$uif_QcmI!Za~N
z(+Xk#S&{|mpfEj`Rfek3ualO4E$CusjgYeF>ZFiQ#Saoee9_C(D+(gJs0?1MZnmc|
zwN;IHWs@CZMRbsGaAh#BsMOHZSm&JpZEa!hE*08#IxO=My>2`*su@-PH0r=*Cwz5@
zCULeV3il_&RMM}Q7WEZcF`1EB6_J5qUScs^@5jyxB#Hb8_J;|QnRUCfuWvtontx1l
zzMM|nL`U}-ZFDQq)iPIEX`zNQzecYaOis9@CfFl#O28j%0ONf0gyOfIVEzn=Nbtq>
zf??yC?#BA$qF7EMf<v*q?I?+gGu|xUl-Pmxb&y~u5N0hDq<;zgY>4eWOR(`cmsRj9
zDKmJ^LlY8G%yinxjZk?{ihvfk%7x7nGXsvmdBxJOo{Y^`&Ww`H6kQraRbse_baf>B
zk!CnXxf!C0bUa(fNUF%6nxX8WB<e(7+q9gMI5+NE+Gl7L5ZvyaH96nB*xp<Vo^JOk
z*P`oAi~4N+QMmm_TxL7r03OXqm7uQKn^F)7;)@lY8Q?Xid>#wIp0<dEpppUNF~YN8
zS(;wF!_r^UuBgv=ycC6SJa*=&75HN4K!g8n0`%J1t}*tg`H5`Pc^~}u`QC**R}Io;
z__GrB9oJzsFItQg{llKQGlR+i)US9$SL$@QH*}C=Odry-o8xsX-0St!g0qF%tY9Ih
zafjENOVV{b)U*^)mv5y%JSd~-v}!2@!Y3>zDg+_Pa*GmcsHFVdVLI9l(tnZIV>MvH
zs0`b=?3wU2m9|fs#`Kn-lpK5eB!c)>lil|oe0<AI>TrT|YppZUT_?B%p+ZqUw_A5|
zXb)>pp_3+2i#C5B^|kj!<##3gFR&)K>SUOjlP|u1Jt5SHkxLV;uM{xkY>SkdEWSIn
z6dd8*UbWw}g=5k;XAJwM^Ysn<v}-77>sSUwWWIC#k{tYaUu6MA8YWFD6G<QMx?Rv%
z>;#ED4EQ64Mqh2)Bo-?_H`y8CdZ_F&x&*Z$hy=fAH>&JO8XBgCQ756sfU&S#N!F$R
zA^8f;q{XXkX3ye;D{}l`Z?uk?(0n(u$$cRTG|{rW7n62&3~Oa`THfRt_qr{)P`#9<
zlq2V&LAS!hrnT$lu)<B*-T*e*uPH2mbO5>@@r(2FlJl*oo{jN^<M<vg+#xcWtdP}i
zZQ~)qTE?REr}3UHD!LsP7;v-8Wpn?*<!tJ!uDoC3My$WgFAiFw<+aZ?eFS(`9wSW0
zc8@v=d+^vqI(`(Iq<-rEb-J{P1eJ!9{<ire&g$>g*pF~+xFyznWS6H!ZwU*(kXcHZ
z+7Jzci_!X|i(jW-!8A+bQu{ZRZH(qOXO|9SplXTfjuWb75F7^Go2hZle;nGj21UO4
zY{x;^B!T;BAPhPj`kDutn5^!;>UFVco6ePo;0~TyB0fi!PE<RGU9No;h5(LMeIf1v
zMS=8f8L_8~P#Lp%H3eAd=eUFb=DW%?R%yqMa3FD*Z@k)v2fdYz#Zt<wB<hXywpqeW
zA(hfjKfUNkprI+SBR%3F;Ud7?_I@drsrsqe=ObhDciZ@PS@&kN%)PrN_dbE~^cUgB
z@lEH6<xwxBs-mQ>XNhBaeERIw;2Y|h=<Mx!eVb@|Mn4Y=;gPm0a6Z61JWlMJo^R)H
zVudX}F2daS7|`CDOsMMLao4yt*ELJ!Y}3X!ZSKn_SikIh4-M8^4@g;pT}Z`MT&(-X
z-S%>4YO*3_`Z!{vstc`}Cj8?q3h%75r<1jMUshn~N2`Oaq3Pi2A!Zl28H^;$A4wjI
z{euhD^%3I0(MS0E2n<sG9tCHc%nvV<rxK{C2xKK;rq4_z<`{F?{Btv64ptA3!X&hZ
zqT*s9xMMCA<iw!}fomk;X~OeP+HQ}(6>QjS$CPm_L7*v-LMy%gYsT5nTr;<HAF^0i
z45Cw2d|oFsUEVkQNkNGqCjAtiK>#TlI}t*vM;tpkOL%I37~?lGES2YbQnD>0zpSHF
zAaH@_s3`gYi~Yu5j5RAtlsE=OBhar&DH!d-RWN|5yifVD^HU?Zx(_<x@n^X9O~^)U
zuE#vwi^4TQYnNkJiYO`9S%WI4Zhrb-nzNhlU-(5tP3R8)ir44sKZm(6Fk~v=*x@(A
z3Esu{u8@IB|Du}ZXo*3}dcz@hm_RA<n8u7Ef?_OD!3>7b@s_0ZQJp_+Gmbvp0cX0s
z26CF>i9V^clD}<<s{nFhEPX>GvgnmnQ^hP`Sof3c=gOI=_(-w;XBs@>OSNv~W5(Fn
zstjo-J6XTFN&hqv*YbCX`wqhAgBFqvC;}T)pNJ9ye}2wa7rxf-n<D<=d!U3x<Jcve
znad<l<@F1Mkw5X{gVN4J2plWh;Gk~9UR7KEdqrk5Wk&tE>q9Tl+jNtjlE(rYWX5=i
zcPauDkR`BxCC`X}$e4Lc8ZR<)TuqGyaJCXel$E{}f0I$t@7%^~!yhU%$=s0x5gPKv
zvo1k0Yu^cC^7qQGA5`R>-deDYeb~DDM!g_WyVB;pe;7^Vl}OJtYVUitky<1za#Yx0
zWyT#>{<&GN8hjwoT6euAcug=9Sazwtd46|_+@aRI-$>^jK#KiYL9;(tv14(eI1nu{
z=p=6aH{Hki*{?DI3y=Q!51-HLrjz#rR*E@XTdcWGaLZz~7qFLL@w9ty4vWk5swrQe
z@-z)hI>e`?$E2p38d^SCergI+BQXu3<bAxGU-4I>rPrJ2iD=g!^(L_JD;PpFK!;%*
z7-e?1$r)0^8XVik5=|iLIql!Zi0PvxWON|Mt;d96gJO&;{(!%m9X-kM0e^bjuEmk3
zb+kBxf-r>?rLf9Ta&jDVNlMgR>TLFBb3VkfxG^hyDU==h5pQNAzJlZp%<|U|=KRpU
zxMK93*7=y3p(PZa4(&`|Y~coL2Lau#l`*CQOm0W%_qW3V25W}<pLm35Ual3vq@Og!
zm(xy8#+uy54e%fvk`Q*dGe&<8?%m>DjcrEH#AG%c|A<+z5z%MOd#Y^<`L^bKCH?lk
zl_fITU~Db1afR=OIMGtGWX^aE*PB^Q1mi2OMr)t1ozDemoc`<E)+Y?Vp07`IXzMHO
zc3mDeH04M5opT3a+n2MHZ{E)bb=r)K!;22HYRpGyi9Uhj&ZEdvE8eZ0jA)L!w`!97
zSk1c-JKmaRdA*9iUs&ZO&8<5|A(UyeK?R%Sn_d2n?9?KT{K&J5!8Jm6AWlY;Z^S*2
z<3}3a2PBK3jyY<vv^v%W%~;s=_hBDqUj*9+QbvqNnd^Cuy>48ZrL(lee%rf=M8Q$7
z-Hq2OnICD2c4kgyXwZRBTU%^qR1J*{12`?$ulN}mHbttm<gMy}4#weylUCj(J8_N{
zF8!ayuJ}n8EMe023Y?%+H_|qb&O~7yoXpkg`Zf4TBX3;6`GG6>_DeoJgoHZD+4dYB
z!VZmQ;=;^Vjxt{NPH~5eN))@jjMJ#;^@$E891nYm^?V-!EY3qCQy=<A7k$qCYC7r0
zh0ZMPy3~=^e@Bwzzf@PE`qi<uhS%T3t}4l?XiW6+E8X3MnIZ|LXIvh<Vqm-O4<^xr
zclCndDWB!Iw$)NLSk7iCd9-tWTt+L6IhW9NHH(8&O@^mGzAj;3A=%;xeie&ccPJd6
z7poSdi=O&^3bR10Sa__9ALYc=J!pz;tHP|Izv7$}CFQ$zAIz6vFy>iV%eQjdPlmCm
zpVhBf8mU$9#jrtP#b~mf-`ik6et2oKyh(8$hZfwQpS}sjF0n>X!^i+HN8bB^y_;x&
z33uI*8om?3?WeG}K{s46>UQ_O=DOK@74uL}^SIC`!f{8SFvSD+EhD~4xozZIxWK1<
z2P+k<o<^M?&gJ^`4zb;RSyVR`*Nnr}GKGYTUONlq8jmK!vdqE8R|8+uE<NnhB#1(o
z>qJF+-bj%9ncVcNPfSg<mUqw9=O!!II%e*CZCfmtzQWV#n+;kr=sLCR5J$vV%T%bI
zm_*-^iuOEu4SN_P7I3F+8SCBhjl*1%uXA~f!^)(020HnU4<Xh|`6P#T*6ZnUeBK@-
zGZiTeRkm*8E3E*m9{bfGz7?<CDx2xMqFJ+_7gn{1n7m=VZF)#+_`grSU(3$kl*>%6
zC`(QY!5i8U7UhNKu0GW(spe~>&eRfKrxx$?-@PAnHW-{@koc|<({eBO+hDFjcD>6&
zNhS`w<d0MCyii!031dMO>I$M`A<cG8967KtJmTh1_Step%+snDxv+gf@y{hj%>P_s
z0KZoO6(uV869Cs2T2CrZN>6G}3Qzh^I#1vyP2i*OByWUQ^pmp!y=Igxb?MgRq)Ncc
z#|MkS#I}H9KK@=V8FL8xQ#b`*QZz0>CA|GYlR1b?uU(aA5#88Gp~YPfb&LLD*LdXg
z$=`hI$;r2qgq1&*X8n6RV&~a_($n@*Of&(EPPIsAF>MJryctKOjG&|SOW|7v@_Y9S
z6XlN4tgO9Pb%pOt+cK*~f15NRY^c@S#I7Hkoy(d3MosxSoOzbzH&T|Ky|&Yc(|N|)
zLq{_S%~E`RC&NY^*s7G3C0glO=1uPYed>A=mb<`o$@S(FNp84*cT}rkhd)9GoT7DX
zJXP|m1da8_<<)YWnE0yJP_MhLV?GS2YmOiqKMbY5i)n{UY@;~$`DSg5`->cOI;-nf
zV}vj}evfhyY9p@~E+-8;%ss3G;Z$R1@uV9&1KtE2Y^kA4lv~ZEl?RM=%7udRoNA=g
zUh>PL;x;D4$vFq*>sEfO5j49hTdp#I1^MG8^>XSyfw1tLS5Nb6bwv;+6I<<h`S4u4
zy$mTmngzNRWiZ^oW)*?ZSXeA7G8XRE2vm<OY_g;GYG-12AKTY8RGUOtVs2&~BRv<2
z!kp@smxM{oY7+_E$z!}bRuu<6U)deT<ZN`P{C2FS%)Dw>!(a6!aVtW{T<YXEQT}~1
zY$FnvG-jz?V@4Y#PEfC{#IoM$VwLh8SAKP2gIN1p1ma!A^qw)<>-3>VVT^H6B$3Ax
zZd=Gb!aB{b*FVr18$8E@$a9TF+d@C^wD*BOVYk5n@A6$Nm4q*h&+${(Vh1d>x~gAB
zH=#fwwbsTt<(gT0kH>NLmhcx?RQv6whJDbr{nC@vh=cW3BDi(or1z|ccwEt!%n06#
zourb71VK9JgE?a&1*VDBrD9g<_X?x&y4TjDbv0+Eq7AvB3u)=;wSA@Y1|OQXtu-k*
zBiABCj1Y=8aQH>L;XEb^(tWdNJC-Nd)_hxzQvJy13)K~)zwS#A+UvMri_I2$NOF&e
zS8u78$L5kPAF=l6lB*Cu#T{jyHffm#ERHtX6hTy(ao@2e46LX-709AI<)7X!28)y?
z?suk+yceGxKg%-mXC9}Xoco>AzPcw8#j{#@e-d|Kx6DVjZb((+d)!!$%NX|4Hrl04
zXB>WX?sNEA&780BmKhvT8812l;Re|#N;^@XU!31`2NgkzoU|>Abq2pb?tAoRcdzBT
zLy-q_3*jg+45{fDKT*@UZ$t+?vY+HiwVUj0lWuFS-iHQ#hgMf5xA!h0FTe%~I=op{
zA@dK@S^P}}dUUD@Z<nUN)MaI<7FG+Y6G9_3fQ5xZ`ED&uTR8Z;7w-+al*TI_I0w!Z
z#|v96-Ll)qHyw>=I8*vlL2XA2bMq7q4?5aVIS5?6!VQ>C7;KK?llNm>El!!28&Osk
zP;){JGlD*H9p)@~noZ33fk=@3YRrk?mCM1_l&W9C-n*B|b|uW}fkU6rk8&t;jcJ7z
z2P+sgM8>x)0tam)Z94HX7uy8p_OdI24Xd<W25BxoKUjQoT3|<U-Mv_UKQHWN{`Ds4
z^N3n~-s$ABpWn(6<NRmMCUC&!-pO>$T;zgjE0dt&eZ%$43e)DuBw-3crB-P|IuAJK
zq)dbRW#I8|=$<3-xyS@}d9KA7Lv_qcx|z;GqeN8|ef@3GR~Vm$SJdbrL%R$@#db#z
zltTQZeathvYUAi!&a*D_1-`q|0?8$mu$w{<2(7|tO--C%*%#7pLMav`jNVx@$8n#%
zHVv$DyKQ+i#0%rh-@oaX4kN^esbr!mK=rpcWYlJ;A!6c|!Nx*nhE$Y{-x&|%fJ6|?
ze{!B<zF2+%kEH^iNEqK;jycXeGhmJ0_lb{b^ul0*tB|2N$coqERplppWihCzcV({4
zz+az8OEjiW$o$@+FTi@xD);)bt6n|&$fy)KeT-a8gj9FipLo_C=j6NI4GrDR<`L$W
zS|RVF-X+oe6xz&G=`?+a%5U8(BDS~C((n^UwC&*}IJ!9x!p(n>u~Gd9GrD)47<7w5
zbC>VSR7Oo46Gji##vK%Wu@uv_$#ryGMklr+?&fhK^UE>lX<<<vUd5!R-O^L*bCU@I
z0gcn3_ZF06;29HPG(k$sd5ofkIk>c}pUU=0D`}MB$xw(zaW&`A|0d+?gQ{}Q$qLdX
zibK*-(ho98cfH&)w^uyO-A&iDXT(-H>w!C<q#4$^-9ymMlntw=`c$1Cs_xjQ5@L*f
zCw1KFUx$;#o7OMjbh-HnbNt$@C`qA=t_wGCwh=;MMi}QS-BWGd+b`};A95Yqv(Kr{
zmsdtx^Ark9GO<)a7lh}R9;88j7ow5q#+gP$Y6s}*>ApCFX4A}m^Iz)s-oIT{tO(66
zK|^f+4i}DmR)Yx%R;Hh|SNotzkPwsQ$LGOiOm1|y#I`Lm;g#vNawH7({-$)^&4u;1
z`FaEKlMm;mgt|RWanA$l7yS*kBfa~Sylg6(Acl<46sP{4hVoCDx(2=3KC!0=Eu>=B
zl7z+7zk@|%7B~vA!VZX!_)G{CD)+6MCi6Yrq|-FG3z)(@Pv~FPouV~(qMhT!j-)Hm
zO9#NNq>M6CUafP-sO|=_=E18;FZz%Dc;qhXdN`4?T@CR6<R3EdO&wQSG#8uu#y1``
z!Zn95X__7Hb10H#L!zZ9D!KRLcuI9KA(_xdl>_AJb}hU)dMI3`@PJN&fW0D^h0M1h
zKzqa9*yN$FZfYUZscy2HOeEmfrz+Y?ntnqmUM`WIirwAU*;zIiLz;_TwDHbR>1tuW
zY5?sxOC$&5b9A3bw`F_Q3mLP3ib%WK9|no9_n!o<>ye@%I$as7{xh_^rva=6hDOvL
zEd=@ZJ9JGen4*uY{fx6g(GXvs_pBL0=N6u$W)f?!QuVG@D(y}bg?Z6BrO+>ikByq>
zZJv}o_6U;~_<u^9qnsZ^hGaWeZQNEVP@nh-Qm+MhNnIg!UPcgf{-zsoV-V!sKbR_M
zYRyFLy6sbO{}zxlZ&Lb}>5FWd*B~3A(}=lRNKYk-@!UJOX3UM|9j}6)SRyP~XF94g
zrBZwF!{LUTo6N_qC}ax0%!KqvF)pjSc-NF;hMB*Y>@h|~{ov4%iRIHC4rA<wtkVyo
zTWqP`yX~}K6*$82U0=!uQZOiF1w+5hOND;CO6-+++lA8d{^rWzlz-0M{vtWHE_Nk+
zNj2St)2Jr_<ofd<qx}fWsDP3b6$hMv0=nWxzA8aK`+Xx%pPNSO5*1e^n}dcJe4F)h
zjE2W9=GZaX7%8|aBX@EAk)X-9rF3gKqNgxTaj6{fi@k^WkyG+OJo?K^zk&V{gEu)t
zq-@={VYpN}o?e-(qbqIuBjoyf>zcS82^O#^Fi6TZiZ2s1aU-ClUw#@9Qhmi)*NwAJ
zW-Fkp?kO4BV)`l}`OfJc`eym=5Lr2~hjUu5h~Zmit%f&8TSv+3RSbB^x@B#Lkputv
z`Q2rkt)qF;W=V-jH-y{SeCw7Ytjwu#Wi~fV&lW+uyuoPY==oy(4;d4EX!|TBu20G8
zS)R$NBd?tkpg6}oZ0<G?SM_cAk0aWH{o}-(Da8_Mt&}@`2vrA0NPlCL6*lUukE^UK
zv5bbtcSD0n5ZtaQb(JQFoMMx8!r4FO9(C<BTd?Ok9E--DiSaWmE!&ngG}_bWfjknG
ze-s!gUnljsGpmenhzl>eoE-5cS^RFEC-mzQZmk{=Sz{Sc`Ct=SBZRWP(jQYw!uQl$
zz@I9lKVwx#3l|B6&G!X$g&Ue?J|QpU7OnAD8tF(*TUpMhRCq4j>JHx@U0XAwE`$bL
zf@@?K814fol}0RQcN9GK4xR$6Rh)-;EqqGDa?$-t?^d5Wt$#61`e}Gn53M+b`k@)Y
zps8H4QA>g~TZe3^Gd{r-V2+-9^L=9*aA)eZV=^6#W$jV<Zr|^C*PiVgo<6DyYqrdL
zjOx?WAo4E4a{cS+y?z)H<g(zC@io?{ZsB=d-w#+vp~!{Lqw>g<#XHN@hcIW8=exRW
zM+#A9wl0SsmB><yaZ=w^80j`ws@6!<<Vtm$T8fErbb<V@3imyIS+x4ZH?rpgt}F3Y
z=8aQ=C_decV-GQjbGGJZPT?@`Vp}w!>L*}}?UY?~sp7dIG|pEY{q90{`FO*jmgzMp
zH+uP7-Nkc{hYN-@)72u^wzJbgS?ddbIUGfKsCRb=fu_z;w19%bmBQwUMqB?o;|z>0
z;Y<fpy}lz(f&1vM7YL)5cRdwn5gaNPID&I)O_!c-=Sl5$pG0!**OU?no=g!_85;Zh
z3?0EByiUc2V&Vuo5J)b3N9EQmMnu^<w6fjwg2Afm7*VqfJe3vj(S7#b!mOKcC8;<@
z8}8D%l5)qqeJ@N4LpPDFhX(131^EgROnj`HI`kEF*;q@pmI}N6mBz1tmX*!A0K7HR
zCW&>mb8OXQ{1Tt&1V{c%uE55s#|etHBBg4x-}xD3$XNW%#kTKtCNh?*x6L8GTE`?u
zcDBL|>h(Gq1{5HpYu7_sOP(}`-ed3F&}08>Oy1;?4h($Gur;2mKI&0tZ36J?lHr9o
zdT93r8v4Msm(nDHiu*y=i@Z0YUXm!n1~N|vl*?-T{`<|%_fpe@3|Eau9aYuw)nVBK
zglnEb@TKda5koZUhBuid(Mv}o=pPnvsTpE!JabqBVo)R^i#(z2YG*W=-&Xb+wSM@t
zcUvqos{e?vt-2mtV5IFFw|!UCp`p+48@#13>0+O;AvfP3yZ<wo=<PXaCK63z^)N;F
z!1A6!ijLps=3akavDKn+{O^%@2~AtOFeLS!TV;ZkW?AUIK6f;7m6atg3c#xibf@dZ
z8`OSP`cxPJ^eUHT`UCA)w;gvs=!(Gb!eLW-R96f?S0Ya%zHLxukKnzfrdKJ)<AEVZ
zw;?ht8+TbnY$^4urhUUMbb_ij5}H@akSGhnw9vq24-M~_$`vO9<y<BHwBp0Uc6@W$
zc-OuH(b#zq!|-O|4bGWc^JF>akx1Wpf!*ENke**>mpsF9ea}zXsVsTGdzPe_VkJ6*
zC`CNf<d$k_!Cu5Jt$+G^X&|_Q-|-l7w0Cxg#dL!8UEt8{vpo)KWr{EM?o8j*=+?>-
zO=Z)PWcDG9)~W&A$xZBVWYf2F{wVah_QjK>JKyB`6E*ImJZkku$4s1YQ>O_}#(S+|
zbhVi`Xj7&$DFRZB-9vbyiMA%5NB!W5FImL#v&wI$VduuvH)EY;3xDMuH&tL_QTX$v
zHfRQdx6?<&!*boiiDq2}OI<FrgvLrU9$c%j3lLpq=Xhb>So0t{IP19K_$CufW;&|+
zypee@WxLBhh7H58&bjX5d?4=mSRX!>?ZfihP{nfHoX5DQLrSHzSoK}{)%OwEq#mw%
z_E-+^H1;dd+Lh}r=Q-S0)V1`k<j6)Ve#a#xK{nM(@vF~F{22t%BI(t-mNWz^!FBf1
zP$1ndDQx{~;oHro<UqYh($Y3E!)Qa=#xme1q!0VI`f1%vk)w`CCytpb(TwE<*6v=v
zxAdlHefXl1Jt0?ge4EjiA<D8N8JISh#V@_d?gZ{51UHzjI@_juXIAR0mvEZUG3+<3
z5;G4qx-U)O*WXD{vfZM4vX<6<h4Bfv98V>1{JAR4YvM$_dl+IJCxH#MOibN4oU{ID
z?Wmd(v+VeYs(*FcW>7f1oN*IXGFwg7mhstHP*Jg1C35mnh=NH-5OqX(4}I1ZAuIW7
z(g-V30FqKC13e)K=f`)fzUo5T+oQokHoqoIp`l$TWlM6>y;1$B(5<GLahe8o20eoO
zchx=!TYVO7h!LUN6sREe(WVN|mp89IA%p(8T>0`pmn*=3BZ9=V7iI~bB!P<+u_xIl
z`KQ-U;!lE4Lco_FXzAr#Vf9uIF1``m_`J$1US1U2xX1$$vN=y5xA^4{%jNoQSlM1@
zi3&vIDSaZ@7&Ck)5?^sRD}uaJ>G=JojP!0m&?B5i5}$I->Kp$eTR+C4?sa&$h7qE!
zbPK=XMJ1YT`46M3^DW70tRX<`Qt3zDcNfg7iv7uqVT1PwT#iD9j>^g%M;nKjuw)T4
zm%O_UZj0GiSn!>Oj5|X~UczzfF7|dU?DVE7tT&5^n_0`8@|dr+(ENgPHZG3YuIR4y
zBqnE!QKmlPmJuJOCZ46?NYtd5Bo~u3+KUOBiK36+y3C*bdTJGs@>4FjhBegs4xY4Y
z=a2!n89Ke8x%(g#8f$YPGj#Hk0%ZG{5w%GihHv~pE_-3|w2yy++G3oVOo9qVuP=H9
zwjg~a93o7O5f&5I_qu^^)3cZij$D-j*s&5<taOl@SZlIF@>2wY-_~o#OnLsyo)7J5
zJ=KcTT2aysm}vEL3+hxQH<=1eP9lP>S&wwnBcJ14Mz-6vRKF$Ve#hk{*dDB`Nl_NH
zZ90c$6fGAtNP6LTFwiQ}3jFjCsYCmzI(sZfsAYVB_vn*e1xrAEw1tUo#_CHAF2C+_
zV@jCG1+>`VlA9C3Th)vcD+By&guSJKlmsq~9%ke0-+c8?xhcPlAR`jEs@VFm%jV7c
zR|y{sWh5{zHv4T?_Mm2!<{9Acb*#UC{w^}m6IEM_O5)KrE!Ui^HctH8FGM@JM%Vc^
zfLDI|s!++vi%j;w@y$%8?U*m32Nf&AOO}3|gtV|Z;wXHl?+|X~ahR9vqP00+g*dsW
zn3_40`B({*w6Sy!xW2G6>?hOJXt5Ob@aMhIi7-vICRQ_IFGG|NSK|C%M15m;WlhlS
zi6`d7wvCA=o{4Sa#I|RWiEZ1O*tR{fZJXzw_j~TW-~P3K?WcEjb#?XXRjarFh7es(
z9MAj{u!ETE1VeR0nPNLm(@lqyPeQO0d1+ssisMgaJw9qm%6l_XC}Cz0!jFd4Hr9BB
zM-`qLPgPc8JW~4p6zwNg{rHGl)E({%YD~SlRmb=RHIH6w(xR0UVnV?8iFarE<<z$|
zrJEv6_zPS^fiGto01umG0ZO5|8?m6v{5)r1Cw7A6?%D3H)OWQc!&km!(!w;%Vkyzt
zd#2Oz$m;p<aNz)5AXGGL4N`O3^61a@s1~}f!5d}0qKen?tzB+!K7hSB60z1o^>x4I
zT(dq?Q`by#dM*rBkf+9pUit*1Q14k9L7~o1ACdows~Tc+kSzM9Ap*seHnFRfi=UQ1
zSLZkDcmLNnxl*mwXK|s=(!iYksEK>DRkGQ@e3&KKdP%;t(hSJd*d^mIN5beJbsHwM
zz;({=V3y2N!Y==d<;?pp@3-?0HQo;gcq;0lSQED^$?<FSBEj61VrpwIDbBv+NJv)h
z?Rmw`61ujda|)2r?*4RKy$2qsbASBMm@uC4a8>2isziYLzBoWFPeNLkqI=U=(*={Z
zxtO5h0wXjsmj0cOFH6));7Oe!R;JZ=p5gOI;}Vvwd!o8Z$$l0Y)3Ze9a_-$wxAI5S
z8X@-VfSWnzC_{J|HXnjVD%{Wlv<hcl*v_Tk2Rt>ofoNgnB&{q}TnmB0{+4y|Lsnr|
z$aS3G&xp5>*>#7OlB%{>JgPDUjCofQL7i%aXky+Z{%S+@6MAVXMKM|4&D-w{iyPl`
zy4{%r(iMe+c=y39pmb|QjV=?#nVY{^Ovk4M93N5^X7}|($DuBdb94{II8!FWPF<oV
zmLWKXP5llX@X5>L&DAmHE#!+B5c*G;*ZgidhHp@ZYJ{JwLij8UymBiC@mHZM?pr@?
zB9{*P><GpPM`;0W@IOmT+RN{ykAyyP>>FR_c110C6SW&^Bpz#6>+pn$3A)GU+EZC7
zD&|r@1~|A8Gv}l>HbbkPPgofRe$WVMJ0~Wwh57HobocY0pN+fw{H<>WqCVhrMu%_*
zA3B&I9a?*{E~RX)FC`0uc1G}0s`iEwcoU#WID&c8!tiipmQL*q!UlT-&E{R||2!M}
zF6u6zMs{*knu&VtpH)~20l7)EBm`ZI0UQrsLbhnWS?>bTtEvlv5sC4-4~xsn&aa1m
zfNq){YQzdHtz}svS1;o6<DcpS>Iqc3vj$XXR31ol-?7bhD>B@1%({HG(z_e6)AiNd
zDE1{?PWMBI+`MEXjONZ)R)ONm5&O0p{$32W$#wZR>jnkC5CB3?^ZVxe+C3z!TdVDl
z&yT<y!j8PWbG#MW>|C)Ur}+9LNL$;4NXTo3n1{RU1mWuHNQLsEwWS&%B0-ob5%XP3
zmnQeWooaT?pQ}sr#j<~G`+PzjC`Q<u0xJSq^vKn35t?2EIYOX)_8aV(%7lk9_7<Q%
zxdEeh!3LFy{L(s~zPMr^;jax_(huiZ&I;=0Wn^rm!)2fo%v-vP$YHp*jG#MXp!6tf
zS+C^x<8S=DStSh|N0wMau&SGPzV)QQa0cqMM<|1QfMv@pjD`_U%xxi=v@~UJdjST*
zuUtmNf!;@DDHYey3lrG913`At&uoov{O<U#F$8S<yv>7pvq|Jn{tX???^P{=+|4h7
z`h?xHH>}8dCc%+T)MCXJWk~;EepDY3Z_G{9{uuOak0;Zwy7^l@{n@e@)p;iQ1EBwu
zaLw_k)gx^9uVNULf4;rh-28ns!&QPHsJWA7+4NqutvJt;;s*p2fC1V3ipRukY3Ba^
z-p4G6Scsa$?4?jEY#jS+1en<PYEg9Ix&#65SZjA7c$|@Dz5Pn`xTXVqx{>1RJzz5v
z&R>2Ksoup~Ilhfi9O(A=(an21r7PU!{ubFeJ*IK#LnJ#`;QU9$5Qlo=ctV#zjHL4M
zpRU|n#yDoKf?aPHWi=gti>Gr(U6yHdh5~HKzL`s1TvoMU9bbubjyCW6c`jfq4_*Np
zuGE6Tp7^UNdNeugSvjvSi(4-hizjfn1OK<zN_{e?M5K3%PcEJtv5sCqNSF@R&H%)F
zlEKgq(@WZf1<9P+6PJ1^f3Mbr_J8%&?#YBLvl!&V&!(s#B5xhV;1KFz_~HF$i}aGK
zMbSStssQ3AlWl${Zd|_}{;9>yXIDfvn+cnuu#<u=raYGmZrF@YP&GVaK{+25O)lUX
zyQ6<{EwjC&&N|w_ej4#?(%?nxg>&$?O60cSYEuYme~$XC2L7xL2Hu*8!C6LA{oIkB
z0re|Uwp3ts`_%OYozD30J;{}k`Aetvbi{Q`5np)kI*#rP<!r;C6?^`S<zaE-3Zl+l
z@1xTEfxHY8m<1lk3E*uTrg?YpCJtUOx<v_v6H6<;rDd9BG{rYh83seUiZ$|twqwWK
zZis>%bxgvducW?jHrJI+^(0wL*`nNpb^75ZRk1<UE|Lf9=sXb=WDN+E><7D(qh<b{
zl2N}O4Z5+3$D9q39Xa|8rhdwq4}2#r88Ka%|AE=HWe~P!{xD<k&9QI_0A%PhfsH?L
zUY8Mb3M6&G-+aV8rf8sIe1@}e=L-nJTR@6HCscbWG{_RZAoTRy56=#V-7uP$6pP0K
z=o8g<<!wa%<sA=;p7j$Fc@+lL2(9B@%W3Dcf?~*NjD@V%!RS3b)0r6FUE|`9y&0O*
zBbHRbk%E7t>vklZ@?RuTE_}QCtAQ}5XwM|GJE*2zw<!f@B84d@zha*Rp9$oS)yF-_
z$$ey&Z4TK6BI+s9J91pG{>=FaLk@7fWrz=kob1pz6H%=UJ~HOwQg`r=Tbq_U$ERU>
zEE*|Us~Y9@ChpRPY6lThvg%Dk%dDNf(=PEWWM_@OT#yiK+_ab$u!eBT6~bRLQ3}fD
zkN^>inzcN9IVct&E@A8A2$X*g)%c#dixoA;d)=6A0bhg8(KPkK90TLRIxIAg(!MJV
zGlS)bepY^`D*6I;x`cg=d>pUd`9JnPTa&4E({&t4-1uk7I2IKJT-~S8YDO7_fLxsl
z8O-?cfMqXi=KKXFx0Fy>s2?`w!aK;7jNDOmpkc`TN>`=>`_v0fzqoXTi=+(+Z}LgE
z6vG#nOlsIK&+?rIGT)yr)sc8Yhq|Wi;i6eaKKem9V;|vYFDDT?@n0FnT}QefczE3T
z)O_#bw6cIGF+wkIgU%!g8N!OGY>Oq8f8sl9g_o**)ZpwC!h-~K^)gW!ioI^#Kgosh
z&1lWO`QUBLb25*6rpudpJb5T(&AdUUqmH%(sZgEIBD;hLhpeP=KDE!kU&myRZKjKF
z-yUJ{{WBN*e)VI%xOvPe%2ExMvGcVcbTW3jVzK<X?Q)gU15i7JnJhl^NnooB02s5D
zop-5O0RLLgNq>rSLVP}&Jo5v;ZX<89;g4NXr-&hLwjFp}wLfAMK(0ooc3KcL?b8CF
zC-iz|Q1t4ToQZ4;*l(^&J+5$tV-wdlp}rkhE*oo^_gF9y?nKSMVY4yso>%lOIRydP
z&d#IzbIkm}r&mX=rnRn@jefQg$R~fUyt2&!h<2Vui?#OS(nJ5O0W90wGA?`byBnvu
zVBV4&Y_}3xl*N;q&4em|o5PHyu!?KAYR1N)IxFUS1C3&}5t6|ZNdQmL#p~}+J?GH$
z=4;*LySMN2to%h58O5AE9Ozht85l(}r$jrBzn=!Zmm#ni&d&tU``W8&-yFZN)A|_4
zBgjHxx}i%}@8Cv0=-Tu770g1%^Y_QljlflLRC0Z{v=PF(DDcD`Y<<c07~uJ>eu(5l
zcDE}ppofR;m=0wp4(azOw(q{bncKqj48*&e*SplVd@`}Q&C(nAzHeh1yAl4q-v|*G
zU^APkJya9)cX-_Y6Z@7%Nw$T@z;({C&wFC83@!)uLD>d9lzvM6C~ZC^u0d*o{Y7fO
zHRaNbO{?6LAp4BMR{R|5s&`6H9(cVtQWs1YF#WE-xmhSU<$hnrHS&g&Y4asP5bsW=
zA&wa4^Lc#iDOFGG5o6GQbL2z#A~dmdf%w7gU4x`iZy@AyNMgUMEy_{XkUSc_)NY93
zAMGXkk>YRb9|a{do)|A5qGO=Dr<x;AAV0GE{v_|fSa+uNnSSQ)Hhz0``~mDz3mf;e
zwW;ygdCOtRP0APnBty5o8N$Fe{@ojSZmILhAV#u<BM*V}MTR2;uHjCFaL{)|hWSAB
zW}>7E$^lH}Uk}<#7QuSzm8jOZ82_!<ZH{~%FV1T_Y>|hE!1WL=?D<?pTW8bAL)WJe
z7s|=X$L|d&I_wC5#P{CIWN?Yv6pN>BvN+DtmBQ5!$%xo3JBW2DX87t#<L0U0vDfJ)
zkZ%<AI-|kmB>4+ImEIPdmxhg;&6?(Uut1R~N8Mi9w2SiQIfnv?@1DI-qJiLGO||2Y
zwg1D%Wvd}IKYshuYC-o$?wKj)2j`C1>+Fz?^%d(!{$TVt$0SdXw7k}k^F<<Sd->@E
z??Z7CC&Uh8k{)-nE@8N+-K}NSShn<X4q-`hUOKrSN_IJM{Ux7L&SeXhfVQ2u$XA63
zhuzx(&NFF-g7f{KQ(ULmlS4?rkFl6J2;rRG;JB^Jh#T(aQ}-lK>BwkQxVsI$nI}sh
z{>+lUoA<8RIy<M?_C`6kd^05^{VvRQJKx5TBwjv++6#5rlF-+(!dt_(<W1MI+FHp>
z|34`4`oEwAEcjJNPl=omBny%Nae}x&v>;LtH3%O>2qFeyg0Mg=ATn^~c+COiG7RwE
zA6dx2;fH-b_54^R<X)?=bOBBmeXY)KJnV;r1zgYb*AWSLS{+NWJy}#fOKmPD#H(B%
zu^rpAC9QnIK0J$<=N}09w)hi@7&<Qjb@w0Z-OVtF16EpMBhed;YaHE7oVYw{jOQpt
z?HV+hC}Oq@7AhDe$uOh9wa+@MlNAsAd`{ta{wt}2<f)%?tGYxoiK=kV#usq?JreF0
zI`~qBclPYRN`!Z;*La(>Y~V$S8G)q)D(`U8$5Z(jF@0wP*Td#76N4Jr&*82p-ad^V
z-pai&kcP*P+HpcU*Q2Iy4Zdw_%BJNw8Gd^UN@Z|6gH88ClKaNJ{ZOi&@}a-=Y>P4|
z7T>})CjPyJ96FiHzhBq#Z{0kimf0hL2rmvL1vb^*1UW1~DVu@`&o}5if%;MgXLs{Z
zMz@O&RE7XR_G93_yCzI9R9EZ0tFz7YEnUXL__(*n6L$9K)$2c8o7aZK+IRYP*JVfq
zz~<I_Th-2mIeU^{KRfA>#pMb_4lK_>N$oyP`5*n-i>x6PnflvC@@`+qg1S7jaNZO)
z!$Rt(D4T}L03Du^3j5z@lZJA}NEZWbMF-C83HS^-$)D3^$2n5I^M=S%)92eJ-4v*8
z@cAP}zn<5v!0tn`j6%@hemYy(%=g{=vd~X1t(h?GvE7+iIMU0ab*{%t2_ulP!@nwb
z%`_X=?Kj_dRqP8~7KDSYgEgMumui1ewiV7Bm0(Bi3sfz`nJFwODsmh|=%=tK$L)CG
z6yDAdmZM@`5-T3tn!}JQB6~QFBjc}W1eW~`!(1R;l_Esc9kWF;>{s`3vC<OuuE}}V
z#j28;oA8U)sVOSaNFCGu@T~uAXmZS7hkzyABN;Q8X>&F;ROgyaaCPOU&%Q=zqP6es
zyM^z<DO7KfEX!<cRWJtj%$7pVZ0$tH;-CTl=%%WaJL^+Ur@JgQ<G!3W1^ty5c&*?W
zWf+Blu&=%@2f~}pJQNHB^g$ABVfL^I(5JRM&B!lvmi|~+ZNh!IJIxIuR~HfT#d5Ge
zFAd{pc-n8FJ{9&#RkkF5S=S>?WDE086XSo}(Pk<7x?-vIIgl)J!MltQhW(T}#uVK0
z?#U<nJ}K_Id{&A3=zUl60JqPrXsQ?=1g~K1R*a%Yq0~%5u9H`&Tc=DWc)mArJ$u$K
zr?DU`gUcJhbTd%*@HOK*{>_?EexTQHkQCbh{NWW)&KSmr*E9aydpoHg2{AQF7Qp*H
zYJdCoRM$R5FNRQ@3#tFuzkcO_aSb!%#cR`k`RHpE=M5SjQ^}x~*i(aIT65rq1srd}
z8Ol-}e&k#~(A7J9Ip9cJIN%UTNo<1ycE1foF-7TUFiOqeB7`AfQ`Vq)m5gC(+(+Z+
zHpxI|0Fm^6-QV(LX%`U3Ob)WpG^jC)jlVKYvL>26^B{Iht#6(s?<tgj5M8`3eOCH*
z-ySs90o~tSI~F_Q=9{tt_eJc{!z48rs(vrte16%zEGV5fn2=e?9F%@lz>M}~o@(q;
z?Hn&?DjnP7KXx1b`E?#P{*$XsY!DTK`3y~ka2@rEFQVUV87SXr({Prf{_+Nq)zw~%
z*wy(5SKEXFg@?_DpGsmQ!PqxBbW&i`k^MAd9G502Uqn!{6m?NN8Pk5+P^Iz8kePz1
zFU?hKYoszU03!Rb;8|fpn)L%PZ*p7|gC|_6U$Vc<Z`+i$${{x&{bP=LOMa^)A~?_l
z3$R}NqO{lUj@m21DMX_yjrE4!=3jo$^jR})dEXQDS-_EJngwCKHGLqyl|^$ZBEF?6
z3iTPDV7D%Ki7@JCx$<EekfWp=X`R<8s@ddyowf!?#FHJ#ews3fp~+9W_)n5wk)Yy|
zMu7gVy=`JEg?(Z6I5!gEg__pRYcpmx1&8WcUXf1)Z9xLE7dL61<)r_S`U+ncOYgC2
zzc1qQf#34ag1OL=_g0b_!JLt0wau2(S+<PwcCed;*~bvHI@hHh)8^)klaUt)38)<(
zM}bZC6aPVgnIYEC4Wz{`eoT6b*Vd^^c`G@{{O7W`AORo!^kRSjp*G+PVDlkxf2#%(
z%f3*y41}6oUwzNM^qR^}U2o}`D04;2OWF(<thyjz0{CUD0hD4+2&E+QusI20eAC0}
z7wh{i6_xJ)a&T-QFzP-lQ>@Y1M{_pG-HT#v>}|lpH`jx@V=aVNoW-k`xi+Ocxxswx
znZ&V2HSX{wc#_8^{%j!jvV$8~4^(_m&z{~$7CyZDc*%d5t$qVZN)){;x`l=uKvu~5
zmV0#8FHVx}o0@RWXoQ$F8l>T}9jsmY5R`P2UkiY6m5KF~Ms2Xl5+Te3v4WKCFZn)~
zf5g|Lixf5au)$}N%7!)E*X+p>q}9^OyQkfJ0^{UqbKxX7v2ForrGwqie-+YaJd$gU
zV_~a%%h{~CWb%aR%0~8vzW#>!Jiy$qo*_cAHw+G5&q{HJ;xV679@}YL)s}jrbx(=;
z6@Ow{fX_V&0JL(1Mqv{k#V5_!D-NAuwRYD>#JbDC1*#<2z0J`x9NT79`~^#1Mr!g~
zPU7{4-qm~@xw`?8hxm6uPq49MKgF8syoQB2ey|(-5PfiE!KH=HAoi@2eF5RYpD><2
zOfRY$2;pDMt-OxswO&o?wCM?FP`qLd_@;thX*}*gC131Gq;$0wF~eJyneqVzru3Z|
zpM1?+WJ})jYjB^)#8%E2)I~ohq6he7A&aY(PN7hGn^g2exBFM11*Ucf_?}(Ppd9#7
zyS$zcqlTh>>3)VpeeJE3^7rqyN=;vHDpcYpC%&2sQYj>GU0E}5O4TFXnrKd^RUVWE
z2t6ho+kZpxfL!B(jUmnul0Tu^wt7&lv^F`F1;&xNq8D|rE0S$nYJ!OnXgCZERDy5n
zWY$PUVn<yu0rOO2p(9!hLa4feV-2+)rXz!~`7z^z`Z`m`Jo4?mMJthLgg7B?=1ELu
z%V)aofA8erw4=@J-h+pPxJU>(?+W%eUZ|by6yCq1&VTg|owCiW4EWI7G%)EFD*W1=
zH#zs3PMhE^iMM(4em8v1?0M?^5$?`Jp%1ic6Hy;i<WQRV=g!F+IZaNKjz3OTj*!YE
zhd*55fg?wYLrJ2q(_vQEG$SYRw1ElhR*ctizmhV_JyB0j;Nn)#NtD2v-0nI$G(A(X
z<EqC+)D~VV*Pq!F8Mv6t*$4T97V!CyU~v~}m)jDzve|6uuEfSgl#$$f>-G;ZNnrSI
z6wkaSRN4-Sg(#pACK3`Lzo-T-@_8_FzBFKTJGm63yRZ?Yu0`Xx)o$#(ZX*dFqR2jT
z$m_V^X<tAfO~yCSid>D<%wU}n&Sn~z;^+9YNmvdQ!LxfIxj}sTe3t$V*B#VB?<959
zcs^cuM6^h9An=wvtOa{23yR#C{O}%cKFlj%(BT-XUJ<H%V3M91u+PVrP4G@L4~#+W
z9;vpb##HMCVizv%Z<J<d*Hsj}+>ylaj~!Od*q@iKZ>dIxep-7LT>Tv$m2V63Ji_=D
zNWB#T31@)>_e=TjNa=S399NU^pf1FbziI1~H&!;j{)%Hm=Oah)0~?IrA-fI=2DWMl
zEV6stoTZDHQ{mJTE_*!g+OLaK;{HW#Zb8hHJfx@)65A^y)BOaex$sj8l}COLNpNLe
z%%_bQ#6J}3i{U$4Vc{}g@MDrE=x!17qW_+qHDYLgj><%){<N!uot`2=ZQI4XG9=-H
zJo1m4F=Dv)%PDEATs8t_R~;Xym`u&(H!bGSf@aS@m5X?op*pu?@McUw6wSRp{#hYu
zsaLO8p3a|-e}`qZg?(2NxMj!T{ht{;W2z;H)(oXignrb8CMXg=cgE2C<I+KeGpZ*&
z>-^>h&uoc`A`lS@fA79!>DMQU-?HvlFNL~M3XT(}lduBx_0&cta@zHQq1T}eb!T0Q
zb;>r$#L*-Ty^DRYQC@0@UjW%)<K)aB%PJTiF5hH4^rJ-kFkgTYZ(yPA4zkKihKKPy
z8j!P1005uex^XJnoCX~HKeP2czsVBUy6GOA3hLOlb`AQn&oCqrs-5dh8TPK&UGU3b
z{mG@yHqWb{9(<j=|HWrFU2$#jDS04`HmG)sog8Ae_R6oNe%3`<R)5XYHQ_j%So4$K
zg5k*b`tufsW(d>e$QRadyh*F{!0+*l+y0nETy*C9=kS8Zq(6xm7e64T3EnxMUmPu0
zL@}OztV3a7Q>3Y*9*=@Uo#pH&NC*{Ta76a2rlb{QM1M(gKMbwR(fFS6gn3Mvg~#Ac
zID!->7Jb3I%w-XWbM^Yrbq#DflQ1HXA*@QDqih$E_;7yPJry>cCRQOweJEtH%RYbd
z{P&Tduc8>b*`pt|-rTIV6L<}6`oYI2u#@a%Y+GCw?06U9JUAcL2x7L>Q_17^fPPjx
zBLX)$>B**YF{tSbT;PTHwL<E|FXP)M2fBQ<u(wM|>s5)_G{gK#OgjVkS0=p}#3A62
zEY5VgDHpomuG(h}eC-{3S#G0DL0aM+-4wwx4SQAbXKlIKapG$kMa?KU_2HsqY+u4|
zw+qrHNgIvx@uMnpL(#;czqCUs+xSYbcTlbOk3p5QFKiJ?yn7m_{5HKbx|dT@0lplu
zl51e0v@`xSJ*!8Ss9uzqzpRRUS2}661RkD;QU=)$Lh1f2-_x9EV>snVMg&J)j(d$`
zh;$y-k5zl$bDLnVv}yf$*id=>6?_TqED1@908_BSBLz*T0TGeTW5l?uo7J3!+gmL+
zIY)tY^~SYnJptaI(Z&NB_Of{t86&J@&*#U(6gBK$emF5{0%kajC3^m0{(qQf!bOKe
zV*EM@6G3n9wr4r}4>51{m<UCxW!;|wFArBL+3I7Bv+qC3o_3U``6FCR^zqlEW=LMf
z&SVxhvN});gzkE<UN^1rsghO4@EX6V7cgRpC*%|?xX*n0hLKU%7X+=JUt)BrS5U0D
zEal_27Y6UZ6hQ>E=rWfUhr09=ZkJM#;mM?VAeSIrhHiB#p>Wd5>*HDC{3_dEMW+8@
zKKMW^l>I{%wwjmNh||<%YPDI%sp`#7Bx6Q}qf?pQv6F)moab<C({RFd{Pu*qFgcjX
za=v`bV!s-<zKp!jG@FO5V~xS88i_9i0CKkcvQ)pg-nN<$K>W=04cm9LRg>cIy8VZ~
zrufMt3G^<i&dG~e)HN?-Y>*u8ivO+)(Wl;1`DpFnSg{23Pq`v<tMLuuC+whC!@?KM
zn5A?4f{Ld6(7)1&Ln6o*%8ls%)oY1uE{e0RQzWA6R~q&BVO+!c9t!ivVyEV@UQ-z)
z@ugE(UuYLm`-|-@x)LwTchrWD@3-0+LRLI~ch=c*TxI=i0+sqmmTomm5EjIDO$Hr~
zEEx&n`z4aS$(n2}KK{JDvvIKv99p>V(5LD^33`X{Y?2gHUMQ{Me_$37ZCXp}t=f?j
zx#1w}QAatj>-2|jL;hdFgAiER8vOhx+X<E?2H4%V*5H8fz(@iz2o;3*4uZbBI@wy?
z-(J5y%Raz-rg4FrBuKSg-mYmG=o6u1>IN#`!gmqMX<vN<3WCXa3jeqZ0064G7U$sV
zh{d(7lDB%czUL7k<kR2IKP|+8cwfhkrvHf1F9-|Jb|cDU(q8QPSx$wSuDnwgcMK1Q
zXazE8Ip2J|eXMjBdT*ey<PBxc{5TgGrO>xFnAi8Hews;~Wm<9U!aw4;7Pxb(o&R7*
zc?~>ze!WqeUs#D(HXnR#$7~H7<@V?I`4$rE?mSmAF2Yh!GzhWFo*DRNE-q7o9tboP
z-g;wo6?r>+`#uos*IN6SyQzJn)aQ>;_hmWrpS(5fe$YUz@k=^V6)Tf9#xR5YF19UT
z;3JT(2cw|2)XNdCzsJx*ebL@N1RX4=ntd?8t>FMQiiyr);`ufk<NWLux#?jJTj4Iv
zv()q`YGorLPY<62Q7_#?3+PF3T<fp~tvAtHXGCRx#E^VVK7G`9lHk=}DqWxEeF!A+
zO}rOEEsOyj{Ir<}@ifKzJ5cM*DKRWBN=m*d9#;2C{B?l(PdSRz7xX<$MM`zjTUVPS
zHB!a0U_Qp(#oY(y=i5>ev)z=xl)D{WceeLiH_CWIN#<g_+c04zc*ouJsE;-FOJdHU
znwkPp_7oT_MmB8aP(yNa7h060e!FMFh^lSREoH|&OlJf;sWf0bN0W5Beva0nbR)U)
zt57}3{9QZ3H-|pzr!YVm1vF#=23`wpEPBaAa8itsN{>EaE+&NELBf6x8bUh3a^k@N
zr+kNiq`#<t;$;Wxxn0BeRPz$Tu#LP1c^!27ApqccJ-xpc0%sA+;EfMdBoU<5oipe?
zFg8@z60PW`;B|j&T2N)zavxkSdnhc3^QWKix2Q=)p%gk#p_;NsPR4$Tet9D-V_0LO
zNDof${*`ni<1~&iOs;2|8z(P^@~CDB>gmB_k&^u*GdDq#7@-<*r#ZX|O04xSIA!<@
zNKgK2xu4y(Al$5aJ8G3`TukBmAvH0ZKB7t34~1qkDH0$1!vnGfrEf%#<57R;g>HZ8
zPG5BMG6?Y)O;=Kw8qHLrm07sfIBOkdlH%;ZeZz!Fff1-Tw*n9?HunU{Kz;%E9bj&2
z{I`*@dOu57E})!NX%ds7qEBvW*;o|(@ekX8Sl}kzoumaAK0Z1>W~FSd#+2!$L0Z~W
zo#6;y1ns>W6$D2y(mK{NtG)yd6(}BhT*1T(JU+{QputqCKakHU#hy!UEZCnT8c?84
zg`T_-Zm-Dw$`Hj1mJ{jghH<AO04q$1!`Jr1NNL|GPK4Z)OlO&F-9*V--0^TGzU~4q
z{wc1nqe}4;w`JX}I!n4dqkC_9?v(YV7yHo^K>_SWAlH~BSA%3;eAfpRv8vJgqHKPW
ztVn&G<5JoQ#Zr*#$ihkF%?mZJYcJ|auh%_dwXNOQXSeVkb8+|sMHo59*a#U1&?GNG
z75Wa1Aasy0a5aO41jk14XiLX&+o#moU^)3*eTyI(nZGw)VmFOVFe$Cw0|0CjZ_>Y+
z4NE(|d^B4MYybL{eI&s$zQ2O`ygSypP(=5TE@^u>XLMoSre%9DuyXsfcb~HR+R$y6
z!Ub*RP5UaSNwt5DF`ifNm9;qJoRjf2^5CUJz{0;%pA5eMN7t02nUKS&rf%xo`9WB+
z;jd(sApe0YY)AqD?Vseo<8LNj8ed}o*Q>$1XC)*Apd0>0oX;qZv5a3j=lxRVe(b5d
zIg5n_-Lyb;-~3n&y~%E}=oNH*(;5AtWjZ1#3a&3LwyClEfO*d1GeIJL7@cf3>V6rL
z;4e{&p#{m%ls$m1gNSn)OZ?OW>JautQQOUCAyxX#js^Lul+c;@s;7wzDGMqx2yk?U
zH8F`}v$nQ#bAvmSLG?JC8Ap+l@3>O+f9_ia7n7~HYo5^9o6#8ZYOtSPC8qiGz|>90
zqUgB34-hj_k{-2uLM=J=QiF)Q=NZOGX19<U-}ZX5;a}eTR|vRCW=%Dg6y*ICOnoe0
zyKcrgY}8JOp+|)a=@HoG$)gCgj&U<-u{0hmX=+c%WH)(znJ`fm4LMbyS}zL3Q(RUN
zxIjSmc8!;_L*Svr@?6l)ceZ|ZNgf7P4f;7zF&}oBjoCA8jC@T?$w4Xhz`0QKGx>06
z7(n)Z;Cs%ovcnJ=8^^`=;_>UPzq?#(Tmms1uj!eA7~h9{<i1EXP_Pqh0t^6Pna`gj
z*j}gq=%3De=qu-i-<E=y-__AJcCUp@M^NTcbHeDhF4E@si9!Xzu&`+@o7Hs_u=ZnE
zQiEn{wH&LiKmW<A08L?`9$m;rXz~$-Ay_aQ2KH|6d~)E&OxEMQ>kx3!HbXb=>ey`i
zgloxotj6#<dfeqSEhD+C)><QWcIP{}wyuYBLjfm2iQFFYCay0iU@_L}t$nhZq-gd0
zuV6J3xN50(hb~I{BmgdA^T)vZBAS#myZ(<ka_Vn>yJ8wPK1Cddl#}b?a-R086&89w
zKKJLhY4RB?_7wHgYuPK237(1PtQ(A^z?XSR^38gohl1!0lw{y@kW2pIvfNs9u>9X#
z!5p6-h!|rT-UEOCY_T!Fyv8n2(!^;@2!&u8zLi=uQ$T6>PurGb$MPIr;ja}WH5SP?
zCgC>F$7r!Act*bYNYT@Ke;RaK*&e;b!1%(cUF}!rjOt>;$=a@~I>Ql*g@L{gA7}Rw
zdARHdf~g)riQt6B9D505i(_bX4J)^rGbcYKVw-7q>KW3bMAowI@Ig-M^1J)7*sB~)
zJ|ajBtM&zS!wj2}-4%ZaQVzwm!J<%T$X;^`*9uFq^Qtez2OQV#v=Dc)s=y-EE_;C`
zQwHzL@?yrP%p(+{^xmg0P&y@xI~d_6NC1FtR2|9#kJOSnFux>Z+uhXnU!C^&O6iu5
z&W?MEg+%;Bti1sTY>?uN$Y(+bLYx7e6F>HDkiXkS=ZlBdMUxDDa3Nn~XLilFQys|=
zH|}ly5Hz2T+nOE(YO{v@!#_qXP#1~Nxp%f6RF(c$K|CKFZc$dBv<pukA<5tL*hz(*
z0T&?#7hF7;c_pVZ6|fuczBtiQ(=P}NiPom`vO#wH9oC`WS<M8O&DLOG;Q4?5fsCCu
zldbnx;T__#s*;KW2hJ{VnHUXYuW@!1&7rfwOEqDYLw!b-xh-%e-9);Sd;k~RIiw<S
zVNUF__Z#Zm5L#)!w5G@L<`Kg<kLSc}Y<`pB``Cl_5OBC#WscHe_0*AElc3f8YgQ+^
zgW6ZEwyo8t^P8RX$4?&vnXdc680dpRBdHl|T$t{*gVQ8lJ{A7Tqw-Rs;TJcH$Hm7t
zn}+<aN$#zk4?zYulI@=U{VqS?=EKk6p=@c>C76txA^W3Pm+35<y90UJP!EZxKFa>7
zk?%f#{FEkGr}3%`u(G=!?|6G4{rlyIq)s{KpTy;}=EW0Lq<BQY=l<QZhN;HP;Q(5@
z&u>&_th!Wmk`1a4IYIljb{{tFkWRvlq#`;ochUe;@YIfc@>P}7GfvPj{2B6%X-M%u
z>yPuY4#Emo+~_Ni{+#~#@+uL1jUxB0unzx6A_pUvQ%=eF>}F&oDIKnA92%ach!Ax2
z^qpydViRU*R#(e#<N%**N-c+wUdN&^!}vd%ilpXQsrz9XsCmanpmpcr)3lmaOlp3v
zr)OQ7IpzSaj#n?ES8mp0OS*6+!=g4Nv4?uf#mq{Ebt#=NV`SoAd3}M|JxRqf{q-Lb
z*w6stgNR*zH#%Hr$oVTTV%d*(qD76X%oJbkrNc&Vi*a5cAb`Kx2uvXYi{3Noroj?m
zI`9vQzXd**e#g_yuC2D)*L;)+*yo-rFZx<wmUz5zX|VCJ3UXRn&tm*Qg(3K4swYOd
zBY_C`6OP$R{6_hmN0|Xvj~%UZYi}S5+O6qNI(@Y@(VZnKTGj4)?>xipk&1*h%4S|v
zt<syA1+dikGUC!ostSu;zMO{FolFPCyT91y+n_6kl@M?bo&!SNo}wKV${0Nq1Ld1W
zt>rwVC!AzZN)j73`sV)KJ&g;5v%KNhbhZISh$+FOv4`1V#)7roXhl<X#{y<s3CS@Y
zH6EA>O|T~7YxI?>q{7R7${!SeDV-AWbuXlUVYYj?K6yy{__D@KpcQ`_c{p7|KDClL
zOJ27oX*K3DRf1W5xWu7=&mdaRxA-@pRJ`#n76zrVbaghF?*5p|x0)lzI^N|n@r!EN
zBF4JW$2K4GoY}SZv|@z!x|G&gJKi^fnS%5kpoRLg0xW9QeZ1XnQCs`Fmi0Y1&hrx`
zX(r-&D+Gz)bmXqcn1~KT=M1?|D=p2xNEjCBnn=Z77@>WWV~qi(+_auVw`12Mq9$Yu
zeL~&a>s_ZmY*68P5UpXJ?ZZE*48eVTI%MI0A0ast4myXJ%U2%l7e$hj<t#TBU1dKu
z6?{6zj|^MvWpH+-=@l7-9MuIL(AiY)TvFe@N$@&sjhU7o!Ey=U4ix3-SdYIwjkR2Y
zmGtm+V{Q*P2yldf&Qjm>Z!&y?iTke;^xV2pPTYLVJQkK$oIeeg)@rp4*kTT2nBSJp
zNT!P_ZsG<YQaeJn+qm*<(&#F`qhuPk{(>t-*IXfGf@kG$2yO1DN-|jrJyudugy`Cz
zKc+FJ$MuF>>AWc~FbOW;R1r4fncM+pt%!=VgEtU*CR6dDAf+m`QPXboTQ-Y_^P3!r
zZcG^~0z4%Hww&(p;uwch2dSa!I%*mM)-{C~=mc7kLi}Tp(2MST_vaSJXXEMByv+@o
zu#a&LRJ%a{m9{TXG=(>I{$()B-<_n@-(Wme&G(4P+JDQ!N3!}nA189Z%s0O79&NtC
zBBWtIJF10eSZRjD!wH%K3wOfgmi$^2xeP50Vvu58(>5pUW_%29jL`swzCT(LK_t9r
zm+)^LHU(fCu4_Nx*?j`NW*Azs9jUkqzqYPxMyAmQ`gNEY6!j&V4ZPxFCpy?3O+|8e
zh9S77Nxlt|UHZHz0I%YIStfK?Zdyd~8H7@pB-Sd^e6JcV`-#=AO-%g!atNdx5R&ps
z(LSPCRVBIIzq&O5J^2%lC}aZBbSe*?%z60Rp5xxDW?8OOOr+$Q1k;*6Pnut%J*!q8
zW27$j1VQaFQ-v8DirnfkSS!p_KL5O+!U?hDX;8ebS@!e&WWWBaNAr-?QIx1&a&DLc
z$%$YyrW_<*G<5WmK=Sy|Y9dagea(Q^e)adOKTsY^IrBv>NJh_t^xFp?6(*EtWDWJJ
z-!;FKlupda!8`v+-M4E<)<78=tyy=siU<F7ETWHee=Sbh!r+>!zU*c`gOy5tCPa`K
zw1`k>yrU;twcvye+luAheW<s-z3UIuElz2!;-exnZIl$>S_yWqnlR~q*~{O&T6yjv
zc;4SUr@IZrQ#a$f{i)5aoF!Wm2s~H2*91v9RqI)WB6dp-{)Nw*X66-XQ%_ruO^EK)
z=s&pzqH{r0vCCmn3A9aWML&}hw8?t4G{?}RI15n1N`#gq-z`n&RX0e!g=KJ<8+au=
z?k@O`FP3&mP#w6MZcqNda*O!?MIXL^XH$6mr^eUgi<i5br<<+$;g+V7ikiy8qUz#u
zuxSRWXJ9xnQ^%3o8?;#q*n&_*<`~jjv(mMHg1_<$XLM-HFXSolh{x$qY*#lVguF*q
zLu8cn*i6gOkXv-y@<_3xz?Kn_a;XBgk=I8!=hHU}XsIdcybph9+}*(V`R9(&@!LiZ
zviw*?rm;3Yo;;=Vs%G4W5HXk68Mc$JnnB4s$4xOThje$R0j_lEgfa?&bC2so!(10R
zAM@THhm&n*$lL|bP8+B%5ttxz!^1njGn87RR)-0k5s#j9*t~(Ih=NUzWke{Kzu^9D
zB&D=x<;h(KX2c?wc$O2lzNGGhwd1Or`_8vCZV0s8vG|(b=B3Z(j0$NmY<?DdrEOr{
z32Du25?lD;<Qm080)7?BtfOwM-pmMYDJ<$3tIM}_2D=7QhxlLRC^5a{CO)xt@$u_#
zTe@>d18&!{aMBN*f?gAS{{^dNVEL?sxJ*F06MP=N^3$rr`^sYGYMXSt#TgAh(nzBt
zG~u%vz#3eLvkge_KQL!I!ID)_WA=zwkfN-%=cTdGmcy#HOs70mFX_5ie38$<bxe|J
zff;HG$li_GsgVEqC(P0pY0xP!n*ZW1L*ST5Pw=%Y&E!yvvSorg+Cw=5eJ7gVKhe(k
zzYOVF!vZoK9?ANR)cREC1;_!j;WvM0!NK{BJq@8=vVsvDmw(CoVDj>qNmNgNTv!zm
zw;1qEOHPVeDqhB7D9?ZEU>Mg$H?8}rsYlaxr#41C<UaheQeR?!z|gq#$I)r)GZV~4
zsVQG(x1+uZ%a~^mv(ib%I7b$;A*N;?8!cCk+84%KFDst->JBapw-P7GQy50tbGUQd
zsysg|!BFWG!5KpisK2ULNqPO(8ZM1YO8VZn`4^v4F$M|Pf~F&7gn8ob(-wD+Rkw)@
zjG75)4;CS_hywhopy6f^{@2A9<uMW$OB#0Kekbzs)bLTJi;ai`@Y|oiW?+O_;qLEP
z&Y?HnY0}xX8#}Tp|0%b0B<Fe_B$JO$2;Ou3d?R<r8S#;Fva5D&Z8540I-}^*#^y&|
z`@-IFyjwnB*acRijQ)h&D#x@(_)&Ay|Aw}wN^;x6Bkhz}-Hg&ys5Yy;e~4Ol>If=#
z@vuHvMuDh;F{bV7^qJXefzvnhoBo}Aww11SuIv$?;DdA3tqfDT_r75S3a0wvmPCu<
z%$17Faidi$aOG2Hfbi(cKPE2E;?7E=Ybkk^7m7`g(s`g-eA7>A&N!R9haCtAVOx5c
z_*ono+~A_b*`~mi<095X-k^#1lY|JJc)#G9<{WalXX3XeDv8tfFD9MdEEVj8M0}Mj
z#dt7gXsFHX?o{RX1V=Q8V^V_Y!H2s~&N42x64msUVOKt!mvj1Kp|~@uZFemM<agl7
z_+g<nQ^u%$^*54lsu@o0ucJ0)77j+%f)MCoH+jw9WD-5-b2x&u??K9rWD0KycydDD
zjbX(XDRi5{bD3D;xAds_P}Ov)+O_ifpypV59H}4`d^hWYR@Q3pOe6EA1oAz&<I_Ea
zSl|P_qo1LjS*tjHT_Zn@fOnzQv)^QEC<I6i7AFmid%kPeH#u>IK9;xE?xy9Za{zQ@
z(QS|bLI(^tZ-vm59I7>WYH$>AU7Ghhr4i4T4ENy64)t(P7~fMT!qs$eI43P#T6!oH
zGZ2u?XvF9J)USK6QSkD=aDUjbec?+fpETz468LSH_1v-oH-_jH_)Motk*)?8bfD?;
zfYyytFn6(J5nY$`{=C8R3h5RmVL|5aC}pqi1~t`sc&zn1<Wv~_c7UcaB=;<ad+|t#
zB4vZck0Xx}_`@wa!D!!y2cFc;m^|RP{AaTI6AEkwzuU<5={IVhh8_%{nVi124W`-1
z?-F_8O~D~j;?H$;M3yXvAose19z?+Wn_IQ7H>$Pw)3m^5BZKlc1#N)PKISvOEQF2W
zgms<Ull);Kv$H<jL57P{;fc|OtP7BU8r*QyAw+4-$XVgqHrnVz@;&UYFp6kq!APBA
zF30(Yudq#FJ9hz%M*f&+kNeq^uxEY$MBwpn?X4we(?QI>`QHWDUl_xZQEH}U#UI_N
zZ4*YSTK_e?)7^b-dVrGJ(&nh>oUh1wvzU8P`lPXhrj)ZxpHz4_k&BWVPeEjtxi8#O
z_~}khV4~QQ$>{<!h!YhR%~=S!K?)ykltEc2U;|pm6td50s$TK*bSgWBSaqf#(Q`@}
z>vPPr3EeQ%o3F#wX+}a=?^OHRn5C%)o@eXVvwTFuU<Ap@?v&qG<u(OtU6VYXUUUgv
z-_>(1Q%%9CWvRu!i<gbThvr44V)e@F2MLU>u@1VK1PkL3DcaP}5$cGn;Ov0}#M=^E
zgE1AXOeZSG?~87gm<h{Dry>vLnwoAOvyRrGd}-6_entW1HKm_>J|<Vlh4YN;B4@!b
zEKJXaE|bfZxIMAo{)H)_?#;?@SU7o-)VTbf_3B+1j|!Bz+KK_@N0-1}4E<8M#U0)>
z4<psI@6RWeFg`~vz6t@XfjhSP(A|7Kc*<HB7+-|AVV=>E^@4?l_wHVk^59u{SpBp)
zQ{e7|<=DIgLn^21%|!ae8UDMdt$~khDkVz|rsSXX&7~WQ+ERX}|JLLmx1?iLLLnFO
zVTGvtt=B`qOYKv;#Y$ZV8FrZ0PZW0}u|306o!ZAFknfV*exnW3C$dsX%;@Q7-Do9a
zVyxQlNFk64vf2?%zh=gA<VseIU+9LgMFSis@nS-XwmxX>3QltOv0yE&m~RErZTXms
z(ek0yqw_l>>CQdLMR;beAet{J4pL`4YwCA^0%1Tc#SrodF5ClTB;w|N#=f;V4!AYc
zzNPXGo4k44G7@ps!R@l8c$*N373_UxJV6laTXz{RxMUVUp0S}2a@Ab!_w&8fFVaUo
zpkH(R>G_+0+?7I?-$+pgFo?t<;mmu_CqQSpUfKkYn7pp)eQAsXB%{kq730x8C`K(m
zD(S9A>)y^0UTMK(be`rtO`imj-m2hvOOBTSI}K|hN}bx#Z9}`siGS%R|M3Uq@!AIQ
zJQ5~Uksq2g@;7hN1I%z;@OD6TSW@WU<&%<}kZ?#KBJsi5&D{<*>x5!&utcn#-V!e@
z4U!2^uKSVONydrK=GcN%@h7-vA>dq4VS!(-me+65`%~#L?iQcWN1^g?ZB@tquB7fj
zrCxMI&dl&J6Z_!+Q-B&RVsesYnaZ?yWR(UQcKC$C0vT;0_=>N4^-M<G0R)N&Lk6|j
zU*?krJmX5<ZM2xgLnQp5E4%tTD9D=zBudX0g6GU}BYL77jUybisT6Nh?G00>=fQk-
zE15%{WH>*O5IV^Cc)Q8ybrcQs9Ou*o;hgExfvS?wF1WcIWAy)L#J_H_y9tMaSg5?$
zz_8p*ZQ;D{wwOM@z%oWoxzrx*LXH^ua$?+j)5fSDcEsJYbv-rpVHjc16=s;_QFre!
z_B@Ye_Ib3~A3yOcwA0DQqp#GrQd_YKL>JGOl@@QbCqB5}#_0-HXM_4N4l;whLpmDJ
zopfE=R{(KD3`jCSi57NzvR?@QWa>!u#}yF7>4Ifo{PwMHA42tdSbtyO6S9;CiykCv
z3!qZYa_&jaS`z=IhzH+AgIkJbmnZ+`dE<ELr+Z}gV~Sx57M&M`;f(A_{Bcqo6LFmD
zbTOq2iTpIalZHp#v)q16I+t_Vu=-AKhynS@rhj80DJ0TaS?yVU{7SMXKBN{Og!3CW
z&m)e?W9X%%+o8K%`Zmhz-7B5yC$-H{p|J%N;T&GOscm}H1;^Z%X8L3Zp#%Q;4<mEe
z9{8M8<ghuouY#G&)BUA`ayon8Barfs=leV)==gv9=h&n>s{fQniBON~-7k;soths#
zYTWw=Pj?RYMAFNH@G28#$Lij=HHF*P1#pC`$=@Yj!ckF*krw~3_@jLV&EU()KQfXy
zj86>Px|0!UNGOcm@4rOr6<WW2$9$>%w%(n~2GhYLAMc>$8F%6mmLqs3Ch?QZFxG$Y
zo2WDlE+sf{@}GV%+e>0(Dwah`ob8R{nRoXOB*=L;X92NN@jJ20D8Xp~z>t8ub&<~7
zEa?>a%RJTdJ5cpCkbddQh6X}21Jt!rMAZ+kkmisR&n!Y<IWCqW)6Q7b#z@&~Bs1z5
z={ZUOkS--YpC_FGN}C2~;P)iF^we#STwPzkVUx?ed0c>aTHhv3xNoDf@MTWKA-<&O
zVM29ve&Z<5l3OXO1<&rH)3vXD^QRR6e9gDN_VCa@^($}!77v|bBaS{VGK6c0gDwvF
zl3?7}g>^V7we;72ihKhi56cglZ;omlub1y{otcNq9mie1#1CRmOm4f(#q{MXC^5i4
z*TKK`1R%e_L|OGn`)LZH;N*Tzi?a*yG!QC!VW#i)cLkqQbVn|$Gc8Kml7vl(@31-d
z8pJ~3&$s7daFrNiC^XDbZ!{FuL~SH%Ltp_KVkm}Mrv5m<<^?#w|7Y8=kN$B(zPx}*
zAF@yxw1LkVj|8>19>B+jtd|U!h!6Oc+N}LjTVESHKDnoI{k7tx+tK4P0jJ?IJa#Ro
zCL)6AuN}_03**NyQE3#LxYVPIuR7>41)0P2FG$4}CAlJIag=dHq7dCFsT6l&N`Hm?
zFRuKpo|T~QF%6J9ls-qoezc0WEJd`IIP1Q}Wh;R*QbF&>npL%5Ki2^1_nmSuY`C_k
zC#nzI55Zki=CJw=8JU5zuxlx@r3;DsQJu4KQ5-533>N~vEFAs*eU+(w*|qbwma*~P
z^qj>a=XfqdSfjlgVp4zpF`!+2xcpZ4$$#V6jeS@1h3f7le?Lx&k)lbkPt*XnZ^Nbm
zRNR-wqr6*3{5U%%zZPS>u*|f2dc3BcI;LGj^s!h<oD^@X8U^o-L5UZsVe!&J@mQYs
zMSH9Wd?eR7c&OqDJOr2=&B8U#8`*C;Z+gj(<3;J1tv8aCTY7c4p%eax{r%G8D~&T(
zeLL;{d)JQZ2e;{en1UMNM{`&3Atg~~TqiK|D3F@WH6^PHq;Ka=Cn2Z~pJG*3rRA<V
z5WM81*5<xTIr^slZ(4WHq%-RC<wm67Zlk23e%@v459hf7Jbdn0pC0*|6Z<+0wNUiG
z?Q{y51*%duFIXZ;S@F~B_Fk~Le<6Ukw!ORY@m$`XV4<X<oq@~D==;P^+oxs=TU!%O
z)Wf}AOv?WT3z!0Hf8r40w^uZUlbnDR+A>I{r)$gOdJYiS7BHYu9VDv9KWgwbZ{tCP
z_R&Ht%yEVqC3n)d74EL1Ze}chMxG*l2}4dbg#XEVx)-$DD@WkAzC<?)FWdST*!pd=
zKyufws5X=_Ftb(rMEuRrHLi$QT)AC5?<D!PFanvquQPrT#{-2@1Am=cpoK>8^zEO7
z@4x!;<GM9um$nj8i2oVnen~Dh<1v?e<;rUO)h#?|Kl)nA2K~dN{q|sYfo4->WbyX9
zWL(TKXO7<9>BCe+BTViaiJ%x<TbZsNUL+KOf1AtzPB)g-NS)MXr{ce9^6otQXH|oU
zpw2b#oAZq(tF`T~s!aV`##=8*8aLJ}?-+VTlL;S>-2dEKE!D|2V1jA>ha>?FK?;uT
z;O9S*#D85<>1`fhDJ%2R!UKMJdOF$yO-&4R40Kc!B}Ktq5EyAFNQiJSG0{;`!Qh<E
z+{f_vFQ~{D?}rlSCnf7g8~ZcgGfz&VFWX@JAFw@V+_j>}K5VP1qvImq5k5zYZRL&A
zxNb2}QWv+0r`_djdt_L##W|>D{>yxpxun-4*(s*!S$x=5=w98a=_6xE=tAEbQ*lYf
z>(J8IwM&D5_eR<6`HE`$Zbg&jWdX+7I~Nc4ytUE%l#8?N?RIErxpLdFqRAQGme}re
z9l9c_Th^EVGQD;k8a&qVkN$qJ>$K>eS1!2PxhH2T+=%|imIeTFG2SA&MvQo*8=9Io
zMy4sO-bjv@#89_#4mP^8_Wn-z5)kCY$*!Uumxs*_zsM7hzv-abnZ}p)gGGs98e)h|
zd_Mxe6;JH=i#<_4az0ti{EEoML93P6KYO+r1X5G`4okkC%-&nk=>qYIqV$9gt(pe8
zDOeAXduEk63NpX20!SgU_xX1p{_+Rz0SLTQL~pbU0*D1nqY9F3E0L;<Rw>3JDvw)!
zfC&WvKntNhU3Mzb|LN+=<Du-n_>AE-M%l~0BpO?cl5HdgQHpGpvF44e$uh_cMwAvw
z5mB}%T9_FnF+vkFAvD$){OpP$jD5-b4DY9YpZENCpXWaJ-19x>+<WeM?)}^+Gp_R$
z`KQhlm)EQ$)axxu)L*UXJ&OIA@JQrkry?#S)#Zsgov&IpBt7L&!gQ2QIOnwSHJIZ%
zZX;N_jarmzW8q-?>crjAiIGu1kDMr;ecGwG=X?FJ!&&H@k>x_IjI2;nod5|mFiK8L
z&(YiU4zjDYnPB#_q+H$8i&Ify`$FB?%X(HDo}-0P{f-;wCoiDNfpntI?IguoxCff(
zYx!yR_+i-D=6>2&W!U=*hJ8A%w)Bq)bV5s6Ym1mVrYL1MLyr7-_W<ARz%7-H+By%D
zZ)KFRzomyrtI9V&q{zG-J61%ia?g<yNI~TRjzxaXYPv|2c3&9s^CbC6q%US2b7`18
zu51B}_`ntLWwe@pC@DsOH;_A~)ke81IVuuuOa5lllh&e%;W-_CqS^4q(Ywhi(~vsm
zLb*#HPN?>ZCGcyynNRlY<k8@QfkwMU1gfh>d;IK{c#JO);RjIHu20;uZ+9CH%TYZD
zq;$w-EE>B9U!*TL^;QvXiZKsQ*oP*nLcu^r1C*P(6r^qkTN}cU^uw(T4*d}B8CW~L
zAxdB{v3}+rwp|oKMzzrNLFA|X4`s~q0~+Twp%;kcM8m66kyk~idFK_A0!SRlWC@>3
z;^7z54#ZJ;@n!*;${L~PGL?u|0FNUtk6ePsO@lr?j1s|WU^W%F%h7Nn{-kXeM&oDa
zMsO@)Ocyo5TC>fT;`8B5tbtk?6x*tVnrv(;8Z#3uEhc8b(NhkcCRvXo&MH^5er%!y
zX%AK4EpPHB6N~up1xBbLr`NpgOtjPS-U-PpP@bwOAUO8zCLG!RC`mAJnIYL`O&cUq
z`>NA;L((#s3KneiK?||S)q=D7G>+#^Fc&Sv^>^owg*x2x%gQs5Z-0K8u(C1-dC{BG
zfSZgza?-8*jxV*L04e+8`~8osPRDl$i*C~0x>71>V8$-=bq1_gzg|w)IY|^?+&rao
z1eivtNbkbQ`haA!#Gcr+N&$923IZv)Z1ouOotkc{Il*f#iS3yQ!5x5CY2PqXejjat
zs_4EAv8<Ab7NaJEwKHrgAxLHFsSr_Ft1qB%3r!zsJj4`QVAbfk+I49E@Lp{%BR+Yy
zq}EO89$%&0y_YSg5440Jygsx__5KpwnOSm!eYmU)rB|@k;@$z}e9|sYaI?Y>-2Rt|
z4aGGa+|4)<2eDpKM7DUKS!yw%^ui>W#H-)^1H=Wx>4GzkdHEtf_DX}PR;HgLD2}{b
z0JGK|W;YvjR+5A5ij~<?fyODAJ_%TK=HyB)^Ih?lpf1t6o$%DNsw27hI!CB{4e~w~
z#UBG9$2=X@lJw5GN3nl07xgqyq`8^2hgUr;!!#*Y!NWjJ73`iu2m?a9^~^#Y#30CI
zL|*+I|AMx@f(GL+;6xXjh;1F8=u`9FYK}#LG+N)LakWM18?tx5__}708o56^BaW5N
zqo%zlZ)QW9-?eJd;1FJ1QcU}NTl%;64j{0<S`G$UCIbv#>uB0Gj|pPFrp=AXlRm4g
zjdP+BJ9;{^i?gUWaPN(^2PMuqh{YbpH6y|)9#`ih$5$Ag-+0<+^RJ=<^g~#sKQ@20
zjM+`RA~Np;XD~ld>%0UbgSd>_vN3@1ua_;C$J0kZac$8b+GFYaOBL8o2e_U4Qnl8x
zh%n`&`2F&vm+5e4>5S>jm!ae4X%{+9l9oF6-f3RWOJ_XxLKf(m^<KB4KkN9JzxSb)
zX1V+Xh4rg~vkAiuNMP_B37}M2R?SU8M@Q!9v)2(I{5&R|#bCT>d*kFUi~S|v=P5}q
z5vD4<RWMf=2SJ_h#Ob0Jts2v>)22N6w9*uh3wAwIbcyYKlG*L({^q2FJllKLF^Pfh
zwcx)x9Abn_r&c{}VL*<1n?5;L-n&M|c55PrBnBLh)pNu@hzdEpr6gG~hBjejeSU@;
zkDMwFnk77&L6n@6*e8VYeW^?Lw0LJd9T@4<xxZ3iyZHq+_Gs0B7=(inyVtpTZl##;
zl=0ryli65}cCcJYY}h`Ye7((@(dx(gUvHV~B%~fbEXx&vI3Qz;<TzrlnjeuNC(los
zG}OJOI4DHTdU3_kmJ<L)Zw<0bw-ywV1WpCElLCad72tCp5O6B}MbQlR?GR}3gKuz8
z$c`dl5n)eN%+rFGQG}Iq4wg1>gth21TO|$=j^&9#-CM@-ehop~fXxGHWaI4cul5GL
z2iF8OFU-U<n-8cg9sC^Q_C|R4vXGcz@h~M~L)gKv@+Z0;I650P{&l3z8z$xCLSp^$
zBlK`So*a^w2M>&{M{P^r$PTALpxQ)i;+)Og+9e^e%D-OnkIm13WxI?0Q+UC!nwdNB
zSJm1~TEkE$NZ;!`$y$YfmFc=Z24!Pdw#>%x$c{<jO`t+Q=&t#*Ttj^)P~5KVz|rKU
zY!yUzz8)u)FrO+o^p!BdH9*qZ134;r$>4sT0svLdx}?|@kR^~cV$+C4-+D*3dH{+Q
zXSS(y)uhi+Pk&e3E4pW4*!KrIcc+NFCAOtJdz^t8_FoCo*ue-O0hDJ6{`%neARLo(
z+BZ5t_=oHlwL<G&Xq}Yi=j3sUss<{K<M&5ZJ6bvQ-iU$AZo-JWZ`Ec>+r>qqzljs~
z>DgQs%IQ&GK$k#(70G(Yk_I56)b`X35`dK{%sWv37T^gdxi;CO?AlBz^kt;ZM}uha
z@4AWXMJljywrDK<)?5cU#$V>62qaJSQJ)-G*L??jexS*CcDM&*KHU<uOCL7emL7_f
z8h7@0>oNGhme^(q0yR%#E&Sf_++JvPYOK8Y-`998eaAYH;gRvX`C`yNJ>D5ajEn^#
lukl!(-<{i0IOr+(PtBc2c<}o_E$43Yb^lXmyZqlG-#^YT5vc$G

literal 0
HcmV?d00001


From ab82d9e8d9872168aed18dd01ce704cf9dd2abec Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Mon, 18 Apr 2022 23:41:42 -0400
Subject: [PATCH 017/200] Initial Gas Mixture fixes, Admin Debug Verbs

---
 _maps/map_files/generic/CentCom.dmm         | 8 ++++----
 code/__DEFINES/atmospherics/ZAS.dm          | 2 +-
 code/modules/admin/admin_verbs.dm           | 3 +++
 code/modules/atmospherics/ZAS/Diagnostic.dm | 8 ++++----
 4 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index c9a12495dae..c001e9016ce 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -183,7 +183,7 @@
 	dir = 6
 	},
 /turf/open/floor/catwalk_floor/iron_smooth{
-	initial_gas_mix = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/syndicate_mothership)
 "aJ" = (
@@ -11247,7 +11247,7 @@
 /obj/structure/railing,
 /turf/open/floor/iron/stairs/old{
 	dir = 8;
-	initial_gas_mix = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/syndicate_mothership)
 "GS" = (
@@ -14270,7 +14270,7 @@
 	dir = 4
 	},
 /turf/open/floor/catwalk_floor/iron_smooth{
-	initial_gas_mix = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/syndicate_mothership)
 "PV" = (
@@ -17503,7 +17503,7 @@
 "YG" = (
 /obj/structure/railing,
 /turf/open/floor/catwalk_floor/iron_smooth{
-	initial_gas_mix = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/syndicate_mothership)
 "YI" = (
diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 64bea7e4b0f..16f2c26141e 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -203,7 +203,7 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
 
 //OPEN TURF ATMOS
 /// the default air mix that open turfs spawn
-#define OPENTURF_DEFAULT_ATMOS list(GAS_OXYGEN = MOLES_O2ATMOS, GAS_NITROGEN=MOLES_N2ATMOS)
+#define OPENTURF_DEFAULT_ATMOS list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN=MOLES_N2STANDARD)
 #define OPENTURF_LOW_PRESSURE list(GAS_OXYGEN = 14, GAS_NITROGEB = 30)
 //#define OPENTURF_LOW_PRESSURE "o2=14;n2=30;TEMP=293.15"
 /// -193,15°C telecommunications. also used for xenobiology slime killrooms
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 3f04ef1b941..1b7f52bdddc 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -196,6 +196,9 @@ GLOBAL_PROTECT(admin_verbs_debug)
 	/client/proc/cmd_admin_toggle_fov,
 	/client/proc/cmd_admin_debug_traitor_objectives,
 	/client/proc/spawn_debug_full_crew,
+	//ZAS Debug Verbs
+	/client/proc/Zone_Info, //Right-Click Gas Debug Info
+	/client/proc/Test_ZAS_Connection, //ZAS Connection Test
 	)
 GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release))
 GLOBAL_PROTECT(admin_verbs_possess)
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 785b83078bb..d67fec39512 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -1,14 +1,14 @@
 /client/proc/Zone_Info(turf/T as null|turf)
 	set category = "Debug"
 	if(T)
-		if(istype(T,/turf/simulated) && T:zone)
+		if(!istype(T,/turf/open/space) && T:zone) //ZASTURF
 			T:zone:dbg_data(src)
 		else
-			to_chat(mob, "No zone here.")
+			to_chat(mob, span_admin("ZASDBG:No zone here."))
 			var/datum/gas_mixture/mix = T.return_air()
-			to_chat(mob, "[mix.return_pressure()] kPa [mix.temperature]C")
+			to_chat(mob,span_admin( "ZASDBG_MAIN:[mix.return_pressure()] kPa [mix.temperature]C"))
 			for(var/g in mix.gas)
-				to_chat(mob, "[g]: [mix.gas[g]]\n")
+				to_chat(mob, span_admin("ZASDBG_GAS:[g]: [mix.gas[g]]\n"))
 	else
 		if(zone_debug_images)
 			for(var/zone in  zone_debug_images)

From 3a052cbc257d1b2a474967fc60b3223300dc32f3 Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Tue, 19 Apr 2022 00:09:40 -0400
Subject: [PATCH 018/200] :screm:

---
 code/game/turfs/turf.dm | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 4f680b91b90..1e7179cd9b8 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -99,9 +99,9 @@ GLOBAL_LIST_EMPTY(station_turfs)
 		stack_trace("Warning: [src]([type]) initialized multiple times!")
 	flags_1 |= INITIALIZED_1
 
-	if(!blocks_air || !simulated)
-		air = new
-		air.copy_from(src.return_air())
+	// if(!blocks_air || !simulated)
+		// air = new
+		// air.copy_from(src.return_air())
 
 	// by default, vis_contents is inherited from the turf that was here before
 	vis_contents.Cut()

From 2640b9fa7ddf6221297fbe2b6692a275f49ce3be Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 19 Apr 2022 00:10:19 -0400
Subject: [PATCH 019/200] Firedoors should no longer cause zone rebuilds

---
 code/game/machinery/doors/firedoor.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 634aea1d191..8981744bb98 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -663,7 +663,7 @@
 	if(get_dir(loc, T) == dir)
 		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	else
-		return  AIR_ALLOWED
+		return  ZONE_BLOCKED
 
 /obj/machinery/door/firedoor/heavy
 	name = "heavy firelock"

From c51eec03ee5d65661837010f44188c47bf08faaa Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 19 Apr 2022 01:05:55 -0400
Subject: [PATCH 020/200] Misc fixes

---
 code/game/objects/structures/girders.dm  |  1 +
 code/game/objects/structures/grille.dm   |  1 +
 code/game/objects/structures/window.dm   |  2 +-
 code/game/turfs/change_turf.dm           | 17 ++++++++++-------
 code/modules/atmospherics/ZAS/Airflow.dm |  3 ++-
 5 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 88a9f6edfc8..417c547bbd4 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -6,6 +6,7 @@
 	density = TRUE
 	max_integrity = 200
 	rad_insulation = RAD_VERY_LIGHT_INSULATION
+	can_atmos_pass = CANPASS_ALWAYS
 	var/state = GIRDER_NORMAL
 	var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
 	var/can_displace = TRUE //If the girder can be moved around by wrenching it
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index fe236a97e8a..026a9f4cbc4 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -10,6 +10,7 @@
 	density = TRUE
 	anchored = TRUE
 	pass_flags_self = PASSGRILLE
+	can_atmos_pass = CANPASS_ALWAYS
 	flags_1 = CONDUCT_1
 	//pressure_resistance = 5*ONE_ATMOSPHERE
 	armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, FIRE = 0, ACID = 0)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 2ee0237f9fb..352d7bed1be 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -324,7 +324,7 @@
 
 /obj/structure/window/Destroy()
 	set_density(FALSE)
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles()
 	update_nearby_icons()
 	return ..()
 
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 8a5988300a9..88fb3bd7602 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -82,13 +82,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	var/old_bp = blueprint_data
 	blueprint_data = null
 
-	if(connections) connections.erase_all()
-	if(istype(src,/turf/simulated))
-		//Yeah, we're just going to rebuild the whole thing.
-		//Despite this being called a bunch during explosions,
-		//the zone will only really do heavy lifting once.
-		var/turf/simulated/S = src
-		if(S.zone) S.zone.rebuild()
+
 
 	var/list/old_baseturfs = baseturfs
 	var/old_type = type
@@ -97,6 +91,15 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	SEND_SIGNAL(src, COMSIG_TURF_CHANGE, path, new_baseturfs, flags, post_change_callbacks)
 
 	changing_turf = TRUE
+
+	if(connections) connections.erase_all()
+	if(!istype(src, /turf/open/space))
+		//Yeah, we're just going to rebuild the whole thing.
+		//Despite this being called a bunch during explosions,
+		//the zone will only really do heavy lifting once.
+		var/turf/S = src
+		if(S.zone) S.zone.rebuild()
+
 	qdel(src) //Just get the side effects and call Destroy
 	//We do this here so anything that doesn't want to persist can clear itself
 	var/list/old_comp_lookup = comp_lookup?.Copy()
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index a085b95e0ef..3b8ca8a0734 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -55,7 +55,8 @@ Contains helper procs for airflow, handled in /connection_group.
 
 	if(HAS_TRAIT(src, TRAIT_NOSLIPALL))
 		return
-	return prob_slip
+
+	return prob(prob_slip)
 
 /atom/movable/proc/check_airflow_movable(n)
 

From 628bd84d60bb67ba2ad67b219b66ddf2b6de4b3c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 19 Apr 2022 12:50:08 -0400
Subject: [PATCH 021/200] Updates c_airblock to check QDELETED

---
 code/controllers/subsystem/airflow.dm             | 2 +-
 code/game/atoms_movable.dm                        | 3 ++-
 code/game/machinery/doors/airlock.dm              | 6 +++---
 code/game/machinery/doors/door.dm                 | 7 ++++---
 code/game/machinery/doors/firedoor.dm             | 2 ++
 code/game/machinery/doors/windowdoor.dm           | 2 ++
 code/game/objects/structures/false_walls.dm       | 2 ++
 code/game/objects/structures/windoor_assembly.dm  | 2 ++
 code/game/objects/structures/window.dm            | 7 +++++--
 code/modules/antagonists/blob/structures/_blob.dm | 4 +++-
 code/modules/atmospherics/ZAS/Airflow.dm          | 4 ++--
 code/modules/atmospherics/ZAS/ConnectionGroup.dm  | 6 +++++-
 12 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index 31407e67fa9..3c0ddf21127 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -92,7 +92,7 @@ SUBSYSTEM_DEF(airflow)
 		if (ismob(target))
 			var/mob/M = target
 			M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE, SSzas.settings.airflow_mob_slowdown)
-			addtimer(CALLBACK(M, /mob/proc/remove_movespeed_modifier, /datum/movespeed_modifier/atmos_pressure, TRUE))
+			addtimer(CALLBACK(M, /mob/proc/remove_movespeed_modifier, /datum/movespeed_modifier/atmos_pressure, TRUE), 3 SECONDS, flags = TIMER_DELETE_ME)
 		if (MC_TICK_CHECK)
 			current.Cut(i)
 			return
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 0579c638246..dd12cd6064d 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -116,7 +116,8 @@
 		//Restore air flow if we were blocking it (movables with ATMOS_PASS_PROC will need to do this manually if necessary)
 		if(((can_atmos_pass == CANPASS_DENSITY && density) || can_atmos_pass == CANPASS_NEVER) && isturf(loc))
 			can_atmos_pass = CANPASS_ALWAYS
-			//air_update_turf(TRUE, FALSE)
+			update_nearby_tiles()
+
 		loc.handle_atom_del(src)
 
 	if(opacity)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 9e15c38656a..3374f1637ee 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1220,7 +1220,7 @@
 		filler.set_density(FALSE)
 	//PARIAH STATION EDIT END
 	flags_1 &= ~PREVENT_CLICK_UNDER_1
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles()
 	sleep(1)
 	layer = OPEN_DOOR_LAYER
 	update_icon(ALL, AIRLOCK_OPEN, TRUE)
@@ -1270,7 +1270,7 @@
 		if(multi_tile)
 			filler.density = TRUE
 		//PARIAH STATION EDIT END
-		//air_update_turf(TRUE, TRUE)
+		update_nearby_tiles()
 	sleep(1)
 	if(!air_tight)
 		set_density(TRUE)
@@ -1279,7 +1279,7 @@
 		if(multi_tile)
 			filler.density = TRUE
 		//PARIAH STATION EDIT END
-		//air_update_turf(TRUE, TRUE)
+		update_nearby_tiles()
 	sleep(4)
 	if(dangerous_close)
 		crush()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 6967aa1e5cf..d2dee6db26c 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -49,7 +49,6 @@
 	. = ..()
 	set_init_door_layer()
 	update_freelook_sight()
-	//air_update_turf(TRUE, TRUE)
 	register_context()
 	GLOB.airlocks += src
 	spark_system = new /datum/effect_system/spark_spread
@@ -108,6 +107,8 @@
 	return ..()
 
 /obj/machinery/door/c_airblock(turf/other)
+	if(QDELETED(src))
+		return AIR_ALLOWED
 	if(block_air_zones)
 		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	return density ? AIR_BLOCKED : AIR_ALLOWED
@@ -361,7 +362,7 @@
 	update_appearance()
 	set_opacity(0)
 	operating = FALSE
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 	update_freelook_sight()
 	if(autoclose)
 		autoclose_in(DOOR_CLOSE_WAIT)
@@ -391,7 +392,7 @@
 	if(visible && !glass)
 		set_opacity(1)
 	operating = FALSE
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 	update_freelook_sight()
 
 	if(!can_crush)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 8981744bb98..6260ddfd1fd 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -660,6 +660,8 @@
 		return COMPONENT_ATOM_BLOCK_EXIT
 
 /obj/machinery/door/firedoor/border_only/c_airblock(turf/T, vertical = FALSE)
+	if(QDELETED(src))
+		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
 		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	else
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index ee6f874ec15..a67a5436690 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -175,6 +175,8 @@
 	return TRUE
 
 /obj/machinery/door/window/c_airblock(turf/T, vertical = FALSE)
+	if(QDELETED(src))
+		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
 		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	else
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 27ecc8d49a4..c05e9838c0d 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -59,6 +59,8 @@
 		update_nearby_tiles(TRUE)
 
 /obj/structure/falsewall/c_airblock(turf/other)
+	if(QDELETED(src))
+		return AIR_ALLOWED
 	return density ? ZONE_BLOCKED : AIR_BLOCKED
 
 /obj/structure/falsewall/update_icon(updates=ALL)//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 027caa35524..a71ddb6ade2 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -71,6 +71,8 @@
 		return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
 
 /obj/structure/windoor_assembly/c_airblock(turf/T, vertical = FALSE)
+	if(QDELETED(src))
+		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
 		return density ? AIR_BLOCKED : ZONE_BLOCKED
 	else
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 352d7bed1be..514aa9be0b3 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -324,9 +324,10 @@
 
 /obj/structure/window/Destroy()
 	set_density(FALSE)
-	update_nearby_tiles()
 	update_nearby_icons()
-	return ..()
+	can_atmos_pass = CANPASS_ALWAYS //hacky-sacky
+	update_nearby_tiles()
+	. = ..()
 
 /obj/structure/window/Move()
 	update_nearby_tiles()
@@ -336,6 +337,8 @@
 		move_update_air(T)*/
 
 /obj/structure/window/c_airblock(turf/T, vertical = FALSE)
+	if(QDELETED(src))
+		return AIR_ALLOWED
 	if(!anchored || !density)
 		return ZONE_BLOCKED
 	return (fulltile || dir == get_dir(loc, T)) ? AIR_BLOCKED : ZONE_BLOCKED
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index b5c383f9f66..332c595e7c2 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -99,7 +99,9 @@
 	return atmosblock
 
 /obj/structure/blob/c_airblock(turf/T, vertical = FALSE)
-	return !atmosblock
+	if(QDELETED(src))
+		return AIR_ALLOWED
+	return atmosblock ? AIR_BLOCKED : AIR_ALLOWED
 
 /obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind.
 	. = ..()
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 3b8ca8a0734..9f3e413af37 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -19,7 +19,7 @@ Contains helper procs for airflow, handled in /connection_group.
 	if(!body_position == LYING_DOWN)
 		to_chat(src, "<span class='warning'>The sudden rush of air knocks you over!</span>")
 
-	slip(5, null, GALOSHES_DONT_HELP|SLIDE, 0, TRUE)
+	Knockdown(5)
 	last_airflow_stun = world.time
 
 /mob/living/silicon/airflow_stun()
@@ -40,7 +40,7 @@ Contains helper procs for airflow, handled in /connection_group.
 /mob/proc/slip_chance()
 	return
 
-/mob/living/carbon/human/slip_chance(prob_slip = 10)
+/mob/living/carbon/human/slip_chance(prob_slip = 50)
 	if(stat)
 		return FALSE
 	if(buckled)
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index fcc71024f78..c2ddf83d0b7 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -123,6 +123,7 @@ Class Procs:
 
 
 /connection_edge/zone/var/zone/B
+/connection_edge/zone/var/last_woosh
 
 /connection_edge/zone/New(zone/A, zone/B)
 
@@ -168,7 +169,10 @@ Class Procs:
 			attracted = B.movables()
 			repelled = A.movables()
 
-		playsound(pick(connecting_turfs), 'modular_pariah/master_files/sound/effects/space_wind_big.ogg', 100, TRUE, null, pressure_affected = FALSE)
+		if(REALTIMEOFDAY > last_woosh + 2 SECONDS)
+			playsound(pick(connecting_turfs), 'modular_pariah/master_files/sound/effects/space_wind_big.ogg', 100, TRUE, null, pressure_affected = FALSE)
+			last_woosh = REALTIMEOFDAY
+
 		flow(attracted, abs(differential), 0)
 		flow(repelled, abs(differential), 1)
 

From 62f333599c1a12632eff85a809f5d819feb2e2a6 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 19 Apr 2022 18:15:49 -0400
Subject: [PATCH 022/200] Fire stuff - spreading is scuffed

---
 code/controllers/subsystem/zas.dm                    | 10 +++++-----
 code/game/objects/items/flamethrower.dm              |  7 ++++---
 code/modules/atmospherics/ZAS/Fire.dm                | 12 ++++++++----
 code/modules/atmospherics/ZAS/Turf.dm                |  7 +++++++
 .../atmospherics/environmental/LINDA_system.dm       |  3 ++-
 .../atmospherics/machinery/portable/canister.dm      |  4 +++-
 6 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 04e57f1353a..8c3b0af6f30 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -157,7 +157,7 @@ SUBSYSTEM_DEF(zas)
 	settings = new
 	gas_data = xgm_gas_data
 
-	to_chat(world, span_boldannounce("Processing Geometry..."))
+	to_chat(world, span_boldannounce("ZAS: Processing Geometry..."))
 
 	var/simulated_turf_count = 0
 	//for(var/turf/simulated/S) ZASTURF
@@ -169,17 +169,17 @@ SUBSYSTEM_DEF(zas)
 
 		CHECK_TICK
 
-	to_chat(world, span_boldannounce("Total Simulated Turfs: [simulated_turf_count]\nTotal Zones: [zones.len]\nTotal Edges: [edges.len]\nTotal Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]\nTotal Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"))
+	to_chat(world, span_boldannounce("ZAS: Total Simulated Turfs: [simulated_turf_count]\nTotal Zones: [zones.len]\nTotal Edges: [edges.len]\nTotal Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]\nTotal Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"))
 
-	to_chat(world, span_boldannounce("Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
+	to_chat(world, span_boldannounce("ZAS: Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
 
 	if (simulate)
-		to_chat(world, span_boldannounce("Settling air..."))
+		to_chat(world, span_boldannounce("ZAS: Firing once..."))
 
 		starttime = REALTIMEOFDAY
 		fire(FALSE, TRUE)
 
-		to_chat(world, span_boldannounce("Air settling completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
+		to_chat(world, span_boldannounce("ZAS: Air settling completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
 
 	..(timeofday)
 
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 7fb83064e08..d1cb070521e 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -205,7 +205,7 @@
 		/*var/list/turfs_sharing_with_prev = previousturf.TryGetNonDenseNeighbour()
 		if(!(T in turfs_sharing_with_prev))
 			break*/
-		ignite_turf(src,T)
+		ignite_turf(T)
 		sleep(1)
 		previousturf = T
 	operating = FALSE
@@ -217,7 +217,8 @@
 /obj/item/flamethrower/proc/ignite_turf(turf/target, release_amount = 5)
 	//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.return_air().remove_ratio(release_amount)
+	var/datum/gas_mixture/ptank_mix = ptank.return_air()
+	var/datum/gas_mixture/air_transfer = ptank_mix.remove_ratio(release_amount)
 	//air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE
 	new/obj/effect/decal/cleanable/oil(target,air_transfer.get_by_flag(XGM_GAS_FUEL),get_dir(loc,target))
 	air_transfer.remove_by_flag(XGM_GAS_FUEL, 0)
@@ -254,7 +255,7 @@
 		owner.visible_message(span_danger("\The [attack_text] hits the fuel tank on [owner]'s [name], rupturing it! What a shot!"))
 		var/turf/target_turf = get_turf(owner)
 		log_game("A projectile ([hitby]) detonated a flamethrower tank held by [key_name(owner)] at [COORD(target_turf)]")
-		ignite_turf(src,target_turf, release_amount = 100)
+		ignite_turf(target_turf, release_amount = 100)
 		qdel(ptank)
 		return 1 //It hit the flamethrower, not them
 
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 95d2cc6c467..c33d1bbcd29 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -6,7 +6,7 @@ The more pressure, the more boom.
 If it gains pressure too slowly, it may leak or just rupture instead of exploding.
 */
 
-//#define FIREDBG
+#define FIREDBG
 
 /turf/var/obj/effect/hotspot/fire = null
 
@@ -23,7 +23,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
 
 
-/turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
+/turf/hotspot_expose(exposed_temperature, exposed_volume, soh)
+	if(!simulated)
+		return 0
 	if(fire_protection > world.time-300)
 		return 0
 	if(locate(/obj/effect/hotspot) in src)
@@ -181,7 +183,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 					continue
 
 				//Spread the fire.
-				if(prob( 50 + 50 * (firelevel/SSzas.settings.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0))
+				var/canpassturf
+				ATMOS_CANPASS_TURF(canpassturf, my_tile, enemy_tile)
+				if(prob( 50 + 50 * (firelevel/SSzas.settings.fire_firelevel_multiplier) ) && canpassturf)
 					enemy_tile.create_fire(firelevel)
 
 			else
@@ -447,7 +451,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	return mx * (head_exposure + chest_exposure + groin_exposure + legs_exposure + arms_exposure)
 
 //turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
-/turf/proc/adjacent_fire_act(turf/source, exposed_temperature, exposed_volume)
+/turf/proc/adjacent_fire_act(turf/open/floor/source, datum/gas_mixture/adj_air, adjt_temp)
 	return
 
 //turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) ZASTURF
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index ecd4a9cf8d6..f57d8a69cd5 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -357,3 +357,10 @@
     var/turf/T = get_step(src, d)
     if (T && !turf_contains_dense_objects(T))
       return T
+
+/turf/proc/get_atmos_adjacent_turfs()
+	var/list/adjacent_turfs = list()
+	for(var/dir in GLOB.cardinals)
+		if(open_directions & dir)
+			adjacent_turfs += get_step(src, dir)
+	return length(adjacent_turfs) ? adjacent_turfs : null
diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm
index 27fa67895fa..298be57fbbd 100644
--- a/code/modules/atmospherics/environmental/LINDA_system.dm
+++ b/code/modules/atmospherics/environmental/LINDA_system.dm
@@ -82,6 +82,7 @@
  * alldir includes adjacent diagonal tiles that can share
  * air with both of the related adjacent cardinal tiles
 **/
+/*
 /turf/proc/get_atmos_adjacent_turfs(alldir = 0)
 	var/adjacent_turfs
 	if (atmos_adjacent_turfs)
@@ -113,7 +114,7 @@
 				break
 
 	return adjacent_turfs
-
+*/
 /atom/proc/air_update_turf(update = FALSE, remove = FALSE)
 	var/turf/local_turf = get_turf(loc)
 	if(!local_turf)
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index f8149762cf4..4e8c281129b 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -557,11 +557,13 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 
 		if((air_contents.temperature > 0) && (pressure_delta > 0))
 			var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta)
-			transfer_moles = min(transfer_moles, (ATMOS_DEFAULT_VOLUME_PUMP/air_contents.volume)*air_contents.total_moles) //flow rate limit
+			transfer_moles = min(transfer_moles, (release_pressure/air_contents.volume)*air_contents.total_moles) //flow rate limit
 
 			pump_gas_passive(air_contents, environment, transfer_moles)
 			//air_update_turf(FALSE, FALSE)
 
+	air_contents.react()
+
 	var/our_pressure = air_contents.return_pressure()
 	var/our_temperature = air_contents.return_temperature()
 

From b6670ba2858bbbcf71147e0a76bff479d79e300d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 19 Apr 2022 19:27:26 -0400
Subject: [PATCH 023/200] FIRE WOOORKSSSS

---
 code/game/turfs/open/floor/plating.dm | 1 +
 code/modules/atmospherics/ZAS/Fire.dm | 5 ++---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm
index 893436ced76..e2dcd57ef4c 100644
--- a/code/game/turfs/open/floor/plating.dm
+++ b/code/game/turfs/open/floor/plating.dm
@@ -19,6 +19,7 @@
 	clawfootstep = FOOTSTEP_HARD_CLAW
 	heavyfootstep = FOOTSTEP_GENERIC_HEAVY
 
+
 	var/attachment_holes = TRUE
 
 /turf/open/floor/plating/setup_broken_states()
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index c33d1bbcd29..a4dc7bdf399 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -183,9 +183,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 					continue
 
 				//Spread the fire.
-				var/canpassturf
-				ATMOS_CANPASS_TURF(canpassturf, my_tile, enemy_tile)
-				if(prob( 50 + 50 * (firelevel/SSzas.settings.fire_firelevel_multiplier) ) && canpassturf)
+				//Atmos Canpass probably needs to be checked here
+				if(prob(50 + 50 * (firelevel/SSzas.settings.fire_firelevel_multiplier)))
 					enemy_tile.create_fire(firelevel)
 
 			else

From 05a872f4a5f46495d8f8d1955c794e7407dd86c0 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 19 Apr 2022 19:47:10 -0400
Subject: [PATCH 024/200] Returns ZAS wait to 2 seconds (sadness)

---
 code/controllers/subsystem/zas.dm     | 2 +-
 code/modules/atmospherics/ZAS/Fire.dm | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 8c3b0af6f30..e6d82f1f552 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -67,7 +67,7 @@ SUBSYSTEM_DEF(zas)
 	init_order = INIT_ORDER_AIR
 	flags = SS_POST_FIRE_TIMING
 	runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
-	wait = 0.5 SECONDS
+	wait = 2 SECONDS
 
 	var/cached_cost = 0
 
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index a4dc7bdf399..399d70437d6 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -6,7 +6,7 @@ The more pressure, the more boom.
 If it gains pressure too slowly, it may leak or just rupture instead of exploding.
 */
 
-#define FIREDBG
+//#define FIREDBG
 
 /turf/var/obj/effect/hotspot/fire = null
 

From 96eb465d05e654fa120353f0a07c125bcab3630d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 19 Apr 2022 21:18:21 -0400
Subject: [PATCH 025/200] Updates SSzas and Fire

---
 code/controllers/subsystem/zas.dm              |  16 ++++++++--------
 code/modules/atmospherics/ZAS/Fire.dm          |   2 +-
 .../master_files/icons/effects/fire.dmi        | Bin 0 -> 323434 bytes
 3 files changed, 9 insertions(+), 9 deletions(-)
 create mode 100644 modular_pariah/master_files/icons/effects/fire.dmi

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index e6d82f1f552..8b892468dad 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -211,7 +211,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_MACHINES
 
-	if(current_process == SSZAS_MACHINES)
+	if(current_process == SSZAS_MACHINES || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -223,7 +223,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_TILES
 
-	if(current_process == SSZAS_TILES)
+	if(current_process == SSZAS_TILES || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -235,7 +235,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_DEFERED_TILES
 
-	if(current_process == SSZAS_DEFERED_TILES)
+	if(current_process == SSZAS_DEFERED_TILES || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -247,7 +247,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_EDGES
 
-	if(current_process == SSZAS_EDGES)
+	if(current_process == SSZAS_EDGES || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -259,7 +259,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_FIRES
 
-	if(current_process == SSZAS_FIRES)
+	if(current_process == SSZAS_FIRES || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -271,7 +271,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_HOTSPOTS
 
-	if(current_process == SSZAS_HOTSPOTS)
+	if(current_process == SSZAS_HOTSPOTS || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -283,7 +283,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_ZONES
 
-	if(current_process == SSZAS_ZONES)
+	if(current_process == SSZAS_ZONES || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -295,7 +295,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_ATOMS
 
-	if(current_process == SSZAS_ATOMS)
+	if(current_process == SSZAS_ATOMS || !resumed)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 399d70437d6..4c6f8ec0e69 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -119,7 +119,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /obj/effect/hotspot
 	anchored = TRUE
 	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-	icon = 'icons/effects/fire.dmi'
+	icon = 'modular_pariah/master_files/icons/effects/fire.dmi'
 	icon_state = "1"
 	layer = GASFIRE_LAYER
 	plane = ABOVE_GAME_PLANE
diff --git a/modular_pariah/master_files/icons/effects/fire.dmi b/modular_pariah/master_files/icons/effects/fire.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..90e3bb4125991d19ab8a3e249e386a1e378efbe1
GIT binary patch
literal 323434
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

literal 0
HcmV?d00001


From 7f5a10c8ca1e1ba708352dd76d686bf172f9f398 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 20 Apr 2022 00:36:03 -0400
Subject: [PATCH 026/200] Partial revert of MC changes

---
 code/controllers/subsystem/zas.dm | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 8b892468dad..e6d82f1f552 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -211,7 +211,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_MACHINES
 
-	if(current_process == SSZAS_MACHINES || !resumed)
+	if(current_process == SSZAS_MACHINES)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -223,7 +223,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_TILES
 
-	if(current_process == SSZAS_TILES || !resumed)
+	if(current_process == SSZAS_TILES)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -235,7 +235,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_DEFERED_TILES
 
-	if(current_process == SSZAS_DEFERED_TILES || !resumed)
+	if(current_process == SSZAS_DEFERED_TILES)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -247,7 +247,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_EDGES
 
-	if(current_process == SSZAS_EDGES || !resumed)
+	if(current_process == SSZAS_EDGES)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -259,7 +259,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_FIRES
 
-	if(current_process == SSZAS_FIRES || !resumed)
+	if(current_process == SSZAS_FIRES)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -271,7 +271,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_HOTSPOTS
 
-	if(current_process == SSZAS_HOTSPOTS || !resumed)
+	if(current_process == SSZAS_HOTSPOTS)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -283,7 +283,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_ZONES
 
-	if(current_process == SSZAS_ZONES || !resumed)
+	if(current_process == SSZAS_ZONES)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0
@@ -295,7 +295,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 		current_process = SSZAS_ATOMS
 
-	if(current_process == SSZAS_ATOMS || !resumed)
+	if(current_process == SSZAS_ATOMS)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
 			cached_cost = 0

From 56dc9c5b6b8251ac197ef65f3214627664ae513d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 20 Apr 2022 13:55:06 -0400
Subject: [PATCH 027/200] SSairmachines

---
 code/__DEFINES/subsystems.dm                  |  28 +-
 code/controllers/subsystem/airflow.dm         |  11 +
 code/controllers/subsystem/airmachines.dm     | 254 ++++++++++++++++++
 code/controllers/subsystem/zas.dm             | 222 +--------------
 code/datums/components/gas_leaker.dm          |   4 +-
 .../computer/atmos_computers/_air_sensor.dm   |   4 +-
 code/game/machinery/pipe/construction.dm      |   2 +-
 code/game/machinery/spaceheater.dm            |   6 +-
 code/game/objects/items/RPD.dm                |   2 +-
 code/game/objects/items/flamethrower.dm       |   2 -
 code/modules/admin/verbs/fix_air.dm           |   2 +-
 .../atmospherics/machinery/atmosmachinery.dm  |   8 +-
 .../components/binary_devices/circulator.dm   |   2 +-
 .../binary_devices/thermomachine.dm           |   2 +-
 .../machinery/components/components_base.dm   |   2 +-
 .../components/electrolyzer/electrolyzer.dm   |   2 +-
 .../atmospherics/machinery/components/tank.dm |   2 +-
 .../components/unary_devices/cryo.dm          |   2 +-
 .../atmospherics/machinery/datum_pipeline.dm  |  10 +-
 .../atmospherics/machinery/other/meter.dm     |   8 +-
 .../machinery/pipes/layermanifold.dm          |   2 +-
 .../atmospherics/machinery/pipes/pipes.dm     |   2 +-
 .../machinery/portable/canister.dm            |  10 +-
 .../portable/portable_atmospherics.dm         |  12 +-
 .../atmospherics/machinery/portable/pump.dm   |   4 +-
 .../machinery/portable/scrubber.dm            |   4 +-
 code/modules/mapping/map_template.dm          |   2 +-
 code/modules/power/generator.dm               |   4 +-
 .../mapGenerators/repair.dm                   |   2 +-
 .../research/ordnance/tank_compressor.dm      |   2 +-
 code/modules/shuttle/on_move.dm               |   2 +-
 tgstation.dme                                 |   1 +
 32 files changed, 335 insertions(+), 287 deletions(-)
 create mode 100644 code/controllers/subsystem/airmachines.dm

diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 3e488184df9..842eee0b639 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -142,6 +142,7 @@
 #define INIT_ORDER_ATOMS 30
 #define INIT_ORDER_LANGUAGE 25
 #define INIT_ORDER_MACHINES 20
+#define INIT_ORDER_AIRMACHINES 17
 #define INIT_ORDER_SKILLS 15
 #define INIT_ORDER_TIMER 1
 #define INIT_ORDER_DEFAULT 0
@@ -189,6 +190,7 @@
 #define FIRE_PRIORITY_OBJ 40
 #define FIRE_PRIORITY_ACID 40
 #define FIRE_PRIOTITY_BURNING 40
+#define FIRE_PRIORITY_AIRMACHINES 45
 #define FIRE_PRIORITY_DEFAULT 50
 #define FIRE_PRIORITY_PARALLAX 65
 #define FIRE_PRIORITY_INSTRUMENTS 80
@@ -273,23 +275,21 @@
 #define SSAIR_SUPERCONDUCTIVITY 7
 #define SSAIR_PROCESS_ATOMS 8
 
-//ZAS subsystem subtasks
-#define SSZAS_PIPENETS 1
-#define SSZAS_MACHINES 2
-#define SSZAS_TILES 3
-#define SSZAS_DEFERED_TILES 4
-#define SSZAS_EDGES 5
-#define SSZAS_FIRES 6
-#define SSZAS_HOTSPOTS 7
-#define SSZAS_ZONES 8
-#define SSZAS_ATOMS 9
+#define SSZAS_TILES 1
+#define SSZAS_DEFERED_TILES 2
+#define SSZAS_EDGES 3
+#define SSZAS_FIRES 4
+#define SSZAS_HOTSPOTS 5
+#define SSZAS_ZONES 6
+#define SSZAS_ATOMS 7
 
-#define SSZAS_REBUILD_PIPELINE 1
-#define SSZAS_REBUILD_QUEUE 2
+//Air Machine subsystem subtasks
+#define SSAIRMACH_PIPENETS 1
+#define SSAIRMACH_MACHINES 2
 
 //Pipeline rebuild helper defines, these suck but it'll do for now //Fools you actually merged it
-#define SSAIR_REBUILD_PIPELINE 1
-#define SSAIR_REBUILD_QUEUE 2
+#define SSAIRMACH_REBUILD_PIPELINE 1
+#define SSAIRMACH_REBUILD_QUEUE 2
 
 // Explosion Subsystem subtasks
 #define SSEXPLOSIONS_MOVABLES 1
diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index 3c0ddf21127..dbe2addfc80 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -22,6 +22,10 @@ SUBSYSTEM_DEF(airflow)
 /datum/controller/subsystem/airflow/Recover()
 	current.Cut()
 
+/datum/controller/subsystem/airflow/stat_entry(msg)
+	msg += "P: [length(processing)] "
+	msg += "C: [length(current)]"
+	return ..()
 
 /datum/controller/subsystem/airflow/fire(resumed, no_mc_tick)
 	if (!resumed)
@@ -88,7 +92,14 @@ SUBSYSTEM_DEF(airflow)
 				current.Cut(i)
 				return
 			continue
+		var/olddir = target.dir
+		if(isobj(target))
+			target.SpinAnimation(3, 1, rand(50), parallel = FALSE)
+		//target.set_dir_on_move = FALSE
 		step_towards(target, target.airflow_dest)
+		//target.set_dir_on_move = TRUE
+		target.dir = olddir
+
 		if (ismob(target))
 			var/mob/M = target
 			M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE, SSzas.settings.airflow_mob_slowdown)
diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
new file mode 100644
index 00000000000..6a3fd0c7de0
--- /dev/null
+++ b/code/controllers/subsystem/airmachines.dm
@@ -0,0 +1,254 @@
+SUBSYSTEM_DEF(airmachines)
+	name = "Atmos Machines"
+	priority = FIRE_PRIORITY_AIRMACHINES
+	init_order = INIT_ORDER_AIRMACHINES
+	flags = SS_KEEP_TIMING
+	runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
+
+	var/cached_cost
+
+	var/list/pipe_init_dirs_cache = list()
+
+	var/list/networks = list()
+	var/list/rebuild_queue = list()
+	var/list/expansion_queue = list()
+	var/list/atmos_machinery = list()
+
+	var/list/current_run = list()
+	var/list/current_process = SSAIRMACH_PIPENETS
+
+	var/cost_rebuilds
+	var/cost_pipenets
+	var/cost_atmos_machinery
+
+/datum/controller/subsystem/airmachines/Initialize(timeofday)
+	setup_atmos_machinery()
+	setup_pipenets()
+	return ..()
+
+/datum/controller/subsystem/airmachines/fire(resumed = FALSE)
+	var/timer = TICK_USAGE_REAL
+	// Every time we fire, we want to make sure pipenets are rebuilt. The game state could have changed between each fire() proc call
+	// and anything missing a pipenet can lead to unintended behaviour at worse and various runtimes at best.
+	if(length(rebuild_queue) || length(expansion_queue))
+		timer = TICK_USAGE_REAL
+		process_rebuilds()
+		//This does mean that the apperent rebuild costs fluctuate very quickly, this is just the cost of having them always process, no matter what
+		if(state != SS_RUNNING)
+			return
+
+	if(current_process == SSAIRMACH_PIPENETS || !resumed)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_pipenets(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+		current_process = SSAIRMACH_MACHINES
+
+	if(current_process == SSAIRMACH_MACHINES)
+		timer = TICK_USAGE_REAL
+		if(!resumed)
+			cached_cost = 0
+		process_atmos_machinery(resumed)
+		cached_cost += TICK_USAGE_REAL - timer
+		if(state != SS_RUNNING)
+			return
+		cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
+		resumed = FALSE
+
+	current_process = SSAIRMACH_PIPENETS
+
+/datum/controller/subsystem/airmachines/proc/process_rebuilds()
+	//Yes this does mean rebuilding pipenets can freeze up the subsystem forever, but if we're in that situation something else is very wrong
+	var/list/currentrun = rebuild_queue
+	while(currentrun.len || length(expansion_queue))
+		while(currentrun.len && !length(expansion_queue)) //If we found anything, process that first
+			var/obj/machinery/atmospherics/remake = currentrun[currentrun.len]
+			currentrun.len--
+			if (!remake)
+				continue
+			remake.rebuild_pipes()
+			if (MC_TICK_CHECK)
+				return
+
+		var/list/queue = expansion_queue
+		while(queue.len)
+			var/list/pack = queue[queue.len]
+			//We operate directly with the pipeline like this because we can trust any rebuilds to remake it properly
+			var/datum/pipeline/linepipe = pack[SSAIRMACH_REBUILD_PIPELINE]
+			var/list/border = pack[SSAIRMACH_REBUILD_QUEUE]
+			expand_pipeline(linepipe, border)
+			if(state != SS_RUNNING) //expand_pipeline can fail a tick check, we shouldn't let things get too fucky here
+				return
+
+			linepipe.building = FALSE
+			queue.len--
+			if (MC_TICK_CHECK)
+				return
+
+/datum/controller/subsystem/airmachines/proc/process_pipenets(resumed = FALSE)
+	if (!resumed)
+		src.current_run = networks.Copy()
+	//cache for sanic speed (lists are references anyways)
+	var/list/currentrun = src.current_run
+	while(currentrun.len)
+		var/datum/thing = current_run[current_run.len]
+		current_run.len--
+		if(thing)
+			thing.process()
+		else
+			networks.Remove(thing)
+		if(MC_TICK_CHECK)
+			return
+
+/datum/controller/subsystem/airmachines/proc/process_atmos_machinery(resumed = FALSE)
+	if (!resumed)
+		src.current_run = atmos_machinery.Copy()
+	//cache for sanic speed (lists are references anyways)
+	var/list/current_run = src.current_run
+	while(current_run.len)
+		var/obj/machinery/M = current_run[current_run.len]
+		current_run.len--
+		if(!M)
+			atmos_machinery -= M
+		if(M.process_atmos() == PROCESS_KILL)
+			stop_processing_machine(M)
+		if(MC_TICK_CHECK)
+			return
+
+///Rebuilds a pipeline by expanding outwards, while yielding when sane
+/datum/controller/subsystem/airmachines/proc/expand_pipeline(datum/pipeline/net, list/border)
+	while(border.len)
+		var/obj/machinery/atmospherics/borderline = border[border.len]
+		border.len--
+
+		var/list/result = borderline.pipeline_expansion(net)
+		if(!length(result))
+			continue
+		for(var/obj/machinery/atmospherics/considered_device in result)
+			if(!istype(considered_device, /obj/machinery/atmospherics/pipe))
+				considered_device.set_pipenet(net, borderline)
+				net.add_machinery_member(considered_device)
+				continue
+			var/obj/machinery/atmospherics/pipe/item = considered_device
+			if(net.members.Find(item))
+				continue
+			if(item.parent)
+				var/static/pipenetwarnings = 10
+				if(pipenetwarnings > 0)
+					log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) around [AREACOORD(item)].")
+					pipenetwarnings--
+				if(pipenetwarnings == 0)
+					log_mapping("build_pipeline(): further messages about pipenets will be suppressed")
+
+			net.members += item
+			border += item
+
+			net.air.volume += item.volume
+			item.parent = net
+
+			if(item.air_temporary)
+				net.air.merge(item.air_temporary)
+				item.air_temporary = null
+
+		if (MC_TICK_CHECK)
+			return
+
+/datum/controller/subsystem/airmachines/proc/add_to_rebuild_queue(obj/machinery/atmospherics/atmos_machine)
+	if(istype(atmos_machine, /obj/machinery/atmospherics) && !atmos_machine.rebuilding)
+		rebuild_queue += atmos_machine
+		atmos_machine.rebuilding = TRUE
+
+/datum/controller/subsystem/airmachines/proc/add_to_expansion(datum/pipeline/line, starting_point)
+	var/list/new_packet = new(SSAIRMACH_REBUILD_QUEUE)
+	new_packet[SSAIRMACH_REBUILD_PIPELINE] = line
+	new_packet[SSAIRMACH_REBUILD_QUEUE] = list(starting_point)
+	expansion_queue += list(new_packet)
+
+/datum/controller/subsystem/airmachines/proc/remove_from_expansion(datum/pipeline/line)
+	for(var/list/packet in expansion_queue)
+		if(packet[SSAIRMACH_REBUILD_PIPELINE] == line)
+			expansion_queue -= packet
+			return
+
+/datum/controller/subsystem/airmachines/proc/setup_template_machinery(list/atmos_machines)
+	var/obj/machinery/atmospherics/AM
+	for(var/A in 1 to atmos_machines.len)
+		AM = atmos_machines[A]
+		AM.atmos_init()
+		CHECK_TICK
+
+	for(var/A in 1 to atmos_machines.len)
+		AM = atmos_machines[A]
+		var/list/targets = AM.get_rebuild_targets()
+		for(var/datum/pipeline/build_off as anything in targets)
+			build_off.build_pipeline_blocking(AM)
+		CHECK_TICK
+
+/datum/controller/subsystem/airmachines/proc/get_init_dirs(type, dir, init_dir)
+
+	if(!pipe_init_dirs_cache[type])
+		pipe_init_dirs_cache[type] = list()
+
+	if(!pipe_init_dirs_cache[type]["[init_dir]"])
+		pipe_init_dirs_cache[type]["[init_dir]"] = list()
+
+	if(!pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"])
+		var/obj/machinery/atmospherics/temp = new type(null, FALSE, dir, init_dir)
+		pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"] = temp.get_init_directions()
+		qdel(temp)
+
+	return pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"]
+
+/**
+ * Adds a given machine to the processing system for SSAIR_ATMOSMACHINERY processing.
+ *
+ * Arguments:
+ * * machine - The machine to start processing. Can be any /obj/machinery.
+ */
+/datum/controller/subsystem/airmachines/proc/start_processing_machine(obj/machinery/machine)
+	if(machine.atmos_processing)
+		return
+	if(QDELETED(machine))
+		stack_trace("We tried to add a garbage collecting machine to SSzas. Don't")
+		return
+	machine.atmos_processing = TRUE
+	atmos_machinery += machine
+
+/**
+ * Removes a given machine to the processing system for SSZAS_MACHINES processing.
+ *
+ * Arguments:
+ * * machine - The machine to stop processing.
+ */
+/datum/controller/subsystem/airmachines/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
+	// the currentrun list, which is a cache of atmos_machinery. Remove it from that list
+	// as well to prevent processing qdeleted objects in the cache.
+	if(current_process == SSAIRMACH_MACHINES)
+		current_run -= machine
+
+/datum/controller/subsystem/airmachines/proc/setup_atmos_machinery()
+	for (var/obj/machinery/atmospherics/AM in atmos_machinery)
+		AM.atmos_init()
+		CHECK_TICK
+
+//this can't be done with setup_atmos_machinery() because
+// all atmos machinery has to initalize before the first
+// pipenet can be built.
+/datum/controller/subsystem/airmachines/proc/setup_pipenets()
+	for (var/obj/machinery/atmospherics/AM in atmos_machinery)
+		var/list/targets = AM.get_rebuild_targets()
+		for(var/datum/pipeline/build_off as anything in targets)
+			build_off.build_pipeline_blocking(AM)
+		CHECK_TICK
+
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index e6d82f1f552..b17fcca9c39 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -80,14 +80,6 @@ SUBSYSTEM_DEF(zas)
 	var/list/zones = list()
 	var/list/edges = list()
 
-	//Pipenets
-	var/list/networks = list()
-	var/list/rebuild_queue = list()
-	var/list/expansion_queue = list()
-	var/list/pipe_init_dirs_cache = list()
-
-	//Atmos Machines
-	var/list/atmos_machinery = list()
 	//Atoms to be processed
 	var/list/atom_process = list()
 
@@ -106,7 +98,7 @@ SUBSYSTEM_DEF(zas)
 
 	//Currently processing
 	var/list/currentrun = list()
-	var/current_process = SSZAS_PIPENETS
+	var/current_process = SSZAS_TILES
 	var/active_zones = 0
 	var/next_id = 1
 
@@ -183,46 +175,13 @@ SUBSYSTEM_DEF(zas)
 
 	..(timeofday)
 
-/datum/controller/subsystem/zas/fire(resumed = FALSE)
+/datum/controller/subsystem/zas/fire(resumed = FALSE, mc_no_tick)
 	var/timer = TICK_USAGE_REAL
 	if (!resumed)
 		processing_edges = active_edges.Copy()
 		processing_fires = active_fire_zones.Copy()
 		processing_hotspots = active_hotspots.Copy()
 
-		// Every time we fire, we want to make sure pipenets are rebuilt. The game state could have changed between each fire() proc call
-	// and anything missing a pipenet can lead to unintended behaviour at worse and various runtimes at best.
-	if(length(rebuild_queue) || length(expansion_queue))
-		timer = TICK_USAGE_REAL
-		process_rebuilds()
-		//This does mean that the apperent rebuild costs fluctuate very quickly, this is just the cost of having them always process, no matter what
-		if(state != SS_RUNNING)
-			return
-
-	if(current_process == SSZAS_PIPENETS || !resumed)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_pipenets(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_MACHINES
-
-	if(current_process == SSZAS_MACHINES)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_atmos_machinery(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_TILES
-
 	if(current_process == SSZAS_TILES)
 		timer = TICK_USAGE_REAL
 		if(!resumed)
@@ -307,103 +266,7 @@ SUBSYSTEM_DEF(zas)
 		resumed = FALSE
 
 
-	current_process = SSZAS_PIPENETS
-
-/datum/controller/subsystem/zas/proc/process_rebuilds()
-	//Yes this does mean rebuilding pipenets can freeze up the subsystem forever, but if we're in that situation something else is very wrong
-	var/list/currentrun = rebuild_queue
-	while(currentrun.len || length(expansion_queue))
-		while(currentrun.len && !length(expansion_queue)) //If we found anything, process that first
-			var/obj/machinery/atmospherics/remake = currentrun[currentrun.len]
-			currentrun.len--
-			if (!remake)
-				continue
-			remake.rebuild_pipes()
-			if (MC_TICK_CHECK)
-				return
-
-		var/list/queue = expansion_queue
-		while(queue.len)
-			var/list/pack = queue[queue.len]
-			//We operate directly with the pipeline like this because we can trust any rebuilds to remake it properly
-			var/datum/pipeline/linepipe = pack[SSAIR_REBUILD_PIPELINE]
-			var/list/border = pack[SSAIR_REBUILD_QUEUE]
-			expand_pipeline(linepipe, border)
-			if(state != SS_RUNNING) //expand_pipeline can fail a tick check, we shouldn't let things get too fucky here
-				return
-
-			linepipe.building = FALSE
-			queue.len--
-			if (MC_TICK_CHECK)
-				return
-
-///Rebuilds a pipeline by expanding outwards, while yielding when sane
-/datum/controller/subsystem/zas/proc/expand_pipeline(datum/pipeline/net, list/border)
-	while(border.len)
-		var/obj/machinery/atmospherics/borderline = border[border.len]
-		border.len--
-
-		var/list/result = borderline.pipeline_expansion(net)
-		if(!length(result))
-			continue
-		for(var/obj/machinery/atmospherics/considered_device in result)
-			if(!istype(considered_device, /obj/machinery/atmospherics/pipe))
-				considered_device.set_pipenet(net, borderline)
-				net.add_machinery_member(considered_device)
-				continue
-			var/obj/machinery/atmospherics/pipe/item = considered_device
-			if(net.members.Find(item))
-				continue
-			if(item.parent)
-				var/static/pipenetwarnings = 10
-				if(pipenetwarnings > 0)
-					log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) around [AREACOORD(item)].")
-					pipenetwarnings--
-				if(pipenetwarnings == 0)
-					log_mapping("build_pipeline(): further messages about pipenets will be suppressed")
-
-			net.members += item
-			border += item
-
-			net.air.volume += item.volume
-			item.parent = net
-
-			if(item.air_temporary)
-				net.air.merge(item.air_temporary)
-				item.air_temporary = null
-
-		if (MC_TICK_CHECK)
-			return
-
-/datum/controller/subsystem/zas/proc/process_pipenets(resumed = FALSE)
-	if (!resumed)
-		src.currentrun = networks.Copy()
-	//cache for sanic speed (lists are references anyways)
-	var/list/currentrun = src.currentrun
-	while(currentrun.len)
-		var/datum/thing = currentrun[currentrun.len]
-		currentrun.len--
-		if(thing)
-			thing.process()
-		else
-			networks.Remove(thing)
-		if(MC_TICK_CHECK)
-			return
-
-/datum/controller/subsystem/zas/proc/process_atmos_machinery(resumed = FALSE)
-	if (!resumed)
-		src.currentrun = atmos_machinery.Copy()
-	//cache for sanic speed (lists are references anyways)
-	var/list/currentrun = src.currentrun
-	while(currentrun.len)
-		var/obj/machinery/M = currentrun[currentrun.len]
-		currentrun.len--
-		if(!M)
-			atmos_machinery -= M
-		if(M.process_atmos() == PROCESS_KILL)
-			stop_processing_machine(M)
-		if(MC_TICK_CHECK)
-			return
+	current_process = SSZAS_TILES
 
 /datum/controller/subsystem/zas/proc/process_tiles(resumed = FALSE)
 	if(!resumed)
@@ -541,56 +404,6 @@ SUBSYSTEM_DEF(zas)
 			if(MC_TICK_CHECK)
 				return
 
-/**
- * Adds a given machine to the processing system for SSAIR_ATMOSMACHINERY processing.
- *
- * Arguments:
- * * machine - The machine to start processing. Can be any /obj/machinery.
- */
-/datum/controller/subsystem/zas/proc/start_processing_machine(obj/machinery/machine)
-	if(machine.atmos_processing)
-		return
-	if(QDELETED(machine))
-		stack_trace("We tried to add a garbage collecting machine to SSzas. Don't")
-		return
-	machine.atmos_processing = TRUE
-	atmos_machinery += machine
-
-/**
- * Removes a given machine to the processing system for SSZAS_MACHINES processing.
- *
- * Arguments:
- * * machine - The machine to stop processing.
- */
-/datum/controller/subsystem/zas/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
-	// the currentrun list, which is a cache of atmos_machinery. Remove it from that list
-	// as well to prevent processing qdeleted objects in the cache.
-	if(current_process == SSZAS_MACHINES)
-		currentrun -= machine
-
-/datum/controller/subsystem/zas/proc/add_to_rebuild_queue(obj/machinery/atmospherics/atmos_machine)
-	if(istype(atmos_machine, /obj/machinery/atmospherics) && !atmos_machine.rebuilding)
-		rebuild_queue += atmos_machine
-		atmos_machine.rebuilding = TRUE
-
-/datum/controller/subsystem/zas/proc/add_to_expansion(datum/pipeline/line, starting_point)
-	var/list/new_packet = new(SSAIR_REBUILD_QUEUE)
-	new_packet[SSZAS_REBUILD_PIPELINE] = line
-	new_packet[SSZAS_REBUILD_QUEUE] = list(starting_point)
-	expansion_queue += list(new_packet)
-
-/datum/controller/subsystem/zas/proc/remove_from_expansion(datum/pipeline/line)
-	for(var/list/packet in expansion_queue)
-		if(packet[SSZAS_REBUILD_PIPELINE] == line)
-			expansion_queue -= packet
-			return
-
 /datum/controller/subsystem/zas/proc/add_zone(zone/z)
 	zones += z
 	z.name = "Zone [next_id++]"
@@ -755,32 +568,3 @@ SUBSYSTEM_DEF(zas)
 		active_edges -= E
 	if(processing_edges)
 		processing_edges -= E
-
-/datum/controller/subsystem/zas/proc/get_init_dirs(type, dir, init_dir)
-
-	if(!pipe_init_dirs_cache[type])
-		pipe_init_dirs_cache[type] = list()
-
-	if(!pipe_init_dirs_cache[type]["[init_dir]"])
-		pipe_init_dirs_cache[type]["[init_dir]"] = list()
-
-	if(!pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"])
-		var/obj/machinery/atmospherics/temp = new type(null, FALSE, dir, init_dir)
-		pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"] = temp.get_init_directions()
-		qdel(temp)
-
-	return pipe_init_dirs_cache[type]["[init_dir]"]["[dir]"]
-
-/datum/controller/subsystem/zas/proc/setup_template_machinery(list/atmos_machines)
-	var/obj/machinery/atmospherics/AM
-	for(var/A in 1 to atmos_machines.len)
-		AM = atmos_machines[A]
-		AM.atmos_init()
-		CHECK_TICK
-
-	for(var/A in 1 to atmos_machines.len)
-		AM = atmos_machines[A]
-		var/list/targets = AM.get_rebuild_targets()
-		for(var/datum/pipeline/build_off as anything in targets)
-			build_off.build_pipeline_blocking(AM)
-		CHECK_TICK
diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm
index eaf24de0001..29e676c3bcb 100644
--- a/code/datums/components/gas_leaker.dm
+++ b/code/datums/components/gas_leaker.dm
@@ -31,7 +31,7 @@
 	src.leak_rate = leak_rate
 
 /datum/component/gas_leaker/Destroy(force, silent)
-	SSzas.stop_processing_machine(src)
+	SSairmachines.stop_processing_machine(src)
 	return ..()
 
 /datum/component/gas_leaker/RegisterWithParent()
@@ -56,7 +56,7 @@
 	SIGNAL_HANDLER
 	// Hello fellow atmospherics machines, I too am definitely an atmos machine like you!
 	// This component needs to tick at the same rate as the atmos system
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 /datum/component/gas_leaker/proc/process_obj(obj/master, list/airs=list())
 	airs += master.return_air()
diff --git a/code/game/machinery/computer/atmos_computers/_air_sensor.dm b/code/game/machinery/computer/atmos_computers/_air_sensor.dm
index 7b4a83bad3c..1322551c3c7 100644
--- a/code/game/machinery/computer/atmos_computers/_air_sensor.dm
+++ b/code/game/machinery/computer/atmos_computers/_air_sensor.dm
@@ -16,13 +16,13 @@
 
 /obj/machinery/air_sensor/Initialize(mapload)
 	id_tag = chamber_id + "_sensor"
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
 	return ..()
 
 /obj/machinery/air_sensor/Destroy()
 	INVOKE_ASYNC(src, .proc/broadcast_destruction, src.frequency)
-	SSzas.stop_processing_machine(src)
+	SSairmachines.stop_processing_machine(src)
 	SSradio.remove_object(src, frequency)
 	return ..()
 
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 99d1e3195f0..02dadf88db6 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -171,7 +171,7 @@ Buildable meters
 	// See if we would conflict with any of the potentially interacting machines
 	for(var/obj/machinery/atmospherics/machine as anything in potentially_conflicting_machines)
 		// if the pipes have any directions in common, we can't place it that way.
-		var/our_init_dirs = SSzas.get_init_dirs(pipe_type, fixed_dir(), p_init_dir)
+		var/our_init_dirs = SSairmachines.get_init_dirs(pipe_type, fixed_dir(), p_init_dir)
 		if(machine.get_init_directions() & our_init_dirs)
 			// We have a conflict!
 			if (length(potentially_conflicting_machines) != 1 || !try_smart_reconfiguration(machine, our_init_dirs, user))
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 3134a41d209..f94657e7691 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -48,10 +48,10 @@
 	if(ispath(cell))
 		cell = new cell(src)
 	update_appearance()
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/space_heater/Destroy()
-	SSzas.stop_processing_machine(src)
+	SSairmachines.stop_processing_machine(src)
 	return..()
 
 /obj/machinery/space_heater/on_deconstruction()
@@ -265,7 +265,7 @@
 	usr.visible_message(span_notice("[usr] switches [on ? "on" : "off"] \the [src]."), span_notice("You switch [on ? "on" : "off"] \the [src]."))
 	update_appearance()
 	if (on)
-		SSzas.start_processing_machine(src)
+		SSairmachines.start_processing_machine(src)
 
 ///For use with heating reagents in a ghetto way
 /obj/machinery/space_heater/improvised_chem_heater
diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm
index cbc9d797ce6..a68703cfdfb 100644
--- a/code/game/objects/items/RPD.dm
+++ b/code/game/objects/items/RPD.dm
@@ -510,7 +510,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
 				for (var/obj/machinery/atmospherics/O in S.nodes)
 					O.atmos_init()
 					O.add_member(src)
-				SSzas.add_to_rebuild_queue(S)
+				SSairmachines.add_to_rebuild_queue(S)
 			// Finally, update our internal state - update_pipe_icon also updates dir and connections
 			S.update_pipe_icon()
 			user.visible_message(span_notice("[user] reprograms the \the [S]."),span_notice("You reprogram \the [S]."))
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index d1cb070521e..260077375fc 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -224,9 +224,7 @@
 	air_transfer.remove_by_flag(XGM_GAS_FUEL, 0)
 	target.assume_air(air_transfer)
 	//Burn it based on transfered gas
-	//target.hotspot_expose(part4.air_contents.temperature*2,300)
 	target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE
-	//location.hotspot_expose(1000,500,1)
 
 /obj/item/flamethrower/Initialize(mapload)
 	. = ..()
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index 78edeb5893a..01f9f63ede3 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -22,7 +22,7 @@
 	to_chat(usr, "\[1/5\] - Supermatter depowered")
 
 	// Remove all gases from all pipenets
-	for(var/datum/pipeline/PN as anything in SSzas.networks)
+	for(var/datum/pipeline/PN as anything in SSairmachines.networks)
 		for(var/datum/gas_mixture/G in list(PN.air) & PN.other_airs)
 			G.gas = list()
 			G.update_values()
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index a6de2e9fef0..d95707ac121 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -83,7 +83,7 @@
 		armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 100, ACID = 70)
 	..()
 	if(process)
-		SSzas.start_processing_machine(src)
+		SSairmachines.start_processing_machine(src)
 	set_init_directions(init_dir)
 
 /obj/machinery/atmospherics/Initialize(mapload)
@@ -95,8 +95,8 @@
 	for(var/i in 1 to device_type)
 		nullify_node(i)
 
-	SSzas.stop_processing_machine(src)
-	SSzas.rebuild_queue -= src
+	SSairmachines.stop_processing_machine(src)
+	SSairmachines.rebuild_queue -= src
 
 	if(pipe_vision_img)
 		qdel(pipe_vision_img)
@@ -470,7 +470,7 @@
 	for(var/obj/machinery/atmospherics/A in nodes)
 		A.atmos_init()
 		A.add_member(src)
-	SSzas.add_to_rebuild_queue(src)
+	SSairmachines.add_to_rebuild_queue(src)
 
 /obj/machinery/atmospherics/update_name()
 	if(!override_naming)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
index 01c3dc5e8e7..d215c8d18f7 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
@@ -122,7 +122,7 @@
 		if(node2)
 			node2.atmos_init()
 			node2.add_member(src)
-		SSzas.add_to_rebuild_queue(src)
+		SSairmachines.add_to_rebuild_queue(src)
 
 	return TRUE
 
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
index 62e4e709a99..8421a2f05e6 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/thermomachine.dm
@@ -333,7 +333,7 @@
 	if(node2)
 		node2.atmos_init()
 		node2.add_member(src)
-	SSzas.add_to_rebuild_queue(src)
+	SSairmachines.add_to_rebuild_queue(src)
 
 /obj/machinery/atmospherics/components/binary/thermomachine/proc/disconnect_pipes()
 	var/obj/machinery/atmospherics/node1 = nodes[1]
diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm
index e7fb23f7e9a..eb751daa617 100644
--- a/code/modules/atmospherics/machinery/components/components_base.dm
+++ b/code/modules/atmospherics/machinery/components/components_base.dm
@@ -206,7 +206,7 @@
 		var/datum/pipeline/parent = parents[i]
 		if(!parent)
 			WARNING("Component is missing a pipenet! Rebuilding...")
-			SSzas.add_to_rebuild_queue(src)
+			SSairmachines.add_to_rebuild_queue(src)
 		else
 			parent.update = TRUE
 
diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
index 02ec0bb294c..87cd056f416 100644
--- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
+++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
@@ -32,7 +32,7 @@
 	. = ..()
 	if(ispath(cell))
 		cell = new cell(src)
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	update_appearance()
 
 /obj/machinery/electrolyzer/Destroy()
diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index 4d7981e0086..b74318e3fd3 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -190,7 +190,7 @@
 			continue
 		node.atmos_init()
 		node.add_member(src)
-	SSzas.add_to_rebuild_queue(src)
+	SSairmachines.add_to_rebuild_queue(src)
 
 	update_parents()
 
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 1abfa24475c..0160725011a 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -554,7 +554,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 		if(node)
 			node.atmos_init()
 			node.add_member(src)
-		SSzas.add_to_rebuild_queue(src)
+		SSairmachines.add_to_rebuild_queue(src)
 
 #undef MAX_TEMPERATURE
 #undef CRYO_MULTIPLY_FACTOR
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index ff2433045ec..2960e4fc5c4 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -14,19 +14,19 @@
 	other_airs = list()
 	members = list()
 	other_atmos_machines = list()
-	SSzas.networks += src
+	SSairmachines.networks += src
 
 /datum/pipeline/Destroy()
-	SSzas.networks -= src
+	SSairmachines.networks -= src
 	if(building)
-		SSzas.remove_from_expansion(src)
+		SSairmachines.remove_from_expansion(src)
 	if(air?.volume)
 		temporarily_store_air()
 	for(var/obj/machinery/atmospherics/pipe/considered_pipe in members)
 		considered_pipe.parent = null
 		if(QDELETED(considered_pipe))
 			continue
-		SSzas.add_to_rebuild_queue(considered_pipe)
+		SSairmachines.add_to_rebuild_queue(considered_pipe)
 	for(var/obj/machinery/atmospherics/components/considered_component in other_atmos_machines)
 		considered_component.nullify_pipenet(src)
 	return ..()
@@ -56,7 +56,7 @@
 		air = new
 
 	air.volume = volume
-	SSzas.add_to_expansion(src, base)
+	SSairmachines.add_to_expansion(src, base)
 
 ///Has the same effect as build_pipeline(), but this doesn't queue its work, so overrun abounds. It's useful for the pregame
 /datum/pipeline/proc/build_pipeline_blocking(obj/machinery/atmospherics/base)
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index b40d85073c1..0f1fca9be7a 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -18,7 +18,7 @@
 	var/target_layer = PIPING_LAYER_DEFAULT
 
 /obj/machinery/meter/Destroy()
-	SSzas.stop_processing_machine(src)
+	SSairmachines.stop_processing_machine(src)
 	target = null
 	return ..()
 
@@ -26,7 +26,7 @@
 	if(!isnull(new_piping_layer))
 		target_layer = new_piping_layer
 
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 	if(!target)
 		reattach_to_layer()
@@ -50,10 +50,10 @@
 
 /obj/machinery/meter/on_set_is_operational(old_value)
 	if(is_operational)
-		SSzas.start_processing_machine(src)//dont set icon_state here because it will be reset on next process() if it ever happens
+		SSairmachines.start_processing_machine(src)//dont set icon_state here because it will be reset on next process() if it ever happens
 	else
 		icon_state = "meter"
-		SSzas.stop_processing_machine(src)
+		SSairmachines.stop_processing_machine(src)
 
 /obj/machinery/meter/process_atmos()
 	var/datum/gas_mixture/pipe_air = target.return_air()
diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
index 74cac69ed1b..c0e38bb42b1 100644
--- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
@@ -34,7 +34,7 @@
 /obj/machinery/atmospherics/pipe/layer_manifold/proc/nullify_all_nodes()
 	for(var/obj/machinery/atmospherics/node in nodes)
 		node.disconnect(src)
-		SSzas.add_to_rebuild_queue(node)
+		SSairmachines.add_to_rebuild_queue(node)
 	front_nodes = null
 	back_nodes = null
 	nodes = list()
diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm
index f0fe7850ab3..ee01bc2f2d1 100644
--- a/code/modules/atmospherics/machinery/pipes/pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/pipes.dm
@@ -33,7 +33,7 @@
 	var/obj/machinery/atmospherics/old_node = nodes[i]
 	. = ..()
 	if(old_node)
-		SSzas.add_to_rebuild_queue(old_node)
+		SSairmachines.add_to_rebuild_queue(old_node)
 
 /obj/machinery/atmospherics/pipe/destroy_network()
 	QDEL_NULL(parent)
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 4e8c281129b..97f5962d66b 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -291,7 +291,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 /obj/machinery/portable_atmospherics/canister/anesthetic_mix/create_gas()
 	air_contents.adjust_gas(GAS_OXYGEN, (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	air_contents.adjust_gas(GAS_N2O, (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 /**
  * Getter for the amount of time left in the timer of prototype canisters
@@ -367,12 +367,12 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	if(starter_temp)
 		air_contents.temperature = starter_temp
 	air_contents.adjust_gas(gas_type,(maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/air/create_gas()
 	air_contents.adjust_gas(GAS_OXYGEN, (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	air_contents.adjust_gas(GAS_NITROGEN, (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/update_icon_state()
 	if(machine_stat & BROKEN)
@@ -496,7 +496,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	. = ..()
 	if(!. || QDELETED(src))
 		return
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/atom_break(damage_flag)
 	. = ..()
@@ -678,7 +678,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 			var/n = 0
 			valve_open = !valve_open
 			if(valve_open)
-				SSzas.start_processing_machine(src)
+				SSairmachines.start_processing_machine(src)
 				logmsg = "Valve was <b>opened</b> by [key_name(usr)], starting a transfer into \the [holding || "air"].<br>"
 				if(!holding)
 					var/list/gaseslog = list() //list for logging all gases in canister
diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
index dcc57b43165..8a19c6e46fe 100644
--- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
+++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
@@ -22,12 +22,12 @@
 	air_contents = new
 	air_contents.volume = volume
 	air_contents.temperature = T20C
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/Destroy()
 	disconnect()
 	air_contents = null
-	SSzas.stop_processing_machine(src)
+	SSairmachines.stop_processing_machine(src)
 
 	return ..()
 
@@ -50,7 +50,7 @@
 	excited = FALSE
 
 /obj/machinery/portable_atmospherics/return_air()
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	return air_contents
 
 /obj/machinery/portable_atmospherics/return_analyzable_air()
@@ -80,7 +80,7 @@
 	pixel_x = new_port.pixel_x
 	pixel_y = new_port.pixel_y
 
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	update_appearance()
 	return TRUE
 
@@ -101,7 +101,7 @@
 	pixel_x = 0
 	pixel_y = 0
 
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	update_appearance()
 	return TRUE
 
@@ -139,7 +139,7 @@
 		holding = new_tank
 		RegisterSignal(holding, COMSIG_PARENT_QDELETING, .proc/unregister_holding)
 
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	update_appearance()
 	return TRUE
 
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 72945fca32a..6288a60b7e6 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -96,7 +96,7 @@
 	if(prob(50 / severity))
 		on = !on
 		if(on)
-			SSzas.start_processing_machine(src)
+			SSairmachines.start_processing_machine(src)
 	if(prob(100 / severity))
 		direction = PUMP_OUT
 	target_pressure = rand(0, 100 * ONE_ATMOSPHERE)
@@ -147,7 +147,7 @@
 		if("power")
 			on = !on
 			if(on)
-				SSzas.start_processing_machine(src)
+				SSairmachines.start_processing_machine(src)
 			if(on && !holding)
 				var/plasma = air_contents.get_gas(GAS_PLASMA)
 				var/n2o = air_contents.get_gas(GAS_N2O)
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 22cd1108322..b907d136763 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -93,7 +93,7 @@
 		if(prob(50 / severity))
 			on = !on
 			if(on)
-				SSzas.start_processing_machine(src)
+				SSairmachines.start_processing_machine(src)
 		update_appearance()
 
 /obj/machinery/portable_atmospherics/scrubber/ui_interact(mob/user, datum/tgui/ui)
@@ -141,7 +141,7 @@
 		if("power")
 			on = !on
 			if(on)
-				SSzas.start_processing_machine(src)
+				SSairmachines.start_processing_machine(src)
 			. = TRUE
 		if("eject")
 			if(holding)
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index 00497473f12..0f9b5a3b655 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -105,7 +105,7 @@
 	// NOTE, now that Initialize and LateInitialize run correctly, do we really
 	// need these two below?
 	SSmachines.setup_template_powernets(cables)
-	SSzas.setup_template_machinery(atmos_machines)
+	SSairmachines.setup_template_machinery(atmos_machines)
 	SSshuttle.setup_shuttles(ports)
 
 	//calculate all turfs inside the border
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index d5b7e185874..c4fb0c2c9df 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -20,12 +20,12 @@
 	AddComponent(/datum/component/simple_rotation)
 	find_circs()
 	connect_to_network()
-	SSzas.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	update_appearance()
 
 /obj/machinery/power/generator/Destroy()
 	kill_circs()
-	SSzas.stop_processing_machine(src)
+	SSairmachines.stop_processing_machine(src)
 	return ..()
 
 /obj/machinery/power/generator/update_overlays()
diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm
index 21789898daa..594d5f66e67 100644
--- a/code/modules/procedural_mapping/mapGenerators/repair.dm
+++ b/code/modules/procedural_mapping/mapGenerators/repair.dm
@@ -51,7 +51,7 @@
 
 	SSatoms.InitializeAtoms(atoms)
 	SSmachines.setup_template_powernets(cables)
-	SSzas.setup_template_machinery(atmos_machines)
+	SSairmachines.setup_template_machinery(atmos_machines)
 	GLOB.reloading_map = FALSE
 
 /datum/map_generator/repair
diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm
index 824c7437c80..70c785dd5a7 100644
--- a/code/modules/research/ordnance/tank_compressor.dm
+++ b/code/modules/research/ordnance/tank_compressor.dm
@@ -119,7 +119,7 @@
 	if(nodes[2])
 		nodes[2].atmos_init()
 		nodes[2].add_member(src)
-	SSzas.add_to_rebuild_queue(src)
+	SSairmachines.add_to_rebuild_queue(src)
 	update_appearance()
 
 /// Glorified volume pump.
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index 17659877f5b..4115beaa475 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -254,7 +254,7 @@ All ShuttleMove procs go here
 			A.atmos_init()
 			if(A.return_pipenet())
 				A.add_member(src)
-		SSzas.add_to_rebuild_queue(src)
+		SSairmachines.add_to_rebuild_queue(src)
 	else
 		// atmos_init() calls update_appearance(), so we don't need to call it
 		update_appearance()
diff --git a/tgstation.dme b/tgstation.dme
index 707f7972ef4..73a44fca1c2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -455,6 +455,7 @@
 #include "code\controllers\subsystem\addiction.dm"
 #include "code\controllers\subsystem\ai_controllers.dm"
 #include "code\controllers\subsystem\airflow.dm"
+#include "code\controllers\subsystem\airmachines.dm"
 //#include "code\controllers\subsystem\air.dm"
 #include "code\controllers\subsystem\ambience.dm"
 #include "code\controllers\subsystem\assets.dm"

From 8d5154e3fbd2285f4211e0a1662236ff072ea093 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 20 Apr 2022 15:46:26 -0400
Subject: [PATCH 028/200] Some fixes. Atmos Sensitive still needs signals

---
 code/controllers/subsystem/airmachines.dm      | 17 +++++++++++++++++
 code/controllers/subsystem/zas.dm              |  1 +
 code/datums/elements/atmos_sensitive.dm        |  4 ++--
 code/modules/atmospherics/ZAS/Fire.dm          | 18 ++++++++++++++++--
 .../modules/atmospherics/machinery/airalarm.dm | 10 +++++-----
 code/modules/shuttle/arrivals.dm               |  2 +-
 6 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
index 6a3fd0c7de0..de0b4019dae 100644
--- a/code/controllers/subsystem/airmachines.dm
+++ b/code/controllers/subsystem/airmachines.dm
@@ -22,10 +22,27 @@ SUBSYSTEM_DEF(airmachines)
 	var/cost_atmos_machinery
 
 /datum/controller/subsystem/airmachines/Initialize(timeofday)
+	var/starttime = REALTIMEOFDAY
+	to_chat(world, span_boldannounce("Airmachines: Setting up atmospheric machinery..."))
 	setup_atmos_machinery()
+	to_chat(world, span_boldannounce("Airmachines: Airmachine setup completed in [(REALTIMEOFDAY- starttime) / 10] seconds!"))
+	starttime = REALTIMEOFDAY
+	to_chat(world, span_boldannounce("Airmachines: Creating pipenets..."))
 	setup_pipenets()
+	to_chat(world, span_boldannounce("Airmachines: Pipenet creation completed in [(REALTIMEOFDAY- starttime) / 10] seconds!"))
 	return ..()
 
+/datum/controller/subsystem/airmachines/stat_entry(msg)
+	msg += "CR: [cost_rebuilds ? cost_rebuilds : 0]|"
+	msg += "CPN: [cost_pipenets]|"
+	msg += "CAM: [cost_atmos_machinery]|"
+	msg += "NN: [length(networks)]|"
+	msg += "NAM: [length(atmos_machinery)]|"
+	msg += "RQ: [length(rebuild_queue)]|"
+	msg += "EQ: [length(expansion_queue)]"
+	return ..()
+
+
 /datum/controller/subsystem/airmachines/fire(resumed = FALSE)
 	var/timer = TICK_USAGE_REAL
 	// Every time we fire, we want to make sure pipenets are rebuilt. The game state could have changed between each fire() proc call
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index b17fcca9c39..6075ed4d4f0 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -105,6 +105,7 @@ SUBSYSTEM_DEF(zas)
 /datum/controller/subsystem/zas/proc/Reboot()
 	// Stop processing while we rebuild.
 	can_fire = FALSE
+	next_id = 0 //Reset atmos zone count.
 
 	// Make sure we don't rebuild mid-tick.
 	if (state != SS_IDLE)
diff --git a/code/datums/elements/atmos_sensitive.dm b/code/datums/elements/atmos_sensitive.dm
index 9cc8799db7b..a3266fa20e9 100644
--- a/code/datums/elements/atmos_sensitive.dm
+++ b/code/datums/elements/atmos_sensitive.dm
@@ -15,7 +15,7 @@
 
 	if(!mapload && isopenturf(to_track.loc))
 		var/turf/open/new_open = to_track.loc
-		to_track.check_atmos_process(new_open, new_open.air, new_open.air.temperature) //Make sure you're properly registered
+		to_track.check_atmos_process(new_open, new_open.return_air(), new_open.return_air().temperature) //Make sure you're properly registered
 
 	return ..()
 
@@ -33,7 +33,7 @@
 	var/atom/atom_source = source
 	if(isopenturf(atom_source.loc))
 		var/turf/open/new_open = atom_source.loc
-		atom_source.check_atmos_process(new_open, new_open.air, new_open.air.temperature) //Make sure you're properly registered
+		atom_source.check_atmos_process(new_open, new_open.return_air(), new_open.return_air().temperature) //Make sure you're properly registered
 
 /atom/proc/check_atmos_process(datum/source, datum/gas_mixture/air, exposed_temperature)
 	SIGNAL_HANDLER
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 4c6f8ec0e69..78982913b2f 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -440,7 +440,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	apply_damage(0.9*mx*head_exposure,  BURN, BODY_ZONE_HEAD)
 	apply_damage(2.5*mx*chest_exposure, BURN, BODY_ZONE_CHEST)
-	apply_damage(2,0*mx*groin_exposure, BURN, BODY_ZONE_PRECISE_GROIN)
+	//apply_damage(2,0*mx*groin_exposure, BURN, BODY_ZONE_PRECISE_GROIN)
 	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_L_LEG)
 	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_R_LEG)
 	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_L_ARM)
@@ -449,6 +449,20 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	//return a truthy value of whether burning actually happened
 	return mx * (head_exposure + chest_exposure + groin_exposure + legs_exposure + arms_exposure)
 
+/turf/proc/burn()
+	burn_tile()
+	var/chance_of_deletion
+	if (heat_capacity) //beware of division by zero
+		chance_of_deletion = max_fire_temperature_sustained / heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0
+	else
+		chance_of_deletion = 100
+	if(prob(chance_of_deletion))
+		Melt()
+		max_fire_temperature_sustained = 0
+	else
+		to_be_destroyed = FALSE
+
+
 //turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
 /turf/proc/adjacent_fire_act(turf/open/floor/source, datum/gas_mixture/adj_air, adjt_temp)
 	return
@@ -462,7 +476,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			W.fire_act(adj_air, adj_temp, adj_volume)
 
 /turf/closed/wall/adjacent_fire_act(turf/open/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
-	//burn(adj_temp)
+	burn(adj_temp)
 	if(adj_temp > heat_capacity)
 		take_damage(log(Frand(0.9, 1.1) * (adj_temp - heat_capacity)), BURN)
 
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 657444209d1..f8408d81968 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -226,8 +226,8 @@
 			continue
 		cur_tlv = TLV[gas_id]
 		data["environment_data"] += list(list(
-								"name" = environment.gas[gas_id],
-								"value" = environment.get_gas(gas_id) / total_moles * 100,
+								"name" = xgm_gas_data.name[gas_id],
+								"value" = environment.gas[gas_id] / total_moles * 100,
 								"unit" = "%",
 								"danger_level" = cur_tlv.get_danger_level(environment.get_gas(gas_id)* partial_pressure)
 		))
@@ -300,7 +300,7 @@
 			if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
 				continue
 			selected = TLV[gas_id]
-			thresholds += list(list("name" = gas_id, "settings" = list()))
+			thresholds += list(list("name" = xgm_gas_data.name[gas_id], "settings" = list()))
 			thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "hazard_min", "selected" = selected.hazard_min))
 			thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "warning_min", "selected" = selected.warning_min))
 			thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "warning_max", "selected" = selected.warning_max))
@@ -609,7 +609,7 @@
 	var/list/cached_tlv = TLV
 
 	var/list/env_gases = environment.get_gases()
-	var/partial_pressure = R_IDEAL_GAS_EQUATION * exposed_temperature / environment.volume
+	//var/partial_pressure = R_IDEAL_GAS_EQUATION * exposed_temperature / environment.volume
 
 	current_tlv = cached_tlv["pressure"]
 	var/environment_pressure = environment.return_pressure()
@@ -623,7 +623,7 @@
 		if(!(gas_id in cached_tlv)) // We're not interested in this gas, it seems.
 			continue
 		current_tlv = cached_tlv[gas_id]
-		gas_dangerlevel = max(gas_dangerlevel, current_tlv.get_danger_level(env_gases[gas_id] * partial_pressure))
+		gas_dangerlevel = max(gas_dangerlevel, current_tlv.get_danger_level(environment.get_gas(gas_id)))
 
 	var/old_danger_level = danger_level
 	danger_level = max(pressure_dangerlevel, temperature_dangerlevel, gas_dangerlevel)
diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm
index b2a0e3302db..40b43cdc428 100644
--- a/code/modules/shuttle/arrivals.dm
+++ b/code/modules/shuttle/arrivals.dm
@@ -107,7 +107,7 @@
 /obj/docking_port/mobile/arrivals/proc/CheckTurfsPressure()
 	for(var/I in SSjob.latejoin_trackers)
 		var/turf/open/T = get_turf(I)
-		var/pressure = T.air.return_pressure()
+		var/pressure = T.return_air().return_pressure()
 		if(pressure < HAZARD_LOW_PRESSURE || pressure > HAZARD_HIGH_PRESSURE) //simple safety check
 			return TRUE
 	return FALSE

From 93a263423e1c8ce59a039d4fcc8cc5fea4d766c5 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 21 Apr 2022 00:39:36 -0400
Subject: [PATCH 029/200] Atmos Alarms now work properly & trigger firedoors

---
 code/controllers/subsystem/zas.dm                    |  2 +-
 code/datums/elements/atmos_sensitive.dm              |  4 ++--
 code/modules/atmospherics/ZAS/Fire.dm                |  3 ---
 code/modules/atmospherics/ZAS/Temperature.dm         |  9 +++++++++
 code/modules/atmospherics/machinery/airalarm.dm      | 12 ++++++++++--
 .../components/unary_devices/vent_scrubber.dm        |  5 +++--
 .../modules/atmospherics/machinery/datum_pipeline.dm |  4 ++--
 7 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 6075ed4d4f0..2e993242511 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -162,7 +162,7 @@ SUBSYSTEM_DEF(zas)
 
 		CHECK_TICK
 
-	to_chat(world, span_boldannounce("ZAS: Total Simulated Turfs: [simulated_turf_count]\nTotal Zones: [zones.len]\nTotal Edges: [edges.len]\nTotal Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]\nTotal Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"))
+	to_chat(world, span_boldannounce("ZAS:\n - Total Simulated Turfs: [simulated_turf_count]\n - Total Zones: [zones.len]\n - Total Edges: [edges.len]\n - Total Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]\n - Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"))
 
 	to_chat(world, span_boldannounce("ZAS: Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
 
diff --git a/code/datums/elements/atmos_sensitive.dm b/code/datums/elements/atmos_sensitive.dm
index a3266fa20e9..6139f14b284 100644
--- a/code/datums/elements/atmos_sensitive.dm
+++ b/code/datums/elements/atmos_sensitive.dm
@@ -40,11 +40,11 @@
 	if(should_atmos_process(air, exposed_temperature))
 		if(flags_1 & ATMOS_IS_PROCESSING_1)
 			return
-		SSzas.atom_process += src
+		//SSzas.atom_process += src
 		flags_1 |= ATMOS_IS_PROCESSING_1
 	else if(flags_1 & ATMOS_IS_PROCESSING_1)
 		atmos_end()
-		SSzas.atom_process -= src
+		//SSzas.atom_process -= src
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 
 /atom/proc/process_exposure()
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 78982913b2f..364dbf9fa47 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -11,9 +11,6 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /turf/var/obj/effect/hotspot/fire = null
 
 //Some legacy definitions so fires can be started.
-/atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
-	return null
-
 /atom/movable/proc/is_burnable()
 	return FALSE
 
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 4dd66a56b9c..16a963552b0 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -34,6 +34,7 @@
 	// Get our location temperature if possible.
 	// Nullspace is room temperature, clearly.
 	var/adjust_temp
+	var/datum/gas_mixture/local_air
 	if(loc)
 		if(!loc.simulated)
 			adjust_temp = loc.temperature
@@ -44,6 +45,9 @@
 				return
 			if(T.zone && T.zone.air)
 				adjust_temp = T.zone.air.temperature
+				SEND_SIGNAL(T, COMSIG_TURF_EXPOSE, T.zone.air, T.zone.air.temperature)
+				atmos_expose(T.zone.air, T.zone.air.temperature)
+				local_air = T.zone.air
 			else
 				adjust_temp = T20C
 	else
@@ -53,6 +57,11 @@
 	if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0)
 		ADJUST_ATOM_TEMPERATURE(src, (diff_temp > 0) ? min(adjust_temp, altered_temp) : max(adjust_temp, altered_temp))
+		var/tempvar = null
+
+	else if(local_air && should_atmos_process(local_air, local_air.temperature))
+		return
+
 	else
 		temperature = adjust_temp
 		return PROCESS_KILL
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index f8408d81968..0c95692c6bc 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -229,7 +229,7 @@
 								"name" = xgm_gas_data.name[gas_id],
 								"value" = environment.gas[gas_id] / total_moles * 100,
 								"unit" = "%",
-								"danger_level" = cur_tlv.get_danger_level(environment.get_gas(gas_id)* partial_pressure)
+								"danger_level" = cur_tlv.get_danger_level(environment.gas[gas_id]* partial_pressure)
 		))
 
 	if(!locked || user.has_unlimited_silicon_privilege)
@@ -623,7 +623,7 @@
 		if(!(gas_id in cached_tlv)) // We're not interested in this gas, it seems.
 			continue
 		current_tlv = cached_tlv[gas_id]
-		gas_dangerlevel = max(gas_dangerlevel, current_tlv.get_danger_level(environment.get_gas(gas_id)))
+		gas_dangerlevel = max(gas_dangerlevel, current_tlv.get_danger_level(environment.gas[gas_id]))
 
 	var/old_danger_level = danger_level
 	danger_level = max(pressure_dangerlevel, temperature_dangerlevel, gas_dangerlevel)
@@ -662,9 +662,17 @@
 			new_area_danger_level = clamp(max(new_area_danger_level, AA.danger_level), 0, 1)
 
 	var/did_anything_happen
+	var/area/local_area = get_area(src)
 	if(new_area_danger_level)
 		did_anything_happen = alarm_manager.send_alarm(ALARM_ATMOS)
+		if(danger_level == TLV_OUTSIDE_HAZARD_LIMIT)
+			for(var/obj/machinery/door/firedoor/door in local_area.firedoors)
+				door.start_activation_process(FIRELOCK_ALARM_TYPE_GENERIC)
 	else
+		if(danger_level < TLV_OUTSIDE_WARNING_LIMIT)
+			for(var/obj/machinery/door/firedoor/door in local_area.firedoors)
+				door.start_deactivation_process(FIRELOCK_ALARM_TYPE_GENERIC)
+
 		did_anything_happen = alarm_manager.clear_alarm(ALARM_ATMOS)
 	if(did_anything_happen) //if something actually changed
 		post_alert(new_area_danger_level)
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 b1d46b02494..391d156f517 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -254,13 +254,14 @@
 
 			var/total_moles_to_remove = 0
 			for(var/gas in filter_types & environment.get_gases())
-				total_moles_to_remove += environment.get_gas(gas)
+				total_moles_to_remove += environment.gas[gas]
 
 			if(total_moles_to_remove == 0)//sometimes this gets non gc'd values
 				return FALSE
 
 			//take this gases portion of removal_ratio of the turfs air, or all of that gas if less than or equal to MINIMUM_MOLES_TO_SCRUB
-			var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles
+			//var/transfer_moles = min(environment.total_moles, volume_rate/environment.volume)*environment.total_moles
+			var/transfer_moles = min(environment.total_moles, environment.total_moles*volume_rate/environment.volume)
 			scrub_gas(filter_types, environment, filtered_out, transfer_moles, INFINITY)
 
 
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index 2960e4fc5c4..964e364ff77 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -209,8 +209,8 @@
 
 	air.temperature += self_temperature_delta
 	modeled_location.TakeTemperature(sharer_temperature_delta)
-	if(modeled_location.blocks_air)
-		modeled_location.temperature_expose(air, modeled_location.temperature)
+	/*if(modeled_location.blocks_air & AIR_BLOCKED)
+		modeled_location.temperature_expose(air, modeled_location.temperature)*/
 
 	update = TRUE
 

From b5d5ce70620fda28d1ff2d16f3c8f2fb334e3d69 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 21 Apr 2022 03:41:07 -0400
Subject: [PATCH 030/200] Attempts to make scrubbers work right, failed

---
 code/__DEFINES/atmospherics/temperature.dm           | 6 ++++--
 code/__DEFINES/subsystems.dm                         | 2 +-
 code/controllers/subsystem/airflow.dm                | 2 +-
 code/controllers/subsystem/airmachines.dm            | 2 +-
 code/controllers/subsystem/processing/airatoms.dm    | 5 +++++
 code/controllers/subsystem/processing/temperature.dm | 5 -----
 code/controllers/subsystem/zas.dm                    | 2 +-
 code/datums/elements/atmos_sensitive.dm              | 8 ++++----
 code/modules/atmospherics/ZAS/Temperature.dm         | 3 ++-
 code/modules/mob/mob_defines.dm                      | 2 ++
 tgstation.dme                                        | 2 +-
 11 files changed, 22 insertions(+), 17 deletions(-)
 create mode 100644 code/controllers/subsystem/processing/airatoms.dm
 delete mode 100644 code/controllers/subsystem/processing/temperature.dm

diff --git a/code/__DEFINES/atmospherics/temperature.dm b/code/__DEFINES/atmospherics/temperature.dm
index bac65da5b79..e26dc041577 100644
--- a/code/__DEFINES/atmospherics/temperature.dm
+++ b/code/__DEFINES/atmospherics/temperature.dm
@@ -18,9 +18,11 @@
 		for(var/thing in _atoms) { \
 			var/atom/A = thing; \
 			if(ATOM_IS_TEMPERATURE_SENSITIVE(A)) { \
-				START_PROCESSING(SStemperature, A); \
+				START_PROCESSING(SSairatoms, A); \
+				A.flags_1 |= ATMOS_IS_PROCESSING_1 \
 			} \
 		} \
 	} else if(ATOM_IS_TEMPERATURE_SENSITIVE(_atoms)) { \
-		START_PROCESSING(SStemperature, _atoms); \
+		START_PROCESSING(SSairatoms, _atoms); \
+		_atoms.flags_1 |= ATMOS_IS_PROCESSING_1 \
 	}
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 842eee0b639..25d877dfc97 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -175,7 +175,7 @@
 #define FIRE_PRIORITY_GARBAGE 15
 #define FIRE_PRIORITY_DATABASE 16
 #define FIRE_PRIORITY_AIRFLOW 17
-#define FIRE_PRIORITY_TEMPERATURE 18
+#define FIRE_PRIORITY_AIRATOMS 18
 #define FIRE_PRIORITY_WET_FLOORS 20
 #define FIRE_PRIORITY_AIR 20
 #define FIRE_PRIORITY_NPC 20
diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index dbe2addfc80..b110cca476b 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -10,7 +10,7 @@
 
 
 SUBSYSTEM_DEF(airflow)
-	name = "Airflow"
+	name = "Air (Airflow)"
 	wait = 1
 	flags = SS_NO_INIT
 	priority = FIRE_PRIORITY_AIRFLOW
diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
index de0b4019dae..d9d6a7c8b96 100644
--- a/code/controllers/subsystem/airmachines.dm
+++ b/code/controllers/subsystem/airmachines.dm
@@ -1,5 +1,5 @@
 SUBSYSTEM_DEF(airmachines)
-	name = "Atmos Machines"
+	name = "Air (Machines)"
 	priority = FIRE_PRIORITY_AIRMACHINES
 	init_order = INIT_ORDER_AIRMACHINES
 	flags = SS_KEEP_TIMING
diff --git a/code/controllers/subsystem/processing/airatoms.dm b/code/controllers/subsystem/processing/airatoms.dm
new file mode 100644
index 00000000000..32d046cde70
--- /dev/null
+++ b/code/controllers/subsystem/processing/airatoms.dm
@@ -0,0 +1,5 @@
+PROCESSING_SUBSYSTEM_DEF(airatoms)
+	name = "Air (Atoms)"
+	priority = FIRE_PRIORITY_AIRATOMS
+	wait = 0.5 SECONDS
+	process_proc = /atom/proc/process_atmos_exposure
diff --git a/code/controllers/subsystem/processing/temperature.dm b/code/controllers/subsystem/processing/temperature.dm
deleted file mode 100644
index 772a2086a57..00000000000
--- a/code/controllers/subsystem/processing/temperature.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-PROCESSING_SUBSYSTEM_DEF(temperature)
-	name = "Temperature"
-	priority = FIRE_PRIORITY_TEMPERATURE
-	wait = 5 SECONDS
-	process_proc = /atom/proc/ProcessAtomTemperature
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 2e993242511..f6a5951f635 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -62,7 +62,7 @@ Class Procs:
 */
 
 SUBSYSTEM_DEF(zas)
-	name = "ZAS"
+	name = "Air Core"
 	priority = FIRE_PRIORITY_AIR
 	init_order = INIT_ORDER_AIR
 	flags = SS_POST_FIRE_TIMING
diff --git a/code/datums/elements/atmos_sensitive.dm b/code/datums/elements/atmos_sensitive.dm
index 6139f14b284..e54c307f5fc 100644
--- a/code/datums/elements/atmos_sensitive.dm
+++ b/code/datums/elements/atmos_sensitive.dm
@@ -40,11 +40,11 @@
 	if(should_atmos_process(air, exposed_temperature))
 		if(flags_1 & ATMOS_IS_PROCESSING_1)
 			return
-		//SSzas.atom_process += src
+		START_PROCESSING(SSairatoms, src)
 		flags_1 |= ATMOS_IS_PROCESSING_1
 	else if(flags_1 & ATMOS_IS_PROCESSING_1)
 		atmos_end()
-		//SSzas.atom_process -= src
+		START_PROCESSING(SSairatoms, src)
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 
 /atom/proc/process_exposure()
@@ -52,12 +52,12 @@
 	if(!istype(loc, /turf/open))
 		//If you end up in a locker or a wall reconsider your life decisions
 		atmos_end()
-		SSzas.atom_process -= src
+		STOP_PROCESSING(SSairatoms, src)
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return
 	if(!should_atmos_process(spot.air, spot.air.temperature)) //Things can change without a tile becoming active
 		atmos_end()
-		SSzas.atom_process -= src
+		STOP_PROCESSING(SSairatoms, src)
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return
 	atmos_expose(spot.air, spot.air.temperature)
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 16a963552b0..5068228ba97 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -30,7 +30,7 @@
 	. = ..()
 	temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - FLOOR(mob_size/4, 1), MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient
 
-/atom/proc/ProcessAtomTemperature()
+/atom/proc/process_atmos_exposure()
 	// Get our location temperature if possible.
 	// Nullspace is room temperature, clearly.
 	var/adjust_temp
@@ -64,6 +64,7 @@
 
 	else
 		temperature = adjust_temp
+		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return PROCESS_KILL
 
 #undef MIN_TEMPERATURE_COEFFICIENT
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 04515064f8d..b01244fc42d 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -18,6 +18,8 @@
 	throwforce = 10
 	blocks_emissive = EMISSIVE_BLOCK_GENERIC
 	pass_flags_self = PASSMOB
+	flags_2 = NO_TEMP_CHANGE_2 //We're going to assume mobs handle their own temperature on life
+
 	/// The current client inhabiting this mob. Managed by login/logout
 	/// This exists so we can do cleanup in logout for occasions where a client was transfere rather then destroyed
 	/// We need to do this because the mob on logout never actually has a reference to client
diff --git a/tgstation.dme b/tgstation.dme
index 73a44fca1c2..946f288e01c 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -543,6 +543,7 @@
 #include "code\controllers\subsystem\processing\acid.dm"
 #include "code\controllers\subsystem\processing\ai_basic_avoidance.dm"
 #include "code\controllers\subsystem\processing\ai_behaviors.dm"
+#include "code\controllers\subsystem\processing\airatoms.dm"
 #include "code\controllers\subsystem\processing\antag_hud.dm"
 #include "code\controllers\subsystem\processing\aura_healing.dm"
 #include "code\controllers\subsystem\processing\clock_component.dm"
@@ -558,7 +559,6 @@
 #include "code\controllers\subsystem\processing\quirks.dm"
 #include "code\controllers\subsystem\processing\reagents.dm"
 #include "code\controllers\subsystem\processing\singulo.dm"
-#include "code\controllers\subsystem\processing\temperature.dm"
 #include "code\controllers\subsystem\processing\station.dm"
 #include "code\controllers\subsystem\processing\tramprocess.dm"
 #include "code\controllers\subsystem\processing\wet_floors.dm"

From ce0ec1e387e02bfa12c559cf9a79f8ddb34b9e96 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 21 Apr 2022 04:13:16 -0400
Subject: [PATCH 031/200] Updates SSzas

---
 code/controllers/subsystem/zas.dm            | 294 +++++++------------
 code/datums/elements/atmos_sensitive.dm      |   4 +-
 code/modules/atmospherics/ZAS/Temperature.dm |   1 -
 3 files changed, 112 insertions(+), 187 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index f6a5951f635..0f9fd9a608a 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -70,6 +70,12 @@ SUBSYSTEM_DEF(zas)
 	wait = 2 SECONDS
 
 	var/cached_cost = 0
+	var/cost_tiles = 0
+	var/cost_deferred_tiles = 0
+	var/cost_edges = 0
+	var/cost_fires = 0
+	var/cost_hotspots = 0
+	var/cost_zones = 0
 
 	//The variable setting controller
 	var/datum/zas_controller/settings
@@ -80,8 +86,6 @@ SUBSYSTEM_DEF(zas)
 	var/list/zones = list()
 	var/list/edges = list()
 
-	//Atoms to be processed
-	var/list/atom_process = list()
 
 	//Geometry updates lists
 	var/list/tiles_to_update = list()
@@ -96,12 +100,10 @@ SUBSYSTEM_DEF(zas)
 	var/tmp/list/processing_hotspots
 	var/tmp/list/processing_zones
 
-	//Currently processing
-	var/list/currentrun = list()
-	var/current_process = SSZAS_TILES
 	var/active_zones = 0
 	var/next_id = 1
 
+
 /datum/controller/subsystem/zas/proc/Reboot()
 	// Stop processing while we rebuild.
 	can_fire = FALSE
@@ -176,111 +178,33 @@ SUBSYSTEM_DEF(zas)
 
 	..(timeofday)
 
-/datum/controller/subsystem/zas/fire(resumed = FALSE, mc_no_tick)
+/datum/controller/subsystem/zas/fire(resumed = FALSE, no_mc_tick)
 	var/timer = TICK_USAGE_REAL
 	if (!resumed)
 		processing_edges = active_edges.Copy()
 		processing_fires = active_fire_zones.Copy()
 		processing_hotspots = active_hotspots.Copy()
 
-	if(current_process == SSZAS_TILES)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_tiles(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_DEFERED_TILES
-
-	if(current_process == SSZAS_DEFERED_TILES)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_deferred_tiles(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_EDGES
-
-	if(current_process == SSZAS_EDGES)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_edges(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_FIRES
-
-	if(current_process == SSZAS_FIRES)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_fires(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_HOTSPOTS
-
-	if(current_process == SSZAS_HOTSPOTS)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_hotspots(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_ZONES
-
-	if(current_process == SSZAS_ZONES)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_zones(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-		current_process = SSZAS_ATOMS
-
-	if(current_process == SSZAS_ATOMS)
-		timer = TICK_USAGE_REAL
-		if(!resumed)
-			cached_cost = 0
-		process_atoms(resumed)
-		cached_cost += TICK_USAGE_REAL - timer
-		if(state != SS_RUNNING)
-			return
-		//cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(cached_cost))
-		resumed = FALSE
-
+	var/list/curr_tiles = tiles_to_update
+	var/list/curr_defer = deferred
+	var/list/curr_edges = processing_edges
+	var/list/curr_fire = processing_fires
+	var/list/curr_hotspot = processing_hotspots
+	var/list/curr_zones = zones_to_update
 
-	current_process = SSZAS_TILES
 
-/datum/controller/subsystem/zas/proc/process_tiles(resumed = FALSE)
-	if(!resumed)
-		src.currentrun = tiles_to_update
-
-	var/list/currentrun = src.currentrun
-	while (currentrun.len)
-		var/turf/T = currentrun[currentrun.len]
-		currentrun.len--
+/////////TILES//////////
+	cached_cost = 0
+	while (curr_tiles.len)
+		var/turf/T = curr_tiles[curr_tiles.len]
+		curr_tiles.len--
 
 		if (!T)
-			if (MC_TICK_CHECK)
+			if (no_mc_tick)
+				CHECK_TICK
+			else if (MC_TICK_CHECK)
 				return
+
 			continue
 
 		//check if the turf is self-zone-blocked
@@ -288,7 +212,9 @@ SUBSYSTEM_DEF(zas)
 		ATMOS_CANPASS_TURF(c_airblock, T, T)
 		if(c_airblock & ZONE_BLOCKED)
 			deferred += T
-			if (MC_TICK_CHECK)
+			if (no_mc_tick)
+				CHECK_TICK
+			else if (MC_TICK_CHECK)
 				return
 			continue
 
@@ -300,110 +226,110 @@ SUBSYSTEM_DEF(zas)
 		//updated++
 		#endif
 
-		if (MC_TICK_CHECK)
+		if (no_mc_tick)
+			CHECK_TICK
+		else if (MC_TICK_CHECK)
 			return
 
-/datum/controller/subsystem/zas/proc/process_deferred_tiles(resumed)
-	if(!resumed)
-		src.currentrun = deferred
-	var/list/currentrun = src.currentrun
-
-	if(current_process == SSZAS_DEFERED_TILES)
-		while (currentrun.len)
-			var/turf/T = currentrun[currentrun.len]
-			currentrun.len--
-
-			T.update_air_properties()
-			T.post_update_air_properties()
-			T.needs_air_update = 0
-			#ifdef ZASDBG
-			T.overlays -= mark
-			//updated++
-			#endif
-
-			if (MC_TICK_CHECK)
-				return
+	cached_cost += TICK_USAGE_REAL - timer
+	cost_tiles = MC_AVERAGE(cost_tiles, TICK_DELTA_TO_MS(cached_cost))
+
+//////////DEFERRED TILES//////////
+	timer = TICK_USAGE_REAL
+	cached_cost = 0
+	while (curr_defer.len)
+		var/turf/T = curr_defer[curr_defer.len]
+		curr_defer.len--
+
+		T.update_air_properties()
+		T.post_update_air_properties()
+		T.needs_air_update = 0
+		#ifdef ZASDBG
+		T.overlays -= mark
+		//updated++
+		#endif
 
-/datum/controller/subsystem/zas/proc/process_edges(resumed)
-	if(!resumed)
-		src.currentrun = active_edges.Copy()
-	var/list/currentrun = src.currentrun
+		if (no_mc_tick)
+			CHECK_TICK
+		else if (MC_TICK_CHECK)
+			return
+	cached_cost += TICK_USAGE_REAL - timer
+	cost_deferred_tiles = MC_AVERAGE(cost_deferred_tiles, TICK_DELTA_TO_MS(cached_cost))
 
-	if(current_process == SSZAS_EDGES)
-		while (currentrun.len)
-			var/connection_edge/edge = currentrun[currentrun.len]
-			currentrun.len--
+//////////EDGES//////////
 
-			if (!edge)
-				if (MC_TICK_CHECK)
-					return
-				continue
+	timer = TICK_USAGE_REAL
+	cached_cost = 0
+	while (curr_edges.len)
+		var/connection_edge/edge = curr_edges[curr_edges.len]
+		curr_edges.len--
 
-			edge.tick()
-			if (MC_TICK_CHECK)
+		if (!edge)
+			if (no_mc_tick)
+				CHECK_TICK
+			else if (MC_TICK_CHECK)
 				return
+			continue
 
-/datum/controller/subsystem/zas/proc/process_fires(resumed)
-	if(!resumed)
-		src.currentrun = active_fire_zones.Copy()
-	var/list/currentrun = src.currentrun
-
-	if(current_process == SSZAS_FIRES)
-		while (currentrun.len)
-			var/zone/Z = currentrun[currentrun.len]
-			currentrun.len--
+		edge.tick()
 
-			Z.process_fire()
+		if (no_mc_tick)
+			CHECK_TICK
+		else if (MC_TICK_CHECK)
+			return
 
-			if (MC_TICK_CHECK)
-				return
+	cached_cost += TICK_USAGE_REAL - timer
+	cost_edges = MC_AVERAGE(cost_edges, TICK_DELTA_TO_MS(cached_cost))
 
-/datum/controller/subsystem/zas/proc/process_hotspots(resumed)
-	if(!resumed)
-		src.currentrun = active_hotspots.Copy()
-	var/list/currentrun = src.currentrun
+//////////FIRES//////////
+	timer = TICK_USAGE_REAL
+	cached_cost = 0
+	while (curr_fire.len)
+		var/zone/Z = curr_fire[curr_fire.len]
+		curr_fire.len--
 
-	if(current_process == SSZAS_HOTSPOTS)
-		while (currentrun.len)
-			var/obj/effect/hotspot/F = currentrun[currentrun.len]
-			currentrun.len--
+		Z.process_fire()
 
-			F.process()
+		if (no_mc_tick)
+			CHECK_TICK
+		else if (MC_TICK_CHECK)
+			return
 
-			if (MC_TICK_CHECK)
-				return
+	cached_cost += TICK_USAGE_REAL - timer
+	cost_fires= MC_AVERAGE(cost_fires, TICK_DELTA_TO_MS(cached_cost))
 
-/datum/controller/subsystem/zas/proc/process_zones(resumed)
-	if(!resumed)
-		src.currentrun = zones_to_update
-	var/list/currentrun = src.currentrun
+//////////HOTSPOTS//////////
+	timer = TICK_USAGE_REAL
+	cached_cost = 0
+	while (curr_hotspot.len)
+		var/obj/effect/hotspot/F = curr_hotspot[curr_hotspot.len]
+		curr_hotspot.len--
 
-	if(current_process == SSZAS_ZONES)
-		while (currentrun.len)
-			var/zone/Z = currentrun[currentrun.len]
-			currentrun.len--
+		F.process()
 
-			Z.tick()
-			Z.needs_update = FALSE
+		if (no_mc_tick)
+			CHECK_TICK
+		else if (MC_TICK_CHECK)
+			return
+	cached_cost += TICK_USAGE_REAL - timer
+	cost_hotspots = MC_AVERAGE(cost_hotspots, TICK_DELTA_TO_MS(cached_cost))
 
-			if (MC_TICK_CHECK)
-				return
+	timer = TICK_USAGE_REAL
+	cached_cost = 0
+	while (curr_zones.len)
+		var/zone/Z = curr_zones[curr_zones.len]
+		curr_zones.len--
 
-/datum/controller/subsystem/zas/proc/process_atoms(resumed)
-	if(!resumed)
-		src.currentrun = atom_process
+		Z.tick()
+		Z.needs_update = FALSE
 
-	var/list/currentrun = src.currentrun
+		if (no_mc_tick)
+			CHECK_TICK
+		else if (MC_TICK_CHECK)
+			return
 
-	if(current_process == SSZAS_ATOMS)
-		while(currentrun.len)
-			var/atom/talk_to = currentrun[currentrun.len]
-			currentrun.len--
-			if(!talk_to)
-				return
-			talk_to.process_exposure()
-			if(MC_TICK_CHECK)
-				return
+	cached_cost += TICK_USAGE_REAL - timer
+	cost_zones = MC_AVERAGE(cost_zones, TICK_DELTA_TO_MS(cached_cost))
 
 /datum/controller/subsystem/zas/proc/add_zone(zone/z)
 	zones += z
@@ -446,7 +372,7 @@ SUBSYSTEM_DEF(zas)
 //datum/controller/subsystem/zas/proc/connect(turf/simulated/A, turf/simulated/B) //ZASTURF
 /datum/controller/subsystem/zas/proc/connect(turf/A, turf/B)
 	#ifdef ZASDBG
-	ASSERT(istype(A))
+	ASSERT(!istype(A, /turf/open/space))
 	ASSERT(isturf(B))
 	ASSERT(A.zone)
 	ASSERT(!A.zone.invalid)
diff --git a/code/datums/elements/atmos_sensitive.dm b/code/datums/elements/atmos_sensitive.dm
index e54c307f5fc..fd0ac7f6db2 100644
--- a/code/datums/elements/atmos_sensitive.dm
+++ b/code/datums/elements/atmos_sensitive.dm
@@ -24,7 +24,7 @@
 	us.RemoveElement(/datum/element/connect_loc, pass_on)
 	if(us.flags_1 & ATMOS_IS_PROCESSING_1)
 		us.atmos_end()
-		SSzas.atom_process -= us
+		STOP_PROCESSING(SSairatoms, src)
 		us.flags_1 &= ~ATMOS_IS_PROCESSING_1
 	return ..()
 
@@ -65,7 +65,7 @@
 /turf/open/process_exposure()
 	if(!should_atmos_process(air, air.temperature))
 		atmos_end()
-		SSzas.atom_process -= src
+		STOP_PROCESSING(SSairatoms, src)
 		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return
 	atmos_expose(air, air.temperature)
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 5068228ba97..0447f522f29 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -57,7 +57,6 @@
 	if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0)
 		ADJUST_ATOM_TEMPERATURE(src, (diff_temp > 0) ? min(adjust_temp, altered_temp) : max(adjust_temp, altered_temp))
-		var/tempvar = null
 
 	else if(local_air && should_atmos_process(local_air, local_air.temperature))
 		return

From 675c22aaaac3feee936d42e94251fead72e487c0 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 01:12:24 -0400
Subject: [PATCH 032/200] Scrubbers and the beginning of atmos sensitivity
 removal

---
 code/controllers/subsystem/airmachines.dm     |  2 +
 code/controllers/subsystem/zas.dm             |  3 +-
 code/datums/components/wet_floor.dm           |  2 +-
 .../effects/effect_system/effects_foam.dm     |  5 +-
 .../effects/effect_system/effects_water.dm    | 14 +++++-
 code/game/objects/effects/effects.dm          |  5 ++
 code/game/turfs/change_turf.dm                | 13 ++---
 code/game/turfs/open/_open.dm                 |  2 +-
 code/game/turfs/open/space/space.dm           |  4 +-
 code/modules/atmospherics/ZAS/Fire.dm         |  2 +
 code/modules/atmospherics/ZAS/Temperature.dm  |  3 +-
 code/modules/atmospherics/ZAS/Turf.dm         | 38 +++++++++++++-
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  2 +-
 .../components/unary_devices/vent_scrubber.dm | 49 ++++++++-----------
 14 files changed, 96 insertions(+), 48 deletions(-)

diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
index d9d6a7c8b96..ffe16f5ca0c 100644
--- a/code/controllers/subsystem/airmachines.dm
+++ b/code/controllers/subsystem/airmachines.dm
@@ -235,6 +235,7 @@ SUBSYSTEM_DEF(airmachines)
 		return
 	machine.atmos_processing = TRUE
 	atmos_machinery += machine
+	machine.flags_1 |= ATMOS_IS_PROCESSING_1
 
 /**
  * Removes a given machine to the processing system for SSZAS_MACHINES processing.
@@ -247,6 +248,7 @@ SUBSYSTEM_DEF(airmachines)
 		return
 	machine.atmos_processing = FALSE
 	atmos_machinery -= machine
+	machine.flags_1 &= ~ATMOS_IS_PROCESSING_1
 
 	// If we're currently processing atmos machines, there's a chance this machine is in
 	// the currentrun list, which is a cache of atmos_machinery. Remove it from that list
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 0f9fd9a608a..dcf849cd7cc 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -379,7 +379,8 @@ SUBSYSTEM_DEF(zas)
 	//ASSERT(B.zone)
 	ASSERT(A != B)
 	#endif
-
+	if(A.zone == B.zone)
+		var/scream
 	var/block = air_blocked(A,B)
 	if(block & AIR_BLOCKED) return
 
diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm
index e21750aec8d..9a63f6b2951 100644
--- a/code/datums/components/wet_floor.dm
+++ b/code/datums/components/wet_floor.dm
@@ -119,7 +119,7 @@
 		if(-INFINITY to T0C)
 			add_wet(TURF_WET_ICE, max_time_left()) //Water freezes into ice!
 		if(T0C to T0C + 100)
-			decrease = ((T.air.temperature - T0C) / SSwet_floors.temperature_coeff) * (diff / SSwet_floors.time_ratio)
+			decrease = ((T.return_air().temperature - T0C) / SSwet_floors.temperature_coeff) * (diff / SSwet_floors.time_ratio)
 		if(T0C + 100 to INFINITY)
 			decrease = INFINITY
 	decrease = max(0, decrease)
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 78480f53349..1ffd68f649f 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -44,7 +44,7 @@
 	var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T)
 	if(hotspot && istype(T) && T.air)
 		qdel(hotspot)
-		var/datum/gas_mixture/G = T.air
+		var/datum/gas_mixture/G = T.return_air()
 		if(G.get_gas(GAS_PLASMA))
 			var/plas_amt = min(30, G.get_gas(GAS_PLASMA)) //Absorb some plasma
 			G.adjust_gas(GAS_PLASMA, -plas_amt)
@@ -291,9 +291,8 @@
 	. = ..()
 
 /obj/structure/foamedmetal/Move()
-	var/turf/T = loc
 	. = ..()
-	//move_update_air(T)
+	update_nearby_tiles()
 
 /obj/structure/foamedmetal/attack_paw(mob/user, list/modifiers)
 	return attack_hand(user, modifiers)
diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm
index 4141788552f..7f8f5a6909c 100644
--- a/code/game/objects/effects/effect_system/effects_water.dm
+++ b/code/game/objects/effects/effect_system/effects_water.dm
@@ -7,12 +7,19 @@
 	var/life = 15
 	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
 
-
 /obj/effect/particle_effect/water/Initialize(mapload)
 	. = ..()
 	QDEL_IN(src, 70)
 
 /obj/effect/particle_effect/water/Move(turf/newloc)
+	//WOW. OKAY. THIS IS REALLY HACKY. THIS NEEDS TO BE STANDARDIZED.
+	var/datum/gas_mixture/env = get_step(src, 0)?.return_air()
+	var/diff_temp = (temperature - env.temperature) / env.group_multiplier / 4 //MAGIC NUMBER ALERT!!!!!!!
+	if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
+		var/altered_temp = max(env.temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * diff_temp), 0)
+		env.temperature = (diff_temp > 0) ? min(temperature, altered_temp) : max(temperature, altered_temp)
+		env.update_values()
+
 	if (--src.life < 1)
 		qdel(src)
 		return FALSE
@@ -28,6 +35,11 @@
 ///Extinguisher snowflake
 /obj/effect/particle_effect/water/extinguisher
 
+/obj/effect/particle_effect/water/extinguisher/Initialize(mapload)
+	. = ..()
+	if(reagents)
+		temperature = reagents.chem_temp
+
 /obj/effect/particle_effect/water/extinguisher/Move()
 	. = ..()
 	if(!reagents)
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index 92ab7d3f0cb..e77a27905a0 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -5,6 +5,7 @@
 	icon = 'icons/effects/effects.dmi'
 	resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
 	move_resist = INFINITY
+	flags_2 = NO_TEMP_CHANGE_2
 	obj_flags = NONE
 	vis_flags = VIS_INHERIT_PLANE
 	blocks_emissive = EMISSIVE_BLOCK_GENERIC
@@ -60,3 +61,7 @@
 
 /obj/effect/dummy/singularity_act()
 	return
+
+//PARIAH EDIT - PLASMA CONTAMINATION
+/obj/effect/contaminate()
+	return
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 88fb3bd7602..21a57199504 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -40,8 +40,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 			var/datum/component/wet_floor/WF = T.AddComponent(/datum/component/wet_floor)
 			WF.InheritComponent(slip)
 		if (copy_air)
-			var/turf/openTurf = T
-			T.air.copy_from(air)
+			T.return_air().copy_from(return_air())
 
 //wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself
 /turf/proc/TerraformTurf(path, new_baseturf, flags)
@@ -318,10 +317,11 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	..()
 	RemoveLattice()
 	if(!(flags & (CHANGETURF_IGNORE_AIR | CHANGETURF_INHERIT_AIR)))
-		Assimilate_Air()
+		//Assimilate_Air()
+		SSzas.mark_for_update(src)
 
 //////Assimilate Air//////
-/turf/open/proc/Assimilate_Air()
+/*/turf/open/proc/Assimilate_Air()
 	var/list/turf/turf_list = get_adjacent_open_turfs(src)
 	var/turf_count = LAZYLEN(turf_list)
 	if(blocks_air || !turf_count)
@@ -333,7 +333,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	var/energy = 0
 	var/heat_cap = 0
 	for(var/turf/T in turf_list)
-		var/datum/gas_mixture/turf_mix = T.air
+		var/datum/gas_mixture/turf_mix = T.return_air()
 		var/capacity = turf_mix.heat_capacity()
 		energy += turf_mix.temperature * capacity
 		heat_cap += capacity
@@ -347,8 +347,9 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 		total_gases[id] /= turf_count
 
 	for(var/turf/T as anything in turf_list)
-		T.air.copy_from(total)
+		T.return_air().copy_from(total)
 		SSzas.mark_for_update(T)
+*/
 /*
 /turf/open/proc/Assimilate_Air()
 	var/turf_count = LAZYLEN(atmos_adjacent_turfs)
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 3a7e3da9931..5dfdcfe2488 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -180,7 +180,7 @@
 	. = air.heat_capacity()
 
 /turf/open/GetTemperature()
-	. = air.temperature
+	. = return_air().temperature
 
 /turf/open/TakeTemperature(temp)
 	air.temperature += temp
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index 86d4c46115d..b938edd3bbd 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -97,8 +97,8 @@
 	..()
 	//atmos_overlay_types = null
 
-/turf/open/space/Assimilate_Air()
-	return
+/*/turf/open/space/Assimilate_Air()
+	return*/
 
 //IT SHOULD RETURN NULL YOU MONKEY, WHY IN TARNATION WHAT THE FUCKING FUCK
 /turf/open/space/remove_air(amount)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 364dbf9fa47..24cf2f70868 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -130,6 +130,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 /obj/effect/hotspot/process()
 	. = 1
+	if(QDELETED(src))
+		return PROCESS_KILL
 
 	//var/turf/simulated/my_tile = loc ZASTURF
 	var/turf/my_tile = loc
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 0447f522f29..7b40374d89c 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -18,9 +18,8 @@
 	. = ..()
 	temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - w_class, MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient
 
-/obj/proc/HandleObjectHeating(var/obj/item/heated_by, var/mob/user, var/adjust_temp)
+/atom/proc/adjust_temperature(adjust_temp, atom/heat_source)
 	if(ATOM_IS_TEMPERATURE_SENSITIVE(src))
-		visible_message(span_notice("\The [user] carefully heats \the [src] with \the [heated_by]."))
 		var/diff_temp = (adjust_temp - temperature)
 		if(diff_temp >= 0)
 			var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0)
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index f57d8a69cd5..d7c20e8af0b 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -52,6 +52,41 @@
 			if(TURF_HAS_VALID_ZONE(unsim))
 				SSzas.connect(unsim, src)
 
+///Yes. Massive copy paste. Pain.
+/turf/open/space/update_air_properties()
+	var/block
+	ATMOS_CANPASS_TURF(block, src, src)
+	if(block & AIR_BLOCKED)
+		//dbg(blocked)
+		return 1
+
+	#ifdef MULTIZAS
+	for(var/d = 1, d < 64, d *= 2)
+	#else
+	for(var/d = 1, d < 16, d *= 2)
+	#endif
+
+		var/turf/unsim = get_step(src, d)
+
+		if(!unsim)
+			continue
+
+		block = unsim.c_airblock(src)
+
+		if(block & AIR_BLOCKED)
+			//unsim.dbg(air_blocked, turn(180,d))
+			continue
+
+		var/r_block = c_airblock(unsim)
+
+		if(r_block & AIR_BLOCKED)
+			continue
+
+		if(!istype(unsim, /turf/open/space))
+			var/turf/sim = unsim
+			if(TURF_HAS_VALID_ZONE(sim))
+				SSzas.connect(sim, src)
+
 // Helper for can_safely_remove_from_zone().
 //ZASTURF - MACRO IM NOT COMMENTING THIS SHIT OUT
 #define GET_ZONE_NEIGHBOURS(T, ret) \
@@ -221,7 +256,6 @@
 
 			else if(verbose) log_admin("[d] has invalid zone.")
 			#endif
-
 		else
 
 			//Postponing connections to tiles until a zone is assured.
@@ -241,6 +275,8 @@
 	//At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug.
 
 	for(var/turf/T in postponed)
+		if(T.zone == src.zone)
+			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
 		SSzas.connect(src, T)
 
 /turf/proc/post_update_air_properties()
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 1d520237b4b..9b8f3189676 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -509,7 +509,7 @@
 
 /turf/open/proc/copy_air_with_tile(turf/open/target_turf)
 	if(istype(target_turf))
-		air.copy_from(target_turf.air)
+		return_air().copy_from(target_turf.return_air())
 
 /datum/gas_mixture/proc/leak_to_enviroment(datum/gas_mixture/environment)
 	pump_gas_passive(src, environment, calculate_transfer_moles(src, environment, src.return_pressure() - environment.return_pressure()))
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 391d156f517..8cf918b441f 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -51,7 +51,7 @@
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/Initialize(mapload)
 	. = ..()
-	AddElement(/datum/element/atmos_sensitive, mapload)
+	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/Destroy()
 	var/area/scrub_area = get_area(src)
@@ -62,6 +62,7 @@
 	SSradio.remove_object(src,frequency)
 	radio_connection = null
 	adjacent_turfs.Cut()
+	SSairmachines.stop_processing_machine(src)
 	return ..()
 
 ///adds a gas or list of gases to our filter_types. used so that the scrubber can check if its supposed to be processing after each change
@@ -78,7 +79,7 @@
 	if(!turf_gas)
 		return FALSE
 
-	check_atmos_process(our_turf, turf_gas, turf_gas.temperature)
+	COOLDOWN_RESET(src, check_turfs_cooldown)
 	return TRUE
 
 ///remove a gas or list of gases from our filter_types.used so that the scrubber can check if its supposed to be processing after each change
@@ -96,7 +97,7 @@
 	if(!turf_gas)
 		return FALSE
 
-	check_atmos_process(our_turf, turf_gas, turf_gas.temperature)
+	COOLDOWN_RESET(src, check_turfs_cooldown)
 	return TRUE
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/toggle_filters(filter_or_filters)
@@ -110,12 +111,10 @@
 	if(!isopenturf(our_turf))
 		return FALSE
 
-	var/datum/gas_mixture/turf_gas = our_turf.air
+	var/datum/gas_mixture/turf_gas = our_turf.return_air()
 
 	if(!turf_gas)
 		return FALSE
-
-	check_atmos_process(our_turf, turf_gas, turf_gas.temperature)
 	return TRUE
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/update_icon_nopipes()
@@ -212,23 +211,27 @@
 
 	return FALSE
 
-/obj/machinery/atmospherics/components/unary/vent_scrubber/atmos_expose(datum/gas_mixture/air, exposed_temperature)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/process_atmos()
 	if(welded || !is_operational)
-		return FALSE
-	if(!nodes[1] || !on)
+		return
+	if(!on || !nodes[1])
 		on = FALSE
-		return FALSE
+		return
+	if(!COOLDOWN_FINISHED(src, check_turfs_cooldown))
+		return
 	var/turf/open/us = loc
 	if(!istype(us))
 		return
-	scrub(us)
+	var/should_cooldown = TRUE
+	if(scrub(us))
+		should_cooldown = FALSE
 	if(widenet)
-		if(COOLDOWN_FINISHED(src, check_turfs_cooldown))
-			check_turfs()
-			COOLDOWN_START(src, check_turfs_cooldown, 2 SECONDS)
-
+		check_turfs()
 		for(var/turf/tile in adjacent_turfs)
-			scrub(tile)
+			if(scrub(tile))
+				should_cooldown = FALSE
+	if(should_cooldown)
+		COOLDOWN_START(src, check_turfs_cooldown, 5 SECONDS)
 	return TRUE
 
 ///filtered gases at or below this amount automatically get removed from the mix
@@ -297,20 +300,15 @@
 	var/old_scrubbing = scrubbing
 	var/old_filter_length = length(filter_types)
 
-	///whether we should attempt to start processing due to settings allowing us to take gas out of our environment
-	var/try_start_processing = FALSE
-
 	var/turf/open/our_turf = get_turf(src)
-	var/datum/gas_mixture/turf_gas = our_turf?.air
+	var/datum/gas_mixture/turf_gas = our_turf?.return_air()
 
 	var/atom/signal_sender = signal.data["user"]
 
 	if("power" in signal.data)
 		on = text2num(signal.data["power"])
-		try_start_processing = TRUE
 	if("power_toggle" in signal.data)
 		on = !on
-		try_start_processing = TRUE
 
 	if("widenet" in signal.data)
 		widenet = text2num(signal.data["widenet"])
@@ -319,10 +317,8 @@
 
 	if("scrubbing" in signal.data)
 		scrubbing = text2num(signal.data["scrubbing"])
-		try_start_processing = TRUE
 	if("toggle_scrubbing" in signal.data)
 		scrubbing = !scrubbing
-		try_start_processing = TRUE
 
 	if(scrubbing != old_scrubbing)
 		investigate_log(" was toggled to [scrubbing ? "scrubbing" : "siphon"] mode by [key_name(signal_sender)]",INVESTIGATE_ATMOS)
@@ -345,11 +341,6 @@
 	broadcast_status()
 	update_appearance()
 
-	if(!our_turf || !turf_gas)
-		try_start_processing = FALSE
-
-	if(try_start_processing)//check if our changes should make us start processing
-		check_atmos_process(our_turf, turf_gas, turf_gas.temperature)
 
 	if(length(filter_types) == old_filter_length && old_scrubbing == scrubbing && old_widenet == widenet)
 		return

From fa82440f49715fb96dffbfa7a342c534f5c1c6aa Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 10:47:08 -0400
Subject: [PATCH 033/200] fixes the overlay code w/ placeholders

---
 code/__DEFINES/atmospherics/ZAS.dm               |   2 +-
 code/__DEFINES/layers.dm                         |   1 +
 code/controllers/subsystem/zas.dm                |   2 --
 code/modules/atmospherics/ZAS/XGM/gas_data.dm    |   6 ++++--
 code/modules/atmospherics/ZAS/XGM/gases.dm       |   8 ++++++--
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm      |   2 +-
 code/modules/atmospherics/ZAS/Zone.dm            |   2 +-
 .../atmospherics/machinery/portable/canister.dm  |  10 ++++++----
 .../master_files/icons/effects/gas_overlays.dmi  | Bin 0 -> 7707 bytes
 .../master_files/icons/effects/tile_effects.dmi  | Bin 1514 -> 0 bytes
 10 files changed, 20 insertions(+), 13 deletions(-)
 create mode 100644 modular_pariah/master_files/icons/effects/gas_overlays.dmi
 delete mode 100644 modular_pariah/master_files/icons/effects/tile_effects.dmi

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 16f2c26141e..616fd777028 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,4 +1,4 @@
-#define ZASDBG
+//#define ZASDBG
 //#define MULTIZAS
 
 #define AIR_ALLOWED 0
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index f16f597a88a..b5366603493 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -115,6 +115,7 @@
 
 // ABOVE_GAME_PLANE layers
 //#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
+#define GAS_LAYER 5
 #define GASFIRE_LAYER 5.05
 #define RIPPLE_LAYER 5.1
 
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index dcf849cd7cc..5cfc0f8da3c 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -379,8 +379,6 @@ SUBSYSTEM_DEF(zas)
 	//ASSERT(B.zone)
 	ASSERT(A != B)
 	#endif
-	if(A.zone == B.zone)
-		var/scream
 	var/block = air_blocked(A,B)
 	if(block & AIR_BLOCKED) return
 
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index 532ce87360c..34e18b9583a 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -93,11 +93,13 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data) = new
 /obj/effect/gas_overlay
 	name = "gas"
 	desc = "You shouldn't be clicking this."
-	icon = 'modular_pariah/master_files/icons/effects/tile_effects.dmi'
+	icon = 'modular_pariah/master_files/icons/effects/gas_overlays.dmi'
 	icon_state = "generic"
-	layer = FIRE_LAYER
+	layer = GAS_LAYER
+	plane = ABOVE_GAME_PLANE
 	appearance_flags = RESET_COLOR|PIXEL_SCALE|TILE_BOUND
 	mouse_opacity = 0
+	vis_flags = NONE
 	var/gas_id
 
 /obj/effect/gas_overlay/proc/update_alpha_animation(var/new_alpha)
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 1f38fa75453..ad184f3e607 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -47,7 +47,8 @@
 	//and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is:
 	molar_mass = 0.405	// kg/mol
 
-	tile_color = "#ff9940"
+	//tile_color = "#ff9940"
+	tile_overlay = "phoron"
 	overlay_limit = 0.7
 	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL
 	breathed_product = /datum/reagent/toxin/plasma
@@ -59,6 +60,7 @@
 	name = "Nitrous Oxide"
 	specific_heat = 40	// J/(mol*K)
 	molar_mass = 0.044	// kg/mol. N2O
+	tile_overlay = "sleeping_agent"
 	flags = XGM_GAS_OXIDIZER //N2O is a powerful oxidizer
 	breathed_product = /datum/reagent/nitrous_oxide
 	symbol_html = "N<sub>2</sub>O"
@@ -100,6 +102,7 @@
 		tile_color = RANDOM_RGB
 		overlay_limit = 0.5
 
+
 /datum/xgm_gas/hydrogen
 	id = GAS_HYDROGEN
 	name = "Hydrogen"
@@ -180,7 +183,6 @@
 /datum/xgm_gas/nitricoxide
 	id = GAS_NO
 	name = "Nitric Oxide"
-
 	specific_heat = 10	// J/(mol*K)
 	molar_mass = 0.030	// kg/mol
 	flags = XGM_GAS_OXIDIZER
@@ -194,6 +196,8 @@
 	overlay_limit = 0.5
 	specific_heat = 5	// J/(mol*K)
 	molar_mass = 0.017	// kg/mol
+	tile_overlay = "chlorine"
+	overlay_limit = 0.1
 	flags = XGM_GAS_CONTAMINANT
 	//breathed_product = /datum/reagent/toxin/chlorine
 	symbol_html = "Cl"
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 9b8f3189676..194ff75e82e 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -368,7 +368,7 @@
 		var/pressure_mod = clamp(return_pressure() / ONE_ATMOSPHERE, 0, 2)
 		for(var/obj/effect/gas_overlay/O in graphic)
 			var/concentration_mod = clamp(gas[O.gas_id] / total_moles, 0.1, 1)
-			var/new_alpha = min(230, round(pressure_mod * concentration_mod * 180, 5))
+			var/new_alpha = min(240, round(pressure_mod * concentration_mod * 180, 5))
 			if(new_alpha != O.alpha)
 				O.update_alpha_animation(new_alpha)
 
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index cb183465d3a..0eeda7ec58e 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -162,7 +162,7 @@ Class Procs:
 	// Update gas overlays.
 	if(air.check_tile_graphic(graphic_add, graphic_remove))
 		//for(var/turf/simulated/T in contents)
-		for(var/turf/T in contents)
+		for(var/turf/open/T in contents)
 			T.update_graphic(graphic_add, graphic_remove)
 		graphic_add.len = 0
 		graphic_remove.len = 0
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 97f5962d66b..8eee12b0e2f 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -109,7 +109,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	pressure_limit = initial(pressure_limit) * (1 + 0.2 * random_quality)
 
 	update_appearance()
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	AddElement(/datum/element/volatile_gas_storage)
 	AddComponent(/datum/component/gas_leaker, leak_rate=0.01)
 
@@ -207,6 +206,12 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	gas_type = GAS_N2O
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#c63e3b#f7d5d3"
+
+/obj/machinery/portable_atmospherics/canister/chlorine
+	name = "Chlorine canister"
+	gas_type = GAS_CHLORINE
+	greyscale_config = /datum/greyscale_config/canister
+	greyscale_colors = "#b9d41b"
 /*
 /obj/machinery/portable_atmospherics/canister/nitrium
 	name = "Nitrium canister"
@@ -496,7 +501,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	. = ..()
 	if(!. || QDELETED(src))
 		return
-	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/atom_break(damage_flag)
 	. = ..()
@@ -573,8 +577,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		excited = TRUE
 	update_appearance()
 
-	return ..()
-
 /obj/machinery/portable_atmospherics/canister/ui_state(mob/user)
 	return GLOB.physical_state
 
diff --git a/modular_pariah/master_files/icons/effects/gas_overlays.dmi b/modular_pariah/master_files/icons/effects/gas_overlays.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..d4fa5ad522ff1c0553a274befb6364ae9b6a5993
GIT binary patch
literal 7707
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
V_PJX1`56EJ002ovPDHLkV1h*q7{UMm

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/icons/effects/tile_effects.dmi b/modular_pariah/master_files/icons/effects/tile_effects.dmi
deleted file mode 100644
index a1b92ff11dcb9f2167baf28d9daae8187d078c01..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1514
zcmV<G1r_><P)<h;3K|Lk000e1NJLTq002M$001Be1^@s6qMd$(0001XdQ@0+L}hbh
za%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex7wuvIWN;^NFm
z%}mcIfpCgT5=&AQY!#H!Q}a@bGLx0KI8!o<iWO`X47oVdiV|~EA#Aw1cmfKQ6<qyX
z6kL2gxd8NrCc=Qv(!2lw1uscNK~!jgwOPw@<2Vd#kaC>)|IeJm9>=joVGin+T3kEH
zidj~rM2i#}1o2K}=5MTH0&oFv1rRunw7J%10C#?K!Rzth`h(xxNJBIyKCAKY9sEX`
zlhJrKX0Fft=I;0tfXGZlM9s_^5y;E~frtY?)d(~lA~U1gCpr>NM8ss@YP0Z5W|k-T
zt)p9v#=?WuPw*w2hzRFBw3uY9MMTj~5|HGOnNvh0e+O3SgF?7P#Je3vhzEWE+;ZjA
z-z6DaB4X+AtAxzUk<deYQ3&^lc>4zay~mHt{D(g#+ZdU7A!AKaw!?!0XnYSo->_@Q
zj+{A1#2?PZSbg%n<4?Shh5L#f9^_@=d+>R|t|5-!BI2XNF94Qe`#u27nc1-3ifksy
zoNRc>qmDNF`@=o6t%I~KoCClw?B=8K0MIgXA%5cllgx^r9)GdF597u08+gIQzjFWj
zk~ajb_C8TcNv0&VjW9I>I65b3$Bl=TMm=nwv_$h*$*1hR(H99{<_DUGOhgygUqoPa
zauarqnr)x7MDvhjU1i+q>DH#qluZguw>)9J(TPBFW<CHsGE=nW{NA`eXJ+AhS8E9Y
zMq3UV{07*~LV~>VnOL=G#;(m_!oG05kyb4LCf?|jnPL|93=)EQXjidH!RU~Ph?bcT
z-l8;C^sbyQShc0{Ml11qpAa+)$6pM;=rD%AP^%qZ^e&t)0PaN+AtTjpSszvRrZfe2
zbS)xo*nI^+8@3zhHEg1%uUKt*0Z<eQ{cwEm_;P%DxkSVryRQ(w==S(6A}aAq;Q`<H
z@jG^J+dPg(gzQ@CxY-}4cdTmHGb@v-COCJJg<-g0H4%CK#Wja}D%Kl+hCdt6jxUoc
zCb&(5Wxu48LA8NN4`e6=+QrwVZ?tAkb7PKs4sn{}I*7l#z+Vg>ukfWZ6?^_6J1Q0l
z-ar+z2%vFDQ+bHVOsS{q-dUWKPw*8&h3_Wv3cs2u{fjQ&HvkctdBagPlTvz+u?c(r
zyk&q4U9N^<hpX779oTQ#Yk--wt~jcu@MpeP4kCPo#^njVCq<6GrQ?R*0L-#0EzFsD
z<wpX$n}j_tI3(;~G%$}oQ60n7a=Qua1&ZhPjTxx$Rq$wdUeM#KmMEOpFYqgX=H9en
z4T)}G@~jue*2<edIJ=Jc1mF@8!LYW9zAIF)J0iF9`T~DqL@B)a_6dH~IljPOLo1UO
zt$LLP?B4oebNAq0Syj9)r=N{yC2o%|A<Z`T9K`WuuFuNpm-xyAdqy;r-TlHEBByR&
zcF)hivfHQHp+ArhWp`KXh1O5uF91F!u&I#e>v^f**?z)MJ#YA@`U%R#N9uVcDQEi$
zL-joOo$e=iKj3UVuW`1Ypz82cJ#X7i^%J(V7vuH(*?z)MJ#XVwKcQfE4%%?*1n{su
z6?^Ke3J?sD3EDg9D~p`Dz6si5xH~5?eD4G>+n$0wsZx>z37xbZU-f}#FF2;oTTMPv
z&yV&KhU$3?_7jw~jnwm_{e+=<9)taag7JEOw4X3k&ttHkP=Mij{-^p0r|NkO_7fDp
zN9y^}e!@^akHLO|qQHiq=j!>N?k9Y^p0{(n!vD0Nu>Ft&A%m4dkgdy0`~UIYJLb2w
z%zVcl*8}V)kU?oypX`J&SS+=c_us-Ec6E3BZ7nn3h_6ELVffOlaHhrhnR@=G`U$7%
zc?|XwioFo=v-SK>^%MS6J#YA@`U#QizsLWtdj3281ZmKzdj1RiFZ&690cia=`?d<|
QRsaA107*qoM6N<$f;TbqKmY&$


From c40859547afdf9bb5e9d3e77dd59efd0c4195664 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 11:44:46 -0400
Subject: [PATCH 034/200] SSairmachines now recovers during MC failure

---
 code/controllers/subsystem/airmachines.dm | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
index ffe16f5ca0c..5f2827af1ba 100644
--- a/code/controllers/subsystem/airmachines.dm
+++ b/code/controllers/subsystem/airmachines.dm
@@ -42,6 +42,15 @@ SUBSYSTEM_DEF(airmachines)
 	msg += "EQ: [length(expansion_queue)]"
 	return ..()
 
+/datum/controller/subsystem/airmachines/Recover()
+	pipe_init_dirs_cache = SSairmachines.pipe_init_dirs_cache
+	networks = SSairmachines.networks
+	rebuild_queue = SSairmachines.rebuild_queue
+	expansion_queue = SSairmachines.expansion_queue
+	atmos_machinery = SSairmachines.atmos_machinery
+	current_run = SSairmachines.current_run
+	current_part = SSairmachines.current_part
+	return ..()
 
 /datum/controller/subsystem/airmachines/fire(resumed = FALSE)
 	var/timer = TICK_USAGE_REAL

From 59f7ea5205ae202661b00ec2b55b8cb2d24057f4 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 17:35:02 -0400
Subject: [PATCH 035/200] BURN BABY BURN. And glass cracking sounds

---
 code/__DEFINES/atmospherics/ZAS.dm            |   2 +-
 code/__DEFINES/~pariah_defines/sound.dm       |   1 +
 code/controllers/subsystem/airmachines.dm     |   2 +-
 code/game/atom_defense.dm                     |  10 +
 code/game/objects/structures/holosign.dm      |   4 +-
 code/game/objects/structures/window.dm        |  42 ++-
 code/modules/atmospherics/ZAS/Fire.dm         |   2 +-
 .../atmospherics/ZAS/zas_extras/inflatable.dm | 333 ++++++++++++++++++
 .../master_files/code/game/sound.dm           |   8 +
 .../master_files/icons/obj/inflatable.dmi     | Bin 0 -> 17220 bytes
 .../sound/effects/glass_crack1.ogg            | Bin 0 -> 6312 bytes
 .../sound/effects/glass_crack2.ogg            | Bin 0 -> 4486 bytes
 .../sound/effects/glass_crack3.ogg            | Bin 0 -> 5967 bytes
 .../sound/effects/glass_crack4.ogg            | Bin 0 -> 6812 bytes
 tgstation.dme                                 |   1 +
 15 files changed, 392 insertions(+), 13 deletions(-)
 create mode 100644 code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
 create mode 100644 modular_pariah/master_files/icons/obj/inflatable.dmi
 create mode 100644 modular_pariah/master_files/sound/effects/glass_crack1.ogg
 create mode 100644 modular_pariah/master_files/sound/effects/glass_crack2.ogg
 create mode 100644 modular_pariah/master_files/sound/effects/glass_crack3.ogg
 create mode 100644 modular_pariah/master_files/sound/effects/glass_crack4.ogg

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 616fd777028..16f2c26141e 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,4 +1,4 @@
-//#define ZASDBG
+#define ZASDBG
 //#define MULTIZAS
 
 #define AIR_ALLOWED 0
diff --git a/code/__DEFINES/~pariah_defines/sound.dm b/code/__DEFINES/~pariah_defines/sound.dm
index 07cde8f775b..573c990e817 100644
--- a/code/__DEFINES/~pariah_defines/sound.dm
+++ b/code/__DEFINES/~pariah_defines/sound.dm
@@ -3,3 +3,4 @@
  * Sound effect defines, used in get_sfx.
  */
 #define SFX_KEYBOARD "keyboard"
+#define SFX_GLASS_CRACK "glass_crack"
diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
index 5f2827af1ba..02e872bc111 100644
--- a/code/controllers/subsystem/airmachines.dm
+++ b/code/controllers/subsystem/airmachines.dm
@@ -49,7 +49,7 @@ SUBSYSTEM_DEF(airmachines)
 	expansion_queue = SSairmachines.expansion_queue
 	atmos_machinery = SSairmachines.atmos_machinery
 	current_run = SSairmachines.current_run
-	current_part = SSairmachines.current_part
+	current_process = SSairmachines.current_process
 	return ..()
 
 /datum/controller/subsystem/airmachines/fire(resumed = FALSE)
diff --git a/code/game/atom_defense.dm b/code/game/atom_defense.dm
index 2755e3089de..2c4dab7debe 100644
--- a/code/game/atom_defense.dm
+++ b/code/game/atom_defense.dm
@@ -58,6 +58,16 @@
 	SHOULD_BE_PURE(TRUE)
 	return atom_integrity
 
+/**
+ * Retrieves the atom's current damage as a percentage where `100%` is `100`.
+ * If `use_raw_values` is `TRUE`, uses the raw var values instead of the `get_*` proc results.
+ */
+/atom/proc/get_integrity_percentage()
+	return round((get_integrity_lost())/max_integrity * 100)
+
+/atom/proc/get_integrity_lost()
+	return max_integrity - get_integrity()
+
 ///returns the damage value of the attack after processing the atom's various armor protections
 /atom/proc/run_atom_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0)
 	if(!uses_integrity)
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index 62daaf3102a..f2875d4c213 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -106,7 +106,7 @@
 	. = ..()
 	var/turf/local = get_turf(loc)
 	ADD_TRAIT(local, TRAIT_FIREDOOR_STOP, TRAIT_GENERIC)
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles(TRUE)
 
 /obj/structure/holosign/barrier/atmos/block_superconductivity() //Didn't used to do this, but it's "normal", and will help ease heat flow transitions with the players.
 	return TRUE
@@ -114,7 +114,7 @@
 /obj/structure/holosign/barrier/atmos/Destroy()
 	var/turf/local = get_turf(loc)
 	REMOVE_TRAIT(local, TRAIT_FIREDOOR_STOP, TRAIT_GENERIC)
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles()
 	return ..()
 
 /obj/structure/holosign/barrier/cyborg
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 514aa9be0b3..36a323c8cf5 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -33,6 +33,10 @@
 	var/hit_sound = 'sound/effects/glasshit.ogg'
 	/// If some inconsiderate jerk has had their blood spilled on this window, thus making it cleanable
 	var/bloodied = FALSE
+	///Snowflake for fire act damage
+	var/damage_per_fire_tick = 1
+	///The amount of heat needed to start damaging the window
+	var/melting_point = T0C + 3000 //See, because some dipass decided to make the station 50% glass, NT opted to infuse all the windows with plasma.
 
 /obj/structure/window/examine(mob/user)
 	. = ..()
@@ -58,7 +62,7 @@
 	if(reinf && anchored)
 		state = RWINDOW_SECURE
 
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles(TRUE)
 
 	if(fulltile)
 		setDir()
@@ -69,7 +73,6 @@
 
 	flags_1 |= ALLOW_DARK_PAINTS_1
 	RegisterSignal(src, COMSIG_OBJ_PAINTED, .proc/on_painted)
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	AddComponent(/datum/component/simple_rotation, ROTATION_NEEDS_ROOM, AfterRotation = CALLBACK(src,.proc/AfterRotation))
 
 	var/static/list/loc_connections = list(
@@ -277,9 +280,22 @@
 
 
 /obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
+	var/initial_damage_percentage = get_integrity_percentage()
 	. = ..()
 	if(.) //received damage
 		update_nearby_icons()
+		if(atom_integrity > 0)
+			playsound(src, get_sfx(SFX_GLASS_CRACK), 100, TRUE)
+			var/damage_percentage = get_integrity_percentage()
+			if (damage_percentage >= 75 && initial_damage_percentage < 75)
+				visible_message(span_warning("\The [src] looks like it's about to shatter!"))
+				playsound(loc, get_sfx(SFX_GLASS_CRACK), 100, 1)
+			else if (damage_percentage >= 50 && initial_damage_percentage < 50)
+				visible_message(span_warning("\The [src] looks seriously damaged!"))
+				playsound(loc, get_sfx(SFX_GLASS_CRACK), 100, 1)
+			else if (damage_percentage >= 25 && initial_damage_percentage < 25)
+				visible_message(span_warning("Cracks begin to appear in \the [src]!"))
+				playsound(loc, get_sfx(SFX_GLASS_CRACK), 100, 1)
 
 /obj/structure/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
 	switch(damage_type)
@@ -297,6 +313,7 @@
 		return
 	if(!disassembled)
 		playsound(src, break_sound, 70, TRUE)
+		visible_message(span_danger("\The [src] shatters into pieces!"), null, "You hear glass shatter!")
 		if(!(flags_1 & NODECONSTRUCT_1))
 			for(var/obj/item/shard/debris in spawnDebris(drop_location()))
 				transfer_fingerprints_to(debris) // transfer fingerprints to shards only
@@ -366,11 +383,9 @@
 	crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1))
 	. += crack_overlay
 
-/obj/structure/window/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > T0C + heat_resistance
-
-/obj/structure/window/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(round(air.return_volume() / 100), BURN, 0, 0)
+/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+	if (exposed_temperature > melting_point)
+		take_damage(round(air.return_volume() / 100), BURN, 0, 0)
 
 /obj/structure/window/get_dumping_location()
 	return null
@@ -412,6 +427,7 @@
 	glass_type = /obj/item/stack/sheet/rglass
 	rad_insulation = RAD_HEAVY_INSULATION
 	receive_ricochet_chance_mod = 1.1
+	melting_point = T0C + 4000
 
 //this is shitcode but all of construction is shitcode and needs a refactor, it works for now
 //If you find this like 4 years later and construction still hasn't been refactored, I'm so sorry for this //Adding a timestamp, I found this in 2020, I hope it's from this year -Lemon
@@ -522,6 +538,7 @@
 	explosion_block = 1
 	glass_type = /obj/item/stack/sheet/plasmaglass
 	rad_insulation = RAD_NO_INSULATION
+	melting_point = 25000 //Yeah fuck you
 
 /obj/structure/window/plasma/Initialize(mapload, direct)
 	. = ..()
@@ -612,6 +629,7 @@
 	smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
 	canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
 	glass_amount = 2
+	melting_point = 25000
 
 /obj/structure/window/plasma/fulltile/unanchored
 	anchored = FALSE
@@ -628,6 +646,7 @@
 	smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE)
 	canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE)
 	glass_amount = 2
+	melting_point = 28000
 
 /obj/structure/window/reinforced/plasma/fulltile/unanchored
 	anchored = FALSE
@@ -667,6 +686,8 @@
 	base_icon_state = "rice_window"
 	max_integrity = 150
 	glass_amount = 2
+	melting_point = T0C
+	damage_per_fire_tick = 15
 
 //there is a sub shuttle window in survival_pod.dm for mining pods
 /obj/structure/window/reinforced/shuttle//this is called reinforced because it is reinforced w/titanium
@@ -690,6 +711,8 @@
 	glass_type = /obj/item/stack/sheet/titaniumglass
 	glass_amount = 2
 	receive_ricochet_chance_mod = 1.2
+	melting_point = 8000
+	damage_per_fire_tick = 5
 
 /obj/structure/window/reinforced/shuttle/narsie_act()
 	add_atom_colour("#3C3434", FIXED_COLOUR_PRIORITY)
@@ -720,6 +743,7 @@
 	glass_type = /obj/item/stack/sheet/plastitaniumglass
 	glass_amount = 2
 	rad_insulation = RAD_HEAVY_INSULATION
+	melting_point = 10000000 //Yeah this thing isnt melting
 
 /obj/structure/window/reinforced/plasma/plastitanium/unanchored
 	anchored = FALSE
@@ -749,6 +773,8 @@
 	bash_sound = 'sound/weapons/slashmiss.ogg'
 	break_sound = 'sound/items/poster_ripped.ogg'
 	hit_sound = 'sound/weapons/slashmiss.ogg'
+	melting_point = T0C
+	damage_per_fire_tick = 15
 	var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1)
 	var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1)
 
@@ -790,7 +816,7 @@
 
 /obj/structure/window/paperframe/attackby(obj/item/W, mob/living/user)
 	if(W.get_temperature())
-		fire_act(W.get_temperature())
+		fire_act(null, W.get_temperature(), null)
 		return
 	if(user.combat_mode)
 		return ..()
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 24cf2f70868..6858ce84282 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -463,7 +463,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 
 //turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
-/turf/proc/adjacent_fire_act(turf/open/floor/source, datum/gas_mixture/adj_air, adjt_temp)
+/turf/proc/adjacent_fire_act(turf/open/floor/source, datum/gas_mixture/adj_air, adj_temp, adj_volume)
 	return
 
 //turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) ZASTURF
diff --git a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
new file mode 100644
index 00000000000..f299c1f4206
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
@@ -0,0 +1,333 @@
+/obj/item/inflatable
+	name = "inflatable"
+	w_class = WEIGHT_CLASS_NORMAL
+	icon = 'modular_pariah/master_files/icons/obj/inflatable.dmi'
+	max_integrity = 10
+	var/deploy_path = null
+
+/obj/item/inflatable/attack_self(mob/user, modifiers)
+	if(!deploy_path)
+		return
+	var/turf/T = get_turf(src)
+	if (isspaceturf(T))
+		to_chat(user, span_warning("You cannot use \the [src] in open space."))
+		return
+
+	user.visible_message(
+		span_notice("\The [user] starts inflating \an [src]."),
+		span_notice("You start inflating \the [src]."),
+		span_notice("You can hear rushing air."),
+		vision_distance = 5
+	)
+	if (!do_after(user, 1 SECONDS))
+		return
+
+	user.visible_message(
+		span_notice("\The [user] finishes inflating \an [src]."),
+		span_notice("You inflate \the [src]."),
+		vision_distance = 5
+	)
+	playsound(loc, 'sound/items/zip.ogg', 75, 1)
+	var/obj/structure/inflatable/R = new deploy_path(T)
+	transfer_fingerprints_to(R)
+	R.add_fingerprint(user)
+	update_integrity(R.get_integrity())
+	qdel(src)
+
+/obj/item/inflatable/wall
+	name = "inflatable wall"
+	desc = "A folded membrane which rapidly expands into a large cubical shape on activation."
+	icon_state = "folded_wall"
+	deploy_path = /obj/structure/inflatable/wall
+
+/obj/item/inflatable/door
+	name = "inflatable door"
+	desc = "A folded membrane which rapidly expands into a simple door on activation."
+	icon_state = "folded_door"
+	deploy_path = /obj/structure/inflatable/door
+
+/obj/structure/inflatable
+	name = "inflatable"
+	desc = "An inflated membrane. Do not puncture."
+	density = TRUE
+	anchored = TRUE
+	opacity = 0
+	icon = 'modular_pariah/master_files/icons/obj/inflatable.dmi'
+	icon_state = "wall"
+	can_atmos_pass = CANPASS_DENSITY
+	max_integrity = 10
+
+
+	var/undeploy_path = null
+	var/taped
+
+	var/max_pressure_diff = 50 * ONE_ATMOSPHERE // In Baystation this is a Rigsuit level of protection
+	var/max_temp = 5000 //In Baystation this is the heat protection value of a space suit.
+
+/obj/structure/inflatable/wall
+	name = "inflatable wall"
+	undeploy_path = /obj/item/inflatable/wall
+	can_atmos_pass = CANPASS_NEVER
+
+/obj/structure/inflatable/New(location)
+	..()
+	update_nearby_tiles(need_rebuild=1)
+
+/obj/structure/inflatable/Initialize()
+	. = ..()
+	START_PROCESSING(SSobj, src)
+
+/obj/structure/inflatable/Destroy()
+	update_nearby_tiles()
+	STOP_PROCESSING(SSobj, src)
+	return ..()
+
+/obj/structure/inflatable/process()
+	check_environment()
+
+/obj/structure/inflatable/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
+	playsound(src, 'sound/effects/glasshit.ogg', 75, TRUE)
+
+/obj/structure/inflatable/proc/check_environment()
+	var/min_pressure = INFINITY
+	var/max_pressure = 0
+	var/max_local_temp = 0
+
+	for(var/check_dir in GLOB.cardinals)
+		var/turf/T = get_step(src, check_dir)
+		var/datum/gas_mixture/env = T.return_air()
+		var/pressure = env.return_pressure()
+		min_pressure = min(min_pressure, pressure)
+		max_pressure = max(max_pressure, pressure)
+		max_local_temp = max(max_local_temp, env.temperature)
+
+	if(prob(50) && (max_pressure - min_pressure > max_pressure_diff || max_local_temp > max_temp))
+		var/initial_damage_percentage = round(atom_integrity / max_integrity * 100)
+		take_damage(1)
+		var/damage_percentage = round(atom_integrity / max_integrity * 100)
+		if (damage_percentage >= 70 && initial_damage_percentage < 70)
+			visible_message(span_warning("\The [src] is barely holding up!"))
+		else if (damage_percentage >= 30 && initial_damage_percentage < 30)
+			visible_message(span_warning("\The [src] is taking damage!"))
+
+/obj/structure/inflatable/examine(mob/user)
+	. = ..()
+	if (taped)
+		to_chat(user, span_notice("It's being held together by duct tape."))
+
+/obj/structure/inflatable/attackby(obj/item/W, mob/user, params)
+	if(!istype(W)) //|| istype(W, /obj/item/inflatable_dispenser))
+		return
+
+	if(!isturf(user.loc))
+		return //can't do this stuff whilst inside objects and such
+	if(isliving(user))
+		var/mob/living/living_user = user
+		if(living_user.combat_mode)
+			if (W.sharpness & SHARP_POINTY || W.force > 10)
+				attack_generic(user, W.force, BRUTE)
+			return
+
+	if(istype(W, /obj/item/stack/sticky_tape) && (max_integrity - atom_integrity) >= 3)
+		if(taped)
+			to_chat(user, span_notice("\The [src] can't be patched any more with \the [W]!"))
+			return TRUE
+		else
+			taped = TRUE
+			to_chat(user, span_notice("You patch some damage in \the [src] with \the [W]!"))
+			repair_damage(3)
+			return TRUE
+
+	..()
+
+/obj/structure/inflatable/atom_break(damage_flag)
+	. = ..()
+	deflate(TRUE)
+
+/obj/structure/inflatable/proc/deflate(violent)
+	playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
+	if(violent)
+		visible_message("[src] rapidly deflates!")
+		var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc)
+		src.transfer_fingerprints_to(R)
+		qdel(src)
+	else
+		if(!undeploy_path)
+			return
+		visible_message("\The [src] slowly deflates.")
+		addtimer(CALLBACK(src, .proc/after_deflate), 5 SECONDS, TIMER_STOPPABLE)
+
+/obj/structure/inflatable/proc/after_deflate()
+	if(QDELETED(src))
+		return
+	var/obj/item/inflatable/R = new undeploy_path(src.loc)
+	src.transfer_fingerprints_to(R)
+	R.update_integrity(src.get_integrity())
+	qdel(src)
+
+/obj/structure/inflatable/verb/hand_deflate()
+	set name = "Deflate"
+	set category = "Object"
+	set src in oview(1)
+
+	if(!usr.Adjacent(src))
+		return FALSE
+	if(!usr.Adjacent(src))
+		return FALSE
+	if(!iscarbon(usr))
+		return FALSE
+
+	var/mob/living/carbon/user = usr
+	if(user.handcuffed || user.stat != CONSCIOUS || user.incapacitated())
+		return FALSE
+
+	verbs -= /obj/structure/inflatable/verb/hand_deflate
+	deflate()
+	return TRUE
+
+/obj/structure/inflatable/attack_generic(var/mob/user, var/damage, var/attack_verb)
+	. = ..()
+	if(.)
+		user.visible_message("<span class='danger'>[user] [attack_verb] open the [src]!</span>")
+	else
+		user.visible_message("<span class='danger'>[user] [attack_verb] at [src]!</span>")
+
+
+/obj/structure/inflatable/door //Based on mineral door code
+	name = "inflatable door"
+	density = TRUE
+	anchored = TRUE
+	opacity = 0
+
+	icon_state = "door_closed"
+	undeploy_path = /obj/item/inflatable/door
+
+	var/state = 0 //closed, 1 == open
+	var/isSwitchingStates = 0
+
+/obj/structure/inflatable/door/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral
+	if(isAI(user)) //so the AI can't open it
+		return
+
+/obj/structure/inflatable/door/attack_robot(mob/living/user)
+	if(get_dist(user,src) <= 1) //not remotely though
+		return TryToSwitchState(user)
+
+/obj/structure/inflatable/door/attack_hand(mob/user as mob)
+	. = ..()
+	if(.)
+		return
+	return TryToSwitchState(user)
+
+/obj/structure/inflatable/door/proc/TryToSwitchState(atom/user)
+	if(isSwitchingStates) return
+	if(ismob(user))
+		var/mob/M = user
+		if(M.client)
+			if(iscarbon(M))
+				var/mob/living/carbon/C = M
+				if(!C.handcuffed)
+					SwitchState()
+			else
+				SwitchState()
+
+/obj/structure/inflatable/door/proc/SwitchState()
+	if(state)
+		Close()
+	else
+		Open()
+
+/obj/structure/inflatable/door/proc/Open()
+	isSwitchingStates = 1
+	flick("door_opening",src)
+	addtimer(CALLBACK(src, .proc/FinishOpen), 1 SECONDS, TIMER_STOPPABLE)
+
+/obj/structure/inflatable/door/proc/FinishOpen()
+	set_density(0)
+	set_opacity(0)
+	state = 1
+	update_icon()
+	isSwitchingStates = 0
+	update_nearby_tiles()
+
+/obj/structure/inflatable/door/proc/Close()
+	// If the inflatable is blocked, don't close
+	for(var/turf/T in locs)
+		for(var/atom/movable/AM as anything in T)
+			if(AM.density)
+				return
+
+	isSwitchingStates = 1
+	flick("door_closing",src)
+	addtimer(CALLBACK(src, .proc/FinishClose), 1 SECONDS, TIMER_STOPPABLE)
+
+/obj/structure/inflatable/door/proc/FinishClose()
+	set_density(1)
+	set_opacity(0)
+	state = 0
+	update_icon()
+	isSwitchingStates = 0
+	update_nearby_tiles()
+
+/obj/structure/inflatable/door/update_icon()
+	. = ..()
+	if(state)
+		icon_state = "door_open"
+	else
+		icon_state = "door_closed"
+
+
+/obj/structure/inflatable/door/deflate(var/violent=0)
+	playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
+	if(violent)
+		visible_message("[src] rapidly deflates!")
+		var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc)
+		src.transfer_fingerprints_to(R)
+		qdel(src)
+	else
+		visible_message("[src] slowly deflates.")
+		spawn(50)
+			var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc)
+			src.transfer_fingerprints_to(R)
+			qdel(src)
+
+/obj/item/inflatable/torn
+	name = "torn inflatable wall"
+	desc = "A folded membrane which rapidly expands into a large cubical shape on activation. It is too torn to be usable."
+	icon = 'modular_pariah/master_files/icons/obj/inflatable.dmi'
+	icon_state = "folded_wall_torn"
+
+/obj/item/inflatable/torn/attack_self(mob/user)
+	to_chat(user, "<span class='notice'>The inflatable wall is too torn to be inflated!</span>")
+	add_fingerprint(user)
+
+/obj/item/inflatable/door/torn
+	name = "torn inflatable door"
+	desc = "A folded membrane which rapidly expands into a simple door on activation. It is too torn to be usable."
+	icon = 'modular_pariah/master_files/icons/obj/inflatable.dmi'
+	icon_state = "folded_door_torn"
+
+/obj/item/inflatable/door/torn/attack_self(mob/user)
+	to_chat(user, "<span class='notice'>The inflatable door is too torn to be inflated!</span>")
+	add_fingerprint(user)
+
+/obj/item/storage/briefcase/inflatable
+	name = "inflatable barrier box"
+	desc = "Contains inflatable walls and doors."
+	w_class = WEIGHT_CLASS_NORMAL
+	max_integrity = 150
+	force = 8
+	hitsound = SFX_SWING_HIT
+	throw_speed = 2
+	throw_range = 4
+	var/startswith = list(/obj/item/inflatable/door = 2, /obj/item/inflatable/wall = 3)
+
+/obj/item/storage/briefcase/inflatable/ComponentInitialize()
+	. = ..()
+	var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+	STR.set_holdable(list(/obj/item/inflatable))
+
+/obj/item/storage/briefcase/inflatable/PopulateContents()
+	for(var/path in startswith)
+		for(var/i in 1 to startswith[path])
+			new path(src)
diff --git a/modular_pariah/master_files/code/game/sound.dm b/modular_pariah/master_files/code/game/sound.dm
index fd542f6f946..7434392cd0c 100644
--- a/modular_pariah/master_files/code/game/sound.dm
+++ b/modular_pariah/master_files/code/game/sound.dm
@@ -9,4 +9,12 @@
 					'modular_pariah/modules/aesthetics/computer/sound/keypress4.ogg',
 					'modular_pariah/modules/aesthetics/computer/sound/keystroke4.ogg',
 				)
+			if(SFX_GLASS_CRACK)
+				soundin = pick(
+					'modular_pariah/master_files/sound/effects/glass_crack1.ogg',
+					'modular_pariah/master_files/sound/effects/glass_crack2.ogg',
+					'modular_pariah/master_files/sound/effects/glass_crack3.ogg',
+					'modular_pariah/master_files/sound/effects/glass_crack4.ogg',
+				)
+
 	return soundin
diff --git a/modular_pariah/master_files/icons/obj/inflatable.dmi b/modular_pariah/master_files/icons/obj/inflatable.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..403e39c6378cc2a3ce5c18b6d41f461f2c6af806
GIT binary patch
literal 17220
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
VZ;aea*c1Q&002ovPDHLkV1hNxiI@NY

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/sound/effects/glass_crack1.ogg b/modular_pariah/master_files/sound/effects/glass_crack1.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..0221b238d7f28fa8029dd86b0a7acd37fb53d6b6
GIT binary patch
literal 6312
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

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/sound/effects/glass_crack2.ogg b/modular_pariah/master_files/sound/effects/glass_crack2.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..e5e3702458842b7b7a75c787c19ad206b656d094
GIT binary patch
literal 4486
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
SKYzp!ekvqrT;qy^asLgDgd<r1

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/sound/effects/glass_crack3.ogg b/modular_pariah/master_files/sound/effects/glass_crack3.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..631c584462eff8d87c1edd9b5cd076bc3a4b0e3a
GIT binary patch
literal 5967
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
QNrWIl@@<5b1hnqI0gb8p+yDRo

literal 0
HcmV?d00001

diff --git a/modular_pariah/master_files/sound/effects/glass_crack4.ogg b/modular_pariah/master_files/sound/effects/glass_crack4.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..5d6302e88b2bbde0b6444b40175c4e468763f9af
GIT binary patch
literal 6812
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

literal 0
HcmV?d00001

diff --git a/tgstation.dme b/tgstation.dme
index 946f288e01c..5b668201abe 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2366,6 +2366,7 @@
 #include "code\modules\atmospherics\ZAS\XGM\gases.dm"
 #include "code\modules\atmospherics\ZAS\XGM\xgm_immutable_gas_mixture.dm"
 #include "code\modules\atmospherics\ZAS\Zone.dm"
+#include "code\modules\atmospherics\ZAS\zas_extras\inflatable.dm"
 #include "code\modules\atmospherics\ZAS\_docs.dm"
 #include "code\modules\atmospherics\ZAS\Airflow.dm"
 #include "code\modules\atmospherics\ZAS\Atom.dm"

From 0c7b8fc42c20211390d496cfe15a4ded6f244053 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:01:37 -0400
Subject: [PATCH 036/200] temp removals

---
 code/modules/modular_computers/hardware/job_disk.dm | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/code/modules/modular_computers/hardware/job_disk.dm b/code/modules/modular_computers/hardware/job_disk.dm
index 0593ea29ee0..3b1b27d6ba4 100644
--- a/code/modules/modular_computers/hardware/job_disk.dm
+++ b/code/modules/modular_computers/hardware/job_disk.dm
@@ -22,7 +22,7 @@
 
 	if(disk_flags & DISK_POWER)
 		progs_to_store += new /datum/computer_file/program/power_monitor(src)
-		progs_to_store += new /datum/computer_file/program/supermatter_monitor(src)
+		//progs_to_store += new /datum/computer_file/program/supermatter_monitor(src)
 
 	if(disk_flags & DISK_ATMOS)
 		progs_to_store += new /datum/computer_file/program/atmosscan(src)
@@ -65,8 +65,8 @@
 	if(disk_flags & DISK_BUDGET)
 		progs_to_store += new /datum/computer_file/program/budgetorders(src)
 
-	if(disk_flags & DISK_STATUS)
-		progs_to_store += new /datum/computer_file/program/status(src)
+	/*if(disk_flags & DISK_STATUS)
+		progs_to_store += new /datum/computer_file/program/status(src)*/
 
 	for (var/datum/computer_file/program/prog in progs_to_store)
 		prog.usage_flags = PROGRAM_ALL

From eb1522b5c4a6f1319bb0e818fddf384747735fd7 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:19:59 -0400
Subject: [PATCH 037/200] All linters fixed

---
 code/datums/diseases/advance/symptoms/heal.dm       |  5 ++---
 code/game/machinery/shieldgen.dm                    |  9 ++++-----
 code/game/objects/structures/mineral_doors.dm       | 13 ++++---------
 .../objects/structures/transit_tubes/station.dm     |  4 +---
 code/game/turfs/closed/minerals.dm                  |  9 ++++++---
 code/modules/antagonists/blob/structures/_blob.dm   |  4 ++--
 .../components/unary_devices/vent_scrubber.dm       |  7 ++-----
 .../modules/atmospherics/machinery/portable/pump.dm |  2 +-
 code/modules/mapping/map_template.dm                |  5 +++--
 9 files changed, 25 insertions(+), 33 deletions(-)

diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index 648fa0070c2..1d39d442090 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -515,15 +515,14 @@
 
 /datum/symptom/heal/plasma/CanHeal(datum/disease/advance/A)
 	var/mob/living/M = A.affected_mob
-	var/datum/gas_mixture/environment
-	var/list/gases
+	var/datum/gas_mixture/environment = M.loc.return_air()
 
 	. = 0
 
 	if(M.loc)
 		environment = M.loc.return_air()
 	if(environment && environment.get_gas(GAS_PLASMA))
-		. += power * min(0.5, environment.get_gas(GAS_PLASMA) * HEALING_PER_MOL)
+		. += power * min(0.5, environment.gas[GAS_PLASMA] * HEALING_PER_MOL)
 	if(M.reagents.has_reagent(/datum/reagent/toxin/plasma, needs_metabolizing = TRUE))
 		. += power * 0.75 //Determines how much the symptom heals if injected or ingested
 
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 8b29cba2d28..7798c13477f 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -14,16 +14,15 @@
 /obj/structure/emergency_shield/Initialize(mapload)
 	. = ..()
 	setDir(pick(GLOB.cardinals))
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles(TRUE)
 
 /obj/structure/emergency_shield/Destroy()
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles()
 	. = ..()
 
 /obj/structure/emergency_shield/Move()
-	var/turf/T = loc
-	/*. = ..()
-	move_update_air(T)*/
+	. = ..()
+	update_nearby_tiles()
 
 /obj/structure/emergency_shield/emp_act(severity)
 	. = ..()
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index ab9b1f7a944..ccfc6c74bf0 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -36,17 +36,12 @@
 	//air_update_turf(TRUE, TRUE)
 
 /obj/structure/mineral_door/Destroy()
-	if(!door_opened)
-		//air_update_turf(TRUE, FALSE)
 	. = ..()
+	update_nearby_tiles()
 
 /obj/structure/mineral_door/Move()
-	var/turf/T = loc
 	. = ..()
-	/*
-	if(!door_opened)
-		move_update_air(T)
-	*/
+	update_nearby_tiles()
 
 /obj/structure/mineral_door/Bumped(atom/movable/AM)
 	..()
@@ -106,7 +101,7 @@
 	set_density(FALSE)
 	door_opened = TRUE
 	layer = OPEN_DOOR_LAYER
-	//air_update_turf(TRUE, FALSE)
+	update_nearby_tiles()
 	update_appearance()
 	isSwitchingStates = FALSE
 
@@ -127,7 +122,7 @@
 	set_opacity(TRUE)
 	door_opened = FALSE
 	layer = initial(layer)
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles()
 	update_appearance()
 	isSwitchingStates = FALSE
 
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index 1072a24a227..111ab281c51 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -169,9 +169,7 @@
 	if(QDELETED(pod))
 		return
 	var/datum/gas_mixture/floor_mixture = loc.return_air()
-	/*if(pod.air_contents.equalize(floor_mixture)) //equalize the pod's mix with the tile it's on
-		air_update_turf(FALSE, FALSE)
-	*/
+	pod.air_contents.share_ratio(floor_mixture, 1)
 
 /obj/structure/transit_tube/station/init_tube_dirs()
 	switch(dir)
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index a300002430b..2004f89a951 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -131,7 +131,8 @@
 	var/old_type = type
 	if(defer_change) // TODO: make the defer change var a var for any changeturf flag
 		flags = CHANGETURF_DEFER_CHANGE
-	var/turf/open/mined = ScrapeAway(null, flags)
+	ScrapeAway(null, flags)
+	SSzas.mark_for_update(src)
 	addtimer(CALLBACK(src, .proc/AfterChange, flags, old_type), 1, TIMER_UNIQUE)
 	playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) //beautiful destruction
 	//mined.update_visuals()
@@ -599,7 +600,8 @@
 	var/old_type = type
 	if(defer_change) // TODO: make the defer change var a var for any changeturf flag
 		flags = CHANGETURF_DEFER_CHANGE
-	var/turf/open/mined = ScrapeAway(null, flags)
+	ScrapeAway(null, flags)
+	SSzas.mark_for_update(src)
 	addtimer(CALLBACK(src, .proc/AfterChange, flags, old_type), 1, TIMER_UNIQUE)
 	//mined.update_visuals()
 
@@ -657,7 +659,8 @@
 	var/old_type = type
 	if(defer_change) // TODO: make the defer change var a var for any changeturf flag
 		flags = CHANGETURF_DEFER_CHANGE
-	var/turf/open/mined = ScrapeAway(null, flags)
+	ScrapeAway(null, flags)
+	SSzas.mark_for_update(src)
 	addtimer(CALLBACK(src, .proc/AfterChange, flags, old_type), 1, TIMER_UNIQUE)
 	playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) //beautiful destruction
 	//mined.update_visuals()
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 332c595e7c2..92f12dc4d32 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -42,7 +42,7 @@
 	setDir(pick(GLOB.cardinals))
 	update_appearance()
 	if(atmosblock)
-		//air_update_turf(TRUE, TRUE)
+		update_nearby_tiles(TRUE)
 	ConsumeTile()
 	if(!QDELETED(src)) //Consuming our tile can in rare cases cause us to del
 		AddElement(/datum/element/swabable, CELL_LINE_TABLE_BLOB, CELL_VIRUS_TABLE_GENERIC, 2, 2)
@@ -69,7 +69,7 @@
 /obj/structure/blob/Destroy()
 	if(atmosblock)
 		atmosblock = FALSE
-		//air_update_turf(TRUE, FALSE)
+		update_nearby_tiles()
 	if(overmind)
 		overmind.all_blobs -= src
 		overmind.blobs_legit -= src  //if it was in the legit blobs list, it isn't now
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 f2d493572df..1d6e3b77a43 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -252,9 +252,6 @@
 			var/datum/gas_mixture/filtered_out = new
 			filtered_out.temperature = environment.temperature
 
-			///maximum percentage of the turfs gas we can filter
-			var/removal_ratio =  min(1, volume_rate / environment.volume)
-
 			var/total_moles_to_remove = 0
 			for(var/gas in filter_types & environment.get_gases())
 				total_moles_to_remove += environment.gas[gas]
@@ -300,8 +297,8 @@
 	var/old_scrubbing = scrubbing
 	var/old_filter_length = length(filter_types)
 
-	var/turf/open/our_turf = get_turf(src)
-	var/datum/gas_mixture/turf_gas = our_turf?.return_air()
+	//var/turf/open/our_turf = get_turf(src)
+	//var/datum/gas_mixture/turf_gas = our_turf?.return_air()
 
 	var/atom/signal_sender = signal.data["user"]
 
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 6288a60b7e6..73915fb4ede 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -65,7 +65,7 @@
 	if(holding)
 		environment = holding.air_contents
 	else
-		environment = loc.return_air()
+		environment = local_turf.return_air()
 
 	if(direction == PUMP_OUT)
 		pressure_delta = target_pressure - environment.return_pressure()
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index 0f9b5a3b655..29bdb96720d 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -154,8 +154,9 @@
 	if(T.y+height > world.maxy)
 		return
 
-	var/list/border = block(locate(max(T.x-1, 1), max(T.y-1, 1),  T.z),
-							locate(min(T.x+width+1, world.maxx), min(T.y+height+1, world.maxy), T.z))
+	/*var/list/border = block(locate(max(T.x-1, 1), max(T.y-1, 1),  T.z),
+							locate(min(T.x+width+1, world.maxx), min(T.y+height+1, world.maxy), T.z))*/
+	stack_trace("This is a reminder that kapu touched this code")
 	/*
 	for(var/L in border)
 		var/turf/turf_to_disable = L

From 23fae83e224011e51654258e94f8e40d64d3789a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:36:05 -0400
Subject: [PATCH 038/200] grumble

---
 code/__DEFINES/atmospherics/ZAS.dm               |  8 ++++----
 code/_onclick/adjacent.dm                        |  2 +-
 code/modules/atmospherics/ZAS/Debug.dm           | 16 ++++++++--------
 code/modules/atmospherics/ZAS/Fire.dm            |  8 ++++----
 code/modules/atmospherics/ZAS/Temperature.dm     |  2 +-
 code/modules/atmospherics/ZAS/Turf.dm            | 10 +++++-----
 code/modules/atmospherics/ZAS/XGM/gas_data.dm    |  2 +-
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm      |  8 ++++----
 code/modules/atmospherics/ZAS/_docs.dm           |  2 +-
 .../modules/atmospherics/ZAS/atmos_primitives.dm | 16 ++++++++--------
 .../atmospherics/ZAS/zas_extras/inflatable.dm    |  4 ++--
 .../carbon/human/species_types/plasmamen.dm      |  2 +-
 12 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 16f2c26141e..336c8c981a9 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -27,8 +27,8 @@
 #define TURF_HAS_VALID_ZONE(T) (!istype(T, /turf/open/space) && T:zone && !T:zone:invalid)
 #ifdef MULTIZAS
 
-var/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
-var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
+GLOBAL_REAL(csrfz_check, /list/) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
+GLOBAL_REAL(gzn_check, /list/) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 
 #define ATMOS_CANPASS_TURF(ret,A,B) \
 	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
@@ -72,8 +72,8 @@ var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 	}
 #else
 
-var/list/csrfz_check = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
-var/list/gzn_check = list(NORTH, SOUTH, EAST, WEST)
+GLOBAL_REAL(csrfz_check, /list/) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
+GLOBAL_REAL(gzn_check, /list/) = list(NORTH, SOUTH, EAST, WEST)
 
 #define ATMOS_CANPASS_TURF(ret,A,B) \
 	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm
index 5b30c07d1eb..534a6a80a12 100644
--- a/code/_onclick/adjacent.dm
+++ b/code/_onclick/adjacent.dm
@@ -104,7 +104,7 @@
 * If you are in the same turf, always true
 * If you are not adjacent, then false
 */
-/turf/proc/AdjacentQuick(var/atom/neighbor, var/atom/target = null)
+/turf/proc/AdjacentQuick(atom/neighbor, atom/target = null)
 	var/turf/T0 = get_turf(neighbor)
 	if(T0 == src)
 		return 1
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index 6fc387fc79e..ca2405550c0 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -1,11 +1,11 @@
-var/image/assigned = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "assigned")
-var/image/created = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "created")
-var/image/merged = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "merged")
-var/image/invalid_zone = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "invalid")
-var/image/air_blocked = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "block")
-var/image/zone_blocked = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "zoneblock")
-var/image/blocked = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "fullblock")
-var/image/mark = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "mark")
+GLOBAL_REAL(assigned, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "assigned")
+GLOBAL_REAL(created, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "created")
+GLOBAL_REAL(merged, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "merged")
+GLOBAL_REAL(invalid_zone, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "invalid")
+GLOBAL_REAL(air_blocked, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "block")
+GLOBAL_REAL(zone_blocked, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "zoneblock")
+GLOBAL_REAL(blocked, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "fullblock")
+GLOBAL_REAL(mark, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "mark")
 
 /connection_edge/var/dbg_out = 0
 
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 6858ce84282..2e996122b8d 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -66,7 +66,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	if(!fire_tiles.len)
 		SSzas.active_fire_zones.Remove(src)
 
-/zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0)
+/zone/proc/remove_liquidfuel(used_liquid_fuel, remove_fire=0)
 	if(!fuel_objs.len)
 		return
 
@@ -208,7 +208,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	firelevel = fl
 	SSzas.active_hotspots.Add(src)
 
-/obj/effect/hotspot/proc/fire_color(var/env_temperature)
+/obj/effect/hotspot/proc/fire_color(env_temperature)
 	var/temperature = max(4000*sqrt(firelevel/SSzas.settings.fire_firelevel_multiplier), env_temperature)
 	return heat2color(temperature)
 
@@ -402,13 +402,13 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	return max( 0, firelevel)
 
 
-/mob/living/proc/FireBurn(var/firelevel, var/last_temperature, var/pressure)
+/mob/living/proc/FireBurn(firelevel, last_temperature, pressure)
 	var/mx = 5 * firelevel/SSzas.settings.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
 	apply_damage(2.5*mx, BURN)
 	return mx
 
 
-/mob/living/carbon/human/FireBurn(var/firelevel, var/last_temperature, var/pressure)
+/mob/living/carbon/human/FireBurn(firelevel, last_temperature, pressure)
 	//Burns mobs due to fire. Respects heat transfer coefficients on various body parts.
 	//Due to TG reworking how fireprotection works, this is kinda less meaningful.
 
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 7b40374d89c..6f739b11cca 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -4,7 +4,7 @@
 /atom/var/temperature = T20C
 /atom/var/temperature_coefficient = MAX_TEMPERATURE_COEFFICIENT
 
-/atom/movable/Entered(var/atom/movable/atom, var/atom/old_loc)
+/atom/movable/Entered(atom/movable/atom, atom/old_loc, list/atom/old_locs)
 	. = ..()
 	QUEUE_TEMPERATURE_ATOMS(atom)
 
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index d7c20e8af0b..85e7fe2d581 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -377,7 +377,7 @@
 /turf/open/space/atmos_spawn_air()
 	return
 
-/proc/turf_contains_dense_objects(var/turf/T)
+/proc/turf_contains_dense_objects(turf/T)
 	return T.contains_dense_objects()
 
 /turf/proc/contains_dense_objects()
@@ -389,10 +389,10 @@
 	return 0
 
 /turf/proc/TryGetNonDenseNeighbour()
-  for(var/d in GLOB.cardinals)
-    var/turf/T = get_step(src, d)
-    if (T && !turf_contains_dense_objects(T))
-      return T
+	for(var/d in GLOB.cardinals)
+	var/turf/T = get_step(src, d)
+	if (T && !turf_contains_dense_objects(T))
+		return T
 
 /turf/proc/get_atmos_adjacent_turfs()
 	var/list/adjacent_turfs = list()
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index 34e18b9583a..a59e99f620b 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -102,7 +102,7 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data) = new
 	vis_flags = NONE
 	var/gas_id
 
-/obj/effect/gas_overlay/proc/update_alpha_animation(var/new_alpha)
+/obj/effect/gas_overlay/proc/update_alpha_animation(new_alpha)
 	animate(src, alpha = new_alpha)
 	alpha = new_alpha
 	animate(src, alpha = 0.8 * new_alpha, time = 10, easing = SINE_EASING | EASE_OUT, loop = -1)
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 194ff75e82e..66dca038ee0 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -142,7 +142,7 @@
 
 
 //Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB.
-/datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy)
+/datum/gas_mixture/proc/add_thermal_energy(thermal_energy)
 
 	if (total_moles == 0)
 		return 0
@@ -157,7 +157,7 @@
 	return thermal_energy
 
 //Returns the thermal energy change required to get to a new temperature
-/datum/gas_mixture/proc/get_thermal_energy_change(var/new_temperature)
+/datum/gas_mixture/proc/get_thermal_energy_change(new_temperature)
 	return heat_capacity()*(max(new_temperature, 0) - temperature)
 
 
@@ -187,7 +187,7 @@
 	So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way
 	which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures.
 */
-/datum/gas_mixture/proc/specific_entropy_gas(var/gasid)
+/datum/gas_mixture/proc/specific_entropy_gas(gasid)
 	if (!(gasid in gas) || gas[gasid] == 0)
 		return SPECIFIC_ENTROPY_VACUUM	//that gas isn't here
 
@@ -308,7 +308,7 @@
 
 
 //Checks if we are within acceptable range of another gas_mixture to suspend processing or merge.
-/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample, var/vacuum_exception = 0)
+/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample, vacuum_exception = 0)
 	if(!sample) return 0
 
 	if(vacuum_exception)
diff --git a/code/modules/atmospherics/ZAS/_docs.dm b/code/modules/atmospherics/ZAS/_docs.dm
index 41372ea2a06..822c8ac7b2a 100644
--- a/code/modules/atmospherics/ZAS/_docs.dm
+++ b/code/modules/atmospherics/ZAS/_docs.dm
@@ -25,4 +25,4 @@ Notes for people who used ZAS before:
 	for(var/connection_edge/zone/edge in zone.edges)
 		var/zone/connected_zone = edge.get_connected_zone(zone)
 
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index a56ff737f08..cd5f5fb0feb 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -27,7 +27,7 @@
 
 /obj/machinery/atmospherics/var/debug = 0
 
-/client/proc/atmos_toggle_debug(var/obj/machinery/atmospherics/M in world)
+/client/proc/atmos_toggle_debug(obj/machinery/atmospherics/M in world)
 	set name = "Toggle Debug Messages"
 	set category = "Debug"
 	M.debug = !M.debug
@@ -37,7 +37,7 @@
 //Moves gas from one gas_mixture to another and returns the amount of power needed (assuming 1 second), or -1 if no gas was pumped.
 //transfer_moles - Limits the amount of moles to transfer. The actual amount of gas moved may also be limited by available_power, if given.
 //available_power - the maximum amount of power that may be used when moving gas. If null then the transfer is not limited by power.
-/proc/pump_gas(var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/transfer_moles = null, var/available_power = null)
+/proc/pump_gas(datum/gas_mixture/source, datum/gas_mixture/sink, transfer_moles = null, available_power = null)
 	if (source.total_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing
 		return -1
 
@@ -122,7 +122,7 @@
 //filtering - A list of gasids to be scrubbed from source
 //total_transfer_moles - Limits the amount of moles to scrub. The actual amount of gas scrubbed may also be limited by available_power, if given.
 //available_power - the maximum amount of power that may be used when scrubbing gas. If null then the scrubbing is not limited by power.
-/proc/scrub_gas(var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/total_transfer_moles = null, var/available_power = null)
+/proc/scrub_gas(list/filtering, datum/gas_mixture/source, datum/gas_mixture/sink, total_transfer_moles = null, available_power = null)
 	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
 		return -1
 
@@ -195,7 +195,7 @@
 //filtering - A list of gasids to be filtered. These gasses get moved to sink_filtered, while the other gasses get moved to sink_clean.
 //total_transfer_moles - Limits the amount of moles to input. The actual amount of gas filtered may also be limited by available_power, if given.
 //available_power - the maximum amount of power that may be used when filtering gas. If null then the filtering is not limited by power.
-/proc/filter_gas(var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink_filtered, var/datum/gas_mixture/sink_clean, var/total_transfer_moles = null, var/available_power = null)
+/proc/filter_gas(list/filtering, datum/gas_mixture/source, datum/gas_mixture/sink_filtered, datum/gas_mixture/sink_clean, total_transfer_moles = null, available_power = null)
 	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
 		return -1
 
@@ -266,7 +266,7 @@
 //For omni devices. Instead filtering is an associative list mapping gasids to gas mixtures.
 //I don't like the copypasta, but I decided to keep both versions of gas filtering as filter_gas is slightly faster (doesn't create as many temporary lists, doesn't call update_values() as much)
 //filter_gas can be removed and replaced with this proc if need be.
-/proc/filter_gas_multi(var/obj/machinery/M, var/list/filtering, var/datum/gas_mixture/source, var/datum/gas_mixture/sink_clean, var/total_transfer_moles = null, var/available_power = null)
+/proc/filter_gas_multi(obj/machinery/M, list/filtering, datum/gas_mixture/source, datum/gas_mixture/sink_clean, total_transfer_moles = null, available_power = null)
 	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
 		return -1
 
@@ -345,7 +345,7 @@
 
 //Similar deal as the other atmos process procs.
 //mix_sources maps input gas mixtures to mix ratios. The mix ratios MUST add up to 1.
-/proc/mix_gas(var/list/mix_sources, var/datum/gas_mixture/sink, var/total_transfer_moles = null, var/available_power = null)
+/proc/mix_gas(list/mix_sources, datum/gas_mixture/sink, total_transfer_moles = null, available_power = null)
 	if (!mix_sources.len)
 		return -1
 
@@ -432,7 +432,7 @@
 	return specific_power
 
 //Calculates the amount of power needed to move one mole of a certain gas from source to sink.
-/proc/calculate_specific_power_gas(var/gasid, datum/gas_mixture/source, datum/gas_mixture/sink)
+/proc/calculate_specific_power_gas(gasid, datum/gas_mixture/source, datum/gas_mixture/sink)
 	//Calculate the amount of energy required
 	var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature
 	var/specific_entropy = sink.specific_entropy_gas(gasid) - source.specific_entropy_gas(gasid) //sink is gaining moles, source is loosing
@@ -447,7 +447,7 @@
 //Calculates the APPROXIMATE amount of moles that would need to be transferred to change the pressure of sink by pressure_delta
 //If set, sink_volume_mod adjusts the effective output volume used in the calculation. This is useful when the output gas_mixture is
 //part of a pipenetwork, and so it's volume isn't representative of the actual volume since the gas will be shared across the pipenetwork when it processes.
-/proc/calculate_transfer_moles(datum/gas_mixture/source, datum/gas_mixture/sink, var/pressure_delta, var/sink_volume_mod=0)
+/proc/calculate_transfer_moles(datum/gas_mixture/source, datum/gas_mixture/sink, pressure_delta, sink_volume_mod=0)
 	if(source.temperature == 0 || source.total_moles == 0) return 0
 
 	var/output_volume = (sink.volume * sink.group_multiplier) + sink_volume_mod
diff --git a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
index f299c1f4206..24dee699f89 100644
--- a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
+++ b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
@@ -185,7 +185,7 @@
 	deflate()
 	return TRUE
 
-/obj/structure/inflatable/attack_generic(var/mob/user, var/damage, var/attack_verb)
+/obj/structure/inflatable/attack_generic(mob/user, damage, attack_verb)
 	. = ..()
 	if(.)
 		user.visible_message("<span class='danger'>[user] [attack_verb] open the [src]!</span>")
@@ -277,7 +277,7 @@
 		icon_state = "door_closed"
 
 
-/obj/structure/inflatable/door/deflate(var/violent=0)
+/obj/structure/inflatable/door/deflate(violent=0)
 	playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
 	if(violent)
 		visible_message("[src] rapidly deflates!")
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 983b05ee90a..bb198308ee9 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -74,7 +74,7 @@
 	if(!atmos_sealed && (!istype(H.w_uniform, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman) || !istype(H.gloves, /obj/item/clothing/gloves)))
 		var/datum/gas_mixture/environment = H.loc.return_air()
 		if(environment?.total_moles())
-			 /*if(environment.gases[/datum/gas/hypernoblium] && (environment.gases[/datum/gas/hypernoblium][MOLES]) >= 5)
+			/*if(environment.gases[/datum/gas/hypernoblium] && (environment.gases[/datum/gas/hypernoblium][MOLES]) >= 5)
 				if(H.on_fire && H.fire_stacks > 0)
 					H.adjust_fire_stacks(-10 * delta_time)*/
 			if(!HAS_TRAIT(H, TRAIT_NOFIRE) && !HAS_TRAIT(H, TRAIT_NOSELFIGNITION))

From f3370fa3e7d6f27215d9edbf8cadafa6e30a6e9c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:40:15 -0400
Subject: [PATCH 039/200] grumble 2

---
 code/modules/atmospherics/ZAS/Diagnostic.dm       | 2 +-
 code/modules/atmospherics/ZAS/atmos_primitives.dm | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index d67fec39512..da93192fcb5 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -17,7 +17,7 @@
 
 /client/var/list/zone_debug_images
 
-/client/proc/Test_ZAS_Connection(var/turf/T as turf) //ZASTURF
+/client/proc/Test_ZAS_Connection(turf/T as turf) //ZASTURF
 	set category = "Debug"
 	if(istype(T, /turf/open/space)) //ZASTURF
 		return
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index cd5f5fb0feb..95d9efbd07c 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -82,7 +82,7 @@
 	return power_draw
 
 //Gas 'pumping' proc for the case where the gas flow is passive and driven entirely by pressure differences (but still one-way).
-/proc/pump_gas_passive(var/datum/gas_mixture/source, var/datum/gas_mixture/sink, var/transfer_moles = null)
+/proc/pump_gas_passive(datum/gas_mixture/source, datum/gas_mixture/sink, transfer_moles = null)
 	if (source.total_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing
 		return -1
 
@@ -482,7 +482,7 @@
 // - Has between 17% and 30% oxygen
 // - Has temperature between -10C and 50C
 // - Has no or only minimal phoron or N2O
-/proc/get_atmosphere_issues(datum/gas_mixture/atmosphere, var/returntext = 0)
+/proc/get_atmosphere_issues(datum/gas_mixture/atmosphere, returntext = 0)
 	var/list/status = list()
 	if(!atmosphere)
 		status.Add("No atmosphere present.")

From 65a3a55f7c30299258d3f539687d44b73546260d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:42:55 -0400
Subject: [PATCH 040/200] fuck

---
 code/modules/atmospherics/ZAS/Turf.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 85e7fe2d581..5f58e1d7406 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -390,7 +390,7 @@
 
 /turf/proc/TryGetNonDenseNeighbour()
 	for(var/d in GLOB.cardinals)
-	var/turf/T = get_step(src, d)
+		var/turf/T = get_step(src, d)
 	if (T && !turf_contains_dense_objects(T))
 		return T
 

From 63ea3c7a51041b4058d0a8faee023e60b4802c96 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:48:53 -0400
Subject: [PATCH 041/200] FUCK

---
 code/game/objects/items/RCD.dm        | 2 +-
 code/modules/atmospherics/ZAS/Turf.dm | 5 +++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index e2f7b63f5c5..e91e9486b7e 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -1005,7 +1005,7 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
 						for(var/direction in GLOB.cardinals)
 							var/turf/C = get_step(W, direction)
 							var/list/dupes = checkdupes(C)
-							if((isspaceturf(C) || C.TryGetNonDenseNeighbour()) && !dupes.len)
+							if((isspaceturf(C) || C.open_directions) && !dupes.len)
 								candidates += C
 						if(!candidates.len)
 							to_chat(user, span_warning("Valid target not found..."))
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 5f58e1d7406..033c069fc9b 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -388,11 +388,12 @@
 			return 1
 	return 0
 
+///I literally don't know where this proc came from.
 /turf/proc/TryGetNonDenseNeighbour()
 	for(var/d in GLOB.cardinals)
 		var/turf/T = get_step(src, d)
-	if (T && !turf_contains_dense_objects(T))
-		return T
+		if (T && !turf_contains_dense_objects(T))
+			return T
 
 /turf/proc/get_atmos_adjacent_turfs()
 	var/list/adjacent_turfs = list()

From 1a4586e5ccf45e64fc0c627bc08c5499786be29f Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:58:48 -0400
Subject: [PATCH 042/200] Globals

---
 code/__DEFINES/atmospherics/ZAS.dm | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 336c8c981a9..666db30595f 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -27,8 +27,8 @@
 #define TURF_HAS_VALID_ZONE(T) (!istype(T, /turf/open/space) && T:zone && !T:zone:invalid)
 #ifdef MULTIZAS
 
-GLOBAL_REAL(csrfz_check, /list/) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
-GLOBAL_REAL(gzn_check, /list/) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
+GLOBAL_REAL(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
+GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 
 #define ATMOS_CANPASS_TURF(ret,A,B) \
 	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
@@ -72,8 +72,8 @@ GLOBAL_REAL(gzn_check, /list/) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 	}
 #else
 
-GLOBAL_REAL(csrfz_check, /list/) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
-GLOBAL_REAL(gzn_check, /list/) = list(NORTH, SOUTH, EAST, WEST)
+GLOBAL_REAL_VAR(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
+GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 
 #define ATMOS_CANPASS_TURF(ret,A,B) \
 	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \

From 4c244df8e873f079100fa5e09341e2dab6ea2d7b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 22 Apr 2022 23:58:55 -0400
Subject: [PATCH 043/200] wohops

---
 code/modules/atmospherics/ZAS/Debug.dm | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index ca2405550c0..cbb49ecf4ee 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -1,11 +1,11 @@
-GLOBAL_REAL(assigned, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "assigned")
-GLOBAL_REAL(created, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "created")
-GLOBAL_REAL(merged, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "merged")
-GLOBAL_REAL(invalid_zone, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "invalid")
-GLOBAL_REAL(air_blocked, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "block")
-GLOBAL_REAL(zone_blocked, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "zoneblock")
-GLOBAL_REAL(blocked, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "fullblock")
-GLOBAL_REAL(mark, /image/) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "mark")
+GLOBAL_REAL_VAR(image/assigned) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "assigned")
+GLOBAL_REAL_VAR(image/created) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "created")
+GLOBAL_REAL_VAR(image/merged) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "merged")
+GLOBAL_REAL_VAR(image/invalid_zone) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "invalid")
+GLOBAL_REAL_VAR(image/air_blocked) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "block")
+GLOBAL_REAL_VAR(image/zone_blocked) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "zoneblock")
+GLOBAL_REAL_VAR(image/blocked) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "fullblock")
+GLOBAL_REAL_VAR(image/mark) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "mark")
 
 /connection_edge/var/dbg_out = 0
 

From 2274615cbb2b8b573ac4a619e17251bb7cb0108a Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Sat, 23 Apr 2022 14:13:07 -0400
Subject: [PATCH 044/200] MINTEST: Atmos Equipment Addition

---
 _maps/map_files/debug/atmos_mintest.dmm | 1297 ++---------------------
 1 file changed, 107 insertions(+), 1190 deletions(-)

diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
index 5628c573064..0acc3cd4df6 100644
--- a/_maps/map_files/debug/atmos_mintest.dmm
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -1,1193 +1,110 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
-/turf/open/space/basic,
-/area/space)
-"b" = (
-/turf/closed/wall/r_wall,
-/area/hallway/primary/central)
-"c" = (
-/obj/effect/spawner/structure/window/plasma,
-/turf/open/floor/plating,
-/area/hallway/primary/central)
-"d" = (
-/obj/machinery/door/poddoor{
-	id = "c1vent";
-	name = "c1vent"
-	},
-/turf/open/floor/plating,
-/area/hallway/primary/central)
-"e" = (
-/obj/machinery/door/poddoor{
-	id = "c2vent";
-	name = "c2vent"
-	},
-/turf/open/floor/plating,
-/area/hallway/primary/central)
-"f" = (
-/obj/machinery/door/poddoor{
-	id = "c3vent";
-	name = "c3vent"
-	},
-/turf/open/floor/plating,
-/area/hallway/primary/central)
-"g" = (
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"h" = (
-/turf/open/floor/engine/plasma,
-/area/hallway/primary/central)
-"i" = (
-/turf/open/floor/engine/airless,
-/area/hallway/primary/central)
-"j" = (
-/turf/open/floor/engine/n2o,
-/area/hallway/primary/central)
-"k" = (
-/obj/item/card/id/advanced/debug,
-/obj/structure/rack,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"l" = (
-/obj/machinery/power/rtg/debug,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"m" = (
-/obj/machinery/door/poddoor{
-	id = "c1toc2";
-	name = "c1toc2"
-	},
-/turf/open/floor/plating,
-/area/hallway/primary/central)
-"n" = (
-/obj/machinery/door/poddoor{
-	id = "c2toc3";
-	name = "c2toc3"
-	},
-/turf/open/floor/plating,
-/area/hallway/primary/central)
-"o" = (
-/obj/effect/landmark/latejoin,
-/obj/effect/turf_decal/bot_red,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"p" = (
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"q" = (
-/obj/machinery/light/floor,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"r" = (
-/obj/machinery/atmospherics/miner/plasma,
-/turf/open/floor/engine/plasma,
-/area/hallway/primary/central)
-"s" = (
-/obj/machinery/atmospherics/miner/n2o,
-/turf/open/floor/engine/n2o,
-/area/hallway/primary/central)
-"t" = (
-/obj/effect/landmark/observer_start,
-/obj/effect/turf_decal/bot_red,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"u" = (
-/obj/effect/turf_decal/trimline,
-/turf/open/floor/engine/plasma,
-/area/hallway/primary/central)
-"v" = (
-/obj/effect/turf_decal/trimline,
-/turf/open/floor/engine/airless,
-/area/hallway/primary/central)
-"w" = (
-/obj/effect/turf_decal/trimline,
-/turf/open/floor/engine/n2o,
-/area/hallway/primary/central)
-"x" = (
-/obj/effect/turf_decal/bot_red,
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"y" = (
-/obj/machinery/power/apc/auto_name/directional/east,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"z" = (
-/obj/machinery/meter/turf,
-/turf/open/floor/engine/plasma,
-/area/hallway/primary/central)
-"A" = (
-/obj/machinery/meter/turf,
-/turf/open/floor/engine/airless,
-/area/hallway/primary/central)
-"B" = (
-/obj/machinery/meter/turf,
-/turf/open/floor/engine/n2o,
-/area/hallway/primary/central)
-"C" = (
-/obj/item/card/id/advanced/gold/captains_spare,
-/obj/item/card/id/advanced/gold/captains_spare,
-/obj/item/card/id/advanced/gold/captains_spare,
-/obj/structure/rack,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"D" = (
-/obj/machinery/button/door{
-	id = "c1toc2";
-	name = "c1toc2"
-	},
-/turf/closed/wall/r_wall,
-/area/hallway/primary/central)
-"E" = (
-/obj/machinery/button/door{
-	id = "c2toc3";
-	name = "c2toc3"
-	},
-/turf/closed/wall/r_wall,
-/area/hallway/primary/central)
-"F" = (
-/obj/machinery/button/door{
-	id = "c1vent";
-	name = "c1vent"
-	},
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"G" = (
-/obj/machinery/button/door{
-	id = "c2vent";
-	name = "c2vent"
-	},
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"H" = (
-/obj/machinery/button/door{
-	id = "c3vent";
-	name = "c3vent"
-	},
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"I" = (
-/obj/structure/cable,
-/obj/machinery/light/floor,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"J" = (
-/obj/item/pipe_dispenser,
-/obj/structure/table/reinforced,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"K" = (
-/obj/machinery/portable_atmospherics/canister/plasma,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"L" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"M" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"N" = (
-/obj/machinery/door/airlock/public,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"O" = (
-/turf/open/floor/iron/red,
-/area/hallway/primary/central)
-"P" = (
-/obj/machinery/meter/turf,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"Q" = (
-/obj/machinery/meter/turf,
-/turf/open/floor/iron/red,
-/area/hallway/primary/central)
-"R" = (
-/obj/machinery/light/floor,
-/turf/open/floor/iron/red,
-/area/hallway/primary/central)
-"S" = (
-/obj/machinery/door/airlock/external/glass,
-/turf/open/floor/plating,
-/area/hallway/primary/central)
-"T" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock/public,
-/turf/open/floor/iron,
-/area/hallway/primary/central)
-"U" = (
-/obj/machinery/light/floor,
-/turf/open/floor/engine/plasma,
-/area/hallway/primary/central)
-"V" = (
-/obj/machinery/light/floor,
-/turf/open/floor/engine/airless,
-/area/hallway/primary/central)
-"W" = (
-/obj/machinery/light/floor,
-/turf/open/floor/engine/n2o,
-/area/hallway/primary/central)
+"aa" = (/turf/open/space/basic,/area/space)
+"ab" = (/turf/closed/wall/r_wall,/area/hallway/primary/central)
+"ac" = (/obj/effect/spawner/structure/window/plasma,/turf/open/floor/plating,/area/hallway/primary/central)
+"ad" = (/obj/machinery/door/poddoor{id = "c1vent"; name = "c1vent"},/turf/open/floor/plating,/area/hallway/primary/central)
+"ae" = (/obj/machinery/door/poddoor{id = "c2vent"; name = "c2vent"},/turf/open/floor/plating,/area/hallway/primary/central)
+"af" = (/obj/machinery/door/poddoor{id = "c3vent"; name = "c3vent"},/turf/open/floor/plating,/area/hallway/primary/central)
+"ag" = (/turf/open/floor/iron,/area/hallway/primary/central)
+"ah" = (/turf/open/floor/engine/plasma,/area/hallway/primary/central)
+"ai" = (/turf/open/floor/engine/airless,/area/hallway/primary/central)
+"aj" = (/turf/open/floor/engine/n2o,/area/hallway/primary/central)
+"ak" = (/obj/item/card/id/advanced/debug,/obj/structure/rack,/turf/open/floor/iron,/area/hallway/primary/central)
+"al" = (/obj/machinery/power/rtg/debug,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
+"am" = (/obj/machinery/door/poddoor{id = "c1toc2"; name = "c1toc2"},/turf/open/floor/plating,/area/hallway/primary/central)
+"an" = (/obj/machinery/door/poddoor{id = "c2toc3"; name = "c2toc3"},/turf/open/floor/plating,/area/hallway/primary/central)
+"ao" = (/obj/effect/landmark/latejoin,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
+"ap" = (/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
+"aq" = (/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
+"ar" = (/obj/machinery/atmospherics/miner/plasma,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
+"as" = (/obj/machinery/atmospherics/miner/n2o,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
+"at" = (/obj/effect/landmark/observer_start,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
+"au" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
+"av" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/airless,/area/hallway/primary/central)
+"aw" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
+"ax" = (/obj/effect/turf_decal/bot_red,/obj/effect/landmark/start/assistant,/turf/open/floor/iron,/area/hallway/primary/central)
+"ay" = (/obj/machinery/power/apc/auto_name/directional/east,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
+"az" = (/obj/machinery/meter/turf,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
+"aA" = (/obj/machinery/meter/turf,/turf/open/floor/engine/airless,/area/hallway/primary/central)
+"aB" = (/obj/machinery/meter/turf,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
+"aC" = (/obj/item/card/id/advanced/gold/captains_spare,/obj/item/card/id/advanced/gold/captains_spare,/obj/item/card/id/advanced/gold/captains_spare,/obj/structure/rack,/turf/open/floor/iron,/area/hallway/primary/central)
+"aD" = (/obj/machinery/button/door{id = "c1toc2"; name = "c1toc2"},/turf/closed/wall/r_wall,/area/hallway/primary/central)
+"aE" = (/obj/machinery/button/door{id = "c2toc3"; name = "c2toc3"},/turf/closed/wall/r_wall,/area/hallway/primary/central)
+"aF" = (/obj/machinery/button/door{id = "c1vent"; name = "c1vent"},/turf/open/floor/iron,/area/hallway/primary/central)
+"aG" = (/obj/machinery/button/door{id = "c2vent"; name = "c2vent"},/turf/open/floor/iron,/area/hallway/primary/central)
+"aH" = (/obj/machinery/button/door{id = "c3vent"; name = "c3vent"},/turf/open/floor/iron,/area/hallway/primary/central)
+"aI" = (/obj/structure/cable,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
+"aJ" = (/turf/open/floor/plating,/area/hallway/primary/central)
+"aK" = (/obj/machinery/portable_atmospherics/canister/plasma,/turf/open/floor/iron,/area/hallway/primary/central)
+"aL" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/iron,/area/hallway/primary/central)
+"aM" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/open/floor/iron,/area/hallway/primary/central)
+"aN" = (/obj/machinery/door/airlock/public,/turf/open/floor/iron,/area/hallway/primary/central)
+"aO" = (/turf/open/floor/iron/red,/area/hallway/primary/central)
+"aP" = (/obj/machinery/meter/turf,/turf/open/floor/iron,/area/hallway/primary/central)
+"aQ" = (/obj/machinery/meter/turf,/turf/open/floor/iron/red,/area/hallway/primary/central)
+"aR" = (/obj/machinery/light/floor,/turf/open/floor/iron/red,/area/hallway/primary/central)
+"aS" = (/obj/machinery/door/airlock/external/glass,/turf/open/floor/plating,/area/hallway/primary/central)
+"aT" = (/obj/structure/cable,/obj/machinery/door/airlock/public,/turf/open/floor/iron,/area/hallway/primary/central)
+"aU" = (/obj/machinery/light/floor,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
+"aV" = (/obj/machinery/light/floor,/turf/open/floor/engine/airless,/area/hallway/primary/central)
+"aW" = (/obj/machinery/light/floor,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
+"aX" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
+"aY" = (/obj/machinery/atmospherics/components/binary/pump{icon_state = "pump_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"aZ" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"ba" = (/obj/machinery/atmospherics/components/binary/volume_pump{icon_state = "volpump_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"bb" = (/obj/machinery/atmospherics/components/binary/valve{dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"bc" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 4},/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"bd" = (/obj/item/pipe_dispenser,/obj/structure/table/reinforced,/obj/item/debug/omnitool,/obj/item/door_remote/omni,/turf/open/floor/iron,/area/hallway/primary/central)
+"be" = (/obj/machinery/pipedispenser,/turf/open/floor/iron,/area/hallway/primary/central)
+"bf" = (/obj/machinery/light/floor,/turf/open/floor/plating,/area/hallway/primary/central)
+"bg" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
+"bh" = (/obj/effect/turf_decal/stripes/red/line,/turf/open/floor/plating,/area/hallway/primary/central)
+"bi" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
+"bj" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bk" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"bl" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/binary/valve/digital{icon_state = "dvalve_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"bm" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/binary/passive_gate{icon_state = "passgate_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"bn" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 9},/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"bo" = (/obj/machinery/portable_atmospherics/canister,/obj/effect/turf_decal/trimline/yellow/filled,/turf/open/floor/iron,/area/hallway/primary/central)
+"bp" = (/obj/machinery/light/floor,/obj/machinery/portable_atmospherics/canister,/obj/effect/turf_decal/trimline/yellow/filled,/turf/open/floor/iron,/area/hallway/primary/central)
+"bq" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/turf_decal/trimline/blue/filled,/turf/open/floor/iron,/area/hallway/primary/central)
+"br" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 6},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bs" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 1},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/obj/machinery/meter,/turf/open/floor/plating,/area/hallway/primary/central)
+"bt" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 10},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bu" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 8},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bv" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 4},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bw" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 5},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bx" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/obj/machinery/meter,/turf/open/floor/plating,/area/hallway/primary/central)
+"by" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 9},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
 
 (1,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(2,1,1) = {"
-a
-b
-b
-c
-c
-c
-b
-b
-b
-c
-b
-b
-b
-c
-c
-c
-c
-c
-c
-c
-c
-b
-b
-b
-c
-c
-c
-b
-b
-a
-"}
-(3,1,1) = {"
-a
-b
-g
-g
-g
-g
-g
-b
-g
-g
-g
-b
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-g
-g
-g
-g
-g
-b
-a
-"}
-(4,1,1) = {"
-a
-c
-g
-l
-p
-l
-g
-c
-g
-I
-g
-c
-g
-q
-g
-g
-q
-g
-g
-g
-q
-g
-c
-g
-g
-q
-g
-g
-c
-a
-"}
-(5,1,1) = {"
-a
-c
-g
-g
-q
-p
-p
-T
-p
-p
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-N
-g
-g
-P
-g
-g
-c
-a
-"}
-(6,1,1) = {"
-a
-c
-g
-l
-p
-l
-g
-c
-g
-p
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-c
-g
-g
-g
-g
-g
-c
-a
-"}
-(7,1,1) = {"
-a
-b
-g
-g
-g
-p
-y
-b
-g
-p
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-g
-g
-g
-g
-g
-b
-a
-"}
-(8,1,1) = {"
-a
-b
-b
-c
-c
-c
-b
-b
-g
-p
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-b
-c
-N
-c
-b
-b
-a
-"}
-(9,1,1) = {"
-a
-b
-h
-h
-h
-h
-h
-b
-g
-p
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-g
-g
-g
-g
-g
-b
-a
-"}
-(10,1,1) = {"
-a
-d
-h
-h
-h
-h
-h
-c
-g
-p
-g
-c
-g
-q
-g
-g
-q
-g
-g
-g
-q
-g
-c
-g
-g
-g
-g
-g
-c
-a
-"}
-(11,1,1) = {"
-a
-d
-h
-U
-r
-u
-z
-c
-F
-I
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-c
-g
-g
-g
-g
-g
-c
-a
-"}
-(12,1,1) = {"
-a
-d
-h
-h
-h
-h
-h
-c
-g
-p
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-N
-g
-g
-P
-g
-g
-c
-a
-"}
-(13,1,1) = {"
-a
-b
-h
-h
-h
-h
-h
-b
-g
-p
-g
-c
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-c
-g
-g
-q
-g
-g
-c
-a
-"}
-(14,1,1) = {"
-a
-b
-b
-m
-m
-m
-b
-D
-g
-p
-g
-b
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-c
-g
-g
-g
-g
-g
-c
-a
-"}
-(15,1,1) = {"
-a
-b
-i
-i
-i
-i
-i
-b
-g
-p
-g
-N
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-g
-g
-g
-g
-g
-b
-a
-"}
-(16,1,1) = {"
-a
-e
-i
-i
-i
-v
-i
-c
-g
-p
-g
-N
-g
-q
-g
-g
-q
-g
-g
-g
-q
-g
-b
-b
-c
-N
-c
-b
-b
-a
-"}
-(17,1,1) = {"
-a
-e
-i
-V
-i
-i
-A
-c
-G
-I
-g
-N
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-g
-g
-g
-g
-g
-b
-a
-"}
-(18,1,1) = {"
-a
-e
-i
-i
-i
-v
-i
-c
-g
-p
-g
-b
-J
-g
-g
-g
-g
-g
-g
-g
-g
-g
-c
-g
-g
-g
-g
-g
-c
-a
-"}
-(19,1,1) = {"
-a
-b
-i
-i
-i
-i
-i
-b
-g
-p
-g
-c
-K
-g
-g
-g
-g
-g
-g
-g
-g
-g
-N
-g
-g
-q
-g
-g
-c
-a
-"}
-(20,1,1) = {"
-a
-b
-b
-n
-n
-n
-b
-E
-g
-p
-g
-c
-K
-g
-g
-g
-g
-g
-g
-g
-g
-g
-c
-g
-g
-P
-g
-g
-c
-a
-"}
-(21,1,1) = {"
-a
-b
-j
-j
-j
-j
-j
-b
-g
-p
-g
-c
-K
-q
-g
-g
-q
-g
-g
-g
-q
-g
-c
-g
-g
-g
-g
-g
-c
-a
-"}
-(22,1,1) = {"
-a
-f
-j
-j
-j
-w
-j
-c
-g
-p
-g
-c
-L
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-g
-g
-g
-g
-g
-b
-a
-"}
-(23,1,1) = {"
-a
-f
-j
-W
-s
-w
-B
-c
-H
-I
-g
-c
-L
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-b
-c
-N
-c
-b
-b
-a
-"}
-(24,1,1) = {"
-a
-f
-j
-j
-j
-w
-j
-c
-g
-p
-g
-c
-L
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-O
-O
-O
-O
-O
-b
-a
-"}
-(25,1,1) = {"
-a
-b
-j
-j
-j
-j
-j
-b
-g
-p
-g
-c
-M
-g
-g
-g
-g
-g
-g
-g
-g
-g
-c
-O
-O
-O
-O
-O
-c
-a
-"}
-(26,1,1) = {"
-a
-b
-b
-c
-c
-c
-b
-b
-g
-p
-g
-c
-M
-g
-g
-g
-g
-g
-g
-g
-g
-g
-N
-O
-O
-Q
-O
-O
-S
-a
-"}
-(27,1,1) = {"
-a
-c
-k
-o
-t
-x
-C
-c
-g
-q
-g
-c
-M
-q
-g
-g
-q
-g
-g
-g
-q
-g
-c
-O
-O
-R
-O
-O
-c
-a
-"}
-(28,1,1) = {"
-a
-b
-g
-g
-q
-g
-g
-N
-g
-g
-g
-b
-g
-g
-g
-g
-g
-g
-g
-g
-g
-g
-b
-O
-O
-O
-O
-O
-b
-a
-"}
-(29,1,1) = {"
-a
-b
-b
-c
-c
-c
-b
-b
-b
-c
-b
-b
-b
-c
-c
-c
-c
-c
-c
-c
-c
-b
-b
-b
-c
-S
-c
-b
-b
-a
-"}
-(30,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaababacacacabababadadadabababaeaeaeabababafafafababacababaa
+aaabagagagagagabahahahahahabaiaiaiaiaiabajajajajajabakagabaa
+aaacagalagalagacahahaUahahamaiaiaVaiaianajajaWajajacaoagacaa
+aaacagapaqapagacahaharahahamaiaiaiaiaianajajasajajacataqacaa
+aaacagalapalapacahahauahahamaiavaiavaianajawawawajacaxagacaa
+aaabagagapagayabahahazahahabaiaiaAaiaiabajajaBajajabaCagabaa
+aaababacaTacabababacacacabaDabacacacabaEabacacacababacaNabaa
+aaabagagapagagagagagaFagagagagagaGagagagagagaHagagagagagabaa
+aaacagaIapapapapapapaIapapapapapaIapapapapapaIapapapaqagacaa
+aaabagagagagagagagagagagagagagagagagagagagagagagagagagagabaa
+aaababacacacacacacacacacacabaNaNaNabacacacacacacacacacababaa
+aaabaJaJaJaXaYaZaXbaaZaXbbbcagagagbdaKaKaKaLaLaLaMaMaMbeabaa
+aaacaJbfaJaJaJaJaJbfaJaJaJbgagaqagagagagaqagagagagagaqagacaa
+aaacbhbhbhbibjbkbiblbkbibmbnagagagagagagagagagagagagagagacaa
+aaacagagagagagagagagagagagagagagagagagagagagagagagagagagacaa
+aaacbobpagbqbqagagaqagbrbsbtagaqagagagagaqagagagagagaqagacaa
+aaacboboagbqbqagagagaXbuaJbvaZagagagagagagagagagagagagagacaa
+aaacboboagbqbqagagagagbwbxbyagagagagagagagagagagagagagagacaa
+aaacboboagbqbqagagagagagagagagagagagagagagagagagagagagagacaa
+aaacbobpagbqbqagagaqagagagagagaqagagagagaqagagagagagaqagacaa
+aaabagagagagagagagagagagagagagagagagagagagagagagagagagagabaa
+aaababacaNacabababacacaNacacabababacaNacacabababacaNacababaa
+aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaa
+aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaa
+aaacagaqaPagagaNagagagaPaqagagaNagagaqaPagagaNaOaOaQaRaOaSaa
+aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaa
+aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaa
+aaababacacacabababacacacacacabababacacacacabababacaSacababaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 "}

From 193eca932404fba27a78e1567af3f4d22fb1cea4 Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Sat, 23 Apr 2022 19:23:04 -0400
Subject: [PATCH 045/200] Further map updates, add maps.txt def

---
 _maps/map_files/debug/atmos_mintest.dmm | 137 +++++++++++++++++-------
 config/maps.txt                         |   3 +
 2 files changed, 104 insertions(+), 36 deletions(-)

diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
index 0acc3cd4df6..310d8b6efb8 100644
--- a/_maps/map_files/debug/atmos_mintest.dmm
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -1,9 +1,9 @@
 "aa" = (/turf/open/space/basic,/area/space)
 "ab" = (/turf/closed/wall/r_wall,/area/hallway/primary/central)
 "ac" = (/obj/effect/spawner/structure/window/plasma,/turf/open/floor/plating,/area/hallway/primary/central)
-"ad" = (/obj/machinery/door/poddoor{id = "c1vent"; name = "c1vent"},/turf/open/floor/plating,/area/hallway/primary/central)
-"ae" = (/obj/machinery/door/poddoor{id = "c2vent"; name = "c2vent"},/turf/open/floor/plating,/area/hallway/primary/central)
-"af" = (/obj/machinery/door/poddoor{id = "c3vent"; name = "c3vent"},/turf/open/floor/plating,/area/hallway/primary/central)
+"ad" = (/obj/machinery/door/poddoor{id = "c1vent"; name = "c1vent"},/turf/open/floor/plating,/area/space)
+"ae" = (/obj/machinery/door/poddoor{id = "c2vent"; name = "c2vent"},/turf/open/floor/plating,/area/space)
+"af" = (/obj/machinery/door/poddoor{id = "c3vent"; name = "c3vent"},/turf/open/floor/plating,/area/space)
 "ag" = (/turf/open/floor/iron,/area/hallway/primary/central)
 "ah" = (/turf/open/floor/engine/plasma,/area/hallway/primary/central)
 "ai" = (/turf/open/floor/engine/airless,/area/hallway/primary/central)
@@ -18,7 +18,7 @@
 "ar" = (/obj/machinery/atmospherics/miner/plasma,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
 "as" = (/obj/machinery/atmospherics/miner/n2o,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
 "at" = (/obj/effect/landmark/observer_start,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
-"au" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
+"au" = (/obj/effect/turf_decal/trimline,/obj/machinery/air_sensor/plasma_tank,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
 "av" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/airless,/area/hallway/primary/central)
 "aw" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
 "ax" = (/obj/effect/turf_decal/bot_red,/obj/effect/landmark/start/assistant,/turf/open/floor/iron,/area/hallway/primary/central)
@@ -37,13 +37,13 @@
 "aK" = (/obj/machinery/portable_atmospherics/canister/plasma,/turf/open/floor/iron,/area/hallway/primary/central)
 "aL" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/iron,/area/hallway/primary/central)
 "aM" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/open/floor/iron,/area/hallway/primary/central)
-"aN" = (/obj/machinery/door/airlock/public,/turf/open/floor/iron,/area/hallway/primary/central)
+"aN" = (/obj/structure/cable,/obj/machinery/power/rtg/debug,/turf/open/floor/iron,/area/hallway/primary/central)
 "aO" = (/turf/open/floor/iron/red,/area/hallway/primary/central)
 "aP" = (/obj/machinery/meter/turf,/turf/open/floor/iron,/area/hallway/primary/central)
 "aQ" = (/obj/machinery/meter/turf,/turf/open/floor/iron/red,/area/hallway/primary/central)
 "aR" = (/obj/machinery/light/floor,/turf/open/floor/iron/red,/area/hallway/primary/central)
 "aS" = (/obj/machinery/door/airlock/external/glass,/turf/open/floor/plating,/area/hallway/primary/central)
-"aT" = (/obj/structure/cable,/obj/machinery/door/airlock/public,/turf/open/floor/iron,/area/hallway/primary/central)
+"aT" = (/obj/machinery/gravity_generator/main/station,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
 "aU" = (/obj/machinery/light/floor,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
 "aV" = (/obj/machinery/light/floor,/turf/open/floor/engine/airless,/area/hallway/primary/central)
 "aW" = (/obj/machinery/light/floor,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
@@ -75,36 +75,101 @@
 "bw" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 5},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
 "bx" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/obj/machinery/meter,/turf/open/floor/plating,/area/hallway/primary/central)
 "by" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 9},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bz" = (/obj/machinery/door/airlock/public/glass,/turf/open/floor/iron,/area/hallway/primary/central)
+"bA" = (/obj/structure/cable,/obj/effect/turf_decal/arrows,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
+"bB" = (/obj/structure/cable,/turf/open/floor/plating,/area/hallway/primary/central)
+"bC" = (/obj/structure/cable,/obj/effect/turf_decal/arrows{icon_state = "arrows"; dir = 4},/turf/open/floor/iron,/area/hallway/primary/central)
+"bD" = (/obj/item/pipe_dispenser,/obj/structure/table/reinforced,/turf/open/floor/iron,/area/hallway/primary/central)
+"bE" = (/obj/item/holosign_creator/atmos,/obj/structure/table/reinforced,/turf/open/floor/iron,/area/hallway/primary/central)
+"bF" = (/obj/machinery/portable_atmospherics/pump,/turf/open/floor/iron,/area/hallway/primary/central)
+"bG" = (/obj/machinery/portable_atmospherics/scrubber,/turf/open/floor/iron,/area/hallway/primary/central)
+"bH" = (/obj/structure/table/reinforced,/obj/item/debug/omnitool,/obj/item/door_remote/omni,/turf/open/floor/iron,/area/hallway/primary/central)
+"bI" = (/obj/machinery/air_sensor/mix_tank,/turf/open/floor/engine/airless,/area/hallway/primary/central)
+"bJ" = (/obj/effect/turf_decal/trimline,/obj/machinery/air_sensor/nitrous_tank,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
+"bK" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
+"bL" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output,/turf/open/floor/engine/airless,/area/hallway/primary/central)
+"bM" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
+"bN" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bO" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bP" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,/turf/open/floor/plating,/area/hallway/primary/central)
+"bQ" = (/obj/machinery/portable_atmospherics/canister/plasma,/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,/turf/open/floor/iron,/area/hallway/primary/central)
+"bR" = (/obj/machinery/computer/atmos_control/plasma_tank,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
+"bS" = (/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,/turf/open/floor/iron,/area/hallway/primary/central)
+"bT" = (/obj/machinery/computer/atmos_control/mix_tank,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
+"bU" = (/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,/turf/open/floor/iron,/area/hallway/primary/central)
+"bV" = (/obj/machinery/computer/atmos_control/nitrous_tank,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
+"bW" = (/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,/turf/open/floor/iron,/area/hallway/primary/central)
+"bX" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
+"bY" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Power"},/turf/open/floor/iron,/area/hallway/primary/central)
+"bZ" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Main Floor"},/turf/open/floor/iron,/area/hallway/primary/central)
+"ca" = (/obj/machinery/light/floor,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
+"cb" = (/obj/machinery/door/airlock/public/glass{name = "Basic Equipment Tests"},/turf/open/floor/iron,/area/hallway/primary/central)
+"cc" = (/turf/open/floor/iron,/area/space)
+"cd" = (/obj/effect/spawner/structure/window/plasma,/turf/open/floor/plating,/area/space)
+"ce" = (/obj/machinery/door/airlock/public/glass,/turf/open/floor/iron,/area/space)
+"cf" = (/obj/machinery/door/airlock/external/glass,/turf/open/floor/plating,/area/space)
+"cg" = (/turf/closed/wall/r_wall,/area/space)
+"ch" = (/turf/open/space/basic,/area/hallway/primary/central)
+"ci" = (/obj/machinery/atmospherics/components/unary/portables_connector,/turf/open/floor/plating,/area/hallway/primary/central)
+"cj" = (/obj/machinery/atmospherics/components/binary/thermomachine/freezer,/turf/open/floor/plating,/area/hallway/primary/central)
+"ck" = (/obj/machinery/atmospherics/components/binary/thermomachine/heater,/turf/open/floor/plating,/area/hallway/primary/central)
+"cl" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 1},/turf/open/floor/plating,/area/hallway/primary/central)
+"cm" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 6},/turf/open/space/basic,/area/space)
+"cn" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 10},/turf/open/space/basic,/area/space)
+"co" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple,/turf/open/space/basic,/area/space)
+"cp" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 5},/turf/open/space/basic,/area/space)
+"cq" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 9},/turf/open/space/basic,/area/space)
+"cr" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/heat_exchanging/junction{icon_state = "pipe11-3"; dir = 1},/turf/open/floor/plating,/area/space)
+"cs" = (/obj/structure/table/reinforced,/obj/item/analyzer,/turf/open/floor/iron,/area/hallway/primary/central)
+"ct" = (/obj/effect/landmark/start/assistant,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
+"cu" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/turf/open/floor/iron,/area/hallway/primary/central)
+"cv" = (/obj/structure/table/reinforced,/obj/item/debug/omnitool,/obj/item/debug/omnitool,/obj/item/debug/omnitool,/turf/open/floor/iron,/area/hallway/primary/central)
+"cw" = (/obj/structure/table/reinforced,/obj/item/gun/magic/wand/death/debug,/obj/item/gun/magic/wand/death/debug,/obj/item/gun/magic/wand/resurrection/debug,/obj/item/gun/magic/wand/safety/debug,/obj/item/gun/magic/wand/safety/debug,/turf/open/floor/iron,/area/hallway/primary/central)
+"cx" = (/obj/structure/table/reinforced,/obj/item/mod/control/pre_equipped/debug,/turf/open/floor/iron,/area/hallway/primary/central)
+"cy" = (/obj/structure/table/reinforced,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/turf/open/floor/iron,/area/hallway/primary/central)
+"cz" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Gravgen"},/turf/open/floor/iron,/area/hallway/primary/central)
+"cA" = (/obj/machinery/light/floor,/turf/open/floor/iron,/area/space)
 
 (1,1,1) = {"
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaababacacacabababadadadabababaeaeaeabababafafafababacababaa
-aaabagagagagagabahahahahahabaiaiaiaiaiabajajajajajabakagabaa
-aaacagalagalagacahahaUahahamaiaiaVaiaianajajaWajajacaoagacaa
-aaacagapaqapagacahaharahahamaiaiaiaiaianajajasajajacataqacaa
-aaacagalapalapacahahauahahamaiavaiavaianajawawawajacaxagacaa
-aaabagagapagayabahahazahahabaiaiaAaiaiabajajaBajajabaCagabaa
-aaababacaTacabababacacacabaDabacacacabaEabacacacababacaNabaa
-aaabagagapagagagagagaFagagagagagaGagagagagagaHagagagagagabaa
-aaacagaIapapapapapapaIapapapapapaIapapapapapaIapapapaqagacaa
-aaabagagagagagagagagagagagagagagagagagagagagagagagagagagabaa
-aaababacacacacacacacacacacabaNaNaNabacacacacacacacacacababaa
-aaabaJaJaJaXaYaZaXbaaZaXbbbcagagagbdaKaKaKaLaLaLaMaMaMbeabaa
-aaacaJbfaJaJaJaJaJbfaJaJaJbgagaqagagagagaqagagagagagaqagacaa
-aaacbhbhbhbibjbkbiblbkbibmbnagagagagagagagagagagagagagagacaa
-aaacagagagagagagagagagagagagagagagagagagagagagagagagagagacaa
-aaacbobpagbqbqagagaqagbrbsbtagaqagagagagaqagagagagagaqagacaa
-aaacboboagbqbqagagagaXbuaJbvaZagagagagagagagagagagagagagacaa
-aaacboboagbqbqagagagagbwbxbyagagagagagagagagagagagagagagacaa
-aaacboboagbqbqagagagagagagagagagagagagagagagagagagagagagacaa
-aaacbobpagbqbqagagaqagagagagagaqagagagagaqagagagagagaqagacaa
-aaabagagagagagagagagagagagagagagagagagagagagagagagagagagabaa
-aaababacaNacabababacacaNacacabababacaNacacabababacaNacababaa
-aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaa
-aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaa
-aaacagaqaPagagaNagagagaPaqagagaNagagaqaPagagaNaOaOaQaRaOaSaa
-aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaa
-aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaa
-aaababacacacabababacacacacacabababacacacacabababacaSacababaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aacgcgcdcdcdcgcgcgadadadcgcgcgaeaeaecgcgcgafafafcgcgcgcdcdcdcgcgaaaaaaaaaaaaaaaa
+aaabagagagagagabaUahahahaUabaVaiaiaiaVabaWajajajaWabaqagagagaqabaacmcncmcnaaaaaa
+aaacagalagalagacahahahahahamaiaiaiaiaianajajajajajacagagagagagacaacocococoaaaaaa
+aaacagaNaqaNagacahaharahahamaiaiaiaiaianajajasajajacagagagagagacaacocococoaaaaaa
+aaacagalapalapacahahauahahamaiavbIavaianajawbJawajacagagaTagagacaacocococoaaaaaa
+aaabagagapagayabaUbKazahaUabaVbLaAaiaVabaWbMaBajaWabaqagapagaqabaacocpcqcoaaaaaa
+aaababacbYacabababbNacacabaDabbOacacabaEabbPacacabababacczacababcgcrcdcdcrcgcgaa
+aaabctagapagakabaKbQaFbRagagagbSaGbTagagagbUaHbVagagaqagapagagaqcsbXaKaKbXaqabaa
+aaacctagapagaoacaKbWagagagagagbSagagagagagbUagagagagagagapagagagagagagagagagabaa
+aaacctagbAagatacaLbXagagagagagbXagagagagagbXagagagagagagapagagagagagagagagagabaa
+aaacctagapagaxacaLagagaqagagagagaqagagagagagaqagagagaqagapagaqagagagaqagagagabaa
+aaacctagbAagaCacaLagagagagagagagagagagagagagagagagagagagapagagagagagagagagagabaa
+aaacctagapagcuacaMagagagagagagagagagagagagagagagagagagagapagagagagagagagagagacaa
+aaacctagbAagcvacaMagagaqagagagagaqagagagagagaqagagagaqagapagaqagagagaqagagagacaa
+aaacctagapagcwacaMagagagagagagagagagagagagagagagagagagagapagagagagagagagagagacaa
+aaacctagbAagcxabbeagagagagagagagaqagagagagagagagagagagagapagagagagagagagagagabaa
+aaacctagapagcyababbDbEaqagagagbBbBbBagagagagaqagagagaqagapagaqagagagaqagagagabaa
+aaacctagbAagagabbFbGbHagagagagagapagagagagagagagagagagagapagagagagagagagagagabaa
+aaacagaIapapbCbZapapaIapapapapapaIapapapapapaIapapapcaapapagaqagagagaqagagagacaa
+aaabagagagagagabagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaqabaa
+aaababacacacabababacacacacabcbcbcbabacacacacacacacacacacabacacacabacacacabababaa
+aaabaJaJaJaXaYaZaXbaaZaXbbbcagagagbdaKaKaKaLaLaLaMaMaMbeacagagagacagagagacchchaa
+aaacaJbfaJaJaJaJaJbfaJaJaJbgagaqagagagagaqagagagagagaqagbzcccAcccecccAcccfaaaaaa
+aaacbhbhbhbibjbkbiblbkbibmbnagagagagagagagagagagagagagagaccccccccdcccccccdaaaaaa
+aaacagagagagagagagagagagagagagagagagagagagagciciagagagagabcdcecdcgcdcecdcgaaaaaa
+aaacbobpagbqbqagagaqagbrbsbtagaqagagagagaqagcjckagagaqagaccccccccdcccccccdaaaaaa
+aaacboboagbqbqagagagaXbuaJbvaZagagagagagagagclclagagagagbzcccAcccecccAcccfaaaaaa
+aaacboboagbqbqagagagagbwbxbyagagagagagagagagagagagagagagaccccccccdcccccccdaaaaaa
+aaacboboagbqbqagagagagagagagagagagagagagagagagagagagagagabcdcecdcgcdcecdcgaaaaaa
+aaacbobpagbqbqagagaqagagagagagaqagagagagaqagagagagagaqagaccccccccccccccccdaaaaaa
+aaabagagagagagagagagagagagagagagagagagagagagagagagagagagbzcccAcccccccAcccfaaaaaa
+aaabagagagagagagagagagagagagagagagagagagagagagagagagagagaccccccccccccccccdaaaaaa
+aaababacbzacabababacacbzacacabababacbzacacabababacbzacababcdcdcdcgcdcdcdcgaaaaaa
+aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaaaaaaaaaaaaaaaaaaaaaa
+aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaaaaaaaaaaaaaaaaaaaaaa
+aaacagaqaPagagbzagagagaPaqagagbzagagaqaPagagbzaOaOaQaRaOaSaaaaaaaaaaaaaaaaaaaaaa
+aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaaaaaaaaaaaaaaaaaaaaaa
+aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaaaaaaaaaaaaaaaaaaaaaa
+aaababacacacabababacacacacacabababacacacacabababacaSacababaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 "}
diff --git a/config/maps.txt b/config/maps.txt
index e1ab50b3391..87293fd9bca 100644
--- a/config/maps.txt
+++ b/config/maps.txt
@@ -42,5 +42,8 @@ endmap
 map runtimestation
 endmap
 
+map atmostest
+endmap
+
 map multiz_debug
 endmap

From 814fe3928035c246d1080a792e68169d681087c6 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 23 Apr 2022 21:29:12 -0400
Subject: [PATCH 046/200] Typo + fixes? passive gates

---
 code/modules/atmospherics/ZAS/Fire.dm                  |  6 +++---
 code/modules/atmospherics/ZAS/Turf.dm                  | 10 +++++++---
 code/modules/atmospherics/ZAS/ZAS_Settings.dm          |  6 +++---
 .../components/binary_devices/passive_gate.dm          |  8 +++++++-
 4 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 2e996122b8d..1c21064fb24 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -41,7 +41,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	return igniting
 
 /zone/proc/process_fire()
-	var/datum/gas_mixture/burn_gas = air.remove_ratio(SSzas.settings.fire_consuption_rate, fire_tiles.len)
+	var/datum/gas_mixture/burn_gas = air.remove_ratio(SSzas.settings.fire_consumption_rate, fire_tiles.len)
 
 	var/firelevel = burn_gas.react(src, fire_tiles, force_burn = 1, no_check = 1)
 
@@ -356,7 +356,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/oil/liquid)
 	. = 0
 	for(var/g in gas)
-		if(xgm_gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * SSzas.settings.fire_consumption_rate) >= 0.1)
 			. = 1
 			break
 
@@ -368,7 +368,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	. = 0
 	for(var/g in gas)
-		if(xgm_gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * SSzas.settings.fire_consuption_rate) >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * SSzas.settings.fire_consumption_rate) >= 0.1)
 			. = 1
 			break
 
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 033c069fc9b..fab4fc888fc 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -177,7 +177,9 @@
 		if(!unsim) //edge of map
 			continue
 
-		var/block = unsim.c_airblock(src)
+		//var/block = unsim.c_airblock(src)
+		var/block
+		ATMOS_CANPASS_TURF(block, src, unsim)
 		if(block & AIR_BLOCKED)
 
 			#ifdef ZASDBG
@@ -187,7 +189,9 @@
 
 			continue
 
-		var/r_block = c_airblock(unsim)
+		//var/r_block = c_airblock(unsim)
+		var/r_block
+		ATMOS_CANPASS_TURF(r_block, unsim, src)
 		if(r_block & AIR_BLOCKED)
 
 			#ifdef ZASDBG
@@ -226,7 +230,7 @@
 						#ifdef ZASDBG
 						if(verbose) log_admin("[d] is zone blocked.")
 
-						//dbg(zone_blocked, d)
+						dbg(zone_blocked, d)
 						#endif
 
 						//Postpone this tile rather than exit, since a connection can still be made.
diff --git a/code/modules/atmospherics/ZAS/ZAS_Settings.dm b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
index 430d48f9d49..f7f6a08d42c 100644
--- a/code/modules/atmospherics/ZAS/ZAS_Settings.dm
+++ b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
@@ -1,9 +1,9 @@
 /datum/zas_controller
 	var/datum/pl_control/plc = new
 
-	var/fire_consuption_rate = 0.25
-	var/fire_consuption_rate_NAME = "Fire - Air Consumption Ratio"
-	var/fire_consuption_rate_DESC = "Ratio of air removed and combusted per tick."
+	var/fire_consumption_rate = 0.25
+	var/fire_consumption_rate_NAME = "Fire - Air Consumption Ratio"
+	var/fire_consumption_rate_DESC = "Ratio of air removed and combusted per tick."
 
 	var/fire_firelevel_multiplier = 25
 	var/fire_firelevel_multiplier_NAME = "Fire - Firelevel Constant"
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index 4d6330a4392..6d16367c5f2 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -57,8 +57,14 @@ Passive gate is similar to the regular pump except:
 
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
+	var/output_starting_pressure = air2.return_pressure()
+	var/input_starting_pressure = air1.return_pressure()
+
+	pressure_delta = input_starting_pressure - target_pressure
+
 	var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
-	if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)) >= 0)//pump_gas() will return a negative number if no flow occurred
+	transfer_moles = calculate_transfer_moles(air1, air2, pressure_delta)
+	if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, pressure_delta)) >= 0)//pump_gas() will return a negative number if no flow occurred
 		update_parents()
 
 //Radio remote control

From a43c1a3afe9f3b5173c5e054dc5e0fd1ec868823 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 23 Apr 2022 21:33:49 -0400
Subject: [PATCH 047/200] Fixes passive gate for real and fixes a canister bug

---
 .../machinery/components/binary_devices/passive_gate.dm       | 2 +-
 code/modules/atmospherics/machinery/portable/canister.dm      | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index 6d16367c5f2..d1e27d30e3b 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -63,7 +63,7 @@ Passive gate is similar to the regular pump except:
 	pressure_delta = input_starting_pressure - target_pressure
 
 	var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
-	transfer_moles = calculate_transfer_moles(air1, air2, pressure_delta)
+	transfer_moles = min(transfer_moles, calculate_transfer_moles(air1, air2, pressure_delta))
 	if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, pressure_delta)) >= 0)//pump_gas() will return a negative number if no flow occurred
 		update_parents()
 
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 8eee12b0e2f..64b6373c169 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -440,7 +440,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	return exposed_temperature > temperature_resistance * mode
 
 /obj/machinery/portable_atmospherics/canister/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(5, BURN, 0)
+	if(exposed_temperature > heat_limit)
+		take_damage(5, BURN, 0)
 
 /obj/machinery/portable_atmospherics/canister/deconstruct(disassembled = TRUE)
 	if((flags_1 & NODECONSTRUCT_1))
@@ -564,7 +565,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 			transfer_moles = min(transfer_moles, (release_pressure/air_contents.volume)*air_contents.total_moles) //flow rate limit
 
 			pump_gas_passive(air_contents, environment, transfer_moles)
-			//air_update_turf(FALSE, FALSE)
 
 	air_contents.react()
 

From d48ed6662774f56d3a73b0d60b88ff3146ccf56a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 23 Apr 2022 21:35:46 -0400
Subject: [PATCH 048/200] Hahaha im a dumbass.

---
 .../machinery/components/binary_devices/passive_gate.dm        | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index d1e27d30e3b..7d5ce9f6d97 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -57,10 +57,9 @@ Passive gate is similar to the regular pump except:
 
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
-	var/output_starting_pressure = air2.return_pressure()
 	var/input_starting_pressure = air1.return_pressure()
 
-	pressure_delta = input_starting_pressure - target_pressure
+	var/pressure_delta = input_starting_pressure - target_pressure
 
 	var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
 	transfer_moles = min(transfer_moles, calculate_transfer_moles(air1, air2, pressure_delta))

From 6c3c921e1f065925e14152d8ee283a67002ad302 Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Sun, 24 Apr 2022 00:03:30 -0400
Subject: [PATCH 049/200] FUCK

---
 _maps/map_files/debug/atmos_mintest.dmm | 40 +++++++++++--------------
 1 file changed, 17 insertions(+), 23 deletions(-)

diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
index 310d8b6efb8..fc78cf65a19 100644
--- a/_maps/map_files/debug/atmos_mintest.dmm
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -1,9 +1,9 @@
 "aa" = (/turf/open/space/basic,/area/space)
 "ab" = (/turf/closed/wall/r_wall,/area/hallway/primary/central)
 "ac" = (/obj/effect/spawner/structure/window/plasma,/turf/open/floor/plating,/area/hallway/primary/central)
-"ad" = (/obj/machinery/door/poddoor{id = "c1vent"; name = "c1vent"},/turf/open/floor/plating,/area/space)
-"ae" = (/obj/machinery/door/poddoor{id = "c2vent"; name = "c2vent"},/turf/open/floor/plating,/area/space)
-"af" = (/obj/machinery/door/poddoor{id = "c3vent"; name = "c3vent"},/turf/open/floor/plating,/area/space)
+"ad" = (/obj/machinery/door/poddoor{id = "c1vent"; name = "c1vent"},/turf/open/floor/plating,/area/hallway/primary/central)
+"ae" = (/obj/machinery/door/poddoor{id = "c2vent"; name = "c2vent"},/turf/open/floor/plating,/area/hallway/primary/central)
+"af" = (/obj/machinery/door/poddoor{id = "c3vent"; name = "c3vent"},/turf/open/floor/plating,/area/hallway/primary/central)
 "ag" = (/turf/open/floor/iron,/area/hallway/primary/central)
 "ah" = (/turf/open/floor/engine/plasma,/area/hallway/primary/central)
 "ai" = (/turf/open/floor/engine/airless,/area/hallway/primary/central)
@@ -104,11 +104,7 @@
 "bZ" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Main Floor"},/turf/open/floor/iron,/area/hallway/primary/central)
 "ca" = (/obj/machinery/light/floor,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
 "cb" = (/obj/machinery/door/airlock/public/glass{name = "Basic Equipment Tests"},/turf/open/floor/iron,/area/hallway/primary/central)
-"cc" = (/turf/open/floor/iron,/area/space)
-"cd" = (/obj/effect/spawner/structure/window/plasma,/turf/open/floor/plating,/area/space)
-"ce" = (/obj/machinery/door/airlock/public/glass,/turf/open/floor/iron,/area/space)
-"cf" = (/obj/machinery/door/airlock/external/glass,/turf/open/floor/plating,/area/space)
-"cg" = (/turf/closed/wall/r_wall,/area/space)
+"cc" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/heat_exchanging/junction{icon_state = "pipe11-3"; dir = 1},/turf/open/floor/plating,/area/hallway/primary/central)
 "ch" = (/turf/open/space/basic,/area/hallway/primary/central)
 "ci" = (/obj/machinery/atmospherics/components/unary/portables_connector,/turf/open/floor/plating,/area/hallway/primary/central)
 "cj" = (/obj/machinery/atmospherics/components/binary/thermomachine/freezer,/turf/open/floor/plating,/area/hallway/primary/central)
@@ -119,7 +115,6 @@
 "co" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple,/turf/open/space/basic,/area/space)
 "cp" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 5},/turf/open/space/basic,/area/space)
 "cq" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 9},/turf/open/space/basic,/area/space)
-"cr" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/heat_exchanging/junction{icon_state = "pipe11-3"; dir = 1},/turf/open/floor/plating,/area/space)
 "cs" = (/obj/structure/table/reinforced,/obj/item/analyzer,/turf/open/floor/iron,/area/hallway/primary/central)
 "ct" = (/obj/effect/landmark/start/assistant,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
 "cu" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/turf/open/floor/iron,/area/hallway/primary/central)
@@ -128,17 +123,16 @@
 "cx" = (/obj/structure/table/reinforced,/obj/item/mod/control/pre_equipped/debug,/turf/open/floor/iron,/area/hallway/primary/central)
 "cy" = (/obj/structure/table/reinforced,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/turf/open/floor/iron,/area/hallway/primary/central)
 "cz" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Gravgen"},/turf/open/floor/iron,/area/hallway/primary/central)
-"cA" = (/obj/machinery/light/floor,/turf/open/floor/iron,/area/space)
 
 (1,1,1) = {"
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aacgcgcdcdcdcgcgcgadadadcgcgcgaeaeaecgcgcgafafafcgcgcgcdcdcdcgcgaaaaaaaaaaaaaaaa
+aaababacacacabababadadadabababaeaeaeabababafafafabababacacacababaaaaaaaaaaaaaaaa
 aaabagagagagagabaUahahahaUabaVaiaiaiaVabaWajajajaWabaqagagagaqabaacmcncmcnaaaaaa
 aaacagalagalagacahahahahahamaiaiaiaiaianajajajajajacagagagagagacaacocococoaaaaaa
 aaacagaNaqaNagacahaharahahamaiaiaiaiaianajajasajajacagagagagagacaacocococoaaaaaa
 aaacagalapalapacahahauahahamaiavbIavaianajawbJawajacagagaTagagacaacocococoaaaaaa
 aaabagagapagayabaUbKazahaUabaVbLaAaiaVabaWbMaBajaWabaqagapagaqabaacocpcqcoaaaaaa
-aaababacbYacabababbNacacabaDabbOacacabaEabbPacacabababacczacababcgcrcdcdcrcgcgaa
+aaababacbYacabababbNacacabaDabbOacacabaEabbPacacabababacczacabababccacacccababaa
 aaabctagapagakabaKbQaFbRagagagbSaGbTagagagbUaHbVagagaqagapagagaqcsbXaKaKbXaqabaa
 aaacctagapagaoacaKbWagagagagagbSagagagagagbUagagagagagagapagagagagagagagagagabaa
 aaacctagbAagatacaLbXagagagagagbXagagagagagbXagagagagagagapagagagagagagagagagabaa
@@ -154,17 +148,17 @@ aaacagaIapapbCbZapapaIapapapapapaIapapapapapaIapapapcaapapagaqagagagaqagagagacaa
 aaabagagagagagabagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaqabaa
 aaababacacacabababacacacacabcbcbcbabacacacacacacacacacacabacacacabacacacabababaa
 aaabaJaJaJaXaYaZaXbaaZaXbbbcagagagbdaKaKaKaLaLaLaMaMaMbeacagagagacagagagacchchaa
-aaacaJbfaJaJaJaJaJbfaJaJaJbgagaqagagagagaqagagagagagaqagbzcccAcccecccAcccfaaaaaa
-aaacbhbhbhbibjbkbiblbkbibmbnagagagagagagagagagagagagagagaccccccccdcccccccdaaaaaa
-aaacagagagagagagagagagagagagagagagagagagagagciciagagagagabcdcecdcgcdcecdcgaaaaaa
-aaacbobpagbqbqagagaqagbrbsbtagaqagagagagaqagcjckagagaqagaccccccccdcccccccdaaaaaa
-aaacboboagbqbqagagagaXbuaJbvaZagagagagagagagclclagagagagbzcccAcccecccAcccfaaaaaa
-aaacboboagbqbqagagagagbwbxbyagagagagagagagagagagagagagagaccccccccdcccccccdaaaaaa
-aaacboboagbqbqagagagagagagagagagagagagagagagagagagagagagabcdcecdcgcdcecdcgaaaaaa
-aaacbobpagbqbqagagaqagagagagagaqagagagagaqagagagagagaqagaccccccccccccccccdaaaaaa
-aaabagagagagagagagagagagagagagagagagagagagagagagagagagagbzcccAcccccccAcccfaaaaaa
-aaabagagagagagagagagagagagagagagagagagagagagagagagagagagaccccccccccccccccdaaaaaa
-aaababacbzacabababacacbzacacabababacbzacacabababacbzacababcdcdcdcgcdcdcdcgaaaaaa
+aaacaJbfaJaJaJaJaJbfaJaJaJbgagaqagagagagaqagagagagagaqagbzagaqagbzagaqagaSaaaaaa
+aaacbhbhbhbibjbkbiblbkbibmbnagagagagagagagagagagagagagagacagagagacagagagacaaaaaa
+aaacagagagagagagagagagagagagagagagagagagagagciciagagagagabacbzacabacbzacabaaaaaa
+aaacbobpagbqbqagagaqagbrbsbtagaqagagagagaqagcjckagagaqagacagagagacagagagacaaaaaa
+aaacboboagbqbqagagagaXbuaJbvaZagagagagagagagclclagagagagbzagaqagbzagaqagaSaaaaaa
+aaacboboagbqbqagagagagbwbxbyagagagagagagagagagagagagagagacagagagacagagagacaaaaaa
+aaacboboagbqbqagagagagagagagagagagagagagagagagagagagagagabacbzacabacbzacabaaaaaa
+aaacbobpagbqbqagagaqagagagagagaqagagagagaqagagagagagaqagacagagagagagagagacaaaaaa
+aaabagagagagagagagagagagagagagagagagagagagagagagagagagagbzagaqagagagaqagaSaaaaaa
+aaabagagagagagagagagagagagagagagagagagagagagagagagagagagacagagagagagagagacaaaaaa
+aaababacbzacabababacacbzacacabababacbzacacabababacbzacababacacacabacacacabaaaaaa
 aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaaaaaaaaaaaaaaaaaaaaaa
 aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaaaaaaaaaaaaaaaaaaaaaa
 aaacagaqaPagagbzagagagaPaqagagbzagagaqaPagagbzaOaOaQaRaOaSaaaaaaaaaaaaaaaaaaaaaa

From 0062db60b42c4c4e1acdf6275dc4ba44c33cf946 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 24 Apr 2022 03:18:40 -0400
Subject: [PATCH 050/200] Moar gases, gaseous reagents, and handling.

---
 code/__DEFINES/atmospherics/ZAS.dm            |  1 +
 code/modules/atmospherics/ZAS/Plasma.dm       |  2 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm    | 19 ++++-----
 .../ZAS/zas_extras/gas_reagents.dm            | 41 +++++++++++++++++++
 .../atmospherics/machinery/airalarm.dm        | 17 ++++++++
 .../machinery/portable/canister.dm            |  6 +++
 code/modules/mob/living/carbon/human/life.dm  |  8 ++--
 .../mob/living/carbon/human/species.dm        |  2 +-
 .../carbon/human/species_types/plasmamen.dm   |  2 +-
 code/modules/mob/living/carbon/life.dm        | 40 ++++++++++++------
 .../chemistry/reagents/other_reagents.dm      |  2 +-
 .../chemistry/reagents/toxin_reagents.dm      | 10 +++--
 tgstation.dme                                 |  1 +
 13 files changed, 116 insertions(+), 35 deletions(-)
 create mode 100644 code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 666db30595f..9d6861008c2 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -256,6 +256,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 
 GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
 GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
+GLOBAL_LIST_INIT(noble_gases, list(GAS_HELIUM, GAS_HELIUM, GAS_ARGON, GAS_NEON, GAS_KRYPTON))
 
 GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
 	     2,  1,  3,  8, 10,  9, 11,  4,  6,  5,  7, 12, 14, 13, 15,
diff --git a/code/modules/atmospherics/ZAS/Plasma.dm b/code/modules/atmospherics/ZAS/Plasma.dm
index 64f28ec787d..c494c753e0d 100644
--- a/code/modules/atmospherics/ZAS/Plasma.dm
+++ b/code/modules/atmospherics/ZAS/Plasma.dm
@@ -167,7 +167,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 	. = ..()
 	//Items that are in plasma, but not on a mob, can still be contaminated.
 	if(istype(I) && SSzas && SSzas.settings?.plc.cloth_contamination && I.can_contaminate())
-		var/datum/gas_mixture/env = return_air(1)
+		var/datum/gas_mixture/env = return_air()
 		if(!env)
 			return
 		for(var/g in env.gas)
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index ad184f3e607..016ac21061a 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -4,7 +4,6 @@
 	specific_heat = 20	// J/(mol*K)
 	molar_mass = 0.032	// kg/mol
 	flags = XGM_GAS_OXIDIZER | XGM_GAS_FUSION_FUEL
-	breathed_product = /datum/reagent/oxygen
 	symbol_html = "O<sub>2</sub>"
 	symbol = "O2"
 
@@ -36,7 +35,7 @@
 
 /datum/xgm_gas/phoron
 	id = GAS_PLASMA
-	name = "Phoron"
+	name = "Plasma"
 
 	//Note that this has a significant impact on TTV yield.
 	//Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure.
@@ -131,7 +130,6 @@
 	specific_heat = 80	// J/(mol*K)
 	molar_mass = 0.004	// kg/mol
 	flags = XGM_GAS_FUSION_FUEL
-	//breathed_product = /datum/reagent/helium
 	symbol_html = "He"
 	symbol = "He"
 
@@ -165,7 +163,7 @@
 	name = "Xenon"
 	specific_heat = 3	// J/(mol*K)
 	molar_mass = 0.054	// kg/mol
-	//breathed_product = /datum/reagent/nitrous_oxide/xenon
+	breathed_product = /datum/reagent/nitrous_oxide/xenon
 	symbol_html = "Xe"
 	symbol = "Xe"
 
@@ -198,8 +196,8 @@
 	molar_mass = 0.017	// kg/mol
 	tile_overlay = "chlorine"
 	overlay_limit = 0.1
-	flags = XGM_GAS_CONTAMINANT
-	//breathed_product = /datum/reagent/toxin/chlorine
+	flags = XGM_GAS_OXIDIZER
+	breathed_product = /datum/reagent/chlorine
 	symbol_html = "Cl"
 	symbol = "Cl"
 
@@ -210,16 +208,14 @@
 	overlay_limit = 0.5
 	specific_heat = 30	// J/(mol*K)
 	molar_mass = 0.020	// kg/mol
-	breathed_product =     /datum/reagent/water
-	condensation_product = /datum/reagent/water
-	condensation_point =   308.15 // 35C. Dew point is ~20C but this is better for gameplay considerations.
+	breathed_product = /datum/reagent/water
+	condensation_point = 308.15 // 35C. Dew point is ~20C but this is better for gameplay considerations.
 	symbol_html = "H<sub>2</sub>O"
 	symbol = "H2O"
 
 /datum/xgm_gas/sulfurdioxide
 	id = GAS_SULFUR
 	name = "Sulfur Dioxide"
-
 	specific_heat = 30	// J/(mol*K)
 	molar_mass = 0.044	// kg/mol
 	symbol_html = "SO<sub>2</sub>"
@@ -228,7 +224,6 @@
 /datum/xgm_gas/ammonia
 	id = GAS_AMMONIA
 	name = "Ammonia"
-
 	specific_heat = 20	// J/(mol*K)
 	molar_mass = 0.017	// kg/mol
 	breathed_product = /datum/reagent/ammonia
@@ -240,6 +235,6 @@
 	name = "Carbon Monoxide"
 	specific_heat = 30	// J/(mol*K)
 	molar_mass = 0.028	// kg/mol
-	//breathed_product = /datum/reagent/carbon_monoxide
+	breathed_product = /datum/reagent/carbon_monoxide
 	symbol_html = "CO"
 	symbol = "CO"
diff --git a/code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm b/code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm
new file mode 100644
index 00000000000..dbdd45cbb25
--- /dev/null
+++ b/code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm
@@ -0,0 +1,41 @@
+//Apparently on TG, N2O fluid doesn't make you giggle, so this is almost an exact copy.
+/datum/reagent/nitrous_oxide/xenon
+	name = "Xenon"
+	description = "A nontoxic gas used as a general anaesthetic."
+	reagent_state = GAS
+	metabolization_rate = 0.3 * REAGENTS_METABOLISM
+	color = "#808080"
+	taste_description = "sweetness"
+	ph = 5.8
+	chemical_flags = REAGENT_NO_RANDOM_RECIPE
+
+/datum/reagent/carbon_monoxide
+	name = "Carbon Monoxide"
+	description = "A dangerous carbon comubstion byproduct."
+	taste_description = "stale air"
+	color = "#808080"
+	metabolization_rate = 0.3 * REAGENTS_METABOLISM
+	chemical_flags = REAGENT_NO_RANDOM_RECIPE
+
+/datum/reagent/carbon_monoxide/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
+	var/warning_message
+	var/warning_prob = 10
+	if(volume >= 3)
+		warning_message = pick("extremely dizzy","short of breath","faint","confused")
+		warning_prob = 15
+		M.adjustOxyLoss(rand(10,20))
+		M.throw_alert(ALERT_TOO_MUCH_CO2, /atom/movable/screen/alert/too_much_co2, override = TRUE)
+	else if(volume >= 1.5)
+		warning_message = pick("dizzy","short of breath","faint","momentarily confused")
+		M.throw_alert(ALERT_TOO_MUCH_CO2, /atom/movable/screen/alert/too_much_co2, override = TRUE)
+		M.adjustOxyLoss(rand(3,5))
+	else if(volume >= 0.25)
+		warning_message = pick("a little dizzy","short of breath")
+		warning_prob = 10
+	if(warning_message && prob(warning_prob))
+		to_chat(M, "<span class='warning'>You feel [warning_message].</span>")
+
+	return ..()
+/datum/reagent/carbon_monoxide/on_mob_end_metabolize(mob/living/L)
+	. = ..()
+	L.clear_alert(ALERT_TOO_MUCH_CO2, clear_override = TRUE)
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 779c7fcfeb0..e80a872816a 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -103,6 +103,23 @@
 		GAS_CO2 = new/datum/tlv(-1, -1, 5, 10),
 		GAS_PLASMA = new/datum/tlv/dangerous,
 		GAS_N2O = new/datum/tlv/dangerous,
+		GAS_METHYL_BROMIDE = new/datum/tlv/dangerous,
+		GAS_METHANE = new/datum/tlv/dangerous,
+		GAS_HYDROGEN = new/datum/tlv/dangerous,
+		GAS_CHLORINE = new/datum/tlv/dangerous,
+		GAS_CO = new/datum/tlv/dangerous,
+		GAS_NO2 = new/datum/tlv/dangerous,
+		GAS_XENON = new/datum/tlv/dangerous,
+		GAS_TRITIUM = new/datum/tlv/dangerous,
+		GAS_DEUTERIUM = new/datum/tlv/dangerous,
+		GAS_METHANE = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_HELIUM = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_KRYPTON = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_NEON = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_NO = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_STEAM = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_SULFUR = new/datum/tlv(-1, -1, 1000, 1000),
+		GAS_ARGON = new/datum/tlv(-1, -1, 1000, 1000),
 	)
 	/* // Breathable air.
 		"pressure" = new/datum/tlv(HAZARD_LOW_PRESSURE, WARNING_LOW_PRESSURE, WARNING_HIGH_PRESSURE, HAZARD_HIGH_PRESSURE), // kPa. Values are hazard_min, warning_min, warning_max, hazard_max
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 64b6373c169..3d82121001e 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -151,6 +151,12 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	gas_type = GAS_CO2
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#4e4c48"
+
+/obj/machinery/portable_atmospherics/canister/carbon_monoxide
+	name = "Carbon monoxide canister"
+	gas_type = GAS_CO
+	greyscale_config = /datum/greyscale_config/canister
+	greyscale_colors = "#808080"
 /*
 /obj/machinery/portable_atmospherics/canister/freon
 	name = "Freon canister"
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 6f2e1281e8a..8711c7cfe74 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -96,13 +96,13 @@
 
 		var/datum/species/S = dna.species
 
-		if(S.breathid == "o2")
+		if(S.breathid == GAS_OXYGEN)
 			throw_alert(ALERT_NOT_ENOUGH_OXYGEN, /atom/movable/screen/alert/not_enough_oxy)
-		else if(S.breathid == "plas")
+		else if(S.breathid == GAS_PLASMA)
 			throw_alert(ALERT_NOT_ENOUGH_PLASMA, /atom/movable/screen/alert/not_enough_plas)
-		else if(S.breathid == "co2")
+		else if(S.breathid == GAS_CO2)
 			throw_alert(ALERT_NOT_ENOUGH_CO2, /atom/movable/screen/alert/not_enough_co2)
-		else if(S.breathid == "n2")
+		else if(S.breathid == GAS_NITROGEN)
 			throw_alert(ALERT_NOT_ENOUGH_NITRO, /atom/movable/screen/alert/not_enough_nitro)
 
 		return FALSE
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 79d57f6f933..c80baa72787 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -176,7 +176,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
 	var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
 
 	///What gas does this species breathe? Used by suffocation screen alerts, most of actual gas breathing is handled by mutantlungs. See [life.dm][code/modules/mob/living/carbon/human/life.dm]
-	var/breathid = "o2"
+	var/breathid = GAS_OXYGEN
 
 	///What anim to use for dusting
 	var/dust_anim = "dust-h"
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index bb198308ee9..3b11d3b4818 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -26,7 +26,7 @@
 	heatmod = 1.5
 	brutemod = 1.5
 	payday_modifier = 0.75
-	breathid = "plas"
+	breathid = GAS_PLASMA
 	damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
 	disliked_food = FRUIT | CLOTH
 	liked_food = VEGETABLES
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index c9671c6b8be..8f3cd612fa7 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -116,9 +116,24 @@
 				var/obj/loc_as_obj = loc
 				loc_as_obj.handle_internal_lifeform(src,0)
 
+	// Pass reagents from the gas into our body.
+	// Presumably if you breathe it you have a specialized metabolism for it, so we drop/ignore breath_type. Also avoids
+	// humans processing thousands of units of oxygen over the course of a round for the sole purpose of poisoning vox.
+	if(lungs)
+		var/breath_type = dna?.species?.breathid
+		for(var/gasname in breath.gas - breath_type)
+			var/breathed_product = xgm_gas_data.breathed_product[gasname]
+			if(breathed_product)
+				var/reagent_amount = breath.gas[gasname] * REAGENT_GAS_EXCHANGE_FACTOR
+				// Little bit of sanity so we aren't trying to add 0.0000000001 units of CO2, and so we don't end up with 99999 units of CO2.
+				if(reagent_amount >= 0.05)
+					reagents.add_reagent(breathed_product, reagent_amount)
+					breath.adjust_gas(gasname, -breath.gas[gasname], update = 0) //update after
+
 	check_breath(breath)
 
 	if(breath)
+		breath.update_values()
 		loc.assume_air(breath)
 
 /mob/living/carbon/proc/has_smoke_protection()
@@ -141,7 +156,7 @@
 		adjustOxyLoss(2)
 
 	//CRIT
-	if(!breath || (breath.total_moles() == 0) || !lungs)
+	if(!breath || (breath.total_moles == 0) || !lungs)
 		if(reagents.has_reagent(/datum/reagent/medicine/epinephrine, needs_metabolizing = TRUE) && lungs)
 			return FALSE
 		adjustOxyLoss(1)
@@ -150,17 +165,18 @@
 		throw_alert(ALERT_NOT_ENOUGH_OXYGEN, /atom/movable/screen/alert/not_enough_oxy)
 		return FALSE
 
+	var/list/breath_gases = breath.gas
 	var/safe_oxy_min = 16
 	var/safe_co2_max = 10
 	var/safe_plas_max = 0.05
 	var/SA_para_min = 1
 	var/SA_sleep_min = 5
 	var/oxygen_used = 0
-	var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
+	var/breath_pressure = (breath.total_moles*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
 
-	var/O2_partialpressure = (breath.get_gas(GAS_OXYGEN)/breath.total_moles())*breath_pressure
-	var/Plasma_partialpressure = (breath.get_gas(GAS_OXYGEN)/breath.total_moles())*breath_pressure
-	var/CO2_partialpressure = (breath.get_gas(GAS_CO2)/breath.total_moles())*breath_pressure
+	var/O2_partialpressure = (breath_gases[GAS_OXYGEN]/breath.total_moles)*breath_pressure
+	var/Plasma_partialpressure = (breath_gases[GAS_PLASMA]/breath.total_moles)*breath_pressure
+	var/CO2_partialpressure = (breath_gases[GAS_CO2]/breath.total_moles)*breath_pressure
 
 
 	//OXYGEN
@@ -171,7 +187,7 @@
 			var/ratio = 1 - O2_partialpressure/safe_oxy_min
 			adjustOxyLoss(min(5*ratio, 3))
 			failed_last_breath = TRUE
-			oxygen_used = breath.get_gas(GAS_OXYGEN)*ratio
+			oxygen_used = breath_gases[GAS_OXYGEN]*ratio
 		else
 			adjustOxyLoss(3)
 			failed_last_breath = TRUE
@@ -181,11 +197,11 @@
 		failed_last_breath = FALSE
 		if(health >= crit_threshold)
 			adjustOxyLoss(-5)
-		oxygen_used = breath.get_gas(GAS_OXYGEN)
+		oxygen_used = breath_gases[GAS_OXYGEN]
 		clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
 
-	breath.adjust_gas(GAS_OXYGEN, -oxygen_used)
-	breath.adjust_gas(GAS_CO2, oxygen_used)
+	breath.adjust_gas(GAS_OXYGEN, -oxygen_used, update = 0)
+	breath.adjust_gas(GAS_CO2, oxygen_used, update = 0)
 
 	//CARBON DIOXIDE
 	if(CO2_partialpressure > safe_co2_max)
@@ -204,15 +220,15 @@
 
 	//PLASMA
 	if(Plasma_partialpressure > safe_plas_max)
-		var/ratio = breath.get_gas(GAS_PLASMA)/safe_plas_max * 10
+		var/ratio = breath.gas[GAS_PLASMA]/safe_plas_max * 10
 		adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE))
 		throw_alert(ALERT_TOO_MUCH_PLASMA, /atom/movable/screen/alert/too_much_plas)
 	else
 		clear_alert(ALERT_TOO_MUCH_PLASMA)
 
 	//NITROUS OXIDE
-	if(breath.get_gas(GAS_N2O))
-		var/SA_partialpressure = (breath.get_gas(GAS_N2O)/breath.total_moles())*breath_pressure
+	if(breath_gases[GAS_N2O])
+		var/SA_partialpressure = (breath_gases[GAS_N2O]/breath.total_moles)*breath_pressure
 		if(SA_partialpressure > SA_para_min)
 			throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o)
 			SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria")
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 9f33fad685c..17e4f269378 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1393,7 +1393,7 @@
 	. = ..()
 	if(istype(exposed_turf))
 		var/temp = holder ? holder.chem_temp : T20C
-		exposed_turf.atmos_spawn_air("n2o=[reac_volume/20];TEMP=[temp]")
+		exposed_turf.assume_gas(GAS_N2O, reac_volume / REAGENT_GAS_EXCHANGE_FACTOR, temp)
 
 /datum/reagent/nitrous_oxide/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)
 	. = ..()
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index bbc5323105f..441c285e531 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -107,8 +107,10 @@
 	if(!holder.my_atom)
 		return
 
-	var/turf/T = get_turf(holder.my_atom)
-	T.atmos_spawn_air(GAS_PLASMA, volume, holder.chem_temp)
+	var/turf/open/T = get_turf(holder.my_atom)
+	if(!istype(T))
+		return
+	T.assume_gas(GAS_PLASMA, volume, holder.chem_temp)
 	holder.del_reagent(type)
 
 /datum/reagent/toxin/plasma/expose_turf(turf/open/exposed_turf, reac_volume)
@@ -116,13 +118,15 @@
 		return
 	var/temp = holder ? holder.chem_temp : T20C
 	if(temp >= LIQUID_PLASMA_BP)
-		exposed_turf.atmos_spawn_air("plasma=[reac_volume];TEMP=[temp]")
+		exposed_turf.assume_gas(GAS_PLASMA, reac_volume / REAGENT_GAS_EXCHANGE_FACTOR, holder.chem_temp)
 	return ..()
 
 /datum/reagent/toxin/plasma/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel!
 	. = ..()
 	if(methods & (TOUCH|VAPOR))
 		exposed_mob.adjust_fire_stacks(reac_volume / 5)
+		if(prob(50 * reac_volume))
+			exposed_mob.expose_plasma()
 		return
 
 /datum/reagent/toxin/hot_ice
diff --git a/tgstation.dme b/tgstation.dme
index eb1ccd4e75d..13fd2990a44 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2367,6 +2367,7 @@
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\manifold4w.dm"
 #include "code\modules\atmospherics\ZAS\Connection.dm"
 #include "code\modules\atmospherics\ZAS\ConnectionGroup.dm"
+#include "code\modules\atmospherics\ZAS\zas_extras\gas_reagents.dm"
 #include "code\modules\atmospherics\ZAS\ConnectionManager.dm"
 #include "code\modules\atmospherics\ZAS\ZAS_Settings.dm"
 #include "code\modules\atmospherics\ZAS\Debug.dm"

From cd7f757746015e489ab82fc2aadc9010191e7bec Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 24 Apr 2022 16:19:26 -0400
Subject: [PATCH 051/200] Updates fire code to be more functional

---
 code/controllers/subsystem/explosions.dm      |  3 ++-
 code/datums/mutations/actions.dm              |  2 +-
 .../effects/decals/cleanable/robots.dm        |  4 ++-
 code/modules/antagonists/cult/runes.dm        |  3 ++-
 .../heretic/magic/ash_ascension.dm            |  9 ++++---
 code/modules/atmospherics/ZAS/Fire.dm         | 25 +++++++++++++------
 .../food_and_drinks/drinks/drinks/bottle.dm   |  4 ++-
 code/modules/mob/living/carbon/life.dm        |  2 +-
 .../simple_animal/hostile/megafauna/drake.dm  |  7 ++++--
 .../simple_animal/hostile/space_dragon.dm     |  3 ++-
 .../projectiles/guns/energy/beam_rifle.dm     |  3 ++-
 .../projectile/bullets/_incendiary.dm         |  6 +++--
 .../chemistry/reagents/other_reagents.dm      |  2 +-
 .../reagents/pyrotechnic_reagents.dm          | 11 +++++---
 code/modules/reagents/chemistry/recipes.dm    |  9 ++++---
 .../chemistry/recipes/cat2_medicines.dm       |  4 ++-
 .../chemistry/recipes/pyrotechnics.dm         | 12 ++++++---
 .../xenobiology/crossbreeding/charged.dm      |  5 ++--
 .../xenobiology/crossbreeding/chilling.dm     |  3 ++-
 .../xenobiology/crossbreeding/regenerative.dm |  5 ++--
 .../vehicles/mecha/combat/savannah_ivanov.dm  |  3 ++-
 21 files changed, 84 insertions(+), 41 deletions(-)

diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm
index c8f3e6b1cd7..337180125ae 100644
--- a/code/controllers/subsystem/explosions.dm
+++ b/code/controllers/subsystem/explosions.dm
@@ -674,7 +674,8 @@ SUBSYSTEM_DEF(explosions)
 		for(var/thing in flame_turf)
 			if(thing)
 				var/turf/T = thing
-				new /obj/effect/hotspot(T) //Mostly for ambience!
+				//new /obj/effect/hotspot(T) //Mostly for ambience!
+				T.create_fire(2, 25)
 		cost_flameturf = MC_AVERAGE(cost_flameturf, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
 
 		if (low_turf.len || med_turf.len || high_turf.len)
diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm
index 5367666877e..a726d4cb644 100644
--- a/code/datums/mutations/actions.dm
+++ b/code/datums/mutations/actions.dm
@@ -164,7 +164,7 @@
 
 /obj/effect/proc_holder/spell/cone/staggered/firebreath/do_turf_cone_effect(turf/target_turf, level)
 	// Further turfs experience less exposed_temperature and exposed_volume
-	new /obj/effect/hotspot(target_turf) // for style
+	target_turf.create_fire(1, 10) // for style
 	target_turf.hotspot_expose(max(500, 900 - (100 * level)), max(50, 200 - (50 * level)), 1)
 
 /obj/effect/proc_holder/spell/cone/staggered/firebreath/do_mob_cone_effect(mob/living/target_mob, level)
diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm
index b7fe891900b..630860f7ea9 100644
--- a/code/game/objects/effects/decals/cleanable/robots.dm
+++ b/code/game/objects/effects/decals/cleanable/robots.dm
@@ -82,6 +82,7 @@
 	decal_reagent = /datum/reagent/fuel/oil
 	reagent_amount = 30
 
+
 /obj/effect/decal/cleanable/oil/attackby(obj/item/I, mob/living/user)
 	var/attacked_by_hot_thing = I.get_temperature()
 	if(attacked_by_hot_thing)
@@ -91,6 +92,7 @@
 		return
 	return ..()
 
+/*
 /obj/effect/decal/cleanable/oil/fire_act(exposed_temperature, exposed_volume)
 	if(exposed_temperature < 480)
 		return
@@ -98,7 +100,7 @@
 	var/turf/T = get_turf(src)
 	qdel(src)
 	new /obj/effect/hotspot(T)
-
+*/
 /obj/effect/decal/cleanable/oil/streak
 	icon_state = "streak1"
 	random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 1ebd987a682..f91a8fc9cd8 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -771,7 +771,8 @@ structure_check() searches for nearby cultist structures required for the invoca
 	if(QDELETED(src))
 		return
 	do_area_burn(T, 1.5)
-	new /obj/effect/hotspot(T)
+	//new /obj/effect/hotspot(T)
+	T.create_fire(1, 10)
 	qdel(src)
 
 /obj/effect/rune/blood_boil/proc/do_area_burn(turf/T, multiplier)
diff --git a/code/modules/antagonists/heretic/magic/ash_ascension.dm b/code/modules/antagonists/heretic/magic/ash_ascension.dm
index e43b7fb4c94..49c1e4460dd 100644
--- a/code/modules/antagonists/heretic/magic/ash_ascension.dm
+++ b/code/modules/antagonists/heretic/magic/ash_ascension.dm
@@ -39,7 +39,8 @@
 		return
 
 	for(var/turf/nearby_turf as anything in RANGE_TURFS(1, current_user))
-		new /obj/effect/hotspot(nearby_turf)
+		//new /obj/effect/hotspot(nearby_turf)
+		nearby_turf.create_fire(1, 10)
 		nearby_turf.hotspot_expose(750, 25 * delta_time, 1)
 		for(var/mob/living/fried_living in nearby_turf.contents - current_user)
 			fried_living.adjustFireLoss(2.5 * delta_time)
@@ -65,7 +66,8 @@
 	var/current_range = 1
 	for(var/i in 0 to max_range)
 		for(var/turf/nearby_turf as anything in spiral_range_turfs(current_range, centre))
-			new /obj/effect/hotspot(nearby_turf)
+			//new /obj/effect/hotspot(nearby_turf)
+			nearby_turf.create_fire(1, 10)
 			nearby_turf.hotspot_expose(750, 50, 1)
 			for(var/mob/living/fried_living in nearby_turf.contents - centre)
 				fried_living.adjustFireLoss(5)
@@ -133,7 +135,8 @@
 			L.adjustFireLoss(20)
 			to_chat(L, span_userdanger("You're hit by [source]'s eldritch flames!"))
 
-		new /obj/effect/hotspot(T)
+		//new /obj/effect/hotspot(T)
+		T.create_fire(1, 10)
 		T.hotspot_expose(700,50,1)
 		// deals damage to mechs
 		for(var/obj/vehicle/sealed/mecha/M in T.contents)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 1c21064fb24..ce0328f890b 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -93,7 +93,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	return 0
 
 //turf/simulated/create_fire(fl) ZASTURF
-/turf/create_fire(fl)
+/turf/open/create_fire(fl, create_own_fuel)
 	if(fire)
 		fire.firelevel = max(fl, fire.firelevel)
 		return 1
@@ -105,6 +105,13 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	SSzas.active_fire_zones |= zone
 
 	var/obj/effect/decal/cleanable/oil/fuel = locate() in src
+	if(create_own_fuel)
+		if(!fuel)
+			fuel = new /obj/effect/decal/cleanable/oil(src)
+			fuel.reagent_amount = create_own_fuel
+		else
+			fuel.reagent_amount += create_own_fuel
+
 	zone.fire_tiles |= src
 	if(fuel) zone.fuel_objs += fuel
 
@@ -145,13 +152,16 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	if(firelevel > 6)
 		icon_state = "3"
-		set_light(1, 2, 7)
+		set_light_power(2)
+		set_light_range(7)
 	else if(firelevel > 2.5)
 		icon_state = "2"
-		set_light(0.7, 2, 5)
+		set_light_power(1.5)
+		set_light_range(5)
 	else
 		icon_state = "1"
-		set_light(0.5, 1, 3)
+		set_light_power(1)
+		set_light_range(3)
 
 	for(var/mob/living/L in loc)
 		L.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure())  //Burn the mobs!
@@ -190,7 +200,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 				enemy_tile.adjacent_fire_act(loc, air_contents, air_contents.temperature, air_contents.volume)
 
 	animate(src, color = fire_color(air_contents.temperature), 5)
-	set_light(l_color = color)
+	set_light_color(color)
 
 /obj/effect/hotspot/New(newLoc,fl)
 	..()
@@ -203,8 +213,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	var/datum/gas_mixture/air_contents = loc.return_air()
 	color = fire_color(air_contents.temperature)
-	set_light(0.5, 1, 3, l_color = color)
-
+	set_light_range(3)
+	set_light_power(1)
+	set_light_color(color)
 	firelevel = fl
 	SSzas.active_hotspots.Add(src)
 
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index edf70da9687..af8e13ff484 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -661,7 +661,9 @@
 				break
 	if(firestarter && active)
 		hit_atom.fire_act()
-		new /obj/effect/hotspot(get_turf(hit_atom))
+		//new /obj/effect/hotspot(get_turf(hit_atom))
+		var/turf/T = get_turf(hit_atom)
+		T.create_fire(1, 10)
 	..()
 
 /obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 8f3cd612fa7..2bfde32e8b1 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -119,7 +119,7 @@
 	// Pass reagents from the gas into our body.
 	// Presumably if you breathe it you have a specialized metabolism for it, so we drop/ignore breath_type. Also avoids
 	// humans processing thousands of units of oxygen over the course of a round for the sole purpose of poisoning vox.
-	if(lungs)
+	if(lungs && !isnull(breath))
 		var/breath_type = dna?.species?.breathid
 		for(var/gasname in breath.gas - breath_type)
 			var/breathed_product = xgm_gas_data.breathed_product[gasname]
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 756ffc9cd74..8a64375ef8e 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -183,7 +183,9 @@
 	for(var/turf/T in turfs)
 		if(istype(T, /turf/closed))
 			break
-		var/obj/effect/hotspot/drake_fire_hotspot = new /obj/effect/hotspot(T)
+		//var/obj/effect/hotspot/drake_fire_hotspot = new /obj/effect/hotspot(T)
+		T.create_fire(1, 10)
+		var/obj/effect/hotspot/drake_fire_hotspot = locate() in T
 		if(frozen)
 			drake_fire_hotspot.add_atom_colour(COLOR_BLUE_LIGHT, FIXED_COLOUR_PRIORITY)
 		T.hotspot_expose(DRAKE_FIRE_TEMP,DRAKE_FIRE_EXPOSURE,1)
@@ -332,7 +334,8 @@
 		var/turf/closed/mineral/M = T
 		M.gets_drilled()
 	playsound(T, SFX_EXPLOSION, 80, TRUE)
-	new /obj/effect/hotspot(T)
+	//new /obj/effect/hotspot(T)
+	T.create_fire(1, 10)
 	T.hotspot_expose(DRAKE_FIRE_TEMP, DRAKE_FIRE_EXPOSURE, 1)
 	for(var/mob/living/L in T.contents)
 		if(istype(L, /mob/living/simple_animal/hostile/megafauna/dragon))
diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
index 15e3cd5e87b..9d890df0041 100644
--- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
@@ -334,7 +334,8 @@
 /mob/living/simple_animal/hostile/space_dragon/proc/dragon_fire_line(turf/T)
 	var/list/hit_list = list()
 	hit_list += src
-	new /obj/effect/hotspot(T)
+	//new /obj/effect/hotspot(T)
+	T.create_fire(1, 10)
 	T.hotspot_expose(700,50,1)
 	for(var/mob/living/L in T.contents)
 		if(L in hit_list)
diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm
index 01a2e87700d..1ae0ca8bd01 100644
--- a/code/modules/projectiles/guns/energy/beam_rifle.dm
+++ b/code/modules/projectiles/guns/energy/beam_rifle.dm
@@ -448,7 +448,8 @@
 		to_chat(L, span_userdanger("\The [src] sears you!"))
 	for(var/turf/T in RANGE_TURFS(aoe_fire_range, epicenter)) //handle aoe fire
 		if(prob(aoe_fire_chance))
-			new /obj/effect/hotspot(T)
+			//new /obj/effect/hotspot(T)
+			T.create_fire(1, 10)
 	for(var/obj/O in range(aoe_structure_range, epicenter))
 		if(!isitem(O))
 			O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, LASER, FALSE)
diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm
index cb18fa00236..cbbe45861f4 100644
--- a/code/modules/projectiles/projectile/bullets/_incendiary.dm
+++ b/code/modules/projectiles/projectile/bullets/_incendiary.dm
@@ -13,7 +13,8 @@
 	. = ..()
 	var/turf/location = get_turf(src)
 	if(location)
-		new /obj/effect/hotspot(location)
+		//.new /obj/effect/hotspot(location)
+		location.create_fire(1, 10)
 		location.hotspot_expose(700, 50, 1)
 
 /// Used in [the backblast element][/datum/element/backblast]
@@ -50,7 +51,8 @@
 	. = ..()
 	var/turf/location = get_turf(target)
 	if(isopenturf(location))
-		new /obj/effect/hotspot(location)
+		//new /obj/effect/hotspot(location)
+		location.create_fire(1, 10)
 		location.hotspot_expose(700, 50, 1)
 
 /obj/projectile/bullet/incendiary/backblast/Move()
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 17e4f269378..260cfa6bdf3 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -915,7 +915,7 @@
 
 
 /datum/reagent/chlorine/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
-	M.take_bodypart_damage(0.5*REM*delta_time, 0, 0, 0)
+	M.adjustToxLoss(3*REM*delta_time)
 	. = TRUE
 	..()
 
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
index bc6120804c9..31355b69b89 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
@@ -67,15 +67,18 @@
 		exposed_turf.burn_tile()
 	if(isfloorturf(exposed_turf))
 		for(var/turf/nearby_turf in RANGE_TURFS(1, exposed_turf))
-			if(!locate(/obj/effect/hotspot) in nearby_turf)
-				new /obj/effect/hotspot(nearby_turf)
+			/*if(!locate(/obj/effect/hotspot) in nearby_turf)
+				new /obj/effect/hotspot(nearby_turf)*/
+			nearby_turf.create_fire(1, 10)
 
 /datum/reagent/clf3/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)
 	. = ..()
 	exposed_mob.adjust_fire_stacks(min(reac_volume/5, 10))
 	exposed_mob.IgniteMob()
-	if(!locate(/obj/effect/hotspot) in exposed_mob.loc)
-		new /obj/effect/hotspot(exposed_mob.loc)
+	//if(!locate(/obj/effect/hotspot) in exposed_mob.loc)
+		//new /obj/effect/hotspot(exposed_mob.loc)
+	var/turf/T = get_turf(exposed_mob)
+	T.create_fire(1, 10)
 
 /datum/reagent/sorium
 	name = "Sorium"
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index bc133b55a48..8594509568a 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -475,7 +475,8 @@
 				equilibrium.data["[id]_y"] += increment
 	var/turf/holder_turf = get_turf(holder.my_atom)
 	var/turf/target = locate(holder_turf.x + equilibrium.data["[id]_x"], holder_turf.y + equilibrium.data["[id]_y"], holder_turf.z)
-	new /obj/effect/hotspot(target)
+	//new /obj/effect/hotspot(target)
+	target.create_fire(1, 10)
 	debug_world("X: [equilibrium.data["[id]_x"]], Y: [equilibrium.data["[id]_x"]]")
 
 /*
@@ -487,10 +488,12 @@
 /datum/chemical_reaction/proc/explode_fire_square(datum/reagents/holder, datum/equilibrium/equilibrium, fire_range = 1)
 	var/turf/location = get_turf(holder.my_atom)
 	if(fire_range == 0)
-		new /obj/effect/hotspot(location)
+		//new /obj/effect/hotspot(location)
+		location.create_fire(1, 10)
 		return
 	for(var/turf/turf as anything in RANGE_TURFS(fire_range, location))
-		new /obj/effect/hotspot(turf)
+		//new /obj/effect/hotspot(turf)
+		turf.create_fire(1, 10)
 
 ///////////END FIRE BASED EXPLOSIONS
 
diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm
index a34603f4a6a..ecbf33d3fc1 100644
--- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm
+++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm
@@ -30,7 +30,9 @@
 		return
 	if(helbital.purity <= 0.25)
 		if(prob(25))
-			new /obj/effect/hotspot(holder.my_atom.loc)
+			//new /obj/effect/hotspot(holder.my_atom.loc)
+			var/turf/T = get_turf(holder.my_atom)
+			T.create_fire(1, 10)
 			holder.remove_reagent(/datum/reagent/medicine/c2/helbital, 2)
 			holder.chem_temp += 5
 			holder.my_atom.audible_message(span_notice("[icon2html(holder.my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] The impurity of the reacting helbital is too great causing [holder.my_atom] to let out a hearty burst of flame, evaporating part of the product!"))
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index 08385f6e134..6635fbca8b2 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -53,7 +53,8 @@
 	var/fire_range = round(created_volume/30)
 	var/turf/T = get_turf(holder.my_atom)
 	for(var/turf/target as anything in RANGE_TURFS(fire_range,T))
-		new /obj/effect/hotspot(target)
+		//new /obj/effect/hotspot(target)
+		target.create_fire(1, 10)
 	holder.chem_temp = 500
 	..()
 
@@ -67,7 +68,8 @@
 	var/fire_range = round(created_volume/20)
 	var/turf/T = get_turf(holder.my_atom)
 	for(var/turf/turf as anything in RANGE_TURFS(fire_range,T))
-		new /obj/effect/hotspot(turf)
+		//new /obj/effect/hotspot(turf)
+		turf.create_fire(1, 10)
 	holder.chem_temp = 750
 	..()
 
@@ -212,7 +214,8 @@
 /datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
 	var/turf/T = get_turf(holder.my_atom)
 	for(var/turf/target as anything in RANGE_TURFS(1,T))
-		new /obj/effect/hotspot(target)
+		//new /obj/effect/hotspot(target)
+		target.create_fire(1, 10)
 	holder.chem_temp = 1000 // hot as shit
 
 /datum/chemical_reaction/reagent_explosion/methsplosion
@@ -225,7 +228,8 @@
 /datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
 	var/turf/T = get_turf(holder.my_atom)
 	for(var/turf/target in RANGE_TURFS(1,T))
-		new /obj/effect/hotspot(target)
+		//new /obj/effect/hotspot(target)
+		target.create_fire(1, 10)
 	holder.chem_temp = 1000 // hot as shit
 	..()
 
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index 9b4cfa25aa2..9e5beccb169 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -44,8 +44,9 @@ Charged extracts:
 /obj/item/slimecross/charged/orange/do_effect(mob/user)
 	var/turf/targetturf = get_turf(user)
 	for(var/turf/turf as anything in RANGE_TURFS(5,targetturf))
-		if(!locate(/obj/effect/hotspot) in turf)
-			new /obj/effect/hotspot(turf)
+		/*if(!locate(/obj/effect/hotspot) in turf)
+			new /obj/effect/hotspot(turf)*/
+		turf.create_fire(1, 10)
 	..()
 
 /obj/item/slimecross/charged/purple
diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm
index 36ceb568c7b..9a2933e81f1 100644
--- a/code/modules/research/xenobiology/crossbreeding/chilling.dm
+++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm
@@ -45,7 +45,8 @@ Chilling extracts:
 	user.visible_message(span_danger("[src] shatters, and lets out a jet of heat!"))
 	for(var/turf/T in orange(get_turf(user),2))
 		if(get_dist(get_turf(user), T) > 1)
-			new /obj/effect/hotspot(T)
+			//new /obj/effect/hotspot(T)
+			T.create_fire(1, 10)
 	..()
 
 /obj/item/slimecross/chilling/purple
diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
index 5e36207a44b..77ed699dc87 100644
--- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm
+++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
@@ -44,8 +44,9 @@ Regenerative extracts:
 /obj/item/slimecross/regenerative/orange/core_effect_before(mob/living/target, mob/user)
 	target.visible_message(span_warning("The [src] boils over!"))
 	for(var/turf/targetturf in RANGE_TURFS(1,target))
-		if(!locate(/obj/effect/hotspot) in targetturf)
-			new /obj/effect/hotspot(targetturf)
+		/*if(!locate(/obj/effect/hotspot) in targetturf)
+			new /obj/effect/hotspot(targetturf)*/
+		targetturf.create_fire(1, 10)
 
 /obj/item/slimecross/regenerative/purple
 	colour = "purple"
diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
index 3b28c661952..827673abe33 100644
--- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
+++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
@@ -123,7 +123,8 @@
 		shake_camera(shaken, 3, 3)
 
 	var/turf/launch_turf = get_turf(chassis)
-	new /obj/effect/hotspot(launch_turf)
+	//new /obj/effect/hotspot(launch_turf)
+	launch_turf.create_fire(1, 10)
 	launch_turf.hotspot_expose(700, 50, 1)
 	new /obj/effect/skyfall_landingzone(launch_turf, chassis)
 	chassis.resistance_flags |= INDESTRUCTIBLE //not while jumping at least

From 6ea9f4144373b1d911ef277a1e411c43e90303a5 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 24 Apr 2022 17:34:16 -0400
Subject: [PATCH 052/200] Removes atmos sensitivity

---
 code/__DEFINES/atmospherics/temperature.dm    |  3 +--
 code/controllers/subsystem/airmachines.dm     |  2 --
 code/datums/elements/atmos_sensitive.dm       |  3 ++-
 code/game/machinery/doors/windowdoor.dm       | 23 +++++++++++++++++--
 code/game/machinery/firealarm.dm              |  1 -
 .../effects/effect_system/effects_foam.dm     | 10 +++-----
 code/game/objects/effects/glowshroom.dm       |  6 ++---
 code/game/objects/effects/spiderwebs.dm       |  6 ++---
 code/game/objects/items/flamethrower.dm       |  3 ++-
 code/game/objects/items/latexballoon.dm       |  7 ++----
 .../objects/items/stacks/sheets/leather.dm    | 15 +++++-------
 code/game/objects/structures/aliens.dm        | 17 +++++---------
 code/game/objects/structures/grille.dm        | 10 ++------
 code/game/objects/structures/window.dm        |  1 -
 code/modules/atmospherics/ZAS/Temperature.dm  | 11 +++++++--
 .../components/unary_devices/vent_scrubber.dm | 17 --------------
 .../machinery/portable/canister.dm            |  3 ++-
 code/modules/clothing/under/accessories.dm    | 16 ++++---------
 code/modules/events/spacevine.dm              | 17 ++++++--------
 .../living/carbon/alien/special/facehugger.dm |  7 ++----
 .../mob/living/simple_animal/bot/firebot.dm   | 12 +++++-----
 code/modules/power/apc/apc_main.dm            |  7 +++---
 code/modules/power/lighting/light.dm          |  6 -----
 code/modules/vehicles/mecha/_mecha.dm         |  1 -
 code/modules/vehicles/mecha/mecha_defense.dm  |  8 ++++---
 25 files changed, 90 insertions(+), 122 deletions(-)

diff --git a/code/__DEFINES/atmospherics/temperature.dm b/code/__DEFINES/atmospherics/temperature.dm
index e26dc041577..d9a31fd0bcc 100644
--- a/code/__DEFINES/atmospherics/temperature.dm
+++ b/code/__DEFINES/atmospherics/temperature.dm
@@ -1,6 +1,7 @@
 #define ATOM_IS_TEMPERATURE_SENSITIVE(A) (A && !QDELETED(A) && !(A.flags_2 & NO_TEMP_CHANGE_2))
 #define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5
 #define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25
+#define KEEP_ME_GOING 1
 
 /*#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
 	_atom.temperature = _temp; \
@@ -19,10 +20,8 @@
 			var/atom/A = thing; \
 			if(ATOM_IS_TEMPERATURE_SENSITIVE(A)) { \
 				START_PROCESSING(SSairatoms, A); \
-				A.flags_1 |= ATMOS_IS_PROCESSING_1 \
 			} \
 		} \
 	} else if(ATOM_IS_TEMPERATURE_SENSITIVE(_atoms)) { \
 		START_PROCESSING(SSairatoms, _atoms); \
-		_atoms.flags_1 |= ATMOS_IS_PROCESSING_1 \
 	}
diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
index 02e872bc111..7973428b70e 100644
--- a/code/controllers/subsystem/airmachines.dm
+++ b/code/controllers/subsystem/airmachines.dm
@@ -244,7 +244,6 @@ SUBSYSTEM_DEF(airmachines)
 		return
 	machine.atmos_processing = TRUE
 	atmos_machinery += machine
-	machine.flags_1 |= ATMOS_IS_PROCESSING_1
 
 /**
  * Removes a given machine to the processing system for SSZAS_MACHINES processing.
@@ -257,7 +256,6 @@ SUBSYSTEM_DEF(airmachines)
 		return
 	machine.atmos_processing = FALSE
 	atmos_machinery -= machine
-	machine.flags_1 &= ~ATMOS_IS_PROCESSING_1
 
 	// If we're currently processing atmos machines, there's a chance this machine is in
 	// the currentrun list, which is a cache of atmos_machinery. Remove it from that list
diff --git a/code/datums/elements/atmos_sensitive.dm b/code/datums/elements/atmos_sensitive.dm
index fd0ac7f6db2..28a32372fd2 100644
--- a/code/datums/elements/atmos_sensitive.dm
+++ b/code/datums/elements/atmos_sensitive.dm
@@ -2,7 +2,7 @@
 //It adds the object to a list on SSair to be processed for so long as the object wants to be processed
 //And removes it as soon as the object is no longer interested
 //Don't put it on things that tend to clump into one spot, you will cause lag spikes.
-/datum/element/atmos_sensitive
+/*/datum/element/atmos_sensitive
 	element_flags = ELEMENT_DETACH
 	var/static/list/pass_on = list(COMSIG_TURF_EXPOSE = /atom/proc/check_atmos_process)
 
@@ -81,3 +81,4 @@
 ///What to do when our requirements are no longer met
 /atom/proc/atmos_end()
 	return
+*/
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index a67a5436690..ce10f43b7d2 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -60,7 +60,6 @@
 	)
 
 	AddElement(/datum/element/connect_loc, loc_connections)
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	update_nearby_tiles(TRUE)
 
 /obj/machinery/door/window/ComponentInitialize()
@@ -75,6 +74,7 @@
 	electronics = null
 	/*var/turf/floor = get_turf(src)
 	floor.air_update_turf(TRUE, FALSE)*/
+	update_nearby_tiles()
 	return ..()
 
 /obj/machinery/door/window/update_icon_state()
@@ -266,11 +266,30 @@
 	add_atom_colour("#7D1919", FIXED_COLOUR_PRIORITY)
 
 /obj/machinery/door/window/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > T0C + (reinf ? 1600 : 800))
+	return (exposed_temperature > T0C + (reinf ? 1600 : 800)) ? KEEP_ME_GOING : FALSE
 
 /obj/machinery/door/window/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	take_damage(round(exposed_temperature / 200), BURN, 0, 0)
 
+/obj/machinery/door/window/fire_act(exposed_temperature, exposed_volume)
+	take_damage(round(exposed_temperature / 200), BURN, 0, 0)
+
+/obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
+	var/initial_damage_percentage = get_integrity_percentage()
+	. = ..()
+	if(.) //received damage
+		if(atom_integrity > 0)
+			playsound(src, get_sfx(SFX_GLASS_CRACK), 100, TRUE)
+			var/damage_percentage = get_integrity_percentage()
+			if (damage_percentage >= 75 && initial_damage_percentage < 75)
+				visible_message(span_warning("\The [src] looks like it's about to shatter!"))
+				playsound(loc, get_sfx(SFX_GLASS_CRACK), 100, 1)
+			else if (damage_percentage >= 50 && initial_damage_percentage < 50)
+				visible_message(span_warning("\The [src] looks seriously damaged!"))
+				playsound(loc, get_sfx(SFX_GLASS_CRACK), 100, 1)
+			else if (damage_percentage >= 25 && initial_damage_percentage < 25)
+				visible_message(span_warning("Cracks begin to appear in \the [src]!"))
+				playsound(loc, get_sfx(SFX_GLASS_CRACK), 100, 1)
 
 /obj/machinery/door/window/emag_act(mob/user)
 	if(!operating && density && !(obj_flags & EMAGGED))
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 4d00c47071d..aaac9406ed2 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -47,7 +47,6 @@
 	my_area = get_area(src)
 	LAZYADD(my_area.firealarms, src)
 
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	RegisterSignal(SSsecurity_level, COMSIG_SECURITY_LEVEL_CHANGED, .proc/check_security_level)
 	soundloop = new(src, FALSE)
 
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 1ffd68f649f..6aa32aba5c2 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -35,7 +35,6 @@
 
 /obj/effect/particle_effect/foam/firefighting/Initialize(mapload)
 	. = ..()
-	RemoveElement(/datum/element/atmos_sensitive)
 
 /obj/effect/particle_effect/foam/firefighting/process()
 	..()
@@ -95,7 +94,6 @@
 	create_reagents(1000) //limited by the size of the reagent holder anyway.
 	START_PROCESSING(SSfastprocess, src)
 	playsound(src, 'sound/effects/bubbles2.ogg', 80, TRUE, -3)
-	AddElement(/datum/element/atmos_sensitive, mapload)
 
 /obj/effect/particle_effect/foam/ComponentInitialize()
 	. = ..()
@@ -192,12 +190,10 @@
 		F.add_atom_colour(color, FIXED_COLOUR_PRIORITY)
 		F.metal = metal
 
-/obj/effect/particle_effect/foam/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 475
-
 /obj/effect/particle_effect/foam/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	if(prob(max(0, exposed_temperature - 475)))   //foam dissolves when heated
-		kill_foam()
+	if(exposed_temperature > 475)
+		if(prob(max(0, exposed_temperature - 475)))   //foam dissolves when heated
+			kill_foam()
 
 
 ///////////////////////////////////////////////
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 2c87da4834f..1cb3618c11b 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -100,7 +100,6 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
 	else //if on the floor, glowshroom on-floor sprite
 		icon_state = base_icon_state
 
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	COOLDOWN_START(src, spread_cooldown, rand(min_delay_spread, max_delay_spread))
 
 	START_PROCESSING(SSobj, src)
@@ -243,10 +242,11 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
 		playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
 
 /obj/structure/glowshroom/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 300
+	return (exposed_temperature > 300) ? KEEP_ME_GOING : FALSE
 
 /obj/structure/glowshroom/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(5, BURN, 0, 0)
+	if(exposed_temperature > 300)
+		take_damage(5, BURN, 0, 0)
 
 /obj/structure/glowshroom/acid_act(acidpwr, acid_volume)
 	visible_message(span_danger("[src] melts away!"))
diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm
index fcb6096eb50..d498b8bebe2 100644
--- a/code/game/objects/effects/spiderwebs.dm
+++ b/code/game/objects/effects/spiderwebs.dm
@@ -9,7 +9,6 @@
 
 /obj/structure/spider/Initialize(mapload)
 	. = ..()
-	AddElement(/datum/element/atmos_sensitive, mapload)
 
 /obj/structure/spider/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
 	if(damage_type == BURN)//the stickiness of the web mutes all attack sounds except fire damage type
@@ -25,10 +24,11 @@
 	. = ..()
 
 /obj/structure/spider/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 300
+	return (exposed_temperature > 300) ? KEEP_ME_GOING : FALSE
 
 /obj/structure/spider/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(5, BURN, 0, 0)
+	if(exposed_temperature > 300)
+		take_damage(5, BURN, 0, 0)
 
 /obj/structure/spider/stickyweb
 	///Whether or not the web is from the genetics power
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 260077375fc..96724324d20 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -220,7 +220,8 @@
 	var/datum/gas_mixture/ptank_mix = ptank.return_air()
 	var/datum/gas_mixture/air_transfer = ptank_mix.remove_ratio(release_amount)
 	//air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE
-	new/obj/effect/decal/cleanable/oil(target,air_transfer.get_by_flag(XGM_GAS_FUEL),get_dir(loc,target))
+	var/obj/effect/decal/cleanable/oil/l_fuel = new(target,air_transfer.get_by_flag(XGM_GAS_FUEL),get_dir(loc,target))
+	l_fuel.reagent_amount = release_amount
 	air_transfer.remove_by_flag(XGM_GAS_FUEL, 0)
 	target.assume_air(air_transfer)
 	//Burn it based on transfered gas
diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm
index 86c531d8030..27f2ceb8a5b 100644
--- a/code/game/objects/items/latexballoon.dm
+++ b/code/game/objects/items/latexballoon.dm
@@ -13,7 +13,6 @@
 
 /obj/item/latexballon/Initialize(mapload)
 	. = ..()
-	AddElement(/datum/element/atmos_sensitive, mapload)
 
 /obj/item/latexballon/proc/blow(obj/item/tank/tank, mob/user)
 	if (icon_state == "latexballon_bursted")
@@ -24,11 +23,9 @@
 	to_chat(user, span_notice("You blow up [src] with [tank]."))
 	air_contents = tank.remove_air_volume(3)
 
-/obj/item/latexballon/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > T0C+100)
-
 /obj/item/latexballon/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	burst()
+	if(exposed_temperature > T0C + 100)
+		burst()
 
 /obj/item/latexballon/proc/burst()
 	if (!air_contents || icon_state != "latexballon_blow")
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index cb28aeed081..196f15c164e 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -157,7 +157,6 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \
 /obj/item/stack/sheet/wethide/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
 	. = ..()
 	AddElement(/datum/element/dryable, /obj/item/stack/sheet/leather)
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	AddComponent(/datum/component/grillable, /obj/item/stack/sheet/leather, rand(1 SECONDS, 3 SECONDS), TRUE)
 
 /obj/item/stack/sheet/wethide/burn()
@@ -279,15 +278,13 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
 //Step two - washing..... it's actually in washing machine code.
 
 //Step three - drying
-/obj/item/stack/sheet/wethide/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > drying_threshold_temperature)
-
 /obj/item/stack/sheet/wethide/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	wetness--
-	if(wetness == 0)
-		new /obj/item/stack/sheet/leather(drop_location(), 1)
-		wetness = initial(wetness)
-		use(1)
+	if(exposed_temperature > drying_threshold_temperature)
+		wetness--
+		if(wetness == 0)
+			new /obj/item/stack/sheet/leather(drop_location(), 1)
+			wetness = initial(wetness)
+			use(1)
 
 /obj/item/stack/sheet/wethide/microwave_act(obj/machinery/microwave/MW)
 	..()
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index 38f4e3a2871..bc36af79fe0 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -166,8 +166,6 @@
 
 	set_base_icon()
 
-	AddElement(/datum/element/atmos_sensitive, mapload)
-
 /obj/structure/alien/weeds/Destroy()
 	if(parent_node)
 		UnregisterSignal(parent_node, COMSIG_PARENT_QDELETING)
@@ -244,13 +242,11 @@
  * Called to delete the weed
  */
 /obj/structure/alien/weeds/proc/do_qdel()
-	qdel(src)
-
-/obj/structure/alien/weeds/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 300
+	qdel(src) //WHY THE FUCK DOES THIS EXIST? WHAT THE FUCK?
 
 /obj/structure/alien/weeds/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(5, BURN, 0, 0)
+	if(exposed_temperature > T0C + 100)
+		take_damage(5, BURN, 0, 0)
 
 /obj/structure/alien/weeds/node
 	name = "glowing resin"
@@ -353,8 +349,6 @@
 	if(status == BURST)
 		atom_integrity = integrity_failure * max_integrity
 
-	AddElement(/datum/element/atmos_sensitive, mapload)
-
 /obj/structure/alien/egg/update_icon_state()
 	switch(status)
 		if(GROWING)
@@ -426,10 +420,11 @@
 						break
 
 /obj/structure/alien/egg/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 500
+	return exposed_temperature > 500 ? KEEP_ME_GOING : 0
 
 /obj/structure/alien/egg/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(5, BURN, 0, 0)
+	if(exposed_temperature > 500)
+		take_damage(5, BURN, 0, 0)
 
 /obj/structure/alien/egg/atom_break(damage_flag)
 	. = ..()
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 026a9f4cbc4..eedf5c39bf1 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -20,10 +20,6 @@
 	var/rods_amount = 2
 	var/rods_broken = TRUE
 
-/obj/structure/grille/Initialize(mapload)
-	. = ..()
-	AddElement(/datum/element/atmos_sensitive, mapload)
-
 /obj/structure/grille/Destroy()
 	update_cable_icons_on_turf(get_turf(src))
 	return ..()
@@ -320,11 +316,9 @@
 			return FALSE
 	return FALSE
 
-/obj/structure/grille/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > T0C + 1500 && !broken
-
 /obj/structure/grille/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(1, BURN, 0, 0)
+	if(exposed_temperature > T0C + 1500 && !broken)
+		take_damage(1, BURN, 0, 0)
 
 /obj/structure/grille/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
 	if(isobj(AM))
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 36a323c8cf5..d0cdf756363 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -542,7 +542,6 @@
 
 /obj/structure/window/plasma/Initialize(mapload, direct)
 	. = ..()
-	RemoveElement(/datum/element/atmos_sensitive)
 
 /obj/structure/window/plasma/spawnDebris(location)
 	. = list()
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index 6f739b11cca..f5c43e0aea0 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -57,13 +57,20 @@
 		var/altered_temp = max(temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * temperature_coefficient * diff_temp), 0)
 		ADJUST_ATOM_TEMPERATURE(src, (diff_temp > 0) ? min(adjust_temp, altered_temp) : max(adjust_temp, altered_temp))
 
-	else if(local_air && should_atmos_process(local_air, local_air.temperature))
+	else if(local_air && (should_atmos_process(local_air, local_air.temperature)))
 		return
 
 	else
 		temperature = adjust_temp
-		flags_1 &= ~ATMOS_IS_PROCESSING_1
 		return PROCESS_KILL
 
 #undef MIN_TEMPERATURE_COEFFICIENT
 #undef MAX_TEMPERATURE_COEFFICIENT
+
+///This is your process() proc
+/atom/proc/atmos_expose(datum/gas_mixture/air, exposed_temperature)
+	return
+
+///Return KEEP_ME_GOING if the atom should keep processing regardless of normal conditions.
+/atom/proc/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
+	return
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 1d6e3b77a43..debb3bffdcf 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -194,23 +194,6 @@
 	check_turfs()
 	. = ..()
 
-/obj/machinery/atmospherics/components/unary/vent_scrubber/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	if(welded || !is_operational)
-		return FALSE
-	if(!nodes[1] || !on || (!filter_types && scrubbing != SIPHONING))
-		on = FALSE
-		return FALSE
-
-	var/list/changed_gas = air.gas
-
-	if(!changed_gas)
-		return FALSE
-
-	if(scrubbing == SIPHONING || length(filter_types & changed_gas))
-		return TRUE
-
-	return FALSE
-
 /obj/machinery/atmospherics/components/unary/vent_scrubber/process_atmos()
 	if(welded || !is_operational)
 		return
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 3d82121001e..25b680c991d 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -443,7 +443,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	add_overlay(window)
 
 /obj/machinery/portable_atmospherics/canister/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > temperature_resistance * mode
+	if(exposed_temperature > temperature_resistance * mode)
+		return KEEP_ME_GOING
 
 /obj/machinery/portable_atmospherics/canister/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > heat_limit)
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 632348c29d5..e787571f3f7 100755
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -261,18 +261,12 @@
 	armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = -10, ACID = 0) //It's made of plasma. Of course it's flammable.
 	custom_materials = list(/datum/material/plasma=1000)
 
-/obj/item/clothing/accessory/medal/plasma/Initialize(mapload)
-	. = ..()
-	AddElement(/datum/element/atmos_sensitive, mapload)
-
-/obj/item/clothing/accessory/medal/plasma/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 300
-
 /obj/item/clothing/accessory/medal/plasma/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	var/turf/turfloc = get_turf(src)
-	turfloc.atmos_spawn_air(GAS_PLASMA, 20, exposed_temperature)
-	visible_message(span_danger("\The [src] bursts into flame!"), span_userdanger("Your [src] bursts into flame!"))
-	qdel(src)
+	if(exposed_temperature > 300)
+		var/turf/turfloc = get_turf(src)
+		turfloc.atmos_spawn_air(GAS_PLASMA, 20, exposed_temperature)
+		visible_message(span_danger("\The [src] bursts into flame!"), span_userdanger("Your [src] bursts into flame!"))
+		qdel(src)
 
 /obj/item/clothing/accessory/medal/plasma/nobel_science
 	name = "nobel sciences award"
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index fec5b4a45a8..09d4bbb71e7 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -389,7 +389,6 @@
 		COMSIG_ATOM_ENTERED = .proc/on_entered,
 	)
 	AddElement(/datum/element/connect_loc, loc_connections)
-	AddElement(/datum/element/atmos_sensitive, mapload)
 
 /obj/structure/spacevine/examine(mob/user)
 	. = ..()
@@ -659,16 +658,14 @@
 	if(!index && prob(34 * severity))
 		qdel(src)
 
-/obj/structure/spacevine/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD || exposed_temperature < VINE_FREEZING_POINT || !can_spread)//if you're room temperature you're safe
-
 /obj/structure/spacevine/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	if(!can_spread && (exposed_temperature >= VINE_FREEZING_POINT || (trait_flags & SPACEVINE_COLD_RESISTANT)))
-		can_spread = TRUE // not returning here just in case its now a plasmafire and the kudzu should be deleted
-	if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD && !(trait_flags & SPACEVINE_HEAT_RESISTANT))
-		qdel(src)
-	else if (exposed_temperature < VINE_FREEZING_POINT && !(trait_flags & SPACEVINE_COLD_RESISTANT))
-		can_spread = FALSE
+	if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD || exposed_temperature < VINE_FREEZING_POINT || !can_spread)
+		if(!can_spread && (exposed_temperature >= VINE_FREEZING_POINT || (trait_flags & SPACEVINE_COLD_RESISTANT)))
+			can_spread = TRUE // not returning here just in case its now a plasmafire and the kudzu should be deleted
+		if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD && !(trait_flags & SPACEVINE_HEAT_RESISTANT))
+			qdel(src)
+		else if (exposed_temperature < VINE_FREEZING_POINT && !(trait_flags & SPACEVINE_COLD_RESISTANT))
+			can_spread = FALSE
 
 /obj/structure/spacevine/CanAllowThrough(atom/movable/mover, border_dir)
 	. = ..()
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 2f6eb869f3b..e6551aab295 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -39,7 +39,6 @@
 		COMSIG_ATOM_ENTERED = .proc/on_entered,
 	)
 	AddElement(/datum/element/connect_loc, loc_connections)
-	AddElement(/datum/element/atmos_sensitive, mapload)
 
 /obj/item/clothing/mask/facehugger/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
 	..()
@@ -73,11 +72,9 @@
 	if (sterile)
 		. += span_boldannounce("It looks like the proboscis has been removed.")
 
-/obj/item/clothing/mask/facehugger/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > 300)
-
 /obj/item/clothing/mask/facehugger/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	Die()
+	if(exposed_temperature > 300)
+		Die()
 
 /obj/item/clothing/mask/facehugger/equipped(mob/M)
 	. = ..()
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index acfc70af4f6..a9db73302fd 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -47,7 +47,6 @@
 	prev_access = access_card.access.Copy()
 
 	create_extinguisher()
-	AddElement(/datum/element/atmos_sensitive, mapload)
 
 /mob/living/simple_animal/bot/firebot/bot_reset()
 	create_extinguisher()
@@ -261,14 +260,15 @@
 		result = scan_target
 
 	return result
-
 /mob/living/simple_animal/bot/firebot/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT)
+	if(exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT)
+		return KEEP_ME_GOING
 
 /mob/living/simple_animal/bot/firebot/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	if(COOLDOWN_FINISHED(src, foam_cooldown))
-		new /obj/effect/particle_effect/foam/firefighting(loc)
-		COOLDOWN_START(src, foam_cooldown, FOAM_INTERVAL)
+	if(exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT)
+		if(COOLDOWN_FINISHED(src, foam_cooldown))
+			new /obj/effect/particle_effect/foam/firefighting(loc)
+			COOLDOWN_START(src, foam_cooldown, FOAM_INTERVAL)
 
 /mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user)
 	if(stationary_mode)
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index 9ec8c76896b..27e56c5cf21 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -147,7 +147,6 @@
 
 /obj/machinery/power/apc/Initialize(mapload)
 	. = ..()
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	alarm_manager = new(src)
 
 	if(!mapload)
@@ -550,12 +549,12 @@
 		breaked_light.on = TRUE
 		breaked_light.break_light_tube()
 		stoplag()
-
 /obj/machinery/power/apc/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > 2000)
+	return (exposed_temperature > 2000) ? KEEP_ME_GOING : FALSE
 
 /obj/machinery/power/apc/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	take_damage(min(exposed_temperature/100, 10), BURN)
+	if(exposed_temperature > 2000)
+		take_damage(min(exposed_temperature/100, 10), BURN)
 
 /obj/machinery/power/apc/proc/report()
 	return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_total]) : [cell? cell.percent() : "N/C"] ([charging])"
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index 339f676f9f1..30722355d9a 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -84,7 +84,6 @@
 		cell = new/obj/item/stock_parts/cell/emergency_light(src)
 
 	RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, .proc/on_light_eater)
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	return INITIALIZE_HINT_LATELOAD
 
 /obj/machinery/light/LateInitialize()
@@ -600,11 +599,6 @@
 	var/area/local_area = get_area(src)
 	set_on(local_area.lightswitch && local_area.power_light)
 
-// called when heated
-
-/obj/machinery/light/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 673
-
 /obj/machinery/light/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(prob(max(0, exposed_temperature - 673)))   //0% at <400C, 100% at >500C
 		break_light_tube()
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index ab3145e92da..d9ee9618b83 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -232,7 +232,6 @@
 	diag_hud_set_mechstat()
 	update_appearance()
 
-	AddElement(/datum/element/atmos_sensitive, mapload)
 	become_hearing_sensitive(trait_source = ROUNDSTART_TRAIT)
 	ADD_TRAIT(src, TRAIT_ASHSTORM_IMMUNE, ROUNDSTART_TRAIT) //protects pilots from ashstorms.
 	for(var/key in equip_by_category)
diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm
index 61411b077cd..9e8b7bc8dd0 100644
--- a/code/modules/vehicles/mecha/mecha_defense.dm
+++ b/code/modules/vehicles/mecha/mecha_defense.dm
@@ -192,11 +192,13 @@
 	equipment_disabled = TRUE
 
 /obj/vehicle/sealed/mecha/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > max_temperature
+	if(exposed_temperature > max_temperature)
+		return KEEP_ME_GOING
 
 /obj/vehicle/sealed/mecha/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	log_message("Exposed to dangerous temperature.", LOG_MECHA, color="red")
-	take_damage(5, BURN, 0, 1)
+	if(exposed_temperature > max_temperature)
+		log_message("Exposed to dangerous temperature.", LOG_MECHA, color="red")
+		take_damage(5, BURN, 0, 1)
 
 /obj/vehicle/sealed/mecha/attackby_secondary(obj/item/weapon, mob/user, params)
 	if(istype(weapon, /obj/item/mecha_parts))

From 2fe897254b627780df74c62120ea25e9cf9955d1 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 24 Apr 2022 23:40:31 -0400
Subject: [PATCH 053/200] LAVALAND TEST + DEBUG IMPROVEMENT

---
 code/__DEFINES/atmospherics/ZAS.dm            |  2 +-
 .../atmospherics/atmos_mapping_helpers.dm     |  3 +-
 code/controllers/subsystem/zas.dm             | 70 ++++++++++++++++++-
 code/game/machinery/doors/door.dm             |  4 +-
 code/game/machinery/doors/firedoor.dm         |  2 +-
 code/game/machinery/doors/windowdoor.dm       |  2 +-
 code/game/objects/structures/false_walls.dm   |  2 +-
 code/game/turfs/open/_open.dm                 |  1 +
 code/game/turfs/open/asteroid.dm              |  5 +-
 .../turfs/open/floor/plating/misc_plating.dm  |  2 +-
 code/game/turfs/open/lava.dm                  |  2 +
 code/modules/atmospherics/ZAS/Connection.dm   |  2 +-
 code/modules/atmospherics/ZAS/Diagnostic.dm   | 12 ++--
 code/modules/atmospherics/ZAS/Fire.dm         |  2 +
 code/modules/atmospherics/ZAS/Turf.dm         | 19 ++++-
 code/modules/atmospherics/ZAS/Zone.dm         | 13 ++--
 .../awaymissions/mission_code/snowdin.dm      |  1 -
 code/modules/holodeck/turfs.dm                |  2 +-
 code/modules/surgery/organs/lungs.dm          |  8 +--
 19 files changed, 125 insertions(+), 29 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 9d6861008c2..1a155629c85 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -204,7 +204,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 //OPEN TURF ATMOS
 /// the default air mix that open turfs spawn
 #define OPENTURF_DEFAULT_ATMOS list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN=MOLES_N2STANDARD)
-#define OPENTURF_LOW_PRESSURE list(GAS_OXYGEN = 14, GAS_NITROGEB = 30)
+#define OPENTURF_LOW_PRESSURE list(GAS_OXYGEN = 14, GAS_NITROGEN = 30)
 //#define OPENTURF_LOW_PRESSURE "o2=14;n2=30;TEMP=293.15"
 /// -193,15°C telecommunications. also used for xenobiology slime killrooms
 #define TCOMMS_ATMOS list(GAS_NITROGEN = 100)
diff --git a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
index d84e3877269..07d1d30fa44 100644
--- a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
+++ b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
@@ -41,7 +41,8 @@
 #define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50
 
 //ATMOS MIX IDS
-#define LAVALAND_DEFAULT_ATMOS "LAVALAND_ATMOS"
+//#define LAVALAND_DEFAULT_ATMOS "LAVALAND_ATMOS"
+#define LAVALAND_DEFAULT_ATMOS OPENTURF_LOW_PRESSURE
 #define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS"
 
 //AIRLOCK CONTROLLER TAGS
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 5cfc0f8da3c..3497c09b616 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -82,6 +82,8 @@ SUBSYSTEM_DEF(zas)
 	//A reference to the global var
 	var/datum/xgm_gas_data/gas_data
 
+	var/datum/gas_mixture/lavaland_atmos
+
 	//Geometry lists
 	var/list/zones = list()
 	var/list/edges = list()
@@ -157,13 +159,16 @@ SUBSYSTEM_DEF(zas)
 	var/simulated_turf_count = 0
 	//for(var/turf/simulated/S) ZASTURF
 	for(var/turf/S)
-		if(istype(S, /turf/open/space))
+		if(!S.simulated)
 			continue
 		simulated_turf_count++
 		S.update_air_properties()
 
 		CHECK_TICK
 
+	///LAVALAND SETUP
+	fuck_lavaland()
+
 	to_chat(world, span_boldannounce("ZAS:\n - Total Simulated Turfs: [simulated_turf_count]\n - Total Zones: [zones.len]\n - Total Edges: [edges.len]\n - Total Active Edges: [active_edges.len ? "<span class='danger'>[active_edges.len]</span>" : "None"]\n - Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]"))
 
 	to_chat(world, span_boldannounce("ZAS: Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"))
@@ -383,7 +388,8 @@ SUBSYSTEM_DEF(zas)
 	if(block & AIR_BLOCKED) return
 
 	var/direct = !(block & ZONE_BLOCKED)
-	var/space = istype(B, /turf/open/space)
+	//var/space = istype(B, /turf/open/space)
+	var/space = !B.simulated
 
 	if(!space)
 		if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0)))
@@ -494,3 +500,63 @@ SUBSYSTEM_DEF(zas)
 		active_edges -= E
 	if(processing_edges)
 		processing_edges -= E
+
+/datum/controller/subsystem/zas/proc/fuck_lavaland()
+	var/list/restricted_gases = list()
+	///No funny gasses allowed
+	for(var/gas in xgm_gas_data.gases)
+		if(xgm_gas_data.flags[gas] & (XGM_GAS_CONTAMINANT|XGM_GAS_FUEL|XGM_GAS_OXIDIZER))
+			restricted_gases |= gas
+
+	var/list/viable_gases = GLOB.all_gases - restricted_gases - GAS_XENON //TODO: add XGM_GAS_DANGEROUS
+	var/datum/gas_mixture/mix_real = new
+	var/list/mix_list = list()
+	var/num_gases = rand(1, 3)
+	var/list/chosen_gases = list()
+	var/target_pressure = rand(HAZARD_LOW_PRESSURE + 10, LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1)
+	var/temp = rand(BODYTEMP_COLD_DAMAGE_LIMIT + 1, 350)
+	var/pressure_scalar = target_pressure / (LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1)
+
+	///Choose our gases
+	for(var/iter in 1 to num_gases)
+		chosen_gases += pick_n_take(viable_gases)
+
+	mix_real.gas = chosen_gases
+	for(var/gas in mix_real.gas)
+		mix_real.gas[gas] = 1 //So update values doesn't cull it
+
+	mix_real.temperature = temp
+
+	///This is where the fun begins...
+	var/amount
+	var/gastype
+	while(mix_real.return_pressure() < target_pressure)
+		gastype = pick(chosen_gases)
+
+		amount = rand(5,10)
+		amount *= rand(50, 200) / 100
+		amount *= pressure_scalar
+		amount = CEILING(amount, 0.1)
+
+		mix_real.gas[gastype] += amount
+		mix_real.update_values()
+
+	while(mix_real.return_pressure() > target_pressure)
+		mix_real.gas[gastype] -= mix_real.gas[gastype] * 0.1
+		mix_real.update_values()
+
+	mix_real.gas[gastype] = FLOOR(mix_real.gas[gastype], 0.1)
+
+	for(var/gas_id in mix_real.gas)
+		mix_list[gas_id] = mix_real.gas[gas_id]
+
+	var/list/lavaland_z_levels = SSmapping.levels_by_trait(ZTRAIT_MINING) //God I hope this is never more than one
+	for(var/zlev in lavaland_z_levels)
+		for(var/turf/T in block(locate(1,1,zlev), locate(world.maxx, world.maxy, zlev)))
+			if(!T.simulated)
+				T.initial_gas = mix_list
+				T.temperature = mix_real.temperature
+			CHECK_TICK
+
+	lavaland_atmos = mix_real
+	to_chat(world, span_boldannounce("ZAS: Lavaland contains [num_gases] [num_gases > 1? "gases" : "gas"], with a pressure of [mix_real.return_pressure()] kpa."))
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 6ef3fb22419..83739f849c0 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -113,8 +113,8 @@
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(block_air_zones)
-		return density ? AIR_BLOCKED : ZONE_BLOCKED
-	return density ? AIR_BLOCKED : AIR_ALLOWED
+		return density ? (AIR_BLOCKED|ZONE_BLOCKED) : ZONE_BLOCKED
+	return density ? (AIR_BLOCKED|ZONE_BLOCKED) : AIR_ALLOWED
 
 /**
  * Signal handler for checking if we notify our surrounding that access requirements are lifted accordingly to a newly set security level
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 6260ddfd1fd..1e60db469ae 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -663,7 +663,7 @@
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
-		return density ? AIR_BLOCKED : ZONE_BLOCKED
+		return density ? (AIR_BLOCKED|ZONE_BLOCKED) : ZONE_BLOCKED
 	else
 		return  ZONE_BLOCKED
 
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index ce10f43b7d2..b64840b4417 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -178,7 +178,7 @@
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
-		return density ? AIR_BLOCKED : ZONE_BLOCKED
+		return density ? (AIR_BLOCKED|ZONE_BLOCKED) : ZONE_BLOCKED
 	else
 		return ZONE_BLOCKED
 
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index c05e9838c0d..67b8ff3951b 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -61,7 +61,7 @@
 /obj/structure/falsewall/c_airblock(turf/other)
 	if(QDELETED(src))
 		return AIR_ALLOWED
-	return density ? ZONE_BLOCKED : AIR_BLOCKED
+	return density ? (AIR_BLOCKED|ZONE_BLOCKED) : ZONE_BLOCKED
 
 /obj/structure/falsewall/update_icon(updates=ALL)//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
 	. = ..()
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 5dfdcfe2488..1ed2a0c8971 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -46,6 +46,7 @@
 	clawfootstep = FOOTSTEP_HARD_CLAW
 	heavyfootstep = FOOTSTEP_GENERIC_HEAVY
 	tiled_dirt = TRUE
+	simulated = FALSE
 
 /turf/open/indestructible/Melt()
 	to_be_destroyed = FALSE
diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index 054f171f03c..3bf86c2ab4b 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -14,6 +14,8 @@
 	clawfootstep = FOOTSTEP_SAND
 	heavyfootstep = FOOTSTEP_GENERIC_HEAVY
 
+	simulated = FALSE //OHHH HELLLL NAW
+
 	/// Base turf type to be created by the tunnel
 	var/turf_type = /turf/open/misc/asteroid
 	/// Probability floor has a different icon state
@@ -190,7 +192,6 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	name = "icy snow"
 	desc = "Looks colder."
 	baseturfs = /turf/open/misc/asteroid/snow/ice
-	initial_gas = "n2=82;plasma=24;TEMP=120"
 	floor_variance = 0
 	icon_state = "snow-ice"
 	base_icon_state = "snow-ice"
@@ -215,7 +216,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	initial_gas = AIRLESS_ATMOS
 
 /turf/open/misc/asteroid/snow/temperatre
-	initial_gas = "o2=22;n2=82;TEMP=255.37"
+	temperature = 255.37
 
 //Used in SnowCabin.dm
 /turf/open/misc/asteroid/snow/snow_cabin
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
index c0b6e9cb9d6..9425673e2cc 100644
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ b/code/game/turfs/open/floor/plating/misc_plating.dm
@@ -54,7 +54,7 @@
 	heavyfootstep = FOOTSTEP_GENERIC_HEAVY
 
 /turf/open/floor/plating/snowed/cavern
-	initial_gas = "n2=82;plasma=24;TEMP=120"
+	temperature = 120
 
 /turf/open/floor/plating/snowed/icemoon
 	initial_gas = ICEMOON_DEFAULT_ATMOS
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 37c2f2b7815..4dbdc4e6c44 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -12,6 +12,8 @@
 	light_color = LIGHT_COLOR_LAVA
 	bullet_bounce_sound = 'sound/items/welder2.ogg'
 
+	simulated = FALSE
+
 	footstep = FOOTSTEP_LAVA
 	barefootstep = FOOTSTEP_LAVA
 	clawfootstep = FOOTSTEP_LAVA
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 11506523110..36b3d2d42ca 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -70,7 +70,7 @@ Class Procs:
 	src.A = A
 	src.B = B
 	zoneA = A.zone
-	if(istype(B, /turf/open/space))
+	if(!B.simulated)
 		mark_space()
 		edge = SSzas.get_edge(A.zone,B)
 		edge.add_connection(src)
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index da93192fcb5..ef393060332 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -4,9 +4,9 @@
 		if(!istype(T,/turf/open/space) && T:zone) //ZASTURF
 			T:zone:dbg_data(src)
 		else
-			to_chat(mob, span_admin("ZASDBG:No zone here."))
+			to_chat(mob, span_admin("ZASDBG: No zone here."))
 			var/datum/gas_mixture/mix = T.return_air()
-			to_chat(mob,span_admin( "ZASDBG_MAIN:[mix.return_pressure()] kPa [mix.temperature]C"))
+			to_chat(mob,span_admin( "ZASDBG_MAIN: [mix.return_pressure()] kPa [mix.temperature]C"))
 			for(var/g in mix.gas)
 				to_chat(mob, span_admin("ZASDBG_GAS:[g]: [mix.gas[g]]\n"))
 	else
@@ -48,8 +48,12 @@
 	if(istype(other_turf, /turf/open/space))
 		return
 
-	var/t_block = T.c_airblock(other_turf)
-	var/o_block = other_turf.c_airblock(T)
+	//var/t_block = T.c_airblock(other_turf)
+//	var/o_block = other_turf.c_airblock(T)
+	var/t_block
+	ATMOS_CANPASS_TURF(t_block, T, other_turf)
+	var/o_block
+	ATMOS_CANPASS_TURF(o_block, other_turf, T)
 
 	if(o_block & AIR_BLOCKED)
 		if(t_block & AIR_BLOCKED)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index ce0328f890b..dd8886ae905 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -94,6 +94,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 //turf/simulated/create_fire(fl) ZASTURF
 /turf/open/create_fire(fl, create_own_fuel)
+	if(!simulated)
+		return
 	if(fire)
 		fire.firelevel = max(fl, fire.firelevel)
 		return 1
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index fab4fc888fc..6e5c5dfe440 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -125,7 +125,7 @@
 			//var/turf/simulated/T = get_step(src, dir) ZASTURF
 			var/turf/T = get_step(src, dir)
 			//if (!istype(T)) ZASTURF
-			if (istype(T, /turf/open/space))
+			if (istype(T, /turf/open/space) || !T.simulated)
 				. &= ~dir
 				continue
 
@@ -139,6 +139,8 @@
 
 //turf/simulated/update_air_properties() ZAS
 /turf/open/update_air_properties()
+	if(!simulated)
+		return ..()
 
 	if(zone && zone.invalid) //this turf's zone is in the process of being rebuilt
 		c_copy_air() //not very efficient :(
@@ -320,11 +322,16 @@
 
 ///turf/simulated/assume_air(datum/gas_mixture/giver) ZASTURF
 /turf/assume_air(datum/gas_mixture/giver)
+	if(!simulated)
+		return
 	var/datum/gas_mixture/my_air = return_air()
 	my_air.merge(giver)
 
 //turf/simulated/assume_gas(gasid, moles, temp = null) ZASTURF
 /turf/proc/assume_gas(gasid, moles, temp = null)
+	if(!simulated)
+		return
+
 	var/datum/gas_mixture/my_air = return_air()
 
 	if(isnull(temp))
@@ -337,6 +344,14 @@
 //turf/simulated/return_air() ZASTURF
 /turf/return_air()
 	RETURN_TYPE(/datum/gas_mixture)
+	if(!simulated)
+		var/datum/gas_mixture/GM = new
+
+		if(initial_gas)
+			GM.gas = initial_gas.Copy()
+		GM.temperature = temperature
+		GM.update_values()
+
 	if(zone)
 		if(!zone.invalid)
 			SSzas.mark_zone_update(zone)
@@ -370,6 +385,8 @@
 
 //turf/simulated/proc/atmos_spawn_air(gas_id, amount, initial_temperature) ZASTURF
 /turf/proc/atmos_spawn_air(gas_id, amount, initial_temperature)
+	if(!simulated)
+		return
 	var/datum/gas_mixture/new_gas = new
 	var/datum/gas_mixture/existing_gas = return_air()
 	if(isnull(initial_temperature))
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 0eeda7ec58e..32eca48ae35 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -106,7 +106,7 @@ Class Procs:
 	c_invalidate()
 	//for(var/turf/simulated/T in contents) ZASTURF
 	for(var/turf/T in contents)
-		if(istype(T, /turf/open/space))
+		if(!T.simulated)
 			continue
 		into.add(T)
 		T.update_graphic(graphic_remove = air.graphic)
@@ -127,7 +127,7 @@ Class Procs:
 	#ifdef ZASDBG
 	//for(var/turf/simulated/T in contents) ZASTURF
 	for(var/turf/T in contents)
-		if(!istype(T, /turf/open/space))
+		if(!T.simulated)
 			T.dbg(invalid_zone)
 	#endif
 
@@ -136,7 +136,7 @@ Class Procs:
 	c_invalidate()
 	//for(var/turf/simulated/T in contents) ZASTURF
 	for(var/turf/T in contents)
-		if(istype(T, /turf/open/space))
+		if(!T.simulated)
 			continue
 		T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
 		//T.dbg(invalid_zone)
@@ -163,7 +163,8 @@ Class Procs:
 	if(air.check_tile_graphic(graphic_add, graphic_remove))
 		//for(var/turf/simulated/T in contents)
 		for(var/turf/open/T in contents)
-			T.update_graphic(graphic_add, graphic_remove)
+			if(T.simulated)
+				T.update_graphic(graphic_add, graphic_remove)
 		graphic_add.len = 0
 		graphic_remove.len = 0
 
@@ -193,6 +194,8 @@ Class Procs:
 		last_air_temperature = air.temperature
 		//for(var/turf/simulated/T in contents) ZASTURF
 		for(var/turf/T in contents)
+			if(!T.simulated)
+				continue
 			for(var/check_atom in T.contents)
 				var/atom/checking = check_atom
 				if(checking.simulated)
@@ -219,7 +222,7 @@ Class Procs:
 			to_chat(M, "[E:air:return_pressure()]kPa")
 
 	to_chat(M, "Zone Edges: [zone_edges]")
-	to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)")
+	to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)\n")
 
 	//for(var/turf/T in unsimulated_contents)
 //		to_chat(M, "[T] at ([T.x],[T.y])")
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index 126a92bd4f7..6db9ee158a9 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -165,7 +165,6 @@
 	name = "liquid plasma"
 	desc = "A flowing stream of chilled liquid plasma. You probably shouldn't get in."
 	icon_state = "liquidplasma"
-	initial_gas = "n2=82;plasma=24;TEMP=120"
 	baseturfs = /turf/open/lava/plasma
 
 	light_range = 3
diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm
index d753921c753..2ba223ac489 100644
--- a/code/modules/holodeck/turfs.dm
+++ b/code/modules/holodeck/turfs.dm
@@ -171,7 +171,7 @@
 	tiled_dirt = FALSE
 
 /turf/open/floor/holofloor/snow/cold
-	initial_gas = "nob=7500;TEMP=2.7"
+	temperature = 2.7
 
 /turf/open/floor/holofloor/dark
 	icon_state = "darkfull"
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index cb1f8f01062..caee4820f90 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -120,10 +120,10 @@
 	handle_gas_override(breather, breath, gas_breathed)
 
 	//Partial pressures in our breath
-	var/O2_moles = breath.get_gas(GAS_OXYGEN)
-	var/N2_moles = breath.get_gas(GAS_NITROGEN)
-	var/plasma_moles = breath.get_gas(GAS_PLASMA)
-	var/CO2_moles = breath.get_gas(GAS_CO2)
+	var/O2_moles = breath.gas[GAS_OXYGEN]
+	var/N2_moles = breath.gas[GAS_NITROGEN]
+	var/plasma_moles = breath.gas[GAS_PLASMA]
+	var/CO2_moles = breath.gas[GAS_CO2]
 
 	var/O2_pp = breath.get_breath_partial_pressure(O2_moles)//+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES]))
 	var/N2_pp = breath.get_breath_partial_pressure(N2_moles)

From adb8c69d2c7726655379046731b9cf783d01b152 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 25 Apr 2022 01:11:35 -0400
Subject: [PATCH 054/200] changes for test

---
 .../closets/secure/engineering.dm             |   4 ++--
 code/modules/atmospherics/ZAS/XGM/gases.dm    |   4 ++--
 .../atmospherics/ZAS/zas_extras/inflatable.dm |   2 +-
 .../icons/effects/gas_overlays.dmi            | Bin 7707 -> 10333 bytes
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 49c62124bcd..031ce0748b5 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -11,7 +11,7 @@
 	new /obj/item/radio/headset/heads/ce(src)
 	new /obj/item/megaphone/command(src)
 	new /obj/item/areaeditor/blueprints(src)
-	new /obj/item/holosign_creator/atmos(src)
+	new /obj/item/storage/briefcase/inflatable(src)
 	new /obj/item/assembly/flash/handheld(src)
 	new /obj/item/door_remote/chief_engineer(src)
 	new /obj/item/pipe_dispenser(src)
@@ -78,7 +78,7 @@
 	new /obj/item/pipe_dispenser(src)
 	new /obj/item/storage/toolbox/mechanical(src)
 	new /obj/item/tank/internals/emergency_oxygen/engi(src)
-	new /obj/item/holosign_creator/atmos(src)
+	new /obj/item/storage/briefcase/inflatable(src)
 	new /obj/item/watertank/atmos(src)
 	new /obj/item/clothing/suit/fire/atmos(src)
 	new /obj/item/clothing/mask/gas/atmos(src)
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 016ac21061a..3088e31548f 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -46,8 +46,8 @@
 	//and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is:
 	molar_mass = 0.405	// kg/mol
 
-	//tile_color = "#ff9940"
-	tile_overlay = "phoron"
+	//tile_overlay = "phoron"
+	tile_overlay = "plasma"
 	overlay_limit = 0.7
 	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL
 	breathed_product = /datum/reagent/toxin/plasma
diff --git a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
index 24dee699f89..1fef439705e 100644
--- a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
+++ b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
@@ -313,7 +313,7 @@
 
 /obj/item/storage/briefcase/inflatable
 	name = "inflatable barrier box"
-	desc = "Contains inflatable walls and doors."
+	desc = "Contains inflatable walls and doors. THE SPRITE IS A PLACEHOLDER, OKAY?"
 	w_class = WEIGHT_CLASS_NORMAL
 	max_integrity = 150
 	force = 8
diff --git a/modular_pariah/master_files/icons/effects/gas_overlays.dmi b/modular_pariah/master_files/icons/effects/gas_overlays.dmi
index d4fa5ad522ff1c0553a274befb6364ae9b6a5993..1e5684036df411370460edb74813f75a3d8c5ce8 100644
GIT binary patch
literal 10333
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

literal 7707
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
V_PJX1`56EJ002ovPDHLkV1h*q7{UMm


From 9875e0b3dbe9cab2c5e5cf8efe65f556ed0396c6 Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Mon, 25 Apr 2022 02:43:22 -0400
Subject: [PATCH 055/200] the station is no longer covered in shrek cum

---
 code/controllers/subsystem/zas.dm      |  6 ++--
 code/modules/atmospherics/ZAS/Debug.dm | 41 +++++++++++++++++++-------
 code/modules/atmospherics/ZAS/Turf.dm  |  6 ++--
 code/modules/atmospherics/ZAS/Zone.dm  |  4 +--
 4 files changed, 39 insertions(+), 18 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 3497c09b616..3f70e516e87 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -227,7 +227,7 @@ SUBSYSTEM_DEF(zas)
 		T.post_update_air_properties()
 		T.needs_air_update = 0
 		#ifdef ZASDBG
-		T.overlays -= mark
+		T.vis_contents -= zasdbgovl_mark
 		//updated++
 		#endif
 
@@ -250,7 +250,7 @@ SUBSYSTEM_DEF(zas)
 		T.post_update_air_properties()
 		T.needs_air_update = 0
 		#ifdef ZASDBG
-		T.overlays -= mark
+		T.vis_contents -= zasdbgovl_mark
 		//updated++
 		#endif
 
@@ -425,7 +425,7 @@ SUBSYSTEM_DEF(zas)
 		return
 	tiles_to_update += T
 	#ifdef ZASDBG
-	T.overlays += mark
+	T.vis_contents += zasdbgovl_mark
 	#endif
 	T.needs_air_update = 1
 
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index cbb49ecf4ee..a3be8770262 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -1,19 +1,40 @@
-GLOBAL_REAL_VAR(image/assigned) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "assigned")
-GLOBAL_REAL_VAR(image/created) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "created")
-GLOBAL_REAL_VAR(image/merged) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "merged")
-GLOBAL_REAL_VAR(image/invalid_zone) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "invalid")
-GLOBAL_REAL_VAR(image/air_blocked) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "block")
-GLOBAL_REAL_VAR(image/zone_blocked) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "zoneblock")
-GLOBAL_REAL_VAR(image/blocked) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "fullblock")
-GLOBAL_REAL_VAR(image/mark) = image('modular_pariah/master_files/icons/testing/Zone.dmi', icon_state = "mark")
+GLOBAL_REAL_VAR(obj/effect/zasdbg/assigned/zasdbgovl_assigned) = new
+GLOBAL_REAL_VAR(obj/effect/zasdbg/created/zasdbgovl_created) = new
+GLOBAL_REAL_VAR(obj/effect/zasdbg/merged/zasdbgovl_merged) = new
+GLOBAL_REAL_VAR(obj/effect/zasdbg/invalid_zone/zasdbgovl_invalid_zone) = new
+GLOBAL_REAL_VAR(obj/effect/zasdbg/air_blocked/zasdbgovl_air_blocked) = new
+GLOBAL_REAL_VAR(obj/effect/zasdbg/zone_blocked/zasdbgovl_zone_blocked) = new
+GLOBAL_REAL_VAR(obj/effect/zasdbg/blocked/zasdbgovl_blocked) = new
+GLOBAL_REAL_VAR(obj/effect/zasdbg/mark/zasdbgovl_mark) = new
 
 /connection_edge/var/dbg_out = 0
 
+/obj/effect/zasdbg
+	icon = 'modular_pariah/master_files/icons/testing/Zone.dmi'
+	invisibility = INVISIBILITY_OBSERVER
+
+/obj/effect/zasdbg/assigned
+	icon_state = "assigned"
+/obj/effect/zasdbg/created
+	icon_state = "created"
+/obj/effect/zasdbg/merged
+	icon_state = "merged"
+/obj/effect/zasdbg/invalid_zone
+	icon_state = "invalid"
+/obj/effect/zasdbg/air_blocked
+	icon_state = "block"
+/obj/effect/zasdbg/zone_blocked
+	icon_state = "zoneblock"
+/obj/effect/zasdbg/blocked
+	icon_state = "fullblock"
+/obj/effect/zasdbg/mark
+	icon_state = "mark"
+
 /turf/var/tmp/dbg_img
 /turf/proc/dbg(image/img, d = 0)
 	if(d > 0) img.dir = d
-	overlays -= dbg_img
-	overlays += img
+	vis_contents -= dbg_img
+	vis_contents += img
 	dbg_img = img
 
 /proc/soft_assert(thing,fail)
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 6e5c5dfe440..30b0bdd6978 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -232,7 +232,7 @@
 						#ifdef ZASDBG
 						if(verbose) log_admin("[d] is zone blocked.")
 
-						dbg(zone_blocked, d)
+						dbg(zasdbgovl_zone_blocked, d)
 						#endif
 
 						//Postpone this tile rather than exit, since a connection can still be made.
@@ -244,7 +244,7 @@
 						sim.zone.add(src)
 
 						#ifdef ZASDBG
-						dbg(assigned)
+						dbg(zasdbgovl_assigned)
 						if(verbose) log_admin("Added to [zone]")
 						#endif
 
@@ -273,7 +273,7 @@
 		newzone.add(src)
 
 	#ifdef ZASDBG
-		dbg(created)
+		dbg(zasdbgovl_created)
 
 	ASSERT(zone)
 	#endif
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 32eca48ae35..c1789597927 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -111,7 +111,7 @@ Class Procs:
 		into.add(T)
 		T.update_graphic(graphic_remove = air.graphic)
 		#ifdef ZASDBG
-		T.dbg(merged)
+		T.dbg(zasdbgovl_merged)
 		#endif
 
 	//rebuild the old zone's edges so that they will be possessed by the new zone
@@ -128,7 +128,7 @@ Class Procs:
 	//for(var/turf/simulated/T in contents) ZASTURF
 	for(var/turf/T in contents)
 		if(!T.simulated)
-			T.dbg(invalid_zone)
+			T.dbg(zasdbgovl_invalid_zone)
 	#endif
 
 /zone/proc/rebuild()

From dd9746bba51732eb93ec8fff311f6acf749339a1 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 25 Apr 2022 02:44:57 -0400
Subject: [PATCH 056/200] lung runtime fix maybe

---
 code/modules/surgery/organs/lungs.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index caee4820f90..1e181c59afa 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -91,7 +91,7 @@
 	if(HAS_TRAIT(breather, TRAIT_NOBREATH))
 		return
 
-	if(!breath || (breath.total_moles() == 0))
+	if(!breath || (breath.total_moles == 0))
 		if(breather.reagents.has_reagent(crit_stabilizing_reagent, needs_metabolizing = TRUE))
 			return
 		if(breather.health >= breather.crit_threshold)

From 09e23425cd1a017c2396f55f2b667e07b2e68954 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 28 Apr 2022 17:42:41 -0400
Subject: [PATCH 057/200] Improves airflow behavior significantly

---
 code/controllers/subsystem/airflow.dm      | 23 +++---
 code/game/objects/effects/effects.dm       |  1 +
 code/modules/atmospherics/ZAS/Airflow.dm   | 89 +++++++++++++++-------
 code/modules/atmospherics/ZAS/Debug.dm     |  1 +
 code/modules/mob/dead/observer/observer.dm |  1 +
 5 files changed, 77 insertions(+), 38 deletions(-)

diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index b110cca476b..f3d98230e2b 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -4,7 +4,8 @@
 	TARGET.airflow_speed = 0; \
 	TARGET.airflow_time = 0; \
 	TARGET.airflow_skip_speedcheck = FALSE; \
-	if (TARGET.airflow_od) { \
+	TARGET.airborne_acceleration = 0; \
+	if (TARGET.airflow_originally_not_dense) { \
 		TARGET.set_density(FALSE); \
 	}
 
@@ -59,7 +60,7 @@ SUBSYSTEM_DEF(airflow)
 		if (!target.airflow_skip_speedcheck)
 			if (target.airflow_speed > 7)
 				if (target.airflow_time++ >= target.airflow_speed - 7)
-					if (target.airflow_od)
+					if (target.airflow_originally_not_dense)
 						target.set_density(FALSE)
 					target.airflow_skip_speedcheck = TRUE
 					if (MC_TICK_CHECK)
@@ -67,7 +68,7 @@ SUBSYSTEM_DEF(airflow)
 						return
 					continue
 			else
-				if (target.airflow_od)
+				if (target.airflow_originally_not_dense)
 					target.set_density(FALSE)
 				target.airflow_process_delay = max(1, 10 - (target.airflow_speed + 3))
 				target.airflow_skip_speedcheck = TRUE
@@ -76,7 +77,7 @@ SUBSYSTEM_DEF(airflow)
 					return
 				continue
 		target.airflow_skip_speedcheck = FALSE
-		if (target.airflow_od)
+		if (target.airflow_originally_not_dense)
 			target.set_density(TRUE)
 		if (!target.airflow_dest || target.loc == target.airflow_dest)
 			target.airflow_dest = locate(min(max(target.x + target.airflow_xo, 1), world.maxx), min(max(target.y + target.airflow_yo, 1), world.maxy), target.z)
@@ -92,13 +93,13 @@ SUBSYSTEM_DEF(airflow)
 				current.Cut(i)
 				return
 			continue
+
 		var/olddir = target.dir
-		if(isobj(target))
-			target.SpinAnimation(3, 1, rand(50), parallel = FALSE)
 		//target.set_dir_on_move = FALSE
 		step_towards(target, target.airflow_dest)
 		//target.set_dir_on_move = TRUE
 		target.dir = olddir
+		target.airborne_acceleration++
 
 		if (ismob(target))
 			var/mob/M = target
@@ -113,7 +114,7 @@ SUBSYSTEM_DEF(airflow)
 
 /atom/movable/var/tmp/airflow_xo
 /atom/movable/var/tmp/airflow_yo
-/atom/movable/var/tmp/airflow_od
+/atom/movable/var/tmp/airflow_originally_not_dense
 /atom/movable/var/tmp/airflow_process_delay
 /atom/movable/var/tmp/airflow_skip_speedcheck
 
@@ -124,10 +125,10 @@ SUBSYSTEM_DEF(airflow)
 	if (airflow_speed)
 		airflow_speed = strength / max(get_dist(src, airflow_dest), 1)
 		return FALSE
-	if (airflow_dest == loc)
-		step_away(src, loc)
 	if (!AirflowCanMove(strength))
 		return FALSE
+	if (airflow_dest == loc)
+		step_away(src, loc)
 	if (ismob(src))
 		to_chat(src, span_danger("You are pushed away by a rush of air!"))
 	last_airflow = world.time
@@ -136,10 +137,10 @@ SUBSYSTEM_DEF(airflow)
 		airflow_dest = null
 		return FALSE
 	airflow_speed = min(max(strength * (9 / airflow_falloff), 1), 9)
-	airflow_od = FALSE
+	airflow_originally_not_dense = FALSE
 	if (!density)
 		set_density(TRUE)
-		airflow_od = TRUE
+		airflow_originally_not_dense = TRUE
 	return TRUE
 
 
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index e77a27905a0..3d084c917a2 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -9,6 +9,7 @@
 	obj_flags = NONE
 	vis_flags = VIS_INHERIT_PLANE
 	blocks_emissive = EMISSIVE_BLOCK_GENERIC
+	simulated = FALSE
 
 /obj/effect/attackby(obj/item/weapon, mob/user, params)
 	if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, params) & COMPONENT_NO_AFTERATTACK)
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 9f3e413af37..b4081ad354f 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -1,6 +1,7 @@
 /*
 Contains helper procs for airflow, handled in /connection_group.
 */
+#define AIRBORNE_DAMAGE(airborne_thing) (min(airborne_thing.airflow_speed, (airborne_thing.airborne_acceleration*2)) * SSzas.settings.airflow_damage)
 
 /mob/var/tmp/last_airflow_stun = 0
 /mob/proc/airflow_stun()
@@ -115,11 +116,19 @@ Contains helper procs for airflow, handled in /connection_group.
 
 /atom/movable/Bump(atom/A)
 	if(airflow_speed > 0 && airflow_dest)
+		var/turf/T = get_turf(A)
 		if(airborne_acceleration > 1)
 			airflow_hit(A)
+			A.airflow_hit_act(src)
 		else if(istype(src, /mob/living/carbon/human))
 			to_chat(src, "<span class='notice'>You are pinned against [A] by airflow!</span>")
-			airborne_acceleration = 0
+		if(airflow_originally_not_dense && !T.density)
+			if(ismovable(A) && A:airflow_originally_not_dense)
+				set_density(FALSE)
+				A.set_density(FALSE)
+				step_towards(src, airflow_dest)
+				set_density(TRUE)
+				A.set_density(TRUE)
 	else
 		airflow_speed = 0
 		airflow_time = 0
@@ -131,35 +140,59 @@ Contains helper procs for airflow, handled in /connection_group.
 	airflow_dest = null
 	airborne_acceleration = 0
 
-/mob/airflow_hit(atom/A)
-	for(var/mob/M in hearers(src))
-		M.show_message("<span class='danger'>\The [src] slams into \a [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
-	playsound(src.loc, "smash.ogg", 25, 1, -1)
-	. = ..()
-
 /mob/living/airflow_hit(atom/A)
-	var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh
-	Knockdown(weak_amt)
+	var/b_loss = AIRBORNE_DAMAGE(src)
+	apply_damage(b_loss, BRUTE)
+	if(istype(A, /obj/structure) || iswallturf(A))
+		if(airflow_speed > 10)
+			Paralyze(round(airflow_speed * SSzas.settings.airflow_stun))
+			Stun(round(airflow_speed * SSzas.settings.airflow_stun) + 3)
+		else
+			Stun(round(airflow_speed * SSzas.settings.airflow_stun/2))
+
 	return ..()
 
-/obj/airflow_hit(atom/A)
-	for(var/mob/M in hearers(src))
-		M.show_message("<span class='danger'>\The [src] slams into \a [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
-	playsound(src.loc, "smash.ogg", 25, 1, -1)
-	. = ..()
+/mob/living/carbon/airflow_hit(atom/A)
+	if (prob(33))
+		loc.add_blood_DNA(return_blood_DNA())
+	return ..()
 
-/obj/item/airflow_hit(atom/A)
-	airflow_speed = 0
-	airflow_dest = null
 
-/mob/living/carbon/human/airflow_hit(atom/A)
-	for(var/mob/M in hearers(src))
-		M.show_message("<span class='danger'>[src] slams into [A]!</span>",1,"<span class='danger'>You hear a loud slam!</span>",2)
+/atom/proc/airflow_hit_act(atom/movable/flying)
+	src.visible_message(
+		span_danger("\a flying [flying] slams into \the [src]!"),
+		span_danger("You're hit by a flying [flying]!"),
+		span_danger("You hear a loud slam!")
+	)
+
+/mob/living/airflow_hit_act(atom/movable/flying)
+	. = ..()
 	playsound(src.loc, "punch", 25, 1, -1)
+	var/weak_amt
+	if(istype(flying,/obj/item))
+		weak_amt = flying:w_class*2 ///Heheheh
+	else if(!flying.airflow_originally_not_dense) //If the object is dense by default (this var is stupidly named)
+		weak_amt = 5 //Getting crushed by a flying canister or computer is going to fuck you up
+	else
+		weak_amt = rand(1, 3)
+
+	src.Knockdown(weak_amt SECONDS)
+
+/obj/airflow_hit_act(atom/movable/flying)
+	. = ..()
+	playsound(src.loc, "smash.ogg", 25, 1, -1)
+
+	if(!uses_integrity)
+		return
+
+	take_damage(SSzas.settings.airflow_damage, BRUTE)
+
+/mob/living/carbon/human/airflow_hit_act(atom/movable/flying)
+	. = ..()
 	if (prob(33))
 		loc.add_blood_DNA(return_blood_DNA())
 
-	var/b_loss = min(airflow_speed, (airborne_acceleration*2)) * SSzas.settings.airflow_damage
+	var/b_loss = AIRBORNE_DAMAGE(flying)
 
 	apply_damage(b_loss/3, BRUTE, BODY_ZONE_HEAD)
 
@@ -167,16 +200,18 @@ Contains helper procs for airflow, handled in /connection_group.
 
 
 	if(airflow_speed > 10)
-		Paralyze(round(airflow_speed * SSzas.settings.airflow_stun))
-		Stun(round(airflow_speed * SSzas.settings.airflow_stun) + 3)
+		Paralyze(round(flying.airflow_speed * SSzas.settings.airflow_stun))
+		Stun(round(flying.airflow_speed * SSzas.settings.airflow_stun) + 3)
 	else
-		Stun(round(airflow_speed * SSzas.settings.airflow_stun/2))
-	return ..()
+		Stun(round(flying.airflow_speed * SSzas.settings.airflow_stun/2))
 
 /zone/proc/movables()
+	RETURN_TYPE(/list)
 	. = list()
 	for(var/turf/T in contents)
-		for(var/atom/movable/A in T)
-			if(!A.simulated || A.anchored || istype(A, /obj/effect) || isobserver(A))
+		for(var/atom/movable/A as anything in T)
+			if(!A.simulated || A.anchored)
 				continue
 			. += A
+
+#undef AIRBORNE_DAMAGE
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index a3be8770262..9ec0d209228 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -12,6 +12,7 @@ GLOBAL_REAL_VAR(obj/effect/zasdbg/mark/zasdbgovl_mark) = new
 /obj/effect/zasdbg
 	icon = 'modular_pariah/master_files/icons/testing/Zone.dmi'
 	invisibility = INVISIBILITY_OBSERVER
+	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
 
 /obj/effect/zasdbg/assigned
 	icon_state = "assigned"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 5c7ff4b78de..0120b87134e 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -22,6 +22,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
 	light_power = 2
 	light_on = FALSE
 	shift_to_open_context_menu = FALSE
+	simulated = FALSE
 	var/can_reenter_corpse
 	var/datum/hud/living/carbon/hud = null // hud
 	var/bootime = 0

From ae715bd8a07980967737b796767537ffa3bb0b6c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 28 Apr 2022 18:10:07 -0400
Subject: [PATCH 058/200] Dense objects can now step into non-dense objects
 during Airflow

---
 code/modules/atmospherics/ZAS/Airflow.dm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index b4081ad354f..8b403e224b2 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -122,7 +122,7 @@ Contains helper procs for airflow, handled in /connection_group.
 			A.airflow_hit_act(src)
 		else if(istype(src, /mob/living/carbon/human))
 			to_chat(src, "<span class='notice'>You are pinned against [A] by airflow!</span>")
-		if(airflow_originally_not_dense && !T.density)
+		if(!T.density)
 			if(ismovable(A) && A:airflow_originally_not_dense)
 				set_density(FALSE)
 				A.set_density(FALSE)
@@ -160,7 +160,7 @@ Contains helper procs for airflow, handled in /connection_group.
 
 /atom/proc/airflow_hit_act(atom/movable/flying)
 	src.visible_message(
-		span_danger("\a flying [flying] slams into \the [src]!"),
+		span_danger("A flying [flying] slams into \the [src]!"),
 		span_danger("You're hit by a flying [flying]!"),
 		span_danger("You hear a loud slam!")
 	)

From 1f85cf3282b5bc5e17a8e52e121d956dc9d0d0ca Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 29 Apr 2022 01:20:43 -0400
Subject: [PATCH 059/200] Micro opt

---
 code/modules/atmospherics/ZAS/ConnectionGroup.dm | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index c2ddf83d0b7..0c1ccd8ba0d 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -95,7 +95,7 @@ Class Procs:
 /connection_edge/proc/recheck()
 
 /connection_edge/proc/flow(list/movable, differential, repelled)
-	for(var/i = 1; i <= movable.len; i++)
+	for(var/i in 1 to length(movable))
 		var/atom/movable/M = movable[i]
 
 		//If they're already being tossed, don't do it again.
@@ -170,7 +170,14 @@ Class Procs:
 			repelled = A.movables()
 
 		if(REALTIMEOFDAY > last_woosh + 2 SECONDS)
-			playsound(pick(connecting_turfs), 'modular_pariah/master_files/sound/effects/space_wind_big.ogg', 100, TRUE, null, pressure_affected = FALSE)
+			playsound(
+				pick(connecting_turfs),
+				abs(differential) > SSzas.settings.airflow_heavy_pressure ? 'modular_pariah/master_files/sound/effects/space_wind_big.ogg' : 'modular_pariah/master_files/sound/effects/space_wind.ogg',
+				100,
+				TRUE,
+				null,
+				pressure_affected = FALSE
+			)
 			last_woosh = REALTIMEOFDAY
 
 		flow(attracted, abs(differential), 0)

From 98bfa064b7b93e7e011a34a269aba6322397ce58 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 29 Apr 2022 02:00:13 -0400
Subject: [PATCH 060/200] makes all gas mixture procs camelcase (I will regret
 this later)

---
 code/__DEFINES/atmospherics/ZAS.dm            |   6 +-
 code/__DEFINES/atmospherics/atmos_helpers.dm  |   2 +-
 code/__HELPERS/_logging.dm                    |   6 +-
 code/__HELPERS/atmospherics.dm                |   8 +-
 code/__HELPERS/game.dm                        |   2 +-
 code/controllers/subsystem/minor_mapping.dm   |   2 +-
 code/controllers/subsystem/zas.dm             |  10 +-
 code/datums/atmosphere/_atmosphere.dm         |   4 +-
 code/datums/diseases/advance/symptoms/heal.dm |   2 +-
 code/datums/elements/atmos_requirements.dm    |   8 +-
 code/datums/elements/volatile_gas_storage.dm  |   2 +-
 code/datums/helper_datums/teleport.dm         |   8 +-
 code/datums/outfit.dm                         |   2 +-
 code/game/atoms.dm                            |   2 +-
 code/game/gamemodes/objective_items.dm        |   2 +-
 code/game/machinery/airlock_control.dm        |   2 +-
 code/game/machinery/doors/door.dm             |   2 +-
 code/game/machinery/doors/firedoor.dm         |   2 +-
 code/game/machinery/doors/windowdoor.dm       |   2 +-
 code/game/machinery/spaceheater.dm            |   2 +-
 .../effects/effect_system/effects_foam.dm     |   8 +-
 .../effects/effect_system/effects_smoke.dm    |   6 +-
 .../effects/effect_system/effects_water.dm    |   2 +-
 .../objects/effects/spawners/bombspawner.dm   |  12 +-
 code/game/objects/items/cigs_lighters.dm      |   4 +-
 code/game/objects/items/devices/powersink.dm  |   2 +-
 .../items/devices/scanners/gas_analyzer.dm    |  12 +-
 .../objects/items/devices/transfer_valve.dm   |   6 +-
 code/game/objects/items/flamethrower.dm       |   6 +-
 code/game/objects/items/powerfist.dm          |   2 +-
 code/game/objects/items/tanks/jetpack.dm      |   6 +-
 code/game/objects/items/tanks/tank_types.dm   |  18 +-
 code/game/objects/items/tanks/tanks.dm        |  20 +-
 code/game/objects/objs.dm                     |   4 +-
 code/game/objects/structures/bonfire.dm       |   2 +-
 .../structures/crates_lockers/closets.dm      |   2 +-
 .../crates_lockers/closets/bodybag.dm         |   4 +-
 code/game/objects/structures/false_walls.dm   |   2 +-
 .../structures/transit_tubes/station.dm       |   2 +-
 .../transit_tubes/transit_tube_pod.dm         |   6 +-
 .../objects/structures/windoor_assembly.dm    |   2 +-
 code/game/objects/structures/window.dm        |   4 +-
 code/game/sound.dm                            |   2 +-
 code/game/turfs/change_turf.dm                |  14 +-
 code/game/turfs/open/_open.dm                 |   2 +-
 code/game/turfs/turf.dm                       |   2 +-
 code/modules/admin/outfit_editor.dm           |   2 +-
 code/modules/admin/verbs/fix_air.dm           |   2 +-
 .../antagonists/blob/structures/_blob.dm      |   2 +-
 code/modules/assembly/bomb.dm                 |   6 +-
 code/modules/atmospherics/Atmospherics.md     |   8 +-
 code/modules/atmospherics/ZAS/Atom.dm         |   4 +-
 .../atmospherics/ZAS/ConnectionGroup.dm       |  16 +-
 code/modules/atmospherics/ZAS/Diagnostic.dm   |   8 +-
 code/modules/atmospherics/ZAS/Fire.dm         |  20 +-
 code/modules/atmospherics/ZAS/Turf.dm         |  27 +--
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   | 183 +++++++++---------
 .../ZAS/XGM/xgm_immutable_gas_mixture.dm      |  22 +--
 code/modules/atmospherics/ZAS/Zone.dm         |   8 +-
 .../atmospherics/ZAS/atmos_primitives.dm      |  44 ++---
 .../atmospherics/ZAS/zas_extras/inflatable.dm |   2 +-
 .../atmospherics/environmental/LINDA_fire.dm  |   2 +-
 .../environmental/LINDA_turf_tile.dm          |  16 +-
 .../atmospherics/gasmixtures/gas_mixture.dm   |  74 +++----
 .../gasmixtures/immutable_mixtures.dm         |   6 +-
 .../atmospherics/gasmixtures/reactions.dm     |  88 ++++-----
 .../atmospherics/machinery/airalarm.dm        |  14 +-
 .../atmospherics/machinery/atmosmachinery.dm  |   4 +-
 .../machinery/bluespace_vendor.dm             |   6 +-
 .../components/binary_devices/circulator.dm   |   4 +-
 .../components/binary_devices/dp_vent_pump.dm |   6 +-
 .../components/binary_devices/passive_gate.dm |   2 +-
 .../binary_devices/pressure_valve.dm          |   2 +-
 .../components/binary_devices/pump.dm         |   8 +-
 .../binary_devices/temperature_pump.dm        |  10 +-
 .../components/binary_devices/volume_pump.dm  |  18 +-
 .../components/fusion/hfr_main_processes.dm   |  52 ++---
 .../machinery/components/fusion/hfr_parts.dm  |   6 +-
 .../machinery/components/fusion/hfr_procs.dm  |  28 +--
 .../gas_recipe_machines/crystallizer.dm       |  20 +-
 .../atmospherics/machinery/components/tank.dm |  10 +-
 .../components/trinary_devices/filter.dm      |   8 +-
 .../components/trinary_devices/mixer.dm       |   6 +-
 .../unary_devices/bluespace_sender.dm         |  12 +-
 .../components/unary_devices/cryo.dm          |  12 +-
 .../unary_devices/heat_exchanger.dm           |   4 +-
 .../unary_devices/outlet_injector.dm          |   2 +-
 .../components/unary_devices/thermomachine.dm |   6 +-
 .../components/unary_devices/vent_pump.dm     |  10 +-
 .../components/unary_devices/vent_scrubber.dm |   6 +-
 .../atmospherics/machinery/datum_pipeline.dm  |  12 +-
 .../atmospherics/machinery/other/meter.dm     |   6 +-
 .../atmospherics/machinery/other/miner.dm     |   8 +-
 .../machinery/pipes/heat_exchange/he_pipes.dm |   2 +-
 .../machinery/portable/canister.dm            |  36 ++--
 .../atmospherics/machinery/portable/pump.dm   |  16 +-
 .../machinery/portable/scrubber.dm            |  10 +-
 code/modules/cargo/bounties/engineering.dm    |   4 +-
 code/modules/cargo/exports/large_objects.dm   |   4 +-
 code/modules/clothing/masks/gas_filter.dm     |  18 +-
 .../clothing/spacesuits/_spacesuits.dm        |   2 +-
 code/modules/events/spacevine.dm              |  16 +-
 code/modules/holodeck/area_copy.dm            |   2 +-
 .../modules/hydroponics/unique_plant_genes.dm |   4 +-
 .../living/carbon/alien/humanoid/humanoid.dm  |   2 +-
 code/modules/mob/living/carbon/alien/life.dm  |  14 +-
 code/modules/mob/living/carbon/human/human.dm |   2 +-
 .../mob/living/carbon/human/species.dm        |   2 +-
 .../carbon/human/species_types/plasmamen.dm   |   4 +-
 code/modules/mob/living/carbon/life.dm        |  18 +-
 code/modules/mob/living/life.dm               |   2 +-
 code/modules/mob/living/living.dm             |   2 +-
 code/modules/mob/living/living_defense.dm     |   2 +-
 code/modules/mob/living/living_say.dm         |   2 +-
 .../living/simple_animal/hostile/regalrat.dm  |   4 +-
 .../mob/living/simple_animal/hostile/tree.dm  |   6 +-
 .../mob/living/simple_animal/simple_animal.dm |   8 +-
 .../mob/living/simple_animal/slime/life.dm    |   2 +-
 code/modules/mob/mob.dm                       |   4 +-
 code/modules/power/generator.dm               |   8 +-
 code/modules/power/supermatter/supermatter.dm |  10 +-
 .../power/supermatter/supermatter_process.dm  |  20 +-
 code/modules/power/turbine/turbine.dm         |  16 +-
 code/modules/reagents/chemistry/holder.dm     |   8 +-
 .../chemistry/reagents/food_reagents.dm       |   4 +-
 code/modules/recycling/disposal/bin.dm        |  10 +-
 code/modules/research/experimentor.dm         |   8 +-
 .../research/ordnance/tank_compressor.dm      |  20 +-
 code/modules/research/server.dm               |   4 +-
 code/modules/shuttle/arrivals.dm              |   2 +-
 code/modules/surgery/organs/augments_chest.dm |   6 +-
 code/modules/surgery/organs/external/wings.dm |   4 +-
 code/modules/surgery/organs/lungs.dm          |  66 +++----
 code/modules/unit_tests/breath.dm             |   4 +-
 code/modules/unit_tests/gas_transfer.dm       |  10 +-
 code/modules/vehicles/mecha/_mecha.dm         |  30 +--
 .../vehicles/mecha/mecha_control_console.dm   |   4 +-
 code/modules/vehicles/mecha/mecha_ui.dm       |   6 +-
 .../components/sensors/pressuresensor.dm      |   2 +-
 html/changelogs/archive/2020-03.yml           |   2 +-
 140 files changed, 742 insertions(+), 740 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 1a155629c85..e6e6962c118 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -59,7 +59,7 @@ GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 					} \
 				} \
 				if (CANPASS_PROC) { \
-					ret |= AM.c_airblock(B); \
+					ret |= AM.zas_canpass(B); \
 				} \
 				if (CANPASS_NEVER) { \
 					ret = BLOCKED; \
@@ -96,7 +96,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 					} \
 				} \
 				if (CANPASS_PROC) { \
-					ret |= AM.c_airblock(B); \
+					ret |= AM.zas_canpass(B); \
 				} \
 				if (CANPASS_NEVER) { \
 					ret = BLOCKED; \
@@ -110,7 +110,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 
 #endif
 
-//#define ATMOS_CANPASS(A, O) ( A.can_atmos_pass == CANPASS_PROC ? A.c_airblock(O) : ( A.can_atmos_pass == CANPASS_DENSITY? !A.density : A.can_atmos_pass))
+//#define ATMOS_CANPASS(A, O) ( A.can_atmos_pass == CANPASS_PROC ? A.zas_canpass(O) : ( A.can_atmos_pass == CANPASS_DENSITY? !A.density : A.can_atmos_pass))
 #define ATMOS_CANPASS_NOTTURF(A) (A.can_atmos_pass == CANPASS_DENSITY ? !A.density : A.can_atmos_pass)
 #define CELL_VOLUME        2500 // Liters in a cell.
 #define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) // Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C.
diff --git a/code/__DEFINES/atmospherics/atmos_helpers.dm b/code/__DEFINES/atmospherics/atmos_helpers.dm
index 6ac20c153a3..838366e9da5 100644
--- a/code/__DEFINES/atmospherics/atmos_helpers.dm
+++ b/code/__DEFINES/atmospherics/atmos_helpers.dm
@@ -28,7 +28,7 @@
 	T.pixel_y = (PipingLayer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y;
 
 ///Calculate the thermal energy of the selected gas (J)
-#define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity())
+#define THERMAL_ENERGY(gas) (gas.temperature * gas.getHeatCapacity())
 
 ///Directly adds a gas to a gas mixture without checking for its presence beforehand, use only if is certain the absence of said gas
 /*
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index aa1e559eb51..8c9b1bab955 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -178,9 +178,9 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
 /// Logs the contents of the gasmix to the game log, prefixed by text
 /proc/log_atmos(text, datum/gas_mixture/mix)
 	var/message = text
-	message += "TEMP=[mix.return_temperature()],MOL=[mix.total_moles()],VOL=[mix.volume]"
-	for(var/key in mix.get_gases())
-		message += "[key]=[mix.get_gas(key)];"
+	message += "TEMP=[mix.getTemperature()],MOL=[mix.getMoles()],VOL=[mix.volume]"
+	for(var/key in mix.getGases())
+		message += "[key]=[mix.getGroupGas(key)];"
 	log_game(message)
 
 /proc/log_say(text)
diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index ca0c2fc006a..250dabd386e 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -41,11 +41,11 @@
 	)
 	if(!gasmix)
 		return
-	for(var/gas_path in gasmix.get_gases())
+	for(var/gas_path in gasmix.getGases())
 		.["gases"] += list(list(
 			"[gas_path]",
 			"[gas_path]",
-			gasmix.get_gas(gas_path),
+			gasmix.getGroupGas(gas_path),
 		))
 	//.for(var/datum/gas_reaction/reaction_result as anything in gasmix.reaction_results)
 	.["reactions"] += list(list(
@@ -53,10 +53,10 @@
 		"UNIMPLIMENTED",
 		"UNIMPLIMENTED",
 	))
-	.["total_moles"] = gasmix.total_moles()
+	.["total_moles"] = gasmix.getMoles()
 	.["temperature"] = gasmix.temperature
 	.["volume"] = gasmix.volume
-	.["pressure"] = gasmix.return_pressure()
+	.["pressure"] = gasmix.returnPressure()
 	.["reference"] = REF(gasmix)
 
 GLOBAL_LIST_EMPTY(reaction_handbook)
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 4c4d001ce4c..6843e8be159 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -350,7 +350,7 @@
 	var/datum/gas_mixture/environment = turf_to_check.return_air()
 	if(!istype(environment))
 		return
-	var/pressure = environment.return_pressure()
+	var/pressure = environment.returnPressure()
 	if(pressure <= LAVALAND_EQUIPMENT_EFFECT_PRESSURE)
 		. = TRUE
 
diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm
index a45c9921098..022ab58fa61 100644
--- a/code/controllers/subsystem/minor_mapping.dm
+++ b/code/controllers/subsystem/minor_mapping.dm
@@ -30,7 +30,7 @@ SUBSYSTEM_DEF(minor_mapping)
 				mouse.forceMove(proposed_turf)
 		else
 			mouse = new /mob/living/simple_animal/hostile/regalrat/controlled(proposed_turf)
-		if(proposed_turf.air.has_gas(GAS_OXYGEN, 5))
+		if(proposed_turf.air.hasGas(GAS_OXYGEN, 5))
 			num_mice -= 1
 			mouse = null
 
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 3f70e516e87..1015394c253 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -530,7 +530,7 @@ SUBSYSTEM_DEF(zas)
 	///This is where the fun begins...
 	var/amount
 	var/gastype
-	while(mix_real.return_pressure() < target_pressure)
+	while(mix_real.returnPressure() < target_pressure)
 		gastype = pick(chosen_gases)
 
 		amount = rand(5,10)
@@ -539,11 +539,11 @@ SUBSYSTEM_DEF(zas)
 		amount = CEILING(amount, 0.1)
 
 		mix_real.gas[gastype] += amount
-		mix_real.update_values()
+		mix_real.updateValues()
 
-	while(mix_real.return_pressure() > target_pressure)
+	while(mix_real.returnPressure() > target_pressure)
 		mix_real.gas[gastype] -= mix_real.gas[gastype] * 0.1
-		mix_real.update_values()
+		mix_real.updateValues()
 
 	mix_real.gas[gastype] = FLOOR(mix_real.gas[gastype], 0.1)
 
@@ -559,4 +559,4 @@ SUBSYSTEM_DEF(zas)
 			CHECK_TICK
 
 	lavaland_atmos = mix_real
-	to_chat(world, span_boldannounce("ZAS: Lavaland contains [num_gases] [num_gases > 1? "gases" : "gas"], with a pressure of [mix_real.return_pressure()] kpa."))
+	to_chat(world, span_boldannounce("ZAS: Lavaland contains [num_gases] [num_gases > 1? "gases" : "gas"], with a pressure of [mix_real.returnPressure()] kpa."))
diff --git a/code/datums/atmosphere/_atmosphere.dm b/code/datums/atmosphere/_atmosphere.dm
index 5bc91a7d85b..c087b7b459b 100644
--- a/code/datums/atmosphere/_atmosphere.dm
+++ b/code/datums/atmosphere/_atmosphere.dm
@@ -37,7 +37,7 @@
 	// Now let the random choices begin
 	var/datum/gas/gastype
 	var/amount
-	while(gasmix.return_pressure() < target_pressure)
+	while(gasmix.returnPressure() < target_pressure)
 		if(!prob(restricted_chance) || !length(spicy_gas))
 			gastype = pick(normal_gases)
 			amount = normal_gases[gastype]
@@ -54,7 +54,7 @@
 		gaslist[gastype][MOLES] += amount
 
 	// That last one put us over the limit, remove some of it
-	while(gasmix.return_pressure() > target_pressure)
+	while(gasmix.returnPressure() > target_pressure)
 		gaslist[gastype][MOLES] -= gaslist[gastype][MOLES] * 0.1
 	gaslist[gastype][MOLES] = FLOOR(gaslist[gastype][MOLES], 0.1)
 	gasmix.garbage_collect()
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index 1d39d442090..2009b33596d 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -521,7 +521,7 @@
 
 	if(M.loc)
 		environment = M.loc.return_air()
-	if(environment && environment.get_gas(GAS_PLASMA))
+	if(environment && environment.getGroupGas(GAS_PLASMA))
 		. += power * min(0.5, environment.gas[GAS_PLASMA] * HEALING_PER_MOL)
 	if(M.reagents.has_reagent(/datum/reagent/toxin/plasma, needs_metabolizing = TRUE))
 		. += power * 0.75 //Determines how much the symptom heals if injected or ingested
diff --git a/code/datums/elements/atmos_requirements.dm b/code/datums/elements/atmos_requirements.dm
index 6b3c13899fc..1737b7e4b6c 100644
--- a/code/datums/elements/atmos_requirements.dm
+++ b/code/datums/elements/atmos_requirements.dm
@@ -49,10 +49,10 @@
 	var/datum/gas_mixture/open_turf_gases = open_turf.return_air()
 
 
-	var/plas = open_turf_gases.get_gas(GAS_PLASMA)
-	var/oxy = open_turf_gases.get_gas(GAS_OXYGEN)
-	var/n2 = open_turf_gases.get_gas(GAS_NITROGEN)
-	var/co2 = open_turf_gases.get_gas(GAS_CO2)
+	var/plas = open_turf_gases.getGroupGas(GAS_PLASMA)
+	var/oxy = open_turf_gases.getGroupGas(GAS_OXYGEN)
+	var/n2 = open_turf_gases.getGroupGas(GAS_NITROGEN)
+	var/co2 = open_turf_gases.getGroupGas(GAS_CO2)
 
 	. = TRUE
 	if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
diff --git a/code/datums/elements/volatile_gas_storage.dm b/code/datums/elements/volatile_gas_storage.dm
index 9ef28b04a37..df61dd0f243 100644
--- a/code/datums/elements/volatile_gas_storage.dm
+++ b/code/datums/elements/volatile_gas_storage.dm
@@ -28,7 +28,7 @@
 	UnregisterSignal(source, COMSIG_ATOM_BREAK)
 
 /datum/element/volatile_gas_storage/proc/Break(atom/origin, datum/gas_mixture/released_gas)
-	var/expelled_pressure = min(released_gas?.return_pressure(), max_explosive_pressure)
+	var/expelled_pressure = min(released_gas?.returnPressure(), max_explosive_pressure)
 
 	if(expelled_pressure < minimum_explosive_pressure)
 		return
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index fbe0cf17ed5..aa9c1d8b516 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -140,17 +140,17 @@
 	if(!floor_gases)
 		return
 
-	if(!(floor_gases.get_gas(GAS_OXYGEN) >= 16))
+	if(!(floor_gases.getGroupGas(GAS_OXYGEN) >= 16))
 		return
-	if(floor_gases.get_gas(GAS_PLASMA))
+	if(floor_gases.getGroupGas(GAS_PLASMA))
 		return
-	if(floor_gases.get_gas(GAS_CO2) >= 10)
+	if(floor_gases.getGroupGas(GAS_CO2) >= 10)
 		return
 
 	// Aim for goldilocks temperatures and pressure
 	if((floor_gases.temperature <= 270) || (floor_gases.temperature >= 360))
 		return
-	var/pressure = floor_gases.return_pressure()
+	var/pressure = floor_gases.returnPressure()
 	if((pressure <= 20) || (pressure >= 550))
 		return
 
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index a2988edf510..247d4aa57bc 100644
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -391,7 +391,7 @@
 	.["accessory"] = accessory
 
 /// Copy most vars from another outfit to this one
-/datum/outfit/proc/copy_from(datum/outfit/target)
+/datum/outfit/proc/copyFrom(datum/outfit/target)
 	name = target.name
 	uniform = target.uniform
 	suit = target.suit
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index eebd9b8367f..2267052fbc0 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1370,7 +1370,7 @@
 	SEND_SIGNAL(src, COMSIG_ATOM_EXITED, gone, direction)
 
 ///Return atom temperature
-/atom/proc/return_temperature()
+/atom/proc/getTemperature()
 	return
 
 /**
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index 771eb72ce5b..843fa096e6b 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -299,7 +299,7 @@
 	var/target_amount = text2num(name)
 	var/found_amount = 0
 	var/datum/gas_mixture/mix = T.return_air()
-	found_amount += mix.get_gas(GAS_PLASMA)
+	found_amount += mix.getGroupGas(GAS_PLASMA)
 	return found_amount>=target_amount
 
 
diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm
index e8aab954059..5e9eff96a2d 100644
--- a/code/game/machinery/airlock_control.dm
+++ b/code/game/machinery/airlock_control.dm
@@ -139,7 +139,7 @@
 /obj/machinery/airlock_sensor/process()
 	if(on)
 		var/datum/gas_mixture/air_sample = return_air()
-		var/pressure = round(air_sample.return_pressure(),0.1)
+		var/pressure = round(air_sample.returnPressure(),0.1)
 		alert = (pressure < ONE_ATMOSPHERE*0.8)
 
 		var/datum/signal/signal = new(list(
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 83739f849c0..27fa24f363e 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -109,7 +109,7 @@
 	update_nearby_tiles()
 	return ..()
 
-/obj/machinery/door/c_airblock(turf/other)
+/obj/machinery/door/zas_canpass(turf/other)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(block_air_zones)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 1e60db469ae..92216006308 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -659,7 +659,7 @@
 		leaving.Bump(src)
 		return COMPONENT_ATOM_BLOCK_EXIT
 
-/obj/machinery/door/firedoor/border_only/c_airblock(turf/T, vertical = FALSE)
+/obj/machinery/door/firedoor/border_only/zas_canpass(turf/T, vertical = FALSE)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index b64840b4417..7ddcd91cb5c 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -174,7 +174,7 @@
 
 	return TRUE
 
-/obj/machinery/door/window/c_airblock(turf/T, vertical = FALSE)
+/obj/machinery/door/window/zas_canpass(turf/T, vertical = FALSE)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 668d6671468..59b80cbf08b 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -113,7 +113,7 @@
 	if(mode == HEATER_MODE_STANDBY)
 		return
 
-	var/heat_capacity = enviroment.heat_capacity()
+	var/heat_capacity = enviroment.getHeatCapacity()
 	var/required_energy = abs(enviroment.temperature - target_temperature) * heat_capacity
 	required_energy = min(required_energy, heating_power)
 
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 6aa32aba5c2..0574d52fc52 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -44,9 +44,9 @@
 	if(hotspot && istype(T) && T.air)
 		qdel(hotspot)
 		var/datum/gas_mixture/G = T.return_air()
-		if(G.get_gas(GAS_PLASMA))
-			var/plas_amt = min(30, G.get_gas(GAS_PLASMA)) //Absorb some plasma
-			G.adjust_gas(GAS_PLASMA, -plas_amt)
+		if(G.getGroupGas(GAS_PLASMA))
+			var/plas_amt = min(30, G.getGroupGas(GAS_PLASMA)) //Absorb some plasma
+			G.adjustGas(GAS_PLASMA, -plas_amt)
 			absorbed_plasma += plas_amt
 		if(G.temperature > T20C)
 			G.temperature = max(G.temperature/2,T20C)
@@ -365,7 +365,7 @@
 				if(I == GAS_OXYGEN || I == GAS_NITROGEN)
 					continue
 				G_gases[I] = 0
-			G.update_values()
+			G.updateValues()
 		for(var/obj/machinery/atmospherics/components/unary/U in O)
 			if(!U.welded)
 				U.welded = TRUE
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index fffe00908a9..0272ef5309a 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -176,9 +176,9 @@
 			//T.air_update_turf(FALSE, FALSE)
 			for(var/obj/effect/hotspot/H in T)
 				qdel(H)
-			if(G.get_gas(GAS_PLASMA))
-				G.adjust_gas(GAS_NITROGEN, G.get_gas(GAS_PLASMA))
-				G.adjust_gas(GAS_PLASMA, -G.gas[GAS_PLASMA])
+			if(G.getGroupGas(GAS_PLASMA))
+				G.adjustGas(GAS_NITROGEN, G.getGroupGas(GAS_PLASMA))
+				G.adjustGas(GAS_PLASMA, -G.gas[GAS_PLASMA])
 		if (weldvents)
 			for(var/obj/machinery/atmospherics/components/unary/U in T)
 				if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber.
diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm
index 7f8f5a6909c..990dd7d62ec 100644
--- a/code/game/objects/effects/effect_system/effects_water.dm
+++ b/code/game/objects/effects/effect_system/effects_water.dm
@@ -18,7 +18,7 @@
 	if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		var/altered_temp = max(env.temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * diff_temp), 0)
 		env.temperature = (diff_temp > 0) ? min(temperature, altered_temp) : max(temperature, altered_temp)
-		env.update_values()
+		env.updateValues()
 
 	if (--src.life < 1)
 		qdel(src)
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index 64fc60062e6..28622eac887 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -6,16 +6,16 @@
 	name = "bomb"
 	icon = 'icons/hud/screen_gen.dmi'
 	icon_state = "x"
-	/* Gasmixes for tank_one and tank_two of the ttv respectively. 
+	/* Gasmixes for tank_one and tank_two of the ttv respectively.
 	 * Populated on /obj/effect/spawner/newbomb/Initialize, depopulated right after by the children procs.
 	 */
 	var/datum/gas_mixture/first_gasmix
 	var/datum/gas_mixture/second_gasmix
 
-/** 
+/**
  * The part of code that actually spawns the bomb. Always call the parent's initialize first for subtypes of these.
  *
- * Arguments: 
+ * Arguments:
  * * assembly - An assembly typepath to add to the ttv.
  */
 /obj/effect/spawner/newbomb/Initialize(mapload, assembly = null)
@@ -25,8 +25,8 @@
 	ttv.tank_two = new /obj/item/tank/internals/oxygen (ttv)
 	first_gasmix = ttv.tank_one.return_air()
 	second_gasmix = ttv.tank_two.return_air()
-	first_gasmix.remove_ratio(1)
-	second_gasmix.remove_ratio(1)
+	first_gasmix.removeRatio(1)
+	second_gasmix.removeRatio(1)
 	if(ispath(assembly, /obj/item/assembly))
 		var/obj/item/assembly/newassembly = new assembly (ttv)
 		ttv.attached_device = newassembly
@@ -85,7 +85,7 @@
 	first_gasmix.assert_gas(/datum/gas/hypernoblium)
 	first_gasmix.assert_gas(/datum/gas/tritium)
 	second_gasmix.assert_gas(/datum/gas/oxygen)
-	
+
 	first_gasmix.gases[/datum/gas/hypernoblium][MOLES] = REACTION_OPPRESSION_THRESHOLD - 0.01
 	first_gasmix.gases[/datum/gas/tritium][MOLES] = 0.5 * calculate_pressure(first_gasmix, TANK_LEAK_PRESSURE - 1)
 	second_gasmix.gases[/datum/gas/oxygen][MOLES] = calculate_pressure(second_gasmix, TANK_LEAK_PRESSURE-1)
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index b8740740a76..c6e56b0b4e3 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -194,7 +194,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
 
 	if(!reagents.has_reagent(/datum/reagent/oxygen)) //cigarettes need oxygen
 		var/datum/gas_mixture/air = return_air()
-		if(!air || !air.has_gas(GAS_OXYGEN, 1)) //or oxygen on a tile to burn
+		if(!air || !air.hasGas(GAS_OXYGEN, 1)) //or oxygen on a tile to burn
 			to_chat(user, span_notice("Your [name] needs a source of oxygen to burn."))
 			return ..()
 
@@ -315,7 +315,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
 	user?.IgniteMob()
 	if(!reagents.has_reagent(/datum/reagent/oxygen)) //cigarettes need oxygen
 		var/datum/gas_mixture/air = return_air()
-		if(!air || !air.has_gas(GAS_OXYGEN, 1)) //or oxygen on a tile to burn
+		if(!air || !air.hasGas(GAS_OXYGEN, 1)) //or oxygen on a tile to burn
 			extinguish()
 			return
 
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 123e215b394..389802bead0 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -139,7 +139,7 @@
 	var/temp_to_give = internal_heat / FRACTION_TO_RELEASE
 	internal_heat -= temp_to_give
 	var/datum/gas_mixture/environment = our_turf.return_air()
-	var/delta_temperature = temp_to_give / environment.heat_capacity()
+	var/delta_temperature = temp_to_give / environment.getHeatCapacity()
 	if(delta_temperature)
 		environment.temperature += delta_temperature
 		//air_update_turf(FALSE, FALSE)
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index 3f2f88e3f6c..bb781cc76ee 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -150,18 +150,18 @@
 			message += span_boldnotice("Node [mix_number]")
 			mix_name += " - Node [mix_number]"
 
-		var/total_moles = air.total_moles()
-		var/pressure = air.return_pressure()
-		var/volume = air.return_volume() //could just do mixture.volume... but safety, I guess?
-		var/temperature = air.return_temperature()
+		var/total_moles = air.getMoles()
+		var/pressure = air.returnPressure()
+		var/volume = air.getVolume() //could just do mixture.volume... but safety, I guess?
+		var/temperature = air.getTemperature()
 
 		if(total_moles > 0)
 			message += span_notice("Moles: [round(total_moles, 0.01)] mol")
 
 			var/list/cached_gases = air.gas
 			for(var/id in cached_gases)
-				var/gas_concentration = air.get_gas(id)/total_moles
-				message += span_notice("[id]: [round(air.get_gas(id), 0.01)] mol ([round(gas_concentration*100, 0.01)] %)")
+				var/gas_concentration = air.getGroupGas(id)/total_moles
+				message += span_notice("[id]: [round(air.getGroupGas(id), 0.01)] mol ([round(gas_concentration*100, 0.01)] %)")
 			message += span_notice("Temperature: [round(temperature - T0C,0.01)] &deg;C ([round(temperature, 0.01)] K)")
 			message += span_notice("Volume: [volume] L")
 			message += span_notice("Pressure: [round(pressure, 0.01)] kPa")
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 8009ffa92cd..3cb05feeef8 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -148,8 +148,8 @@
 
 	if(change_volume)
 		target_mix.volume += other_mix.volume
-	
-	target_mix.merge(other_mix.remove_ratio(1))
+
+	target_mix.merge(other_mix.removeRatio(1))
 	return TRUE
 
 /obj/item/transfer_valve/proc/split_gases()
@@ -160,7 +160,7 @@
 
 	var/volume_ratio = mix_one.volume/mix_two.volume
 	var/datum/gas_mixture/temp
-	temp = mix_two.remove_ratio(volume_ratio)
+	temp = mix_two.removeRatio(volume_ratio)
 	mix_one.merge(temp)
 	mix_two.volume -= mix_one.volume
 
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 96724324d20..18bfd33c663 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -218,11 +218,11 @@
 	//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/ptank_mix = ptank.return_air()
-	var/datum/gas_mixture/air_transfer = ptank_mix.remove_ratio(release_amount)
+	var/datum/gas_mixture/air_transfer = ptank_mix.removeRatio(release_amount)
 	//air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE
-	var/obj/effect/decal/cleanable/oil/l_fuel = new(target,air_transfer.get_by_flag(XGM_GAS_FUEL),get_dir(loc,target))
+	var/obj/effect/decal/cleanable/oil/l_fuel = new(target,air_transfer.getByFlag(XGM_GAS_FUEL),get_dir(loc,target))
 	l_fuel.reagent_amount = release_amount
-	air_transfer.remove_by_flag(XGM_GAS_FUEL, 0)
+	air_transfer.removeByFlag(XGM_GAS_FUEL, 0)
 	target.assume_air(air_transfer)
 	//Burn it based on transfered gas
 	target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index 4cd66ae96e0..2e00422b02f 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -92,7 +92,7 @@
 		target.visible_message(span_danger("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!"), \
 			span_userdanger("[user]'s punches you!"))
 		return
-	/*if(!molar_cmp_equals(gasused.total_moles(), gasperfist * fisto_setting))
+	/*if(!molar_cmp_equals(gasused.getMoles(), gasperfist * fisto_setting))
 		to_chat(user, span_warning("\The [src]'s piston-ram lets out a weak hiss, it needs more gas!"))
 		playsound(loc, 'sound/weapons/punch4.ogg', 50, TRUE)
 		target.apply_damage((force / 2), BRUTE)
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index 40e1586635c..82a57bd66bf 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -41,7 +41,7 @@
 /obj/item/tank/jetpack/populate_gas()
 	if(gas_type)
 		var/datum/gas_mixture/our_mix = return_air()
-		our_mix.adjust_gas(gas_type, (6*ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C))
+		our_mix.adjustGas(gas_type, (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))
@@ -123,12 +123,12 @@
 		return COMSIG_MOVABLE_STOP_SPACEMOVE
 
 /obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
-	if((num < 0.005 || air_contents.total_moles() < num))
+	if((num < 0.005 || air_contents.getMoles() < num))
 		turn_off(user)
 		return
 
 	var/datum/gas_mixture/removed = remove_air(num)
-	if(removed.total_moles() < 0.005)
+	if(removed.getMoles() < 0.005)
 		turn_off(user)
 		return
 
diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm
index 4e3a3eab4ed..ad6bf4baafb 100644
--- a/code/game/objects/items/tanks/tank_types.dm
+++ b/code/game/objects/items/tanks/tank_types.dm
@@ -22,7 +22,7 @@
 
 
 /obj/item/tank/internals/oxygen/populate_gas()
-	air_contents.adjust_gas(GAS_OXYGEN,(6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+	air_contents.adjustGas(GAS_OXYGEN,(6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 
 /obj/item/tank/internals/oxygen/yellow
@@ -52,8 +52,8 @@
 	force = 10
 
 /obj/item/tank/internals/anesthetic/populate_gas()
-	air_contents.adjust_gas(GAS_OXYGEN,(3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD)
-	air_contents.adjust_gas(GAS_NITROGEN, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD)
+	air_contents.adjustGas(GAS_OXYGEN,(3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD)
+	air_contents.adjustGas(GAS_NITROGEN, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD)
 
 /*
  * Plasma
@@ -70,7 +70,7 @@
 
 
 /obj/item/tank/internals/plasma/populate_gas()
-	air_contents.adjust_gas(GAS_PLASMA, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+	air_contents.adjustGas(GAS_PLASMA, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, params)
 	if(istype(W, /obj/item/flamethrower))
@@ -86,7 +86,7 @@
 		return ..()
 
 /obj/item/tank/internals/plasma/full/populate_gas()
-	air_contents.adjust_gas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+	air_contents.adjustGas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasma/empty/populate_gas()
 	return
@@ -105,10 +105,10 @@
 	distribute_pressure = TANK_PLASMAMAN_RELEASE_PRESSURE
 
 /obj/item/tank/internals/plasmaman/populate_gas()
-	air_contents.adjust_gas(GAS_PLASMA, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+	air_contents.adjustGas(GAS_PLASMA, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasmaman/full/populate_gas()
-	air_contents.adjust_gas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+	air_contents.adjustGas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 
 /obj/item/tank/internals/plasmaman/belt
@@ -123,7 +123,7 @@
 	w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
 
 /obj/item/tank/internals/plasmaman/belt/full/populate_gas()
-	air_contents.adjust_gas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+	air_contents.adjustGas(GAS_PLASMA, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/plasmaman/belt/empty/populate_gas()
 	return
@@ -149,7 +149,7 @@
 
 
 /obj/item/tank/internals/emergency_oxygen/populate_gas()
-	air_contents.adjust_gas(GAS_OXYGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+	air_contents.adjustGas(GAS_OXYGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 
 /obj/item/tank/internals/emergency_oxygen/empty/populate_gas()
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index c69e23ee429..83e63904caf 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -119,7 +119,7 @@
 			. += span_notice("If you want any more information you'll need to get closer.")
 		return
 
-	. += span_notice("The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa.")
+	. += span_notice("The pressure gauge reads [round(src.air_contents.returnPressure(),0.01)] kPa.")
 
 	var/celsius_temperature = air_contents.temperature-T0C
 	var/descriptive
@@ -150,7 +150,7 @@
 	var/mob/living/carbon/human/H = user
 	user.visible_message(span_suicide("[user] is putting [src]'s valve to [user.p_their()] lips! It looks like [user.p_theyre()] trying to commit suicide!"))
 	playsound(loc, 'sound/effects/spray.ogg', 10, TRUE, -3)
-	if(!QDELETED(H) && air_contents && air_contents.return_pressure() >= 1000)
+	if(!QDELETED(H) && air_contents && air_contents.returnPressure() >= 1000)
 		ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC)
 		H.inflate_gib()
 		return MANUAL_SUICIDE
@@ -185,7 +185,7 @@
 
 /obj/item/tank/ui_data(mob/user)
 	. = list(
-		"tankPressure" = round(air_contents.return_pressure()),
+		"tankPressure" = round(air_contents.returnPressure()),
 		"releasePressure" = round(distribute_pressure)
 	)
 
@@ -245,7 +245,7 @@
 	if(!air_contents)
 		return null
 
-	var/tank_pressure = air_contents.return_pressure()
+	var/tank_pressure = air_contents.returnPressure()
 	var/actual_distribute_pressure = clamp(tank_pressure, 0, distribute_pressure)
 
 	// Lets do some algebra to understand why this works, yeah?
@@ -277,7 +277,7 @@
 	var/atom/location = loc
 	if(!location)
 		return
-	var/datum/gas_mixture/leaked_gas = air_contents.remove_ratio(0.25)
+	var/datum/gas_mixture/leaked_gas = air_contents.removeRatio(0.25)
 	location.assume_air(leaked_gas)
 
 /**
@@ -291,8 +291,8 @@
 	if(!air_contents)
 		return FALSE
 
-	var/pressure = air_contents.return_pressure()
-	var/temperature = air_contents.return_temperature()
+	var/pressure = air_contents.returnPressure()
+	var/temperature = air_contents.getTemperature()
 	if(temperature >= TANK_MELT_TEMPERATURE)
 		var/temperature_damage_ratio = (temperature - TANK_MELT_TEMPERATURE) / temperature
 		take_damage(max_integrity * temperature_damage_ratio * delta_time, BURN, FIRE, FALSE, NONE)
@@ -325,13 +325,13 @@
 		return ..()
 
 	/// Handle fragmentation
-	var/pressure = air_contents.return_pressure()
+	var/pressure = air_contents.returnPressure()
 	if(pressure > TANK_FRAGMENT_PRESSURE)
 		if(!istype(loc, /obj/item/transfer_valve))
 			log_bomber(get_mob_by_key(fingerprintslast), "was last key to touch", src, "which ruptured explosively")
 		//Give the gas a chance to build up more pressure through reacting
 		air_contents.react(src)
-		pressure = air_contents.return_pressure()
+		pressure = air_contents.returnPressure()
 
 		// As of writing this this is calibrated to maxcap at 140L and 160atm.
 		var/power = (air_contents.volume * (pressure - TANK_FRAGMENT_PRESSURE)) / TANK_FRAGMENT_SCALE
@@ -341,7 +341,7 @@
 
 /obj/item/tank/proc/merging_information()
 	SIGNAL_HANDLER
-	if(air_contents.return_pressure() > TANK_FRAGMENT_PRESSURE)
+	if(air_contents.returnPressure() > TANK_FRAGMENT_PRESSURE)
 		explosion_info += TANK_MERGE_OVERPRESSURE
 
 /obj/item/tank/proc/explosion_information()
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 5742bd4febb..b1ae29d5e90 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -119,8 +119,8 @@
 
 	if(breath_request>0)
 		var/datum/gas_mixture/environment = return_air()
-		var/breath_percentage = BREATH_VOLUME / environment.return_volume()
-		return remove_air(environment.total_moles() * breath_percentage)
+		var/breath_percentage = BREATH_VOLUME / environment.getVolume()
+		return remove_air(environment.getMoles() * breath_percentage)
 	else
 		return null
 
diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm
index 327dcf0b93a..5acf553e299 100644
--- a/code/game/objects/structures/bonfire.dm
+++ b/code/game/objects/structures/bonfire.dm
@@ -102,7 +102,7 @@
 		var/turf/open/bonfire_turf = loc
 		var/datum/gas_mixture/local_gas = bonfire_turf.return_air()
 		if(local_gas)
-			if(local_gas.has_gas(GAS_OXYGEN, 5))
+			if(local_gas.hasGas(GAS_OXYGEN, 5))
 				return TRUE
 	return FALSE
 
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 8c5695d6185..fcb15c7bc72 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -697,7 +697,7 @@
 /obj/structure/closet/AllowDrop()
 	return TRUE
 
-/obj/structure/closet/return_temperature()
+/obj/structure/closet/getTemperature()
 	return
 
 /obj/structure/closet/proc/locker_carbon(datum/source, mob/living/carbon/shover, mob/living/carbon/target, shove_blocked)
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 9ee3e118680..267cacfa139 100644
--- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm
+++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
@@ -325,8 +325,8 @@
 	air_contents = new(50) //liters
 	air_contents.temperature = T20C
 
-	air_contents.adjust_gas(GAS_OXYGEN, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD)
-	air_contents.adjust_gas(GAS_N2O, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD)
+	air_contents.adjustGas(GAS_OXYGEN, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD)
+	air_contents.adjustGas(GAS_N2O, (ONE_ATMOSPHERE*50)/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD)
 
 /obj/structure/closet/body_bag/environmental/prisoner/syndicate/Destroy()
 	if(air_contents)
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 67b8ff3951b..84a471a4931 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -58,7 +58,7 @@
 		update_appearance()
 		update_nearby_tiles(TRUE)
 
-/obj/structure/falsewall/c_airblock(turf/other)
+/obj/structure/falsewall/zas_canpass(turf/other)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	return density ? (AIR_BLOCKED|ZONE_BLOCKED) : ZONE_BLOCKED
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index 111ab281c51..63774fa5f9f 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -169,7 +169,7 @@
 	if(QDELETED(pod))
 		return
 	var/datum/gas_mixture/floor_mixture = loc.return_air()
-	pod.air_contents.share_ratio(floor_mixture, 1)
+	pod.air_contents.shareRatio(floor_mixture, 1)
 
 /obj/structure/transit_tube/station/init_tube_dirs()
 	switch(dir)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index d26ff609d11..680e9063de7 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -14,8 +14,8 @@
 
 /obj/structure/transit_tube_pod/Initialize(mapload)
 	. = ..()
-	air_contents.adjust_gas(GAS_OXYGEN, MOLES_O2STANDARD)
-	air_contents.adjust_gas(GAS_NITROGEN, MOLES_N2STANDARD)
+	air_contents.adjustGas(GAS_OXYGEN, MOLES_O2STANDARD)
+	air_contents.adjustGas(GAS_NITROGEN, MOLES_N2STANDARD)
 	air_contents.temperature = T20C
 
 /obj/structure/transit_tube_pod/Destroy()
@@ -203,7 +203,7 @@
 		return
 
 
-/obj/structure/transit_tube_pod/return_temperature()
+/obj/structure/transit_tube_pod/getTemperature()
 	return air_contents.temperature
 
 //special pod made by the dispenser, it fizzles away when reaching a station.
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index a71ddb6ade2..81af20511f0 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -70,7 +70,7 @@
 	if(istype(mover, /obj/structure/windoor_assembly) || istype(mover, /obj/machinery/door/window))
 		return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
 
-/obj/structure/windoor_assembly/c_airblock(turf/T, vertical = FALSE)
+/obj/structure/windoor_assembly/zas_canpass(turf/T, vertical = FALSE)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index ceb7ac4f437..4b92b702298 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -353,7 +353,7 @@
 	if(anchored)
 		move_update_air(T)*/
 
-/obj/structure/window/c_airblock(turf/T, vertical = FALSE)
+/obj/structure/window/zas_canpass(turf/T, vertical = FALSE)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(!anchored || !density)
@@ -385,7 +385,7 @@
 
 /obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
 	if (exposed_temperature > melting_point)
-		take_damage(round(air.return_volume() / 100), BURN, 0, 0)
+		take_damage(round(air.getVolume() / 100), BURN, 0, 0)
 
 /obj/structure/window/get_dumping_location()
 	return null
diff --git a/code/game/sound.dm b/code/game/sound.dm
index b544b90401b..735ab0c72c3 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -140,7 +140,7 @@ distance_multiplier - Can be used to multiply the distance at which the sound is
 			var/datum/gas_mixture/source_env = turf_source.return_air()
 
 			if(hearer_env && source_env)
-				var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure())
+				var/pressure = min(hearer_env.returnPressure(), source_env.returnPressure())
 				if(pressure < ONE_ATMOSPHERE)
 					pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0)
 			else //space
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 21a57199504..3d8bad6b65c 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -40,7 +40,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 			var/datum/component/wet_floor/WF = T.AddComponent(/datum/component/wet_floor)
 			WF.InheritComponent(slip)
 		if (copy_air)
-			T.return_air().copy_from(return_air())
+			T.return_air().copyFrom(return_air())
 
 //wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself
 /turf/proc/TerraformTurf(path, new_baseturf, flags)
@@ -166,12 +166,12 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 /turf/open/ChangeTurf(path, list/new_baseturfs, flags) //Resist the temptation to make this default to keeping air.
 	if ((flags & CHANGETURF_INHERIT_AIR) && ispath(path, /turf/open))
 		var/datum/gas_mixture/stashed_air = new()
-		stashed_air.copy_from(air)
+		stashed_air.copyFrom(air)
 		. = ..() //If path == type this will return us, don't bank on making a new type
 		if (!.) // changeturf failed or didn't do anything
 			return
 		var/turf/open/newTurf = .
-		newTurf.air.copy_from(stashed_air)
+		newTurf.air.copyFrom(stashed_air)
 		SSzas.mark_for_update(newTurf)
 	else
 		if(ispath(path,/turf/closed) || ispath(path,/turf/cordon))
@@ -334,7 +334,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	var/heat_cap = 0
 	for(var/turf/T in turf_list)
 		var/datum/gas_mixture/turf_mix = T.return_air()
-		var/capacity = turf_mix.heat_capacity()
+		var/capacity = turf_mix.getHeatCapacity()
 		energy += turf_mix.temperature * capacity
 		heat_cap += capacity
 
@@ -347,7 +347,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 		total_gases[id] /= turf_count
 
 	for(var/turf/T as anything in turf_list)
-		T.return_air().copy_from(total)
+		T.return_air().copyFrom(total)
 		SSzas.mark_for_update(T)
 */
 /*
@@ -370,7 +370,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 		var/datum/gas_mixture/turf/mix = T.air
 		//"borrowing" this code from merge(), I need to play with the temp portion. Lets expand it out
 		//temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
-		var/capacity = mix.heat_capacity()
+		var/capacity = mix.getHeatCapacity()
 		energy += mix.temperature * capacity
 		heat_cap += capacity
 
@@ -385,7 +385,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 
 	for(var/t in turf_list)
 		var/turf/open/T = t
-		T.air.copy_from(total)
+		T.air.copyFrom(total)
 		T.update_visuals()
 		SSair.add_to_active(T)
 */
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 1ed2a0c8971..cffed90e436 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -178,7 +178,7 @@
 */
 
 /turf/open/GetHeatCapacity()
-	. = air.heat_capacity()
+	. = air.getHeatCapacity()
 
 /turf/open/GetTemperature()
 	. = return_air().temperature
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 1e7179cd9b8..a6e8e7a9864 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -101,7 +101,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
 
 	// if(!blocks_air || !simulated)
 		// air = new
-		// air.copy_from(src.return_air())
+		// air.copyFrom(src.return_air())
 
 	// by default, vis_contents is inherited from the turf that was here before
 	vis_contents.Cut()
diff --git a/code/modules/admin/outfit_editor.dm b/code/modules/admin/outfit_editor.dm
index e57d0a9e79a..ebe90196aa5 100644
--- a/code/modules/admin/outfit_editor.dm
+++ b/code/modules/admin/outfit_editor.dm
@@ -16,7 +16,7 @@
 
 	if(ispath(target))
 		drip = new /datum/outfit
-		drip.copy_from(new target)
+		drip.copyFrom(new target)
 	else if(istype(target))
 		drip = target
 	else
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index 01f9f63ede3..e958300cc35 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -25,7 +25,7 @@
 	for(var/datum/pipeline/PN as anything in SSairmachines.networks)
 		for(var/datum/gas_mixture/G in list(PN.air) & PN.other_airs)
 			G.gas = list()
-			G.update_values()
+			G.updateValues()
 
 	to_chat(usr, "\[2/5\] - All pipenets purged of gas.")
 
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 90de5b94a7b..afcb295838a 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -98,7 +98,7 @@
 /obj/structure/blob/block_superconductivity()
 	return atmosblock
 
-/obj/structure/blob/c_airblock(turf/T, vertical = FALSE)
+/obj/structure/blob/zas_canpass(turf/T, vertical = FALSE)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	return atmosblock ? AIR_BLOCKED : AIR_ALLOWED
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index 2c01006f9d0..0bb31d04922 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -151,8 +151,8 @@
 	START_PROCESSING(SSobj, src)
 	var/datum/gas_mixture/our_mix = return_air()
 
-	var/fuel_moles = our_mix.get_gas(GAS_PLASMA) + our_mix.get_gas(GAS_OXYGEN)/6
-	var/datum/gas_mixture/bomb_mixture = our_mix.copy_from()
+	var/fuel_moles = our_mix.getGroupGas(GAS_PLASMA) + our_mix.getGroupGas(GAS_OXYGEN)/6
+	var/datum/gas_mixture/bomb_mixture = our_mix.copyFrom()
 	var/strength = 1
 
 	var/turf/ground_zero = get_turf(loc)
@@ -202,7 +202,7 @@
 
 /obj/item/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
 	var/datum/gas_mixture/our_mix = return_air()
-	var/datum/gas_mixture/removed = remove_air(our_mix.total_moles())
+	var/datum/gas_mixture/removed = remove_air(our_mix.getMoles())
 	var/turf/T = get_turf(src)
 	if(!T)
 		return
diff --git a/code/modules/atmospherics/Atmospherics.md b/code/modules/atmospherics/Atmospherics.md
index 6d61a8cf16b..c5963cf03ff 100644
--- a/code/modules/atmospherics/Atmospherics.md
+++ b/code/modules/atmospherics/Atmospherics.md
@@ -116,7 +116,7 @@ var/datum/gas_mixture/air = new
 air.assert_gas(/datum/gas/oxygen)
 air.gases[/datum/gas/oxygen][MOLES] = 100
 world << air.gases[/datum/gas/oxygen][GAS_META][META_GAS_NAME] //outputs "Oxygen"
-world << air.gases.heat_capacity() //outputs 2000 (100 mol * 20 J/K/mol)
+world << air.gases.getHeatCapacity() //outputs 2000 (100 mol * 20 J/K/mol)
 air.gases[/datum/gas/oxygen][MOLES] -= 110
 air.garbage_collect() //oxygen is now removed from the gases list, since it was empty
 ```
@@ -128,16 +128,16 @@ Of particular note in this snippet are the two procs assert_gas() and garbage_co
 * *`/datum/gas_mixture/proc/assert_gas()`* - Used before accessing a particular type of gas.
 * *`/datum/gas_mixture/proc/assert_gases()`* - Shorthand for calling assert_gas() multiple times.
 * *`/datum/gas_mixture/proc/garbage_collect()`* - Used after removing any number of moles from a mixture.
-* *`/datum/gas_mixture/proc/return_pressure()`* - Pressure is what should be displayed to players to quantify gas; measured in kilopascals.
+* *`/datum/gas_mixture/proc/returnPressure()`* - Pressure is what should be displayed to players to quantify gas; measured in kilopascals.
 * *`/datum/gas_mixture/var/temperature`* - Measured in kelvins. Useful constants are T0C and T20C for 0 and 20 degrees Celsius respectively, and TCMB,the temperature of space and the lower bound for temperature in atmos.
 * *`/datum/gas_mixture/var/volume`* - Measured in liters.
 
 While we're on the subject, `/datum/gas_mixture` has two subtypes.
-The first is `/datum/gas_mixture/turf`, which exists for literally one purpose. When a turf is empty, we want it to have the same heat capacity as space. This lets us achieve that by overriding `heat_capacity()`
+The first is `/datum/gas_mixture/turf`, which exists for literally one purpose. When a turf is empty, we want it to have the same heat capacity as space. This lets us achieve that by overriding `getHeatCapacity()`
 
 The second is `/datum/gas_mixture/immutable`, which itself has two subtypes.
 The type is built to allow for gasmixtures that serve as infinite sources of "something", which can't be changed or mutated.
-It's used by `/datum/gas_mixture/immutable/space`, which implements some particular things for `heat_capacity()` and some optimizations for gas operations.
+It's used by `/datum/gas_mixture/immutable/space`, which implements some particular things for `getHeatCapacity()` and some optimizations for gas operations.
 It's also implemented by `/datum/gas_mixture/immutable/planetary`, which is used for planetary turfs, and has some code that makes actually having a gasmix possible.
 
 
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index 2834b6c0860..da18ffbaf9c 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -29,7 +29,7 @@
 // AIR_BLOCKED - Blocked
 // ZONE_BLOCKED - Not blocked, but zone boundaries will not cross.
 // BLOCKED - Blocked, zone boundaries will not cross even if opened.
-/atom/proc/c_airblock(turf/other)
+/atom/proc/zas_canpass(turf/other)
 	#ifdef ZASDBG
 	ASSERT(isturf(other))
 	#endif
@@ -41,7 +41,7 @@
 	return (AIR_BLOCKED*!ATMOS_CANPASS_NOTTURF(src))
 
 // This is a legacy proc only here for compatibility - you probably should just use ATMOS_CANPASS_TURF directly.
-/turf/c_airblock(turf/other)
+/turf/zas_canpass(turf/other)
 	#ifdef ZASDBG
 	ASSERT(isturf(other))
 	#endif
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 0c1ccd8ba0d..125c37c4692 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -156,9 +156,9 @@ Class Procs:
 		erase()
 		return
 
-	var/equiv = A.air.share_ratio(B.air, coefficient)
+	var/equiv = A.air.shareRatio(B.air, coefficient)
 
-	var/differential = A.air.return_pressure() - B.air.return_pressure()
+	var/differential = A.air.returnPressure() - B.air.returnPressure()
 	if(abs(differential) >= SSzas.settings.airflow_lightest_pressure)
 		var/list/attracted
 		var/list/repelled
@@ -239,15 +239,15 @@ Class Procs:
 		erase()
 		return
 
-	var/equiv = A.air.share_space(air)
+	var/equiv = A.air.shareSpace(air)
 
-	var/differential = A.air.return_pressure() - air.return_pressure()
+	var/differential = A.air.returnPressure() - air.returnPressure()
 	if(abs(differential) >= SSzas.settings.airflow_lightest_pressure)
 		var/list/attracted = A.movables()
 		flow(attracted, abs(differential), differential < 0)
 
 	if(equiv)
-		A.air.copy_from(air)
+		A.air.copyFrom(air)
 		SSzas.mark_edge_sleeping(src)
 
 	SSzas.mark_zone_update(A)
@@ -262,11 +262,11 @@ Class Procs:
 /proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
 	//This implements a simplistic version of the Stefan-Boltzmann law.
 	var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5
-	var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier))
+	var/maximum_energy_delta = max(0, min(A.temperature * A.getHeatCapacity() * A.group_multiplier, B.temperature * B.getHeatCapacity() * B.group_multiplier))
 	if(maximum_energy_delta > abs(energy_delta))
 		if(energy_delta < 0)
 			maximum_energy_delta *= -1
 		energy_delta = maximum_energy_delta
 
-	A.temperature -= energy_delta / (A.heat_capacity() * A.group_multiplier)
-	B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier)
+	A.temperature -= energy_delta / (A.getHeatCapacity() * A.group_multiplier)
+	B.temperature += energy_delta / (B.getHeatCapacity() * B.group_multiplier)
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index ef393060332..1ee1b6ac39e 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -6,7 +6,7 @@
 		else
 			to_chat(mob, span_admin("ZASDBG: No zone here."))
 			var/datum/gas_mixture/mix = T.return_air()
-			to_chat(mob,span_admin( "ZASDBG_MAIN: [mix.return_pressure()] kPa [mix.temperature]C"))
+			to_chat(mob,span_admin( "ZASDBG_MAIN: [mix.returnPressure()] kPa [mix.temperature]C"))
 			for(var/g in mix.gas)
 				to_chat(mob, span_admin("ZASDBG_GAS:[g]: [mix.gas[g]]\n"))
 	else
@@ -37,7 +37,7 @@
 		return
 
 	if(direction == "N/A")
-		if(!(T.c_airblock(T) & AIR_BLOCKED))
+		if(!(T.zas_canpass(T) & AIR_BLOCKED))
 			to_chat(mob, "The turf can pass air! :D")
 		else
 			to_chat(mob, "No air passage :x")
@@ -48,8 +48,8 @@
 	if(istype(other_turf, /turf/open/space))
 		return
 
-	//var/t_block = T.c_airblock(other_turf)
-//	var/o_block = other_turf.c_airblock(T)
+	//var/t_block = T.zas_canpass(other_turf)
+//	var/o_block = other_turf.zas_canpass(T)
 	var/t_block
 	ATMOS_CANPASS_TURF(t_block, T, other_turf)
 	var/o_block
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index dd8886ae905..53cacb34388 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -41,7 +41,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	return igniting
 
 /zone/proc/process_fire()
-	var/datum/gas_mixture/burn_gas = air.remove_ratio(SSzas.settings.fire_consumption_rate, fire_tiles.len)
+	var/datum/gas_mixture/burn_gas = air.removeRatio(SSzas.settings.fire_consumption_rate, fire_tiles.len)
 
 	var/firelevel = burn_gas.react(src, fire_tiles, force_burn = 1, no_check = 1)
 
@@ -166,7 +166,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		set_light_range(3)
 
 	for(var/mob/living/L in loc)
-		L.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure())  //Burn the mobs!
+		L.FireBurn(firelevel, air_contents.temperature, air_contents.returnPressure())  //Burn the mobs!
 
 	loc.fire_act(air_contents, air_contents.temperature, air_contents.volume)
 	for(var/atom/A in loc)
@@ -282,7 +282,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 		//get the current thermal energy of the gas mix
 		//this must be taken here to prevent the addition or deletion of energy by a changing heat capacity
-		var/starting_energy = temperature * heat_capacity()
+		var/starting_energy = temperature * getHeatCapacity()
 
 		//determine how far the reaction can progress
 		var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit
@@ -324,22 +324,22 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		var/used_gas_fuel = min(max(0.25, used_fuel*(gas_reaction_progress/total_reaction_progress)), gas_fuel) //remove in proportion to the relative reaction progress
 		var/used_liquid_fuel = min(max(0.25, used_fuel-used_gas_fuel), liquid_fuel)
 
-		//remove_by_flag() and adjust_gas() handle the group_multiplier for us.
-		remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
-		var/datum/gas_mixture/burned_fuel = remove_by_flag(XGM_GAS_FUEL, used_gas_fuel)
+		//removeByFlag() and adjustGas() handle the group_multiplier for us.
+		removeByFlag(XGM_GAS_OXIDIZER, used_oxidizers)
+		var/datum/gas_mixture/burned_fuel = removeByFlag(XGM_GAS_FUEL, used_gas_fuel)
 		for(var/g in burned_fuel.gas)
-			adjust_gas(xgm_gas_data.burn_product[g], burned_fuel.gas[g])
+			adjustGas(xgm_gas_data.burn_product[g], burned_fuel.gas[g])
 
 		if(zone)
 			zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())
 
 		//calculate the energy produced by the reaction and then set the new temperature of the mix
-		temperature = (starting_energy + SSzas.settings.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
-		update_values()
+		temperature = (starting_energy + SSzas.settings.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / getHeatCapacity()
+		updateValues()
 
 		#ifdef FIREDBG
 		log_admin("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
-		log_admin("new temperature = [temperature]; new pressure = [return_pressure()]")
+		log_admin("new temperature = [temperature]; new pressure = [returnPressure()]")
 		#endif
 
 		if (temperature<220)
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 30b0bdd6978..cca229a94c7 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -35,13 +35,13 @@
 		if(!unsim)
 			continue
 
-		block = unsim.c_airblock(src)
+		block = unsim.zas_canpass(src)
 
 		if(block & AIR_BLOCKED)
 			//unsim.dbg(air_blocked, turn(180,d))
 			continue
 
-		var/r_block = c_airblock(unsim)
+		var/r_block = zas_canpass(unsim)
 
 		if(r_block & AIR_BLOCKED)
 			continue
@@ -71,13 +71,13 @@
 		if(!unsim)
 			continue
 
-		block = unsim.c_airblock(src)
+		block = unsim.zas_canpass(src)
 
 		if(block & AIR_BLOCKED)
 			//unsim.dbg(air_blocked, turn(180,d))
 			continue
 
-		var/r_block = c_airblock(unsim)
+		var/r_block = zas_canpass(unsim)
 
 		if(r_block & AIR_BLOCKED)
 			continue
@@ -179,7 +179,7 @@
 		if(!unsim) //edge of map
 			continue
 
-		//var/block = unsim.c_airblock(src)
+		//var/block = unsim.zas_canpass(src)
 		var/block
 		ATMOS_CANPASS_TURF(block, src, unsim)
 		if(block & AIR_BLOCKED)
@@ -191,7 +191,7 @@
 
 			continue
 
-		//var/r_block = c_airblock(unsim)
+		//var/r_block = zas_canpass(unsim)
 		var/r_block
 		ATMOS_CANPASS_TURF(r_block, unsim, src)
 		if(r_block & AIR_BLOCKED)
@@ -328,6 +328,7 @@
 	my_air.merge(giver)
 
 //turf/simulated/assume_gas(gasid, moles, temp = null) ZASTURF
+///Basically adjustGasWithTemp() but a turf proc.
 /turf/proc/assume_gas(gasid, moles, temp = null)
 	if(!simulated)
 		return
@@ -335,9 +336,9 @@
 	var/datum/gas_mixture/my_air = return_air()
 
 	if(isnull(temp))
-		my_air.adjust_gas(gasid, moles)
+		my_air.adjustGas(gasid, moles)
 	else
-		my_air.adjust_gas_temp(gasid, moles, temp)
+		my_air.adjustGasWithTemp(gasid, moles, temp)
 
 	return 1
 
@@ -350,7 +351,7 @@
 		if(initial_gas)
 			GM.gas = initial_gas.Copy()
 		GM.temperature = temperature
-		GM.update_values()
+		GM.updateValues()
 
 	if(zone)
 		if(!zone.invalid)
@@ -371,12 +372,12 @@
 	air.temperature = temperature
 	if(initial_gas)
 		air.gas = initial_gas.Copy()
-	air.update_values()
+	air.updateValues()
 
 //turf/simulated/proc/c_copy_air() ZASTURF
 /turf/proc/c_copy_air()
 	if(!air) air = new/datum/gas_mixture
-	air.copy_from(zone.air)
+	air.copyFrom(zone.air)
 	air.group_multiplier = 1
 
 /*/turf/open/space/c_copy_air()
@@ -390,9 +391,9 @@
 	var/datum/gas_mixture/new_gas = new
 	var/datum/gas_mixture/existing_gas = return_air()
 	if(isnull(initial_temperature))
-		new_gas.adjust_gas(gas_id, amount)
+		new_gas.adjustGas(gas_id, amount)
 	else
-		new_gas.adjust_gas_temp(gas_id, amount, initial_temperature)
+		new_gas.adjustGasWithTemp(gas_id, amount, initial_temperature)
 	existing_gas.merge(new_gas)
 
 /turf/open/space/atmos_spawn_air()
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 66dca038ee0..39641ff513b 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -1,18 +1,18 @@
 /datum/gas_mixture
 	//Associative list of gas moles.
-	//Gases with 0 moles are not tracked and are pruned by update_values()
+	//Gases with 0 moles are not tracked and are pruned by updateValues()
 	var/list/gas = list()
 	//Temperature in Kelvin of this gas mix.
 	var/temperature = 0
 
-	//Sum of all the gas moles in this mix.  Updated by update_values()
+	//Sum of all the gas moles in this mix.  Updated by updateValues()
 	var/total_moles = 0
 	//Volume of this mix.
 	var/volume = CELL_VOLUME
 	//Size of the group this gas_mixture is representing.  1 for singletons.
 	var/group_multiplier = 1
 
-	//List of active tile overlays for this gas_mixture.  Updated by check_tile_graphic()
+	//List of active tile overlays for this gas_mixture.  Updated by checkTileGraphic()
 	var/list/graphic = list()
 	//Cache of gas overlay objects
 	var/list/tile_overlay_cache
@@ -22,16 +22,16 @@
 	temperature = _temperature
 	group_multiplier = _group_multiplier
 
-/datum/gas_mixture/proc/get_gas(gasid)
+/datum/gas_mixture/proc/getGroupGas(gasid)
 	if(!gas.len)
 		return 0 //if the list is empty BYOND treats it as a non-associative list, which runtimes
 	return gas[gasid] * group_multiplier
 
-/datum/gas_mixture/proc/get_total_moles()
+/datum/gas_mixture/proc/getGroupMoles()
 	return total_moles * group_multiplier
 
-//Takes a gas string and the amount of moles to adjust by.  Calls update_values() if update isn't 0.
-/datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1)
+//Takes a gas string and the amount of moles to adjust by.  Calls updateValues() if update isn't 0.
+/datum/gas_mixture/proc/adjustGas(gasid, moles, update = 1)
 	if(moles == 0)
 		return
 
@@ -41,16 +41,16 @@
 		gas[gasid] += moles
 
 	if(update)
-		update_values()
+		updateValues()
 
 
-//Same as adjust_gas(), but takes a temperature which is mixed in with the gas.
-/datum/gas_mixture/proc/adjust_gas_temp(gasid, moles, temp, update = 1)
+//Same as adjustGas(), but takes a temperature which is mixed in with the gas.
+/datum/gas_mixture/proc/adjustGasWithTemp(gasid, moles, temp, update = 1)
 	if(moles == 0)
 		return
 
 	if(moles > 0 && abs(temperature - temp) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		var/self_heat_capacity = heat_capacity()
+		var/self_heat_capacity = getHeatCapacity()
 		var/giver_heat_capacity = xgm_gas_data.specific_heat[gasid] * moles
 		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
 		if(combined_heat_capacity != 0)
@@ -62,27 +62,27 @@
 		gas[gasid] += moles
 
 	if(update)
-		update_values()
+		updateValues()
 
 
-//Variadic version of adjust_gas().  Takes any number of gas and mole pairs and applies them.
-/datum/gas_mixture/proc/adjust_multi()
+//Variadic version of adjustGas().  Takes any number of gas and mole pairs and applies them.
+/datum/gas_mixture/proc/adjustMultipleGases()
 	ASSERT(!(args.len % 2))
 
-	for(var/i = 1; i < args.len; i += 2)
-		adjust_gas(args[i], args[i+1], update = 0)
+	for(var/i in 1 to args.len-1 step 2)
+		adjustGas(args[i], args[i+1], update = 0)
 
-	update_values()
+	updateValues()
 
 
-//Variadic version of adjust_gas_temp().  Takes any number of gas, mole and temperature associations and applies them.
-/datum/gas_mixture/proc/adjust_multi_temp()
+//Variadic version of adjustGasWithTemp().  Takes any number of gas, mole and temperature associations and applies them.
+/datum/gas_mixture/proc/adjustMultipleGasesWithTemp()
 	ASSERT(!(args.len % 3))
 
-	for(var/i = 1; i < args.len; i += 3)
-		adjust_gas_temp(args[i], args[i + 1], args[i + 2], update = 0)
+	for(var/i in 1 to args.len-1 step 3)
+		adjustGasWithTemp(args[i], args[i + 1], args[i + 2], update = 0)
 
-	update_values()
+	updateValues()
 
 
 //Merges all the gas from another mixture into this one.  Respects group_multipliers and adjusts temperature correctly.
@@ -92,8 +92,8 @@
 		return
 
 	if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		var/self_heat_capacity = heat_capacity()
-		var/giver_heat_capacity = giver.heat_capacity()
+		var/self_heat_capacity = getHeatCapacity()
+		var/giver_heat_capacity = giver.getHeatCapacity()
 		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
 		if(combined_heat_capacity != 0)
 			temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity
@@ -105,12 +105,12 @@
 		for(var/g in giver.gas)
 			gas[g] += giver.gas[g]
 
-	update_values()
+	updateValues()
 
 // Used to equalize the mixture between two zones before sleeping an edge.
 /datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer)
-	var/our_heatcap = heat_capacity()
-	var/share_heatcap = sharer.heat_capacity()
+	var/our_heatcap = getHeatCapacity()
+	var/share_heatcap = sharer.getHeatCapacity()
 
 	// Special exception: there isn't enough air around to be worth processing this edge next tick, zap both to zero.
 	if(total_moles + sharer.total_moles <= MINIMUM_AIR_TO_SUSPEND)
@@ -127,14 +127,14 @@
 		temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap)
 	sharer.temperature = temperature
 
-	update_values()
-	sharer.update_values()
+	updateValues()
+	sharer.updateValues()
 
 	return 1
 
 
 //Returns the heat capacity of the gas mix based on the specific heat of the gases.
-/datum/gas_mixture/proc/heat_capacity()
+/datum/gas_mixture/proc/getHeatCapacity()
 	. = 0
 	for(var/g in gas)
 		. += xgm_gas_data.specific_heat[g] * gas[g]
@@ -142,12 +142,12 @@
 
 
 //Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB.
-/datum/gas_mixture/proc/add_thermal_energy(thermal_energy)
+/datum/gas_mixture/proc/addThermalEnergy(thermal_energy)
 
 	if (total_moles == 0)
 		return 0
 
-	var/heat_capacity = heat_capacity()
+	var/heat_capacity = getHeatCapacity()
 	if (thermal_energy < 0)
 		if (temperature < TCMB)
 			return 0
@@ -157,8 +157,8 @@
 	return thermal_energy
 
 //Returns the thermal energy change required to get to a new temperature
-/datum/gas_mixture/proc/get_thermal_energy_change(new_temperature)
-	return heat_capacity()*(max(new_temperature, 0) - temperature)
+/datum/gas_mixture/proc/getThermalEnergyChange(new_temperature)
+	return getHeatCapacity()*(max(new_temperature, 0) - temperature)
 
 
 //Technically vacuum doesn't have a specific entropy. Just use a really big number (infinity would be ideal) here so that it's easy to add gas to vacuum and hard to take gas out.
@@ -166,13 +166,13 @@
 
 
 //Returns the ideal gas specific entropy of the whole mix. This is the entropy per mole of /mixed/ gas.
-/datum/gas_mixture/proc/specific_entropy()
+/datum/gas_mixture/proc/specificGroupEntropy()
 	if (!gas.len || total_moles == 0)
 		return SPECIFIC_ENTROPY_VACUUM
 
 	. = 0
 	for(var/g in gas)
-		. += gas[g] * specific_entropy_gas(g)
+		. += gas[g] * specificEntropyGas(g)
 	. /= total_moles
 
 
@@ -187,7 +187,7 @@
 	So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way
 	which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures.
 */
-/datum/gas_mixture/proc/specific_entropy_gas(gasid)
+/datum/gas_mixture/proc/specificEntropyGas(gasid)
 	if (!(gasid in gas) || gas[gasid] == 0)
 		return SPECIFIC_ENTROPY_VACUUM	//that gas isn't here
 
@@ -203,7 +203,7 @@
 
 
 //Updates the total_moles count and trims any empty gases.
-/datum/gas_mixture/proc/update_values()
+/datum/gas_mixture/proc/updateValues()
 	total_moles = 0
 	for(var/g in gas)
 		if(gas[g] <= 0)
@@ -212,8 +212,8 @@
 			total_moles += gas[g]
 
 
-//Returns the pressure of the gas mix.  Only accurate if there have been no gas modifications since update_values() has been called.
-/datum/gas_mixture/proc/return_pressure()
+//Returns the pressure of the gas mix.  Only accurate if there have been no gas modifications since updateValues() has been called.
+/datum/gas_mixture/proc/returnPressure()
 	if(volume)
 		return total_moles * R_IDEAL_GAS_EQUATION * temperature / volume
 	return 0
@@ -234,14 +234,14 @@
 		gas[g] -= removed.gas[g] / group_multiplier
 
 	removed.temperature = temperature
-	update_values()
-	removed.update_values()
+	updateValues()
+	removed.updateValues()
 
 	return removed
 
 
 //Removes a ratio of gas from the mixture and returns a gas_mixture containing the removed air.
-/datum/gas_mixture/proc/remove_ratio(ratio, out_group_multiplier = 1)
+/datum/gas_mixture/proc/removeRatio(ratio, out_group_multiplier = 1)
 	if(ratio <= 0)
 		return null
 	out_group_multiplier = clamp(out_group_multiplier, 1, group_multiplier)
@@ -257,19 +257,19 @@
 
 	removed.temperature = temperature
 	removed.volume = volume * group_multiplier / out_group_multiplier
-	update_values()
-	removed.update_values()
+	updateValues()
+	removed.updateValues()
 
 	return removed
 
 //Removes a volume of gas from the mixture and returns a gas_mixture containing the removed air with the given volume
-/datum/gas_mixture/proc/remove_volume(removed_volume)
-	var/datum/gas_mixture/removed = remove_ratio(removed_volume/(volume*group_multiplier), 1)
+/datum/gas_mixture/proc/removeVolume(removed_volume)
+	var/datum/gas_mixture/removed = removeRatio(removed_volume/(volume*group_multiplier), 1)
 	removed.volume = removed_volume
 	return removed
 
 //Removes moles from the gas mixture, limited by a given flag.  Returns a gax_mixture containing the removed air.
-/datum/gas_mixture/proc/remove_by_flag(flag, amount)
+/datum/gas_mixture/proc/removeByFlag(flag, amount)
 	var/datum/gas_mixture/removed = new
 
 	if(!flag || amount <= 0)
@@ -286,24 +286,24 @@
 			gas[g] -= removed.gas[g] / group_multiplier
 
 	removed.temperature = temperature
-	update_values()
-	removed.update_values()
+	updateValues()
+	removed.updateValues()
 
 	return removed
 
 //Returns the amount of gas that has the given flag, in moles
-/datum/gas_mixture/proc/get_by_flag(flag)
+/datum/gas_mixture/proc/getByFlag(flag)
 	. = 0
 	for(var/g in gas)
 		if(xgm_gas_data.flags[g] & flag)
 			. += gas[g]
 
 //Copies gas and temperature from another gas_mixture.
-/datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample)
+/datum/gas_mixture/proc/copyFrom(const/datum/gas_mixture/sample)
 	gas = sample.gas.Copy()
 	temperature = sample.temperature
 
-	update_values()
+	updateValues()
 	return 1
 
 
@@ -326,7 +326,7 @@
 			return 0
 		marked[g] = 1
 
-	if(abs(return_pressure() - sample.return_pressure()) > MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND)
+	if(abs(returnPressure() - sample.returnPressure()) > MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND)
 		return 0
 
 	for(var/g in sample.gas)
@@ -346,14 +346,14 @@
 
 //Rechecks the gas_mixture and adjusts the graphic list if needed.
 //Two lists can be passed by reference if you need know specifically which graphics were added and removed.
-/datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null)
+/datum/gas_mixture/proc/checkTileGraphic(list/graphic_add = null, list/graphic_remove = null)
 	for(var/obj/effect/gas_overlay/O in graphic)
 		if(gas[O.gas_id] <= xgm_gas_data.overlay_limit[O.gas_id])
 			LAZYADD(graphic_remove, O)
 	for(var/g in xgm_gas_data.overlay_limit)
 		//Overlay isn't applied for this gas, check if it's valid and needs to be added.
 		if(gas[g] > xgm_gas_data.overlay_limit[g])
-			var/tile_overlay = get_tile_overlay(g)
+			var/tile_overlay = getTileOverlay(g)
 			if(!(tile_overlay in graphic))
 				LAZYADD(graphic_add, tile_overlay)
 	. = 0
@@ -365,14 +365,14 @@
 		graphic -= graphic_remove
 		. = 1
 	if(graphic.len)
-		var/pressure_mod = clamp(return_pressure() / ONE_ATMOSPHERE, 0, 2)
+		var/pressure_mod = clamp(returnPressure() / ONE_ATMOSPHERE, 0, 2)
 		for(var/obj/effect/gas_overlay/O in graphic)
 			var/concentration_mod = clamp(gas[O.gas_id] / total_moles, 0.1, 1)
 			var/new_alpha = min(240, round(pressure_mod * concentration_mod * 180, 5))
 			if(new_alpha != O.alpha)
 				O.update_alpha_animation(new_alpha)
 
-/datum/gas_mixture/proc/get_tile_overlay(gas_id)
+/datum/gas_mixture/proc/getTileOverlay(gas_id)
 	if(!LAZYACCESS(tile_overlay_cache, gas_id))
 		LAZYSET(tile_overlay_cache, gas_id, new/obj/effect/gas_overlay(null, gas_id))
 	return tile_overlay_cache[gas_id]
@@ -382,7 +382,7 @@
 	for(var/g in right_side.gas)
 		gas[g] += right_side.gas[g]
 
-	update_values()
+	updateValues()
 	return 1
 
 
@@ -391,7 +391,7 @@
 	for(var/g in right_side.gas)
 		gas[g] -= right_side.gas[g]
 
-	update_values()
+	updateValues()
 	return 1
 
 
@@ -400,7 +400,7 @@
 	for(var/g in gas)
 		gas[g] *= factor
 
-	update_values()
+	updateValues()
 	return 1
 
 
@@ -409,12 +409,12 @@
 	for(var/g in gas)
 		gas[g] /= factor
 
-	update_values()
+	updateValues()
 	return 1
 
 
 //Shares gas with another gas_mixture based on the amount of connecting tiles and a fixed lookup table.
-/datum/gas_mixture/proc/share_ratio(datum/gas_mixture/other, connecting_tiles, share_size = null, one_way = 0)
+/datum/gas_mixture/proc/shareRatio(datum/gas_mixture/other, connecting_tiles, share_size = null, one_way = 0)
 	var/static/list/sharing_lookup_table = list(0.30, 0.40, 0.48, 0.54, 0.60, 0.66)
 	//Shares a specific ratio of gas between mixtures using simple weighted averages.
 	var/ratio = sharing_lookup_table[6]
@@ -422,8 +422,8 @@
 	var/size = max(1, group_multiplier)
 	if(isnull(share_size)) share_size = max(1, other.group_multiplier)
 
-	var/full_heat_capacity = heat_capacity()
-	var/s_full_heat_capacity = other.heat_capacity()
+	var/full_heat_capacity = getHeatCapacity()
+	var/s_full_heat_capacity = other.getHeatCapacity()
 
 	var/list/avg_gas = list()
 
@@ -454,54 +454,55 @@
 	if(!one_way)
 		other.temperature = max(0, (other.temperature - temp_avg) * (1-ratio) + temp_avg)
 
-	update_values()
-	other.update_values()
+	updateValues()
+	other.updateValues()
 
 	return compare(other)
 
 
 //A wrapper around share_ratio for spacing gas at the same rate as if it were going into a large airless room.
-/datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air)
-	return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
+/datum/gas_mixture/proc/shareSpace(datum/gas_mixture/unsim_air)
+	return shareRatio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
 
-/datum/gas_mixture/proc/get_mass()
+/datum/gas_mixture/proc/getMass()
 	for(var/g in gas)
 		. += gas[g] * xgm_gas_data.molar_mass[g] * group_multiplier
 
-/datum/gas_mixture/proc/specific_mass()
-	var/M = get_total_moles()
+/datum/gas_mixture/proc/specificGroupMass()
+	var/M = getGroupMoles()
 	if(M)
-		return get_mass()/M
+		return getMass()/M
 
 ////LINDA COMPATABILITY PROCS////
-/datum/gas_mixture/proc/return_volume()
+/datum/gas_mixture/proc/getVolume()
 	return max(0, volume)
 
-/datum/gas_mixture/proc/return_temperature()
+/datum/gas_mixture/proc/getTemperature()
 	return temperature
 
-/datum/gas_mixture/proc/total_moles()
-	update_values()
+/datum/gas_mixture/proc/getMoles()
+	updateValues()
 	return total_moles
 
-/datum/gas_mixture/proc/has_gas(gas_id, required_amount)
-	var/amt = get_gas(gas_id)
+/datum/gas_mixture/proc/hasGas(gas_id, required_amount)
+	var/amt = getGroupGas(gas_id)
 	return (amt >= required_amount)
 
-/datum/gas_mixture/proc/get_gases()
+///Returns the gas list with an update.
+/datum/gas_mixture/proc/getGases()
 	RETURN_TYPE(/list)
-	update_values()
+	updateValues()
 	return gas
 
-/datum/gas_mixture/proc/return_visuals()
-	update_values()
-	check_tile_graphic()
+/datum/gas_mixture/proc/returnVisuals()
+	updateValues()
+	checkTileGraphic()
 	return graphic
 
 /datum/gas_mixture/proc/copy()
 	RETURN_TYPE(/datum/gas_mixture)
 	var/datum/gas_mixture/new_gas = new
-	update_values()
+	updateValues()
 	new_gas.gas = src.gas
 	new_gas.temperature = src.temperature
 	new_gas.total_moles = src.total_moles
@@ -509,10 +510,10 @@
 
 /turf/open/proc/copy_air_with_tile(turf/open/target_turf)
 	if(istype(target_turf))
-		return_air().copy_from(target_turf.return_air())
+		return_air().copyFrom(target_turf.return_air())
 
 /datum/gas_mixture/proc/leak_to_enviroment(datum/gas_mixture/environment)
-	pump_gas_passive(src, environment, calculate_transfer_moles(src, environment, src.return_pressure() - environment.return_pressure()))
+	pump_gas_passive(src, environment, calculate_transfer_moles(src, environment, src.returnPressure() - environment.returnPressure()))
 
 /**
  * Takes the amount of the gas you want to PP as an argument
@@ -520,15 +521,15 @@
  * eg:
  * Plas_PP = get_partial_pressure(gas_mixture.plasma)
  * O2_PP = get_partial_pressure(gas_mixture.oxygen)
- * get_breath_partial_pressure(gas_pp) --> gas_pp/total_moles()*breath_pp = pp
- * get_true_breath_pressure(pp) --> gas_pp = pp/breath_pp*total_moles()
+ * getBreathPartialPressure(gas_pp) --> gas_pp/getMoles()*breath_pp = pp
+ * getTrueBreathPressure(pp) --> gas_pp = pp/breath_pp*getMoles()
  *
  * 10/20*5 = 2.5
  * 10 = 2.5/5*20
  */
 
-/datum/gas_mixture/proc/get_breath_partial_pressure(gas_pressure)
+/datum/gas_mixture/proc/getBreathPartialPressure(gas_pressure)
 	return (gas_pressure * R_IDEAL_GAS_EQUATION * temperature) / BREATH_VOLUME
 ///inverse
-/datum/gas_mixture/proc/get_true_breath_pressure(partial_pressure)
+/datum/gas_mixture/proc/getTrueBreathPressure(partial_pressure)
 	return (partial_pressure * BREATH_VOLUME) / (R_IDEAL_GAS_EQUATION * temperature)
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
index f1fb6daff8b..25238f32b4b 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
@@ -2,11 +2,11 @@
 	temperature = TCMB
 	var/initial_temperature = TCMB
 
-/datum/gas_mixture/immutable/update_values()
+/datum/gas_mixture/immutable/updateValues()
 	temperature = initial_temperature
 	return ..()
 
-/datum/gas_mixture/immutable/adjust_gas(gasid, moles, update = 1)
+/datum/gas_mixture/immutable/adjustGas(gasid, moles, update = 1)
 	return
 
 /datum/gas_mixture/immutable/remove()
@@ -24,34 +24,34 @@
 /datum/gas_mixture/immutable/multiply()
 	return TRUE
 
-/datum/gas_mixture/immutable/adjust_gas_temp(gasid, moles, temp, update = 1)
+/datum/gas_mixture/immutable/adjustGasWithTemp(gasid, moles, temp, update = 1)
 	return
 
-/datum/gas_mixture/immutable/adjust_multi()
+/datum/gas_mixture/immutable/adjustMultipleGases()
 	return
 
-/datum/gas_mixture/immutable/adjust_multi_temp()
+/datum/gas_mixture/immutable/adjustMultipleGasesWithTemp()
 	return
 
 /datum/gas_mixture/immutable/merge()
 	return
 
-/datum/gas_mixture/immutable/copy_from()
+/datum/gas_mixture/immutable/copyFrom()
 	return
 
-/datum/gas_mixture/immutable/heat_capacity()
+/datum/gas_mixture/immutable/getHeatCapacity()
 	return HEAT_CAPACITY_VACUUM
 
-/datum/gas_mixture/immutable/remove_ratio()
+/datum/gas_mixture/immutable/removeRatio()
 	return new type
 
-/datum/gas_mixture/immutable/remove_volume()
+/datum/gas_mixture/immutable/removeVolume()
 	return new type
 
-/datum/gas_mixture/immutable/remove_by_flag()
+/datum/gas_mixture/immutable/removeByFlag()
 	return new type
 
-/datum/gas_mixture/immutable/share_ratio(datum/gas_mixture/other, connecting_tiles, share_size, one_way)
+/datum/gas_mixture/immutable/shareRatio(datum/gas_mixture/other, connecting_tiles, share_size, one_way)
 	. = ..()
 	temperature = initial_temperature
 
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index c1789597927..6b3a544fdea 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -160,7 +160,7 @@ Class Procs:
 			T.create_fire(SSzas.settings.fire_firelevel_multiplier)
 
 	// Update gas overlays.
-	if(air.check_tile_graphic(graphic_add, graphic_remove))
+	if(air.checkTileGraphic(graphic_add, graphic_remove))
 		//for(var/turf/simulated/T in contents)
 		for(var/turf/open/T in contents)
 			if(T.simulated)
@@ -185,7 +185,7 @@ Class Procs:
 				var/condense_amt = min(air.gas[g], rand(3,5))
 				if(condense_amt < 1)
 					break
-				air.adjust_gas(g, -condense_amt)
+				air.adjustGas(g, -condense_amt)
 				flooding.add_fluid(condense_amt, product)
 	*/
 
@@ -206,7 +206,7 @@ Class Procs:
 	to_chat(M, name)
 	for(var/g in air.gas)
 		to_chat(M, "[xgm_gas_data.name[g]]: [air.gas[g]]")
-	to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
+	to_chat(M, "P: [air.returnPressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
 	to_chat(M, "O2 per N2: [(air.gas[GAS_NITROGEN] ? air.gas[GAS_OXYGEN]/air.gas[GAS_NITROGEN] : "N/A")] Moles: [air.total_moles]")
 	to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])")
 	to_chat(M, "Edges: [edges.len]")
@@ -219,7 +219,7 @@ Class Procs:
 		else
 			space_edges++
 			space_coefficient += E.coefficient
-			to_chat(M, "[E:air:return_pressure()]kPa")
+			to_chat(M, "[E:air:returnPressure()]kPa")
 
 	to_chat(M, "Zone Edges: [zone_edges]")
 	to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)\n")
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 95d9efbd07c..4ff8a06286e 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -61,8 +61,8 @@
 		A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
 
 		if (A.debug)
-			A.visible_message("[A]: source entropy: [round(source.specific_entropy(), 0.01)] J/Kmol --> sink entropy: [round(sink.specific_entropy(), 0.01)] J/Kmol")
-			A.visible_message("[A]: specific entropy change = [round(sink.specific_entropy() - source.specific_entropy(), 0.01)] J/Kmol")
+			A.visible_message("[A]: source entropy: [round(source.specificGroupEntropy(), 0.01)] J/Kmol --> sink entropy: [round(sink.specificGroupEntropy(), 0.01)] J/Kmol")
+			A.visible_message("[A]: specific entropy change = [round(sink.specificGroupEntropy() - source.specificGroupEntropy(), 0.01)] J/Kmol")
 			A.visible_message("[A]: specific power = [round(specific_power, 0.1)] W/mol")
 			A.visible_message("[A]: moles transferred = [transfer_moles] mol")
 
@@ -178,14 +178,14 @@
 		transfer_moles = min(transfer_moles, total_transfer_moles*(source.gas[g]/total_filterable_moles))
 
 		//use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop.
-		source.adjust_gas(g, -transfer_moles, update=0)
-		sink.adjust_gas_temp(g, transfer_moles, source.temperature, update=0)
+		source.adjustGas(g, -transfer_moles, update=0)
+		sink.adjustGasWithTemp(g, transfer_moles, source.temperature, update=0)
 
 		power_draw += specific_power_gas[g]*transfer_moles
 
 	//Remix the resulting gases
-	sink.update_values()
-	source.update_values()
+	sink.updateValues()
+	source.updateValues()
 
 	return power_draw
 
@@ -205,7 +205,7 @@
 	var/total_filterable_moles = 0		//the total amount of filterable gas
 	var/total_unfilterable_moles = 0	//the total amount of non-filterable gas
 	var/list/specific_power_gas = list()	//the power required to remove one mole of pure gas, for each gas type
-	for (var/g in source.get_gases())
+	for (var/g in source.getGases())
 		if (source.gas[g] < MINIMUM_MOLES_TO_FILTER)
 			continue
 
@@ -250,21 +250,21 @@
 
 		if (g in filtering)
 			//use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop.
-			sink_filtered.adjust_gas_temp(g, removed.gas[g], removed.temperature, update=0)
-			removed.adjust_gas(g, -removed.gas[g], update=0)
+			sink_filtered.adjustGasWithTemp(g, removed.gas[g], removed.temperature, update=0)
+			removed.adjustGas(g, -removed.gas[g], update=0)
 			filtered_power_used += power_used
 		else
 			unfiltered_power_used += power_used
 
-	sink_filtered.update_values()
-	removed.update_values()
+	sink_filtered.updateValues()
+	removed.updateValues()
 
 	sink_clean.merge(removed)
 
 	return filtered_power_used + unfiltered_power_used
 
 //For omni devices. Instead filtering is an associative list mapping gasids to gas mixtures.
-//I don't like the copypasta, but I decided to keep both versions of gas filtering as filter_gas is slightly faster (doesn't create as many temporary lists, doesn't call update_values() as much)
+//I don't like the copypasta, but I decided to keep both versions of gas filtering as filter_gas is slightly faster (doesn't create as many temporary lists, doesn't call updateValues() as much)
 //filter_gas can be removed and replaced with this proc if need be.
 /proc/filter_gas_multi(obj/machinery/M, list/filtering, datum/gas_mixture/source, datum/gas_mixture/sink_clean, total_transfer_moles = null, available_power = null)
 	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
@@ -326,14 +326,14 @@
 		if (g in filtering)
 			var/datum/gas_mixture/sink_filtered = filtering[g]
 			//use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop.
-			sink_filtered.adjust_gas_temp(g, removed.gas[g], removed.temperature, update=1)
-			removed.adjust_gas(g, -removed.gas[g], update=0)
+			sink_filtered.adjustGasWithTemp(g, removed.gas[g], removed.temperature, update=1)
+			removed.adjustGas(g, -removed.gas[g], update=0)
 			if (power_used)
 				filtered_power_used[sink_filtered] = power_used
 		else
 			unfiltered_power_used += power_used
 
-	removed.update_values()
+	removed.updateValues()
 
 	var/power_draw = unfiltered_power_used
 	for (var/datum/gas_mixture/sink_filtered in filtered_power_used)
@@ -422,7 +422,7 @@
 /proc/calculate_specific_power(datum/gas_mixture/source, datum/gas_mixture/sink)
 	//Calculate the amount of energy required
 	var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature
-	var/specific_entropy = sink.specific_entropy() - source.specific_entropy() //sink is gaining moles, source is loosing
+	var/specific_entropy = sink.specificGroupEntropy() - source.specificGroupEntropy() //sink is gaining moles, source is loosing
 	var/specific_power = 0	// W/mol
 
 	//If specific_entropy is < 0 then power is required to move gas
@@ -435,7 +435,7 @@
 /proc/calculate_specific_power_gas(gasid, datum/gas_mixture/source, datum/gas_mixture/sink)
 	//Calculate the amount of energy required
 	var/air_temperature = (sink.temperature > 0)? sink.temperature : source.temperature
-	var/specific_entropy = sink.specific_entropy_gas(gasid) - source.specific_entropy_gas(gasid) //sink is gaining moles, source is loosing
+	var/specific_entropy = sink.specificEntropyGas(gasid) - source.specificEntropyGas(gasid) //sink is gaining moles, source is loosing
 	var/specific_power = 0	// W/mol
 
 	//If specific_entropy is < 0 then power is required to move gas
@@ -457,8 +457,8 @@
 	if(sink.total_moles > 0 && sink.temperature > 0)
 		//estimate the final temperature of the sink after transfer
 		var/estimate_moles = pressure_delta*output_volume/(sink.temperature * R_IDEAL_GAS_EQUATION)
-		var/sink_heat_capacity = sink.heat_capacity()
-		var/transfer_heat_capacity = source.heat_capacity()*estimate_moles/source_total_moles
+		var/sink_heat_capacity = sink.getHeatCapacity()
+		var/transfer_heat_capacity = source.getHeatCapacity()*estimate_moles/source_total_moles
 		air_temperature = (sink.temperature*sink_heat_capacity  + source.temperature*transfer_heat_capacity) / (sink_heat_capacity + transfer_heat_capacity)
 
 	//get the number of moles that would have to be transfered to bring sink to the target pressure
@@ -472,8 +472,8 @@
 	var/source_volume = source.volume * source.group_multiplier
 	var/sink_volume = sink.volume * sink.group_multiplier
 
-	var/source_pressure = source.return_pressure()
-	var/sink_pressure = sink.return_pressure()
+	var/source_pressure = source.returnPressure()
+	var/sink_pressure = sink.returnPressure()
 
 	return (source_pressure - sink_pressure)/(R_IDEAL_GAS_EQUATION * (source.temperature/source_volume + sink.temperature/sink_volume))
 
@@ -492,7 +492,7 @@
 		status.Add("Temperature too [atmosphere.temperature > (T0C + 50) ? "high" : "low"].")
 
 	// Pressure check
-	var/pressure = atmosphere.return_pressure()
+	var/pressure = atmosphere.returnPressure()
 	if((pressure > 120) || (pressure < 80))
 		status.Add("Pressure too [pressure > 120 ? "high" : "low"].")
 
diff --git a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
index 1fef439705e..f9d1edb23ce 100644
--- a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
+++ b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
@@ -96,7 +96,7 @@
 	for(var/check_dir in GLOB.cardinals)
 		var/turf/T = get_step(src, check_dir)
 		var/datum/gas_mixture/env = T.return_air()
-		var/pressure = env.return_pressure()
+		var/pressure = env.returnPressure()
 		min_pressure = min(min_pressure, pressure)
 		max_pressure = max(max_pressure, pressure)
 		max_local_temp = max(max_local_temp, env.temperature)
diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm
index bdd7ebe1601..2b8e4cd9307 100644
--- a/code/modules/atmospherics/environmental/LINDA_fire.dm
+++ b/code/modules/atmospherics/environmental/LINDA_fire.dm
@@ -138,7 +138,7 @@
 		reference = location.air // Our color and volume will depend on the turf's gasmix
 	//Active mode
 	else
-		var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume)
+		var/datum/gas_mixture/affected = location.air.removeRatio(volume/location.air.volume)
 		if(affected) //in case volume is 0
 			reference = affected // Our color and volume will depend on this small sparked gasmix
 			affected.temperature = temperature
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
index 0225080ca60..e8e572644a8 100644
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
@@ -92,11 +92,11 @@
 
 /turf/open/proc/copy_air_with_tile(turf/open/target_turf)
 	if(istype(target_turf))
-		air.copy_from(target_turf.air)
+		air.copyFrom(target_turf.air)
 
 /turf/open/proc/copy_air(datum/gas_mixture/copy)
 	if(copy)
-		air.copy_from(copy)
+		air.copyFrom(copy)
 
 /turf/return_air()
 	RETURN_TYPE(/datum/gas_mixture)
@@ -328,7 +328,7 @@
 			// shares 4/5 of our difference in moles with the atmosphere
 			our_air.share(planetary_mix, 0.8, 0.8)
 			// temperature share with the atmosphere with an inflated heat capacity to simulate faster sharing with a large atmosphere
-			our_air.temperature_share(planetary_mix, OPEN_HEAT_TRANSFER_COEFFICIENT, planetary_mix.temperature_archived, planetary_mix.heat_capacity() * 5)
+			our_air.temperature_share(planetary_mix, OPEN_HEAT_TRANSFER_COEFFICIENT, planetary_mix.temperature_archived, planetary_mix.getHeatCapacity() * 5)
 			planetary_mix.garbage_collect()
 			PLANET_SHARE_CHECK
 
@@ -462,12 +462,12 @@
 		var/datum/gas_mixture/turf/mix = group_member.air
 		if (roundstart && istype(group_member.air, /datum/gas_mixture/immutable))
 			imumutable_in_group = TRUE
-			shared_mix.copy_from(group_member.air) //This had better be immutable young man
+			shared_mix.copyFrom(group_member.air) //This had better be immutable young man
 			shared_gases = shared_mix.gases //update the cache
 			break
 		//"borrowing" this code from merge(), I need to play with the temp portion. Lets expand it out
 		//temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
-		var/capacity = mix.heat_capacity()
+		var/capacity = mix.getHeatCapacity()
 		energy += mix.temperature * capacity
 		heat_cap += capacity
 
@@ -484,9 +484,9 @@
 
 	for(var/turf/open/group_member as anything in turf_list)
 		if(group_member.planetary_atmos) //We do this as a hack to try and minimize unneeded excited group spread over planetary turfs
-			group_member.air.copy_from(SSair.planetary[group_member.initial_gas]) //Comes with a cost of "slower" drains, but it's worth it
+			group_member.air.copyFrom(SSair.planetary[group_member.initial_gas]) //Comes with a cost of "slower" drains, but it's worth it
 		else
-			group_member.air.copy_from(shared_mix) //Otherwise just set the mix to a copy of our equalized mix
+			group_member.air.copyFrom(shared_mix) //Otherwise just set the mix to a copy of our equalized mix
 		group_member.update_visuals()
 		if(poke_turfs) //Because we only activate all these once every breakdown, in event of lag due to this code and slow space + vent things, increase the wait time for breakdowns
 			SSair.add_to_active(group_member)
@@ -633,7 +633,7 @@ Then we space some of our heat, and think about if we should stop conducting.
 /turf/open/consider_superconductivity(starting)
 	if(air.temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION))
 		return FALSE
-	if(air.heat_capacity() < M_CELL_WITH_RATIO) // Was: MOLES_CELLSTANDARD*0.1*0.05 Since there are no variables here we can make this a constant.
+	if(air.getHeatCapacity() < M_CELL_WITH_RATIO) // Was: MOLES_CELLSTANDARD*0.1*0.05 Since there are no variables here we can make this a constant.
 		return FALSE
 	return ..()
 
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 7e8146e6a88..4db5c955299 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -75,7 +75,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 //PV = nRT
 
 ///joules per kelvin
-/datum/gas_mixture/proc/heat_capacity(data = MOLES)
+/datum/gas_mixture/proc/getHeatCapacity(data = MOLES)
 	var/list/cached_gases = gases
 	. = 0
 	for(var/id in cached_gases)
@@ -83,7 +83,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 		. += gas_data[data] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT]
 
 /// Same as above except vacuums return HEAT_CAPACITY_VACUUM
-/datum/gas_mixture/turf/heat_capacity(data = MOLES)
+/datum/gas_mixture/turf/getHeatCapacity(data = MOLES)
 	var/list/cached_gases = gases
 	. = 0
 	for(var/id in cached_gases)
@@ -93,21 +93,21 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 		. += HEAT_CAPACITY_VACUUM //we want vacuums in turfs to have the same heat capacity as space
 
 /// Calculate moles
-/datum/gas_mixture/proc/total_moles()
+/datum/gas_mixture/proc/getMoles()
 	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
-/datum/gas_mixture/proc/has_gas(gas_id, amount=0)
+/datum/gas_mixture/proc/hasGas(gas_id, amount=0)
 	ASSERT_GAS(gas_id, src)
 	var/is_there_gas = amount < gases[gas_id][MOLES]
 	garbage_collect()
 	return is_there_gas
 
 /// Calculate pressure in kilopascals
-/datum/gas_mixture/proc/return_pressure()
+/datum/gas_mixture/proc/returnPressure()
 	if(volume) // to prevent division by zero
 		var/cached_gases = gases
 		TOTAL_MOLES(cached_gases, .)
@@ -116,15 +116,15 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 	return 0
 
 /// Calculate temperature in kelvins
-/datum/gas_mixture/proc/return_temperature()
+/datum/gas_mixture/proc/getTemperature()
 	return temperature
 
 /// Calculate volume in liters
-/datum/gas_mixture/proc/return_volume()
+/datum/gas_mixture/proc/getVolume()
 	return max(0, volume)
 
 /// Gets the gas visuals for everything in this mixture
-/datum/gas_mixture/proc/return_visuals()
+/datum/gas_mixture/proc/returnVisuals()
 	var/list/output
 	GAS_OVERLAYS(gases, output)
 	return output
@@ -150,8 +150,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 
 	//heat transfer
 	if(abs(temperature - giver.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		var/self_heat_capacity = heat_capacity()
-		var/giver_heat_capacity = giver.heat_capacity()
+		var/self_heat_capacity = getHeatCapacity()
+		var/giver_heat_capacity = giver.getHeatCapacity()
 		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
 		if(combined_heat_capacity)
 			temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
@@ -191,7 +191,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 
 ///Proportionally removes amount of gas from the gas_mixture.
 ///Returns: gas_mixture with the gases removed
-/datum/gas_mixture/proc/remove_ratio(ratio)
+/datum/gas_mixture/proc/removeRatio(ratio)
 	if(ratio <= 0)
 		var/datum/gas_mixture/removed = new(volume)
 		return removed
@@ -251,10 +251,10 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 //Returns: bool indicating whether gases moved between the two mixes
 /datum/gas_mixture/proc/equalize(datum/gas_mixture/other)
 	. = FALSE
-	if(abs(return_temperature() - other.return_temperature()) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
+	if(abs(getTemperature() - other.getTemperature()) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
 		. = TRUE
-		var/self_heat_cap = heat_capacity()
-		var/other_heat_cap = other.heat_capacity()
+		var/self_heat_cap = getHeatCapacity()
+		var/other_heat_cap = other.getHeatCapacity()
 		var/new_temp = (temperature * self_heat_cap + other.temperature * other_heat_cap) / (self_heat_cap + other_heat_cap)
 		temperature = new_temp
 		other.temperature = new_temp
@@ -290,7 +290,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 
 ///Copies variables from sample, moles multiplicated by partial
 ///Returns: 1 if we are mutable, 0 otherwise
-/datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample, partial = 1)
+/datum/gas_mixture/proc/copyFrom(datum/gas_mixture/sample, partial = 1)
 	var/list/cached_gases = gases //accessing datum vars is slower than proc vars
 	var/list/sample_gases = sample.gases
 
@@ -355,8 +355,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 	var/old_self_heat_capacity = 0
 	var/old_sharer_heat_capacity = 0
 	if(abs_temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		old_self_heat_capacity = heat_capacity()
-		old_sharer_heat_capacity = sharer.heat_capacity()
+		old_self_heat_capacity = getHeatCapacity()
+		old_sharer_heat_capacity = sharer.getHeatCapacity()
 
 	var/heat_capacity_self_to_sharer = 0 //heat capacity of the moles transferred from us to the sharer
 	var/heat_capacity_sharer_to_self = 0 //heat capacity of the moles transferred from the sharer to us
@@ -439,8 +439,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 		sharer_temperature = sharer.temperature_archived
 	var/temperature_delta = temperature_archived - sharer_temperature
 	if(abs(temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		var/self_heat_capacity = heat_capacity(ARCHIVE)
-		sharer_heat_capacity = sharer_heat_capacity || sharer.heat_capacity(ARCHIVE)
+		var/self_heat_capacity = getHeatCapacity(ARCHIVE)
+		sharer_heat_capacity = sharer_heat_capacity || sharer.getHeatCapacity(ARCHIVE)
 
 		if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
 			var/heat = conduction_coefficient*temperature_delta* \
@@ -545,17 +545,17 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
  * eg:
  * Plas_PP = get_partial_pressure(gas_mixture.plasma)
  * O2_PP = get_partial_pressure(gas_mixture.oxygen)
- * get_breath_partial_pressure(gas_pp) --> gas_pp/total_moles()*breath_pp = pp
- * get_true_breath_pressure(pp) --> gas_pp = pp/breath_pp*total_moles()
+ * getBreathPartialPressure(gas_pp) --> gas_pp/getMoles()*breath_pp = pp
+ * getTrueBreathPressure(pp) --> gas_pp = pp/breath_pp*getMoles()
  *
  * 10/20*5 = 2.5
  * 10 = 2.5/5*20
  */
 
-/datum/gas_mixture/proc/get_breath_partial_pressure(gas_pressure)
+/datum/gas_mixture/proc/getBreathPartialPressure(gas_pressure)
 	return (gas_pressure * R_IDEAL_GAS_EQUATION * temperature) / BREATH_VOLUME
 ///inverse
-/datum/gas_mixture/proc/get_true_breath_pressure(partial_pressure)
+/datum/gas_mixture/proc/getTrueBreathPressure(partial_pressure)
 	return (partial_pressure * BREATH_VOLUME) / (R_IDEAL_GAS_EQUATION * temperature)
 
 /**
@@ -566,9 +566,9 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
  * - output_air (gasmix).
  */
 /datum/gas_mixture/proc/gas_pressure_minimum_transfer(datum/gas_mixture/output_air)
-	var/resulting_energy = output_air.thermal_energy() + (MOLAR_ACCURACY / total_moles() * thermal_energy())
-	var/resulting_capacity = output_air.heat_capacity() + (MOLAR_ACCURACY / total_moles() * heat_capacity())
-	return (output_air.total_moles() + MOLAR_ACCURACY) * R_IDEAL_GAS_EQUATION * (resulting_energy / resulting_capacity) / output_air.volume
+	var/resulting_energy = output_air.thermal_energy() + (MOLAR_ACCURACY / getMoles() * thermal_energy())
+	var/resulting_capacity = output_air.getHeatCapacity() + (MOLAR_ACCURACY / getMoles() * getHeatCapacity())
+	return (output_air.getMoles() + MOLAR_ACCURACY) * R_IDEAL_GAS_EQUATION * (resulting_energy / resulting_capacity) / output_air.volume
 
 
 /** Returns the amount of gas to be pumped to a specific container.
@@ -578,15 +578,15 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
  * - ignore_temperature. Returns a cheaper form of gas calculation, useful if the temperature difference between the two gasmixes is low or nonexistant.
  */
 /datum/gas_mixture/proc/gas_pressure_calculate(datum/gas_mixture/output_air, target_pressure, ignore_temperature = FALSE)
-	if((total_moles() <= 0) || (temperature <= 0))
+	if((getMoles() <= 0) || (temperature <= 0))
 		return FALSE
 
 	var/pressure_delta = 0
-	if((output_air.temperature <= 0) || (output_air.total_moles() <= 0))
+	if((output_air.temperature <= 0) || (output_air.getMoles() <= 0))
 		ignore_temperature = TRUE
 		pressure_delta = target_pressure
 	else
-		pressure_delta = target_pressure - output_air.return_pressure()
+		pressure_delta = target_pressure - output_air.returnPressure()
 
 	if(pressure_delta < 0.01 || gas_pressure_minimum_transfer(output_air) > target_pressure)
 		return FALSE
@@ -600,8 +600,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 	var/rt_high = R_IDEAL_GAS_EQUATION * min(temperature, output_air.temperature)
 	// These works by assuming our gas has extremely high heat capacity
 	// and the resultant gasmix will hit either the highest or lowest temperature possible.
-	var/lower_limit = max((pv / rt_low) - output_air.total_moles(), 0)
-	var/upper_limit = (pv / rt_high) - output_air.total_moles() // In theory this should never go below zero, the pressure_delta check above should account for this.
+	var/lower_limit = max((pv / rt_low) - output_air.getMoles(), 0)
+	var/upper_limit = (pv / rt_high) - output_air.getMoles() // In theory this should never go below zero, the pressure_delta check above should account for this.
 
 	/*
 	 * We have PV=nRT as a nice formula, we can rearrange it into nT = PV/R
@@ -627,13 +627,13 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 
 	// Our thermal energy and moles
 	var/w2 = thermal_energy()
-	var/n2 = total_moles()
-	var/c2 = heat_capacity()
+	var/n2 = getMoles()
+	var/c2 = getHeatCapacity()
 
 	// Target thermal energy and moles
 	var/w1 = output_air.thermal_energy()
-	var/n1 = output_air.total_moles()
-	var/c1 = output_air.heat_capacity()
+	var/n1 = output_air.getMoles()
+	var/c1 = output_air.getHeatCapacity()
 
 	/// The PV/R part in our equation.
 	var/pvr = pv / R_IDEAL_GAS_EQUATION
@@ -704,8 +704,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 
 /// Releases gas from src to output air. This means that it can not transfer air to gas mixture with higher pressure.
 /datum/gas_mixture/proc/release_gas_to(datum/gas_mixture/output_air, target_pressure, rate=1)
-	var/output_starting_pressure = output_air.return_pressure()
-	var/input_starting_pressure = return_pressure()
+	var/output_starting_pressure = output_air.returnPressure()
+	var/input_starting_pressure = returnPressure()
 
 	//Need at least 10 KPa difference to overcome friction in the mechanism
 	if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10))
diff --git a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm
index e6cd8f75499..c1db471f3a3 100644
--- a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm
+++ b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm
@@ -31,7 +31,7 @@
 /datum/gas_mixture/immutable/copy()
 	return new type //we're immutable, so we can just return a new instance.
 
-/datum/gas_mixture/immutable/copy_from()
+/datum/gas_mixture/immutable/copyFrom()
 	return FALSE //we're immutable.
 
 /datum/gas_mixture/immutable/copy_from_turf()
@@ -48,13 +48,13 @@
 /datum/gas_mixture/immutable/space
 	initial_temperature = TCMB
 
-/datum/gas_mixture/immutable/space/heat_capacity()
+/datum/gas_mixture/immutable/space/getHeatCapacity()
 	return HEAT_CAPACITY_VACUUM
 
 /datum/gas_mixture/immutable/space/remove()
 	return copy() //we're always empty, so we can just return a copy.
 
-/datum/gas_mixture/immutable/space/remove_ratio()
+/datum/gas_mixture/immutable/space/removeRatio()
 	return copy() //we're always empty, so we can just return a copy.
 
 //planet side stuff
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index 33fc13f7094..23f4bc09952 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -138,7 +138,7 @@
 /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() > MIASTER_STERILIZATION_MAX_HUMIDITY)
+	if(cached_gases[/datum/gas/water_vapor] && cached_gases[/datum/gas/water_vapor][MOLES] / air.getMoles() > MIASTER_STERILIZATION_MAX_HUMIDITY)
 		return NO_REACTION
 
 	//Replace miasma with oxygen
@@ -204,7 +204,7 @@
 	if(plasma_burn_rate < MINIMUM_HEAT_CAPACITY)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	plasma_burn_rate = min(plasma_burn_rate, cached_gases[/datum/gas/plasma][MOLES], cached_gases[/datum/gas/oxygen][MOLES] *  INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly
 	cached_gases[/datum/gas/plasma][MOLES] = QUANTIZE(cached_gases[/datum/gas/plasma][MOLES] - plasma_burn_rate)
 	cached_gases[/datum/gas/oxygen][MOLES] = QUANTIZE(cached_gases[/datum/gas/oxygen][MOLES] - (plasma_burn_rate * oxygen_burn_ratio))
@@ -219,7 +219,7 @@
 
 	SET_REACTION_RESULTS((plasma_burn_rate) * (1 + oxygen_burn_ratio))
 	var/energy_released = FIRE_PLASMA_ENERGY_RELEASED * plasma_burn_rate
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
 
@@ -256,7 +256,7 @@
 
 /datum/gas_reaction/h2fire/react(datum/gas_mixture/air, datum/holder)
 	var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	var/temperature = air.temperature
 
 	var/burned_fuel
@@ -281,7 +281,7 @@
 
 	var/energy_released = FIRE_HYDROGEN_ENERGY_RELEASED * burned_fuel * fire_scale
 	if(energy_released > 0)
-		var/new_heat_capacity = air.heat_capacity()
+		var/new_heat_capacity = air.getHeatCapacity()
 		if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 			air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
 
@@ -319,7 +319,7 @@
 
 /datum/gas_reaction/tritfire/react(datum/gas_mixture/air, datum/holder)
 	var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	var/temperature = air.temperature
 
 	var/burned_fuel
@@ -355,7 +355,7 @@
 		radiation_pulse(location, max_range = min(TRITIUM_MINIMUM_RADIATION_RANGE + sqrt(burned_fuel * effect_scale / TRITIUM_OXYBURN_MULTIPLIER) / TRITIUM_RADIATION_RANGE_DIVISOR, 20), threshold = TRITIUM_RADIATION_THRESHOLD_BASE * INVERSE(TRITIUM_RADIATION_THRESHOLD_BASE + (burned_fuel * effect_scale / TRITIUM_OXYBURN_MULTIPLIER)), chance = 100 * (1 - 0.5 ** (energy_released / TRITIUM_RADIATION_CHANCE_ENERGY_THRESHOLD_BASE)))
 
 	if(energy_released > 0)
-		var/new_heat_capacity = air.heat_capacity()
+		var/new_heat_capacity = air.getHeatCapacity()
 		if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 			air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
 
@@ -416,7 +416,7 @@
 	if (freon_burn_rate < MINIMUM_HEAT_CAPACITY)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	freon_burn_rate = min(freon_burn_rate, cached_gases[/datum/gas/freon][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly
 	cached_gases[/datum/gas/freon][MOLES] = QUANTIZE(cached_gases[/datum/gas/freon][MOLES] - freon_burn_rate)
 	cached_gases[/datum/gas/oxygen][MOLES] = QUANTIZE(cached_gases[/datum/gas/oxygen][MOLES] - (freon_burn_rate * oxygen_burn_ratio))
@@ -428,7 +428,7 @@
 
 	SET_REACTION_RESULTS(freon_burn_rate * (1 + oxygen_burn_ratio))
 	var/energy_consumed = FIRE_FREON_ENERGY_CONSUMED * freon_burn_rate
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max((temperature * old_heat_capacity - energy_consumed) / new_heat_capacity, TCMB)
 
@@ -471,7 +471,7 @@
 	if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency * 2 < 0))
 		return NO_REACTION // Shouldn't produce gas from nothing.
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency
 	cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficency * 2
 	ASSERT_GAS(/datum/gas/nitrous_oxide, air)
@@ -479,7 +479,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency)
 	var/energy_released = heat_efficency * N2O_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB) // The air cools down when reacting.
 	return REACTING
@@ -513,7 +513,7 @@
 	if(cached_gases[/datum/gas/nitrous_oxide][MOLES] - burned_fuel < 0)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	cached_gases[/datum/gas/nitrous_oxide][MOLES] -= burned_fuel
 	ASSERT_GAS(/datum/gas/nitrogen, air)
 	cached_gases[/datum/gas/nitrogen][MOLES] += burned_fuel
@@ -522,7 +522,7 @@
 
 	SET_REACTION_RESULTS(burned_fuel)
 	var/energy_released = N2O_DECOMPOSITION_ENERGY * burned_fuel
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
 	return REACTING
@@ -551,7 +551,7 @@
 
 /datum/gas_reaction/bzformation/react(datum/gas_mixture/air)
 	var/list/cached_gases = air.gases
-	var/pressure = air.return_pressure()
+	var/pressure = air.returnPressure()
 	// This slows down in relation to pressure, very quickly. Please don't expect it to be anything more then a snail
 
 	// Bigger is better for these two values.
@@ -563,7 +563,7 @@
 	if ((cached_gases[/datum/gas/nitrous_oxide][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2 * reaction_efficency) < 0) || reaction_efficency <= 0) //Shouldn't produce gas from nothing.
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/bz, air)
 	if (reaction_efficency == cached_gases[/datum/gas/nitrous_oxide][MOLES])
 		ASSERT_GAS(/datum/gas/oxygen, air)
@@ -577,7 +577,7 @@
 
 	SET_REACTION_RESULTS(reaction_efficency)
 	var/energy_released = 2 * reaction_efficency * FIRE_CARBON_ENERGY_RELEASED
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
 	return REACTING
@@ -612,7 +612,7 @@
 	if (produced_amount <= 0 || cached_gases[/datum/gas/carbon_dioxide][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/oxygen][MOLES] - produced_amount * 0.5 < 0 || cached_gases[/datum/gas/tritium][MOLES] - produced_amount * 0.01 < 0)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	cached_gases[/datum/gas/carbon_dioxide][MOLES] -= produced_amount
 	cached_gases[/datum/gas/oxygen][MOLES] -= produced_amount * 0.5
 	cached_gases[/datum/gas/tritium][MOLES] -= produced_amount * 0.01
@@ -623,7 +623,7 @@
 
 	SET_REACTION_RESULTS(produced_amount)
 	var/energy_released = produced_amount * PLUOXIUM_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
 	return REACTING
@@ -660,7 +660,7 @@
 	if( heat_efficency <= 0 || (cached_gases[/datum/gas/tritium][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
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/nitrium, air)
 	cached_gases[/datum/gas/tritium][MOLES] -= heat_efficency
 	cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficency
@@ -669,7 +669,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency)
 	var/energy_used = heat_efficency * NITRIUM_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity), TCMB) //the air cools down when reacting
 	return REACTING
@@ -705,7 +705,7 @@
 	if (heat_efficency <= 0 || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing.
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	air.assert_gases(/datum/gas/nitrogen, /datum/gas/hydrogen)
 	cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficency
 	cached_gases[/datum/gas/hydrogen][MOLES] += heat_efficency
@@ -713,7 +713,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency)
 	var/energy_released = heat_efficency * NITRIUM_DECOMPOSITION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB) //the air heats up when reacting
 	return REACTING
@@ -746,7 +746,7 @@
 	if (heat_efficency <= 0 || (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
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/freon, air)
 	cached_gases[/datum/gas/plasma][MOLES] -= heat_efficency * 1.5 // 6
 	cached_gases[/datum/gas/carbon_dioxide][MOLES] -= heat_efficency * 0.75 //  3
@@ -755,7 +755,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency * 2.5)
 	var/energy_used = heat_efficency * FREON_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity - energy_used)/new_heat_capacity), TCMB)
 	return REACTING
@@ -790,7 +790,7 @@
 	if (nob_formed <= 0 || (cached_gases[/datum/gas/tritium][MOLES] - 5 * nob_formed < 0) || (cached_gases[/datum/gas/nitrogen][MOLES] - 10 * nob_formed < 0))
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	air.assert_gases(/datum/gas/hypernoblium, /datum/gas/bz)
 	var/reduction_factor = clamp(cached_gases[/datum/gas/tritium][MOLES]/(cached_gases[/datum/gas/tritium][MOLES] + cached_gases[/datum/gas/bz][MOLES]), 0.001 , 1) //reduces trit consumption in presence of bz upward to 0.1% reduction
 	cached_gases[/datum/gas/tritium][MOLES] -= 5 * nob_formed * reduction_factor
@@ -798,7 +798,7 @@
 	cached_gases[/datum/gas/hypernoblium][MOLES] += nob_formed // I'm not going to nitpick, but N20H10 feels like it should be an explosive more than anything.
 	SET_REACTION_RESULTS(nob_formed)
 	var/energy_released = nob_formed * (NOBLIUM_FORMATION_ENERGY / (max(cached_gases[/datum/gas/bz][MOLES], 1)))
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
 	return REACTING
@@ -832,7 +832,7 @@
 	if (heat_efficency <= 0 || (cached_gases[/datum/gas/tritium][MOLES] - heat_efficency * 4 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing.
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/halon, air)
 	cached_gases[/datum/gas/tritium][MOLES] -= heat_efficency * 4
 	cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25
@@ -840,7 +840,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency * 4.25)
 	var/energy_released = heat_efficency * HALON_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
 	return REACTING
@@ -874,7 +874,7 @@
 	if (heat_efficency <= 0 || (cached_gases[/datum/gas/halon][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency * 20 < 0)) //Shouldn't produce gas from nothing.
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/carbon_dioxide, air)
 	cached_gases[/datum/gas/halon][MOLES] -= heat_efficency
 	cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency * 20
@@ -882,7 +882,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency * 5)
 	var/energy_used = heat_efficency * HALON_COMBUSTION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity), TCMB)
 	return REACTING
@@ -916,7 +916,7 @@
 	if (heat_efficency <= 0 || (cached_gases[/datum/gas/freon][MOLES] - heat_efficency * 2.75 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing.
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/healium, air)
 	cached_gases[/datum/gas/freon][MOLES] -= heat_efficency * 2.75
 	cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25
@@ -924,7 +924,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency * 3)
 	var/energy_released = heat_efficency * HEALIUM_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
 	return REACTING
@@ -957,7 +957,7 @@
 	if (heat_efficency <= 0 || (cached_gases[/datum/gas/hypernoblium][MOLES] - heat_efficency * 0.01 < 0 ) || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficency * 0.5 < 0)) //Shouldn't produce gas from nothing.
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/zauker, air)
 	cached_gases[/datum/gas/hypernoblium][MOLES] -= heat_efficency * 0.01
 	cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficency * 0.5
@@ -965,7 +965,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency * 0.5)
 	var/energy_used = heat_efficency * ZAUKER_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity), TCMB)
 	return REACTING
@@ -995,7 +995,7 @@
 	if (burned_fuel <= 0 || cached_gases[/datum/gas/zauker][MOLES] - burned_fuel < 0)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	cached_gases[/datum/gas/zauker][MOLES] -= burned_fuel
 	ASSERT_GAS(/datum/gas/oxygen, air)
 	cached_gases[/datum/gas/oxygen][MOLES] += burned_fuel * 0.3
@@ -1004,7 +1004,7 @@
 
 	SET_REACTION_RESULTS(burned_fuel)
 	var/energy_released = ZAUKER_DECOMPOSITION_ENERGY * burned_fuel
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
 	return REACTING
@@ -1039,7 +1039,7 @@
 	if (heat_efficency <= 0 || (cached_gases[/datum/gas/pluoxium][MOLES] - heat_efficency * 0.2 < 0 ) || (cached_gases[/datum/gas/hydrogen][MOLES] - heat_efficency * 2 < 0)) //Shouldn't produce gas from nothing.
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	ASSERT_GAS(/datum/gas/proto_nitrate, air)
 	cached_gases[/datum/gas/hydrogen][MOLES] -= heat_efficency * 2
 	cached_gases[/datum/gas/pluoxium][MOLES] -= heat_efficency * 0.2
@@ -1047,7 +1047,7 @@
 
 	SET_REACTION_RESULTS(heat_efficency * 2.2)
 	var/energy_released = heat_efficency * PN_FORMATION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
 	return REACTING
@@ -1076,13 +1076,13 @@
 	if (produced_amount <= 0 || cached_gases[/datum/gas/hydrogen][MOLES] - produced_amount < 0)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	cached_gases[/datum/gas/hydrogen][MOLES] -= produced_amount
 	cached_gases[/datum/gas/proto_nitrate][MOLES] += produced_amount * 0.5
 
 	SET_REACTION_RESULTS(produced_amount * 0.5)
 	var/energy_used = produced_amount * PN_HYDROGEN_CONVERSION_ENERGY
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max((air.temperature * old_heat_capacity - energy_used) / new_heat_capacity, TCMB)
 	return REACTING
@@ -1115,7 +1115,7 @@
 	if(cached_gases[/datum/gas/tritium][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/proto_nitrate][MOLES] - produced_amount * 0.01 < 0)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	cached_gases[/datum/gas/proto_nitrate][MOLES] -= produced_amount * 0.01
 	cached_gases[/datum/gas/tritium][MOLES] -= produced_amount
 	ASSERT_GAS(/datum/gas/hydrogen, air)
@@ -1133,7 +1133,7 @@
 		radiation_pulse(location, max_range = min(sqrt(produced_amount) / PN_TRITIUM_RAD_RANGE_DIVISOR, 20), threshold = PN_TRITIUM_RAD_THRESHOLD_BASE * INVERSE(PN_TRITIUM_RAD_THRESHOLD_BASE + produced_amount), chance = 50)
 
 	if(energy_released)
-		var/new_heat_capacity = air.heat_capacity()
+		var/new_heat_capacity = air.getHeatCapacity()
 		if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 			air.temperature = max((temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
 	return REACTING
@@ -1164,7 +1164,7 @@
 	if (consumed_amount <= 0 || cached_gases[/datum/gas/bz][MOLES] - consumed_amount < 0)
 		return NO_REACTION
 
-	var/old_heat_capacity = air.heat_capacity()
+	var/old_heat_capacity = air.getHeatCapacity()
 	cached_gases[/datum/gas/bz][MOLES] -= consumed_amount
 	ASSERT_GAS(/datum/gas/nitrogen, air)
 	cached_gases[/datum/gas/nitrogen][MOLES] += consumed_amount * 0.4
@@ -1186,7 +1186,7 @@
 		for(var/mob/living/carbon/L in location)
 			L.hallucination += consumed_amount
 
-	var/new_heat_capacity = air.heat_capacity()
+	var/new_heat_capacity = air.getHeatCapacity()
 	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
 		air.temperature = max((temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
 	return REACTING
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 3a0f2c52936..047677f04cf 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -219,7 +219,7 @@
 	var/datum/tlv/cur_tlv
 
 	data["environment_data"] = list()
-	var/pressure = environment.return_pressure()
+	var/pressure = environment.returnPressure()
 	cur_tlv = TLV["pressure"]
 	data["environment_data"] += list(list(
 							"name" = "Pressure",
@@ -235,9 +235,9 @@
 							"unit" = "K ([round(temperature - T0C, 0.1)]C)",
 							"danger_level" = cur_tlv.get_danger_level(temperature)
 	))
-	var/total_moles = environment.total_moles()
+	var/total_moles = environment.getMoles()
 	var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume
-	for(var/gas_id in environment.get_gases())
+	for(var/gas_id in environment.getGases())
 		if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
 			continue
 		cur_tlv = TLV[gas_id]
@@ -624,11 +624,11 @@
 	//cache for sanic speed (lists are references anyways)
 	var/list/cached_tlv = TLV
 
-	var/list/env_gases = environment.get_gases()
+	var/list/env_gases = environment.getGases()
 	//var/partial_pressure = R_IDEAL_GAS_EQUATION * exposed_temperature / environment.volume
 
 	current_tlv = cached_tlv["pressure"]
-	var/environment_pressure = environment.return_pressure()
+	var/environment_pressure = environment.returnPressure()
 	var/pressure_dangerlevel = current_tlv.get_danger_level(environment_pressure)
 
 	current_tlv = cached_tlv["temperature"]
@@ -991,10 +991,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 	if(COMPONENT_TRIGGERED_BY(request_data, port))
 		var/turf/alarm_turf = get_turf(connected_alarm)
 		var/datum/gas_mixture/environment = alarm_turf.return_air()
-		pressure.set_output(round(environment.return_pressure()))
+		pressure.set_output(round(environment.returnPressure()))
 		my_temperature.set_output(round(environment.temperature))
 		if(ispath(options_map[current_option]))
-			gas_amount.set_output(round(environment.get_gases()[options_map[current_option]]))
+			gas_amount.set_output(round(environment.getGases()[options_map[current_option]]))
 		return
 
 	var/datum/tlv/settings = connected_alarm.TLV[options_map[current_option]]
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index d95707ac121..408152718a6 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -367,7 +367,7 @@
 	add_fingerprint(user)
 
 	var/unsafe_wrenching = FALSE
-	var/internal_pressure = int_air.return_pressure()-env_air.return_pressure()
+	var/internal_pressure = int_air.returnPressure()-env_air.returnPressure()
 
 	to_chat(user, span_notice("You begin to unfasten \the [src]..."))
 
@@ -413,7 +413,7 @@
 	if(!pressures)
 		var/datum/gas_mixture/int_air = return_air()
 		var/datum/gas_mixture/env_air = loc.return_air()
-		pressures = int_air.return_pressure() - env_air.return_pressure()
+		pressures = int_air.returnPressure() - env_air.returnPressure()
 
 	user.visible_message(span_danger("[user] is sent flying by pressure!"),span_userdanger("The pressure sends you flying!"))
 
diff --git a/code/modules/atmospherics/machinery/bluespace_vendor.dm b/code/modules/atmospherics/machinery/bluespace_vendor.dm
index d0ab9135d61..c36d71a8aeb 100644
--- a/code/modules/atmospherics/machinery/bluespace_vendor.dm
+++ b/code/modules/atmospherics/machinery/bluespace_vendor.dm
@@ -188,7 +188,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/bluespace_vendor, 30)
 	gas_price = temp_price
 
 	if(attempt_charge(src, user, gas_price) & COMPONENT_OBJ_CANCEL_CHARGE)
-		var/datum/gas_mixture/remove = working_mix.remove_ratio(1)
+		var/datum/gas_mixture/remove = working_mix.removeRatio(1)
 		connected_machine.bluespace_network.merge(remove)
 		return
 	connected_machine.credits_gained += gas_price + tank_cost
@@ -208,7 +208,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/bluespace_vendor, 30)
 /obj/machinery/bluespace_vendor/ui_data(mob/user)
 	var/list/data = list()
 	var/list/bluespace_gasdata = list()
-	if(connected_machine.bluespace_network.total_moles())
+	if(connected_machine.bluespace_network.getMoles())
 		for(var/gas_id in connected_machine.bluespace_network.gases)
 			bluespace_gasdata.Add(list(list(
 			"name" = connected_machine.bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
@@ -233,7 +233,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/bluespace_vendor, 30)
 	var/total_tank_pressure
 	if(internal_tank)
 		var/datum/gas_mixture/working_mix = internal_tank.return_air()
-		total_tank_pressure = working_mix.return_pressure()
+		total_tank_pressure = working_mix.returnPressure()
 	else
 		total_tank_pressure = 0
 	data["tank_full"] = total_tank_pressure
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
index d215c8d18f7..38299c8745f 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm
@@ -42,8 +42,8 @@
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
 
-	var/output_starting_pressure = air1.return_pressure()
-	var/input_starting_pressure = air2.return_pressure()
+	var/output_starting_pressure = air1.returnPressure()
+	var/input_starting_pressure = air2.returnPressure()
 
 	if(output_starting_pressure >= input_starting_pressure-10)
 		//Need at least 10 KPa difference to overcome friction in the mechanism
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
index 45efa9e16e1..a1506654512 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
@@ -60,7 +60,7 @@
 	var/datum/gas_mixture/air2 = airs[2]
 
 	var/datum/gas_mixture/environment = loc.return_air()
-	var/environment_pressure = environment.return_pressure()
+	var/environment_pressure = environment.returnPressure()
 
 	if(pump_direction) //input -> external
 		var/pressure_delta = 10000
@@ -68,7 +68,7 @@
 		if(pressure_checks&EXT_BOUND)
 			pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure))
 		if(pressure_checks&INPUT_MIN)
-			pressure_delta = min(pressure_delta, (air1.return_pressure() - input_pressure_min))
+			pressure_delta = min(pressure_delta, (air1.returnPressure() - input_pressure_min))
 
 		if(pressure_delta <= 0)
 			return
@@ -92,7 +92,7 @@
 		if(pressure_checks&EXT_BOUND)
 			pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound))
 		if(pressure_checks&INPUT_MIN)
-			pressure_delta = min(pressure_delta, (output_pressure_max - air2.return_pressure()))
+			pressure_delta = min(pressure_delta, (output_pressure_max - air2.returnPressure()))
 
 		if(pressure_delta <= 0)
 			return
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index 7d5ce9f6d97..c0c02aee01a 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -57,7 +57,7 @@ Passive gate is similar to the regular pump except:
 
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
-	var/input_starting_pressure = air1.return_pressure()
+	var/input_starting_pressure = air1.returnPressure()
 
 	var/pressure_delta = input_starting_pressure - target_pressure
 
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm
index fa368449795..ec581bc9708 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm
@@ -55,7 +55,7 @@
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
 
-	if(air1.return_pressure() > target_pressure)
+	if(air1.returnPressure() > target_pressure)
 		var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
 		if(pump_gas_passive(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)))
 			update_parents()
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index c9a98bb535f..ef3c491caa8 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -281,7 +281,7 @@
 		return
 	var/datum/gas_mixture/air_input = connected_pump.airs[1]
 	var/datum/gas_mixture/air_output = connected_pump.airs[2]
-	input_pressure.set_output(air_input.return_pressure())
-	output_pressure.set_output(air_output.return_pressure())
-	input_temperature.set_output(air_input.return_temperature())
-	output_temperature.set_output(air_output.return_temperature())
+	input_pressure.set_output(air_input.returnPressure())
+	output_pressure.set_output(air_output.returnPressure())
+	input_temperature.set_output(air_input.getTemperature())
+	output_temperature.set_output(air_output.getTemperature())
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 742964c2d85..7f6ff5ae65e 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm
@@ -37,16 +37,16 @@
 	var/datum/gas_mixture/air_input = airs[1]
 	var/datum/gas_mixture/air_output = airs[2]
 
-	if(!QUANTIZE(air_input.total_moles()) || !QUANTIZE(air_output.total_moles())) //Don't transfer if there's no gas
+	if(!QUANTIZE(air_input.getMoles()) || !QUANTIZE(air_output.getMoles())) //Don't transfer if there's no gas
 		return
-	var/datum/gas_mixture/remove_input = air_input.remove_ratio(0.9)
-	var/datum/gas_mixture/remove_output = air_output.remove_ratio(0.9)
+	var/datum/gas_mixture/remove_input = air_input.removeRatio(0.9)
+	var/datum/gas_mixture/remove_output = air_output.removeRatio(0.9)
 
 	var/coolant_temperature_delta = remove_input.temperature - remove_output.temperature
 
 	if(coolant_temperature_delta > 0)
-		var/input_capacity = remove_input.heat_capacity()
-		var/output_capacity = remove_output.heat_capacity()
+		var/input_capacity = remove_input.getHeatCapacity()
+		var/output_capacity = remove_output.getHeatCapacity()
 
 		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)
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 5109e2eb280..df3865955af 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -67,8 +67,8 @@
 
 // Pump mechanism just won't do anything if the pressure is too high/too low unless you overclock it.
 
-	var/input_starting_pressure = air1.return_pressure()
-	var/output_starting_pressure = air2.return_pressure()
+	var/input_starting_pressure = air1.returnPressure()
+	var/output_starting_pressure = air2.returnPressure()
 
 	if((input_starting_pressure < 0.01) || ((output_starting_pressure > 9000))&&!overclocked)
 		return
@@ -79,15 +79,15 @@
 
 	var/transfer_ratio = transfer_rate / air1.volume
 
-	var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
+	var/datum/gas_mixture/removed = air1.removeRatio(transfer_ratio)
 
-	if(!removed.total_moles())
+	if(!removed.getMoles())
 		return
 
 	if(overclocked)//Some of the gas from the mixture leaks to the environment when overclocked
 		var/turf/open/T = loc
 		if(istype(T))
-			var/datum/gas_mixture/leaked = removed.remove_ratio(VOLUME_PUMP_LEAK_AMOUNT)
+			var/datum/gas_mixture/leaked = removed.removeRatio(VOLUME_PUMP_LEAK_AMOUNT)
 			T.assume_air(leaked)
 
 	air2.merge(removed)
@@ -324,7 +324,7 @@
 		return
 	var/datum/gas_mixture/air_input = connected_pump.airs[1]
 	var/datum/gas_mixture/air_output = connected_pump.airs[2]
-	input_pressure.set_output(air_input.return_pressure())
-	output_pressure.set_output(air_output.return_pressure())
-	input_temperature.set_output(air_input.return_temperature())
-	output_temperature.set_output(air_output.return_temperature())
+	input_pressure.set_output(air_input.returnPressure())
+	output_pressure.set_output(air_output.returnPressure())
+	input_temperature.set_output(air_input.getTemperature())
+	output_temperature.set_output(air_output.getTemperature())
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
index 6c7551e0c35..c66f9449a28 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
@@ -380,8 +380,8 @@
 		internal_fusion.temperature -= heat_limiter_modifier * 0.01 * delta_time
 
 	//heat up and output what's in the internal_output into the linked_output port
-	if(internal_output.total_moles() > 0)
-		if(moderator_internal.total_moles() > 0)
+	if(internal_output.getMoles() > 0)
+		if(moderator_internal.getMoles() > 0)
 			internal_output.temperature = moderator_internal.temperature * HIGH_EFFICIENCY_CONDUCTIVITY
 		else
 			internal_output.temperature = internal_fusion.temperature * METALLIC_VOID_CONDUCTIVITY
@@ -410,8 +410,8 @@
 	if (!power_level)
 		return
 	// All gases in the moderator slowly burn away over time, whether used for production or not
-	if(moderator_internal.total_moles() > 0)
-		moderator_internal.remove(moderator_internal.total_moles() * (1 - (1 - 0.0005 * power_level) ** delta_time))
+	if(moderator_internal.getMoles() > 0)
+		moderator_internal.remove(moderator_internal.getMoles() * (1 - (1 - 0.0005 * power_level) ** delta_time))
 
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/process_damageheal(delta_time)
 	// Archive current health for damage cap purposes
@@ -419,16 +419,16 @@
 
 	// If we're operating at an extreme power level, take increasing damage for the amount of fusion mass over a low threshold
 	if(power_level >= HYPERTORUS_OVERFULL_MIN_POWER_LEVEL)
-		var/overfull_damage_taken = HYPERTORUS_OVERFULL_MOLAR_SLOPE * internal_fusion.total_moles() + HYPERTORUS_OVERFULL_TEMPERATURE_SLOPE * coolant_temperature + HYPERTORUS_OVERFULL_CONSTANT
+		var/overfull_damage_taken = HYPERTORUS_OVERFULL_MOLAR_SLOPE * internal_fusion.getMoles() + HYPERTORUS_OVERFULL_TEMPERATURE_SLOPE * coolant_temperature + HYPERTORUS_OVERFULL_CONSTANT
 		critical_threshold_proximity = max(critical_threshold_proximity + max(overfull_damage_taken * delta_time, 0), 0)
 
 	// If we're running on a thin fusion mix, heal up
-	if(internal_fusion.total_moles() < HYPERTORUS_SUBCRITICAL_MOLES && power_level <= 5)
-		var/subcritical_heal_restore = (internal_fusion.total_moles() - HYPERTORUS_SUBCRITICAL_MOLES) / HYPERTORUS_SUBCRITICAL_SCALE
+	if(internal_fusion.getMoles() < HYPERTORUS_SUBCRITICAL_MOLES && power_level <= 5)
+		var/subcritical_heal_restore = (internal_fusion.getMoles() - HYPERTORUS_SUBCRITICAL_MOLES) / HYPERTORUS_SUBCRITICAL_SCALE
 		critical_threshold_proximity = max(critical_threshold_proximity + min(subcritical_heal_restore * delta_time, 0), 0)
 
 	// If coolant is sufficiently cold, heal up
-	if(internal_fusion.total_moles() > 0 && (airs[1].total_moles() && coolant_temperature < HYPERTORUS_COLD_COOLANT_THRESHOLD) && power_level <= 4)
+	if(internal_fusion.getMoles() > 0 && (airs[1].getMoles() && coolant_temperature < HYPERTORUS_COLD_COOLANT_THRESHOLD) && power_level <= 4)
 		var/cold_coolant_heal_restore = log(10, max(coolant_temperature, 1) * HYPERTORUS_COLD_COOLANT_SCALE) - (HYPERTORUS_COLD_COOLANT_MAX_RESTORE * 2)
 		critical_threshold_proximity = max(critical_threshold_proximity + min(cold_coolant_heal_restore * delta_time, 0), 0)
 
@@ -438,8 +438,8 @@
 	critical_threshold_proximity = min(critical_threshold_proximity_archived + (delta_time * DAMAGE_CAP_MULTIPLIER * melting_point), critical_threshold_proximity)
 
 	// If we have a preposterous amount of mass in the fusion mix, things get bad extremely fast
-	if(internal_fusion.total_moles() >= HYPERTORUS_HYPERCRITICAL_MOLES)
-		var/hypercritical_damage_taken = max((internal_fusion.total_moles() - HYPERTORUS_HYPERCRITICAL_MOLES) * HYPERTORUS_HYPERCRITICAL_SCALE, 0)
+	if(internal_fusion.getMoles() >= HYPERTORUS_HYPERCRITICAL_MOLES)
+		var/hypercritical_damage_taken = max((internal_fusion.getMoles() - HYPERTORUS_HYPERCRITICAL_MOLES) * HYPERTORUS_HYPERCRITICAL_SCALE, 0)
 		critical_threshold_proximity = max(critical_threshold_proximity + min(hypercritical_damage_taken, HYPERTORUS_HYPERCRITICAL_MAX_DAMAGE), 0) * delta_time
 
 	// High power fusion might create other matter other than helium, iron is dangerous inside the machine, damage can be seen
@@ -469,7 +469,7 @@
 		zap_number += 1
 
 	var/cutoff = 1500
-	cutoff = clamp(3000 - (power_level * (internal_fusion.total_moles() * 0.45)), 450, 3000)
+	cutoff = clamp(3000 - (power_level * (internal_fusion.getMoles() * 0.45)), 450, 3000)
 
 	var/zaps_aspect = DEFAULT_ZAP_ICON_STATE
 	var/flags = ZAP_SUPERMATTER_FLAGS
@@ -514,29 +514,29 @@
 	moderator_internal.garbage_collect()
 
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/process_internal_cooling(delta_time)
-	if(moderator_internal.total_moles() > 0 && internal_fusion.total_moles() > 0)
+	if(moderator_internal.getMoles() > 0 && internal_fusion.getMoles() > 0)
 		//Modifies the moderator_internal temperature based on energy conduction and also the fusion by the same amount
 		var/fusion_temperature_delta = internal_fusion.temperature - moderator_internal.temperature
-		var/fusion_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * fusion_temperature_delta * (internal_fusion.heat_capacity() * moderator_internal.heat_capacity() / (internal_fusion.heat_capacity() + moderator_internal.heat_capacity()))
-		internal_fusion.temperature = max(internal_fusion.temperature - fusion_heat_amount / internal_fusion.heat_capacity(), TCMB)
-		moderator_internal.temperature = max(moderator_internal.temperature + fusion_heat_amount / moderator_internal.heat_capacity(), TCMB)
+		var/fusion_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * fusion_temperature_delta * (internal_fusion.getHeatCapacity() * moderator_internal.getHeatCapacity() / (internal_fusion.getHeatCapacity() + moderator_internal.getHeatCapacity()))
+		internal_fusion.temperature = max(internal_fusion.temperature - fusion_heat_amount / internal_fusion.getHeatCapacity(), TCMB)
+		moderator_internal.temperature = max(moderator_internal.temperature + fusion_heat_amount / moderator_internal.getHeatCapacity(), TCMB)
 
-	if(airs[1].total_moles() * 0.05 <= MINIMUM_MOLE_COUNT)
+	if(airs[1].getMoles() * 0.05 <= MINIMUM_MOLE_COUNT)
 		return
 	var/datum/gas_mixture/cooling_port = airs[1]
-	var/datum/gas_mixture/cooling_remove = cooling_port.remove(0.05 * cooling_port.total_moles())
+	var/datum/gas_mixture/cooling_remove = cooling_port.remove(0.05 * cooling_port.getMoles())
 	//Cooling of the moderator gases with the cooling loop in and out the core
-	if(moderator_internal.total_moles() > 0)
+	if(moderator_internal.getMoles() > 0)
 		var/coolant_temperature_delta = cooling_remove.temperature - moderator_internal.temperature
-		var/cooling_heat_amount = (1 - (1 - HIGH_EFFICIENCY_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.heat_capacity() * moderator_internal.heat_capacity() / (cooling_remove.heat_capacity() + moderator_internal.heat_capacity()))
-		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.heat_capacity(), TCMB)
-		moderator_internal.temperature = max(moderator_internal.temperature + cooling_heat_amount / moderator_internal.heat_capacity(), TCMB)
+		var/cooling_heat_amount = (1 - (1 - HIGH_EFFICIENCY_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.getHeatCapacity() * moderator_internal.getHeatCapacity() / (cooling_remove.getHeatCapacity() + moderator_internal.getHeatCapacity()))
+		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.getHeatCapacity(), TCMB)
+		moderator_internal.temperature = max(moderator_internal.temperature + cooling_heat_amount / moderator_internal.getHeatCapacity(), TCMB)
 
-	else if(internal_fusion.total_moles() > 0)
+	else if(internal_fusion.getMoles() > 0)
 		var/coolant_temperature_delta = cooling_remove.temperature - internal_fusion.temperature
-		var/cooling_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.heat_capacity() * internal_fusion.heat_capacity() / (cooling_remove.heat_capacity() + internal_fusion.heat_capacity()))
-		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.heat_capacity(), TCMB)
-		internal_fusion.temperature = max(internal_fusion.temperature + cooling_heat_amount / internal_fusion.heat_capacity(), TCMB)
+		var/cooling_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.getHeatCapacity() * internal_fusion.getHeatCapacity() / (cooling_remove.getHeatCapacity() + internal_fusion.getHeatCapacity()))
+		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.getHeatCapacity(), TCMB)
+		internal_fusion.temperature = max(internal_fusion.temperature + cooling_heat_amount / internal_fusion.getHeatCapacity(), TCMB)
 	cooling_port.merge(cooling_remove)
 
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/inject_from_side_components(delta_time)
@@ -544,7 +544,7 @@
 
 	//Check and stores the gases from the moderator input in the moderator internal gasmix
 	var/datum/gas_mixture/moderator_port = linked_moderator.airs[1]
-	if(start_moderator && moderator_port.total_moles())
+	if(start_moderator && moderator_port.getMoles())
 		moderator_internal.merge(moderator_port.remove(moderator_injection_rate * delta_time))
 		linked_moderator.update_parents()
 
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
index 6d95c1b396c..992afb55152 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
@@ -240,7 +240,7 @@
 
 	//Internal Fusion gases
 	var/list/fusion_gasdata = list()
-	if(connected_core.internal_fusion.total_moles())
+	if(connected_core.internal_fusion.getMoles())
 		for(var/gas_type in connected_core.internal_fusion.gases)
 			var/datum/gas/gas = gas_type
 			fusion_gasdata.Add(list(list(
@@ -256,7 +256,7 @@
 				)))
 	//Moderator gases
 	var/list/moderator_gasdata = list()
-	if(connected_core.moderator_internal.total_moles())
+	if(connected_core.moderator_internal.getMoles())
 		for(var/gas_type in connected_core.moderator_internal.gases)
 			var/datum/gas/gas = gas_type
 			moderator_gasdata.Add(list(list(
@@ -382,7 +382,7 @@
 			if(fuel)
 				connected_core.selected_fuel = fuel
 				fuel_mix = fuel.name
-			if(connected_core.internal_fusion.total_moles())
+			if(connected_core.internal_fusion.getMoles())
 				connected_core.dump_gases()
 			connected_core.update_parents() //prevent the machine from stopping because of the recipe change and the pipenet not updating
 			connected_core.linked_input.update_parents()
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
index c8085b9c35d..203aa4a2058 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
@@ -237,7 +237,7 @@
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_fuel()
 	if(!selected_fuel)
 		return FALSE
-	if(!internal_fusion.total_moles())
+	if(!internal_fusion.getMoles())
 		return FALSE
 	for(var/gas_type in selected_fuel.requirements)
 		internal_fusion.assert_gas(gas_type)
@@ -267,7 +267,7 @@
 
 ///Removes the gases from the internal gasmix when the recipe is changed
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/dump_gases()
-	var/datum/gas_mixture/remove = internal_fusion.remove(internal_fusion.total_moles())
+	var/datum/gas_mixture/remove = internal_fusion.remove(internal_fusion.getMoles())
 	linked_output.airs[1].merge(remove)
 	internal_fusion.garbage_collect()
 	linked_input.airs[1].garbage_collect()
@@ -476,20 +476,20 @@
 			around_turfs -= turf
 			continue
 	var/datum/gas_mixture/remove_fusion
-	if(internal_fusion.total_moles() > 0)
-		remove_fusion = internal_fusion.remove_ratio(0.2)
+	if(internal_fusion.getMoles() > 0)
+		remove_fusion = internal_fusion.removeRatio(0.2)
 		var/datum/gas_mixture/remove
 		for(var/i in 1 to gas_pockets)
-			remove = remove_fusion.remove_ratio(1/gas_pockets)
+			remove = remove_fusion.removeRatio(1/gas_pockets)
 			var/turf/local = pick(around_turfs)
 			local.assume_air(remove)
 		loc.assume_air(internal_fusion)
 	var/datum/gas_mixture/remove_moderator
-	if(moderator_internal.total_moles() > 0)
-		remove_moderator = moderator_internal.remove_ratio(0.2)
+	if(moderator_internal.getMoles() > 0)
+		remove_moderator = moderator_internal.removeRatio(0.2)
 		var/datum/gas_mixture/remove
 		for(var/i in 1 to gas_pockets)
-			remove = remove_moderator.remove_ratio(1/gas_pockets)
+			remove = remove_moderator.removeRatio(1/gas_pockets)
 			var/turf/local = pick(around_turfs)
 			local.assume_air(remove)
 		loc.assume_air(moderator_internal)
@@ -562,7 +562,7 @@
 	return part
 
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/spill_gases(obj/origin, datum/gas_mixture/target_mix, ratio)
-	var/datum/gas_mixture/remove_mixture = target_mix.remove_ratio(ratio)
+	var/datum/gas_mixture/remove_mixture = target_mix.removeRatio(ratio)
 	var/turf/origin_turf = origin.loc
 	if(!origin_turf)
 		return
@@ -573,12 +573,12 @@
 	if (cracked_part)
 		// We have an existing crack
 		var/leak_rate
-		if (moderator_internal.return_pressure() < HYPERTORUS_MEDIUM_SPILL_PRESSURE)
+		if (moderator_internal.returnPressure() < HYPERTORUS_MEDIUM_SPILL_PRESSURE)
 			// Not high pressure, but can still leak
 			if (!prob(HYPERTORUS_WEAK_SPILL_CHANCE))
 				return
 			leak_rate = HYPERTORUS_WEAK_SPILL_RATE
-		else if (moderator_internal.return_pressure() < HYPERTORUS_STRONG_SPILL_PRESSURE)
+		else if (moderator_internal.returnPressure() < HYPERTORUS_STRONG_SPILL_PRESSURE)
 			// Lots of gas in here, out we go
 			leak_rate = HYPERTORUS_MEDIUM_SPILL_RATE
 		else
@@ -587,13 +587,13 @@
 		spill_gases(cracked_part, moderator_internal, ratio = 1 - (1 - leak_rate) ** delta_time)
 		return
 
-	if (moderator_internal.total_moles() < HYPERTORUS_HYPERCRITICAL_MOLES)
+	if (moderator_internal.getMoles() < HYPERTORUS_HYPERCRITICAL_MOLES)
 		return
 	cracked_part = create_crack()
 	// See if we do anything in the initial rupture
-	if (moderator_internal.return_pressure() < HYPERTORUS_MEDIUM_SPILL_PRESSURE)
+	if (moderator_internal.returnPressure() < HYPERTORUS_MEDIUM_SPILL_PRESSURE)
 		return
-	if (moderator_internal.return_pressure() < HYPERTORUS_STRONG_SPILL_PRESSURE)
+	if (moderator_internal.returnPressure() < HYPERTORUS_STRONG_SPILL_PRESSURE)
 		// Medium explosion on initial rupture
 		explosion(
 			origin = cracked_part,
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 261a0c80e52..920e74f2daf 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
@@ -144,17 +144,17 @@
 	if(internal.temperature >= (median_temperature * MIN_DEVIATION_RATE) && internal.temperature <= (median_temperature * MAX_DEVIATION_RATE))
 		quality_loss = max(quality_loss - progress_amount_to_quality, -85)
 
-	internal.temperature = max(internal.temperature + (selected_recipe.energy_release / internal.heat_capacity()), TCMB)
+	internal.temperature = max(internal.temperature + (selected_recipe.energy_release / internal.getHeatCapacity()), TCMB)
 	update_parents()
 
 ///Conduction between the internal gasmix and the moderating (cooling/heating) gasmix.
 /obj/machinery/atmospherics/components/binary/crystallizer/proc/heat_conduction()
 	var/datum/gas_mixture/cooling_port = airs[1]
-	if(cooling_port.total_moles() > MINIMUM_MOLE_COUNT)
-		if(internal.total_moles() > 0)
+	if(cooling_port.getMoles() > MINIMUM_MOLE_COUNT)
+		if(internal.getMoles() > 0)
 			var/coolant_temperature_delta = cooling_port.temperature - internal.temperature
-			var/cooling_heat_capacity = cooling_port.heat_capacity()
-			var/internal_heat_capacity = internal.heat_capacity()
+			var/cooling_heat_capacity = cooling_port.getHeatCapacity()
+			var/internal_heat_capacity = internal.getHeatCapacity()
 			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)
@@ -169,7 +169,7 @@
 
 ///Removes the gases from the internal gasmix when the recipe is changed
 /obj/machinery/atmospherics/components/binary/crystallizer/proc/dump_gases()
-	var/datum/gas_mixture/remove = internal.remove(internal.total_moles())
+	var/datum/gas_mixture/remove = internal.remove(internal.getMoles())
 	airs[2].merge(remove)
 	internal.garbage_collect()
 
@@ -179,7 +179,7 @@
 
 	inject_gases()
 
-	if(!internal.total_moles())
+	if(!internal.getMoles())
 		return
 
 	heat_conduction()
@@ -266,7 +266,7 @@
 		data["selected"] = ""
 
 	var/list/internal_gas_data = list()
-	if(internal.total_moles())
+	if(internal.getMoles())
 		for(var/gasid in internal.gases)
 			internal_gas_data.Add(list(list(
 			"name"= internal.gases[gasid][GAS_META][META_GAS_NAME],
@@ -294,7 +294,7 @@
 	data["requirements"] = requirements.Join("\n")
 
 	var/temperature
-	if(internal.total_moles())
+	if(internal.getMoles())
 		temperature = internal.temperature
 	else
 		temperature = 0
@@ -316,7 +316,7 @@
 			selected_recipe = null
 			var/recipe_name = "nothing"
 			var/datum/gas_recipe/recipe = GLOB.gas_recipe_meta[params["mode"]]
-			if(internal.total_moles())
+			if(internal.getMoles())
 				dump_gases()
 			quality_loss = 0
 			progress_bar = 0
diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index b74318e3fd3..bc19f9aff61 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -136,13 +136,13 @@
 	var/pressure_limit = max_pressure * safety_margin
 
 	var/moles_to_add = (pressure_limit * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
-	air_contents.adjust_gas(gastype, moles_to_add)
+	air_contents.adjustGas(gastype, moles_to_add)
 
 /obj/machinery/atmospherics/components/tank/process_atmos()
 	if(air_contents.react(src))
 		update_parents()
 
-	if(air_contents.return_pressure() > max_pressure)
+	if(air_contents.returnPressure() > max_pressure)
 		take_damage(0.1, BRUTE, sound_effect = FALSE)
 		if(prob(40))
 			playsound(src, pick(breaking_sounds), 30, vary = TRUE)
@@ -216,7 +216,7 @@
 		return
 	var/shares = length(merger.members) + length(leaving_members) - length(joining_members)
 	for(var/obj/machinery/atmospherics/components/tank/leaver as anything in leaving_members)
-		var/datum/gas_mixture/gas_share = air_contents.remove_ratio(1 / shares--)
+		var/datum/gas_mixture/gas_share = air_contents.removeRatio(1 / shares--)
 		air_contents.volume -= leaver.volume
 		leaver.air_contents = gas_share
 		leaver.update_appearance()
@@ -268,7 +268,7 @@
 	window = image(icon, icon_state = "window-bg", layer = FLOAT_LAYER)
 
 	var/list/new_underlays = list()
-	for(var/obj/effect/gas_overlay/gas as anything in air_contents.return_visuals())
+	for(var/obj/effect/gas_overlay/gas as anything in air_contents.returnVisuals())
 		var/image/new_underlay = image(gas.icon, icon_state = gas.icon_state, layer = FLOAT_LAYER)
 		new_underlay.filters = alpha_mask_filter(icon = icon(icon, icon_state = "window-bg"))
 		new_underlays += new_underlay
@@ -322,7 +322,7 @@
 	var/time_taken = 4 SECONDS
 	var/unsafe = FALSE
 
-	var/internal_pressure = air_contents.return_pressure() - airmix.return_pressure()
+	var/internal_pressure = air_contents.returnPressure() - airmix.returnPressure()
 	if(internal_pressure > 2 * ONE_ATMOSPHERE)
 		time_taken *= 2
 		to_chat(user, span_warning("The tank seems to be pressurized, are you sure this is a good idea?"))
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index a565712f11f..0b246d6d07f 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -79,16 +79,16 @@
 	// If the side output is full, we try to send the non-filtered gases to the main output port (air3).
 	// Any gas that can't be moved due to its destination being too full is sent back to the input (air1).
 
-	var/side_output_full = air2.return_pressure() >= MAX_OUTPUT_PRESSURE
-	var/main_output_full = air3.return_pressure() >= MAX_OUTPUT_PRESSURE
+	var/side_output_full = air2.returnPressure() >= MAX_OUTPUT_PRESSURE
+	var/main_output_full = air3.returnPressure() >= MAX_OUTPUT_PRESSURE
 
 	// If both output ports are full, there's nothing we can do. Don't bother removing anything from the input.
 	if (side_output_full && main_output_full)
 		return
 
-	var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
+	var/datum/gas_mixture/removed = air1.removeRatio(transfer_ratio)
 
-	if(!removed || !removed.total_moles())
+	if(!removed || !removed.getMoles())
 		return
 
 	var/filtering = TRUE
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index ce8036ee05a..a2b3a906ef1 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -64,7 +64,7 @@
 
 	var/datum/gas_mixture/air3 = airs[3]
 
-	var/output_starting_pressure = air3.return_pressure()
+	var/output_starting_pressure = air3.returnPressure()
 
 	if(output_starting_pressure >= target_pressure)
 		//No need to mix if target is already full!
@@ -76,8 +76,8 @@
 	var/transfer_moles1 = air1.temperature ? node1_concentration * general_transfer / air1.temperature : 0
 	var/transfer_moles2 = air2.temperature ? node2_concentration * general_transfer / air2.temperature : 0
 
-	var/air1_moles = air1.total_moles()
-	var/air2_moles = air2.total_moles()
+	var/air1_moles = air1.getMoles()
+	var/air2_moles = air2.getMoles()
 
 	if(!node2_concentration)
 		if(air1.temperature <= 0)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
index 745176c1b7e..1084c6de03c 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
@@ -37,7 +37,7 @@
 	update_appearance()
 
 /obj/machinery/atmospherics/components/unary/bluespace_sender/Destroy()
-	if(bluespace_network.total_moles())
+	if(bluespace_network.getMoles())
 		var/turf/local_turf = get_turf(src)
 		local_turf.assume_air(bluespace_network)
 	return ..()
@@ -63,7 +63,7 @@
 		return
 
 	var/datum/gas_mixture/content = airs[1]
-	var/datum/gas_mixture/remove = content.remove_ratio(gas_transfer_rate)
+	var/datum/gas_mixture/remove = content.removeRatio(gas_transfer_rate)
 	bluespace_network.merge(remove)
 	bluespace_network.temperature = T20C
 	update_parents()
@@ -75,7 +75,7 @@
 			return
 	if(default_change_direction_wrench(user, item))
 		return
-	if(item.tool_behaviour == TOOL_CROWBAR && panel_open && bluespace_network.total_moles() > 0)
+	if(item.tool_behaviour == TOOL_CROWBAR && panel_open && bluespace_network.getMoles() > 0)
 		say("WARNING - Bluespace network can contain hazardous gases, deconstruct with caution!")
 		if(!do_after(user, 3 SECONDS, src))
 			return
@@ -120,7 +120,7 @@
 	data["on"] = on
 	data["gas_transfer_rate"] = gas_transfer_rate
 	var/list/bluespace_gasdata = list()
-	if(bluespace_network.total_moles())
+	if(bluespace_network.getMoles())
 		for(var/gas_id in bluespace_network.gases)
 			bluespace_gasdata.Add(list(list(
 			"name" = bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
@@ -170,8 +170,8 @@
 			. = TRUE
 
 		if("retrieve")
-			if(bluespace_network.total_moles() > 0)
-				var/datum/gas_mixture/remove = bluespace_network.remove(bluespace_network.total_moles())
+			if(bluespace_network.getMoles() > 0)
+				var/datum/gas_mixture/remove = bluespace_network.remove(bluespace_network.getMoles())
 				airs[1].merge(remove)
 				update_parents()
 				bluespace_network.garbage_collect()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index f7214b4d203..470087c5e84 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -272,7 +272,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 
 	var/datum/gas_mixture/air1 = airs[1]
 
-	if(air1.total_moles() > CRYO_MIN_GAS_MOLES)
+	if(air1.getMoles() > CRYO_MIN_GAS_MOLES)
 		if(beaker)
 			beaker.reagents.trans_to(occupant, (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * delta_time, efficiency * CRYO_MULTIPLY_FACTOR, methods = VAPOR) // Transfer reagents.
 			consume_gas = TRUE
@@ -287,7 +287,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 	var/datum/gas_mixture/air1 = airs[1]
 
 	/* PARIAH EDIT REMOVAL - HUGBOX BARGAGE
-	if(!nodes[1] || !airs[1] || !air1.gas.len || air1.total_moles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work.
+	if(!nodes[1] || !airs[1] || !air1.gas.len || air1.getMoles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work.
 		var/msg = "Insufficient cryogenic gas, shutting down."
 		radio.talk_into(src, msg, radio_channel)
 		set_on(FALSE)
@@ -304,7 +304,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 			cold_protection = H.get_cold_protection(air1.temperature)
 
 		if(abs(temperature_delta) > 1)
-			var/air_heat_capacity = air1.heat_capacity()
+			var/air_heat_capacity = air1.getHeatCapacity()
 
 			var/heat = ((1 - cold_protection) * 0.1 + conduction_coefficient) * temperature_delta * (air_heat_capacity * heat_capacity / (air_heat_capacity + heat_capacity))
 
@@ -327,7 +327,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 		return null
 	var/datum/gas_mixture/air1 = airs[1]
 	var/breath_percentage = breath_request / air1.volume
-	return air1.remove(air1.total_moles() * breath_percentage)
+	return air1.remove(air1.getMoles() * breath_percentage)
 
 /obj/machinery/atmospherics/components/unary/cryo_cell/assume_air(datum/gas_mixture/giver)
 	airs[1].merge(giver)
@@ -539,10 +539,10 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 /obj/machinery/atmospherics/components/unary/cryo_cell/can_see_pipes()
 	return FALSE // you can't see the pipe network when inside a cryo cell.
 
-/obj/machinery/atmospherics/components/unary/cryo_cell/return_temperature()
+/obj/machinery/atmospherics/components/unary/cryo_cell/getTemperature()
 	var/datum/gas_mixture/G = airs[1]
 
-	if(G.total_moles() > 10)
+	if(G.getMoles() > 10)
 		return G.temperature
 	return ..()
 
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 887bd167a35..21bfb75214a 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
@@ -62,8 +62,8 @@
 	var/datum/gas_mixture/air_contents = airs[1]
 	var/datum/gas_mixture/partnerair_contents = partner.airs[1]
 
-	var/air_heat_capacity = air_contents.heat_capacity()
-	var/other_air_heat_capacity = partnerair_contents.heat_capacity()
+	var/air_heat_capacity = air_contents.getHeatCapacity()
+	var/other_air_heat_capacity = partnerair_contents.getHeatCapacity()
 	var/combined_heat_capacity = other_air_heat_capacity + air_heat_capacity
 
 	var/old_temperature = air_contents.temperature
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 2b29c650fc3..5cad9c733b3 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
@@ -55,7 +55,7 @@
 	var/datum/gas_mixture/air_contents = airs[1]
 
 	if(air_contents.temperature > 0)
-		var/transfer_moles = (air_contents.return_pressure() * volume_rate) / (air_contents.temperature * R_IDEAL_GAS_EQUATION)
+		var/transfer_moles = (air_contents.returnPressure() * volume_rate) / (air_contents.temperature * R_IDEAL_GAS_EQUATION)
 
 		if(!transfer_moles)
 			return
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 4ce799398aa..5823dbe390a 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -143,10 +143,10 @@
 	// The gas we want to cool/heat
 	var/datum/gas_mixture/port = airs[1]
 
-	if(!port.total_moles()) // Nothing to cool? go home lad
+	if(!port.getMoles()) // Nothing to cool? go home lad
 		return
 
-	var/port_capacity = port.heat_capacity()
+	var/port_capacity = port.getHeatCapacity()
 
 	// The difference between target and what we need to heat/cool. Positive if heating, negative if cooling.
 	var/temperature_target_delta = target_temperature - port.temperature
@@ -269,7 +269,7 @@
 
 	var/datum/gas_mixture/port = airs[1]
 	data["temperature"] = port.temperature
-	data["pressure"] = port.return_pressure()
+	data["pressure"] = port.returnPressure()
 	return data
 
 /obj/machinery/atmospherics/components/unary/thermomachine/ui_act(action, params)
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 8a25fd86da3..b616ffb70c9 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -106,7 +106,7 @@
 		return
 	var/datum/gas_mixture/air_contents = airs[1]
 	var/datum/gas_mixture/environment = us.return_air()
-	var/environment_pressure = environment.return_pressure()
+	var/environment_pressure = environment.returnPressure()
 
 	if(pump_direction & RELEASING) // internal -> external
 		var/pressure_delta = 10000
@@ -114,14 +114,14 @@
 		if(pressure_checks&EXT_BOUND)
 			pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure))
 		if(pressure_checks&INT_BOUND)
-			pressure_delta = min(pressure_delta, (air_contents.return_pressure() - internal_pressure_bound))
+			pressure_delta = min(pressure_delta, (air_contents.returnPressure() - internal_pressure_bound))
 
 		if(pressure_delta > 0)
 			if(air_contents.temperature > 0)
 				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())
+				if(!removed || !removed.getMoles())
 					return
 
 				loc.assume_air(removed)
@@ -132,14 +132,14 @@
 		if(pressure_checks&EXT_BOUND)
 			pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound))
 		if(pressure_checks&INT_BOUND)
-			pressure_delta = min(pressure_delta, (internal_pressure_bound - air_contents.return_pressure()))
+			pressure_delta = min(pressure_delta, (internal_pressure_bound - air_contents.returnPressure()))
 
 		if(pressure_delta > 0 && environment.temperature > 0)
 			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(!removed || !removed.total_moles()) //No venting from space 4head
+			if(!removed || !removed.getMoles()) //No venting from space 4head
 				return
 
 			air_contents.merge(removed)
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 debb3bffdcf..977134d2fda 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -226,7 +226,7 @@
 	var/datum/gas_mixture/environment = tile.return_air()
 	var/datum/gas_mixture/air_contents = airs[1]
 
-	if(air_contents.return_pressure() >= 50 * ONE_ATMOSPHERE)
+	if(air_contents.returnPressure() >= 50 * ONE_ATMOSPHERE)
 		return FALSE
 
 	if(scrubbing == SCRUBBING)
@@ -236,7 +236,7 @@
 			filtered_out.temperature = environment.temperature
 
 			var/total_moles_to_remove = 0
-			for(var/gas in filter_types & environment.get_gases())
+			for(var/gas in filter_types & environment.getGases())
 				total_moles_to_remove += environment.gas[gas]
 
 			if(total_moles_to_remove == 0)//sometimes this gets non gc'd values
@@ -254,7 +254,7 @@
 
 	else //Just siphoning all air
 
-		var/transfer_moles = environment.total_moles() * (volume_rate / environment.volume)
+		var/transfer_moles = environment.getMoles() * (volume_rate / environment.volume)
 
 		var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
 
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index 964e364ff77..6e9098c571c 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -182,12 +182,12 @@
 	for(var/obj/machinery/atmospherics/pipe/member in members)
 		member.air_temporary = new
 		member.air_temporary.volume = member.volume
-		member.air_temporary.copy_from(air, member.volume / air.volume)
+		member.air_temporary.copyFrom(air, member.volume / air.volume)
 
 		member.air_temporary.temperature = air.temperature
 
 /datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
-	var/total_heat_capacity = air.heat_capacity()
+	var/total_heat_capacity = air.getHeatCapacity()
 	var/partial_heat_capacity = total_heat_capacity * (share_volume / air.volume)
 	var/target_temperature
 	var/target_heat_capacity
@@ -250,10 +250,10 @@
 	var/list/total_gas = list()
 	for(var/datum/gas_mixture/gasmix in gases)
 		total_volume += gasmix.volume
-		var/temp_heatcap = gasmix.heat_capacity()
+		var/temp_heatcap = gasmix.getHeatCapacity()
 		total_thermal_energy += gasmix.temperature * temp_heatcap
 		total_heat_capacity += temp_heatcap
-		for(var/g in gasmix.get_gases())
+		for(var/g in gasmix.getGases())
 			total_gas[g] += gasmix.gas[g]
 
 	if(total_volume > 0)
@@ -263,13 +263,13 @@
 		//Calculate temperature
 		if(total_heat_capacity > 0)
 			combined.temperature = total_thermal_energy / total_heat_capacity
-		combined.update_values()
+		combined.updateValues()
 
 		//Allow for reactions
 		combined.react()
 
 		//Average out the gases
-		for(var/g in combined.get_gases())
+		for(var/g in combined.getGases())
 			combined.gas[g] /= total_volume
 
 		//Update individual gas_mixtures
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 12d1c0cc355..c32aff0eb6d 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -60,7 +60,7 @@
 		icon_state = "meter0"
 		return FALSE
 
-	var/env_pressure = pipe_air.return_pressure()
+	var/env_pressure = pipe_air.returnPressure()
 	if(env_pressure <= 0.15 * ONE_ATMOSPHERE)
 		icon_state = "meter0"
 	else if(env_pressure <= 1.8 * ONE_ATMOSPHERE)
@@ -106,7 +106,7 @@
 	if (target)
 		var/datum/gas_mixture/pipe_air = target.return_air()
 		if(pipe_air)
-			. = "The pressure gauge reads [round(pipe_air.return_pressure(), 0.01)] kPa; [round(pipe_air.temperature,0.01)] K ([round(pipe_air.temperature-T0C,0.01)]&deg;C)."
+			. = "The pressure gauge reads [round(pipe_air.returnPressure(), 0.01)] kPa; [round(pipe_air.temperature,0.01)] K ([round(pipe_air.temperature-T0C,0.01)]&deg;C)."
 		else
 			. = "The sensor error light is blinking."
 	else
@@ -178,7 +178,7 @@
 	if(!connected_meter)
 		return
 	var/datum/gas_mixture/environment = connected_meter.target.return_air()
-	pressure.set_output(environment.return_pressure())
+	pressure.set_output(environment.returnPressure())
 	net_temperature.set_output(environment.temperature)
 
 // TURF METER - REPORTS A TILE'S AIR CONTENTS
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 1fc59fac0dd..3ee63ba898e 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -56,11 +56,11 @@
 		set_broken(TRUE)
 		return FALSE
 	var/datum/gas_mixture/G = OT.return_air()
-	if(G.return_pressure() > (max_ext_kpa - ((spawn_mol*spawn_temp*R_IDEAL_GAS_EQUATION)/(CELL_VOLUME))))
+	if(G.returnPressure() > (max_ext_kpa - ((spawn_mol*spawn_temp*R_IDEAL_GAS_EQUATION)/(CELL_VOLUME))))
 		broken_message = span_boldwarning("EXTERNAL PRESSURE OVER THRESHOLD")
 		set_broken(TRUE)
 		return FALSE
-	if(G.total_moles() > max_ext_mol)
+	if(G.getMoles() > max_ext_mol)
 		broken_message = span_boldwarning("EXTERNAL AIR CONCENTRATION OVER THRESHOLD")
 		set_broken(TRUE)
 		return FALSE
@@ -84,7 +84,7 @@
 		active_power_usage = idle_power_usage
 	var/turf/T = get_turf(src)
 	var/datum/gas_mixture/G = T.return_air()
-	var/P = G.return_pressure()
+	var/P = G.returnPressure()
 	switch(power_draw)
 		if(GASMINER_POWER_NONE)
 			update_use_power(ACTIVE_POWER_USE, 0)
@@ -134,7 +134,7 @@
 	if(!isopenturf(O))
 		return FALSE
 	var/datum/gas_mixture/merger = new
-	merger.adjust_gas_temp(spawn_id, spawn_mol * delta_time, spawn_temp)
+	merger.adjustGasWithTemp(spawn_id, spawn_mol * delta_time, spawn_temp)
 	O.assume_air(merger)
 
 /obj/machinery/atmospherics/miner/attack_ai(mob/living/silicon/user)
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index 373689d9e13..d63ff0b2e24 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -39,7 +39,7 @@
 
 	//heatup/cooldown any mobs buckled to ourselves based on our temperature
 	if(has_buckled_mobs())
-		var/hc = pipe_air.heat_capacity()
+		var/hc = pipe_air.getHeatCapacity()
 		var/mob/living/heat_source = buckled_mobs[1]
 		//Best guess-estimate of the total bodytemperature of all the mobs, since they share the same environment it's ~ok~ to guess like this
 		var/avg_temp = (pipe_air.temperature * hc + (heat_source.bodytemperature * buckled_mobs.len) * 3500) / (hc + (buckled_mobs ? buckled_mobs.len * 3500 : 0))
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index a2c111360e8..64b540ecd1a 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -101,7 +101,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		internal_cell = new /obj/item/stock_parts/cell/high(src)
 
 	if(existing_mixture)
-		air_contents.copy_from(existing_mixture)
+		air_contents.copyFrom(existing_mixture)
 	else
 		create_gas()
 
@@ -310,8 +310,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	greyscale_colors = "#9fba6c#3d4680"
 
 /obj/machinery/portable_atmospherics/canister/anesthetic_mix/create_gas()
-	air_contents.adjust_gas(GAS_OXYGEN, (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
-	air_contents.adjust_gas(GAS_N2O, (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjustGas(GAS_OXYGEN, (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjustGas(GAS_N2O, (N2O_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	SSairmachines.start_processing_machine(src)
 
 /**
@@ -363,12 +363,12 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		return
 	if(starter_temp)
 		air_contents.temperature = starter_temp
-	air_contents.adjust_gas(gas_type,(maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjustGas(gas_type,(maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/air/create_gas()
-	air_contents.adjust_gas(GAS_OXYGEN, (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
-	air_contents.adjust_gas(GAS_NITROGEN, (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjustGas(GAS_OXYGEN, (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
+	air_contents.adjustGas(GAS_NITROGEN, (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
 	SSairmachines.start_processing_machine(src)
 
 /obj/machinery/portable_atmospherics/canister/update_icon_state()
@@ -395,7 +395,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	if(connected_port)
 		. += mutable_appearance(canister_overlay_file, "can-connector")
 
-	var/air_pressure = air_contents.return_pressure()
+	var/air_pressure = air_contents.returnPressure()
 
 	switch(air_pressure)
 		if((40 * ONE_ATMOSPHERE) to INFINITY)
@@ -427,7 +427,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	cut_overlay(window)
 	window = image(icon, icon_state="window-base", layer=FLOAT_LAYER)
 	var/list/window_overlays = list()
-	/*for(var/visual in air_contents.return_visuals())
+	/*for(var/visual in air_contents.returnVisuals())
 		var/image/new_visual = image(visual, layer=FLOAT_LAYER)
 		new_visual.filters = alpha_filter
 		window_overlays += new_visual*/
@@ -492,7 +492,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	. = ..()
 	if(!I.tool_start_check(user, amount=0))
 		return TRUE
-	var/pressure = air_contents.return_pressure()
+	var/pressure = air_contents.returnPressure()
 	if(pressure > 300)
 		to_chat(user, span_alert("The pressure gauge on [src] indicates a high pressure inside... maybe you want to reconsider?"))
 		message_admins("[src] deconstructed by [ADMIN_LOOKUPFLW(user)]")
@@ -543,7 +543,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
  */
 /obj/machinery/portable_atmospherics/canister/proc/canister_break()
 	disconnect()
-	var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.total_moles())
+	var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.getMoles())
 	var/turf/T = get_turf(src)
 	T.assume_air(expelled_gas)
 
@@ -572,8 +572,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 
 /obj/machinery/portable_atmospherics/canister/process(delta_time)
 
-	var/our_pressure = air_contents.return_pressure()
-	var/our_temperature = air_contents.return_temperature()
+	var/our_pressure = air_contents.returnPressure()
+	var/our_temperature = air_contents.getTemperature()
 
 	protected_contents = FALSE
 	if(shielding_powered)
@@ -608,7 +608,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		else
 			environment = location.return_air()
 
-		var/env_pressure = environment.return_pressure()
+		var/env_pressure = environment.returnPressure()
 		var/pressure_delta = release_pressure - env_pressure
 
 		if((air_contents.temperature > 0) && (pressure_delta > 0))
@@ -619,8 +619,8 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 
 	air_contents.react()
 
-	var/our_pressure = air_contents.return_pressure()
-	var/our_temperature = air_contents.return_temperature()
+	var/our_pressure = air_contents.returnPressure()
+	var/our_temperature = air_contents.getTemperature()
 
 	///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(!protected_contents && (our_temperature > heat_limit || our_pressure > pressure_limit))
@@ -650,7 +650,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 /obj/machinery/portable_atmospherics/canister/ui_data()
 	. = list(
 		"portConnected" = !!connected_port,
-		"tankPressure" = round(air_contents.return_pressure()),
+		"tankPressure" = round(air_contents.returnPressure()),
 		"releasePressure" = round(release_pressure),
 		"valveOpen" = !!valve_open,
 		"isPrototype" = !!prototype,
@@ -673,7 +673,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		. += list(
 			"holdingTank" = list(
 				"name" = holding.name,
-				"tankPressure" = round(holding_mix.return_pressure())
+				"tankPressure" = round(holding_mix.returnPressure())
 			)
 		)
 	. += list(
@@ -741,7 +741,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 				if(!holding)
 					var/list/gaseslog = list() //list for logging all gases in canister
 					for(var/gas in air_contents.gas)
-						gaseslog[xgm_gas_data.name[gas]] = air_contents.get_gas(gas)	//adds gases to gaseslog
+						gaseslog[xgm_gas_data.name[gas]] = air_contents.getGroupGas(gas)	//adds gases to gaseslog
 						if(!(xgm_gas_data.flags[gas] & XGM_GAS_CONTAMINANT|XGM_GAS_FUEL))
 							continue
 						danger = TRUE //at least 1 danger gas
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 73915fb4ede..3d1372c44e9 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -44,8 +44,8 @@
 		. += "siphon-connector"
 
 /obj/machinery/portable_atmospherics/pump/process_atmos()
-	var/pressure = air_contents.return_pressure()
-	var/temperature = air_contents.return_temperature()
+	var/pressure = air_contents.returnPressure()
+	var/temperature = air_contents.getTemperature()
 	///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)
@@ -68,11 +68,11 @@
 		environment = local_turf.return_air()
 
 	if(direction == PUMP_OUT)
-		pressure_delta = target_pressure - environment.return_pressure()
+		pressure_delta = target_pressure - environment.returnPressure()
 		output_volume = environment.volume * environment.group_multiplier
 		air_temperature = environment.temperature? environment.temperature : air_contents.temperature
 	else
-		pressure_delta = environment.return_pressure() - target_pressure
+		pressure_delta = environment.returnPressure() - target_pressure
 		output_volume = air_contents.volume * air_contents.group_multiplier
 		air_temperature = air_contents.temperature? air_contents.temperature : environment.temperature
 
@@ -124,7 +124,7 @@
 	data["on"] = on
 	data["direction"] = direction == PUMP_IN ? TRUE : FALSE
 	data["connected"] = connected_port ? TRUE : FALSE
-	data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
+	data["pressure"] = round(air_contents.returnPressure() ? air_contents.returnPressure() : 0)
 	data["target_pressure"] = round(target_pressure ? target_pressure : 0)
 	data["default_pressure"] = round(PUMP_DEFAULT_PRESSURE)
 	data["min_pressure"] = round(PUMP_MIN_PRESSURE)
@@ -134,7 +134,7 @@
 		data["holding"] = list()
 		data["holding"]["name"] = holding.name
 		var/datum/gas_mixture/holding_mix = holding.return_air()
-		data["holding"]["pressure"] = round(holding_mix.return_pressure())
+		data["holding"]["pressure"] = round(holding_mix.returnPressure())
 	else
 		data["holding"] = null
 	return data
@@ -149,8 +149,8 @@
 			if(on)
 				SSairmachines.start_processing_machine(src)
 			if(on && !holding)
-				var/plasma = air_contents.get_gas(GAS_PLASMA)
-				var/n2o = air_contents.get_gas(GAS_N2O)
+				var/plasma = air_contents.getGroupGas(GAS_PLASMA)
+				var/n2o = air_contents.getGroupGas(GAS_N2O)
 				if(n2o || plasma)
 					message_admins("[ADMIN_LOOKUPFLW(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [ADMIN_VERBOSEJMP(src)]")
 					log_admin("[key_name(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [AREACOORD(src)]")
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index ebf98047755..1bc15f5519b 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -44,8 +44,8 @@
 		. += "scrubber-connector"
 
 /obj/machinery/portable_atmospherics/scrubber/process_atmos()
-	var/pressure = air_contents.return_pressure()
-	var/temperature = air_contents.return_temperature()
+	var/pressure = air_contents.returnPressure()
+	var/temperature = air_contents.getTemperature()
 	///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)
@@ -69,7 +69,7 @@
  * * mixture: the gas mixture to be scrubbed
  */
 /obj/machinery/portable_atmospherics/scrubber/proc/scrub(datum/gas_mixture/mixture)
-	if(air_contents.return_pressure() >= overpressure_m * ONE_ATMOSPHERE)
+	if(air_contents.returnPressure() >= overpressure_m * ONE_ATMOSPHERE)
 		return
 
 	var/transfer_moles = min(1, volume_rate/mixture.volume)*mixture.total_moles
@@ -106,7 +106,7 @@
 	var/data = list()
 	data["on"] = on
 	data["connected"] = connected_port ? 1 : 0
-	data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
+	data["pressure"] = round(air_contents.returnPressure() ? air_contents.returnPressure() : 0)
 
 	data["id_tag"] = -1 //must be defined in order to reuse code between portable and vent scrubbers
 	data["filter_types"] = list()
@@ -117,7 +117,7 @@
 		data["holding"] = list()
 		data["holding"]["name"] = holding.name
 		var/datum/gas_mixture/holding_mix = holding.return_air()
-		data["holding"]["pressure"] = round(holding_mix.return_pressure())
+		data["holding"]["pressure"] = round(holding_mix.returnPressure())
 	else
 		data["holding"] = null
 	return data
diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm
index 4ed14e40d11..29a349c598f 100644
--- a/code/modules/cargo/bounties/engineering.dm
+++ b/code/modules/cargo/bounties/engineering.dm
@@ -11,9 +11,9 @@
 		return FALSE
 	var/obj/item/tank/T = O
 	var/datum/gas_mixture/our_mix = T.return_air()
-	if(!our_mix.get_gas(gas_type))
+	if(!our_mix.getGroupGas(gas_type))
 		return FALSE
-	return our_mix.get_gas(gas_type) >= moles_required
+	return our_mix.getGroupGas(gas_type) >= moles_required
 
 /datum/bounty/item/engineering/gas/nitrium_tank
 	name = "Full Tank of Nitrium"
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index cc0948b1902..2d4c4b227f8 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -109,8 +109,8 @@
 	var/list/gases_to_check = GLOB.all_gases
 
 	for(var/gasID in gases_to_check)
-		if(canister_mix.get_gas(gasID) > 0)
-			worth += get_gas_value(gasID, canister_mix.get_gas(gasID))
+		if(canister_mix.getGroupGas(gasID) > 0)
+			worth += get_gas_value(gasID, canister_mix.getGroupGas(gasID))
 
 	return worth
 
diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm
index 6aa40cb46c2..ff59a4f8163 100644
--- a/code/modules/clothing/masks/gas_filter.dm
+++ b/code/modules/clothing/masks/gas_filter.dm
@@ -56,27 +56,27 @@
 
 	for(var/gas_id in breath.gas)
 		if(gas_id in high_filtering_gases)
-			if(breath.get_gas(gas_id) > HIGH_FILTERING_MOLES)
-				breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(breath.getGroupGas(gas_id) > HIGH_FILTERING_MOLES)
+				breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 0.5
 				continue
-			breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.05
 			continue
 		if(gas_id in mid_filtering_gases)
-			if(breath.get_gas(gas_id) > MID_FILTERING_MOLES)
-				breath.get_gas(gas_id) = max(breath.get_gas(gas_id)- filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(breath.getGroupGas(gas_id) > MID_FILTERING_MOLES)
+				breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id)- filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 0.75
 				continue
-			breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.15
 			continue
 		if(gas_id in low_filtering_gases)
-			if(breath.get_gas(gas_id)> LOW_FILTERING_MOLES)
-				breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(breath.getGroupGas(gas_id)> LOW_FILTERING_MOLES)
+				breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 1
 				continue
-			breath.get_gas(gas_id) = max(breath.get_gas(gas_id) - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.5
 			continue
 
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index 875a54903bd..330ab7a00bc 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -259,7 +259,7 @@
 
 /obj/item/clothing/head/helmet/space/suicide_act(mob/living/carbon/user)
 	var/datum/gas_mixture/environment = user.loc.return_air()
-	if(HAS_TRAIT(user, TRAIT_RESISTCOLD) || !environment || environment.return_temperature() >= user.get_body_temp_cold_damage_limit())
+	if(HAS_TRAIT(user, TRAIT_RESISTCOLD) || !environment || environment.getTemperature() >= user.get_body_temp_cold_damage_limit())
 		user.visible_message(span_suicide("[user] is beating [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
 		return BRUTELOSS
 	user.say("You want proof? I'll give you proof! Here's proof of what'll happen to you if you stay here with your stuff!", forced = "space helmet suicide")
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index 09d4bbb71e7..e8a0cc199cd 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -265,9 +265,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.get_gas(GAS_OXYGEN))
+		if(!gas_mix.getGroupGas(GAS_OXYGEN))
 			return
-		gas_mix.gas[GAS_OXYGEN] = max(gas_mix.get_gas(GAS_OXYGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.gas[GAS_OXYGEN] = max(gas_mix.getGroupGas(GAS_OXYGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/nitro_eater
 	name = "Nitrogen consuming"
@@ -279,9 +279,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.get_gas(GAS_NITROGEN))
+		if(!gas_mix.getGroupGas(GAS_NITROGEN))
 			return
-		gas_mix.gas[GAS_NITROGEN] = max(gas_mix.get_gas(GAS_NITROGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.gas[GAS_NITROGEN] = max(gas_mix.getGroupGas(GAS_NITROGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/carbondioxide_eater
 	name = "CO2 consuming"
@@ -293,9 +293,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.get_gas(GAS_OXYGEN))
+		if(!gas_mix.getGroupGas(GAS_OXYGEN))
 			return
-		gas_mix.gas[GAS_CO2] = max(gas_mix.get_gas(GAS_CO2) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.gas[GAS_CO2] = max(gas_mix.getGroupGas(GAS_CO2) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/plasma_eater
 	name = "Plasma consuming"
@@ -307,9 +307,9 @@
 	var/turf/open/floor/turf = holder.loc
 	if(istype(turf))
 		var/datum/gas_mixture/gas_mix = turf.air
-		if(!gas_mix.get_gas(GAS_PLASMA))
+		if(!gas_mix.getGroupGas(GAS_PLASMA))
 			return
-		gas_mix.gas[GAS_PLASMA] = max(gas_mix.get_gas(GAS_PLASMA) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.gas[GAS_PLASMA] = max(gas_mix.getGroupGas(GAS_PLASMA) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
 
 /datum/spacevine_mutation/thorns
 	name = "Thorny"
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index e413cf7438c..56232c8058f 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -135,7 +135,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
 			if(V == "air")
 				var/turf/open/O1 = B
 				var/turf/open/O2 = T
-				O1.air.copy_from(O2.return_air())
+				O1.air.copyFrom(O2.return_air())
 				continue
 			B.vars[V] = T.vars[V]
 		toupdate += B
diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm
index 225eef969fe..c0f632cb62a 100644
--- a/code/modules/hydroponics/unique_plant_genes.dm
+++ b/code/modules/hydroponics/unique_plant_genes.dm
@@ -622,11 +622,11 @@
 		return
 
 	var/turf/tray_turf = get_turf(tray)
-	if(abs(ONE_ATMOSPHERE - tray_turf.return_air().return_pressure()) > (seed.potency / 10 + 10)) // clouds can begin showing at around 50-60 potency in standard atmos
+	if(abs(ONE_ATMOSPHERE - tray_turf.return_air().returnPressure()) > (seed.potency / 10 + 10)) // clouds can begin showing at around 50-60 potency in standard atmos
 		return
 
 	var/datum/gas_mixture/stank = new
-	stank.adjust_gas(GAS_METHANE, (seed.yield + 6) * 3.5 * MIASMA_CORPSE_MOLES * delta_time) // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses
+	stank.adjustGas(GAS_METHANE, (seed.yield + 6) * 3.5 * MIASMA_CORPSE_MOLES * delta_time) // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses
 	stank.temperature = T20C // without this the room would eventually freeze and miasma mining would be easier
 	tray_turf.assume_air(stank)
 
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 67b89bd6b4c..dbfa064f262 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
 
 
 /mob/living/carbon/alien/humanoid/check_breath(datum/gas_mixture/breath)
-	if(breath && breath.total_moles() > 0 && !sneaking)
+	if(breath && breath.getMoles() > 0 && !sneaking)
 		playsound(get_turf(src), pick('sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg'), 50, FALSE, -5)
 	..()
 
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 67fe76feebc..7408cbcc100 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -6,7 +6,7 @@
 	if(status_flags & GODMODE)
 		return
 
-	if(!breath || (breath.total_moles() == 0))
+	if(!breath || (breath.getMoles() == 0))
 		//Aliens breathe in vaccuum
 		return 0
 
@@ -15,23 +15,23 @@
 
 	var/plasma_used = 0
 	var/plas_detect_threshold = 0.02
-	var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
+	var/breath_pressure = (breath.getMoles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
 
 	//Partial pressure of the plasma in our breath
-	var/Plasma_pp = (breath.get_gas(GAS_PLASMA)/breath.total_moles())*breath_pressure
+	var/Plasma_pp = (breath.getGroupGas(GAS_PLASMA)/breath.getMoles())*breath_pressure
 
 	if(Plasma_pp > plas_detect_threshold) // Detect plasma in air
-		adjustPlasma(breath.get_gas(GAS_PLASMA)*250)
+		adjustPlasma(breath.getGroupGas(GAS_PLASMA)*250)
 		throw_alert(ALERT_XENO_PLASMA, /atom/movable/screen/alert/alien_plas)
 
-		plasma_used = breath.get_gas(GAS_PLASMA)
+		plasma_used = breath.getGroupGas(GAS_PLASMA)
 
 	else
 		clear_alert(ALERT_XENO_PLASMA)
 
 	//Breathe in plasma and out oxygen
-	breath.adjust_gas(GAS_PLASMA, -plasma_used)
-	breath.adjust_gas(GAS_OXYGEN, plasma_used)
+	breath.adjustGas(GAS_PLASMA, -plasma_used)
+	breath.adjustGas(GAS_OXYGEN, plasma_used)
 	//BREATH TEMPERATURE
 	handle_breath_temperature(breath)
 
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index b9248b8e037..acd58215ac5 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -82,7 +82,7 @@
 		else
 			. += ""
 			. += "Internal Atmosphere Info: [internal.name]"
-			. += "Tank Pressure: [internal_air.return_pressure()]"
+			. += "Tank Pressure: [internal_air.returnPressure()]"
 			. += "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/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index f928edb7c68..36fd0e5e952 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1664,7 +1664,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
 
 /// Handle the air pressure of the environment
 /datum/species/proc/handle_environment_pressure(mob/living/carbon/human/H, datum/gas_mixture/environment, delta_time, times_fired)
-	var/pressure = environment.return_pressure()
+	var/pressure = environment.returnPressure()
 	var/adjusted_pressure = H.calculate_affecting_pressure(pressure)
 
 	// Set alerts and apply damage based on the amount of pressure
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 3b11d3b4818..056f6beac98 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -73,12 +73,12 @@
 		return
 	if(!atmos_sealed && (!istype(H.w_uniform, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman) || !istype(H.gloves, /obj/item/clothing/gloves)))
 		var/datum/gas_mixture/environment = H.loc.return_air()
-		if(environment?.total_moles())
+		if(environment?.getMoles())
 			/*if(environment.gases[/datum/gas/hypernoblium] && (environment.gases[/datum/gas/hypernoblium][MOLES]) >= 5)
 				if(H.on_fire && H.fire_stacks > 0)
 					H.adjust_fire_stacks(-10 * delta_time)*/
 			if(!HAS_TRAIT(H, TRAIT_NOFIRE) && !HAS_TRAIT(H, TRAIT_NOSELFIGNITION))
-				if(environment.has_gas(GAS_OXYGEN, 1)) //Same threshhold that extinguishes fire
+				if(environment.hasGas(GAS_OXYGEN, 1)) //Same threshhold that extinguishes fire
 					H.adjust_fire_stacks(0.25 * delta_time)
 					if(!H.on_fire && H.fire_stacks > 0)
 						H.visible_message(span_danger("[H]'s body reacts with the atmosphere and bursts into flames!"),span_userdanger("Your body reacts with the atmosphere and bursts into flame!"))
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 4b1f085542e..a02a3b748fa 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -108,7 +108,7 @@
 			else if(isturf(loc)) //Breathe from loc as turf
 				var/breath_moles = 0
 				if(environment)
-					breath_moles = environment.total_moles()*BREATH_PERCENTAGE
+					breath_moles = environment.getMoles()*BREATH_PERCENTAGE
 
 				breath = loc.remove_air(breath_moles)
 		else //Breathe from loc as obj again
@@ -128,12 +128,12 @@
 				// Little bit of sanity so we aren't trying to add 0.0000000001 units of CO2, and so we don't end up with 99999 units of CO2.
 				if(reagent_amount >= 0.05)
 					reagents.add_reagent(breathed_product, reagent_amount)
-					breath.adjust_gas(gasname, -breath.gas[gasname], update = 0) //update after
+					breath.adjustGas(gasname, -breath.gas[gasname], update = 0) //update after
 
 	check_breath(breath)
 
 	if(breath)
-		breath.update_values()
+		breath.updateValues()
 		loc.assume_air(breath)
 
 /mob/living/carbon/proc/has_smoke_protection()
@@ -200,8 +200,8 @@
 		oxygen_used = breath_gases[GAS_OXYGEN]
 		clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
 
-	breath.adjust_gas(GAS_OXYGEN, -oxygen_used, update = 0)
-	breath.adjust_gas(GAS_CO2, oxygen_used, update = 0)
+	breath.adjustGas(GAS_OXYGEN, -oxygen_used, update = 0)
+	breath.adjustGas(GAS_CO2, oxygen_used, update = 0)
 
 	//CARBON DIOXIDE
 	if(CO2_partialpressure > safe_co2_max)
@@ -250,7 +250,7 @@
 	//BZ (Facepunch port of their Agent B)
 	/*
 	if(breath_gases[/datum/gas/bz])
-		var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.total_moles())*breath_pressure
+		var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.getMoles())*breath_pressure
 		if(bz_partialpressure > 1)
 			hallucination += 10
 		else if(bz_partialpressure > 0.01)
@@ -259,7 +259,7 @@
 	//NITRIUM
 	/*
 	if(breath_gases[/datum/gas/nitrium])
-		var/nitrium_partialpressure = (breath_gases[/datum/gas/nitrium][MOLES]/breath.total_moles())*breath_pressure
+		var/nitrium_partialpressure = (breath_gases[/datum/gas/nitrium][MOLES]/breath.getMoles())*breath_pressure
 		if(nitrium_partialpressure > 0.5)
 			adjustFireLoss(nitrium_partialpressure * 0.15)
 		if(nitrium_partialpressure > 5)
@@ -267,12 +267,12 @@
 
 	//FREON
 	if(breath_gases[/datum/gas/freon])
-		var/freon_partialpressure = (breath_gases[/datum/gas/freon][MOLES]/breath.total_moles())*breath_pressure
+		var/freon_partialpressure = (breath_gases[/datum/gas/freon][MOLES]/breath.getMoles())*breath_pressure
 		adjustFireLoss(freon_partialpressure * 0.25)
 
 	//MIASMA
 	if(breath_gases[/datum/gas/miasma])
-		var/miasma_partialpressure = (breath_gases[/datum/gas/miasma][MOLES]/breath.total_moles())*breath_pressure
+		var/miasma_partialpressure = (breath_gases[/datum/gas/miasma][MOLES]/breath.getMoles())*breath_pressure
 
 		if(prob(1 * miasma_partialpressure))
 			var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(2,3)
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index b7245d9b6f2..0b3de9b55b8 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -121,7 +121,7 @@
 		extinguish_mob()
 		return TRUE //mob was put out, on_fire = FALSE via extinguish_mob(), no need to update everything down the chain.
 	var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
-	if(!G.has_gas(GAS_OXYGEN, 1))
+	if(!G.hasGas(GAS_OXYGEN, 1))
 		extinguish_mob() //If there's no oxygen in the tile we're on, put out the fire
 		return TRUE
 	var/turf/location = get_turf(src)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 10d312c653b..06038317da6 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1125,7 +1125,7 @@
 	var/loc_temp = environment ? environment.temperature : T0C
 	if(isobj(loc))
 		var/obj/oloc = loc
-		var/obj_temp = oloc.return_temperature()
+		var/obj_temp = oloc.getTemperature()
 		if(obj_temp != null)
 			loc_temp = obj_temp
 	else if(isspaceturf(get_turf(src)))
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 48b9fdf8ca0..d79923f707c 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -39,7 +39,7 @@
 /mob/living/proc/get_ear_protection()
 	var/turf/current_turf = get_turf(src)
 	var/datum/gas_mixture/environment = current_turf.return_air()
-	var/pressure = environment ? environment.return_pressure() : 0
+	var/pressure = environment ? environment.returnPressure() : 0
 	if(pressure < SOUND_MINIMUM_PRESSURE) //space is empty
 		return 1
 	return 0
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index a2b6f06d765..a6a219116b3 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -263,7 +263,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list(
 	//No screams in space, unless you're next to someone.
 	var/turf/T = get_turf(src)
 	var/datum/gas_mixture/environment = T.return_air()
-	var/pressure = (environment)? environment.return_pressure() : 0
+	var/pressure = (environment)? environment.returnPressure() : 0
 	if(pressure < SOUND_MINIMUM_PRESSURE && !HAS_TRAIT(H, TRAIT_SIGN_LANG))
 		message_range = 1
 
diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
index 2d48c3130f3..6e5873f385f 100644
--- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
@@ -116,9 +116,9 @@
 
 /mob/living/simple_animal/hostile/regalrat/handle_environment(datum/gas_mixture/environment)
 	. = ..()
-	if(stat == DEAD || !environment || !environment.get_gas(GAS_METHANE))
+	if(stat == DEAD || !environment || !environment.getGroupGas(GAS_METHANE))
 		return
-	var/miasma_percentage = environment.gas[GAS_METHANE] / environment.total_moles()
+	var/miasma_percentage = environment.gas[GAS_METHANE] / environment.getMoles()
 	if(miasma_percentage>=0.25)
 		heal_bodypart_damage(1)
 
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index e9bcf6f4fc6..323c2eb6b3f 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -56,13 +56,13 @@
 	if(!is_tree || !isopenturf(loc))
 		return
 	var/turf/open/T = src.loc
-	if(!T.air || !T.air.has_gas(GAS_CO2))
+	if(!T.air || !T.air.hasGas(GAS_CO2))
 		return
 
-	var/co2 = T.air.get_gas(GAS_CO2)
+	var/co2 = T.air.getGroupGas(GAS_CO2)
 	if(co2 > 0 && DT_PROB(13, delta_time))
 		var/amt = min(co2, 9)
-		T.air.adjust_gas(GAS_CO2, -amt)
+		T.air.adjustGas(GAS_CO2, -amt)
 		T.atmos_spawn_air(GAS_OXYGEN, amt)
 
 /mob/living/simple_animal/hostile/tree/AttackingTarget()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 182d6f615c7..6396d572acd 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -319,10 +319,10 @@
 		if(ST.air)
 			var/datum/gas_mixture/muhair = ST.return_air()
 
-			var/plas = muhair.get_gas(GAS_PLASMA)
-			var/oxy = muhair.get_gas(GAS_OXYGEN)
-			var/n2 = muhair.get_gas(GAS_NITROGEN)
-			var/co2 = muhair.get_gas(GAS_CO2)
+			var/plas = muhair.getGroupGas(GAS_PLASMA)
+			var/oxy = muhair.getGroupGas(GAS_OXYGEN)
+			var/n2 = muhair.getGroupGas(GAS_NITROGEN)
+			var/co2 = muhair.getGroupGas(GAS_CO2)
 
 			if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
 				. = FALSE
diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm
index 1e544408ae6..8a6246b8c5c 100644
--- a/code/modules/mob/living/simple_animal/slime/life.dm
+++ b/code/modules/mob/living/simple_animal/slime/life.dm
@@ -145,7 +145,7 @@
 	if(stat != DEAD)
 		var/bz_percentage =0
 		if(environment.gases[/datum/gas/bz])
-			bz_percentage = environment.gases[/datum/gas/bz][MOLES] / environment.total_moles()
+			bz_percentage = environment.gases[/datum/gas/bz][MOLES] / environment.getMoles()
 		var/stasis = (bz_percentage >= 0.05 && bodytemperature < (T0C + 100)) || force_stasis
 
 		switch(stat)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 4f5444e59dc..d9ec4e9bb9e 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -127,8 +127,8 @@
 	var/t = "[span_notice("Coordinates: [x],[y] ")]\n"
 	t += "[span_danger("Temperature: [environment.temperature] ")]\n"
 	for(var/id in environment.gas)
-		if(!environment.get_gas(id))
-			t+="[span_notice("[xgm_gas_data.name[environment.gas]]: [environment.get_gas(id)] ")]\n"
+		if(!environment.getGroupGas(id))
+			t+="[span_notice("[xgm_gas_data.name[environment.gas]]: [environment.getGroupGas(id)] ")]\n"
 
 	to_chat(usr, t)
 
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index c4fb0c2c9df..8cca877253d 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -53,8 +53,8 @@
 
 		if(cold_air && hot_air)
 
-			var/cold_air_heat_capacity = cold_air.heat_capacity()
-			var/hot_air_heat_capacity = hot_air.heat_capacity()
+			var/cold_air_heat_capacity = cold_air.getHeatCapacity()
+			var/hot_air_heat_capacity = hot_air.getHeatCapacity()
 
 			var/delta_temperature = hot_air.temperature - cold_air.temperature
 
@@ -116,11 +116,11 @@
 
 		t += "<B><font color='blue'>Cold loop</font></B><BR>"
 		t += "Temperature Inlet: [round(cold_circ_air2.temperature, 0.1)] K / Outlet: [round(cold_circ_air1.temperature, 0.1)] K<BR>"
-		t += "Pressure Inlet: [round(cold_circ_air2.return_pressure(), 0.1)] kPa /  Outlet: [round(cold_circ_air1.return_pressure(), 0.1)] kPa<BR>"
+		t += "Pressure Inlet: [round(cold_circ_air2.returnPressure(), 0.1)] kPa /  Outlet: [round(cold_circ_air1.returnPressure(), 0.1)] kPa<BR>"
 
 		t += "<B><font color='red'>Hot loop</font></B><BR>"
 		t += "Temperature Inlet: [round(hot_circ_air2.temperature, 0.1)] K / Outlet: [round(hot_circ_air1.temperature, 0.1)] K<BR>"
-		t += "Pressure Inlet: [round(hot_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.return_pressure(), 0.1)] kPa<BR>"
+		t += "Pressure Inlet: [round(hot_circ_air2.returnPressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.returnPressure(), 0.1)] kPa<BR>"
 
 		t += "</div>"
 	else if(!hot_circ && cold_circ)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index f45a52590a7..2a40addf9d9 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -331,7 +331,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 	data["SM_integrity"] = get_integrity_percent()
 	data["SM_power"] = power
 	data["SM_ambienttemp"] = air.temperature
-	data["SM_ambientpressure"] = air.return_pressure()
+	data["SM_ambientpressure"] = air.returnPressure()
 	data["SM_bad_moles_amount"] = MOLE_PENALTY_THRESHOLD / gasefficency
 	data["SM_moles"] = 0
 	data["SM_uid"] = uid
@@ -340,12 +340,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 
 	var/list/gasdata = list()
 
-	if(air.total_moles())
-		data["SM_moles"] = air.total_moles()
+	if(air.getMoles())
+		data["SM_moles"] = air.getMoles()
 		for(var/gasid in air.gases)
 			gasdata.Add(list(list(
 			"name"= air.gases[gasid][GAS_META][META_GAS_NAME],
-			"amount" = round(100*air.gases[gasid][MOLES]/air.total_moles(),0.01))))
+			"amount" = round(100*air.gases[gasid][MOLES]/air.getMoles(),0.01))))
 
 	else
 		for(var/gasid in air.gases)
@@ -653,7 +653,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 	var/turf/target_turf = get_turf(target)
 	var/pressure = 1
 	if(target_turf?.return_air())
-		pressure = max(1,target_turf.return_air().return_pressure())
+		pressure = max(1,target_turf.return_air().returnPressure())
 	//We get our range with the strength of the zap and the pressure, the higher the former and the lower the latter the better
 	var/new_range = clamp(zap_str / pressure * 10, 2, 7)
 	var/zap_count = 1
diff --git a/code/modules/power/supermatter/supermatter_process.dm b/code/modules/power/supermatter/supermatter_process.dm
index e5f7a0e98d1..fea9fa5303b 100644
--- a/code/modules/power/supermatter/supermatter_process.dm
+++ b/code/modules/power/supermatter/supermatter_process.dm
@@ -22,7 +22,7 @@
 	var/datum/gas_mixture/removed
 	if(produces_gas)
 		//Remove gas from surrounding area
-		removed = env.remove(gasefficency * env.total_moles())
+		removed = env.remove(gasefficency * env.getMoles())
 	else
 		// Pass all the gas related code an empty gas container
 		removed = new()
@@ -35,7 +35,7 @@
 		else
 			psy_overlay = FALSE
 	damage_archived = damage
-	if(!removed || !removed.total_moles() || isspaceturf(local_turf)) //we're in space or there is no gas to process
+	if(!removed || !removed.getMoles() || isspaceturf(local_turf)) //we're in space or there is no gas to process
 		if(takes_damage)
 			damage += max((power / 1000) * DAMAGE_INCREASE_MULTIPLIER, 0.1) // always does at least some damage
 		if(!istype(env, /datum/gas_mixture/immutable) && produces_gas && power) //There is no gas to process, but we are not in a space turf. Lets make them.
@@ -113,7 +113,7 @@
 	//((((some value between 0.5 and 1 * temp - ((273.15 + 40) * some values between 1 and 10)) * some number between 0.25 and knock your socks off / 150) * 0.25
 	//Heat and mols account for each other, a lot of hot mols are more damaging then a few
 	//Mols start to have a positive effect on damage after 350
-	damage = max(damage + (max(clamp(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
+	damage = max(damage + (max(clamp(removed.getMoles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
 	//Power only starts affecting damage when it is above 5000
 	damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0)
 	//Molar count only starts affecting damage when it is above 1800
@@ -151,7 +151,7 @@
 
 	//calculating gas related values
 	//Wanna know a secret? See that max() to zero? it's used for error checking. If we get a mol count in the negative, we'll get a divide by zero error //Old me, you're insane
-	combined_gas = max(removed.total_moles(), 0)
+	combined_gas = max(removed.getMoles(), 0)
 
 	//This is more error prevention, according to all known laws of atmos, gas_mix.remove() should never make negative mol values.
 	//But this is tg
@@ -197,7 +197,7 @@
 /obj/machinery/power/supermatter_crystal/proc/special_gases_interactions(datum/gas_mixture/env, datum/gas_mixture/removed)
 	//Miasma is really just microscopic particulate. It gets consumed like anything else that touches the crystal.
 	if(gas_comp[/datum/gas/miasma])
-		var/miasma_pp = env.return_pressure() * gas_comp[/datum/gas/miasma]
+		var/miasma_pp = env.returnPressure() * gas_comp[/datum/gas/miasma]
 		var/consumed_miasma = clamp(((miasma_pp - MIASMA_CONSUMPTION_PP) / (miasma_pp + MIASMA_PRESSURE_SCALING)) * (1 + (gasmix_power_ratio * MIASMA_GASMIX_SCALING)), MIASMA_CONSUMPTION_RATIO_MIN, MIASMA_CONSUMPTION_RATIO_MAX)
 		consumed_miasma *= gas_comp[/datum/gas/miasma] * combined_gas
 		if(consumed_miasma)
@@ -206,7 +206,7 @@
 
 	//Let's say that the CO2 touches the SM surface and the radiation turns it into Pluoxium.
 	if(gas_comp[/datum/gas/carbon_dioxide] && gas_comp[/datum/gas/oxygen])
-		var/carbon_dioxide_pp = env.return_pressure() * gas_comp[/datum/gas/carbon_dioxide]
+		var/carbon_dioxide_pp = env.returnPressure() * gas_comp[/datum/gas/carbon_dioxide]
 		var/consumed_carbon_dioxide = clamp(((carbon_dioxide_pp - CO2_CONSUMPTION_PP) / (carbon_dioxide_pp + CO2_PRESSURE_SCALING)), CO2_CONSUMPTION_RATIO_MIN, CO2_CONSUMPTION_RATIO_MAX)
 		consumed_carbon_dioxide = min(consumed_carbon_dioxide * gas_comp[/datum/gas/carbon_dioxide] * combined_gas, removed.gases[/datum/gas/carbon_dioxide][MOLES] * INVERSE(0.5), removed.gases[/datum/gas/oxygen][MOLES] * INVERSE(0.5))
 		if(consumed_carbon_dioxide)
@@ -265,7 +265,7 @@
 		//(1 + (tritRad + pluoxDampen * bzDampen * o2Rad * plasmaRad / (10 - bzrads))) * freonbonus
 		playsound(src, 'sound/weapons/emitter2.ogg', 70, TRUE)
 		var/power_multiplier = max(0, (1 + (power_transmission_bonus / (10 - (gas_comp[/datum/gas/bz] * BZ_RADIOACTIVITY_MODIFIER)))) * freonbonus)// RadModBZ(500%)
-		var/pressure_multiplier = max((1 / ((env.return_pressure() ** pressure_bonus_curve_angle) + 1) * pressure_bonus_derived_steepness) + pressure_bonus_derived_constant, 1)
+		var/pressure_multiplier = max((1 / ((env.returnPressure() ** pressure_bonus_curve_angle) + 1) * pressure_bonus_derived_steepness) + pressure_bonus_derived_constant, 1)
 		var/co2_power_increase = max(gas_comp[/datum/gas/carbon_dioxide] * 2, 1)
 		supermatter_zap(
 			zapstart = src,
@@ -334,12 +334,12 @@
 		return
 	var/range = 4
 	zap_cutoff = 1500
-	if(removed && removed.return_pressure() > 0 && removed.return_temperature() > 0)
+	if(removed && removed.returnPressure() > 0 && removed.getTemperature() > 0)
 		//You may be able to freeze the zapstate of the engine with good planning, we'll see
-		zap_cutoff = clamp(3000 - (power * (removed.total_moles()) / 10) / removed.return_temperature(), 350, 3000)//If the core is cold, it's easier to jump, ditto if there are a lot of mols
+		zap_cutoff = clamp(3000 - (power * (removed.getMoles()) / 10) / removed.getTemperature(), 350, 3000)//If the core is cold, it's easier to jump, ditto if there are a lot of mols
 		//We should always be able to zap our way out of the default enclosure
 		//See supermatter_zap() for more details
-		range = clamp(power / removed.return_pressure() * 10, 2, 7)
+		range = clamp(power / removed.returnPressure() * 10, 2, 7)
 	var/flags = ZAP_SUPERMATTER_FLAGS
 	var/zap_count = 0
 	//Deal with power zaps
diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm
index 3aed2d1daa3..249263ed9ed 100644
--- a/code/modules/power/turbine/turbine.dm
+++ b/code/modules/power/turbine/turbine.dm
@@ -515,7 +515,7 @@
 	//the temperature and pressure rises up, you can regulate this to increase/decrease the amount of gas moved in.
 	var/compressor_work = do_calculations(input_turf_mixture, compressor.machine_gasmix, regulated = TRUE)
 	input_turf.//air_update_turf(TRUE)
-	var/compressor_pressure = max(compressor.machine_gasmix.return_pressure(), 0.01)
+	var/compressor_pressure = max(compressor.machine_gasmix.returnPressure(), 0.01)
 
 	//the rotor moves the gases that expands from 1000 L to 3000 L, they cool down and both temperature and pressure lowers
 	var/rotor_work = do_calculations(compressor.machine_gasmix, machine_gasmix, compressor_work)
@@ -523,10 +523,10 @@
 	//the turbine expands the gases more from 3000 L to 6000 L, cooling them down further.
 	var/turbine_work = do_calculations(machine_gasmix, turbine.machine_gasmix, abs(rotor_work))
 
-	var/turbine_pressure = max(turbine.machine_gasmix.return_pressure(), 0.01)
+	var/turbine_pressure = max(turbine.machine_gasmix.returnPressure(), 0.01)
 
 	//the total work done by the gas
-	var/work_done = turbine.machine_gasmix.total_moles() * R_IDEAL_GAS_EQUATION * turbine.machine_gasmix.temperature * log(compressor_pressure / turbine_pressure)
+	var/work_done = turbine.machine_gasmix.getMoles() * R_IDEAL_GAS_EQUATION * turbine.machine_gasmix.temperature * log(compressor_pressure / turbine_pressure)
 
 	//removing the work needed to move the compressor but adding back the turbine work that is the one generating most of the power.
 	work_done = max(work_done - compressor_work * TURBINE_COMPRESSOR_STATOR_INTERACTION_MULTIPLIER - turbine_work, 0)
@@ -538,14 +538,14 @@
 
 	add_avail(produced_energy)
 
-	turbine.machine_gasmix.pump_gas_to(output_turf.air, turbine.machine_gasmix.return_pressure())
+	turbine.machine_gasmix.pump_gas_to(output_turf.air, turbine.machine_gasmix.returnPressure())
 	output_turf.//air_update_turf(TRUE)
 
 /**
  * Handles all the calculations needed for the gases, work done, temperature increase/decrease
  */
 /obj/machinery/power/turbine/core_rotor/proc/do_calculations(datum/gas_mixture/input_mix, datum/gas_mixture/output_mix, work_amount_to_remove, regulated = FALSE)
-	var/work_done = input_mix.total_moles() * R_IDEAL_GAS_EQUATION * input_mix.temperature * log((input_mix.volume * max(input_mix.return_pressure(), 0.01)) / (output_mix.volume * max(output_mix.return_pressure(), 0.01))) * TURBINE_WORK_CONVERSION_MULTIPLIER
+	var/work_done = input_mix.getMoles() * R_IDEAL_GAS_EQUATION * input_mix.temperature * log((input_mix.volume * max(input_mix.returnPressure(), 0.01)) / (output_mix.volume * max(output_mix.returnPressure(), 0.01))) * TURBINE_WORK_CONVERSION_MULTIPLIER
 	if(work_amount_to_remove)
 		work_done = work_done - work_amount_to_remove
 
@@ -553,11 +553,11 @@
 	if(regulated)
 		intake_size = intake_regulator
 
-	input_mix.pump_gas_to(output_mix, input_mix.return_pressure() * intake_size)
-	var/output_mix_heat_capacity = output_mix.heat_capacity()
+	input_mix.pump_gas_to(output_mix, input_mix.returnPressure() * intake_size)
+	var/output_mix_heat_capacity = output_mix.getHeatCapacity()
 	if(!output_mix_heat_capacity)
 		return 0
-	output_mix.temperature = max((output_mix.temperature * output_mix_heat_capacity + work_done * output_mix.total_moles() * TURBINE_HEAT_CONVERSION_MULTIPLIER) / output_mix_heat_capacity, TCMB)
+	output_mix.temperature = max((output_mix.temperature * output_mix_heat_capacity + work_done * output_mix.getMoles() * TURBINE_HEAT_CONVERSION_MULTIPLIER) / output_mix_heat_capacity, TCMB)
 	return work_done
 
 /obj/item/paper/guides/jobs/atmos/turbine
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index a8bb76d18d7..663d084403e 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -223,7 +223,7 @@
 
 			iter_reagent.on_merge(data, amount)
 			if(reagtemp != cached_temp)
-				var/new_heat_capacity = heat_capacity()
+				var/new_heat_capacity = getHeatCapacity()
 				if(new_heat_capacity)
 					set_temperature(((old_heat_capacity * cached_temp) + (iter_reagent.specific_heat * amount * reagtemp)) / new_heat_capacity)
 				else
@@ -252,7 +252,7 @@
 
 	update_total()
 	if(reagtemp != cached_temp)
-		var/new_heat_capacity = heat_capacity()
+		var/new_heat_capacity = getHeatCapacity()
 		if(new_heat_capacity)
 			set_temperature(((old_heat_capacity * cached_temp) + (new_reagent.specific_heat * amount * reagtemp)) / new_heat_capacity)
 		else
@@ -1359,7 +1359,7 @@
 
 
 /// Returns the total heat capacity for all of the reagents currently in this holder.
-/datum/reagents/proc/heat_capacity()
+/datum/reagents/proc/getHeatCapacity()
 	. = 0
 	var/list/cached_reagents = reagent_list //cache reagents
 	for(var/datum/reagent/reagent in cached_reagents)
@@ -1373,7 +1373,7 @@
  * - max_temp: The maximum temperature that can be reached.
  */
 /datum/reagents/proc/adjust_thermal_energy(delta_energy, min_temp = 2.7, max_temp = 1000)
-	var/heat_capacity = heat_capacity()
+	var/heat_capacity = getHeatCapacity()
 	if(!heat_capacity)
 		return // no div/0 please
 	set_temperature(clamp(chem_temp + (delta_energy / heat_capacity), min_temp, max_temp))
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index db74f2a29f5..82f3c17d7c5 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -332,7 +332,7 @@
 		var/turf/open/exposed_open_turf = exposed_turf
 		exposed_open_turf.MakeSlippery(wet_setting=TURF_WET_ICE, min_wet_time=100, wet_time_to_add=reac_volume SECONDS) // Is less effective in high pressure/high heat capacity environments. More effective in low pressure.
 		var/temperature = exposed_open_turf.air.temperature
-		var/heat_capacity = exposed_open_turf.air.heat_capacity()
+		var/heat_capacity = exposed_open_turf.air.getHeatCapacity()
 		exposed_open_turf.air.temperature = max(exposed_open_turf.air.temperature - ((temperature - TCMB) * (heat_capacity * reac_volume * specific_heat) / (heat_capacity + reac_volume * specific_heat)) / heat_capacity, TCMB) // Exchanges environment temperature with reagent. Reagent is at 2.7K with a heat capacity of 40J per unit.
 	if(reac_volume < 5)
 		return
@@ -478,7 +478,7 @@
 	exposed_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = reac_volume*2 SECONDS)
 	var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in exposed_turf)
 	if(hotspot)
-		var/datum/gas_mixture/lowertemp = exposed_turf.remove_air(exposed_turf.air.total_moles())
+		var/datum/gas_mixture/lowertemp = exposed_turf.remove_air(exposed_turf.air.getMoles())
 		lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
 		lowertemp.react(src)
 		exposed_turf.assume_air(lowertemp)
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index d97894d1462..94c4b71524e 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -78,7 +78,7 @@
 	//this will get a copy of the air turf and take a SEND PRESSURE amount of air from it
 	var/turf/L = loc
 	var/datum/gas_mixture/env = new
-	env.copy_from(L.return_air())
+	env.copyFrom(L.return_air())
 	var/datum/gas_mixture/removed = env.remove(SEND_PRESSURE + 1)
 	air_contents.merge(removed)
 	trunk_check()
@@ -314,7 +314,7 @@
 	data["full_pressure"] = full_pressure
 	data["pressure_charging"] = pressure_charging
 	data["panel_open"] = panel_open
-	data["per"] = CLAMP01(air_contents.return_pressure() / (SEND_PRESSURE))
+	data["per"] = CLAMP01(air_contents.returnPressure() / (SEND_PRESSURE))
 	data["isai"] = isAI(user)
 	return data
 
@@ -416,7 +416,7 @@
 				do_flush()
 		flush_count = 0
 
-	if(flush && air_contents.return_pressure() >= SEND_PRESSURE) // flush can happen even without power
+	if(flush && air_contents.returnPressure() >= SEND_PRESSURE) // flush can happen even without power
 		do_flush()
 
 	if(machine_stat & NOPOWER) // won't charge if no power
@@ -435,7 +435,7 @@
 	var/datum/gas_mixture/env = L.return_air()
 	if(!env.temperature)
 		return
-	var/pressure_delta = (SEND_PRESSURE*1.01) - air_contents.return_pressure()
+	var/pressure_delta = (SEND_PRESSURE*1.01) - air_contents.returnPressure()
 
 	var/transfer_moles = 0.05 * delta_time * (pressure_delta*air_contents.volume)/(env.temperature * R_IDEAL_GAS_EQUATION)
 
@@ -445,7 +445,7 @@
 	//air_update_turf(FALSE, FALSE)
 
 	//if full enough, switch to ready mode
-	if(air_contents.return_pressure() >= SEND_PRESSURE)
+	if(air_contents.returnPressure() >= SEND_PRESSURE)
 		full_pressure = TRUE
 		pressure_charging = FALSE
 		update_appearance()
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 56c573be631..e908d09ebf9 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -368,10 +368,10 @@
 		else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
 			visible_message(span_warning("[src] malfunctions, melting [exp_on] and leaking hot air!"))
 			var/datum/gas_mixture/env = loc.return_air()
-			var/transfer_moles = 0.25 * env.total_moles()
+			var/transfer_moles = 0.25 * env.getMoles()
 			var/datum/gas_mixture/removed = env.remove(transfer_moles)
 			if(removed)
-				var/heat_capacity = removed.heat_capacity()
+				var/heat_capacity = removed.getHeatCapacity()
 				if(heat_capacity == 0 || heat_capacity == null)
 					heat_capacity = 1
 				removed.temperature = min((removed.temperature*heat_capacity + 100000)/heat_capacity, 1000)
@@ -414,10 +414,10 @@
 		else if(prob(EFFECT_PROB_LOW-badThingCoeff))
 			visible_message(span_warning("[src] malfunctions, shattering [exp_on] and leaking cold air!"))
 			var/datum/gas_mixture/env = loc.return_air()
-			var/transfer_moles = 0.25 * env.total_moles()
+			var/transfer_moles = 0.25 * env.getMoles()
 			var/datum/gas_mixture/removed = env.remove(transfer_moles)
 			if(removed)
-				var/heat_capacity = removed.heat_capacity()
+				var/heat_capacity = removed.getHeatCapacity()
 				if(heat_capacity == 0 || heat_capacity == null)
 					heat_capacity = 1
 				removed.temperature = (removed.temperature*heat_capacity - 75000)/heat_capacity
diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm
index 70c785dd5a7..3ace3f14b5c 100644
--- a/code/modules/research/ordnance/tank_compressor.dm
+++ b/code/modules/research/ordnance/tank_compressor.dm
@@ -125,22 +125,22 @@
 /// Glorified volume pump.
 /obj/machinery/atmospherics/components/binary/tank_compressor/process_atmos()
 	var/datum/gas_mixture/input_air = airs[2]
-	if(!input_air?.total_moles() || !active || !transfer_rate || !inserted_tank)
+	if(!input_air?.getMoles() || !active || !transfer_rate || !inserted_tank)
 		return
 
 	var/datum/gas_mixture/tank_air = inserted_tank.return_air()
 	if(!tank_air)
 		return
 
-	if(input_air.return_pressure() < 0.01 || tank_air.return_pressure() > TANK_COMPRESSOR_PRESSURE_LIMIT)
+	if(input_air.returnPressure() < 0.01 || tank_air.returnPressure() > TANK_COMPRESSOR_PRESSURE_LIMIT)
 		return
 
 	/// Prevent pumping if tank is taking damage but still below pressure limit. Here to prevent exploiting the buffer system.
-	if((inserted_tank.leaking) && (tank_air.return_pressure() <= TANK_LEAK_PRESSURE))
+	if((inserted_tank.leaking) && (tank_air.returnPressure() <= TANK_LEAK_PRESSURE))
 		active = FALSE
 		return
 
-	var/datum/gas_mixture/removed = input_air.remove_ratio(transfer_rate / input_air.volume)
+	var/datum/gas_mixture/removed = input_air.removeRatio(transfer_rate / input_air.volume)
 	if(!removed)
 		return
 
@@ -160,7 +160,7 @@
 		return
 	flush_buffer()
 	var/datum/gas_mixture/tank_air = inserted_tank.return_air()
-	last_recorded_pressure = tank_air.return_pressure()
+	last_recorded_pressure = tank_air.returnPressure()
 	active = FALSE
 	return
 
@@ -176,13 +176,13 @@
  * Mole requirements in experiments are tracked by buffer data.
  */
 /obj/machinery/atmospherics/components/binary/tank_compressor/proc/flush_buffer()
-	if(!leaked_gas_buffer.total_moles())
+	if(!leaked_gas_buffer.getMoles())
 		return
-	if(leaked_gas_buffer.total_moles() > SIGNIFICANT_AMOUNT_OF_MOLES)
+	if(leaked_gas_buffer.getMoles() > SIGNIFICANT_AMOUNT_OF_MOLES)
 		record_data()
 	else
 		say("Buffer data discarded. Required moles for storage: [SIGNIFICANT_AMOUNT_OF_MOLES] moles.")
-	var/datum/gas_mixture/removed = leaked_gas_buffer.remove_ratio(1)
+	var/datum/gas_mixture/removed = leaked_gas_buffer.removeRatio(1)
 	airs[1].merge(removed)
 	say("Gas stored in buffer flushed to output port. Compressor ready to start the next experiment.")
 
@@ -229,7 +229,7 @@
 	if(!inserted_tank)
 		return FALSE
 	var/datum/gas_mixture/tank_air = inserted_tank.return_air()
-	if(!tank_air.return_pressure() >= PUMP_MAX_PRESSURE)
+	if(!tank_air.returnPressure() >= PUMP_MAX_PRESSURE)
 		return FALSE
 	flush_buffer()
 	if(user)
@@ -335,7 +335,7 @@
 	var/list/data = list()
 	data["tankPresent"] = inserted_tank ? TRUE : FALSE
 	var/datum/gas_mixture/tank_air = inserted_tank?.return_air()
-	data["tankPressure"] = tank_air?.return_pressure()
+	data["tankPressure"] = tank_air?.returnPressure()
 	data["leaking"] = inserted_tank?.leaking
 
 	data["active"] = active
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 4e277b433e7..4e42bcc2bdc 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -95,13 +95,13 @@
 			var/datum/gas_mixture/env = L.return_air()
 			if(env.temperature < (heat_amt+T0C))
 
-				var/transfer_moles = 0.25 * env.total_moles()
+				var/transfer_moles = 0.25 * env.getMoles()
 
 				var/datum/gas_mixture/removed = env.remove(transfer_moles)
 
 				if(removed)
 
-					var/heat_capacity = removed.heat_capacity()
+					var/heat_capacity = removed.getHeatCapacity()
 					if(heat_capacity == 0 || heat_capacity == null)
 						heat_capacity = 1
 					removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000)
diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm
index 40b43cdc428..9406fc579a9 100644
--- a/code/modules/shuttle/arrivals.dm
+++ b/code/modules/shuttle/arrivals.dm
@@ -107,7 +107,7 @@
 /obj/docking_port/mobile/arrivals/proc/CheckTurfsPressure()
 	for(var/I in SSjob.latejoin_trackers)
 		var/turf/open/T = get_turf(I)
-		var/pressure = T.return_air().return_pressure()
+		var/pressure = T.return_air().returnPressure()
 		if(pressure < HAZARD_LOW_PRESSURE || pressure > HAZARD_HIGH_PRESSURE) //simple safety check
 			return TRUE
 	return FALSE
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 7d3f569911a..ce365c53fe2 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -212,7 +212,7 @@
 
 	// Priority 1: use air from environment.
 	var/datum/gas_mixture/environment = owner_turf.return_air()
-	if(environment && environment.return_pressure() > 30)
+	if(environment && environment.returnPressure() > 30)
 		ion_trail.generate_effect()
 		return TRUE
 
@@ -225,9 +225,9 @@
 
 	// Priority 3: use internals tank.
 	var/datum/gas_mixture/internal_mix = owner.internal.return_air()
-	if(internal_mix && internal_mix.total_moles() > num)
+	if(internal_mix && internal_mix.getMoles() > num)
 		var/datum/gas_mixture/removed = internal_mix.remove(num)
-		if(removed.total_moles() > 0.005)
+		if(removed.getMoles() > 0.005)
 			owner_turf.assume_air(removed)
 			ion_trail.generate_effect()
 			return TRUE
diff --git a/code/modules/surgery/organs/external/wings.dm b/code/modules/surgery/organs/external/wings.dm
index bca39659054..594e1cdde5a 100644
--- a/code/modules/surgery/organs/external/wings.dm
+++ b/code/modules/surgery/organs/external/wings.dm
@@ -78,7 +78,7 @@
 		return FALSE
 
 	var/datum/gas_mixture/environment = location.return_air()
-	if(environment?.return_pressure() < HAZARD_LOW_PRESSURE + 10)
+	if(environment?.returnPressure() < HAZARD_LOW_PRESSURE + 10)
 		to_chat(human, span_warning("The atmosphere is too thin for you to fly!"))
 		return FALSE
 	else
@@ -202,7 +202,7 @@
 
 	if(!isspaceturf(owner.loc) && !burnt)
 		var/datum/gas_mixture/current = owner.loc.return_air()
-		if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
+		if(current && (current.returnPressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
 			ADD_TRAIT(owner, TRAIT_FREE_FLOAT_MOVEMENT, src)
 			return
 
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 1e181c59afa..7e12d528e46 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -125,10 +125,10 @@
 	var/plasma_moles = breath.gas[GAS_PLASMA]
 	var/CO2_moles = breath.gas[GAS_CO2]
 
-	var/O2_pp = breath.get_breath_partial_pressure(O2_moles)//+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES]))
-	var/N2_pp = breath.get_breath_partial_pressure(N2_moles)
-	var/Plasma_pp = breath.get_breath_partial_pressure(plasma_moles)
-	var/CO2_pp = breath.get_breath_partial_pressure(CO2_moles)
+	var/O2_pp = breath.getBreathPartialPressure(O2_moles)//+(8*breath.getBreathPartialPressure(breath_gases[/datum/gas/pluoxium][MOLES]))
+	var/N2_pp = breath.getBreathPartialPressure(N2_moles)
+	var/Plasma_pp = breath.getBreathPartialPressure(plasma_moles)
+	var/CO2_pp = breath.getBreathPartialPressure(CO2_moles)
 	//Vars for n2o and healium induced euphorias.
 	var/n2o_euphoria = EUPHORIA_LAST_FLAG
 	var/healium_euphoria = EUPHORIA_LAST_FLAG
@@ -157,8 +157,8 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
 
 	//Exhale
-	breath.adjust_gas(GAS_OXYGEN, -gas_breathed)
-	breath.adjust_gas(GAS_CO2, gas_breathed)
+	breath.adjustGas(GAS_OXYGEN, -gas_breathed)
+	breath.adjustGas(GAS_CO2, gas_breathed)
 	gas_breathed = 0
 
 	//-- Nitrogen --//
@@ -185,8 +185,8 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_NITRO)
 
 	//Exhale
-	breath.adjust_gas(GAS_NITROGEN, -gas_breathed)
-	breath.adjust_gas(GAS_CO2, gas_breathed)
+	breath.adjustGas(GAS_NITROGEN, -gas_breathed)
+	breath.adjustGas(GAS_CO2, gas_breathed)
 	gas_breathed = 0
 
 	//-- CO2 --//
@@ -222,8 +222,8 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_CO2)
 
 	//Exhale
-	breath.adjust_gas(GAS_CO2, -gas_breathed)
-	breath.adjust_gas(GAS_OXYGEN, gas_breathed)
+	breath.adjustGas(GAS_CO2, -gas_breathed)
+	breath.adjustGas(GAS_OXYGEN, gas_breathed)
 	gas_breathed = 0
 
 
@@ -252,8 +252,8 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_PLASMA)
 
 	//Exhale
-	breath.adjust_gas(GAS_PLASMA, -gas_breathed)
-	breath.adjust_gas(GAS_CO2, gas_breathed)
+	breath.adjustGas(GAS_PLASMA, -gas_breathed)
+	breath.adjustGas(GAS_CO2, gas_breathed)
 	gas_breathed = 0
 
 
@@ -262,8 +262,8 @@
 	if(breath) // If there's some other shit in the air lets deal with it here.
 
 	// N2O
-		var/n2o_moles = breath.get_gas(GAS_N2O)
-		var/SA_pp = breath.get_breath_partial_pressure(n2o_moles)
+		var/n2o_moles = breath.getGroupGas(GAS_N2O)
+		var/SA_pp = breath.getBreathPartialPressure(n2o_moles)
 		if(SA_pp > SA_para_min) // Enough to make us stunned for a bit
 			breather.throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o)
 			breather.Unconscious(60) // 60 gives them one second to wake up and run away a bit!
@@ -281,7 +281,7 @@
 	/*
 	// BZ
 
-		var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES])
+		var/bz_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/bz][MOLES])
 		if(bz_pp > BZ_trip_balls_min)
 			breather.hallucination += 10
 			breather.reagents.add_reagent(/datum/reagent/bz_metabolites,5)
@@ -289,7 +289,7 @@
 			breather.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
 
 	// Tritium
-		var/trit_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/tritium][MOLES])
+		var/trit_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/tritium][MOLES])
 		// If you're breathing in half an atmosphere of radioactive gas, you fucked up.
 		if (trit_pp > tritium_irradiation_moles_min && SSradiation.can_irradiate_basic(breather))
 			var/lerp_scale = min(tritium_irradiation_moles_max, trit_pp - tritium_irradiation_moles_min) / (tritium_irradiation_moles_max - tritium_irradiation_moles_min)
@@ -306,7 +306,7 @@
 		breath_gases[/datum/gas/tritium][MOLES] -= gas_breathed
 
 	// Nitrium
-		var/nitrium_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrium][MOLES])
+		var/nitrium_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/nitrium][MOLES])
 		if (prob(nitrium_pp) && nitrium_pp > 15)
 			breather.adjustOrganLoss(ORGAN_SLOT_LUNGS, nitrium_pp * 0.1)
 			to_chat(breather, "<span class='notice'>You feel a burning sensation in your chest</span>")
@@ -321,7 +321,7 @@
 		breath_gases[/datum/gas/nitrium][MOLES] -= gas_breathed
 
 	// Freon
-		var/freon_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/freon][MOLES])
+		var/freon_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/freon][MOLES])
 		if (prob(freon_pp))
 			to_chat(breather, span_alert("Your mouth feels like it's burning!"))
 		if (freon_pp >40)
@@ -339,7 +339,7 @@
 		breath_gases[/datum/gas/freon][MOLES]-=gas_breathed
 
 	// Healium
-		var/healium_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/healium][MOLES])
+		var/healium_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/healium][MOLES])
 		if(healium_pp > gas_stimulation_min)
 			if(prob(15))
 				to_chat(breather, span_alert("Your head starts spinning and your lungs burn!"))
@@ -359,7 +359,7 @@
 	// Proto Nitrate
 		// Inert
 	// Zauker
-		var/zauker_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/zauker][MOLES])
+		var/zauker_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/zauker][MOLES])
 		if(zauker_pp > gas_stimulation_min)
 			var/existing = breather.reagents.get_reagent_amount(/datum/reagent/zauker)
 			breather.reagents.add_reagent(/datum/reagent/zauker, max(0, 1 - existing))
@@ -367,7 +367,7 @@
 		breath_gases[/datum/gas/zauker][MOLES]-=gas_breathed
 
 	// Halon
-		var/halon_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/halon][MOLES])
+		var/halon_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/halon][MOLES])
 		if(halon_pp > gas_stimulation_min)
 			breather.adjustOxyLoss(5)
 			var/existing = breather.reagents.get_reagent_amount(/datum/reagent/halon)
@@ -384,7 +384,7 @@
 
 	// Miasma
 		if (breath_gases[/datum/gas/miasma] && suffers_miasma)
-			var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma][MOLES])
+			var/miasma_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/miasma][MOLES])
 
 			//Miasma sickness
 			if(prob(0.5 * miasma_pp))
@@ -438,7 +438,7 @@
 		// Activate mood on first flag, remove on second, do nothing on third.
 
 		handle_breath_temperature(breath, breather)
-		breath.update_values()
+		breath.updateValues()
 
 	return TRUE
 
@@ -526,8 +526,8 @@
 
 /obj/item/organ/lungs/slime/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather_slime)
 	. = ..()
-	if (breath.get_gas(GAS_PLASMA))
-		var/plasma_pp = breath.get_breath_partial_pressure(breath.get_gas(GAS_PLASMA))
+	if (breath.getGroupGas(GAS_PLASMA))
+		var/plasma_pp = breath.getBreathPartialPressure(breath.getGroupGas(GAS_PLASMA))
 		owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
 
 /obj/item/organ/lungs/cybernetic
@@ -586,19 +586,19 @@
 
 	var/datum/gas_mixture/immutable/planetary/mix = SSair.planetary[LAVALAND_DEFAULT_ATMOS]
 
-	if(!mix?.total_moles()) // this typically means we didn't load lavaland, like if we're using #define LOWMEMORYMODE
+	if(!mix?.getMoles()) // this typically means we didn't load lavaland, like if we're using #define LOWMEMORYMODE
 		return
 
 	// Take a "breath" of the air
-	var/datum/gas_mixture/breath = mix.remove(mix.total_moles() * BREATH_PERCENTAGE)
+	var/datum/gas_mixture/breath = mix.remove(mix.getMoles() * BREATH_PERCENTAGE)
 
-	var/oxygen_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])
-	var/nitrogen_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrogen][MOLES])
-	var/plasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/plasma][MOLES])
-	var/carbon_dioxide_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])
+	var/oxygen_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/oxygen][MOLES])
+	var/nitrogen_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/nitrogen][MOLES])
+	var/plasma_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/plasma][MOLES])
+	var/carbon_dioxide_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])
 	/*
-	var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES])
-	var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma][MOLES])
+	var/bz_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/bz][MOLES])
+	var/miasma_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/miasma][MOLES])
 	*/
 
 	safe_oxygen_min = max(0, oxygen_pp - GAS_TOLERANCE)
diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index 02224722411..81ebfae7313 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -26,7 +26,7 @@
 	//Prep the floor
 	to_fill.initial_gas = OPENTURF_DEFAULT_ATMOS
 	to_fill.air = new
-	to_fill.air.copy_from(to_fill.return_air())
+	to_fill.air.copyFrom(to_fill.return_air())
 
 	lab_rat.breathe()
 
@@ -66,7 +66,7 @@
 	//Prep the floor
 	to_fill.initial_gas = LAVALAND_DEFAULT_ATMOS
 	to_fill.air = new
-	to_fill.air.copy_from(to_fill.return_air())
+	to_fill.air.copyFrom(to_fill.return_air())
 
 	lab_rat.breathe()
 
diff --git a/code/modules/unit_tests/gas_transfer.dm b/code/modules/unit_tests/gas_transfer.dm
index 9a7b4a78d62..52634f090fe 100644
--- a/code/modules/unit_tests/gas_transfer.dm
+++ b/code/modules/unit_tests/gas_transfer.dm
@@ -9,12 +9,12 @@
 
 		first_mix.volume = 200
 		second_mix.volume = 200
-		first_mix.adjust_gas(GAS_OXYGEN, tempNmoles)
-		second_mix.adjust_gas(GAS_NITROGEN, 200)
+		first_mix.adjustGas(GAS_OXYGEN, tempNmoles)
+		second_mix.adjustGas(GAS_NITROGEN, 200)
 		first_mix.temperature = tempNmoles
 		second_mix.temperature = T20C
 
-		var/initial_pressure = second_mix.return_pressure()
+		var/initial_pressure = second_mix.returnPressure()
 		// A constant value would be nicer but there will be cases when even MOLAR_ACCURACY amounts would far exceed the pressure so we need to scale it somewhat.
 		var/additional_pressure = (tempNmoles / 1000) + 500
 
@@ -25,7 +25,7 @@
 		var/error_margin = first_mix.gas_pressure_minimum_transfer(second_mix) - initial_pressure
 
 		first_mix.pump_gas_to(second_mix, (initial_pressure + additional_pressure))
-		var/margin = abs(second_mix.return_pressure() - (initial_pressure+additional_pressure))
+		var/margin = abs(second_mix.returnPressure() - (initial_pressure+additional_pressure))
 
-		TEST_ASSERT(margin<=error_margin, "Gas pressure pumping test failed for [tempNmoles]. Expected pressure = [initial_pressure+additional_pressure] +/- [error_margin]. Got [second_mix.return_pressure()].")
+		TEST_ASSERT(margin<=error_margin, "Gas pressure pumping test failed for [tempNmoles]. Expected pressure = [initial_pressure+additional_pressure] +/- [error_margin]. Got [second_mix.returnPressure()].")
 	*/
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index d9ee9618b83..6fecaea4cc4 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -215,7 +215,7 @@
 	cabin_air = new
 	cabin_air.volume = 200
 	cabin_air.temperature = T20C
-	cabin_air.adjust_multi(GAS_OXYGEN, (O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)), GAS_NITROGEN, (N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)))
+	cabin_air.adjustMultipleGases(GAS_OXYGEN, (O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)), GAS_NITROGEN, (N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)))
 
 	add_cell()
 	add_scanmod()
@@ -427,20 +427,20 @@
 				clear_internal_damage(MECHA_INT_FIRE)
 			if(internal_tank)
 				var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
-				if(int_tank_air.return_pressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH))
+				if(int_tank_air.returnPressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH))
 					set_internal_damage(MECHA_INT_TANK_BREACH)
-				if(int_tank_air && int_tank_air.return_volume() > 0) //heat the air_contents
+				if(int_tank_air && int_tank_air.getVolume() > 0) //heat the air_contents
 					int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(5,7.5)*delta_time)
-			if(cabin_air && cabin_air.return_volume()>0)
-				cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(5,7.5)*delta_time)
-				if(cabin_air.return_temperature() > max_temperature/2)
-					take_damage(delta_time*2/round(max_temperature/cabin_air.return_temperature(),0.1), BURN, 0, 0)
+			if(cabin_air && cabin_air.getVolume()>0)
+				cabin_air.temperature = min(6000+T0C, cabin_air.getTemperature()+rand(5,7.5)*delta_time)
+				if(cabin_air.getTemperature() > max_temperature/2)
+					take_damage(delta_time*2/round(max_temperature/cabin_air.getTemperature(),0.1), BURN, 0, 0)
 
 
 		if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank
 			if(internal_tank)
 				var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
-				var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(DT_PROB_RATE(0.05, delta_time))
+				var/datum/gas_mixture/leaked_gas = int_tank_air.removeRatio(DT_PROB_RATE(0.05, delta_time))
 				if(loc)
 					loc.assume_air(leaked_gas)
 				else
@@ -453,7 +453,7 @@
 				cell.maxcharge -= min(10 * delta_time, cell.maxcharge)
 
 	if(!(internal_damage & MECHA_INT_TEMP_CONTROL))
-		if(cabin_air && cabin_air.return_volume() > 0)
+		if(cabin_air && cabin_air.getVolume() > 0)
 			var/delta = cabin_air.temperature - T20C
 			cabin_air.temperature -= clamp(round(delta / 8, 0.1), -5, 5) * delta_time
 
@@ -461,8 +461,8 @@
 		var/datum/gas_mixture/tank_air = internal_tank.return_air()
 
 		var/release_pressure = internal_tank_valve
-		var/cabin_pressure = cabin_air.return_pressure()
-		var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2)
+		var/cabin_pressure = cabin_air.returnPressure()
+		var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.returnPressure() - cabin_pressure)/2)
 		var/transfer_moles = 0
 		if(pressure_delta > 0) //cabin pressure lower than release pressure
 			if(tank_air.temperature > 0)
@@ -473,7 +473,7 @@
 			var/datum/gas_mixture/t_air = return_air()
 			pressure_delta = cabin_pressure - release_pressure
 			if(t_air)
-				pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
+				pressure_delta = min(cabin_pressure - t_air.returnPressure(), pressure_delta)
 			if(pressure_delta > 0) //if location pressure is lower than cabin pressure
 				transfer_moles = pressure_delta*cabin_air.volume/(cabin_air.temperature * R_IDEAL_GAS_EQUATION)
 				var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
@@ -1232,12 +1232,12 @@
 	return cabin_air
 
 ///fetches pressure of the gas mixture we are using
-/obj/vehicle/sealed/mecha/proc/return_pressure()
+/obj/vehicle/sealed/mecha/proc/returnPressure()
 	var/datum/gas_mixture/air = return_air()
-	return air?.return_pressure()
+	return air?.returnPressure()
 
 ///fetches temp of the gas mixture we are using
-/obj/vehicle/sealed/mecha/return_temperature()
+/obj/vehicle/sealed/mecha/getTemperature()
 	var/datum/gas_mixture/air = return_air()
 	return air?.temperature
 
diff --git a/code/modules/vehicles/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm
index eef2a1de549..0f10ed65ae1 100644
--- a/code/modules/vehicles/mecha/mecha_control_console.dm
+++ b/code/modules/vehicles/mecha/mecha_control_console.dm
@@ -29,7 +29,7 @@
 			name = M.name,
 			integrity = round((M.get_integrity() / M.max_integrity) * 100),
 			charge = M.cell ? round(M.cell.percent()) : null,
-			airtank = M.internal_tank ? M.return_pressure() : null,
+			airtank = M.internal_tank ? M.returnPressure() : null,
 			pilot = M.return_drivers(),
 			location = get_area_name(M, TRUE),
 			emp_recharging = MT.recharging,
@@ -96,7 +96,7 @@
 	var/answer = {"<b>Name:</b> [chassis.name]<br>
 				<b>Integrity:</b> [round((chassis.get_integrity()/chassis.max_integrity * 100), 0.01)]%<br>
 				<b>Cell Charge:</b> [isnull(cell_charge) ? "Not Found":"[chassis.cell.percent()]%"]<br>
-				<b>Airtank:</b> [chassis.internal_tank ? "[round(chassis.return_pressure(), 0.01)]" : "Not Equipped"] kPa<br>
+				<b>Airtank:</b> [chassis.internal_tank ? "[round(chassis.returnPressure(), 0.01)]" : "Not Equipped"] kPa<br>
 				<b>Pilot:</b> [chassis.return_drivers() || "None"]<br>
 				<b>Location:</b> [get_area_name(chassis, TRUE) || "Unknown"]"}
 	if(istype(chassis, /obj/vehicle/sealed/mecha/working/ripley))
diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm
index 35fcc68a3a5..3b4906ca291 100644
--- a/code/modules/vehicles/mecha/mecha_ui.dm
+++ b/code/modules/vehicles/mecha/mecha_ui.dm
@@ -116,11 +116,11 @@
 	data["mecha_flags"] = mecha_flags
 	data["internal_damage"] = internal_damage
 	data["air_source"] = use_internal_tank ? "Internal Airtank" : "Environment"
-	data["airtank_pressure"] = int_tank_air ? round(int_tank_air.return_pressure(), 0.01) : null
+	data["airtank_pressure"] = int_tank_air ? round(int_tank_air.returnPressure(), 0.01) : null
 	data["airtank_temp"] = int_tank_air?.temperature
 	data["port_connected"] = internal_tank?.connected_port ? TRUE : FALSE
-	data["cabin_pressure"] = round(return_pressure(), 0.01)
-	data["cabin_temp"] = return_temperature()
+	data["cabin_pressure"] = round(returnPressure(), 0.01)
+	data["cabin_temp"] = getTemperature()
 	data["dna_lock"] = dna_lock
 	data["mech_view"] = ui_view.assigned_map
 	if(radio)
diff --git a/code/modules/wiremod/components/sensors/pressuresensor.dm b/code/modules/wiremod/components/sensors/pressuresensor.dm
index c0509aac6f2..7d733f369d8 100644
--- a/code/modules/wiremod/components/sensors/pressuresensor.dm
+++ b/code/modules/wiremod/components/sensors/pressuresensor.dm
@@ -25,7 +25,7 @@
 	//Get environment info
 	var/datum/gas_mixture/environment = location.return_air()
 	var/total_moles = environment.total_moles
-	var/pressure = environment.return_pressure()
+	var/pressure = environment.returnPressure()
 	if(total_moles)
 		//If there's atmos, return pressure
 		result.set_output(round(pressure,1))
diff --git a/html/changelogs/archive/2020-03.yml b/html/changelogs/archive/2020-03.yml
index bae4ee0a1e0..8b9b02ab488 100644
--- a/html/changelogs/archive/2020-03.yml
+++ b/html/changelogs/archive/2020-03.yml
@@ -737,7 +737,7 @@
   - bugfix: Fixed runtime on donutstation caused by mistype in dmm file
 2020-03-26:
   Dennok:
-  - code_imp: now copy_from(target, partial) can copy part of target gas moles
+  - code_imp: now copyFrom(target, partial) can copy part of target gas moles
   Detective-Google:
   - code_imp: shotgun's weapon_weight variable being defined twice
   Fikou:

From 1053fb3207c85fb4a8dad228eaab3875144e5463 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 1 May 2022 16:45:56 -0400
Subject: [PATCH 061/200] Clean up, fixes reconcile_air(), recode copyFrom()

---
 code/__HELPERS/_logging.dm                    |  2 +-
 code/__HELPERS/atmospherics.dm                |  4 +-
 code/datums/components/wet_floor.dm           |  2 +-
 code/datums/elements/atmos_requirements.dm    | 10 ++---
 code/datums/helper_datums/teleport.dm         |  8 ++--
 code/game/atoms.dm                            |  2 +-
 .../effects/effect_system/effects_foam.dm     |  4 +-
 .../effects/effect_system/effects_smoke.dm    |  2 +-
 .../items/devices/scanners/gas_analyzer.dm    |  8 ++--
 code/game/objects/items/flamethrower.dm       |  3 +-
 code/game/objects/items/powerfist.dm          |  2 +-
 code/game/objects/items/tanks/jetpack.dm      |  4 +-
 code/game/objects/items/tanks/tanks.dm        |  2 +-
 code/game/objects/objs.dm                     |  4 +-
 .../structures/crates_lockers/closets.dm      |  3 --
 .../transit_tubes/transit_tube_pod.dm         |  2 +-
 code/game/objects/structures/window.dm        |  2 +-
 code/game/turfs/open/_open.dm                 |  2 +-
 code/game/turfs/open/lava.dm                  |  2 +-
 .../heretic/knowledge/void_lore.dm            |  4 +-
 code/modules/assembly/bomb.dm                 |  2 +-
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   | 45 +++++++++++++------
 .../atmospherics/gasmixtures/gas_mixture.dm   | 32 ++++++-------
 .../atmospherics/gasmixtures/reactions.dm     |  2 +-
 .../atmospherics/machinery/airalarm.dm        |  2 +-
 .../machinery/bluespace_vendor.dm             |  2 +-
 .../components/binary_devices/pump.dm         |  4 +-
 .../binary_devices/temperature_pump.dm        |  2 +-
 .../components/binary_devices/volume_pump.dm  |  6 +--
 .../components/fusion/hfr_main_processes.dm   | 34 +++++++-------
 .../machinery/components/fusion/hfr_parts.dm  |  6 +--
 .../machinery/components/fusion/hfr_procs.dm  | 10 ++---
 .../gas_recipe_machines/crystallizer.dm       | 14 +++---
 .../components/trinary_devices/filter.dm      |  2 +-
 .../components/trinary_devices/mixer.dm       |  4 +-
 .../unary_devices/bluespace_sender.dm         | 10 ++---
 .../components/unary_devices/cryo.dm          | 10 ++---
 .../components/unary_devices/thermomachine.dm |  2 +-
 .../components/unary_devices/vent_pump.dm     |  4 +-
 .../components/unary_devices/vent_scrubber.dm |  2 +-
 .../atmospherics/machinery/datum_pipeline.dm  | 32 ++++++++++++-
 .../atmospherics/machinery/other/miner.dm     |  2 +-
 .../machinery/pipes/heat_exchange/he_pipes.dm |  2 +-
 .../machinery/portable/canister.dm            |  8 ++--
 .../atmospherics/machinery/portable/pump.dm   |  2 +-
 .../machinery/portable/scrubber.dm            |  2 +-
 code/modules/clothing/masks/gas_filter.dm     | 24 +++++-----
 .../clothing/spacesuits/_spacesuits.dm        |  2 +-
 code/modules/events/spacevine.dm              |  8 ++--
 .../living/carbon/alien/humanoid/humanoid.dm  |  2 +-
 code/modules/mob/living/carbon/alien/life.dm  |  6 +--
 .../carbon/human/species_types/golems.dm      |  2 +-
 .../carbon/human/species_types/plasmamen.dm   |  2 +-
 code/modules/mob/living/carbon/life.dm        | 10 ++---
 code/modules/mob/living/living.dm             |  2 +-
 .../living/simple_animal/hostile/regalrat.dm  |  2 +-
 .../mob/living/simple_animal/hostile/tree.dm  |  2 +-
 .../mob/living/simple_animal/simple_animal.dm | 10 ++---
 .../mob/living/simple_animal/slime/life.dm    |  2 +-
 code/modules/power/supermatter/supermatter.dm |  6 +--
 .../power/supermatter/supermatter_process.dm  | 12 ++---
 code/modules/power/turbine/turbine.dm         |  6 +--
 .../chemistry/reagents/food_reagents.dm       |  2 +-
 code/modules/research/experimentor.dm         |  4 +-
 .../research/ordnance/tank_compressor.dm      |  6 +--
 code/modules/research/server.dm               |  2 +-
 .../xenobiology/crossbreeding/chilling.dm     |  2 +-
 code/modules/surgery/organic_steps.dm         |  2 +-
 code/modules/surgery/organs/augments_chest.dm |  4 +-
 code/modules/surgery/organs/lungs.dm          |  7 +--
 code/modules/vehicles/mecha/_mecha.dm         | 14 +++---
 code/modules/vehicles/mecha/mecha_ui.dm       |  2 +-
 72 files changed, 251 insertions(+), 207 deletions(-)

diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 8c9b1bab955..84cbbcf2bd5 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
 /// Logs the contents of the gasmix to the game log, prefixed by text
 /proc/log_atmos(text, datum/gas_mixture/mix)
 	var/message = text
-	message += "TEMP=[mix.getTemperature()],MOL=[mix.getMoles()],VOL=[mix.volume]"
+	message += "TEMP=[mix.get_temperature()],MOL=[mix.get_moles()],VOL=[mix.volume]"
 	for(var/key in mix.getGases())
 		message += "[key]=[mix.getGroupGas(key)];"
 	log_game(message)
diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index 250dabd386e..32684a61295 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -45,7 +45,7 @@
 		.["gases"] += list(list(
 			"[gas_path]",
 			"[gas_path]",
-			gasmix.getGroupGas(gas_path),
+			gasmix.gas[gas_path],
 		))
 	//.for(var/datum/gas_reaction/reaction_result as anything in gasmix.reaction_results)
 	.["reactions"] += list(list(
@@ -53,7 +53,7 @@
 		"UNIMPLIMENTED",
 		"UNIMPLIMENTED",
 	))
-	.["total_moles"] = gasmix.getMoles()
+	.["total_moles"] = gasmix.get_moles()
 	.["temperature"] = gasmix.temperature
 	.["volume"] = gasmix.volume
 	.["pressure"] = gasmix.returnPressure()
diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm
index 9a63f6b2951..2ffee547cf7 100644
--- a/code/datums/components/wet_floor.dm
+++ b/code/datums/components/wet_floor.dm
@@ -114,7 +114,7 @@
 	var/turf/open/T = parent
 	var/diff = world.time - last_process
 	var/decrease = 0
-	var/t = T.GetTemperature()
+	var/t = T.return_temperature()
 	switch(t)
 		if(-INFINITY to T0C)
 			add_wet(TURF_WET_ICE, max_time_left()) //Water freezes into ice!
diff --git a/code/datums/elements/atmos_requirements.dm b/code/datums/elements/atmos_requirements.dm
index 1737b7e4b6c..735c78e1230 100644
--- a/code/datums/elements/atmos_requirements.dm
+++ b/code/datums/elements/atmos_requirements.dm
@@ -46,13 +46,13 @@
 	if(!open_turf.air && (atmos_requirements["min_oxy"] || atmos_requirements["min_tox"] || atmos_requirements["min_n2"] || atmos_requirements["min_co2"]))
 		return FALSE
 
-	var/datum/gas_mixture/open_turf_gases = open_turf.return_air()
+	var/datum/gas_mixture/open_turf_gases = open_turf.return_air().getGases()
 
 
-	var/plas = open_turf_gases.getGroupGas(GAS_PLASMA)
-	var/oxy = open_turf_gases.getGroupGas(GAS_OXYGEN)
-	var/n2 = open_turf_gases.getGroupGas(GAS_NITROGEN)
-	var/co2 = open_turf_gases.getGroupGas(GAS_CO2)
+	var/plas = open_turf_gases[GAS_PLASMA]
+	var/oxy = open_turf_gases[GAS_OXYGEN]
+	var/n2 = open_turf_gases[GAS_NITROGEN]
+	var/co2 = open_turf_gases[GAS_CO2]
 
 	. = TRUE
 	if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index aa9c1d8b516..adb5e927175 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -135,16 +135,16 @@
 	if(no_teleport && (destination_area.area_flags & NOTELEPORT))
 		return
 
-	var/datum/gas_mixture/floor_gases= floor_turf.return_air()
+	var/datum/gas_mixture/floor_gases= floor_turf.return_air()?.getGases()
 
 	if(!floor_gases)
 		return
 
-	if(!(floor_gases.getGroupGas(GAS_OXYGEN) >= 16))
+	if(!(floor_gases[GAS_OXYGEN] >= 16))
 		return
-	if(floor_gases.getGroupGas(GAS_PLASMA))
+	if(floor_gases[GAS_PLASMA])
 		return
-	if(floor_gases.getGroupGas(GAS_CO2) >= 10)
+	if(floor_gases[GAS_CO2] >= 10)
 		return
 
 	// Aim for goldilocks temperatures and pressure
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 2267052fbc0..eebd9b8367f 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1370,7 +1370,7 @@
 	SEND_SIGNAL(src, COMSIG_ATOM_EXITED, gone, direction)
 
 ///Return atom temperature
-/atom/proc/getTemperature()
+/atom/proc/return_temperature()
 	return
 
 /**
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 0574d52fc52..b8de7717ac4 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -41,11 +41,11 @@
 
 	var/turf/open/T = get_turf(src)
 	var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T)
-	if(hotspot && istype(T) && T.air)
+	if(hotspot && istype(T) && T.zone)
 		qdel(hotspot)
 		var/datum/gas_mixture/G = T.return_air()
 		if(G.getGroupGas(GAS_PLASMA))
-			var/plas_amt = min(30, G.getGroupGas(GAS_PLASMA)) //Absorb some plasma
+			var/plas_amt = min(30, G.gas[GAS_PLASMA]) //Absorb some plasma
 			G.adjustGas(GAS_PLASMA, -plas_amt)
 			absorbed_plasma += plas_amt
 		if(G.temperature > T20C)
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index 0272ef5309a..c498d78fbf2 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -177,7 +177,7 @@
 			for(var/obj/effect/hotspot/H in T)
 				qdel(H)
 			if(G.getGroupGas(GAS_PLASMA))
-				G.adjustGas(GAS_NITROGEN, G.getGroupGas(GAS_PLASMA))
+				G.adjustGas(GAS_NITROGEN, G.gas[GAS_PLASMA])
 				G.adjustGas(GAS_PLASMA, -G.gas[GAS_PLASMA])
 		if (weldvents)
 			for(var/obj/machinery/atmospherics/components/unary/U in T)
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index bb781cc76ee..1b84260dda5 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -150,17 +150,17 @@
 			message += span_boldnotice("Node [mix_number]")
 			mix_name += " - Node [mix_number]"
 
-		var/total_moles = air.getMoles()
+		var/total_moles = air.get_moles()
 		var/pressure = air.returnPressure()
-		var/volume = air.getVolume() //could just do mixture.volume... but safety, I guess?
-		var/temperature = air.getTemperature()
+		var/volume = air.get_volume() //could just do mixture.volume... but safety, I guess?
+		var/temperature = air.get_temperature()
 
 		if(total_moles > 0)
 			message += span_notice("Moles: [round(total_moles, 0.01)] mol")
 
 			var/list/cached_gases = air.gas
 			for(var/id in cached_gases)
-				var/gas_concentration = air.getGroupGas(id)/total_moles
+				var/gas_concentration = cached_gases[id]/total_moles
 				message += span_notice("[id]: [round(air.getGroupGas(id), 0.01)] mol ([round(gas_concentration*100, 0.01)] %)")
 			message += span_notice("Temperature: [round(temperature - T0C,0.01)] &deg;C ([round(temperature, 0.01)] K)")
 			message += span_notice("Volume: [volume] L")
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 18bfd33c663..005988ebd8d 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -266,7 +266,6 @@
 	SIGNAL_HANDLER
 	if(ptank)
 		var/datum/gas_mixture/tank_mix = ptank.return_air()
-		tank_mix.gas[GAS_PLASMA] = (10*ONE_ATMOSPHERE)*ptank.volume/(R_IDEAL_GAS_EQUATION*T20C)
-	else
+		tank_mix.setGasMoles(GAS_PLASMA,(10*ONE_ATMOSPHERE)*ptank.volume/(R_IDEAL_GAS_EQUATION*T20C))
 		ptank = new /obj/item/tank/internals/plasma/full(src)
 	update_appearance()
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index 2e00422b02f..72700022e5b 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -92,7 +92,7 @@
 		target.visible_message(span_danger("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!"), \
 			span_userdanger("[user]'s punches you!"))
 		return
-	/*if(!molar_cmp_equals(gasused.getMoles(), gasperfist * fisto_setting))
+	/*if(!molar_cmp_equals(gasused.get_moles(), gasperfist * fisto_setting))
 		to_chat(user, span_warning("\The [src]'s piston-ram lets out a weak hiss, it needs more gas!"))
 		playsound(loc, 'sound/weapons/punch4.ogg', 50, TRUE)
 		target.apply_damage((force / 2), BRUTE)
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index 82a57bd66bf..b6d359da97b 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -123,12 +123,12 @@
 		return COMSIG_MOVABLE_STOP_SPACEMOVE
 
 /obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
-	if((num < 0.005 || air_contents.getMoles() < num))
+	if((num < 0.005 || air_contents.get_moles() < num))
 		turn_off(user)
 		return
 
 	var/datum/gas_mixture/removed = remove_air(num)
-	if(removed.getMoles() < 0.005)
+	if(removed.get_moles() < 0.005)
 		turn_off(user)
 		return
 
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index 83e63904caf..d77e02a152d 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -292,7 +292,7 @@
 		return FALSE
 
 	var/pressure = air_contents.returnPressure()
-	var/temperature = air_contents.getTemperature()
+	var/temperature = air_contents.get_temperature()
 	if(temperature >= TANK_MELT_TEMPERATURE)
 		var/temperature_damage_ratio = (temperature - TANK_MELT_TEMPERATURE) / temperature
 		take_damage(max_integrity * temperature_damage_ratio * delta_time, BURN, FIRE, FALSE, NONE)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index b1ae29d5e90..71eec65afd6 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -119,8 +119,8 @@
 
 	if(breath_request>0)
 		var/datum/gas_mixture/environment = return_air()
-		var/breath_percentage = BREATH_VOLUME / environment.getVolume()
-		return remove_air(environment.getMoles() * breath_percentage)
+		var/breath_percentage = BREATH_VOLUME / environment.get_volume()
+		return remove_air(environment.get_moles() * breath_percentage)
 	else
 		return null
 
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index fcb15c7bc72..f169e6a6d28 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -697,9 +697,6 @@
 /obj/structure/closet/AllowDrop()
 	return TRUE
 
-/obj/structure/closet/getTemperature()
-	return
-
 /obj/structure/closet/proc/locker_carbon(datum/source, mob/living/carbon/shover, mob/living/carbon/target, shove_blocked)
 	SIGNAL_HANDLER
 	if(!opened && (locked || welded)) //Yes this could be less code, no I don't care
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 680e9063de7..6006a945626 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -203,7 +203,7 @@
 		return
 
 
-/obj/structure/transit_tube_pod/getTemperature()
+/obj/structure/transit_tube_pod/return_temperature()
 	return air_contents.temperature
 
 //special pod made by the dispenser, it fizzles away when reaching a station.
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 4b92b702298..16991ccc204 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -385,7 +385,7 @@
 
 /obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
 	if (exposed_temperature > melting_point)
-		take_damage(round(air.getVolume() / 100), BURN, 0, 0)
+		take_damage(round(air.get_volume() / 100), BURN, 0, 0)
 
 /obj/structure/window/get_dumping_location()
 	return null
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index cffed90e436..b081387af5d 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -180,7 +180,7 @@
 /turf/open/GetHeatCapacity()
 	. = air.getHeatCapacity()
 
-/turf/open/GetTemperature()
+/turf/open/return_temperature()
 	. = return_air().temperature
 
 /turf/open/TakeTemperature(temp)
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 4dbdc4e6c44..15a9f4b23cc 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -100,7 +100,7 @@
 /turf/open/lava/GetHeatCapacity()
 	. = 700000
 
-/turf/open/lava/GetTemperature()
+/turf/open/lava/return_temperature()
 	. = 5000
 
 /turf/open/lava/TakeTemperature(temp)
diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm
index d7542b55b02..b9b977f4f03 100644
--- a/code/modules/antagonists/heretic/knowledge/void_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm
@@ -48,7 +48,7 @@
 		return FALSE
 
 	var/turf/open/our_turf = loc
-	if(our_turf.GetTemperature() > T0C)
+	if(our_turf.return_temperature() > T0C)
 		loc.balloon_alert(user, "ritual failed, not cold enough!")
 		return FALSE
 
@@ -189,7 +189,7 @@
 		return FALSE
 
 	var/turf/open/our_turf = loc
-	if(our_turf.GetTemperature() > T0C)
+	if(our_turf.return_temperature() > T0C)
 		loc.balloon_alert(user, "ritual failed, not cold enough!")
 		return FALSE
 
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index 0bb31d04922..f32083ae17d 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -202,7 +202,7 @@
 
 /obj/item/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
 	var/datum/gas_mixture/our_mix = return_air()
-	var/datum/gas_mixture/removed = remove_air(our_mix.getMoles())
+	var/datum/gas_mixture/removed = remove_air(our_mix.get_moles())
 	var/turf/T = get_turf(src)
 	if(!T)
 		return
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 39641ff513b..0911fae8b97 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -31,7 +31,7 @@
 	return total_moles * group_multiplier
 
 //Takes a gas string and the amount of moles to adjust by.  Calls updateValues() if update isn't 0.
-/datum/gas_mixture/proc/adjustGas(gasid, moles, update = 1)
+/datum/gas_mixture/proc/adjustGas(gasid, moles, update = TRUE)
 	if(moles == 0)
 		return
 
@@ -43,6 +43,18 @@
 	if(update)
 		updateValues()
 
+/datum/gas_mixture/proc/setGasMoles(gasid, moles, update = TRUE, divide_among_group = FALSE)
+	if(moles == 0)
+		return
+
+	//Generally setGasMoles actions pre-calculate, just in case.
+	if(divide_among_group && group_multiplier != 1)
+		gas[gasid] = moles/group_multiplier
+	else
+		gas[gasid] = moles
+
+	if(update)
+		updateValues()
 
 //Same as adjustGas(), but takes a temperature which is mixed in with the gas.
 /datum/gas_mixture/proc/adjustGasWithTemp(gasid, moles, temp, update = 1)
@@ -299,10 +311,16 @@
 			. += gas[g]
 
 //Copies gas and temperature from another gas_mixture.
-/datum/gas_mixture/proc/copyFrom(const/datum/gas_mixture/sample)
-	gas = sample.gas.Copy()
-	temperature = sample.temperature
+/datum/gas_mixture/proc/copyFrom(const/datum/gas_mixture/sample, partial = 1)
+	var/list/cached_gas = gas
+	var/list/sample_gas = sample.gas.Copy()
+
+	//remove all gases not in the sample
+	cached_gas &= sample_gas
 
+	temperature = sample.temperature
+	for(var/id in sample_gas)
+		cached_gas[id] = sample_gas[id] * partial
 	updateValues()
 	return 1
 
@@ -473,20 +491,21 @@
 	if(M)
 		return getMass()/M
 
+/datum/gas_mixture/proc/hasGas(gas_id, required_amount)
+	var/amt = getGroupGas(gas_id)
+	return (amt >= required_amount)
+
 ////LINDA COMPATABILITY PROCS////
-/datum/gas_mixture/proc/getVolume()
+/datum/gas_mixture/proc/get_volume()
 	return max(0, volume)
 
-/datum/gas_mixture/proc/getTemperature()
+/datum/gas_mixture/proc/get_temperature()
 	return temperature
 
-/datum/gas_mixture/proc/getMoles()
+/datum/gas_mixture/proc/get_moles()
 	updateValues()
 	return total_moles
-
-/datum/gas_mixture/proc/hasGas(gas_id, required_amount)
-	var/amt = getGroupGas(gas_id)
-	return (amt >= required_amount)
+////END LINDA COMPATABILITY////
 
 ///Returns the gas list with an update.
 /datum/gas_mixture/proc/getGases()
@@ -521,8 +540,8 @@
  * eg:
  * Plas_PP = get_partial_pressure(gas_mixture.plasma)
  * O2_PP = get_partial_pressure(gas_mixture.oxygen)
- * getBreathPartialPressure(gas_pp) --> gas_pp/getMoles()*breath_pp = pp
- * getTrueBreathPressure(pp) --> gas_pp = pp/breath_pp*getMoles()
+ * getBreathPartialPressure(gas_pp) --> gas_pp/get_moles()*breath_pp = pp
+ * getTrueBreathPressure(pp) --> gas_pp = pp/breath_pp*get_moles()
  *
  * 10/20*5 = 2.5
  * 10 = 2.5/5*20
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 4db5c955299..45ddb2dd398 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -93,7 +93,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 		. += HEAT_CAPACITY_VACUUM //we want vacuums in turfs to have the same heat capacity as space
 
 /// Calculate moles
-/datum/gas_mixture/proc/getMoles()
+/datum/gas_mixture/proc/get_moles()
 	var/cached_gases = gases
 	TOTAL_MOLES(cached_gases, .)
 
@@ -116,11 +116,11 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 	return 0
 
 /// Calculate temperature in kelvins
-/datum/gas_mixture/proc/getTemperature()
+/datum/gas_mixture/proc/get_temperature()
 	return temperature
 
 /// Calculate volume in liters
-/datum/gas_mixture/proc/getVolume()
+/datum/gas_mixture/proc/get_volume()
 	return max(0, volume)
 
 /// Gets the gas visuals for everything in this mixture
@@ -251,7 +251,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 //Returns: bool indicating whether gases moved between the two mixes
 /datum/gas_mixture/proc/equalize(datum/gas_mixture/other)
 	. = FALSE
-	if(abs(getTemperature() - other.getTemperature()) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
+	if(abs(get_temperature() - other.get_temperature()) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
 		. = TRUE
 		var/self_heat_cap = getHeatCapacity()
 		var/other_heat_cap = other.getHeatCapacity()
@@ -290,7 +290,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 
 ///Copies variables from sample, moles multiplicated by partial
 ///Returns: 1 if we are mutable, 0 otherwise
-/datum/gas_mixture/proc/copyFrom(datum/gas_mixture/sample, partial = 1)
+/datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample, partial = 1)
 	var/list/cached_gases = gases //accessing datum vars is slower than proc vars
 	var/list/sample_gases = sample.gases
 
@@ -545,8 +545,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
  * eg:
  * Plas_PP = get_partial_pressure(gas_mixture.plasma)
  * O2_PP = get_partial_pressure(gas_mixture.oxygen)
- * getBreathPartialPressure(gas_pp) --> gas_pp/getMoles()*breath_pp = pp
- * getTrueBreathPressure(pp) --> gas_pp = pp/breath_pp*getMoles()
+ * getBreathPartialPressure(gas_pp) --> gas_pp/get_moles()*breath_pp = pp
+ * getTrueBreathPressure(pp) --> gas_pp = pp/breath_pp*get_moles()
  *
  * 10/20*5 = 2.5
  * 10 = 2.5/5*20
@@ -566,9 +566,9 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
  * - output_air (gasmix).
  */
 /datum/gas_mixture/proc/gas_pressure_minimum_transfer(datum/gas_mixture/output_air)
-	var/resulting_energy = output_air.thermal_energy() + (MOLAR_ACCURACY / getMoles() * thermal_energy())
-	var/resulting_capacity = output_air.getHeatCapacity() + (MOLAR_ACCURACY / getMoles() * getHeatCapacity())
-	return (output_air.getMoles() + MOLAR_ACCURACY) * R_IDEAL_GAS_EQUATION * (resulting_energy / resulting_capacity) / output_air.volume
+	var/resulting_energy = output_air.thermal_energy() + (MOLAR_ACCURACY / get_moles() * thermal_energy())
+	var/resulting_capacity = output_air.getHeatCapacity() + (MOLAR_ACCURACY / get_moles() * getHeatCapacity())
+	return (output_air.get_moles() + MOLAR_ACCURACY) * R_IDEAL_GAS_EQUATION * (resulting_energy / resulting_capacity) / output_air.volume
 
 
 /** Returns the amount of gas to be pumped to a specific container.
@@ -578,11 +578,11 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
  * - ignore_temperature. Returns a cheaper form of gas calculation, useful if the temperature difference between the two gasmixes is low or nonexistant.
  */
 /datum/gas_mixture/proc/gas_pressure_calculate(datum/gas_mixture/output_air, target_pressure, ignore_temperature = FALSE)
-	if((getMoles() <= 0) || (temperature <= 0))
+	if((get_moles() <= 0) || (temperature <= 0))
 		return FALSE
 
 	var/pressure_delta = 0
-	if((output_air.temperature <= 0) || (output_air.getMoles() <= 0))
+	if((output_air.temperature <= 0) || (output_air.get_moles() <= 0))
 		ignore_temperature = TRUE
 		pressure_delta = target_pressure
 	else
@@ -600,8 +600,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 	var/rt_high = R_IDEAL_GAS_EQUATION * min(temperature, output_air.temperature)
 	// These works by assuming our gas has extremely high heat capacity
 	// and the resultant gasmix will hit either the highest or lowest temperature possible.
-	var/lower_limit = max((pv / rt_low) - output_air.getMoles(), 0)
-	var/upper_limit = (pv / rt_high) - output_air.getMoles() // In theory this should never go below zero, the pressure_delta check above should account for this.
+	var/lower_limit = max((pv / rt_low) - output_air.get_moles(), 0)
+	var/upper_limit = (pv / rt_high) - output_air.get_moles() // In theory this should never go below zero, the pressure_delta check above should account for this.
 
 	/*
 	 * We have PV=nRT as a nice formula, we can rearrange it into nT = PV/R
@@ -627,12 +627,12 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
 
 	// Our thermal energy and moles
 	var/w2 = thermal_energy()
-	var/n2 = getMoles()
+	var/n2 = get_moles()
 	var/c2 = getHeatCapacity()
 
 	// Target thermal energy and moles
 	var/w1 = output_air.thermal_energy()
-	var/n1 = output_air.getMoles()
+	var/n1 = output_air.get_moles()
 	var/c1 = output_air.getHeatCapacity()
 
 	/// The PV/R part in our equation.
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index 23f4bc09952..1c960c98452 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -138,7 +138,7 @@
 /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.getMoles() > MIASTER_STERILIZATION_MAX_HUMIDITY)
+	if(cached_gases[/datum/gas/water_vapor] && cached_gases[/datum/gas/water_vapor][MOLES] / air.get_moles() > MIASTER_STERILIZATION_MAX_HUMIDITY)
 		return NO_REACTION
 
 	//Replace miasma with oxygen
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 047677f04cf..ef635f0ce5e 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -235,7 +235,7 @@
 							"unit" = "K ([round(temperature - T0C, 0.1)]C)",
 							"danger_level" = cur_tlv.get_danger_level(temperature)
 	))
-	var/total_moles = environment.getMoles()
+	var/total_moles = environment.get_moles()
 	var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume
 	for(var/gas_id in environment.getGases())
 		if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
diff --git a/code/modules/atmospherics/machinery/bluespace_vendor.dm b/code/modules/atmospherics/machinery/bluespace_vendor.dm
index c36d71a8aeb..ad817e8666e 100644
--- a/code/modules/atmospherics/machinery/bluespace_vendor.dm
+++ b/code/modules/atmospherics/machinery/bluespace_vendor.dm
@@ -208,7 +208,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/bluespace_vendor, 30)
 /obj/machinery/bluespace_vendor/ui_data(mob/user)
 	var/list/data = list()
 	var/list/bluespace_gasdata = list()
-	if(connected_machine.bluespace_network.getMoles())
+	if(connected_machine.bluespace_network.get_moles())
 		for(var/gas_id in connected_machine.bluespace_network.gases)
 			bluespace_gasdata.Add(list(list(
 			"name" = connected_machine.bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index ef3c491caa8..673c33b2e1b 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -283,5 +283,5 @@
 	var/datum/gas_mixture/air_output = connected_pump.airs[2]
 	input_pressure.set_output(air_input.returnPressure())
 	output_pressure.set_output(air_output.returnPressure())
-	input_temperature.set_output(air_input.getTemperature())
-	output_temperature.set_output(air_output.getTemperature())
+	input_temperature.set_output(air_input.get_temperature())
+	output_temperature.set_output(air_output.get_temperature())
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 7f6ff5ae65e..0948bea9e08 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm
@@ -37,7 +37,7 @@
 	var/datum/gas_mixture/air_input = airs[1]
 	var/datum/gas_mixture/air_output = airs[2]
 
-	if(!QUANTIZE(air_input.getMoles()) || !QUANTIZE(air_output.getMoles())) //Don't transfer if there's no gas
+	if(!QUANTIZE(air_input.get_moles()) || !QUANTIZE(air_output.get_moles())) //Don't transfer if there's no gas
 		return
 	var/datum/gas_mixture/remove_input = air_input.removeRatio(0.9)
 	var/datum/gas_mixture/remove_output = air_output.removeRatio(0.9)
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 df3865955af..82b65c908bb 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -81,7 +81,7 @@
 
 	var/datum/gas_mixture/removed = air1.removeRatio(transfer_ratio)
 
-	if(!removed.getMoles())
+	if(!removed.get_moles())
 		return
 
 	if(overclocked)//Some of the gas from the mixture leaks to the environment when overclocked
@@ -326,5 +326,5 @@
 	var/datum/gas_mixture/air_output = connected_pump.airs[2]
 	input_pressure.set_output(air_input.returnPressure())
 	output_pressure.set_output(air_output.returnPressure())
-	input_temperature.set_output(air_input.getTemperature())
-	output_temperature.set_output(air_output.getTemperature())
+	input_temperature.set_output(air_input.get_temperature())
+	output_temperature.set_output(air_output.get_temperature())
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
index c66f9449a28..6f671aebc7c 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
@@ -380,8 +380,8 @@
 		internal_fusion.temperature -= heat_limiter_modifier * 0.01 * delta_time
 
 	//heat up and output what's in the internal_output into the linked_output port
-	if(internal_output.getMoles() > 0)
-		if(moderator_internal.getMoles() > 0)
+	if(internal_output.get_moles() > 0)
+		if(moderator_internal.get_moles() > 0)
 			internal_output.temperature = moderator_internal.temperature * HIGH_EFFICIENCY_CONDUCTIVITY
 		else
 			internal_output.temperature = internal_fusion.temperature * METALLIC_VOID_CONDUCTIVITY
@@ -410,8 +410,8 @@
 	if (!power_level)
 		return
 	// All gases in the moderator slowly burn away over time, whether used for production or not
-	if(moderator_internal.getMoles() > 0)
-		moderator_internal.remove(moderator_internal.getMoles() * (1 - (1 - 0.0005 * power_level) ** delta_time))
+	if(moderator_internal.get_moles() > 0)
+		moderator_internal.remove(moderator_internal.get_moles() * (1 - (1 - 0.0005 * power_level) ** delta_time))
 
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/process_damageheal(delta_time)
 	// Archive current health for damage cap purposes
@@ -419,16 +419,16 @@
 
 	// If we're operating at an extreme power level, take increasing damage for the amount of fusion mass over a low threshold
 	if(power_level >= HYPERTORUS_OVERFULL_MIN_POWER_LEVEL)
-		var/overfull_damage_taken = HYPERTORUS_OVERFULL_MOLAR_SLOPE * internal_fusion.getMoles() + HYPERTORUS_OVERFULL_TEMPERATURE_SLOPE * coolant_temperature + HYPERTORUS_OVERFULL_CONSTANT
+		var/overfull_damage_taken = HYPERTORUS_OVERFULL_MOLAR_SLOPE * internal_fusion.get_moles() + HYPERTORUS_OVERFULL_TEMPERATURE_SLOPE * coolant_temperature + HYPERTORUS_OVERFULL_CONSTANT
 		critical_threshold_proximity = max(critical_threshold_proximity + max(overfull_damage_taken * delta_time, 0), 0)
 
 	// If we're running on a thin fusion mix, heal up
-	if(internal_fusion.getMoles() < HYPERTORUS_SUBCRITICAL_MOLES && power_level <= 5)
-		var/subcritical_heal_restore = (internal_fusion.getMoles() - HYPERTORUS_SUBCRITICAL_MOLES) / HYPERTORUS_SUBCRITICAL_SCALE
+	if(internal_fusion.get_moles() < HYPERTORUS_SUBCRITICAL_MOLES && power_level <= 5)
+		var/subcritical_heal_restore = (internal_fusion.get_moles() - HYPERTORUS_SUBCRITICAL_MOLES) / HYPERTORUS_SUBCRITICAL_SCALE
 		critical_threshold_proximity = max(critical_threshold_proximity + min(subcritical_heal_restore * delta_time, 0), 0)
 
 	// If coolant is sufficiently cold, heal up
-	if(internal_fusion.getMoles() > 0 && (airs[1].getMoles() && coolant_temperature < HYPERTORUS_COLD_COOLANT_THRESHOLD) && power_level <= 4)
+	if(internal_fusion.get_moles() > 0 && (airs[1].get_moles() && coolant_temperature < HYPERTORUS_COLD_COOLANT_THRESHOLD) && power_level <= 4)
 		var/cold_coolant_heal_restore = log(10, max(coolant_temperature, 1) * HYPERTORUS_COLD_COOLANT_SCALE) - (HYPERTORUS_COLD_COOLANT_MAX_RESTORE * 2)
 		critical_threshold_proximity = max(critical_threshold_proximity + min(cold_coolant_heal_restore * delta_time, 0), 0)
 
@@ -438,8 +438,8 @@
 	critical_threshold_proximity = min(critical_threshold_proximity_archived + (delta_time * DAMAGE_CAP_MULTIPLIER * melting_point), critical_threshold_proximity)
 
 	// If we have a preposterous amount of mass in the fusion mix, things get bad extremely fast
-	if(internal_fusion.getMoles() >= HYPERTORUS_HYPERCRITICAL_MOLES)
-		var/hypercritical_damage_taken = max((internal_fusion.getMoles() - HYPERTORUS_HYPERCRITICAL_MOLES) * HYPERTORUS_HYPERCRITICAL_SCALE, 0)
+	if(internal_fusion.get_moles() >= HYPERTORUS_HYPERCRITICAL_MOLES)
+		var/hypercritical_damage_taken = max((internal_fusion.get_moles() - HYPERTORUS_HYPERCRITICAL_MOLES) * HYPERTORUS_HYPERCRITICAL_SCALE, 0)
 		critical_threshold_proximity = max(critical_threshold_proximity + min(hypercritical_damage_taken, HYPERTORUS_HYPERCRITICAL_MAX_DAMAGE), 0) * delta_time
 
 	// High power fusion might create other matter other than helium, iron is dangerous inside the machine, damage can be seen
@@ -469,7 +469,7 @@
 		zap_number += 1
 
 	var/cutoff = 1500
-	cutoff = clamp(3000 - (power_level * (internal_fusion.getMoles() * 0.45)), 450, 3000)
+	cutoff = clamp(3000 - (power_level * (internal_fusion.get_moles() * 0.45)), 450, 3000)
 
 	var/zaps_aspect = DEFAULT_ZAP_ICON_STATE
 	var/flags = ZAP_SUPERMATTER_FLAGS
@@ -514,25 +514,25 @@
 	moderator_internal.garbage_collect()
 
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/process_internal_cooling(delta_time)
-	if(moderator_internal.getMoles() > 0 && internal_fusion.getMoles() > 0)
+	if(moderator_internal.get_moles() > 0 && internal_fusion.get_moles() > 0)
 		//Modifies the moderator_internal temperature based on energy conduction and also the fusion by the same amount
 		var/fusion_temperature_delta = internal_fusion.temperature - moderator_internal.temperature
 		var/fusion_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * fusion_temperature_delta * (internal_fusion.getHeatCapacity() * moderator_internal.getHeatCapacity() / (internal_fusion.getHeatCapacity() + moderator_internal.getHeatCapacity()))
 		internal_fusion.temperature = max(internal_fusion.temperature - fusion_heat_amount / internal_fusion.getHeatCapacity(), TCMB)
 		moderator_internal.temperature = max(moderator_internal.temperature + fusion_heat_amount / moderator_internal.getHeatCapacity(), TCMB)
 
-	if(airs[1].getMoles() * 0.05 <= MINIMUM_MOLE_COUNT)
+	if(airs[1].get_moles() * 0.05 <= MINIMUM_MOLE_COUNT)
 		return
 	var/datum/gas_mixture/cooling_port = airs[1]
-	var/datum/gas_mixture/cooling_remove = cooling_port.remove(0.05 * cooling_port.getMoles())
+	var/datum/gas_mixture/cooling_remove = cooling_port.remove(0.05 * cooling_port.get_moles())
 	//Cooling of the moderator gases with the cooling loop in and out the core
-	if(moderator_internal.getMoles() > 0)
+	if(moderator_internal.get_moles() > 0)
 		var/coolant_temperature_delta = cooling_remove.temperature - moderator_internal.temperature
 		var/cooling_heat_amount = (1 - (1 - HIGH_EFFICIENCY_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.getHeatCapacity() * moderator_internal.getHeatCapacity() / (cooling_remove.getHeatCapacity() + moderator_internal.getHeatCapacity()))
 		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.getHeatCapacity(), TCMB)
 		moderator_internal.temperature = max(moderator_internal.temperature + cooling_heat_amount / moderator_internal.getHeatCapacity(), TCMB)
 
-	else if(internal_fusion.getMoles() > 0)
+	else if(internal_fusion.get_moles() > 0)
 		var/coolant_temperature_delta = cooling_remove.temperature - internal_fusion.temperature
 		var/cooling_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.getHeatCapacity() * internal_fusion.getHeatCapacity() / (cooling_remove.getHeatCapacity() + internal_fusion.getHeatCapacity()))
 		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.getHeatCapacity(), TCMB)
@@ -544,7 +544,7 @@
 
 	//Check and stores the gases from the moderator input in the moderator internal gasmix
 	var/datum/gas_mixture/moderator_port = linked_moderator.airs[1]
-	if(start_moderator && moderator_port.getMoles())
+	if(start_moderator && moderator_port.get_moles())
 		moderator_internal.merge(moderator_port.remove(moderator_injection_rate * delta_time))
 		linked_moderator.update_parents()
 
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
index 992afb55152..d7c2bab399c 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
@@ -240,7 +240,7 @@
 
 	//Internal Fusion gases
 	var/list/fusion_gasdata = list()
-	if(connected_core.internal_fusion.getMoles())
+	if(connected_core.internal_fusion.get_moles())
 		for(var/gas_type in connected_core.internal_fusion.gases)
 			var/datum/gas/gas = gas_type
 			fusion_gasdata.Add(list(list(
@@ -256,7 +256,7 @@
 				)))
 	//Moderator gases
 	var/list/moderator_gasdata = list()
-	if(connected_core.moderator_internal.getMoles())
+	if(connected_core.moderator_internal.get_moles())
 		for(var/gas_type in connected_core.moderator_internal.gases)
 			var/datum/gas/gas = gas_type
 			moderator_gasdata.Add(list(list(
@@ -382,7 +382,7 @@
 			if(fuel)
 				connected_core.selected_fuel = fuel
 				fuel_mix = fuel.name
-			if(connected_core.internal_fusion.getMoles())
+			if(connected_core.internal_fusion.get_moles())
 				connected_core.dump_gases()
 			connected_core.update_parents() //prevent the machine from stopping because of the recipe change and the pipenet not updating
 			connected_core.linked_input.update_parents()
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
index 203aa4a2058..80174808f65 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
@@ -237,7 +237,7 @@
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_fuel()
 	if(!selected_fuel)
 		return FALSE
-	if(!internal_fusion.getMoles())
+	if(!internal_fusion.get_moles())
 		return FALSE
 	for(var/gas_type in selected_fuel.requirements)
 		internal_fusion.assert_gas(gas_type)
@@ -267,7 +267,7 @@
 
 ///Removes the gases from the internal gasmix when the recipe is changed
 /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/dump_gases()
-	var/datum/gas_mixture/remove = internal_fusion.remove(internal_fusion.getMoles())
+	var/datum/gas_mixture/remove = internal_fusion.remove(internal_fusion.get_moles())
 	linked_output.airs[1].merge(remove)
 	internal_fusion.garbage_collect()
 	linked_input.airs[1].garbage_collect()
@@ -476,7 +476,7 @@
 			around_turfs -= turf
 			continue
 	var/datum/gas_mixture/remove_fusion
-	if(internal_fusion.getMoles() > 0)
+	if(internal_fusion.get_moles() > 0)
 		remove_fusion = internal_fusion.removeRatio(0.2)
 		var/datum/gas_mixture/remove
 		for(var/i in 1 to gas_pockets)
@@ -485,7 +485,7 @@
 			local.assume_air(remove)
 		loc.assume_air(internal_fusion)
 	var/datum/gas_mixture/remove_moderator
-	if(moderator_internal.getMoles() > 0)
+	if(moderator_internal.get_moles() > 0)
 		remove_moderator = moderator_internal.removeRatio(0.2)
 		var/datum/gas_mixture/remove
 		for(var/i in 1 to gas_pockets)
@@ -587,7 +587,7 @@
 		spill_gases(cracked_part, moderator_internal, ratio = 1 - (1 - leak_rate) ** delta_time)
 		return
 
-	if (moderator_internal.getMoles() < HYPERTORUS_HYPERCRITICAL_MOLES)
+	if (moderator_internal.get_moles() < HYPERTORUS_HYPERCRITICAL_MOLES)
 		return
 	cracked_part = create_crack()
 	// See if we do anything in the initial rupture
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 920e74f2daf..cbd6b1d06e0 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
@@ -150,8 +150,8 @@
 ///Conduction between the internal gasmix and the moderating (cooling/heating) gasmix.
 /obj/machinery/atmospherics/components/binary/crystallizer/proc/heat_conduction()
 	var/datum/gas_mixture/cooling_port = airs[1]
-	if(cooling_port.getMoles() > MINIMUM_MOLE_COUNT)
-		if(internal.getMoles() > 0)
+	if(cooling_port.get_moles() > MINIMUM_MOLE_COUNT)
+		if(internal.get_moles() > 0)
 			var/coolant_temperature_delta = cooling_port.temperature - internal.temperature
 			var/cooling_heat_capacity = cooling_port.getHeatCapacity()
 			var/internal_heat_capacity = internal.getHeatCapacity()
@@ -169,7 +169,7 @@
 
 ///Removes the gases from the internal gasmix when the recipe is changed
 /obj/machinery/atmospherics/components/binary/crystallizer/proc/dump_gases()
-	var/datum/gas_mixture/remove = internal.remove(internal.getMoles())
+	var/datum/gas_mixture/remove = internal.remove(internal.get_moles())
 	airs[2].merge(remove)
 	internal.garbage_collect()
 
@@ -179,7 +179,7 @@
 
 	inject_gases()
 
-	if(!internal.getMoles())
+	if(!internal.get_moles())
 		return
 
 	heat_conduction()
@@ -266,7 +266,7 @@
 		data["selected"] = ""
 
 	var/list/internal_gas_data = list()
-	if(internal.getMoles())
+	if(internal.get_moles())
 		for(var/gasid in internal.gases)
 			internal_gas_data.Add(list(list(
 			"name"= internal.gases[gasid][GAS_META][META_GAS_NAME],
@@ -294,7 +294,7 @@
 	data["requirements"] = requirements.Join("\n")
 
 	var/temperature
-	if(internal.getMoles())
+	if(internal.get_moles())
 		temperature = internal.temperature
 	else
 		temperature = 0
@@ -316,7 +316,7 @@
 			selected_recipe = null
 			var/recipe_name = "nothing"
 			var/datum/gas_recipe/recipe = GLOB.gas_recipe_meta[params["mode"]]
-			if(internal.getMoles())
+			if(internal.get_moles())
 				dump_gases()
 			quality_loss = 0
 			progress_bar = 0
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 0b246d6d07f..be97241e43a 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -88,7 +88,7 @@
 
 	var/datum/gas_mixture/removed = air1.removeRatio(transfer_ratio)
 
-	if(!removed || !removed.getMoles())
+	if(!removed || !removed.get_moles())
 		return
 
 	var/filtering = TRUE
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index a2b3a906ef1..06df3448db1 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -76,8 +76,8 @@
 	var/transfer_moles1 = air1.temperature ? node1_concentration * general_transfer / air1.temperature : 0
 	var/transfer_moles2 = air2.temperature ? node2_concentration * general_transfer / air2.temperature : 0
 
-	var/air1_moles = air1.getMoles()
-	var/air2_moles = air2.getMoles()
+	var/air1_moles = air1.get_moles()
+	var/air2_moles = air2.get_moles()
 
 	if(!node2_concentration)
 		if(air1.temperature <= 0)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
index 1084c6de03c..2860ed39e97 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
@@ -37,7 +37,7 @@
 	update_appearance()
 
 /obj/machinery/atmospherics/components/unary/bluespace_sender/Destroy()
-	if(bluespace_network.getMoles())
+	if(bluespace_network.get_moles())
 		var/turf/local_turf = get_turf(src)
 		local_turf.assume_air(bluespace_network)
 	return ..()
@@ -75,7 +75,7 @@
 			return
 	if(default_change_direction_wrench(user, item))
 		return
-	if(item.tool_behaviour == TOOL_CROWBAR && panel_open && bluespace_network.getMoles() > 0)
+	if(item.tool_behaviour == TOOL_CROWBAR && panel_open && bluespace_network.get_moles() > 0)
 		say("WARNING - Bluespace network can contain hazardous gases, deconstruct with caution!")
 		if(!do_after(user, 3 SECONDS, src))
 			return
@@ -120,7 +120,7 @@
 	data["on"] = on
 	data["gas_transfer_rate"] = gas_transfer_rate
 	var/list/bluespace_gasdata = list()
-	if(bluespace_network.getMoles())
+	if(bluespace_network.get_moles())
 		for(var/gas_id in bluespace_network.gases)
 			bluespace_gasdata.Add(list(list(
 			"name" = bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
@@ -170,8 +170,8 @@
 			. = TRUE
 
 		if("retrieve")
-			if(bluespace_network.getMoles() > 0)
-				var/datum/gas_mixture/remove = bluespace_network.remove(bluespace_network.getMoles())
+			if(bluespace_network.get_moles() > 0)
+				var/datum/gas_mixture/remove = bluespace_network.remove(bluespace_network.get_moles())
 				airs[1].merge(remove)
 				update_parents()
 				bluespace_network.garbage_collect()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 470087c5e84..aaf25208977 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -272,7 +272,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 
 	var/datum/gas_mixture/air1 = airs[1]
 
-	if(air1.getMoles() > CRYO_MIN_GAS_MOLES)
+	if(air1.get_moles() > CRYO_MIN_GAS_MOLES)
 		if(beaker)
 			beaker.reagents.trans_to(occupant, (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * delta_time, efficiency * CRYO_MULTIPLY_FACTOR, methods = VAPOR) // Transfer reagents.
 			consume_gas = TRUE
@@ -287,7 +287,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 	var/datum/gas_mixture/air1 = airs[1]
 
 	/* PARIAH EDIT REMOVAL - HUGBOX BARGAGE
-	if(!nodes[1] || !airs[1] || !air1.gas.len || air1.getMoles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work.
+	if(!nodes[1] || !airs[1] || !air1.gas.len || air1.get_moles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work.
 		var/msg = "Insufficient cryogenic gas, shutting down."
 		radio.talk_into(src, msg, radio_channel)
 		set_on(FALSE)
@@ -327,7 +327,7 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 		return null
 	var/datum/gas_mixture/air1 = airs[1]
 	var/breath_percentage = breath_request / air1.volume
-	return air1.remove(air1.getMoles() * breath_percentage)
+	return air1.remove(air1.get_moles() * breath_percentage)
 
 /obj/machinery/atmospherics/components/unary/cryo_cell/assume_air(datum/gas_mixture/giver)
 	airs[1].merge(giver)
@@ -539,10 +539,10 @@ GLOBAL_VAR_INIT(cryo_overlay_cover_off, mutable_appearance('icons/obj/cryogenics
 /obj/machinery/atmospherics/components/unary/cryo_cell/can_see_pipes()
 	return FALSE // you can't see the pipe network when inside a cryo cell.
 
-/obj/machinery/atmospherics/components/unary/cryo_cell/getTemperature()
+/obj/machinery/atmospherics/components/unary/cryo_cell/return_temperature()
 	var/datum/gas_mixture/G = airs[1]
 
-	if(G.getMoles() > 10)
+	if(G.get_moles() > 10)
 		return G.temperature
 	return ..()
 
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 5823dbe390a..04799bd414d 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -143,7 +143,7 @@
 	// The gas we want to cool/heat
 	var/datum/gas_mixture/port = airs[1]
 
-	if(!port.getMoles()) // Nothing to cool? go home lad
+	if(!port.get_moles()) // Nothing to cool? go home lad
 		return
 
 	var/port_capacity = port.getHeatCapacity()
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 b616ffb70c9..44f3aab9e51 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -121,7 +121,7 @@
 				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.getMoles())
+				if(!removed || !removed.get_moles())
 					return
 
 				loc.assume_air(removed)
@@ -139,7 +139,7 @@
 
 			var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
 
-			if(!removed || !removed.getMoles()) //No venting from space 4head
+			if(!removed || !removed.get_moles()) //No venting from space 4head
 				return
 
 			air_contents.merge(removed)
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 977134d2fda..7593168ceef 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -254,7 +254,7 @@
 
 	else //Just siphoning all air
 
-		var/transfer_moles = environment.getMoles() * (volume_rate / environment.volume)
+		var/transfer_moles = environment.get_moles() * (volume_rate / environment.volume)
 
 		var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
 
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index 6e9098c571c..3152100da0a 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -194,7 +194,7 @@
 
 
 	var/turf/modeled_location = target
-	target_temperature = modeled_location.GetTemperature()
+	target_temperature = modeled_location.return_temperature()
 	target_heat_capacity = modeled_location.GetHeatCapacity()
 
 	var/delta_temperature = air.temperature - target_temperature
@@ -238,9 +238,36 @@
 			pipeline_list |= atmos_machine.return_pipenets_for_reconcilation(src)
 			gas_mixture_list |= atmos_machine.return_airs_for_reconcilation(src)
 
-	equalize_gases(gas_mixture_list)
 
+	var/total_thermal_energy = 0
+	var/total_heat_capacity = 0
+	var/datum/gas_mixture/total_gas_mixture = new
+
+	var/list/total_gases = total_gas_mixture.gas
+
+	for(var/datum/gas_mixture/gas_mixture as anything in gas_mixture_list)
+		total_gas_mixture.volume += gas_mixture.volume
+
+		// This is sort of a combined merge + heat_capacity calculation
+
+		var/list/giver_gases = gas_mixture.gas
+		//gas transfer
+		for(var/giver_id in giver_gases)
+			var/moles = giver_gases[giver_id]
+			total_gas_mixture.adjustGas(giver_id, moles)
+
+		total_thermal_energy += THERMAL_ENERGY(gas_mixture)
+
+	total_heat_capacity = total_gas_mixture.getHeatCapacity()
+	total_gas_mixture.temperature = total_heat_capacity ? (total_thermal_energy / total_heat_capacity) : 0
+
+	if(total_gas_mixture.volume > 0)
+		//Update individual gas_mixtures by volume ratio
+		for(var/mixture in gas_mixture_list)
+			var/datum/gas_mixture/gas_mixture = mixture
+			gas_mixture.copyFrom(total_gas_mixture, gas_mixture.volume / total_gas_mixture.volume)
 
+/*
 /proc/equalize_gases(list/datum/gas_mixture/gases)
 	//Calculate totals from individual components
 	var/total_volume = 0
@@ -279,3 +306,4 @@
 			gasmix.multiply(gasmix.volume)
 
 	return 1
+*/
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 3ee63ba898e..500ff56c50b 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -60,7 +60,7 @@
 		broken_message = span_boldwarning("EXTERNAL PRESSURE OVER THRESHOLD")
 		set_broken(TRUE)
 		return FALSE
-	if(G.getMoles() > max_ext_mol)
+	if(G.get_moles() > max_ext_mol)
 		broken_message = span_boldwarning("EXTERNAL AIR CONCENTRATION OVER THRESHOLD")
 		set_broken(TRUE)
 		return FALSE
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index d63ff0b2e24..ac0ac32ae1c 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -30,7 +30,7 @@
 			environment_temperature = local_turf.temperature
 		else
 			var/turf/open/open_local = local_turf
-			environment_temperature = open_local.GetTemperature()
+			environment_temperature = open_local.return_temperature()
 	else
 		environment_temperature = local_turf.temperature
 	if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference)
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 64b540ecd1a..4b672388494 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -543,7 +543,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
  */
 /obj/machinery/portable_atmospherics/canister/proc/canister_break()
 	disconnect()
-	var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.getMoles())
+	var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.get_moles())
 	var/turf/T = get_turf(src)
 	T.assume_air(expelled_gas)
 
@@ -573,7 +573,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 /obj/machinery/portable_atmospherics/canister/process(delta_time)
 
 	var/our_pressure = air_contents.returnPressure()
-	var/our_temperature = air_contents.getTemperature()
+	var/our_temperature = air_contents.get_temperature()
 
 	protected_contents = FALSE
 	if(shielding_powered)
@@ -620,7 +620,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	air_contents.react()
 
 	var/our_pressure = air_contents.returnPressure()
-	var/our_temperature = air_contents.getTemperature()
+	var/our_temperature = air_contents.get_temperature()
 
 	///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(!protected_contents && (our_temperature > heat_limit || our_pressure > pressure_limit))
@@ -741,7 +741,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 				if(!holding)
 					var/list/gaseslog = list() //list for logging all gases in canister
 					for(var/gas in air_contents.gas)
-						gaseslog[xgm_gas_data.name[gas]] = air_contents.getGroupGas(gas)	//adds gases to gaseslog
+						gaseslog[xgm_gas_data.name[gas]] = air_contents.gas[gas]	//adds gases to gaseslog
 						if(!(xgm_gas_data.flags[gas] & XGM_GAS_CONTAMINANT|XGM_GAS_FUEL))
 							continue
 						danger = TRUE //at least 1 danger gas
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 3d1372c44e9..22b8413db86 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -45,7 +45,7 @@
 
 /obj/machinery/portable_atmospherics/pump/process_atmos()
 	var/pressure = air_contents.returnPressure()
-	var/temperature = air_contents.getTemperature()
+	var/temperature = air_contents.get_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)
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 1bc15f5519b..e7c8abbcee5 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -45,7 +45,7 @@
 
 /obj/machinery/portable_atmospherics/scrubber/process_atmos()
 	var/pressure = air_contents.returnPressure()
-	var/temperature = air_contents.getTemperature()
+	var/temperature = air_contents.get_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)
diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm
index ff59a4f8163..0f11dc967b0 100644
--- a/code/modules/clothing/masks/gas_filter.dm
+++ b/code/modules/clothing/masks/gas_filter.dm
@@ -51,38 +51,38 @@
  *
  */
 /obj/item/gas_filter/proc/reduce_filter_status(datum/gas_mixture/breath)
-/*
+	var/list/gases = breath.getGases()
 	var/danger_points = 0
 
-	for(var/gas_id in breath.gas)
+	for(var/gas_id in gases)
 		if(gas_id in high_filtering_gases)
-			if(breath.getGroupGas(gas_id) > HIGH_FILTERING_MOLES)
-				breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(gases[gas_id] > HIGH_FILTERING_MOLES)
+				gases[gas_id] = max(gases[gas_id] - filter_strength_high * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 0.5
 				continue
-			breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			gases[gas_id] = max(gases[gas_id] - filter_strength_high * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.05
 			continue
 		if(gas_id in mid_filtering_gases)
-			if(breath.getGroupGas(gas_id) > MID_FILTERING_MOLES)
-				breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id)- filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(gases[gas_id] > MID_FILTERING_MOLES)
+				gases[gas_id] = max(gases[gas_id]- filter_strength_mid * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 0.75
 				continue
-			breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			gases[gas_id] = max(gases[gas_id] - filter_strength_mid * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.15
 			continue
 		if(gas_id in low_filtering_gases)
-			if(breath.getGroupGas(gas_id)> LOW_FILTERING_MOLES)
-				breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0)
+			if(gases[gas_id] > LOW_FILTERING_MOLES)
+				gases[gas_id] = max(gases[gas_id] - filter_strength_low * filter_efficiency * HIGH_FILTERING_RATIO, 0)
 				danger_points += 1
 				continue
-			breath.getGroupGas(gas_id) = max(breath.getGroupGas(gas_id) - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0)
+			gases[gas_id] = max(gases[gas_id] - filter_strength_low * filter_efficiency * LOW_FILTERING_RATIO, 0)
 			danger_points += 0.5
 			continue
 
 	filter_status = max(filter_status - danger_points - FILTERS_CONSTANT_WEAR, 0)
 	return breath
-*/
+
 
 /obj/item/gas_filter/damaged
 	name = "damaged gas filter"
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index 330ab7a00bc..d559b4372bd 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -259,7 +259,7 @@
 
 /obj/item/clothing/head/helmet/space/suicide_act(mob/living/carbon/user)
 	var/datum/gas_mixture/environment = user.loc.return_air()
-	if(HAS_TRAIT(user, TRAIT_RESISTCOLD) || !environment || environment.getTemperature() >= user.get_body_temp_cold_damage_limit())
+	if(HAS_TRAIT(user, TRAIT_RESISTCOLD) || !environment || environment.get_temperature() >= user.get_body_temp_cold_damage_limit())
 		user.visible_message(span_suicide("[user] is beating [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
 		return BRUTELOSS
 	user.say("You want proof? I'll give you proof! Here's proof of what'll happen to you if you stay here with your stuff!", forced = "space helmet suicide")
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index e8a0cc199cd..3fcaf759832 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -267,7 +267,7 @@
 		var/datum/gas_mixture/gas_mix = turf.air
 		if(!gas_mix.getGroupGas(GAS_OXYGEN))
 			return
-		gas_mix.gas[GAS_OXYGEN] = max(gas_mix.getGroupGas(GAS_OXYGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.setGasMoles(GAS_OXYGEN, max(gas_mix.gas[GAS_OXYGEN] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0))
 
 /datum/spacevine_mutation/nitro_eater
 	name = "Nitrogen consuming"
@@ -281,7 +281,7 @@
 		var/datum/gas_mixture/gas_mix = turf.air
 		if(!gas_mix.getGroupGas(GAS_NITROGEN))
 			return
-		gas_mix.gas[GAS_NITROGEN] = max(gas_mix.getGroupGas(GAS_NITROGEN) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.setGasMoles(GAS_NITROGEN, max(gas_mix.gas[GAS_NITROGEN] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0))
 
 /datum/spacevine_mutation/carbondioxide_eater
 	name = "CO2 consuming"
@@ -295,7 +295,7 @@
 		var/datum/gas_mixture/gas_mix = turf.air
 		if(!gas_mix.getGroupGas(GAS_OXYGEN))
 			return
-		gas_mix.gas[GAS_CO2] = max(gas_mix.getGroupGas(GAS_CO2) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.setGasMoles(GAS_CO2, max(gas_mix.gas[GAS_CO2] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0))
 
 /datum/spacevine_mutation/plasma_eater
 	name = "Plasma consuming"
@@ -309,7 +309,7 @@
 		var/datum/gas_mixture/gas_mix = turf.air
 		if(!gas_mix.getGroupGas(GAS_PLASMA))
 			return
-		gas_mix.gas[GAS_PLASMA] = max(gas_mix.getGroupGas(GAS_PLASMA) - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0)
+		gas_mix.setGasMoles(GAS_PLASMA, max(gas_mix.gas[GAS_PLASMA] - GAS_MUTATION_REMOVAL_MULTIPLIER * holder.energy, 0))
 
 /datum/spacevine_mutation/thorns
 	name = "Thorny"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index dbfa064f262..64917ada9af 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
 
 
 /mob/living/carbon/alien/humanoid/check_breath(datum/gas_mixture/breath)
-	if(breath && breath.getMoles() > 0 && !sneaking)
+	if(breath && breath.get_moles() > 0 && !sneaking)
 		playsound(get_turf(src), pick('sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg'), 50, FALSE, -5)
 	..()
 
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 7408cbcc100..f3c267e7102 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -6,7 +6,7 @@
 	if(status_flags & GODMODE)
 		return
 
-	if(!breath || (breath.getMoles() == 0))
+	if(!breath || (breath.get_moles() == 0))
 		//Aliens breathe in vaccuum
 		return 0
 
@@ -15,10 +15,10 @@
 
 	var/plasma_used = 0
 	var/plas_detect_threshold = 0.02
-	var/breath_pressure = (breath.getMoles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
+	var/breath_pressure = (breath.get_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
 
 	//Partial pressure of the plasma in our breath
-	var/Plasma_pp = (breath.getGroupGas(GAS_PLASMA)/breath.getMoles())*breath_pressure
+	var/Plasma_pp = (breath.getGroupGas(GAS_PLASMA)/breath.get_moles())*breath_pressure
 
 	if(Plasma_pp > plas_detect_threshold) // Detect plasma in air
 		adjustPlasma(breath.getGroupGas(GAS_PLASMA)*250)
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 1563e36e5f7..dbf39d46237 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -552,7 +552,7 @@
 	var/cooldown = 150
 	var/last_teleport = 0
 	///Set to true upon action activation to prevent spamming teleport callbacks while the first is still occurring.
-	var/is_charging = FALSE 
+	var/is_charging = FALSE
 
 /datum/action/innate/unstable_teleport/IsAvailable()
 	. = ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 056f6beac98..1732d7ef210 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -73,7 +73,7 @@
 		return
 	if(!atmos_sealed && (!istype(H.w_uniform, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman) || !istype(H.gloves, /obj/item/clothing/gloves)))
 		var/datum/gas_mixture/environment = H.loc.return_air()
-		if(environment?.getMoles())
+		if(environment?.get_moles())
 			/*if(environment.gases[/datum/gas/hypernoblium] && (environment.gases[/datum/gas/hypernoblium][MOLES]) >= 5)
 				if(H.on_fire && H.fire_stacks > 0)
 					H.adjust_fire_stacks(-10 * delta_time)*/
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index a02a3b748fa..498462805b8 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -108,7 +108,7 @@
 			else if(isturf(loc)) //Breathe from loc as turf
 				var/breath_moles = 0
 				if(environment)
-					breath_moles = environment.getMoles()*BREATH_PERCENTAGE
+					breath_moles = environment.get_moles()*BREATH_PERCENTAGE
 
 				breath = loc.remove_air(breath_moles)
 		else //Breathe from loc as obj again
@@ -250,7 +250,7 @@
 	//BZ (Facepunch port of their Agent B)
 	/*
 	if(breath_gases[/datum/gas/bz])
-		var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.getMoles())*breath_pressure
+		var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.get_moles())*breath_pressure
 		if(bz_partialpressure > 1)
 			hallucination += 10
 		else if(bz_partialpressure > 0.01)
@@ -259,7 +259,7 @@
 	//NITRIUM
 	/*
 	if(breath_gases[/datum/gas/nitrium])
-		var/nitrium_partialpressure = (breath_gases[/datum/gas/nitrium][MOLES]/breath.getMoles())*breath_pressure
+		var/nitrium_partialpressure = (breath_gases[/datum/gas/nitrium][MOLES]/breath.get_moles())*breath_pressure
 		if(nitrium_partialpressure > 0.5)
 			adjustFireLoss(nitrium_partialpressure * 0.15)
 		if(nitrium_partialpressure > 5)
@@ -267,12 +267,12 @@
 
 	//FREON
 	if(breath_gases[/datum/gas/freon])
-		var/freon_partialpressure = (breath_gases[/datum/gas/freon][MOLES]/breath.getMoles())*breath_pressure
+		var/freon_partialpressure = (breath_gases[/datum/gas/freon][MOLES]/breath.get_moles())*breath_pressure
 		adjustFireLoss(freon_partialpressure * 0.25)
 
 	//MIASMA
 	if(breath_gases[/datum/gas/miasma])
-		var/miasma_partialpressure = (breath_gases[/datum/gas/miasma][MOLES]/breath.getMoles())*breath_pressure
+		var/miasma_partialpressure = (breath_gases[/datum/gas/miasma][MOLES]/breath.get_moles())*breath_pressure
 
 		if(prob(1 * miasma_partialpressure))
 			var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(2,3)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 06038317da6..10d312c653b 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1125,7 +1125,7 @@
 	var/loc_temp = environment ? environment.temperature : T0C
 	if(isobj(loc))
 		var/obj/oloc = loc
-		var/obj_temp = oloc.getTemperature()
+		var/obj_temp = oloc.return_temperature()
 		if(obj_temp != null)
 			loc_temp = obj_temp
 	else if(isspaceturf(get_turf(src)))
diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
index 6e5873f385f..819ddf41558 100644
--- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
@@ -118,7 +118,7 @@
 	. = ..()
 	if(stat == DEAD || !environment || !environment.getGroupGas(GAS_METHANE))
 		return
-	var/miasma_percentage = environment.gas[GAS_METHANE] / environment.getMoles()
+	var/miasma_percentage = environment.gas[GAS_METHANE] / environment.get_moles()
 	if(miasma_percentage>=0.25)
 		heal_bodypart_damage(1)
 
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 323c2eb6b3f..47e70ea99b7 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -59,7 +59,7 @@
 	if(!T.air || !T.air.hasGas(GAS_CO2))
 		return
 
-	var/co2 = T.air.getGroupGas(GAS_CO2)
+	var/co2 = T.air.gas[GAS_CO2]
 	if(co2 > 0 && DT_PROB(13, delta_time))
 		var/amt = min(co2, 9)
 		T.air.adjustGas(GAS_CO2, -amt)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 6396d572acd..2390d9e5664 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -317,12 +317,12 @@
 	if(isturf(loc) && isopenturf(loc))
 		var/turf/open/ST = loc
 		if(ST.air)
-			var/datum/gas_mixture/muhair = ST.return_air()
+			var/datum/gas_mixture/muhair = ST.return_air().getGases()
 
-			var/plas = muhair.getGroupGas(GAS_PLASMA)
-			var/oxy = muhair.getGroupGas(GAS_OXYGEN)
-			var/n2 = muhair.getGroupGas(GAS_NITROGEN)
-			var/co2 = muhair.getGroupGas(GAS_CO2)
+			var/plas = muhair[GAS_PLASMA]
+			var/oxy = muhair[GAS_OXYGEN]
+			var/n2 = muhair[GAS_NITROGEN]
+			var/co2 = muhair[GAS_CO2]
 
 			if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
 				. = FALSE
diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm
index 8a6246b8c5c..fa762eae317 100644
--- a/code/modules/mob/living/simple_animal/slime/life.dm
+++ b/code/modules/mob/living/simple_animal/slime/life.dm
@@ -145,7 +145,7 @@
 	if(stat != DEAD)
 		var/bz_percentage =0
 		if(environment.gases[/datum/gas/bz])
-			bz_percentage = environment.gases[/datum/gas/bz][MOLES] / environment.getMoles()
+			bz_percentage = environment.gases[/datum/gas/bz][MOLES] / environment.get_moles()
 		var/stasis = (bz_percentage >= 0.05 && bodytemperature < (T0C + 100)) || force_stasis
 
 		switch(stat)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 2a40addf9d9..a3622673254 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -340,12 +340,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 
 	var/list/gasdata = list()
 
-	if(air.getMoles())
-		data["SM_moles"] = air.getMoles()
+	if(air.get_moles())
+		data["SM_moles"] = air.get_moles()
 		for(var/gasid in air.gases)
 			gasdata.Add(list(list(
 			"name"= air.gases[gasid][GAS_META][META_GAS_NAME],
-			"amount" = round(100*air.gases[gasid][MOLES]/air.getMoles(),0.01))))
+			"amount" = round(100*air.gases[gasid][MOLES]/air.get_moles(),0.01))))
 
 	else
 		for(var/gasid in air.gases)
diff --git a/code/modules/power/supermatter/supermatter_process.dm b/code/modules/power/supermatter/supermatter_process.dm
index fea9fa5303b..d343f452258 100644
--- a/code/modules/power/supermatter/supermatter_process.dm
+++ b/code/modules/power/supermatter/supermatter_process.dm
@@ -22,7 +22,7 @@
 	var/datum/gas_mixture/removed
 	if(produces_gas)
 		//Remove gas from surrounding area
-		removed = env.remove(gasefficency * env.getMoles())
+		removed = env.remove(gasefficency * env.get_moles())
 	else
 		// Pass all the gas related code an empty gas container
 		removed = new()
@@ -35,7 +35,7 @@
 		else
 			psy_overlay = FALSE
 	damage_archived = damage
-	if(!removed || !removed.getMoles() || isspaceturf(local_turf)) //we're in space or there is no gas to process
+	if(!removed || !removed.get_moles() || isspaceturf(local_turf)) //we're in space or there is no gas to process
 		if(takes_damage)
 			damage += max((power / 1000) * DAMAGE_INCREASE_MULTIPLIER, 0.1) // always does at least some damage
 		if(!istype(env, /datum/gas_mixture/immutable) && produces_gas && power) //There is no gas to process, but we are not in a space turf. Lets make them.
@@ -113,7 +113,7 @@
 	//((((some value between 0.5 and 1 * temp - ((273.15 + 40) * some values between 1 and 10)) * some number between 0.25 and knock your socks off / 150) * 0.25
 	//Heat and mols account for each other, a lot of hot mols are more damaging then a few
 	//Mols start to have a positive effect on damage after 350
-	damage = max(damage + (max(clamp(removed.getMoles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
+	damage = max(damage + (max(clamp(removed.get_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
 	//Power only starts affecting damage when it is above 5000
 	damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0)
 	//Molar count only starts affecting damage when it is above 1800
@@ -151,7 +151,7 @@
 
 	//calculating gas related values
 	//Wanna know a secret? See that max() to zero? it's used for error checking. If we get a mol count in the negative, we'll get a divide by zero error //Old me, you're insane
-	combined_gas = max(removed.getMoles(), 0)
+	combined_gas = max(removed.get_moles(), 0)
 
 	//This is more error prevention, according to all known laws of atmos, gas_mix.remove() should never make negative mol values.
 	//But this is tg
@@ -334,9 +334,9 @@
 		return
 	var/range = 4
 	zap_cutoff = 1500
-	if(removed && removed.returnPressure() > 0 && removed.getTemperature() > 0)
+	if(removed && removed.returnPressure() > 0 && removed.get_temperature() > 0)
 		//You may be able to freeze the zapstate of the engine with good planning, we'll see
-		zap_cutoff = clamp(3000 - (power * (removed.getMoles()) / 10) / removed.getTemperature(), 350, 3000)//If the core is cold, it's easier to jump, ditto if there are a lot of mols
+		zap_cutoff = clamp(3000 - (power * (removed.get_moles()) / 10) / removed.get_temperature(), 350, 3000)//If the core is cold, it's easier to jump, ditto if there are a lot of mols
 		//We should always be able to zap our way out of the default enclosure
 		//See supermatter_zap() for more details
 		range = clamp(power / removed.returnPressure() * 10, 2, 7)
diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm
index 249263ed9ed..a13ec413f22 100644
--- a/code/modules/power/turbine/turbine.dm
+++ b/code/modules/power/turbine/turbine.dm
@@ -526,7 +526,7 @@
 	var/turbine_pressure = max(turbine.machine_gasmix.returnPressure(), 0.01)
 
 	//the total work done by the gas
-	var/work_done = turbine.machine_gasmix.getMoles() * R_IDEAL_GAS_EQUATION * turbine.machine_gasmix.temperature * log(compressor_pressure / turbine_pressure)
+	var/work_done = turbine.machine_gasmix.get_moles() * R_IDEAL_GAS_EQUATION * turbine.machine_gasmix.temperature * log(compressor_pressure / turbine_pressure)
 
 	//removing the work needed to move the compressor but adding back the turbine work that is the one generating most of the power.
 	work_done = max(work_done - compressor_work * TURBINE_COMPRESSOR_STATOR_INTERACTION_MULTIPLIER - turbine_work, 0)
@@ -545,7 +545,7 @@
  * Handles all the calculations needed for the gases, work done, temperature increase/decrease
  */
 /obj/machinery/power/turbine/core_rotor/proc/do_calculations(datum/gas_mixture/input_mix, datum/gas_mixture/output_mix, work_amount_to_remove, regulated = FALSE)
-	var/work_done = input_mix.getMoles() * R_IDEAL_GAS_EQUATION * input_mix.temperature * log((input_mix.volume * max(input_mix.returnPressure(), 0.01)) / (output_mix.volume * max(output_mix.returnPressure(), 0.01))) * TURBINE_WORK_CONVERSION_MULTIPLIER
+	var/work_done = input_mix.get_moles() * R_IDEAL_GAS_EQUATION * input_mix.temperature * log((input_mix.volume * max(input_mix.returnPressure(), 0.01)) / (output_mix.volume * max(output_mix.returnPressure(), 0.01))) * TURBINE_WORK_CONVERSION_MULTIPLIER
 	if(work_amount_to_remove)
 		work_done = work_done - work_amount_to_remove
 
@@ -557,7 +557,7 @@
 	var/output_mix_heat_capacity = output_mix.getHeatCapacity()
 	if(!output_mix_heat_capacity)
 		return 0
-	output_mix.temperature = max((output_mix.temperature * output_mix_heat_capacity + work_done * output_mix.getMoles() * TURBINE_HEAT_CONVERSION_MULTIPLIER) / output_mix_heat_capacity, TCMB)
+	output_mix.temperature = max((output_mix.temperature * output_mix_heat_capacity + work_done * output_mix.get_moles() * TURBINE_HEAT_CONVERSION_MULTIPLIER) / output_mix_heat_capacity, TCMB)
 	return work_done
 
 /obj/item/paper/guides/jobs/atmos/turbine
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 82f3c17d7c5..bdc3161c00a 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -478,7 +478,7 @@
 	exposed_turf.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = reac_volume*2 SECONDS)
 	var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in exposed_turf)
 	if(hotspot)
-		var/datum/gas_mixture/lowertemp = exposed_turf.remove_air(exposed_turf.air.getMoles())
+		var/datum/gas_mixture/lowertemp = exposed_turf.remove_air(exposed_turf.air.get_moles())
 		lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
 		lowertemp.react(src)
 		exposed_turf.assume_air(lowertemp)
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index e908d09ebf9..3f6c7257c71 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -368,7 +368,7 @@
 		else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
 			visible_message(span_warning("[src] malfunctions, melting [exp_on] and leaking hot air!"))
 			var/datum/gas_mixture/env = loc.return_air()
-			var/transfer_moles = 0.25 * env.getMoles()
+			var/transfer_moles = 0.25 * env.get_moles()
 			var/datum/gas_mixture/removed = env.remove(transfer_moles)
 			if(removed)
 				var/heat_capacity = removed.getHeatCapacity()
@@ -414,7 +414,7 @@
 		else if(prob(EFFECT_PROB_LOW-badThingCoeff))
 			visible_message(span_warning("[src] malfunctions, shattering [exp_on] and leaking cold air!"))
 			var/datum/gas_mixture/env = loc.return_air()
-			var/transfer_moles = 0.25 * env.getMoles()
+			var/transfer_moles = 0.25 * env.get_moles()
 			var/datum/gas_mixture/removed = env.remove(transfer_moles)
 			if(removed)
 				var/heat_capacity = removed.getHeatCapacity()
diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm
index 3ace3f14b5c..f66c66b725e 100644
--- a/code/modules/research/ordnance/tank_compressor.dm
+++ b/code/modules/research/ordnance/tank_compressor.dm
@@ -125,7 +125,7 @@
 /// Glorified volume pump.
 /obj/machinery/atmospherics/components/binary/tank_compressor/process_atmos()
 	var/datum/gas_mixture/input_air = airs[2]
-	if(!input_air?.getMoles() || !active || !transfer_rate || !inserted_tank)
+	if(!input_air?.get_moles() || !active || !transfer_rate || !inserted_tank)
 		return
 
 	var/datum/gas_mixture/tank_air = inserted_tank.return_air()
@@ -176,9 +176,9 @@
  * Mole requirements in experiments are tracked by buffer data.
  */
 /obj/machinery/atmospherics/components/binary/tank_compressor/proc/flush_buffer()
-	if(!leaked_gas_buffer.getMoles())
+	if(!leaked_gas_buffer.get_moles())
 		return
-	if(leaked_gas_buffer.getMoles() > SIGNIFICANT_AMOUNT_OF_MOLES)
+	if(leaked_gas_buffer.get_moles() > SIGNIFICANT_AMOUNT_OF_MOLES)
 		record_data()
 	else
 		say("Buffer data discarded. Required moles for storage: [SIGNIFICANT_AMOUNT_OF_MOLES] moles.")
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 4e42bcc2bdc..bac86d937f5 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -95,7 +95,7 @@
 			var/datum/gas_mixture/env = L.return_air()
 			if(env.temperature < (heat_amt+T0C))
 
-				var/transfer_moles = 0.25 * env.getMoles()
+				var/transfer_moles = 0.25 * env.get_moles()
 
 				var/datum/gas_mixture/removed = env.remove(transfer_moles)
 
diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm
index 9a2933e81f1..5f7b88442cb 100644
--- a/code/modules/research/xenobiology/crossbreeding/chilling.dm
+++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm
@@ -108,7 +108,7 @@ Chilling extracts:
 	for(var/turf/T in A)
 		var/datum/gas_mixture/G = T.air
 		if(istype(G))
-			G.gas[GAS_PLASMA] = 0
+			G.setGasMoles(GAS_PLASMA, 0)
 			filtered = TRUE
 			//T.air_update_turf(FALSE, FALSE)
 	if(filtered)
diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm
index 36afbd35010..a56a14fcd3a 100644
--- a/code/modules/surgery/organic_steps.dm
+++ b/code/modules/surgery/organic_steps.dm
@@ -141,7 +141,7 @@
 		/obj/item/hatchet = 'sound/surgery/scalpel1.ogg',
 		/obj/item/knife/butcher = 'sound/surgery/scalpel1.ogg',
 		/obj/item = 'sound/surgery/scalpel1.ogg',
-	) 
+	)
 	success_sound = 'sound/surgery/organ2.ogg'
 
 /datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index ce365c53fe2..47f0f73e13a 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -225,9 +225,9 @@
 
 	// Priority 3: use internals tank.
 	var/datum/gas_mixture/internal_mix = owner.internal.return_air()
-	if(internal_mix && internal_mix.getMoles() > num)
+	if(internal_mix && internal_mix.get_moles() > num)
 		var/datum/gas_mixture/removed = internal_mix.remove(num)
-		if(removed.getMoles() > 0.005)
+		if(removed.get_moles() > 0.005)
 			owner_turf.assume_air(removed)
 			ion_trail.generate_effect()
 			return TRUE
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 7e12d528e46..9a1a904d4a8 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -129,6 +129,7 @@
 	var/N2_pp = breath.getBreathPartialPressure(N2_moles)
 	var/Plasma_pp = breath.getBreathPartialPressure(plasma_moles)
 	var/CO2_pp = breath.getBreathPartialPressure(CO2_moles)
+
 	//Vars for n2o and healium induced euphorias.
 	var/n2o_euphoria = EUPHORIA_LAST_FLAG
 	var/healium_euphoria = EUPHORIA_LAST_FLAG
@@ -262,7 +263,7 @@
 	if(breath) // If there's some other shit in the air lets deal with it here.
 
 	// N2O
-		var/n2o_moles = breath.getGroupGas(GAS_N2O)
+		var/n2o_moles = breath.gas[GAS_N2O]
 		var/SA_pp = breath.getBreathPartialPressure(n2o_moles)
 		if(SA_pp > SA_para_min) // Enough to make us stunned for a bit
 			breather.throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o)
@@ -586,11 +587,11 @@
 
 	var/datum/gas_mixture/immutable/planetary/mix = SSair.planetary[LAVALAND_DEFAULT_ATMOS]
 
-	if(!mix?.getMoles()) // this typically means we didn't load lavaland, like if we're using #define LOWMEMORYMODE
+	if(!mix?.get_moles()) // this typically means we didn't load lavaland, like if we're using #define LOWMEMORYMODE
 		return
 
 	// Take a "breath" of the air
-	var/datum/gas_mixture/breath = mix.remove(mix.getMoles() * BREATH_PERCENTAGE)
+	var/datum/gas_mixture/breath = mix.remove(mix.get_moles() * BREATH_PERCENTAGE)
 
 	var/oxygen_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/oxygen][MOLES])
 	var/nitrogen_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/nitrogen][MOLES])
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index 6fecaea4cc4..e15966ed724 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -429,12 +429,12 @@
 				var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
 				if(int_tank_air.returnPressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH))
 					set_internal_damage(MECHA_INT_TANK_BREACH)
-				if(int_tank_air && int_tank_air.getVolume() > 0) //heat the air_contents
+				if(int_tank_air && int_tank_air.get_volume() > 0) //heat the air_contents
 					int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(5,7.5)*delta_time)
-			if(cabin_air && cabin_air.getVolume()>0)
-				cabin_air.temperature = min(6000+T0C, cabin_air.getTemperature()+rand(5,7.5)*delta_time)
-				if(cabin_air.getTemperature() > max_temperature/2)
-					take_damage(delta_time*2/round(max_temperature/cabin_air.getTemperature(),0.1), BURN, 0, 0)
+			if(cabin_air && cabin_air.get_volume()>0)
+				cabin_air.temperature = min(6000+T0C, cabin_air.get_temperature()+rand(5,7.5)*delta_time)
+				if(cabin_air.get_temperature() > max_temperature/2)
+					take_damage(delta_time*2/round(max_temperature/cabin_air.get_temperature(),0.1), BURN, 0, 0)
 
 
 		if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank
@@ -453,7 +453,7 @@
 				cell.maxcharge -= min(10 * delta_time, cell.maxcharge)
 
 	if(!(internal_damage & MECHA_INT_TEMP_CONTROL))
-		if(cabin_air && cabin_air.getVolume() > 0)
+		if(cabin_air && cabin_air.get_volume() > 0)
 			var/delta = cabin_air.temperature - T20C
 			cabin_air.temperature -= clamp(round(delta / 8, 0.1), -5, 5) * delta_time
 
@@ -1237,7 +1237,7 @@
 	return air?.returnPressure()
 
 ///fetches temp of the gas mixture we are using
-/obj/vehicle/sealed/mecha/getTemperature()
+/obj/vehicle/sealed/mecha/return_temperature()
 	var/datum/gas_mixture/air = return_air()
 	return air?.temperature
 
diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm
index 3b4906ca291..0182b5b8f69 100644
--- a/code/modules/vehicles/mecha/mecha_ui.dm
+++ b/code/modules/vehicles/mecha/mecha_ui.dm
@@ -120,7 +120,7 @@
 	data["airtank_temp"] = int_tank_air?.temperature
 	data["port_connected"] = internal_tank?.connected_port ? TRUE : FALSE
 	data["cabin_pressure"] = round(returnPressure(), 0.01)
-	data["cabin_temp"] = getTemperature()
+	data["cabin_temp"] = return_temperature()
 	data["dna_lock"] = dna_lock
 	data["mech_view"] = ui_view.assigned_map
 	if(radio)

From b8e472ebb24b82a3f42e5a2961b6f11236192cc8 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 1 May 2022 23:39:30 -0400
Subject: [PATCH 062/200] Fixes critical math errors.

---
 .../atmospherics/machinery/components/binary_devices/pump.dm | 5 +++--
 code/modules/atmospherics/machinery/datum_pipeline.dm        | 4 +---
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 673c33b2e1b..1f65b89e936 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -64,8 +64,9 @@
 
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
-	var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
-	if(pump_gas(air1, air2, calculate_transfer_moles(air1, air2, transfer_moles)))
+	//var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
+	var/transfer_moles = calculate_transfer_moles(air1, air2, target_pressure - air2.returnPressure(), air2 ? air2.volume : 0)
+	if(pump_gas(air1, air2, transfer_moles))
 		update_parents()
 
 /**
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index 3152100da0a..e9ea7937732 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -241,9 +241,7 @@
 
 	var/total_thermal_energy = 0
 	var/total_heat_capacity = 0
-	var/datum/gas_mixture/total_gas_mixture = new
-
-	var/list/total_gases = total_gas_mixture.gas
+	var/datum/gas_mixture/total_gas_mixture = new(0)
 
 	for(var/datum/gas_mixture/gas_mixture as anything in gas_mixture_list)
 		total_gas_mixture.volume += gas_mixture.volume

From 930417ca7dc2f85e0b3c4ab4d9addf1a1712e4ea Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Mon, 2 May 2022 01:20:13 -0400
Subject: [PATCH 063/200] More equipment to test.

---
 _maps/map_files/debug/atmos_mintest.dmm | 87 ++++++++++++++++---------
 1 file changed, 57 insertions(+), 30 deletions(-)

diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
index fc78cf65a19..a4e9a68562a 100644
--- a/_maps/map_files/debug/atmos_mintest.dmm
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -33,7 +33,7 @@
 "aG" = (/obj/machinery/button/door{id = "c2vent"; name = "c2vent"},/turf/open/floor/iron,/area/hallway/primary/central)
 "aH" = (/obj/machinery/button/door{id = "c3vent"; name = "c3vent"},/turf/open/floor/iron,/area/hallway/primary/central)
 "aI" = (/obj/structure/cable,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
-"aJ" = (/turf/open/floor/plating,/area/hallway/primary/central)
+"aJ" = (/obj/machinery/atmospherics/components/unary/portables_connector,/turf/open/floor/iron,/area/hallway/primary/central)
 "aK" = (/obj/machinery/portable_atmospherics/canister/plasma,/turf/open/floor/iron,/area/hallway/primary/central)
 "aL" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/iron,/area/hallway/primary/central)
 "aM" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/open/floor/iron,/area/hallway/primary/central)
@@ -105,16 +105,21 @@
 "ca" = (/obj/machinery/light/floor,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
 "cb" = (/obj/machinery/door/airlock/public/glass{name = "Basic Equipment Tests"},/turf/open/floor/iron,/area/hallway/primary/central)
 "cc" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/heat_exchanging/junction{icon_state = "pipe11-3"; dir = 1},/turf/open/floor/plating,/area/hallway/primary/central)
-"ch" = (/turf/open/space/basic,/area/hallway/primary/central)
-"ci" = (/obj/machinery/atmospherics/components/unary/portables_connector,/turf/open/floor/plating,/area/hallway/primary/central)
-"cj" = (/obj/machinery/atmospherics/components/binary/thermomachine/freezer,/turf/open/floor/plating,/area/hallway/primary/central)
-"ck" = (/obj/machinery/atmospherics/components/binary/thermomachine/heater,/turf/open/floor/plating,/area/hallway/primary/central)
+"cd" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/open/floor/iron,/area/hallway/primary/central)
+"ce" = (/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{icon_state = "manifold-3"; dir = 4},/turf/open/floor/iron,/area/hallway/primary/central)
+"cf" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
+"cg" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/iron,/area/hallway/primary/central)
+"ch" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/open/floor/iron,/area/hallway/primary/central)
+"ci" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/h2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
+"cj" = (/obj/machinery/atmospherics/components/unary/thermomachine/freezer,/turf/open/floor/plating,/area/hallway/primary/central)
+"ck" = (/turf/open/floor/plating,/area/hallway/primary/central)
 "cl" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 1},/turf/open/floor/plating,/area/hallway/primary/central)
 "cm" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 6},/turf/open/space/basic,/area/space)
 "cn" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 10},/turf/open/space/basic,/area/space)
 "co" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple,/turf/open/space/basic,/area/space)
 "cp" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 5},/turf/open/space/basic,/area/space)
 "cq" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 9},/turf/open/space/basic,/area/space)
+"cr" = (/obj/machinery/atmospherics/components/unary/thermomachine/heater,/turf/open/floor/plating,/area/hallway/primary/central)
 "cs" = (/obj/structure/table/reinforced,/obj/item/analyzer,/turf/open/floor/iron,/area/hallway/primary/central)
 "ct" = (/obj/effect/landmark/start/assistant,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
 "cu" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/turf/open/floor/iron,/area/hallway/primary/central)
@@ -123,41 +128,63 @@
 "cx" = (/obj/structure/table/reinforced,/obj/item/mod/control/pre_equipped/debug,/turf/open/floor/iron,/area/hallway/primary/central)
 "cy" = (/obj/structure/table/reinforced,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/turf/open/floor/iron,/area/hallway/primary/central)
 "cz" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Gravgen"},/turf/open/floor/iron,/area/hallway/primary/central)
+"cA" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/open/floor/iron,/area/hallway/primary/central)
+"cB" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
+"cC" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/iron,/area/hallway/primary/central)
+"cD" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
+"cE" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/plasma,/turf/open/floor/iron,/area/hallway/primary/central)
+"cF" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
+"cG" = (/obj/machinery/atmospherics/components/binary/volume_pump,/turf/open/floor/iron,/area/hallway/primary/central)
+"cH" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 1},/obj/machinery/portable_atmospherics/canister,/turf/open/floor/iron,/area/hallway/primary/central)
+"cI" = (/obj/machinery/light/floor,/obj/machinery/atmospherics/components/unary/passive_vent,/turf/open/floor/iron,/area/hallway/primary/central)
+"cJ" = (/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/iron,/area/hallway/primary/central)
+"cK" = (/obj/machinery/door/airlock/public/glass,/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/iron,/area/hallway/primary/central)
+"cL" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/open/floor/iron,/area/hallway/primary/central)
+"cM" = (/obj/machinery/light/floor,/obj/machinery/atmospherics/components/unary/passive_vent{icon_state = "passive_vent_map-3"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
+"cN" = (/obj/machinery/atmospherics/components/unary/heat_exchanger{icon_state = "he1"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
+"cO" = (/obj/machinery/atmospherics/components/unary/heat_exchanger{icon_state = "he1"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
+"cP" = (/obj/machinery/atmospherics/components/binary/circulator/cold{icon_state = "circ-off-0"; dir = 4},/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
+"cQ" = (/obj/machinery/power/generator,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
+"cR" = (/obj/machinery/atmospherics/components/binary/circulator{icon_state = "circ-off-0"; dir = 8},/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
+"cS" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/turf/open/floor/iron,/area/hallway/primary/central)
+"cT" = (/obj/machinery/atmospherics/components/trinary/mixer,/turf/open/floor/iron,/area/hallway/primary/central)
+"cU" = (/obj/machinery/atmospherics/components/binary/tank_compressor,/turf/open/floor/iron,/area/hallway/primary/central)
+"cV" = (/obj/item/storage/toolbox/mechanical,/turf/open/floor/iron,/area/hallway/primary/central)
 
 (1,1,1) = {"
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 aaababacacacabababadadadabababaeaeaeabababafafafabababacacacababaaaaaaaaaaaaaaaa
-aaabagagagagagabaUahahahaUabaVaiaiaiaVabaWajajajaWabaqagagagaqabaacmcncmcnaaaaaa
-aaacagalagalagacahahahahahamaiaiaiaiaianajajajajajacagagagagagacaacocococoaaaaaa
+aaabagagagagagabaUahahahaUabaVaiaiaiaVabaWajajajaWabaqagagagaqabaaaaaaaaaaaaaaaa
+aaacagalagalagacahahahahahamaiaiaiaiaianajajajajajacagagagagagacaacmcncmcnaaaaaa
 aaacagaNaqaNagacahaharahahamaiaiaiaiaianajajasajajacagagagagagacaacocococoaaaaaa
-aaacagalapalapacahahauahahamaiavbIavaianajawbJawajacagagaTagagacaacocococoaaaaaa
-aaabagagapagayabaUbKazahaUabaVbLaAaiaVabaWbMaBajaWabaqagapagaqabaacocpcqcoaaaaaa
-aaababacbYacabababbNacacabaDabbOacacabaEabbPacacabababacczacabababccacacccababaa
-aaabctagapagakabaKbQaFbRagagagbSaGbTagagagbUaHbVagagaqagapagagaqcsbXaKaKbXaqabaa
-aaacctagapagaoacaKbWagagagagagbSagagagagagbUagagagagagagapagagagagagagagagagabaa
-aaacctagbAagatacaLbXagagagagagbXagagagagagbXagagagagagagapagagagagagagagagagabaa
+aaacagalapalapacahahauahahamaiavbIavaianajawbJawajacagagaTagagacaacocpcqcoaaaaaa
+aaabagagapagayabaUbKazahaUabaVbLaAaiaVabaWbMaBajaWabaqagapagaqababccacacccababaa
+aaababacbYacabababbNacacabaDabbOacacabaEabbPacacabababacczacababcsbXaKaKbXaqabaa
+aaabctagapagakabaKbQaFbRagagagbSaGbTagagagbUaHbVagagaqagapagagaqagagagagagagacaa
+aaacctagapagaoacaKbWagagagagagbSagagagagagbUagagagagagagapagagagagagagagagagacaa
+aaacctagbAagatacaLbXagagagagagbXagagagagagbXagagagagagagapagagagagagagagagagacaa
 aaacctagapagaxacaLagagaqagagagagaqagagagagagaqagagagaqagapagaqagagagaqagagagabaa
-aaacctagbAagaCacaLagagagagagagagagagagagagagagagagagagagapagagagagagagagagagabaa
-aaacctagapagcuacaMagagagagagagagagagagagagagagagagagagagapagagagagagagagagagacaa
-aaacctagbAagcvacaMagagaqagagagagaqagagagagagaqagagagaqagapagaqagagagaqagagagacaa
-aaacctagapagcwacaMagagagagagagagagagagagagagagagagagagagapagagagagagagagagagacaa
+aaacctagbAagaCacaLagagagagagagagagagagagagagagagagagagagapagagagagagagagagagacaa
+aaacctagapagcuacaMagagagagagagagagagagagagagagaJagaJagagapagagagagagagagagagacaa
+aaacctagbAagcvacaMagagaqagagagagaqagagagagagaqcPcQcRcaapapagaqagagagaqagagagacaa
+aaacctagapagcwacaMagagagagagagagagagagagagagagbXcVbXagagapagagagagagagagagagacaa
 aaacctagbAagcxabbeagagagagagagagaqagagagagagagagagagagagapagagagagagagagagagabaa
-aaacctagapagcyababbDbEaqagagagbBbBbBagagagagaqagagagaqagapagaqagagagaqagagagabaa
-aaacctagbAagagabbFbGbHagagagagagapagagagagagagagagagagagapagagagagagagagagagabaa
+aaacctagapagcyababbDbEaqagagagbBbBbBagagagagaqagagagaqagapagaqagagagaqagagagacaa
+aaacctagbAagagabbFbGbHagagagagagapagagagagagagagagagagagapagagagagagagagagagacaa
 aaacagaIapapbCbZapapaIapapapapapaIapapapapapaIapapapcaapapagaqagagagaqagagagacaa
 aaabagagagagagabagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaqabaa
 aaababacacacabababacacacacabcbcbcbabacacacacacacacacacacabacacacabacacacabababaa
-aaabaJaJaJaXaYaZaXbaaZaXbbbcagagagbdaKaKaKaLaLaLaMaMaMbeacagagagacagagagacchchaa
-aaacaJbfaJaJaJaJaJbfaJaJaJbgagaqagagagagaqagagagagagaqagbzagaqagbzagaqagaSaaaaaa
-aaacbhbhbhbibjbkbiblbkbibmbnagagagagagagagagagagagagagagacagagagacagagagacaaaaaa
-aaacagagagagagagagagagagagagagagagagagagagagciciagagagagabacbzacabacbzacabaaaaaa
-aaacbobpagbqbqagagaqagbrbsbtagaqagagagagaqagcjckagagaqagacagagagacagagagacaaaaaa
-aaacboboagbqbqagagagaXbuaJbvaZagagagagagagagclclagagagagbzagaqagbzagaqagaSaaaaaa
-aaacboboagbqbqagagagagbwbxbyagagagagagagagagagagagagagagacagagagacagagagacaaaaaa
-aaacboboagbqbqagagagagagagagagagagagagagagagagagagagagagabacbzacabacbzacabaaaaaa
-aaacbobpagbqbqagagaqagagagagagaqagagagagaqagagagagagaqagacagagagagagagagacaaaaaa
-aaabagagagagagagagagagagagagagagagagagagagagagagagagagagbzagaqagagagaqagaSaaaaaa
-aaabagagagagagagagagagagagagagagagagagagagagagagagagagagacagagagagagagagacaaaaaa
+aaabckckckaXaYaZaXbaaZaXbbbcagagagbdaKaKaKaLaLaLaMaMaMbeacagagagacagagagacaaaaaa
+aaacckbfckckckckckbfckckckbgagaqagagagagaqagagagagagaqagbzagcIagbzagaqagaSaaaaaa
+aaacbhbhbhbibjbkbiblbkbibmbnagagagaJaJagagagagagagagagagacaPcJagacaPagagacaaaaaa
+aaacagagagagagagagagagagagagagagcdcecfcgagagagagagagagagabaccKacabacbzacabaaaaaa
+aaacbobpagbqbqagagaqagbrbsbtagaqchcecicgaqagcjcragcLaqagacagcJagacagagagacaaaaaa
+aaacboboagbqbqagagagaXbuckbvaZagcAcecBcgagagclclagbXagagbzagcMagbzagaqagaSaaaaaa
+aaacboboagbqbqagagagagbwbxbyagagcCcecDcgagagagagagagagagacaPagagacaPagagacaaaaaa
+aaacboboagbqbqagagagagagagagaJagcEcecFcgagaXcNcOaZagagagabacbzacabacbzacabaaaaaa
+aaacbobpagbqbqagagaqagagagcScTaqagcGbXagaqagagagagagaqagacagagagagagagagacaaaaaa
+aaabagagagagagagagagagagagagbXagagcHagagagagagagagagagagbzagaqagaPagaqagaSaaaaaa
+aaabagagagagagagagagagagagagagagagagagagagagcUagagagagagacagagagagagagagacaaaaaa
 aaababacbzacabababacacbzacacabababacbzacacabababacbzacababacacacabacacacabaaaaaa
 aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaaaaaaaaaaaaaaaaaaaaaa
 aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaaaaaaaaaaaaaaaaaaaaaa

From c92728bd56334bb5408b926ef0250748f97f1c3d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 01:20:58 -0400
Subject: [PATCH 064/200] Fixes gas anal.

---
 code/__DEFINES/atmospherics/ZAS.dm                       | 8 +++-----
 code/game/objects/items/devices/scanners/gas_analyzer.dm | 3 ++-
 code/modules/atmospherics/ZAS/Diagnostic.dm              | 5 +----
 code/modules/atmospherics/ZAS/Turf.dm                    | 3 +++
 4 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index e6e6962c118..54da47543c2 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -47,8 +47,7 @@ GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 	} \
 	else if (A.contents.len) { \
 		ret = 0;\
-		for (var/thing in A) { \
-			var/atom/movable/AM = thing; \
+		for (var/atom/movable/AM as anything in A) { \
 			switch (AM.can_atmos_pass) { \
 				if (CANPASS_ALWAYS) { \
 					continue; \
@@ -84,8 +83,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 	} \
 	else if (A.contents.len) { \
 		ret = 0;\
-		for (var/thing in A) { \
-			var/atom/movable/AM = thing; \
+		for (var/atom/movable/AM as anything in A) { \
 			switch (AM.can_atmos_pass) { \
 				if (CANPASS_ALWAYS) { \
 					continue; \
@@ -256,7 +254,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 
 GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
 GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
-GLOBAL_LIST_INIT(noble_gases, list(GAS_HELIUM, GAS_HELIUM, GAS_ARGON, GAS_NEON, GAS_KRYPTON))
+GLOBAL_LIST_INIT(noble_gases, list(GAS_HELIUM, GAS_ARGON, GAS_NEON, GAS_KRYPTON))
 
 GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
 	     2,  1,  3,  8, 10,  9, 11,  4,  6,  5,  7, 12, 14, 13, 15,
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index 1b84260dda5..a783192826a 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -161,7 +161,8 @@
 			var/list/cached_gases = air.gas
 			for(var/id in cached_gases)
 				var/gas_concentration = cached_gases[id]/total_moles
-				message += span_notice("[id]: [round(air.getGroupGas(id), 0.01)] mol ([round(gas_concentration*100, 0.01)] %)")
+				var/amount = round(air.gas[id], 0.01)
+				message += span_notice("[xgm_gas_data.name[id]]: [amount >= 0.01 ? "[amount] mol" : "Trace amounts." ] ([round(gas_concentration*100, 0.01)] %)")
 			message += span_notice("Temperature: [round(temperature - T0C,0.01)] &deg;C ([round(temperature, 0.01)] K)")
 			message += span_notice("Volume: [volume] L")
 			message += span_notice("Pressure: [round(pressure, 0.01)] kPa")
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 1ee1b6ac39e..7a366d9ac68 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -8,7 +8,7 @@
 			var/datum/gas_mixture/mix = T.return_air()
 			to_chat(mob,span_admin( "ZASDBG_MAIN: [mix.returnPressure()] kPa [mix.temperature]C"))
 			for(var/g in mix.gas)
-				to_chat(mob, span_admin("ZASDBG_GAS:[g]: [mix.gas[g]]\n"))
+				to_chat(mob, span_admin("ZASDBG_GAS: [g]: [mix.gas[g]]\n"))
 	else
 		if(zone_debug_images)
 			for(var/zone in  zone_debug_images)
@@ -43,13 +43,10 @@
 			to_chat(mob, "No air passage :x")
 		return
 
-	//var/turf/simulated/other_turf = get_step(T, direction_list[direction]) ZASTURF
 	var/turf/other_turf = get_step(T, direction_list[direction])
 	if(istype(other_turf, /turf/open/space))
 		return
 
-	//var/t_block = T.zas_canpass(other_turf)
-//	var/o_block = other_turf.zas_canpass(T)
 	var/t_block
 	ATMOS_CANPASS_TURF(t_block, T, other_turf)
 	var/o_block
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index cca229a94c7..5d4e1a33ebc 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -423,3 +423,6 @@
 		if(open_directions & dir)
 			adjacent_turfs += get_step(src, dir)
 	return length(adjacent_turfs) ? adjacent_turfs : null
+
+/turf/open/return_analyzable_air()
+	return return_air()

From 006dbff5e79e7b08036e721f64e07a05fb1b8c21 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 04:01:22 -0400
Subject: [PATCH 065/200] Fix atmos filters. Quantize gas during filtering

---
 code/__DEFINES/atmospherics/ZAS.dm            |  2 +-
 code/controllers/subsystem/statpanel.dm       |  6 +-
 .../atmospherics/ZAS/atmos_primitives.dm      |  4 +-
 .../components/trinary_devices/filter.dm      | 17 ++--
 tgui/packages/tgui/constants.js               | 82 +++++++++++++++++--
 5 files changed, 91 insertions(+), 20 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 54da47543c2..56b5bd809ef 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -250,7 +250,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 #define GAS_CHLORINE			"chlorine"
 #define GAS_SULFUR				"sulfurdioxide"
 #define GAS_STEAM				"water"
-#define GAS_PLASMA				"phoron"
+#define GAS_PLASMA				"plasma"
 
 GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
 GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index 790ecbdc9a0..3be33fb0384 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -28,13 +28,13 @@ SUBSYSTEM_DEF(statpanels)
 			cached ? "Next Map: [cached.map_name]" : null,
 			"Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]",
 			"Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)",
-			"\n",
 			"Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]",
+			"\n",
+			"Station Time: [station_time_timestamp()]",
 			"Internal Round Timer: [SSticker.round_start_time ? time2text(world.time - SSticker.round_start_time, "hh:mm:ss", 0) : "The round hasn't started yet!"]",
 			"Actual Round Timer: [SSticker.round_start_timeofday ? time2text(REALTIMEOFDAY - SSticker.round_start_timeofday, "hh:mm:ss", 0) : "The round hasn't started yet!"]",
-			"Station Time: [station_time_timestamp()]",
 			"\n",
-			"Connected/Playing: [length(GLOB.clients)]/[get_active_player_count()]"
+			"Playes Playing/Connected: [get_active_player_count()]/[length(GLOB.clients)]"
 		)
 
 		if(SSshuttle.emergency)
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 4ff8a06286e..44a966949ab 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -22,7 +22,7 @@
 
 // Will not bother pumping or filtering if the gas source as fewer than this amount of moles, to help with performance.
 #define MINIMUM_MOLES_TO_PUMP   0.01
-#define MINIMUM_MOLES_TO_FILTER 0.04
+#define MINIMUM_MOLES_TO_FILTER 0.04 //0.04
 
 
 /obj/machinery/atmospherics/var/debug = 0
@@ -206,6 +206,7 @@
 	var/total_unfilterable_moles = 0	//the total amount of non-filterable gas
 	var/list/specific_power_gas = list()	//the power required to remove one mole of pure gas, for each gas type
 	for (var/g in source.getGases())
+		source.gas[g] = QUANTIZE(source.gas[g]) //Reforged note: Gas can no longer leak through filters. Thats actually "intentional" behavior, but it annoyed the fuck out of me and i need sterile testing environments.
 		if (source.gas[g] < MINIMUM_MOLES_TO_FILTER)
 			continue
 
@@ -247,7 +248,6 @@
 	var/unfiltered_power_used = 0	//power used to move unfilterable gas to sink_clean
 	for (var/g in removed.gas)
 		var/power_used = specific_power_gas[g]*removed.gas[g]
-
 		if (g in filtering)
 			//use update=0. All the filtered gasses are supposed to be added simultaneously, so we update after the for loop.
 			sink_filtered.adjustGasWithTemp(g, removed.gas[g], removed.temperature, update=0)
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index be97241e43a..09d09ae9e98 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -99,13 +99,18 @@
 	// If no filter is set, we just try to forward everything to air3 to avoid gas being outright lost.
 	if(filtering)
 		var/datum/gas_mixture/filtered_out = new
-		filter_gas(filtering, removed, filtered_out, removed, null, INFINITY)
-		// Send things to the side output if we can, return them to the input if we can't.
+		var/datum/gas_mixture/merge_to
+				// Send things to the side output if we can, return them to the input if we can't.
 		// This means that other gases continue to flow to the main output if the side output is blocked.
 		if (side_output_full)
-			air1.merge(filtered_out)
+			merge_to = air1
 		else
-			air2.merge(filtered_out)
+			merge_to = air2
+		var/transfer_moles = calculate_transfer_moles(removed, merge_to, transfer_rate - merge_to.returnPressure())
+		filter_gas(filter_type, removed, filtered_out, removed, transfer_moles)
+		// Send things to the side output if we can, return them to the input if we can't.
+		// This means that other gases continue to flow to the main output if the side output is blocked.
+		merge_to.merge(filtered_out)
 		// Make sure we don't send any now-empty gas entries to the main output
 
 	// Send things to the main output if we can, return them to the input if we can't.
@@ -135,8 +140,8 @@
 	data["max_rate"] = round(MAX_TRANSFER_RATE)
 
 	data["filter_types"] = list()
-	for(var/gas in GLOB.all_gases)
-		data["filter_types"] += list(list("name" = xgm_gas_data[gas], "enabled" = (gas in filter_type)))
+	for(var/gas in GLOB.common_gases)
+		data["filter_types"] += list(list("name" = xgm_gas_data.name[gas], "gas_id" = gas, "enabled" = (gas in filter_type)))
 
 	return data
 
diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index 495c04d8a0e..482560f90b6 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -140,19 +140,19 @@ export const RADIO_CHANNELS = [
 
 const GASES = [
   {
-    'id': 'o2',
+    'id': 'oxygen',
     'name': 'Oxygen',
     'label': 'O₂',
     'color': 'blue',
   },
   {
-    'id': 'n2',
+    'id': 'nitrogen',
     'name': 'Nitrogen',
     'label': 'N₂',
     'color': 'red',
   },
   {
-    'id': 'co2',
+    'id': 'carbon_dioxide',
     'name': 'Carbon Dioxide',
     'label': 'CO₂',
     'color': 'grey',
@@ -164,7 +164,7 @@ const GASES = [
     'color': 'pink',
   },
   {
-    'id': 'water_vapor',
+    'id': 'steam',
     'name': 'Water Vapor',
     'label': 'H₂O',
     'color': 'lightsteelblue',
@@ -176,15 +176,15 @@ const GASES = [
     'color': 'teal',
   },
   {
-    'id': 'n2o',
+    'id': 'sleeping_agent',
     'name': 'Nitrous Oxide',
     'label': 'N₂O',
     'color': 'bisque',
   },
   {
-    'id': 'no2',
-    'name': 'Nitrium',
-    'label': 'Nitrium',
+    'id': 'nitrodioxide',
+    'name': 'Nitrogen Dioxide',
+    'label': 'Nitrodioxide',
     'color': 'brown',
   },
   {
@@ -259,6 +259,72 @@ const GASES = [
     'label': 'Anti-Noblium',
     'color': 'maroon',
   },
+  {
+    'id': 'carbon_monoxide',
+    'name': 'Carbon Monoxide',
+    'label': 'CO',
+    'color': 'maroon',
+  },
+  {
+    'id': 'methyl_bromide',
+    'name': 'Methyl Bromide',
+    'label': 'NO₂',
+    'color': 'maroon',
+  },
+  {
+    'id': 'methane',
+    'name': 'Methane',
+    'label': 'CH₄',
+    'color': 'maroon',
+  },
+  {
+    'id': 'methane',
+    'name': 'Methane',
+    'label': 'CH₄',
+    'color': 'maroon',
+  },
+  {
+    'id': 'argon',
+    'name': 'Argon',
+    'label': 'Ar',
+    'color': 'maroon',
+  },
+  {
+    'id': 'krypton',
+    'name': 'Krypton',
+    'label': 'Kr',
+    'color': 'maroon',
+  },
+  {
+    'id': 'xenon',
+    'name': 'Xenon',
+    'label': 'Xe',
+    'color': 'maroon',
+  },
+  {
+    'id': 'neon',
+    'name': 'Neon',
+    'label': 'Ne',
+    'color': 'maroon',
+  },
+  {
+    'id': 'ammonia',
+    'name': 'Ammonia',
+    'label': 'NH₃',
+    'color': 'maroon',
+  },
+  {
+    'id': 'chlorine',
+    'name': 'Chlorine',
+    'label': 'Cl',
+    'color': 'maroon',
+  },
+  {
+    'id': 'sulfurdioxide',
+    'name': 'Chlorine',
+    'label': 'SO₂',
+    'color': 'maroon',
+  },
 ];
 
 export const getGasLabel = (gasId, fallbackValue) => {

From 5d5d9599905189b0916950f49a6a69afe52f2801 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 14:41:00 -0400
Subject: [PATCH 066/200] Slightly better fix

---
 code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  2 ++
 code/modules/atmospherics/ZAS/atmos_primitives.dm      | 10 +---------
 .../machinery/components/trinary_devices/filter.dm     |  5 ++---
 3 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 0911fae8b97..586c665a329 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -244,6 +244,8 @@
 	for(var/g in gas)
 		removed.gas[g] = QUANTIZE((gas[g] / total_moles) * amount)
 		gas[g] -= removed.gas[g] / group_multiplier
+		if(gas[g] <= ATMOS_PRECISION) //Removing floating point errors from the equation
+			gas[g] = 0
 
 	removed.temperature = temperature
 	updateValues()
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 44a966949ab..a854e90baba 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -205,8 +205,7 @@
 	var/total_filterable_moles = 0		//the total amount of filterable gas
 	var/total_unfilterable_moles = 0	//the total amount of non-filterable gas
 	var/list/specific_power_gas = list()	//the power required to remove one mole of pure gas, for each gas type
-	for (var/g in source.getGases())
-		source.gas[g] = QUANTIZE(source.gas[g]) //Reforged note: Gas can no longer leak through filters. Thats actually "intentional" behavior, but it annoyed the fuck out of me and i need sterile testing environments.
+	for (var/g in source.gas)
 		if (source.gas[g] < MINIMUM_MOLES_TO_FILTER)
 			continue
 
@@ -233,13 +232,6 @@
 	if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
 		return -1
 
-	//Update flow rate var
-	/*
-	if (istype(M, /obj/machinery/atmospherics))
-		var/obj/machinery/atmospherics/A = M
-		A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
-	*/
-
 	var/datum/gas_mixture/removed = source.remove(total_transfer_moles)
 	if (!removed) //Just in case
 		return -1
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 09d09ae9e98..14c3824a143 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -100,14 +100,13 @@
 	if(filtering)
 		var/datum/gas_mixture/filtered_out = new
 		var/datum/gas_mixture/merge_to
-				// Send things to the side output if we can, return them to the input if we can't.
+		// Send things to the side output if we can, return them to the input if we can't.
 		// This means that other gases continue to flow to the main output if the side output is blocked.
 		if (side_output_full)
 			merge_to = air1
 		else
 			merge_to = air2
-		var/transfer_moles = calculate_transfer_moles(removed, merge_to, transfer_rate - merge_to.returnPressure())
-		filter_gas(filter_type, removed, filtered_out, removed, transfer_moles)
+		filter_gas(filter_type, removed, filtered_out, removed)
 		// Send things to the side output if we can, return them to the input if we can't.
 		// This means that other gases continue to flow to the main output if the side output is blocked.
 		merge_to.merge(filtered_out)

From a8dc3a062610e74d72292c4fbc023df12a08e667 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 18:45:08 -0400
Subject: [PATCH 067/200] Fixes an error in verb permission.

---
 code/modules/admin/verbs/commandreport.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/admin/verbs/commandreport.dm b/code/modules/admin/verbs/commandreport.dm
index 8cf537a61ff..8b03674258f 100644
--- a/code/modules/admin/verbs/commandreport.dm
+++ b/code/modules/admin/verbs/commandreport.dm
@@ -27,7 +27,7 @@
 	set category = "Admin.Events"
 	set name = "Create Command Report"
 
-	if(!check_rights(R_ADMIN) || !check_rights(R_DEBUG))
+	if(!check_rights(R_ADMIN) && !check_rights(R_DEBUG))
 		return
 
 	SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

From 082bf108458f2ff88a6e28c9b3c4dcc4d5c48009 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 18:47:39 -0400
Subject: [PATCH 068/200] TYPO

---
 code/controllers/subsystem/statpanel.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index 3be33fb0384..dab29696abc 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -34,7 +34,7 @@ SUBSYSTEM_DEF(statpanels)
 			"Internal Round Timer: [SSticker.round_start_time ? time2text(world.time - SSticker.round_start_time, "hh:mm:ss", 0) : "The round hasn't started yet!"]",
 			"Actual Round Timer: [SSticker.round_start_timeofday ? time2text(REALTIMEOFDAY - SSticker.round_start_timeofday, "hh:mm:ss", 0) : "The round hasn't started yet!"]",
 			"\n",
-			"Playes Playing/Connected: [get_active_player_count()]/[length(GLOB.clients)]"
+			"Players Playing/Connected: [get_active_player_count()]/[length(GLOB.clients)]"
 		)
 
 		if(SSshuttle.emergency)

From 09b7e25bb159dd8a53835b96f9b18eb0e688bd1b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 19:03:13 -0400
Subject: [PATCH 069/200] Bring back pre-init messages

---
 code/controllers/master.dm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index a3d228709d1..e84fd902c61 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -241,6 +241,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
 			if (subsystem.flags & SS_NO_INIT || subsystem.initialized) //Don't init SSs with the correspondig flag or if they already are initialzized
 				continue
 			current_initializing_subsystem = subsystem
+			to_chat(world, span_blue(span_bold("Initializing [subsystem.name]...")))
 			subsystem.Initialize(REALTIMEOFDAY)
 			CHECK_TICK
 		current_initializing_subsystem = null

From 7d15d92f5d6a1bddb19535321cb9453bd430e28c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 20:44:50 -0400
Subject: [PATCH 070/200] Fix some bugs

---
 code/game/objects/effects/decals/cleanable.dm    |  2 +-
 code/game/objects/effects/decals/decal.dm        |  2 +-
 code/game/objects/structures/windoor_assembly.dm | 12 ++++++------
 code/game/objects/structures/window.dm           |  7 ++++++-
 code/game/turfs/open/asteroid.dm                 |  1 +
 code/modules/reagents/reagent_containers.dm      |  4 ++--
 6 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index e4dacb783d2..247e5b0ab18 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -83,7 +83,7 @@
 	else
 		return ..()
 
-/obj/effect/decal/cleanable/fire_act(exposed_temperature, exposed_volume)
+/obj/effect/decal/cleanable/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
 	if(reagents)
 		reagents.expose_temperature(exposed_temperature)
 	..()
diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm
index 309fc091388..6bfd03aec75 100644
--- a/code/game/objects/effects/decals/decal.dm
+++ b/code/game/objects/effects/decals/decal.dm
@@ -20,7 +20,7 @@
 /obj/effect/decal/ex_act(severity, target)
 	qdel(src)
 
-/obj/effect/decal/fire_act(exposed_temperature, exposed_volume)
+/obj/effect/decal/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
 	if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava
 		qdel(src)
 
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 81af20511f0..091c31988c1 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -33,7 +33,7 @@
 	. = ..()
 	if(set_dir)
 		setDir(set_dir)
-	//air_update_turf(TRUE, TRUE)
+	update_nearby_tiles(TRUE)
 
 	var/static/list/loc_connections = list(
 		COMSIG_ATOM_EXIT = .proc/on_exit,
@@ -47,12 +47,12 @@
 	set_density(FALSE)
 	update_nearby_tiles()
 	return ..()
-/*
+/
 /obj/structure/windoor_assembly/Move()
-	var/turf/T = loc
+	update_nearby_tiles()
 	. = ..()
-	move_update_air(T)
-*/
+	update_nearby_tiles()
+
 /obj/structure/windoor_assembly/update_icon_state()
 	icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]"
 	return ..()
@@ -74,7 +74,7 @@
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
-		return density ? AIR_BLOCKED : ZONE_BLOCKED
+		return density ? AIR_BLOCKED|ZONE_BLOCKED : ZONE_BLOCKED
 	else
 		return ZONE_BLOCKED
 
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 16991ccc204..5f2345328c5 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -358,7 +358,12 @@
 		return AIR_ALLOWED
 	if(!anchored || !density)
 		return ZONE_BLOCKED
-	return (fulltile || dir == get_dir(loc, T)) ? AIR_BLOCKED : ZONE_BLOCKED
+	if(!fulltile)
+		if(get_dir(loc, T) & dir)
+			return AIR_BLOCKED|ZONE_BLOCKED
+		else
+			return AIR_ALLOWED
+	return AIR_BLOCKED|ZONE_BLOCKED
 
 //This proc is used to update the icons of nearby windows.
 /obj/structure/window/proc/update_nearby_icons()
diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index 3bf86c2ab4b..6bcae95964b 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -148,6 +148,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/airless
 	initial_gas = AIRLESS_ATMOS
+	temperature = T0C
 	baseturfs = /turf/open/misc/asteroid/airless
 	turf_type = /turf/open/misc/asteroid/airless
 
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 0980f89d9b5..23666e3dd7b 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -154,7 +154,7 @@
 
 	return ..()
 
-/obj/item/reagent_containers/fire_act(exposed_temperature, exposed_volume)
+/obj/item/reagent_containers/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
 	reagents.expose_temperature(exposed_temperature)
 	..()
 
@@ -207,7 +207,7 @@
 	reagents.expose_temperature(1000)
 	..()
 
-/obj/item/reagent_containers/fire_act(temperature, volume)
+/obj/item/reagent_containers/fire_act(datum/gas_mixture/air, temperature, volume)
 	reagents.expose_temperature(temperature)
 
 /// Updates the icon of the container when the reagents change. Eats signal args

From 8cd2837dbbc1a16d09b12369ca40192b116b9f0c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 2 May 2022 21:51:28 -0400
Subject: [PATCH 071/200] HAHAHAHAHAHHA WHOOPS

---
 code/game/objects/structures/windoor_assembly.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 091c31988c1..4539b8ff00f 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -47,7 +47,7 @@
 	set_density(FALSE)
 	update_nearby_tiles()
 	return ..()
-/
+
 /obj/structure/windoor_assembly/Move()
 	update_nearby_tiles()
 	. = ..()

From 5a55f2095354bd14a73aabd896e53bb223cba885 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 02:31:45 -0400
Subject: [PATCH 072/200] Fixes kilo. The great unspace-ening

---
 code/__DEFINES/atmospherics/ZAS.dm            |  2 +-
 .../atmospherics/atmos_mapping_helpers.dm     |  2 +-
 code/game/objects/structures/window.dm        |  2 +-
 code/game/turfs/change_turf.dm                |  2 +-
 code/game/turfs/open/asteroid.dm              | 14 +++++++++----
 code/game/turfs/open/space/space.dm           |  4 ++--
 code/modules/atmospherics/ZAS/Atom.dm         |  6 +-----
 code/modules/atmospherics/ZAS/Connection.dm   |  4 ++--
 code/modules/atmospherics/ZAS/Diagnostic.dm   |  6 +++---
 code/modules/atmospherics/ZAS/Turf.dm         | 20 +++++++------------
 tgstation.dme                                 |  2 +-
 11 files changed, 30 insertions(+), 34 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 56b5bd809ef..990d6429367 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -24,7 +24,7 @@
 
 //#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid) ZASTURF
 
-#define TURF_HAS_VALID_ZONE(T) (!istype(T, /turf/open/space) && T:zone && !T:zone:invalid)
+#define TURF_HAS_VALID_ZONE(T) (T.simulated && T:zone && !T:zone:invalid)
 #ifdef MULTIZAS
 
 GLOBAL_REAL(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
diff --git a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
index 07d1d30fa44..0c9f2c49110 100644
--- a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
+++ b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm
@@ -43,7 +43,7 @@
 //ATMOS MIX IDS
 //#define LAVALAND_DEFAULT_ATMOS "LAVALAND_ATMOS"
 #define LAVALAND_DEFAULT_ATMOS OPENTURF_LOW_PRESSURE
-#define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS"
+#define ICEMOON_DEFAULT_ATMOS OPENTURF_LOW_PRESSURE ; temperature = 180
 
 //AIRLOCK CONTROLLER TAGS
 
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 5f2345328c5..78a27df4fb1 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -390,7 +390,7 @@
 
 /obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
 	if (exposed_temperature > melting_point)
-		take_damage(round(air.get_volume() / 100), BURN, 0, 0)
+		take_damage(round(air.get_volume() / 100), BURN, 0, 0) //The max of 9 is to ensure it takes 4 ticks to destroy, which is incredibly dramatic
 
 /obj/structure/window/get_dumping_location()
 	return null
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 3d8bad6b65c..6ac60a6b9a4 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -92,7 +92,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	changing_turf = TRUE
 
 	if(connections) connections.erase_all()
-	if(!istype(src, /turf/open/space))
+	if(simulated)
 		//Yeah, we're just going to rebuild the whole thing.
 		//Despite this being called a bunch during explosions,
 		//the zone will only really do heavy lifting once.
diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index 6bcae95964b..9201e54213c 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -14,7 +14,7 @@
 	clawfootstep = FOOTSTEP_SAND
 	heavyfootstep = FOOTSTEP_GENERIC_HEAVY
 
-	simulated = FALSE //OHHH HELLLL NAW
+	simulated = TRUE //Kilostation
 
 	/// Base turf type to be created by the tunnel
 	var/turf_type = /turf/open/misc/asteroid
@@ -108,6 +108,9 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	digResult = /obj/item/stack/ore/glass/basalt
 	broken_state = "basalt_dug"
 
+	initial_gas = LAVALAND_DEFAULT_ATMOS
+	simulated = FALSE //OH *FUCK* NO.
+
 /turf/open/misc/asteroid/basalt/getDug()
 	set_light(0)
 	GLOB.dug_up_basalt |= src
@@ -149,6 +152,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 /turf/open/misc/asteroid/airless
 	initial_gas = AIRLESS_ATMOS
 	temperature = T0C
+
 	baseturfs = /turf/open/misc/asteroid/airless
 	turf_type = /turf/open/misc/asteroid/airless
 
@@ -164,6 +168,10 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	temperature = 180
 	slowdown = 2
 	flags_1 = NONE
+
+	simulated = FALSE
+	initial_gas = ICEMOON_DEFAULT_ATMOS
+
 	planetary_atmos = TRUE
 	bullet_sizzle = TRUE
 	bullet_bounce_sound = null
@@ -181,11 +189,9 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/snow/icemoon
 	baseturfs = /turf/open/openspace/icemoon
-	initial_gas = ICEMOON_DEFAULT_ATMOS
 	slowdown = 0
 
 /turf/open/lava/plasma/ice_moon
-	initial_gas = ICEMOON_DEFAULT_ATMOS
 	baseturfs = /turf/open/lava/plasma/ice_moon
 	planetary_atmos = TRUE
 
@@ -206,7 +212,6 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/snow/ice/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/ice/icemoon
-	initial_gas = ICEMOON_DEFAULT_ATMOS
 	planetary_atmos = TRUE
 	slowdown = 0
 
@@ -229,4 +234,5 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/snow/standard_air
 	initial_gas = OPENTURF_DEFAULT_ATMOS
+	temperature = T0C
 	planetary_atmos = FALSE
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index b938edd3bbd..5e11964b1f9 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -14,7 +14,8 @@
 	var/destination_x
 	var/destination_y
 
-	var/static/datum/gas_mixture/immutable/space_gas = new
+	initial_gas = AIRLESS_ATMOS
+
 	// run_later = TRUE
 	plane = PLANE_SPACE
 	layer = SPACE_LAYER
@@ -35,7 +36,6 @@
 /turf/open/space/Initialize(mapload)
 	SHOULD_CALL_PARENT(FALSE)
 	icon_state = SPACE_ICON_STATE
-	air = space_gas
 	vis_contents.Cut() //removes inherited overlays
 	visibilityChanged()
 
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index da18ffbaf9c..d1787e7a055 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -17,7 +17,7 @@
 /atom/movable/proc/update_nearby_tiles(need_rebuild)
 	//for(var/turf/simulated/turf in locs) ZASTURF
 	for(var/turf/turf in locs)
-		if(istype(turf, /turf/open/space))
+		if(!turf.simulated)
 			continue
 		SSzas.mark_for_update(turf)
 
@@ -35,10 +35,6 @@
 	#endif
 	if(can_atmos_pass == CANPASS_PROC)
 		CRASH("Atmos pass assigned proc when proc doesn't exist.")
-	//var/direction = get_dir(src, other)
-	//return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1))
-	//return (AIR_BLOCKED*!CanPass(other, direction, 0))|(ZONE_BLOCKED*!CanPass(other, direction, 1))
-	return (AIR_BLOCKED*!ATMOS_CANPASS_NOTTURF(src))
 
 // This is a legacy proc only here for compatibility - you probably should just use ATMOS_CANPASS_TURF directly.
 /turf/zas_canpass(turf/other)
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 36b3d2d42ca..bfd782b3e61 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -107,7 +107,7 @@ Class Procs:
 
 /connection/proc/update()
 //	log_admin("Updated, \...")
-	if(istype(A,/turf/open/space))
+	if(!A.simulated)
 //		log_admin("Invalid A.")
 		erase()
 		return
@@ -122,7 +122,7 @@ Class Procs:
 	else
 		mark_direct()
 
-	var/b_is_space = istype(B,/turf/open/space)
+	var/b_is_space = !B.simulated
 
 	if(state & CONNECTION_SPACE)
 		if(!b_is_space)
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 7a366d9ac68..2a08a3cf268 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -1,7 +1,7 @@
 /client/proc/Zone_Info(turf/T as null|turf)
 	set category = "Debug"
 	if(T)
-		if(!istype(T,/turf/open/space) && T:zone) //ZASTURF
+		if(T.simulated && T:zone) //ZASTURF
 			T:zone:dbg_data(src)
 		else
 			to_chat(mob, span_admin("ZASDBG: No zone here."))
@@ -19,7 +19,7 @@
 
 /client/proc/Test_ZAS_Connection(turf/T as turf) //ZASTURF
 	set category = "Debug"
-	if(istype(T, /turf/open/space)) //ZASTURF
+	if(!T.simulated) //ZASTURF
 		return
 
 	var/direction_list = list(\
@@ -44,7 +44,7 @@
 		return
 
 	var/turf/other_turf = get_step(T, direction_list[direction])
-	if(istype(other_turf, /turf/open/space))
+	if(!other_turf.simulated)
 		return
 
 	var/t_block
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 5d4e1a33ebc..162fc4e9389 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -51,7 +51,7 @@
 			//var/turf/simulated/sim = unsim
 			if(TURF_HAS_VALID_ZONE(unsim))
 				SSzas.connect(unsim, src)
-
+/*
 ///Yes. Massive copy paste. Pain.
 /turf/open/space/update_air_properties()
 	var/block
@@ -82,10 +82,11 @@
 		if(r_block & AIR_BLOCKED)
 			continue
 
-		if(!istype(unsim, /turf/open/space))
+		if(unsim.simulated)
 			var/turf/sim = unsim
 			if(TURF_HAS_VALID_ZONE(sim))
 				SSzas.connect(sim, src)
+*/
 
 // Helper for can_safely_remove_from_zone().
 //ZASTURF - MACRO IM NOT COMMENTING THIS SHIT OUT
@@ -94,7 +95,7 @@
 	if (T.zone) { \
 		for (var/_gzn_dir in gzn_check) { \
 			var/turf/other = get_step(T, _gzn_dir); \
-			if (!istype(other, /turf/open/space) && other.zone == T.zone) { \
+			if (other.simulated && other.zone == T.zone) { \
 				var/block; \
 				ATMOS_CANPASS_TURF(block, other, T); \
 				if (!(block & AIR_BLOCKED)) { \
@@ -125,7 +126,7 @@
 			//var/turf/simulated/T = get_step(src, dir) ZASTURF
 			var/turf/T = get_step(src, dir)
 			//if (!istype(T)) ZASTURF
-			if (istype(T, /turf/open/space) || !T.simulated)
+			if (!T.simulated)
 				. &= ~dir
 				continue
 
@@ -204,7 +205,7 @@
 			//Check that our zone hasn't been cut off recently.
 			//This happens when windows move or are constructed. We need to rebuild.
 			//if((previously_open & d) && istype(unsim, /turf/simulated)) ZAS
-			if((previously_open & d) && !istype(unsim, /turf/open/space))
+			if((previously_open & d) && unsim.simulated)
 				var/turf/sim = unsim
 				if(zone && sim.zone == zone)
 					zone.rebuild()
@@ -215,7 +216,7 @@
 		open_directions |= d
 
 		//if(istype(unsim, /turf/simulated)) ZASTURF
-		if(!istype(unsim, /turf/open/space))
+		if(unsim.simulated)
 
 			var/turf/sim = unsim
 			sim.open_directions |= GLOB.reverse_dir[d]
@@ -313,9 +314,6 @@
 			make_air()
 		return air
 
-/turf/open/space/return_air()
-	return air
-
 /turf/remove_air(amount as num)
 	var/datum/gas_mixture/GM = return_air()
 	return GM.remove(amount)
@@ -374,15 +372,11 @@
 		air.gas = initial_gas.Copy()
 	air.updateValues()
 
-//turf/simulated/proc/c_copy_air() ZASTURF
 /turf/proc/c_copy_air()
 	if(!air) air = new/datum/gas_mixture
 	air.copyFrom(zone.air)
 	air.group_multiplier = 1
 
-/*/turf/open/space/c_copy_air()
-	return
-*/
 
 //turf/simulated/proc/atmos_spawn_air(gas_id, amount, initial_temperature) ZASTURF
 /turf/proc/atmos_spawn_air(gas_id, amount, initial_temperature)
diff --git a/tgstation.dme b/tgstation.dme
index 563008c2080..cacf4a22626 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -682,7 +682,7 @@
 #include "code\datums\announcers\intern_announcer.dm"
 #include "code\datums\announcers\medbot_announcer.dm"
 #include "code\datums\atmosphere\_atmosphere.dm"
-#include "code\datums\atmosphere\planetary.dm"
+//#include "code\datums\atmosphere\planetary.dm"
 #include "code\datums\brain_damage\brain_trauma.dm"
 #include "code\datums\brain_damage\creepy_trauma.dm"
 #include "code\datums\brain_damage\hypnosis.dm"

From 64c2243e9c212532709a8401f7ec7152600988ea Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 13:21:47 -0400
Subject: [PATCH 073/200] Third times the charm

---
 code/modules/admin/verbs/commandreport.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/admin/verbs/commandreport.dm b/code/modules/admin/verbs/commandreport.dm
index 8b03674258f..c93bd401f73 100644
--- a/code/modules/admin/verbs/commandreport.dm
+++ b/code/modules/admin/verbs/commandreport.dm
@@ -27,7 +27,7 @@
 	set category = "Admin.Events"
 	set name = "Create Command Report"
 
-	if(!check_rights(R_ADMIN) && !check_rights(R_DEBUG))
+	if(!check_rights(R_DEBUG|R_ADMIN))
 		return
 
 	SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

From 226616708505ae86248201044369d2ca229ae99b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 13:27:32 -0400
Subject: [PATCH 074/200] Fixes atmos resin.

---
 code/game/objects/effects/effect_system/effects_foam.dm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index b8de7717ac4..7bb557f86f2 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -355,8 +355,8 @@
 	if(isopenturf(loc))
 		var/turf/open/O = loc
 		O.ClearWet()
-		if(O.air)
-			var/datum/gas_mixture/G = O.air
+		if(O.return_air())
+			var/datum/gas_mixture/G = O.return_air()
 			G.temperature = 293.15
 			for(var/obj/effect/hotspot/H in O)
 				qdel(H)

From 9eab2a76f9b42d055cb533048ab467a647333812 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 13:42:51 -0400
Subject: [PATCH 075/200] Fixes the portable air pump. I hope.

---
 code/modules/atmospherics/machinery/portable/pump.dm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 22b8413db86..c11e1788e9d 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -80,9 +80,9 @@
 
 	if (pressure_delta > 0.01)
 		if (direction == PUMP_OUT)
-			pump_gas(src, air_contents, environment, transfer_moles)
+			pump_gas(air_contents, environment, transfer_moles)
 		else
-			pump_gas(src, environment, air_contents, transfer_moles)
+			pump_gas(environment, air_contents, transfer_moles)
 	//air_update_turf(FALSE, FALSE) // Update the environment if needed.
 
 	return ..()

From 7db37f2256e3026166a00214860fa4c0b2405c25 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 14:20:03 -0400
Subject: [PATCH 076/200] Grammar

---
 code/modules/atmospherics/ZAS/Airflow.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 8b403e224b2..dc0a04b5291 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -160,7 +160,7 @@ Contains helper procs for airflow, handled in /connection_group.
 
 /atom/proc/airflow_hit_act(atom/movable/flying)
 	src.visible_message(
-		span_danger("A flying [flying] slams into \the [src]!"),
+		span_danger("A flying \improper [flying] slams into \the [src]!"),
 		span_danger("You're hit by a flying [flying]!"),
 		span_danger("You hear a loud slam!")
 	)

From 2e0fac5e3cb67963eb87284208d943ec55441847 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 14:28:30 -0400
Subject: [PATCH 077/200] stupid language

---
 code/modules/atmospherics/ZAS/Airflow.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index dc0a04b5291..b03121201bf 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -160,7 +160,7 @@ Contains helper procs for airflow, handled in /connection_group.
 
 /atom/proc/airflow_hit_act(atom/movable/flying)
 	src.visible_message(
-		span_danger("A flying \improper [flying] slams into \the [src]!"),
+		span_danger("A flying [flying.name] slams into \the [src]!"),
 		span_danger("You're hit by a flying [flying]!"),
 		span_danger("You hear a loud slam!")
 	)

From 415c954aeb004fedac58fe5e0a62c2b55e6acf7f Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 16:13:06 -0400
Subject: [PATCH 078/200] Makes some gases purchasable. Oops.

---
 code/modules/admin/verbs/commandreport.dm  | 2 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/code/modules/admin/verbs/commandreport.dm b/code/modules/admin/verbs/commandreport.dm
index c93bd401f73..4d5d60f4034 100644
--- a/code/modules/admin/verbs/commandreport.dm
+++ b/code/modules/admin/verbs/commandreport.dm
@@ -27,7 +27,7 @@
 	set category = "Admin.Events"
 	set name = "Create Command Report"
 
-	if(!check_rights(R_DEBUG|R_ADMIN))
+	if(!holder)
 		return
 
 	SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 3088e31548f..8fadf055b41 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -6,7 +6,7 @@
 	flags = XGM_GAS_OXIDIZER | XGM_GAS_FUSION_FUEL
 	symbol_html = "O<sub>2</sub>"
 	symbol = "O2"
-
+	purchaseable = TRUE
 
 /datum/xgm_gas/nitrogen
 	id = GAS_NITROGEN
@@ -15,6 +15,7 @@
 	molar_mass = 0.028	// kg/mol
 	symbol_html = "N<sub>2</sub>"
 	symbol = "N2"
+	purchaseable = TRUE
 
 /datum/xgm_gas/carbon_dioxide
 	id = GAS_CO2
@@ -23,6 +24,7 @@
 	molar_mass = 0.044	// kg/mol
 	symbol_html = "CO<sub>2</sub>"
 	symbol = "CO2"
+	purchaseable = TRUE
 
 /datum/xgm_gas/methyl_bromide
 	id = GAS_METHYL_BROMIDE
@@ -140,6 +142,7 @@
 	molar_mass = 0.018	// kg/mol
 	symbol_html = "Ar"
 	symbol = "Ar"
+	purchaseable = TRUE
 
 // If narcosis is ever simulated, krypton has a narcotic potency seven times greater than regular airmix.
 /datum/xgm_gas/krypton
@@ -149,7 +152,7 @@
 	molar_mass = 0.036	// kg/mol
 	symbol_html = "Kr"
 	symbol = "Kr"
-
+	purchaseable = TRUE
 /datum/xgm_gas/neon
 	id = GAS_NEON
 	name = "Neon"
@@ -157,6 +160,7 @@
 	molar_mass = 0.01	// kg/mol
 	symbol_html = "Ne"
 	symbol = "Ne"
+	purchaseable = TRUE
 
 /datum/xgm_gas/xenon
 	id = GAS_XENON

From 0b338daaf3301dc04c7b4f4ca1f187f7e3ffdb12 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 16:49:55 -0400
Subject: [PATCH 079/200] Purchaseable air canisters. I hope.

---
 code/modules/atmospherics/ZAS/XGM/gases.dm    | 13 ++++
 .../machinery/portable/canister.dm            | 69 ++++++++-----------
 code/modules/cargo/packs.dm                   | 11 +++
 3 files changed, 52 insertions(+), 41 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 8fadf055b41..f577c975734 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -7,6 +7,7 @@
 	symbol_html = "O<sub>2</sub>"
 	symbol = "O2"
 	purchaseable = TRUE
+	base_value = 0.2
 
 /datum/xgm_gas/nitrogen
 	id = GAS_NITROGEN
@@ -16,6 +17,7 @@
 	symbol_html = "N<sub>2</sub>"
 	symbol = "N2"
 	purchaseable = TRUE
+	base_value = 0.1
 
 /datum/xgm_gas/carbon_dioxide
 	id = GAS_CO2
@@ -25,6 +27,7 @@
 	symbol_html = "CO<sub>2</sub>"
 	symbol = "CO2"
 	purchaseable = TRUE
+	base_value = 0.2
 
 /datum/xgm_gas/methyl_bromide
 	id = GAS_METHYL_BROMIDE
@@ -55,6 +58,7 @@
 	breathed_product = /datum/reagent/toxin/plasma
 	symbol_html = "Ph"
 	symbol = "Ph"
+	base_value = 2
 
 /datum/xgm_gas/sleeping_agent
 	id = GAS_N2O
@@ -66,6 +70,7 @@
 	breathed_product = /datum/reagent/nitrous_oxide
 	symbol_html = "N<sub>2</sub>O"
 	symbol = "N2O"
+	base_value = 3
 
 /datum/xgm_gas/methane
 	id = GAS_METHANE
@@ -143,6 +148,7 @@
 	symbol_html = "Ar"
 	symbol = "Ar"
 	purchaseable = TRUE
+	base_value = 0.2
 
 // If narcosis is ever simulated, krypton has a narcotic potency seven times greater than regular airmix.
 /datum/xgm_gas/krypton
@@ -153,6 +159,8 @@
 	symbol_html = "Kr"
 	symbol = "Kr"
 	purchaseable = TRUE
+	base_value = 0.2
+
 /datum/xgm_gas/neon
 	id = GAS_NEON
 	name = "Neon"
@@ -161,6 +169,7 @@
 	symbol_html = "Ne"
 	symbol = "Ne"
 	purchaseable = TRUE
+	base_value = 0.2
 
 /datum/xgm_gas/xenon
 	id = GAS_XENON
@@ -170,6 +179,8 @@
 	breathed_product = /datum/reagent/nitrous_oxide/xenon
 	symbol_html = "Xe"
 	symbol = "Xe"
+	purchaseable = TRUE
+	base_value = 5
 
 /datum/xgm_gas/nitrodioxide
 	id = GAS_NO2
@@ -204,6 +215,8 @@
 	breathed_product = /datum/reagent/chlorine
 	symbol_html = "Cl"
 	symbol = "Cl"
+	purchaseable = TRUE
+	base_value = 7
 
 /datum/xgm_gas/vapor
 	id = GAS_STEAM
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 4b672388494..8abffa6444c 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -10,6 +10,11 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		GAS_CO2 = /obj/machinery/portable_atmospherics/canister/carbon_dioxide,
 		GAS_PLASMA = /obj/machinery/portable_atmospherics/canister/plasma,
 		GAS_N2O = /obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+		GAS_XENON = /obj/machinery/portable_atmospherics/canister/xenon,
+		GAS_KRYPTON = /obj/machinery/portable_atmospherics/canister/krypton,
+		GAS_ARGON = /obj/machinery/portable_atmospherics/canister/argon,
+		GAS_CHLORINE = /obj/machinery/portable_atmospherics/canister/chlorine,
+		GAS_NEON = /obj/machinery/portable_atmospherics/canister/neon,
 		/*"nitrium" = /obj/machinery/portable_atmospherics/canister/nitrium,
 		"bz" = /obj/machinery/portable_atmospherics/canister/bz,
 		"air" = /obj/machinery/portable_atmospherics/canister/air,
@@ -166,50 +171,19 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	gas_type = GAS_CO
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#808080"
-/*
-/obj/machinery/portable_atmospherics/canister/freon
-	name = "Freon canister"
-	gas_type = /datum/gas/freon
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#6696ee#fefb30"
-
-/obj/machinery/portable_atmospherics/canister/halon
-	name = "Halon canister"
-	gas_type = /datum/gas/halon
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#9b5d7f#368bff"
 
-/obj/machinery/portable_atmospherics/canister/healium
-	name = "Healium canister"
-	gas_type = /datum/gas/healium
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#009823#ff0e00"
+/obj/machinery/portable_atmospherics/canister/xenon
+	name = "Xenon canister"
+	gas_type = GAS_XENON
+	greyscale_config = /datum/greyscale_config/canister
+	greyscale_colors = "#808080"
 
-/obj/machinery/portable_atmospherics/canister/helium
-	name = "Helium canister"
-	gas_type = /datum/gas/helium
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#9b5d7f#368bff"
-*/
-/*
-/obj/machinery/portable_atmospherics/canister/hydrogen
-	name = "Hydrogen canister"
-	gas_type = GAS_HYDROGEN
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/stripe
-	greyscale_colors = "#bdc2c0#ffffff"
+/obj/machinery/portable_atmospherics/canister/krypton
+	name = "Krypton canister"
+	gas_type = GAS_KRYPTON
+	greyscale_config = /datum/greyscale_config/canister
+	greyscale_colors = "#44E022"
 
-/obj/machinery/portable_atmospherics/canister/miasma
-	name = "Miasma canister"
-	gas_type = /datum/gas/miasma
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#009823#f7d5d3"
-*/
 /obj/machinery/portable_atmospherics/canister/nitrogen
 	name = "Nitrogen canister"
 	gas_type = GAS_NITROGEN
@@ -227,6 +201,19 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	gas_type = GAS_CHLORINE
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#b9d41b"
+
+/obj/machinery/portable_atmospherics/canister/argon
+	name = "Argon canister"
+	gas_type = GAS_ARGON
+	greyscale_config = /datum/greyscale_config/canister
+	greyscale_colors = "#CC4DCD"
+
+/obj/machinery/portable_atmospherics/canister/neon
+	name = "Neon canister"
+	gas_type = GAS_NEON
+	greyscale_config = /datum/greyscale_config/canister
+	greyscale_colors = "#FF825C"
+
 /*
 /obj/machinery/portable_atmospherics/canister/nitrium
 	name = "Nitrium canister"
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 29a39a780ba..bd6a1e0fb0b 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -1134,6 +1134,17 @@
 
 		canister_packs += pack
 
+	////AIRMIX SPECIAL BABY
+	var/datum/supply_pack/materials/airpack = new
+	airpack.name = "Airmix Canister"
+	airpack.desc = "Contains a canister of breathable air."
+	airpack.crate_name = "airmix canister crate"
+	airpack.id = "[type](airmix)"
+	airpack.cost = 3000
+	airpack.contains = list(/obj/machinery/portable_atmospherics/canister/air)
+	airpack.crate_type = crate_type
+	canister_packs += airpack
+
 	return canister_packs
 
 //////////////////////////////////////////////////////////////////////////////

From 34362b55fe1fa51c392b39b6f30ac6c87ea098bb Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 17:15:01 -0400
Subject: [PATCH 080/200] Fixes roundstart plasma

---
 code/__DEFINES/atmospherics/ZAS.dm         | 4 ++--
 code/modules/atmospherics/ZAS/XGM/gases.dm | 1 -
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 990d6429367..1715a22e750 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -218,8 +218,8 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 #define ATMOSTANK_NITROGEN      list(GAS_NITROGEN = 90000) // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
 #define ATMOSTANK_OXYGEN        list(GAS_OXYGEN = 50000) // O2 is also important for airmix, but not as much as N2 as it's only 21% of it.
 #define ATMOSTANK_CO2           list(GAS_CO2 = 60000) // CO2 is used for the GUP, Charon, and Torch as the primary fuel propellant, and we need lots to stick around.
-#define ATMOSTANK_PLASMA        list(GAS_PHORON = 25000)
-#define ATMOSTANK_PLASMA_FUEL	list(GAS_PHORON = 15000)
+#define ATMOSTANK_PLASMA        list(GAS_PLASMA = 25000)
+#define ATMOSTANK_PLASMA_FUEL	list(GAS_PLASMA = 15000)
 #define ATMOSTANK_HYDROGEN      list(GAS_HYDROGEN = 50000)
 #define ATMOSTANK_HYDROGEN_FUEL list(GAS_HYDROGEN = 25000)
 #define ATMOSTANK_NITROUSOXIDE  list(GAS_N2O = 10000) // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index f577c975734..82aece0cd2a 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -51,7 +51,6 @@
 	//and following a N/Z ratio of 1.5, the molar mass of a monatomic gas is:
 	molar_mass = 0.405	// kg/mol
 
-	//tile_overlay = "phoron"
 	tile_overlay = "plasma"
 	overlay_limit = 0.7
 	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL

From 21bf1f4292b137cca928347ef35536a11b7c641a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 18:13:18 -0400
Subject: [PATCH 081/200] Canisters have the correct heat resistence

---
 code/modules/atmospherics/machinery/portable/canister.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 8abffa6444c..c4d6cef1498 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -425,7 +425,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	return (exposed_temperature > temperature_resistance && !shielding_powered)
 
 /obj/machinery/portable_atmospherics/canister/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	if(exposed_temperature > heat_limit)
+	if(exposed_temperature > temperature_resistance &&!shielding_powered)
 		take_damage(5, BURN, 0)
 
 /obj/machinery/portable_atmospherics/canister/deconstruct(disassembled = TRUE)

From 7235a71b2fdce91a5018559e1b932aaa0b8e4e89 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 19:09:18 -0400
Subject: [PATCH 082/200] Fixes? directional windows blocking atmos due to
 being constructed on unsimulated turfs

---
 code/game/objects/structures/window.dm | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 78a27df4fb1..9c0defcbc21 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -344,6 +344,12 @@
 	update_nearby_icons()
 	can_atmos_pass = CANPASS_ALWAYS //hacky-sacky
 	update_nearby_tiles()
+
+	if(!fulltile)
+		var/turf/open/T = get_step(src, dir)
+		if(istype(T))
+			SSzas.mark_for_update(T)
+
 	. = ..()
 
 /obj/structure/window/Move()

From cb965651e11b3e7f1b523ac316cf36cf6b229831 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 3 May 2022 21:01:10 -0400
Subject: [PATCH 083/200] Fixes N2O not knocking you the fuck out

---
 code/modules/atmospherics/ZAS/XGM/gases.dm |  2 +-
 code/modules/mob/living/carbon/life.dm     |  3 +--
 code/modules/surgery/organs/lungs.dm       | 26 +++++++++++-----------
 3 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 82aece0cd2a..af011c8def7 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -66,7 +66,7 @@
 	molar_mass = 0.044	// kg/mol. N2O
 	tile_overlay = "sleeping_agent"
 	flags = XGM_GAS_OXIDIZER //N2O is a powerful oxidizer
-	breathed_product = /datum/reagent/nitrous_oxide
+	//breathed_product = /datum/reagent/nitrous_oxide
 	symbol_html = "N<sub>2</sub>O"
 	symbol = "N2O"
 	base_value = 3
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 498462805b8..3119924232c 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -131,8 +131,7 @@
 					breath.adjustGas(gasname, -breath.gas[gasname], update = 0) //update after
 
 	check_breath(breath)
-
-	if(breath)
+	if(breath.total_moles)
 		breath.updateValues()
 		loc.assume_air(breath)
 
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 7500c628663..c0809b2f8c0 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -124,12 +124,14 @@
 	var/N2_moles = breath.gas[GAS_NITROGEN]
 	var/plasma_moles = breath.gas[GAS_PLASMA]
 	var/CO2_moles = breath.gas[GAS_CO2]
+	var/SA_moles = breath.gas[GAS_N2O]
+
 
 	var/O2_pp = breath.getBreathPartialPressure(O2_moles)//+(8*breath.getBreathPartialPressure(breath_gases[/datum/gas/pluoxium][MOLES]))
 	var/N2_pp = breath.getBreathPartialPressure(N2_moles)
 	var/Plasma_pp = breath.getBreathPartialPressure(plasma_moles)
 	var/CO2_pp = breath.getBreathPartialPressure(CO2_moles)
-
+	var/SA_pp = breath.getBreathPartialPressure(SA_moles)
 	//Vars for n2o and healium induced euphorias.
 	var/n2o_euphoria = EUPHORIA_LAST_FLAG
 	var/healium_euphoria = EUPHORIA_LAST_FLAG
@@ -158,8 +160,8 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
 
 	//Exhale
-	breath.adjustGas(GAS_OXYGEN, -gas_breathed)
-	breath.adjustGas(GAS_CO2, gas_breathed)
+	breath.adjustGas(GAS_OXYGEN, -gas_breathed, FALSE)
+	breath.adjustGas(GAS_CO2, gas_breathed, FALSE)
 	gas_breathed = 0
 
 	//-- Nitrogen --//
@@ -186,8 +188,8 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_NITRO)
 
 	//Exhale
-	breath.adjustGas(GAS_NITROGEN, -gas_breathed)
-	breath.adjustGas(GAS_CO2, gas_breathed)
+	breath.adjustGas(GAS_NITROGEN, -gas_breathed, FALSE)
+	breath.adjustGas(GAS_CO2, gas_breathed, FALSE)
 	gas_breathed = 0
 
 	//-- CO2 --//
@@ -223,8 +225,8 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_CO2)
 
 	//Exhale
-	breath.adjustGas(GAS_CO2, -gas_breathed)
-	breath.adjustGas(GAS_OXYGEN, gas_breathed)
+	breath.adjustGas(GAS_CO2, -gas_breathed, FALSE)
+	breath.adjustGas(GAS_OXYGEN, gas_breathed, FALSE)
 	gas_breathed = 0
 
 
@@ -253,18 +255,16 @@
 			breather.clear_alert(ALERT_NOT_ENOUGH_PLASMA)
 
 	//Exhale
-	breath.adjustGas(GAS_PLASMA, -gas_breathed)
-	breath.adjustGas(GAS_CO2, gas_breathed)
+	breath.adjustGas(GAS_PLASMA, -gas_breathed, FALSE)
+	breath.adjustGas(GAS_CO2, gas_breathed, FALSE)
 	gas_breathed = 0
 
 
 	//-- TRACES --//
-
-	if(breath) // If there's some other shit in the air lets deal with it here.
+	breath.updateValues()
+	if(breath.total_moles) // If there's some other shit in the air lets deal with it here.
 
 	// N2O
-		var/n2o_moles = breath.gas[GAS_N2O]
-		var/SA_pp = breath.getBreathPartialPressure(n2o_moles)
 		if(SA_pp > SA_para_min) // Enough to make us stunned for a bit
 			breather.throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o)
 			breather.Unconscious(60) // 60 gives them one second to wake up and run away a bit!

From a63a9a79d8eacac455322c221ece034195228286 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 4 May 2022 00:08:01 -0400
Subject: [PATCH 084/200] Fixes atmos consoles and n2o overlays

---
 code/__HELPERS/atmospherics.dm                | 73 +------------------
 .../atmos_computers/_atmos_control.dm         |  1 -
 code/modules/atmospherics/ZAS/XGM/gases.dm    |  1 +
 .../tgui/interfaces/AtmosControlConsole.tsx   | 11 +--
 .../tgui/interfaces/common/GasmixParser.tsx   | 37 +---------
 5 files changed, 4 insertions(+), 119 deletions(-)

diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index 32684a61295..711c18f7fda 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -44,15 +44,9 @@
 	for(var/gas_path in gasmix.getGases())
 		.["gases"] += list(list(
 			"[gas_path]",
-			"[gas_path]",
+			xgm_gas_data.name[gas_path],
 			gasmix.gas[gas_path],
 		))
-	//.for(var/datum/gas_reaction/reaction_result as anything in gasmix.reaction_results)
-	.["reactions"] += list(list(
-		"UNIMPLIMENTED",
-		"UNIMPLIMENTED",
-		"UNIMPLIMENTED",
-	))
 	.["total_moles"] = gasmix.get_moles()
 	.["temperature"] = gasmix.temperature
 	.["volume"] = gasmix.volume
@@ -61,68 +55,3 @@
 
 GLOBAL_LIST_EMPTY(reaction_handbook)
 GLOBAL_LIST_EMPTY(gas_handbook)
-
-/// Automatically populates gas_handbook and reaction_handbook. They are formatted lists containing information regarding gases and reactions they participate in.
-/// Structure can be found in TS form at AtmosHandbook.tsx
-/*/proc/atmos_handbooks_init()
-	if(length(GLOB.reaction_handbook))
-		GLOB.reaction_handbook = list()
-	if(length(GLOB.gas_handbook))
-		GLOB.gas_handbook = list()
-
-	/// Final product is a numbered list, this one is assoc just so we can generate the "reactions" entry easily.
-	var/list/momentary_gas_list = list()
-
-	for (var/datum/gas/gas_path as anything in subtypesof(/datum/gas))
-		var/list/gas_info = list()
-		var/list/meta_information = GLOB.meta_gas_info[gas_path]
-		if(!meta_information)
-			continue
-		gas_info["id"] = meta_information[META_GAS_ID]
-		gas_info["name"] = meta_information[META_GAS_NAME]
-		gas_info["description"] = meta_information[META_GAS_DESC]
-		gas_info["specific_heat"] = meta_information[META_GAS_SPECIFIC_HEAT]
-		gas_info["reactions"] = list()
-		momentary_gas_list[gas_path] = gas_info
-
-	for (var/datum/gas_reaction/reaction_path as anything in subtypesof(/datum/gas_reaction))
-		var/datum/gas_reaction/reaction = new reaction_path
-		var/list/reaction_info = list()
-		reaction_info["id"] = reaction.id
-		reaction_info["name"] = reaction.name
-		reaction_info["description"] = reaction.desc
-		reaction_info["factors"] = list()
-		for (var/factor in reaction.factor)
-			var/list/factor_info = list()
-			factor_info["desc"] = reaction.factor[factor]
-
-			if(factor in momentary_gas_list)
-				momentary_gas_list[factor]["reactions"] += list(reaction.id = reaction.name)
-				factor_info["factor_id"] = momentary_gas_list[factor]["id"] //Gas id
-				factor_info["factor_type"] = "gas"
-				factor_info["factor_name"] = momentary_gas_list[factor]["name"] //Common name
-			else
-				factor_info["factor_name"] = factor
-				factor_info["factor_type"] = "misc"
-				if(factor == "Temperature" || factor == "Pressure")
-					factor_info["tooltip"] = "Reaction is influenced by the [lowertext(factor)] of the place where the reaction is occuring."
-				else if(factor == "Energy")
-					factor_info["tooltip"] = "Energy released by the reaction, may or may not result in linear temperature change depending on a slew of other factors."
-				else if(factor == "Radiation")
-					factor_info["tooltip"] = "This reaction emits dangerous radiation! Take precautions."
-				else if (factor == "Location")
-					factor_info["tooltip"] = "This reaction has special behaviour when occuring in specific locations."
-				else if(factor == "Hot Ice")
-					factor_info["tooltip"] = "Hot ice are solidified stacks of plasma. Ignition of one will result in a raging fire."
-			reaction_info["factors"] += list(factor_info)
-		GLOB.reaction_handbook += list(reaction_info)
-		qdel(reaction)
-
-	for (var/gas_info_index in momentary_gas_list)
-		GLOB.gas_handbook += list(momentary_gas_list[gas_info_index])
-
-/// Returns an assoc list of the gas handbook and the reaction handbook.
-/// For UIs, simply do data += return_atmos_handbooks() to use.
-/proc/return_atmos_handbooks()
-	return list("gasInfo" = GLOB.gas_handbook, "reactionInfo" = GLOB.reaction_handbook)
-*/
diff --git a/code/game/machinery/computer/atmos_computers/_atmos_control.dm b/code/game/machinery/computer/atmos_computers/_atmos_control.dm
index 719d7468775..cdc6d448ca9 100644
--- a/code/game/machinery/computer/atmos_computers/_atmos_control.dm
+++ b/code/game/machinery/computer/atmos_computers/_atmos_control.dm
@@ -134,7 +134,6 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
 	data["maxOutput"] = MAX_OUTPUT_PRESSURE
 	data["control"] = control
 	data["reconnecting"] = reconnecting
-	//data += return_atmos_handbooks()
 	return data
 
 /obj/machinery/computer/atmos_control/ui_data(mob/user)
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index af011c8def7..6b46f1c169e 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -65,6 +65,7 @@
 	specific_heat = 40	// J/(mol*K)
 	molar_mass = 0.044	// kg/mol. N2O
 	tile_overlay = "sleeping_agent"
+	overlay_limit = 0.5
 	flags = XGM_GAS_OXIDIZER //N2O is a powerful oxidizer
 	//breathed_product = /datum/reagent/nitrous_oxide
 	symbol_html = "N<sub>2</sub>O"
diff --git a/tgui/packages/tgui/interfaces/AtmosControlConsole.tsx b/tgui/packages/tgui/interfaces/AtmosControlConsole.tsx
index 3322705d090..38232b228f6 100644
--- a/tgui/packages/tgui/interfaces/AtmosControlConsole.tsx
+++ b/tgui/packages/tgui/interfaces/AtmosControlConsole.tsx
@@ -9,10 +9,6 @@ import {
   Stack,
 } from '../components';
 import { Window } from '../layouts';
-import {
-  AtmosHandbookContent,
-  atmosHandbookHooks,
-} from './common/AtmosHandbook';
 import { Gasmix, GasmixParser } from './common/GasmixParser';
 
 type Chamber = {
@@ -41,7 +37,6 @@ export const AtmosControlConsole = (props, context) => {
     = chambers.length === 1
       ? chambers[0]
       : chambers.find((chamber) => chamber.id === chamberId);
-  const [setActiveGasId, setActiveReactionId] = atmosHandbookHooks(context);
   return (
     <Window width={550} height={350}>
       <Window.Content scrollable>
@@ -70,10 +65,7 @@ export const AtmosControlConsole = (props, context) => {
           }>
           {!!selectedChamber && !!selectedChamber.gasmix ? (
             <GasmixParser
-              gasmix={selectedChamber.gasmix}
-              gasesOnClick={setActiveGasId}
-              reactionOnClick={setActiveReactionId}
-            />
+              gasmix={selectedChamber.gasmix} />
           ) : (
             <Box italic> {'No Sensors Detected!'}</Box>
           )}
@@ -171,7 +163,6 @@ export const AtmosControlConsole = (props, context) => {
             </Stack>
           </Section>
         )}
-        <AtmosHandbookContent />
       </Window.Content>
     </Window>
   );
diff --git a/tgui/packages/tgui/interfaces/common/GasmixParser.tsx b/tgui/packages/tgui/interfaces/common/GasmixParser.tsx
index cc1a8b0bb24..a6fe672080d 100644
--- a/tgui/packages/tgui/interfaces/common/GasmixParser.tsx
+++ b/tgui/packages/tgui/interfaces/common/GasmixParser.tsx
@@ -7,7 +7,6 @@ export type Gasmix = {
   volume: number;
   pressure: number;
   total_moles: number;
-  reactions: [string, string, number][]; // ID, name, and amount.
   reference: string;
 };
 
@@ -18,8 +17,6 @@ type GasmixParserProps = {
   volumeOnClick?: () => void;
   pressureOnClick?: () => void;
   reactionOnClick?: (reaction_id: string) => void;
-  // Whether we need to show the number of the reaction or not
-  detailedReactions?: boolean;
 };
 
 export const GasmixParser = (props: GasmixParserProps, context) => {
@@ -30,11 +27,10 @@ export const GasmixParser = (props: GasmixParserProps, context) => {
     volumeOnClick,
     pressureOnClick,
     reactionOnClick,
-    detailedReactions,
     ...rest
   } = props;
 
-  const { gases, temperature, volume, pressure, total_moles, reactions }
+  const { gases, temperature, volume, pressure, total_moles }
     = gasmix;
 
   return !total_moles ? (
@@ -84,37 +80,6 @@ export const GasmixParser = (props: GasmixParserProps, context) => {
         }>
         {(total_moles ? pressure.toFixed(2) : '-') + ' kPa'}
       </LabeledList.Item>
-      {detailedReactions ? (
-        reactions.map((reaction) => (
-          <LabeledList.Item
-            key={`${gasmix.reference}-${reaction[0]}`}
-            label={
-              reactionOnClick ? (
-                <Button
-                  content={reaction[1]}
-                  onClick={reactionOnClick(reaction[0])}
-                />
-              ) : (reaction[1])
-            }>
-            {reaction[2]}
-          </LabeledList.Item>
-        ))
-      ) : (
-        <LabeledList.Item label="Gas Reactions">
-          {reactions.length
-            ? reactions.map((reaction) =>
-              reactionOnClick ? (
-                <Box mb="0.5em">
-                  <Button
-                    content={reaction[1]}
-                    onClick={() => reactionOnClick(reaction[0])}
-                  />
-                </Box>
-              ) : (reaction[1])
-            )
-            : 'No reactions detected'}
-        </LabeledList.Item>
-      )}
     </LabeledList>
   );
 };

From aa11037a7dc1e07c0c2fffec3b1490cc00460b2c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 4 May 2022 01:36:50 -0400
Subject: [PATCH 085/200] Rewrites vent pumps

---
 .../components/unary_devices/vent_pump.dm     | 72 ++++++++++---------
 1 file changed, 37 insertions(+), 35 deletions(-)

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 44f3aab9e51..726b57e9a99 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -5,6 +5,7 @@
 #define SIPHONING 0
 #define RELEASING 1
 
+#define DEFAULT_PRESSURE_DELTA 10000
 /obj/machinery/atmospherics/components/unary/vent_pump
 	icon_state = "vent_map-3"
 
@@ -41,6 +42,8 @@
 	var/radio_filter_out
 	///Radio connection from the air alarm
 	var/radio_filter_in
+	///Optimization
+	COOLDOWN_DECLARE(sleeping)
 
 /obj/machinery/atmospherics/components/unary/vent_pump/New()
 	if(!id_tag)
@@ -101,50 +104,49 @@
 		on = FALSE
 	if(!on || welded)
 		return
+	if(!COOLDOWN_FINISHED(src, sleeping))
+		return
 	var/turf/open/us = loc
 	if(!istype(us))
 		return
+
 	var/datum/gas_mixture/air_contents = airs[1]
 	var/datum/gas_mixture/environment = us.return_air()
-	var/environment_pressure = environment.returnPressure()
-
-	if(pump_direction & RELEASING) // internal -> external
-		var/pressure_delta = 10000
-
-		if(pressure_checks&EXT_BOUND)
-			pressure_delta = min(pressure_delta, (external_pressure_bound - environment_pressure))
-		if(pressure_checks&INT_BOUND)
-			pressure_delta = min(pressure_delta, (air_contents.returnPressure() - internal_pressure_bound))
-
-		if(pressure_delta > 0)
-			if(air_contents.temperature > 0)
-				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.get_moles())
-					return
-
-				loc.assume_air(removed)
-				update_parents()
-
-	else // external -> internal
-		var/pressure_delta = 10000
-		if(pressure_checks&EXT_BOUND)
-			pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound))
-		if(pressure_checks&INT_BOUND)
-			pressure_delta = min(pressure_delta, (internal_pressure_bound - air_contents.returnPressure()))
-
-		if(pressure_delta > 0 && environment.temperature > 0)
-			var/transfer_moles = (pressure_delta * air_contents.volume) / (environment.temperature * R_IDEAL_GAS_EQUATION)
+	var/pressure_delta = get_pressure_delta(environment)
+	if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5)
+		if(pump_direction & RELEASING) //internal -> external
+			var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta)
+			pump_gas(air_contents, environment, transfer_moles)
+			update_parents()
+		else //external -> internal
+			var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta)
 
-			var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
+			//limit flow rate from turfs
+			transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume)	//group_multiplier gets divided out here
+			pump_gas(environment, air_contents, transfer_moles)
+			update_parents()
 
-			if(!removed || !removed.get_moles()) //No venting from space 4head
-				return
+	else
+		if(pump_direction && (pressure_checks&EXT_BOUND))
+			COOLDOWN_START(src, sleeping, 15 SECONDS)
 
-			air_contents.merge(removed)
-			update_parents()
+/obj/machinery/atmospherics/components/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment)
+	var/pressure_delta = DEFAULT_PRESSURE_DELTA
+	var/environment_pressure = environment.returnPressure()
+	var/datum/gas_mixture/air_contents = airs[1]
 
+	if(pump_direction) //internal -> external
+		if(pressure_checks & EXT_BOUND)
+			pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here
+		if(pressure_checks & INT_BOUND)
+			pressure_delta = min(pressure_delta, air_contents.returnPressure() - internal_pressure_bound) //decreasing the pressure here
+	else //external -> internal
+		if(pressure_checks & EXT_BOUND)
+			pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here
+		if(pressure_checks & INT_BOUND)
+			pressure_delta = min(pressure_delta, internal_pressure_bound - air_contents.returnPressure()) //increasing the pressure here
+
+	return pressure_delta
 //Radio remote control
 
 /obj/machinery/atmospherics/components/unary/vent_pump/proc/set_frequency(new_frequency)

From 859b5905bc628b7526464d9249be6bd9cea71b6f Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 4 May 2022 15:17:29 -0400
Subject: [PATCH 086/200] Tweaks, mainly to airflow

---
 code/controllers/subsystem/zas.dm        |  2 +-
 code/modules/atmospherics/ZAS/Airflow.dm | 35 ++++--------------------
 code/modules/mob/camera/camera.dm        |  2 ++
 code/modules/projectiles/projectile.dm   |  2 ++
 4 files changed, 10 insertions(+), 31 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 1015394c253..5e7262ad25b 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -377,7 +377,7 @@ SUBSYSTEM_DEF(zas)
 //datum/controller/subsystem/zas/proc/connect(turf/simulated/A, turf/simulated/B) //ZASTURF
 /datum/controller/subsystem/zas/proc/connect(turf/A, turf/B)
 	#ifdef ZASDBG
-	ASSERT(!istype(A, /turf/open/space))
+	ASSERT(A.simulated)
 	ASSERT(isturf(B))
 	ASSERT(A.zone)
 	ASSERT(!A.zone.invalid)
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index b03121201bf..011f0b6b64b 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -9,10 +9,12 @@ Contains helper procs for airflow, handled in /connection_group.
 /mob/living/airflow_stun()
 	if(stat == 2)
 		return 0
-	if(last_airflow_stun > world.time - SSzas.settings.airflow_stun_cooldown)	return 0
+	if(last_airflow_stun > world.time - SSzas.settings.airflow_stun_cooldown)
+		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
+		return 0
 
 	if(!(status_flags & CANSTUN) && !(status_flags & CANKNOCKDOWN))
-		to_chat(src, "<span class='notice'>You stay upright as the air rushes past you.</span>")
+		to_chat(src, "<span class='notice'>Air suddenly rushes past you, but you manage to keep your footing!</span>")
 		return 0
 	if(buckled)
 		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
@@ -20,7 +22,7 @@ Contains helper procs for airflow, handled in /connection_group.
 	if(!body_position == LYING_DOWN)
 		to_chat(src, "<span class='warning'>The sudden rush of air knocks you over!</span>")
 
-	Knockdown(5)
+	Knockdown(SSzas.settings.airflow_stun SECONDS)
 	last_airflow_stun = world.time
 
 /mob/living/silicon/airflow_stun()
@@ -29,36 +31,9 @@ Contains helper procs for airflow, handled in /connection_group.
 /mob/living/carbon/slime/airflow_stun()
 	return
 
-/mob/living/carbon/human/airflow_stun()
-	if(!slip_chance())
-		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
-		return 0
-	..()
-
 /atom/movable/proc/experience_pressure_difference()
 	return
 
-/mob/proc/slip_chance()
-	return
-
-/mob/living/carbon/human/slip_chance(prob_slip = 50)
-	if(stat)
-		return FALSE
-	if(buckled)
-		return FALSE
-	if(shoes)
-		var/obj/item/clothing/myshoes = shoes
-		if(myshoes.clothing_flags & NOSLIP|NOSLIP_ICE)
-			return FALSE
-
-	if(m_intent == MOVE_INTENT_RUN) //No running in the halls!
-		prob_slip *= 2
-
-	if(HAS_TRAIT(src, TRAIT_NOSLIPALL))
-		return
-
-	return prob(prob_slip)
-
 /atom/movable/proc/check_airflow_movable(n)
 
 	if(anchored && !ismob(src)) return 0
diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm
index 70474c2753d..c68f68b2b2e 100644
--- a/code/modules/mob/camera/camera.dm
+++ b/code/modules/mob/camera/camera.dm
@@ -10,6 +10,7 @@
 	invisibility = INVISIBILITY_ABSTRACT // No one can see us
 	sight = SEE_SELF
 	move_on_shuttle = FALSE
+	simulated = FALSE
 
 /mob/camera/Initialize(mapload)
 	. = ..()
@@ -18,6 +19,7 @@
 /mob/camera/experience_pressure_difference()
 	return
 */
+
 /mob/camera/canUseStorage()
 	return FALSE
 
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index de6a269e464..4c033de1cd5 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -15,6 +15,8 @@
 	blocks_emissive = EMISSIVE_BLOCK_GENERIC
 	layer = MOB_LAYER
 	plane = GAME_PLANE_FOV_HIDDEN
+	simulated = FALSE
+
 	//The sound this plays on impact.
 	var/hitsound = 'sound/weapons/pierce.ogg'
 	var/hitsound_wall = ""

From e90923115e558506fe3fb1e2d066b420623c1d22 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 6 May 2022 23:59:21 -0400
Subject: [PATCH 087/200] Hibernation, filters, optimizations.

---
 code/controllers/subsystem/airmachines.dm     |  9 +++-
 code/datums/components/gas_leaker.dm          |  3 ++
 code/game/machinery/_machinery.dm             |  3 ++
 code/modules/atmospherics/ZAS/Temperature.dm  |  9 ++--
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  4 +-
 .../atmospherics/ZAS/atmos_primitives.dm      | 17 -------
 .../components/unary_devices/vent_pump.dm     | 13 +++---
 .../components/unary_devices/vent_scrubber.dm | 46 +++++++++++--------
 8 files changed, 53 insertions(+), 51 deletions(-)

diff --git a/code/controllers/subsystem/airmachines.dm b/code/controllers/subsystem/airmachines.dm
index 7973428b70e..af1a499ce78 100644
--- a/code/controllers/subsystem/airmachines.dm
+++ b/code/controllers/subsystem/airmachines.dm
@@ -13,6 +13,7 @@ SUBSYSTEM_DEF(airmachines)
 	var/list/rebuild_queue = list()
 	var/list/expansion_queue = list()
 	var/list/atmos_machinery = list()
+	var/sleeping_machines = 0
 
 	var/list/current_run = list()
 	var/list/current_process = SSAIRMACH_PIPENETS
@@ -21,6 +22,7 @@ SUBSYSTEM_DEF(airmachines)
 	var/cost_pipenets
 	var/cost_atmos_machinery
 
+
 /datum/controller/subsystem/airmachines/Initialize(timeofday)
 	var/starttime = REALTIMEOFDAY
 	to_chat(world, span_boldannounce("Airmachines: Setting up atmospheric machinery..."))
@@ -36,8 +38,9 @@ SUBSYSTEM_DEF(airmachines)
 	msg += "CR: [cost_rebuilds ? cost_rebuilds : 0]|"
 	msg += "CPN: [cost_pipenets]|"
 	msg += "CAM: [cost_atmos_machinery]|"
-	msg += "NN: [length(networks)]|"
+	msg += "NPN: [length(networks)]|"
 	msg += "NAM: [length(atmos_machinery)]|"
+	msg += "NSM: [sleeping_machines]|"
 	msg += "RQ: [length(rebuild_queue)]|"
 	msg += "EQ: [length(expansion_queue)]"
 	return ..()
@@ -136,11 +139,15 @@ SUBSYSTEM_DEF(airmachines)
 		src.current_run = atmos_machinery.Copy()
 	//cache for sanic speed (lists are references anyways)
 	var/list/current_run = src.current_run
+	sleeping_machines = 0
 	while(current_run.len)
 		var/obj/machinery/M = current_run[current_run.len]
 		current_run.len--
 		if(!M)
 			atmos_machinery -= M
+		if(!COOLDOWN_FINISHED(M, hibernating))
+			sleeping_machines++
+			continue
 		if(M.process_atmos() == PROCESS_KILL)
 			stop_processing_machine(M)
 		if(MC_TICK_CHECK)
diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm
index 29e676c3bcb..a7ca0b5e4e0 100644
--- a/code/datums/components/gas_leaker.dm
+++ b/code/datums/components/gas_leaker.dm
@@ -16,6 +16,9 @@
 	/// Mirror of the machine var signifying whether this is live in the air subsystem
 	var/atmos_processing = FALSE
 
+	///Mirror of the machine var, unused for gas_leaker specifically.
+	COOLDOWN_DECLARE(hibernating)
+
 /datum/component/gas_leaker/Initialize(integrity_leak_percent=0.9, leak_rate=1)
 	. = ..()
 	if(istype(parent, /obj/machinery/atmospherics/components))
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 3a5fd60e4dc..6f7f1b87333 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -144,6 +144,9 @@
 	/// Mobtype of last user. Typecast to [/mob/living] for initial() usage
 	var/mob/living/last_user_mobtype
 
+	///Used by SSairmachines for optimizing scrubbers and vent pumps.
+	COOLDOWN_DECLARE(hibernating)
+
 /obj/machinery/Initialize(mapload)
 	if(!armor)
 		armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 70)
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index f5c43e0aea0..a362dc5c88c 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -29,26 +29,23 @@
 	. = ..()
 	temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - FLOOR(mob_size/4, 1), MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient
 
-/atom/proc/process_atmos_exposure()
+/atom/proc/process_atmos_exposure(delta_time)
 	// Get our location temperature if possible.
 	// Nullspace is room temperature, clearly.
 	var/adjust_temp
 	var/datum/gas_mixture/local_air
 	if(loc)
-		if(!loc.simulated)
+		if(!isturf(loc))
 			adjust_temp = loc.temperature
 		else
-			//var/turf/simulated/T = loc
 			var/turf/T = get_turf(loc)
-			if(!istype(T))
-				return
 			if(T.zone && T.zone.air)
 				adjust_temp = T.zone.air.temperature
 				SEND_SIGNAL(T, COMSIG_TURF_EXPOSE, T.zone.air, T.zone.air.temperature)
 				atmos_expose(T.zone.air, T.zone.air.temperature)
 				local_air = T.zone.air
 			else
-				adjust_temp = T20C
+				adjust_temp = T.temperature
 	else
 		adjust_temp = T20C
 
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 586c665a329..13237f5fd7a 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -505,14 +505,14 @@
 	return temperature
 
 /datum/gas_mixture/proc/get_moles()
-	updateValues()
+	//updateValues()
 	return total_moles
 ////END LINDA COMPATABILITY////
 
 ///Returns the gas list with an update.
 /datum/gas_mixture/proc/getGases()
 	RETURN_TYPE(/list)
-	updateValues()
+	//updateValues()
 	return gas
 
 /datum/gas_mixture/proc/returnVisuals()
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index a854e90baba..d4106022c69 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -54,23 +54,6 @@
 	if (transfer_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing
 		return -1
 
-	/*
-	//Update flow rate meter
-	if (istype(M, /obj/machinery/atmospherics))
-		var/obj/machinery/atmospherics/A = M
-		A.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
-
-		if (A.debug)
-			A.visible_message("[A]: source entropy: [round(source.specificGroupEntropy(), 0.01)] J/Kmol --> sink entropy: [round(sink.specificGroupEntropy(), 0.01)] J/Kmol")
-			A.visible_message("[A]: specific entropy change = [round(sink.specificGroupEntropy() - source.specificGroupEntropy(), 0.01)] J/Kmol")
-			A.visible_message("[A]: specific power = [round(specific_power, 0.1)] W/mol")
-			A.visible_message("[A]: moles transferred = [transfer_moles] mol")
-
-	if (istype(M, /obj/machinery/portable_atmospherics))
-		var/obj/machinery/portable_atmospherics/P = M
-		P.last_flow_rate = (transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
-	*/
-
 	var/datum/gas_mixture/removed = source.remove(transfer_moles)
 	if (!removed) //Just in case
 		return -1
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 726b57e9a99..8cf8e756e5b 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -42,8 +42,6 @@
 	var/radio_filter_out
 	///Radio connection from the air alarm
 	var/radio_filter_in
-	///Optimization
-	COOLDOWN_DECLARE(sleeping)
 
 /obj/machinery/atmospherics/components/unary/vent_pump/New()
 	if(!id_tag)
@@ -104,8 +102,6 @@
 		on = FALSE
 	if(!on || welded)
 		return
-	if(!COOLDOWN_FINISHED(src, sleeping))
-		return
 	var/turf/open/us = loc
 	if(!istype(us))
 		return
@@ -116,19 +112,22 @@
 	if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5)
 		if(pump_direction & RELEASING) //internal -> external
 			var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta)
-			pump_gas(air_contents, environment, transfer_moles)
+			if(pump_gas(air_contents, environment, transfer_moles) == -1)
+				COOLDOWN_START(src, hibernating, 15 SECONDS)
 			update_parents()
+
 		else //external -> internal
 			var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta)
 
 			//limit flow rate from turfs
 			transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume)	//group_multiplier gets divided out here
-			pump_gas(environment, air_contents, transfer_moles)
+			if(pump_gas(environment, air_contents, transfer_moles) == -1)
+				COOLDOWN_START(src, hibernating, 15 SECONDS)
 			update_parents()
 
 	else
 		if(pump_direction && (pressure_checks&EXT_BOUND))
-			COOLDOWN_START(src, sleeping, 15 SECONDS)
+			COOLDOWN_START(src, hibernating, 15 SECONDS)
 
 /obj/machinery/atmospherics/components/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment)
 	var/pressure_delta = DEFAULT_PRESSURE_DELTA
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 7593168ceef..ed2b2fc3b6b 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -38,8 +38,6 @@
 	///Radio connection from the air alarm
 	var/radio_filter_in
 
-	COOLDOWN_DECLARE(check_turfs_cooldown)
-
 /obj/machinery/atmospherics/components/unary/vent_scrubber/New()
 	if(!id_tag)
 		id_tag = SSnetworks.assign_random_name()
@@ -70,16 +68,19 @@
 	if(!islist(filter_or_filters))
 		filter_or_filters = list(filter_or_filters)
 
-	var/turf/open/our_turf = get_turf(src)
+	for(var/gas_to_filter in filter_or_filters)
+		filter_types |= gas_to_filter
+
+	var/turf/our_turf = get_turf(src)
 
-	if(!isopenturf(our_turf))
+	if(!our_turf.simulated)
 		return FALSE
 
 	var/datum/gas_mixture/turf_gas = our_turf.air
 	if(!turf_gas)
 		return FALSE
 
-	COOLDOWN_RESET(src, check_turfs_cooldown)
+	COOLDOWN_RESET(src, hibernating)
 	return TRUE
 
 ///remove a gas or list of gases from our filter_types.used so that the scrubber can check if its supposed to be processing after each change
@@ -87,17 +88,19 @@
 	if(!islist(filter_or_filters))
 		filter_or_filters = list(filter_or_filters)
 
+	for(var/gas_to_filter in filter_or_filters)
+		filter_types -= gas_to_filter
 
-	var/turf/open/our_turf = get_turf(src)
+	var/turf/our_turf = get_turf(src)
 	var/datum/gas_mixture/turf_gas
 
-	if(isopenturf(our_turf))
-		turf_gas = our_turf.air
+	if(our_turf.simulated)
+		turf_gas = our_turf.return_air()
 
 	if(!turf_gas)
 		return FALSE
 
-	COOLDOWN_RESET(src, check_turfs_cooldown)
+	COOLDOWN_RESET(src, hibernating)
 	return TRUE
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/toggle_filters(filter_or_filters)
@@ -105,16 +108,21 @@
 		filter_or_filters = list(filter_or_filters)
 
 	for(var/gas_to_filter in filter_or_filters)
+		if(gas_to_filter in filter_types)
+			filter_types -= gas_to_filter
+		else
+			filter_types |= gas_to_filter
 
-	var/turf/open/our_turf = get_turf(src)
+	var/turf/our_turf = get_turf(src)
 
-	if(!isopenturf(our_turf))
+	if(!our_turf.simulated)
 		return FALSE
 
 	var/datum/gas_mixture/turf_gas = our_turf.return_air()
 
 	if(!turf_gas)
 		return FALSE
+	COOLDOWN_RESET(src, hibernating)
 	return TRUE
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/update_icon_nopipes()
@@ -197,24 +205,26 @@
 /obj/machinery/atmospherics/components/unary/vent_scrubber/process_atmos()
 	if(welded || !is_operational)
 		return
+//	if(!COOLDOWN_FINISHED(src, hibernating))
+//		return
 	if(!on || !nodes[1])
 		on = FALSE
 		return
-	if(!COOLDOWN_FINISHED(src, check_turfs_cooldown))
-		return
 	var/turf/open/us = loc
 	if(!istype(us))
 		return
+
 	var/should_cooldown = TRUE
 	if(scrub(us))
 		should_cooldown = FALSE
 	if(widenet)
 		check_turfs()
 		for(var/turf/tile in adjacent_turfs)
-			if(scrub(tile))
+			if(scrub(tile) && should_cooldown)
 				should_cooldown = FALSE
 	if(should_cooldown)
-		COOLDOWN_START(src, check_turfs_cooldown, 5 SECONDS)
+		COOLDOWN_START(src, hibernating, 15 SECONDS)
+
 	return TRUE
 
 ///filtered gases at or below this amount automatically get removed from the mix
@@ -245,8 +255,8 @@
 			//take this gases portion of removal_ratio of the turfs air, or all of that gas if less than or equal to MINIMUM_MOLES_TO_SCRUB
 			//var/transfer_moles = min(environment.total_moles, volume_rate/environment.volume)*environment.total_moles
 			var/transfer_moles = min(environment.total_moles, environment.total_moles*volume_rate/environment.volume)
-			scrub_gas(filter_types, environment, filtered_out, transfer_moles, INFINITY)
-
+			if(scrub_gas(filter_types, environment, filtered_out, transfer_moles, INFINITY) == -1)
+				. = FALSE
 
 			//Remix the resulting gases
 			air_contents.merge(filtered_out)
@@ -260,8 +270,8 @@
 
 		air_contents.merge(removed)
 		update_parents()
+		return TRUE
 
-	return TRUE
 
 #undef MINIMUM_MOLES_TO_SCRUB
 

From e7c113479509cc5659fd23118c275413b6ca5c36 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 10 May 2022 15:44:17 -0400
Subject: [PATCH 088/200] Disables ZASDBG and adds last process

---
 code/__DEFINES/atmospherics/ZAS.dm | 2 +-
 code/controllers/subsystem/zas.dm  | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 1715a22e750..cf679748770 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,4 +1,4 @@
-#define ZASDBG
+//#define ZASDBG
 //#define MULTIZAS
 
 #define AIR_ALLOWED 0
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 5e7262ad25b..a7d1973a472 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -102,6 +102,7 @@ SUBSYSTEM_DEF(zas)
 	var/tmp/list/processing_hotspots
 	var/tmp/list/processing_zones
 
+	var/last_process
 	var/active_zones = 0
 	var/next_id = 1
 
@@ -197,6 +198,7 @@ SUBSYSTEM_DEF(zas)
 	var/list/curr_hotspot = processing_hotspots
 	var/list/curr_zones = zones_to_update
 
+	last_process = "TILES"
 
 /////////TILES//////////
 	cached_cost = 0
@@ -240,6 +242,7 @@ SUBSYSTEM_DEF(zas)
 	cost_tiles = MC_AVERAGE(cost_tiles, TICK_DELTA_TO_MS(cached_cost))
 
 //////////DEFERRED TILES//////////
+	last_process = "DEFERRED TILES"
 	timer = TICK_USAGE_REAL
 	cached_cost = 0
 	while (curr_defer.len)
@@ -262,7 +265,7 @@ SUBSYSTEM_DEF(zas)
 	cost_deferred_tiles = MC_AVERAGE(cost_deferred_tiles, TICK_DELTA_TO_MS(cached_cost))
 
 //////////EDGES//////////
-
+	last_process = "EDGES"
 	timer = TICK_USAGE_REAL
 	cached_cost = 0
 	while (curr_edges.len)
@@ -287,6 +290,7 @@ SUBSYSTEM_DEF(zas)
 	cost_edges = MC_AVERAGE(cost_edges, TICK_DELTA_TO_MS(cached_cost))
 
 //////////FIRES//////////
+	last_process = "FIRES"
 	timer = TICK_USAGE_REAL
 	cached_cost = 0
 	while (curr_fire.len)
@@ -304,6 +308,7 @@ SUBSYSTEM_DEF(zas)
 	cost_fires= MC_AVERAGE(cost_fires, TICK_DELTA_TO_MS(cached_cost))
 
 //////////HOTSPOTS//////////
+	last_process = "HOTSPOTS"
 	timer = TICK_USAGE_REAL
 	cached_cost = 0
 	while (curr_hotspot.len)

From cd17c647a71ba8f74e875bb28f1e0c5205c6e8bf Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 14 May 2022 12:22:12 -0400
Subject: [PATCH 089/200] Unfucks varedits, optimizes updateValues() by making
 it a macro

---
 .../IceRuins/icemoon_surface_asteroid.dmm     |  10 +-
 ...cemoon_underground_abandoned_homestead.dmm |  81 ++-
 ..._underground_abandoned_plasma_facility.dmm | 105 ++-
 .../icemoon_underground_frozen_comms.dmm      |  66 +-
 .../IceRuins/icemoon_underground_lavaland.dmm |   8 +-
 .../IceRuins/icemoon_underground_library.dmm  | 144 +++--
 .../icemoon_underground_wendigo_cave.dmm      |   9 +-
 .../lavaland_surface_biodome_winter.dmm       |   6 +-
 .../LavaRuins/lavaland_surface_cultaltar.dmm  |  16 +-
 .../LavaRuins/lavaland_surface_hermit.dmm     |   2 +-
 .../LavaRuins/lavaland_surface_pizzaparty.dmm |  72 +--
 .../LavaRuins/lavaland_surface_ufo_crash.dmm  |  26 +-
 _maps/RandomRuins/SpaceRuins/TheDerelict.dmm  |  10 +-
 .../RandomRuins/SpaceRuins/caravanambush.dmm  |  22 +-
 .../RandomRuins/SpaceRuins/thelizardsgas.dmm  |  12 +-
 _maps/RandomRuins/SpaceRuins/vaporwave.dmm    |  12 +-
 _maps/RandomZLevels/caves.dmm                 | 609 ++++++++++++------
 _maps/RandomZLevels/moonoutpost19.dmm         | 338 +++++-----
 _maps/RandomZLevels/undergroundoutpost45.dmm  |  98 +--
 .../map_files/Deltastation/DeltaStation2.dmm  |   4 +-
 .../IcemoonUnderground_Above.dmm              |  36 +-
 _maps/map_files/MetaStation/MetaStation.dmm   |   6 +-
 _maps/map_files/generic/CentCom.dmm           |  64 +-
 .../maintenance_miningsolar_3.dmm             |   2 +-
 _maps/shuttles/ruin_caravan_victim.dmm        |  38 +-
 _maps/templates/battlecruiser_starfury.dmm    |   6 +-
 .../templates/heretic_sacrifice_template.dmm  | 118 ++--
 code/__DEFINES/atmospherics/ZAS.dm            |  17 +
 code/__DEFINES/subsystems.dm                  |   5 +-
 code/controllers/subsystem/airflow.dm         |   6 +-
 code/controllers/subsystem/zas.dm             |   9 +-
 .../effects/effect_system/effects_foam.dm     |   2 +-
 .../effects/effect_system/effects_water.dm    |   1 -
 code/game/turfs/open/ashplanet.dm             |   1 -
 code/game/turfs/open/floor/glass.dm           |   2 +-
 code/modules/admin/verbs/fix_air.dm           |   2 +-
 code/modules/atmospherics/ZAS/Airflow.dm      |  51 +-
 .../atmospherics/ZAS/ConnectionGroup.dm       |  12 +-
 code/modules/atmospherics/ZAS/Diagnostic.dm   |   2 +-
 code/modules/atmospherics/ZAS/Fire.dm         |  26 +-
 code/modules/atmospherics/ZAS/Plasma.dm       |  20 +-
 code/modules/atmospherics/ZAS/Turf.dm         |   7 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm    |   4 +-
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  62 +-
 code/modules/atmospherics/ZAS/Zone.dm         |   2 +-
 .../atmospherics/ZAS/atmos_primitives.dm      |  10 +-
 code/modules/mob/living/carbon/life.dm        |   2 +-
 .../mob/living/simple_animal/simple_animal.dm |   1 +
 code/modules/surgery/organs/lungs.dm          |   3 +-
 49 files changed, 1254 insertions(+), 913 deletions(-)

diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
index 26856fe193f..341180c0013 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm
@@ -12,7 +12,7 @@
 /obj/item/clothing/shoes/bronze,
 /obj/item/clothing/head/bronze,
 /turf/open/floor/bronze{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/icemoon/surface)
 "m" = (
@@ -20,12 +20,12 @@
 	name = "empowered bronze spear"
 	},
 /turf/open/floor/bronze{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/icemoon/surface)
 "o" = (
 /turf/open/floor/bronze{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/icemoon/surface)
 "A" = (
@@ -66,7 +66,7 @@
 "L" = (
 /mob/living/simple_animal/hostile/megafauna/clockwork_defender,
 /turf/open/floor/bronze{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/icemoon/surface)
 "M" = (
@@ -95,7 +95,7 @@
 	},
 /obj/item/pen,
 /turf/open/floor/bronze{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/icemoon/surface)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm
index 9fc33f694ed..bc85e22296c 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm
@@ -6,7 +6,8 @@
 "cP" = (
 /mob/living/simple_animal/hostile/asteroid/polarbear,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "dy" = (
@@ -27,7 +28,8 @@
 	},
 /obj/item/plate,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "ht" = (
@@ -38,7 +40,8 @@
 /obj/structure/barricade/wooden/crude/snow,
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "kj" = (
@@ -58,7 +61,8 @@
 /area/icemoon/underground/explored)
 "ng" = (
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "nq" = (
@@ -78,7 +82,8 @@
 	dir = 8
 	},
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "qd" = (
@@ -103,14 +108,16 @@
 	pixel_y = 11
 	},
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "uA" = (
 /obj/structure/barricade/wooden/snowed,
 /turf/open/floor/wood{
 	icon_state = "wood-broken6";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "uG" = (
@@ -128,7 +135,8 @@
 /obj/item/ammo_casing/shotgun/buckshot,
 /obj/item/ammo_casing/shotgun/buckshot,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "vk" = (
@@ -153,7 +161,8 @@
 	pixel_y = 3
 	},
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "wl" = (
@@ -163,7 +172,8 @@
 /obj/effect/turf_decal/siding/wood,
 /obj/structure/mineral_door/wood,
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "wN" = (
@@ -174,7 +184,8 @@
 	dir = 4
 	},
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "yO" = (
@@ -190,13 +201,15 @@
 "zT" = (
 /obj/structure/bed/dogbed,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Cv" = (
 /obj/structure/bookcase/random/religion,
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Ea" = (
@@ -212,7 +225,8 @@
 	pixel_y = 5
 	},
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "El" = (
@@ -221,7 +235,8 @@
 	},
 /obj/item/flashlight/lantern,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Ez" = (
@@ -249,14 +264,16 @@
 	dir = 8
 	},
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Hy" = (
 /obj/structure/barricade/wooden/crude/snow,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "HF" = (
@@ -268,7 +285,8 @@
 	pixel_y = -8
 	},
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Iz" = (
@@ -280,7 +298,8 @@
 	pixel_y = -7
 	},
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Mf" = (
@@ -294,7 +313,8 @@
 /obj/structure/bed,
 /obj/item/bedsheet/patriot,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "NP" = (
@@ -312,12 +332,14 @@
 /obj/item/seeds/coffee,
 /obj/item/seeds/coffee,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "QI" = (
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Rf" = (
@@ -336,7 +358,8 @@
 /obj/structure/mineral_door/wood,
 /obj/item/assembly/mousetrap/armed,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Sv" = (
@@ -365,14 +388,16 @@
 /obj/structure/barricade/wooden/snowed,
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Vf" = (
 /obj/structure/barricade/wooden/snowed,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "VV" = (
@@ -384,7 +409,8 @@
 	dir = 8
 	},
 /turf/open/floor/stone{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Zg" = (
@@ -394,7 +420,8 @@
 	},
 /obj/structure/mineral_door/wood,
 /turf/open/floor/wood/large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
index 3d95d429115..bf28ba25c77 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
@@ -307,7 +307,8 @@
 /obj/item/storage/toolbox/electrical,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "dY" = (
@@ -450,7 +451,8 @@
 	dir = 8
 	},
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "gD" = (
@@ -501,7 +503,8 @@
 /obj/item/pickaxe,
 /obj/item/clothing/head/hardhat/weldhat/orange,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "hd" = (
@@ -509,7 +512,8 @@
 /obj/structure/closet/crate,
 /obj/item/stack/sheet/mineral/plasma/five,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "hr" = (
@@ -651,7 +655,8 @@
 	},
 /obj/structure/plasticflaps,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "ja" = (
@@ -679,7 +684,8 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/light/broken/directional/west,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "jN" = (
@@ -719,7 +725,8 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "ku" = (
@@ -801,7 +808,8 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/turf_decal/caution,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "lG" = (
@@ -851,7 +859,8 @@
 /obj/item/flashlight/lantern,
 /obj/machinery/light/small/built/directional/west,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "ms" = (
@@ -876,7 +885,8 @@
 "mA" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "mG" = (
@@ -969,7 +979,8 @@
 	name = "Interior Access"
 	},
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "oc" = (
@@ -1005,7 +1016,8 @@
 	dir = 8
 	},
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "oE" = (
@@ -1141,7 +1153,8 @@
 /obj/machinery/atmospherics/components/tank/plasma,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "qP" = (
@@ -1226,7 +1239,8 @@
 	},
 /obj/item/stack/sheet/mineral/plasma/thirty,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "sq" = (
@@ -1376,7 +1390,8 @@
 	},
 /mob/living/simple_animal/hostile/asteroid/wolf,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "uq" = (
@@ -1414,7 +1429,8 @@
 /obj/item/tank/internals/emergency_oxygen/empty,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "ve" = (
@@ -1447,7 +1463,8 @@
 	},
 /obj/effect/mapping_helpers/airlock/abandoned,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "wc" = (
@@ -1469,7 +1486,8 @@
 /obj/machinery/atmospherics/components/tank/air,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "wu" = (
@@ -1615,7 +1633,8 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/power/apc/auto_name/directional/west,
 /turf/open/floor/iron/smooth_large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "Ae" = (
@@ -1698,7 +1717,8 @@
 	dir = 8
 	},
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "BJ" = (
@@ -1781,14 +1801,16 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "CJ" = (
 /obj/effect/turf_decal/delivery,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "CU" = (
@@ -2034,7 +2056,8 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "Id" = (
@@ -2101,7 +2124,8 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/light/small/built/directional/west,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "Jp" = (
@@ -2138,7 +2162,8 @@
 /mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer,
 /obj/machinery/light_switch/directional/north,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "Jy" = (
@@ -2360,7 +2385,8 @@
 /obj/machinery/power/smes/engineering,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "MU" = (
@@ -2442,7 +2468,8 @@
 /obj/machinery/light/small/directional/north,
 /obj/machinery/light_switch/directional/north,
 /turf/open/floor/iron/smooth_large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "Ny" = (
@@ -2516,7 +2543,8 @@
 "OF" = (
 /obj/effect/decal/cleanable/glass,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "OJ" = (
@@ -2526,7 +2554,8 @@
 	},
 /obj/machinery/light_switch/directional/north,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "OM" = (
@@ -2564,7 +2593,8 @@
 	dir = 1
 	},
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180
 	},
 /area/ruin/plasma_facility/operations)
 "Px" = (
@@ -2648,7 +2678,8 @@
 /obj/machinery/door/airlock/external/glass/ruin,
 /obj/effect/mapping_helpers/airlock/abandoned,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "Qn" = (
@@ -2696,7 +2727,8 @@
 /obj/structure/rack,
 /obj/effect/turf_decal/bot_white,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "Rf" = (
@@ -2970,7 +3002,8 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_half{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "Xj" = (
@@ -2984,7 +3017,8 @@
 /obj/structure/cable,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/smooth_large{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/operations)
 "XC" = (
@@ -2992,7 +3026,8 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/machinery/light/small/broken/directional/west,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/plasma_facility/commons)
 "XI" = (
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm
index e23841cab79..fe80e769202 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm
@@ -19,7 +19,8 @@
 /obj/structure/table/reinforced/rglass,
 /obj/item/radio/intercom,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "cO" = (
@@ -40,7 +41,8 @@
 	},
 /obj/machinery/door/airlock/external/glass/ruin,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "gz" = (
@@ -57,7 +59,8 @@
 /area/icemoon/underground/unexplored/rivers)
 "kr" = (
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "oj" = (
@@ -65,18 +68,21 @@
 /obj/structure/bed,
 /obj/item/bedsheet/dorms,
 /turf/open/floor/iron/grimy{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "oD" = (
 /mob/living/simple_animal/hostile/asteroid/wolf,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "oT" = (
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "qS" = (
@@ -89,13 +95,15 @@
 	pixel_y = 7
 	},
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "rm" = (
 /obj/structure/table/reinforced/rglass,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "rn" = (
@@ -110,7 +118,8 @@
 "st" = (
 /obj/machinery/door/airlock/public,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "sM" = (
@@ -132,13 +141,15 @@
 "uz" = (
 /obj/structure/tank_dispenser,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "vh" = (
 /obj/item/chair/plastic,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "wg" = (
@@ -152,7 +163,8 @@
 	pixel_y = 20
 	},
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "wP" = (
@@ -166,7 +178,8 @@
 /obj/structure/closet/wardrobe/grey,
 /obj/item/clothing/gloves/color/plasmaman,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "yW" = (
@@ -185,7 +198,8 @@
 /obj/item/clothing/head/helmet/space/plasmaman,
 /obj/item/clothing/mask/breath,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "zk" = (
@@ -220,7 +234,8 @@
 /obj/item/toy/crayon/spraycan,
 /obj/machinery/light/small/directional/north,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Cu" = (
@@ -265,7 +280,8 @@
 /obj/structure/dresser,
 /obj/machinery/light/small/broken/directional/west,
 /turf/open/floor/iron/grimy{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "GH" = (
@@ -286,7 +302,8 @@
 /obj/structure/closet/wardrobe/grey,
 /obj/effect/spawner/random/maintenance/three,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Jh" = (
@@ -330,13 +347,15 @@
 /obj/effect/turf_decal/siding/wood,
 /obj/machinery/door/airlock/shuttle,
 /turf/open/floor/iron/grimy{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "NO" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/grimy{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Oi" = (
@@ -379,7 +398,8 @@
 /obj/effect/turf_decal/stripes/line,
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/iron/smooth{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "SR" = (
@@ -412,14 +432,16 @@
 	},
 /obj/machinery/light/small/directional/south,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Ws" = (
 /obj/structure/closet/wardrobe/grey,
 /obj/item/clothing/under/plasmaman,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/powered/shuttle)
 "Zd" = (
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
index 7746d05bf10..97192b89955 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm
@@ -12,7 +12,7 @@
 	},
 /obj/item/pen,
 /turf/open/misc/asteroid{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/icemoon/underground)
 "q" = (
@@ -34,7 +34,7 @@
 "A" = (
 /obj/effect/mob_spawn/corpse/human/skeleton,
 /turf/open/misc/asteroid{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/icemoon/underground)
 "E" = (
@@ -56,12 +56,12 @@
 "V" = (
 /obj/item/storage/toolbox/mechanical/old/clean,
 /turf/open/misc/asteroid{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/icemoon/underground)
 "Z" = (
 /turf/open/misc/asteroid{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/icemoon/underground)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm
index dd90c127cbd..61147284c5e 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm
@@ -16,25 +16,29 @@
 /area/icemoon/underground/unexplored)
 "ae" = (
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "af" = (
 /obj/item/stack/sheet/mineral/wood,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "ag" = (
 /obj/item/feather,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "ah" = (
 /obj/structure/bookcase/random,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "ai" = (
@@ -64,21 +68,24 @@
 "ao" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "ap" = (
 /obj/item/stack/sheet/mineral/wood,
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aq" = (
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "ar" = (
@@ -87,7 +94,8 @@
 "at" = (
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "au" = (
@@ -108,7 +116,8 @@
 "az" = (
 /obj/item/paper/crumpled/fluff/stations/lavaland/library/diary,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aA" = (
@@ -118,7 +127,8 @@
 "aB" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken6";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aC" = (
@@ -127,28 +137,32 @@
 /area/ruin/unpowered/buried_library)
 "aD" = (
 /turf/open/floor/carpet/black{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aE" = (
 /obj/item/stack/sheet/mineral/wood,
 /obj/item/book/manual/random,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aG" = (
 /obj/structure/table/bronze,
 /obj/item/stack/ore/slag,
 /turf/open/floor/carpet/black{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aH" = (
 /obj/structure/table/bronze,
 /obj/item/statuebust/hippocratic,
 /turf/open/floor/carpet/black{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aI" = (
@@ -169,7 +183,8 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aM" = (
@@ -180,13 +195,15 @@
 "aN" = (
 /obj/structure/statue/sandstone/venus,
 /turf/open/floor/carpet/black{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aO" = (
 /mob/living/simple_animal/pet/fox,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aP" = (
@@ -197,13 +214,15 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aR" = (
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aS" = (
@@ -219,7 +238,8 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aU" = (
@@ -230,7 +250,8 @@
 /obj/item/stack/sheet/mineral/wood,
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "aW" = (
@@ -250,7 +271,8 @@
 /obj/structure/fluff/paper/stack,
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "ba" = (
@@ -268,7 +290,8 @@
 	dir = 1
 	},
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bd" = (
@@ -278,7 +301,8 @@
 	},
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "be" = (
@@ -286,7 +310,8 @@
 	dir = 5
 	},
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bf" = (
@@ -295,7 +320,8 @@
 	dir = 4
 	},
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bg" = (
@@ -306,7 +332,8 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /mob/living/simple_animal/pet/fox,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bi" = (
@@ -321,7 +348,8 @@
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/wood{
 	icon_state = "wood-broken4";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bl" = (
@@ -345,7 +373,8 @@
 /obj/structure/mineral_door/wood,
 /obj/structure/barricade/wooden/crude/snow,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "br" = (
@@ -368,26 +397,30 @@
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken4";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bw" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bx" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "by" = (
 /obj/structure/statue/bronze/marx,
 /turf/open/floor/carpet/black{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bz" = (
@@ -403,7 +436,8 @@
 "bB" = (
 /obj/structure/fluff/paper/stack,
 /turf/open/floor/carpet/black{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bC" = (
@@ -413,34 +447,39 @@
 	},
 /mob/living/simple_animal/pet/fox,
 /turf/open/floor/wood{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bD" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bE" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bF" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bG" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken6";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bH" = (
@@ -448,28 +487,32 @@
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
 	icon_state = "wood-broken4";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bI" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bJ" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/floor/wood{
 	icon_state = "wood-broken2";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bK" = (
 /obj/item/stack/sheet/mineral/wood,
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bL" = (
@@ -478,7 +521,8 @@
 	},
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bM" = (
@@ -487,7 +531,8 @@
 	},
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bN" = (
@@ -495,20 +540,23 @@
 /obj/structure/fluff/paper,
 /turf/open/floor/wood{
 	icon_state = "wood-broken5";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bP" = (
 /obj/item/paper/crumpled/bloody/fluff/stations/lavaland/library/warning,
 /turf/open/floor/wood{
 	icon_state = "wood-broken3";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 "bQ" = (
 /turf/open/floor/wood{
 	icon_state = "wood-broken7";
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/ruin/unpowered/buried_library)
 
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
index e58ad558b34..51113917779 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
@@ -15,7 +15,8 @@
 "q" = (
 /mob/living/simple_animal/hostile/megafauna/wendigo,
 /turf/open/indestructible/necropolis{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "z" = (
@@ -23,7 +24,8 @@
 	id = "wendigo arena"
 	},
 /turf/open/indestructible/necropolis{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "K" = (
@@ -34,7 +36,8 @@
 /area/icemoon/underground/unexplored)
 "N" = (
 /turf/open/indestructible/necropolis{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "U" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
index cd6d52fab41..df10ceff550 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
@@ -204,7 +204,7 @@
 	dir = 1
 	},
 /turf/open/floor/wood{
-	initial_gas = "o2=22;n2=82;TEMP=180";
+	temperature = 180;
 	name = "bridge"
 	},
 /area/ruin/powered/snow_biodome)
@@ -276,7 +276,7 @@
 /obj/machinery/light/built/directional/north,
 /obj/effect/mapping_helpers/no_lava,
 /turf/open/floor/pod/dark{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/powered/snow_biodome)
 "og" = (
@@ -423,7 +423,7 @@
 "PM" = (
 /obj/effect/turf_decal/siding/wood,
 /turf/open/floor/wood{
-	initial_gas = "o2=22;n2=82;TEMP=180";
+	temperature = 180;
 	name = "bridge"
 	},
 /area/ruin/powered/snow_biodome)
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
index 553b09f55fc..24698a1bcc8 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
@@ -4,7 +4,7 @@
 /area/template_noop)
 "b" = (
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "c" = (
@@ -24,21 +24,21 @@
 "g" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "i" = (
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "k" = (
 /obj/effect/decal/remains/human,
 /obj/item/melee/cultblade,
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "l" = (
@@ -46,13 +46,13 @@
 /obj/item/clothing/shoes/cult,
 /obj/item/clothing/suit/hooded/cultrobes,
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "m" = (
 /obj/effect/decal/remains/human,
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "o" = (
@@ -74,7 +74,7 @@
 	name = "ohfuck"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "q" = (
@@ -83,7 +83,7 @@
 /obj/item/clothing/suit/hooded/cultrobes,
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered/cultaltar)
 "s" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
index 5ec32d26957..c97be0bfd36 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
@@ -164,7 +164,7 @@
 "J" = (
 /obj/effect/spawner/structure/window/reinforced/shuttle,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/powered)
 "L" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
index 1bb066f4c07..b2210954e53 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
@@ -15,14 +15,14 @@
 "e" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "f" = (
 /obj/structure/table/wood,
 /obj/item/storage/box/cups,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "g" = (
@@ -32,27 +32,27 @@
 	},
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "h" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "i" = (
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "j" = (
 /obj/item/food/pizzaslice/mushroom,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "k" = (
@@ -60,7 +60,7 @@
 /obj/effect/spawner/random/food_or_drink/pizzaparty,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "l" = (
@@ -70,42 +70,42 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/cobweb/cobweb2,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "m" = (
 /obj/item/chair/wood/wings,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "n" = (
 /obj/structure/glowshroom/single,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "o" = (
 /obj/item/plate,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "p" = (
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "q" = (
 /obj/item/chair/wood/wings,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "r" = (
@@ -116,25 +116,25 @@
 	name = "party hat"
 	},
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "s" = (
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "t" = (
 /obj/structure/chair/wood/wings,
 /obj/effect/decal/remains/human,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "u" = (
 /obj/structure/glowshroom/single,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "v" = (
@@ -146,21 +146,21 @@
 /obj/item/kitchen/fork,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "x" = (
 /obj/structure/table/wood,
 /obj/effect/spawner/random/food_or_drink/pizzaparty,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "y" = (
 /obj/structure/table/wood,
 /obj/item/plate,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "z" = (
@@ -168,7 +168,7 @@
 /obj/structure/glowshroom/single,
 /obj/item/a_gift,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "A" = (
@@ -176,7 +176,7 @@
 /obj/item/plate,
 /obj/item/kitchen/fork,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "C" = (
@@ -185,7 +185,7 @@
 	},
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "D" = (
@@ -193,47 +193,47 @@
 /obj/item/food/pizzaslice/margherita,
 /obj/item/plate,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "E" = (
 /obj/structure/table/wood,
 /obj/item/food/pizzaslice/meat,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "F" = (
 /obj/structure/table/wood,
 /obj/item/food/cake/birthday,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "G" = (
 /obj/structure/table/wood,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "H" = (
 /obj/item/chair/wood/wings,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "I" = (
 /obj/item/kitchen/fork,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "J" = (
 /obj/structure/glowshroom/single,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "K" = (
@@ -243,21 +243,21 @@
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "L" = (
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "M" = (
 /obj/effect/decal/cleanable/dirt,
 /obj/item/a_gift,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "N" = (
@@ -269,19 +269,19 @@
 /obj/item/knife/kitchen,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "P" = (
 /obj/machinery/light/directional/east,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "Q" = (
 /turf/open/floor/plating{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
index e06a4ff91d2..b19e02fa0b7 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
@@ -16,12 +16,12 @@
 	team_number = 100
 	},
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "k" = (
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "l" = (
@@ -29,59 +29,59 @@
 	team_number = 100
 	},
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "o" = (
 /obj/item/hemostat/alien,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "p" = (
 /obj/effect/mob_spawn/corpse/human/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "q" = (
 /obj/structure/closet/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "s" = (
 /obj/structure/table/optable/abductor,
 /obj/item/cautery/alien,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "t" = (
 /obj/structure/table/abductor,
 /obj/item/storage/box/alienhandcuffs,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "v" = (
 /obj/item/scalpel/alien,
 /obj/item/surgical_drapes,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "w" = (
 /obj/item/retractor/alien,
 /obj/item/paper/guides/antag/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "y" = (
 /obj/machinery/abductor/gland_dispenser,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "z" = (
@@ -89,13 +89,13 @@
 /obj/item/surgicaldrill/alien,
 /obj/item/circular_saw/alien,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 "A" = (
 /obj/structure/bed/abductor,
 /turf/open/floor/plating/abductor{
-	initial_gas = "LAVALAND_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30)
 	},
 /area/ruin/unpowered)
 
diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
index 641d1197db0..a304d11c8df 100644
--- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
+++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
@@ -2240,7 +2240,7 @@
 "lw" = (
 /obj/machinery/portable_atmospherics/canister/air,
 /turf/open/floor/engine/air{
-	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = list("oxygen" = 20000, "nitrogen" = 80000)
 	},
 /area/ruin/space/derelict/atmospherics)
 "lx" = (
@@ -2309,7 +2309,7 @@
 	chamber_id = "ks13"
 	},
 /turf/open/floor/engine/air{
-	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = list("oxygen" = 20000, "nitrogen" = 80000)
 	},
 /area/ruin/space/derelict/atmospherics)
 "lO" = (
@@ -2317,7 +2317,7 @@
 	chamber_id = "ks13"
 	},
 /turf/open/floor/engine/air{
-	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = list("oxygen" = 20000, "nitrogen" = 80000)
 	},
 /area/ruin/space/derelict/atmospherics)
 "lP" = (
@@ -2429,7 +2429,7 @@
 "mq" = (
 /turf/open/floor/iron{
 	icon_state = "damaged2";
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/ruin/space/derelict/atmospherics)
 "mr" = (
@@ -2923,7 +2923,7 @@
 	chamber_id = "ks13"
 	},
 /turf/open/floor/engine/air{
-	initial_gas = "o2=20000;n2=80000;TEMP=293.15"
+	initial_gas = list("oxygen" = 20000, "nitrogen" = 80000)
 	},
 /area/ruin/space/derelict/atmospherics)
 "rc" = (
diff --git a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
index 269f8102e67..3d53d7b92e4 100644
--- a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
+++ b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
@@ -112,7 +112,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "aD" = (
@@ -132,7 +132,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "aI" = (
@@ -148,14 +148,14 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "aM" = (
 /obj/effect/decal/cleanable/blood,
 /obj/effect/turf_decal/tile/blue,
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "aN" = (
@@ -193,7 +193,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "aR" = (
@@ -486,7 +486,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "gY" = (
@@ -513,7 +513,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "hm" = (
@@ -610,7 +610,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "hB" = (
@@ -813,7 +813,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter2)
 "ix" = (
@@ -883,7 +883,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter3)
 "iT" = (
@@ -923,7 +923,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter2)
 "ja" = (
diff --git a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm
index 38d60e8b95c..737f6c386d0 100644
--- a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm
+++ b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm
@@ -118,7 +118,7 @@
 	chamber_id = "lizardgas"
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas = "plasma=35000;TEMP=293.15"
+	initial_gas = list("plasma" = 35000)
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "mN" = (
@@ -295,7 +295,7 @@
 /area/template_noop)
 "DG" = (
 /turf/open/floor/engine/plasma{
-	initial_gas = "plasma=35000;TEMP=293.15"
+	initial_gas = list("plasma" = 35000)
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Es" = (
@@ -423,7 +423,7 @@
 "OQ" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/floor/engine/plasma{
-	initial_gas = "plasma=35000;TEMP=293.15"
+	initial_gas = list("plasma" = 35000)
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Pb" = (
@@ -457,7 +457,7 @@
 	name = "Zingo"
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas = "plasma=35000;TEMP=293.15"
+	initial_gas = list("plasma" = 35000)
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "RB" = (
@@ -499,7 +499,7 @@
 	dir = 4
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas = "plasma=35000;TEMP=293.15"
+	initial_gas = list("plasma" = 35000)
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Um" = (
@@ -549,7 +549,7 @@
 	chamber_id = "lizardgas"
 	},
 /turf/open/floor/engine/plasma{
-	initial_gas = "plasma=35000;TEMP=293.15"
+	initial_gas = list("plasma" = 35000)
 	},
 /area/ruin/space/has_grav/thelizardsgas)
 "Ys" = (
diff --git a/_maps/RandomRuins/SpaceRuins/vaporwave.dmm b/_maps/RandomRuins/SpaceRuins/vaporwave.dmm
index f20af636567..143cab36278 100644
--- a/_maps/RandomRuins/SpaceRuins/vaporwave.dmm
+++ b/_maps/RandomRuins/SpaceRuins/vaporwave.dmm
@@ -118,13 +118,13 @@
 /obj/effect/turf_decal/sand,
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/ruin/unpowered/no_grav)
 "B" = (
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/ruin/unpowered/no_grav)
 "C" = (
@@ -135,7 +135,7 @@
 	},
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/ruin/unpowered/no_grav)
 "D" = (
@@ -155,14 +155,14 @@
 	},
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/ruin/unpowered/no_grav)
 "G" = (
 /obj/effect/turf_decal/stripes/asteroid/line,
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/ruin/unpowered/no_grav)
 "H" = (
@@ -216,7 +216,7 @@
 /obj/machinery/light/small/directional/north,
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/ruin/unpowered/no_grav)
 
diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm
index c192680e2b0..9c71e541102 100644
--- a/_maps/RandomZLevels/caves.dmm
+++ b/_maps/RandomZLevels/caves.dmm
@@ -11,14 +11,16 @@
 "ad" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ah" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
@@ -27,25 +29,29 @@
 /area/awaymission/caves/bmp_asteroid/level_three)
 "ao" = (
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ap" = (
 /obj/structure/destructible/cult/pylon,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ar" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "as" = (
 /obj/effect/decal/cleanable/blood/gibs/old,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "au" = (
@@ -58,7 +64,8 @@
 /obj/item/clothing/mask/gas/clown_hat,
 /obj/item/organ/heart/demon,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "av" = (
@@ -67,13 +74,15 @@
 	name = "shock rune"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aw" = (
 /obj/effect/decal/remains/human,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ax" = (
@@ -87,39 +96,45 @@
 	},
 /obj/item/coin/antagtoken,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "az" = (
 /obj/structure/constructshell,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aA" = (
 /obj/structure/girder/cult,
 /obj/item/stack/sheet/runed_metal,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aB" = (
 /obj/structure/spawner/skeleton,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aC" = (
 /obj/structure/bed,
 /obj/item/bedsheet/cult,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aD" = (
 /obj/item/stack/sheet/runed_metal,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aE" = (
@@ -132,7 +147,8 @@
 	name = "\proper an extremely flamboyant book"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aF" = (
@@ -143,13 +159,15 @@
 	name = "weak forcefield"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aG" = (
 /obj/item/ectoplasm,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aH" = (
@@ -158,7 +176,8 @@
 "aI" = (
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aJ" = (
@@ -166,7 +185,8 @@
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aK" = (
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aM" = (
@@ -175,7 +195,8 @@
 	id = "minedeep"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aP" = (
@@ -185,33 +206,38 @@
 	name = "rusty ladder"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aR" = (
 /obj/effect/forcefield/cult,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aS" = (
 /obj/structure/girder/cult,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aV" = (
 /obj/effect/forcefield/cult,
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "aW" = (
 /obj/structure/barricade/wooden,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aX" = (
@@ -225,7 +251,8 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "aZ" = (
@@ -234,26 +261,30 @@
 	name = "flame rune"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "ba" = (
 /obj/structure/destructible/cult/item_dispenser/altar,
 /obj/item/book/granter/martial/plasma_fist/nobomb,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bf" = (
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bl" = (
 /obj/structure/ore_box,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "bm" = (
@@ -261,7 +292,8 @@
 	calibrated = 0
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bn" = (
@@ -272,14 +304,16 @@
 /obj/effect/decal/cleanable/blood,
 /obj/structure/spawner/skeleton,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bz" = (
 /obj/effect/decal/remains/human,
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bA" = (
@@ -287,25 +321,29 @@
 /obj/item/necromantic_stone,
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bC" = (
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "bD" = (
 /mob/living/simple_animal/hostile/skeleton,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "bE" = (
 /obj/structure/destructible/cult/pylon,
 /obj/effect/decal/cleanable/blood,
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "bF" = (
@@ -315,7 +353,8 @@
 	name = "rusty ladder"
 	},
 /turf/open/floor/engine/cult{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "bK" = (
@@ -327,7 +366,8 @@
 "bM" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid)
@@ -337,7 +377,8 @@
 "bO" = (
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
@@ -350,12 +391,14 @@
 "bS" = (
 /obj/structure/barricade/wooden,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "bT" = (
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "bU" = (
@@ -369,19 +412,22 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "bY" = (
 /mob/living/simple_animal/hostile/skeleton,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "ca" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "ce" = (
@@ -390,12 +436,14 @@
 	id = "mineintro"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cf" = (
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cg" = (
@@ -407,7 +455,8 @@
 "cl" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cm" = (
@@ -415,24 +464,28 @@
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cn" = (
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cp" = (
 /obj/structure/table,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cr" = (
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cs" = (
 /obj/item/shard,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "ct" = (
@@ -440,36 +493,42 @@
 /obj/item/stack/rods,
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cu" = (
 /obj/effect/decal/cleanable/blood/gibs,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cv" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cw" = (
 /obj/item/stack/rods,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cx" = (
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "cA" = (
 /obj/effect/decal/remains/xeno,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cB" = (
@@ -478,7 +537,8 @@
 	},
 /obj/effect/decal/cleanable/xenoblood,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cC" = (
@@ -486,13 +546,15 @@
 /obj/item/restraints/handcuffs/cable,
 /obj/item/restraints/handcuffs/cable,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cD" = (
 /obj/effect/decal/remains/human,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cE" = (
@@ -502,19 +564,22 @@
 	},
 /obj/item/stack/rods,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cF" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cH" = (
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "cK" = (
@@ -528,7 +593,8 @@
 /obj/machinery/door/window/left/directional/east,
 /obj/effect/decal/cleanable/xenoblood/xgibs,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cO" = (
@@ -537,19 +603,22 @@
 	},
 /obj/machinery/door/window/left/directional/east,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cP" = (
 /obj/machinery/door/airlock/external/ruin,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cR" = (
 /obj/effect/landmark/awaystart,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cS" = (
@@ -559,7 +628,8 @@
 	icon_state = "right"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cT" = (
@@ -570,13 +640,15 @@
 	icon_state = "right"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cV" = (
 /obj/effect/decal/cleanable/xenoblood/xgibs,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cW" = (
@@ -584,20 +656,23 @@
 	dir = 4
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cX" = (
 /obj/structure/table,
 /obj/item/melee/baton/security,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cY" = (
 /obj/structure/glowshroom/single,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "cZ" = (
@@ -606,7 +681,8 @@
 	pixel_x = 32
 	},
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "db" = (
@@ -614,13 +690,15 @@
 /obj/machinery/cell_charger,
 /obj/item/stock_parts/cell/crap,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "dd" = (
 /obj/structure/closet/emcloset,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "df" = (
@@ -631,7 +709,8 @@
 /obj/item/grenade/syndieminibomb/concussion,
 /obj/item/grenade/syndieminibomb/concussion,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "dg" = (
@@ -645,7 +724,8 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "dh" = (
@@ -832,20 +912,23 @@
 /area/awaymission/caves/northblock)
 "ec" = (
 /turf/open/floor/wood{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "ed" = (
 /obj/structure/bed,
 /obj/effect/landmark/awaystart,
 /turf/open/floor/wood{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "ee" = (
 /obj/structure/girder,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "eg" = (
@@ -882,24 +965,28 @@
 "em" = (
 /obj/structure/closet/secure_closet/personal,
 /turf/open/floor/wood{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "en" = (
 /obj/effect/decal/cleanable/shreds,
 /turf/open/floor/wood{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "eo" = (
 /obj/item/stack/rods,
 /turf/open/floor/wood{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "ep" = (
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "er" = (
@@ -917,7 +1004,8 @@
 "et" = (
 /obj/effect/decal/cleanable/shreds,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "ev" = (
@@ -1076,18 +1164,21 @@
 	name = "light of the tunnel"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fy" = (
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fz" = (
 /obj/structure/barricade/wooden,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fA" = (
@@ -1131,7 +1222,8 @@
 /area/awaymission/caves/bmp_asteroid)
 "fQ" = (
 /turf/open/floor/plating/elevatorshaft{
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	name = "elevator flooring"
 	},
 /area/awaymission/caves/bmp_asteroid)
@@ -1142,14 +1234,16 @@
 "fU" = (
 /obj/effect/landmark/awaystart,
 /turf/open/floor/plating/elevatorshaft{
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	name = "elevator flooring"
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fW" = (
 /obj/structure/girder,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "fY" = (
@@ -1163,7 +1257,8 @@
 	id = "mineintro"
 	},
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gb" = (
@@ -1173,7 +1268,8 @@
 "gc" = (
 /obj/item/stack/rods,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gf" = (
@@ -1185,20 +1281,23 @@
 /obj/structure/table/reinforced,
 /obj/item/storage/box/donkpockets,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gh" = (
 /obj/structure/table/reinforced,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gi" = (
 /obj/structure/table/reinforced,
 /obj/item/stack/rods,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gj" = (
@@ -1218,13 +1317,15 @@
 "go" = (
 /obj/structure/chair/stool/directional/west,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gp" = (
 /obj/structure/table_frame,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gq" = (
@@ -1272,7 +1373,8 @@
 "gB" = (
 /obj/machinery/mech_bay_recharge_port,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gC" = (
@@ -1284,7 +1386,8 @@
 /obj/item/storage/toolbox/mechanical,
 /obj/item/clothing/glasses/material,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gG" = (
@@ -1300,12 +1403,14 @@
 "gI" = (
 /obj/structure/chair/stool/directional/west,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gJ" = (
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gK" = (
@@ -1323,19 +1428,22 @@
 "gN" = (
 /obj/structure/holohoop,
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gO" = (
 /obj/structure/closet/emcloset,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gP" = (
 /obj/item/toy/beach_ball/holoball,
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gU" = (
@@ -1343,7 +1451,8 @@
 	dir = 1
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "gX" = (
@@ -1354,7 +1463,8 @@
 /obj/effect/baseturf_helper/lava,
 /turf/open/lava/smooth{
 	desc = "Looks hot.";
-	initial_gas = "n2=23;o2=14;TEMP=2.7";
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	luminosity = 5
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
@@ -1372,19 +1482,22 @@
 /area/awaymission/caves/northblock)
 "hq" = (
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "hr" = (
 /obj/structure/spider/stickyweb,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "hw" = (
 /obj/structure/barricade/wooden,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "hQ" = (
@@ -1394,19 +1507,22 @@
 "hT" = (
 /obj/structure/flora/rock,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "jH" = (
 /obj/structure/spawner/mining/basilisk,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "jU" = (
 /obj/structure/spawner/mining/basilisk,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "ki" = (
@@ -1418,7 +1534,8 @@
 /obj/item/gun/energy/laser/captain/scattershot,
 /obj/item/slimepotion/fireproof,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "kw" = (
@@ -1426,7 +1543,8 @@
 	pixel_y = -32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "kE" = (
@@ -1447,13 +1565,15 @@
 "ml" = (
 /mob/living/simple_animal/hostile/asteroid/fugu,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "ms" = (
 /obj/structure/spawner/mining/goliath,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "mX" = (
@@ -1461,7 +1581,8 @@
 	name = "Mining cart"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "nw" = (
@@ -1475,18 +1596,21 @@
 	name = "rusted mine"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "nY" = (
 /obj/item/slimepotion/fireproof,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "oI" = (
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "pc" = (
@@ -1498,13 +1622,15 @@
 /obj/item/mjollnir,
 /mob/living/simple_animal/hostile/giant_spider/nurse,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "qD" = (
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "qE" = (
@@ -1514,7 +1640,8 @@
 "ra" = (
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "rl" = (
@@ -1525,12 +1652,14 @@
 	amount = 12
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "rv" = (
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "rF" = (
@@ -1540,7 +1669,8 @@
 "sl" = (
 /obj/structure/spawner/mining/hivelord,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "sw" = (
@@ -1550,19 +1680,22 @@
 "sE" = (
 /obj/item/greentext,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "sI" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "sT" = (
 /obj/structure/spawner/mining/hivelord,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "tz" = (
@@ -1573,7 +1706,8 @@
 "tU" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "uN" = (
@@ -1593,13 +1727,15 @@
 "vX" = (
 /obj/effect/forcefield/cult,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "wl" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "ww" = (
@@ -1608,13 +1744,15 @@
 "wT" = (
 /obj/structure/destructible/cult/pylon,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "xs" = (
 /obj/item/bedsheet/patriot,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "yS" = (
@@ -1630,50 +1768,58 @@
 /obj/item/slimepotion/fireproof,
 /obj/item/clothing/glasses/thermal,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "yV" = (
 /obj/structure/flora/rock,
 /obj/item/soulstone/anybody,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "zn" = (
 /obj/effect/landmark/awaystart,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "zH" = (
 /obj/structure/flora/rock,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "zN" = (
 /obj/machinery/light/small/directional/north,
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "zR" = (
 /obj/effect/decal/cleanable/ash,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "zS" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Aj" = (
 /obj/structure/grille,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "AN" = (
@@ -1682,13 +1828,15 @@
 	name = "shock rune"
 	},
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "AZ" = (
 /obj/structure/girder,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Bd" = (
@@ -1697,54 +1845,63 @@
 	name = "flame rune"
 	},
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "Bo" = (
 /obj/structure/ore_box,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Bs" = (
 /obj/effect/landmark/awaystart,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Bz" = (
 /mob/living/simple_animal/hostile/giant_spider/nurse,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "BH" = (
 /obj/structure/spawner/skeleton,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "BK" = (
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "BL" = (
 /obj/item/stack/rods,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "BQ" = (
 /obj/effect/decal/remains/human,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Cc" = (
 /obj/item/gun/energy/laser/captain/scattershot,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "CB" = (
@@ -1753,7 +1910,8 @@
 	name = "Cave Bat"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Ds" = (
@@ -1761,7 +1919,8 @@
 	pixel_x = 5
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "DH" = (
@@ -1772,7 +1931,8 @@
 	pixel_x = 5
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "DO" = (
@@ -1783,7 +1943,8 @@
 	},
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Fj" = (
@@ -1792,13 +1953,15 @@
 	desc = "It's a beachball with a face crudely drawn onto it with some soot."
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "FI" = (
 /obj/machinery/light/directional/south,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "FS" = (
@@ -1810,7 +1973,8 @@
 "FV" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Gt" = (
@@ -1824,31 +1988,36 @@
 "HK" = (
 /obj/structure/destructible/cult/pylon,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Ik" = (
 /obj/item/stack/rods,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "IN" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "IY" = (
 /obj/structure/spider/cocoon,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "IZ" = (
 /obj/item/clothing/head/collectable/wizard,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Jp" = (
@@ -1859,26 +2028,30 @@
 	pixel_x = 32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "JD" = (
 /obj/structure/ore_box,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Kh" = (
 /obj/machinery/light/small/built/directional/west,
 /turf/open/floor/wood{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/northblock)
 "KY" = (
 /obj/structure/table,
 /obj/item/paper/crumpled/awaymissions/caves/unsafe_area,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Ls" = (
@@ -1886,7 +2059,8 @@
 	pixel_x = -32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Ly" = (
@@ -1900,7 +2074,8 @@
 	amount = 15
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Mk" = (
@@ -1910,19 +2085,22 @@
 "Mq" = (
 /obj/structure/flora/rock,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Mw" = (
 /obj/item/shard,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "MB" = (
 /obj/item/grown/log,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "MC" = (
@@ -1935,7 +2113,8 @@
 "MM" = (
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Np" = (
@@ -1944,7 +2123,8 @@
 	name = "rusted mine"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "NO" = (
@@ -1952,25 +2132,29 @@
 /obj/structure/filingcabinet,
 /obj/item/paper/fluff/awaymissions/caves/omega,
 /turf/open/floor/iron{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "NX" = (
 /obj/effect/decal/cleanable/blood/gibs/old,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "OA" = (
 /obj/item/gun/ballistic/automatic/pistol/deagle/gold,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "OE" = (
 /obj/machinery/light/directional/west,
 /turf/open/floor/plating{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/research)
 "OJ" = (
@@ -1979,7 +2163,8 @@
 	name = "Cave Bat"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "OX" = (
@@ -2001,7 +2186,8 @@
 "Rm" = (
 /obj/effect/decal/remains/human,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "Rp" = (
@@ -2012,38 +2198,44 @@
 	},
 /obj/machinery/light/small/built/directional/east,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Ry" = (
 /obj/structure/grille,
 /obj/structure/barricade/wooden,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "RJ" = (
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "SV" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "Tj" = (
 /obj/item/assembly/igniter,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "TT" = (
 /obj/item/ectoplasm,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "Uu" = (
@@ -2056,7 +2248,8 @@
 /obj/effect/decal/remains/human,
 /obj/item/clothing/under/misc/patriotsuit,
 /turf/open/misc/asteroid/basalt/lava{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_four)
 "VK" = (
@@ -2064,7 +2257,8 @@
 	name = "spooky skeleton remains"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Wj" = (
@@ -2086,13 +2280,15 @@
 	pixel_x = -32
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "Xs" = (
 /mob/living/simple_animal/hostile/giant_spider/hunter,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "XG" = (
@@ -2101,44 +2297,51 @@
 	name = "rusted mine"
 	},
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "XN" = (
 /obj/item/grenade/syndieminibomb/concussion,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_two)
 "XR" = (
 /obj/structure/spider/stickyweb,
 /mob/living/simple_animal/hostile/giant_spider/hunter,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "YG" = (
 /obj/item/organ/brain/alien,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "YZ" = (
 /mob/living/simple_animal/hostile/skeleton,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 "Zj" = (
 /obj/effect/decal/remains/human,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid)
 "ZS" = (
 /obj/structure/barricade/wooden,
 /turf/open/misc/asteroid/basalt{
-	initial_gas = "n2=23;o2=14;TEMP=2.7"
+	initial_gas = list("nitrogen" = 23, "oxygen" = 14);
+	temperature = 2.7;
 	},
 /area/awaymission/caves/bmp_asteroid/level_three)
 
diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm
index 1710b8109ce..c914c8d9d21 100644
--- a/_maps/RandomZLevels/moonoutpost19.dmm
+++ b/_maps/RandomZLevels/moonoutpost19.dmm
@@ -549,7 +549,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -563,7 +563,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "bZ" = (
@@ -576,7 +576,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -584,7 +584,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -597,7 +597,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -611,7 +611,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -626,7 +626,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -640,7 +640,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -652,7 +652,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -665,7 +665,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -678,7 +678,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -748,14 +748,14 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cp" = (
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cq" = (
@@ -765,7 +765,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -783,7 +783,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cs" = (
@@ -795,7 +795,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -803,7 +803,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cu" = (
@@ -811,7 +811,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -823,7 +823,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -880,7 +880,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -897,7 +897,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -909,7 +909,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -921,7 +921,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cH" = (
@@ -934,7 +934,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -946,7 +946,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -957,7 +957,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -975,7 +975,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -990,7 +990,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1045,7 +1045,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1054,7 +1054,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged4";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1071,7 +1071,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1088,7 +1088,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "cU" = (
@@ -1107,7 +1107,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1116,7 +1116,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1125,7 +1125,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged3";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1142,7 +1142,7 @@
 /turf/open/floor/iron{
 	dir = 1;
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1161,14 +1161,14 @@
 	},
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "da" = (
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "db" = (
@@ -1200,7 +1200,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1222,7 +1222,7 @@
 /turf/open/floor/iron{
 	dir = 1;
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1236,14 +1236,14 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "di" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dj" = (
@@ -1268,7 +1268,7 @@
 /obj/structure/alien/weeds,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1279,7 +1279,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1289,7 +1289,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1298,7 +1298,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1312,7 +1312,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg3";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1325,7 +1325,7 @@
 	},
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dr" = (
@@ -1337,7 +1337,7 @@
 /obj/item/suppressor,
 /turf/open/floor/wood{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "ds" = (
@@ -1374,7 +1374,7 @@
 /obj/effect/mapping_helpers/airlock/cyclelink_helper,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dw" = (
@@ -1387,7 +1387,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1395,7 +1395,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/syndicate)
 "dy" = (
@@ -1409,7 +1409,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1428,7 +1428,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1436,7 +1436,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1448,7 +1448,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1467,7 +1467,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1476,7 +1476,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/syndicate)
@@ -1484,7 +1484,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -1840,7 +1840,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/research)
 "fc" = (
@@ -2306,7 +2306,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "gf" = (
@@ -3608,7 +3608,7 @@
 /obj/item/shard,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "iU" = (
@@ -3883,7 +3883,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -3891,14 +3891,14 @@
 /obj/structure/grille,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "jC" = (
 /obj/effect/spawner/structure/window/reinforced,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "jD" = (
@@ -4102,7 +4102,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4112,7 +4112,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4122,7 +4122,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4132,7 +4132,7 @@
 /obj/structure/cable,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4142,7 +4142,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4151,7 +4151,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4161,7 +4161,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged3";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4326,14 +4326,14 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "kC" = (
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "kD" = (
@@ -4345,7 +4345,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged4";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4353,7 +4353,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4362,7 +4362,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged5";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4371,7 +4371,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4452,7 +4452,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "kQ" = (
@@ -4461,7 +4461,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg3";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4615,7 +4615,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4627,7 +4627,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4767,7 +4767,7 @@
 	dir = 8
 	},
 /turf/open/floor/plating{
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4801,7 +4801,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4811,7 +4811,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -4940,7 +4940,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5081,7 +5081,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5223,7 +5223,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5237,7 +5237,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5308,7 +5308,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5363,7 +5363,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5373,7 +5373,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5404,7 +5404,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "no" = (
@@ -5429,7 +5429,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5460,7 +5460,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5468,7 +5468,7 @@
 /obj/item/pickaxe/drill,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "nw" = (
@@ -5481,7 +5481,7 @@
 	},
 /turf/open/floor/iron/cafeteria{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5503,7 +5503,7 @@
 	},
 /turf/open/floor/iron/cafeteria{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5516,7 +5516,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5552,7 +5552,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5565,7 +5565,7 @@
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
 	icon_state = "platingdmg3";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5578,7 +5578,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5591,7 +5591,7 @@
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5656,7 +5656,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5667,7 +5667,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5711,7 +5711,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "damaged1";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5746,7 +5746,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5758,7 +5758,7 @@
 	dir = 8;
 	heat_capacity = 1e+006;
 	icon_state = "floorscorched2";
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5768,7 +5768,7 @@
 /obj/effect/turf_decal/tile/neutral,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5781,7 +5781,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5789,7 +5789,7 @@
 /obj/structure/chair/comfy/black,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "ob" = (
@@ -5803,7 +5803,7 @@
 	},
 /turf/open/floor/iron{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -5815,7 +5815,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5827,7 +5827,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "oz" = (
@@ -5835,7 +5835,7 @@
 /obj/structure/alien/egg/burst,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "oJ" = (
@@ -5845,7 +5845,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "oT" = (
@@ -5883,7 +5883,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "qw" = (
@@ -5894,7 +5894,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "qD" = (
@@ -5904,7 +5904,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "qK" = (
@@ -5912,7 +5912,7 @@
 /obj/effect/turf_decal/stripes/asteroid/line,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5926,7 +5926,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "rk" = (
@@ -5940,7 +5940,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -5950,14 +5950,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "rD" = (
 /obj/item/trash/candy,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "sb" = (
@@ -5967,7 +5967,7 @@
 /obj/effect/decal/cleanable/blood/splatter,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "si" = (
@@ -5975,7 +5975,7 @@
 /mob/living/simple_animal/hostile/alien/sentinel,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "sy" = (
@@ -5985,7 +5985,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "sM" = (
@@ -5995,7 +5995,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "tb" = (
@@ -6003,7 +6003,7 @@
 /obj/effect/decal/cleanable/blood,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "tK" = (
@@ -6016,7 +6016,7 @@
 /obj/item/clothing/glasses/night,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "uf" = (
@@ -6030,14 +6030,14 @@
 /obj/structure/alien/egg,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "uR" = (
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "vm" = (
@@ -6045,7 +6045,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "vJ" = (
@@ -6055,7 +6055,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6070,7 +6070,7 @@
 /obj/item/clothing/mask/facehugger/impregnated,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "vV" = (
@@ -6085,7 +6085,7 @@
 "wq" = (
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "wx" = (
@@ -6094,7 +6094,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "wT" = (
@@ -6104,14 +6104,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "xI" = (
 /obj/item/storage/bag/ore,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "yz" = (
@@ -6120,7 +6120,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "zp" = (
@@ -6129,7 +6129,7 @@
 /obj/effect/decal/cleanable/blood/gibs,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "zF" = (
@@ -6151,7 +6151,7 @@
 /obj/effect/decal/cleanable/blood,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "BH" = (
@@ -6159,7 +6159,7 @@
 /obj/structure/bed/nest,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "CY" = (
@@ -6167,7 +6167,7 @@
 /obj/effect/decal/cleanable/blood/gibs,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "DF" = (
@@ -6184,7 +6184,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6222,7 +6222,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6240,7 +6240,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6253,7 +6253,7 @@
 /obj/item/mining_scanner,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "Ku" = (
@@ -6261,7 +6261,7 @@
 /mob/living/simple_animal/hostile/alien,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "KG" = (
@@ -6272,7 +6272,7 @@
 /obj/item/gun/ballistic/automatic/pistol,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "Li" = (
@@ -6312,7 +6312,7 @@
 /obj/item/clothing/head/helmet,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "OO" = (
@@ -6320,7 +6320,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "Pn" = (
@@ -6345,14 +6345,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "PS" = (
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "Rm" = (
@@ -6366,14 +6366,14 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "Sg" = (
 /obj/machinery/light/small/directional/east,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "SE" = (
@@ -6387,7 +6387,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6403,7 +6403,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "Uq" = (
@@ -6411,14 +6411,14 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "UY" = (
 /obj/structure/alien/weeds/node,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "VE" = (
@@ -6429,7 +6429,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/arrivals)
@@ -6437,7 +6437,7 @@
 /obj/structure/alien/weeds/node,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 "Wf" = (
@@ -6454,7 +6454,7 @@
 /mob/living/simple_animal/hostile/alien,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "Yn" = (
@@ -6464,7 +6464,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6474,7 +6474,7 @@
 /obj/effect/decal/cleanable/blood,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/hive)
 "Zf" = (
@@ -6484,7 +6484,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4);
 	temperature = 251
 	},
 /area/awaymission/moonoutpost19/main)
@@ -6511,14 +6511,14 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "Zz" = (
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/arrivals)
 "ZZ" = (
@@ -6528,7 +6528,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
+	initial_gas = list("carbon_dioxide" = 48.7, "nitrogen" = 13.2, "oxygen" = 32.4)
 	},
 /area/awaymission/moonoutpost19/main)
 
diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm
index aae9ed8d76d..2ef2a42ace9 100644
--- a/_maps/RandomZLevels/undergroundoutpost45.dmm
+++ b/_maps/RandomZLevels/undergroundoutpost45.dmm
@@ -29,7 +29,7 @@
 /obj/effect/turf_decal/sand/plating,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8)
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -827,7 +827,7 @@
 /obj/effect/decal/cleanable/blood/gibs/limb,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -4187,7 +4187,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11481,7 +11481,7 @@
 /obj/structure/alien/resin/wall,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11489,7 +11489,7 @@
 "zq" = (
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11519,7 +11519,7 @@
 /obj/structure/bed/nest,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11528,7 +11528,7 @@
 /obj/effect/decal/cleanable/blood/gibs/up,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11563,7 +11563,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11595,7 +11595,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11615,7 +11615,7 @@
 /obj/effect/decal/cleanable/blood/splatter,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11626,7 +11626,7 @@
 /obj/effect/decal/cleanable/blood/gibs/down,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11635,7 +11635,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11653,7 +11653,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11699,7 +11699,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11720,7 +11720,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -11784,7 +11784,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11795,7 +11795,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11813,7 +11813,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11822,7 +11822,7 @@
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11859,7 +11859,7 @@
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11889,7 +11889,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11929,7 +11929,7 @@
 /obj/effect/decal/cleanable/blood/splatter,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11938,7 +11938,7 @@
 /obj/structure/closet/crate,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11955,7 +11955,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11965,7 +11965,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -11973,7 +11973,7 @@
 "Lz" = (
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 351.9
 	},
@@ -11988,7 +11988,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12011,7 +12011,7 @@
 /obj/machinery/light/small/directional/east,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12020,7 +12020,7 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12029,7 +12029,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12038,7 +12038,7 @@
 /obj/machinery/light/small/directional/west,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12083,7 +12083,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12092,7 +12092,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12124,7 +12124,7 @@
 /obj/effect/turf_decal/stripes/asteroid/line,
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -12188,7 +12188,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12223,7 +12223,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12253,7 +12253,7 @@
 /obj/machinery/light/small/directional/south,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12265,7 +12265,7 @@
 	},
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12281,7 +12281,7 @@
 /obj/structure/alien/resin/membrane,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12298,7 +12298,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12308,7 +12308,7 @@
 /obj/effect/decal/cleanable/blood/gibs/down,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12320,7 +12320,7 @@
 	},
 /turf/open/floor/plating{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	temperature = 363.9
 	},
 /area/awaymission/undergroundoutpost45/caves)
@@ -12329,7 +12329,7 @@
 /obj/structure/alien/weeds,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12350,7 +12350,7 @@
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 351.9
 	},
@@ -12373,7 +12373,7 @@
 /obj/structure/ore_box,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12404,7 +12404,7 @@
 /obj/structure/glowshroom/single,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12415,7 +12415,7 @@
 /obj/effect/mob_spawn/corpse/human,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12455,7 +12455,7 @@
 /obj/machinery/light/small/directional/north,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
@@ -12465,7 +12465,7 @@
 /obj/effect/decal/cleanable/blood/gibs/core,
 /turf/open/misc/asteroid{
 	heat_capacity = 1e+006;
-	initial_gas = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
+	initial_gas = list("carbon_dioxide" = 173.4, "nitrogen" = 135.1, "plasma" = 229.8);
 	name = "Cave Floor";
 	temperature = 363.9
 	},
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 3ecf61db7a2..df6521acd6b 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -4149,7 +4149,7 @@
 	dir = 4
 	},
 /turf/open/floor/plating{
-	initial_gas = "o2=0.01;n2=0.01;TEMP=2.7";
+	initial_gas = list();
 	luminosity = 2;
 	temperature = 2.7
 	},
@@ -4405,7 +4405,7 @@
 	dir = 4
 	},
 /turf/open/floor/plating{
-	initial_gas = "o2=0.01;n2=0.01;TEMP=2.7";
+	initial_gas = list();
 	luminosity = 2;
 	temperature = 2.7
 	},
diff --git a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
index 2490b1eff02..60464a86396 100644
--- a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
+++ b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
@@ -558,7 +558,8 @@
 /area/medical/virology)
 "bE" = (
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "bF" = (
@@ -1337,7 +1338,8 @@
 	dir = 9
 	},
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "dP" = (
@@ -2261,7 +2263,8 @@
 "gv" = (
 /obj/effect/turf_decal/weather/snow/corner,
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "gw" = (
@@ -4935,7 +4938,8 @@
 /area/medical/virology)
 "nB" = (
 /turf/open/misc/dirt/dark{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "nC" = (
@@ -5947,7 +5951,8 @@
 	dir = 8
 	},
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "qq" = (
@@ -5999,7 +6004,8 @@
 	dir = 6
 	},
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "qy" = (
@@ -7465,7 +7471,8 @@
 	dir = 5
 	},
 /turf/open/misc/dirt/dark{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "ux" = (
@@ -9737,7 +9744,8 @@
 	dir = 4
 	},
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "Bv" = (
@@ -9775,7 +9783,8 @@
 "BA" = (
 /obj/structure/closet/crate/grave,
 /turf/open/misc/dirt/dark{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "BB" = (
@@ -13523,7 +13532,8 @@
 	dir = 10
 	},
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "LO" = (
@@ -14589,7 +14599,8 @@
 "ON" = (
 /obj/structure/closet/crate/grave,
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "OO" = (
@@ -17427,7 +17438,8 @@
 	pixel_y = 32
 	},
 /turf/open/misc/dirt{
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = list("oxygen" = 14, "nitrogen" = 30);
+	temperature = 180;
 	},
 /area/icemoon/underground/explored)
 "Wt" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index cf13b361025..d4ea290adb3 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -17725,7 +17725,7 @@
 "ffP" = (
 /obj/effect/spawner/random/structure/grille,
 /turf/open/floor/plating/foam{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/space/nearstation)
 "ffR" = (
@@ -31006,7 +31006,7 @@
 "kiE" = (
 /obj/item/book/manual/nuclear,
 /turf/open/floor/plating/foam{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/space/nearstation)
 "kiM" = (
@@ -51626,7 +51626,7 @@
 /area/security/checkpoint/supply)
 "rLv" = (
 /turf/open/floor/plating/foam{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/space/nearstation)
 "rLz" = (
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 4fde5a72eb5..073981f327d 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -281,7 +281,7 @@
 "aU" = (
 /obj/structure/flora/tree/dead,
 /turf/open/misc/asteroid/basalt/wasteland{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/centcom/holding)
 "aV" = (
@@ -1955,10 +1955,7 @@
 	icon_state = "ladder10";
 	invisibility = 100
 	},
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/awaymission/errorroom)
 "fA" = (
 /obj/machinery/vending/cola,
@@ -2550,7 +2547,7 @@
 /area/syndicate_mothership/control)
 "hs" = (
 /turf/open/misc/asteroid/basalt/wasteland{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/centcom/holding)
 "ht" = (
@@ -2897,10 +2894,7 @@
 /turf/open/floor/iron,
 /area/syndicate_mothership/control)
 "ik" = (
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/awaymission/errorroom)
 "il" = (
 /turf/closed/indestructible/riveted,
@@ -5394,9 +5388,7 @@
 	pixel_x = -4;
 	pixel_y = 4
 	},
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/centcom/holding)
 "pi" = (
 /obj/structure/table/reinforced,
@@ -5703,9 +5695,7 @@
 /turf/open/floor/iron/dark,
 /area/tdome/administration)
 "qe" = (
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/centcom/holding)
 "qf" = (
 /obj/structure/chair/comfy/black{
@@ -8548,10 +8538,7 @@
 /area/centcom/supply)
 "zi" = (
 /obj/item/rupee,
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/awaymission/errorroom)
 "zk" = (
 /obj/machinery/door/airlock/medical/glass{
@@ -8951,9 +8938,7 @@
 	pixel_x = 4;
 	pixel_y = -4
 	},
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/centcom/holding)
 "Ak" = (
 /obj/effect/turf_decal/tile/bar,
@@ -11393,9 +11378,7 @@
 /obj/structure/railing{
 	dir = 8
 	},
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/centcom/holding)
 "Hj" = (
 /obj/structure/closet/crate/bin,
@@ -12290,7 +12273,7 @@
 /obj/item/flashlight/lantern,
 /turf/open/misc/ironsand{
 	color = "#525252";
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/centcom/holding)
 "JZ" = (
@@ -12567,9 +12550,7 @@
 /obj/structure/flora/rock/pile/largejungle{
 	pixel_y = -3
 	},
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/centcom/holding)
 "KU" = (
 /obj/structure/closet/emcloset,
@@ -13512,7 +13493,7 @@
 "NS" = (
 /turf/open/misc/ironsand{
 	color = "#525252";
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/centcom/holding)
 "NU" = (
@@ -13797,7 +13778,7 @@
 "OC" = (
 /obj/structure/flora/rock/pile,
 /turf/open/misc/asteroid/basalt/wasteland{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/centcom/holding)
 "OD" = (
@@ -14091,9 +14072,7 @@
 	pixel_x = -4;
 	pixel_y = -4
 	},
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/centcom/holding)
 "Pq" = (
 /turf/open/floor/iron/grimy,
@@ -14852,9 +14831,7 @@
 /turf/open/floor/iron/dark,
 /area/centcom/evacuation)
 "Rt" = (
-/turf/open/water{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/water,
 /area/centcom/holding)
 "Ru" = (
 /obj/effect/turf_decal/stripes/line{
@@ -16091,9 +16068,7 @@
 	pixel_x = 4;
 	pixel_y = 4
 	},
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15"
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/centcom/holding)
 "UM" = (
 /obj/effect/turf_decal/tile/brown{
@@ -16247,7 +16222,7 @@
 /obj/structure/flora/rock/pile,
 /turf/open/misc/ironsand{
 	color = "#525252";
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/centcom/holding)
 "Vg" = (
@@ -17947,10 +17922,7 @@
 /area/syndicate_mothership/expansion_bombthreat)
 "ZE" = (
 /obj/effect/landmark/error,
-/turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0
-	},
+/turf/open/misc/ashplanet/wateryrock,
 /area/awaymission/errorroom)
 "ZF" = (
 /obj/structure/dresser,
diff --git a/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm b/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm
index 79b829540f0..3df2c6d61ac 100644
--- a/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm
+++ b/_maps/map_files/tramstation/modular_pieces/maintenance_miningsolar_3.dmm
@@ -35,7 +35,7 @@
 "z" = (
 /obj/structure/mecha_wreckage/ripley,
 /turf/open/floor/iron/recharge_floor/asteroid{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/mine/explored)
 "B" = (
diff --git a/_maps/shuttles/ruin_caravan_victim.dmm b/_maps/shuttles/ruin_caravan_victim.dmm
index 8cc0f305110..83653916cb3 100644
--- a/_maps/shuttles/ruin_caravan_victim.dmm
+++ b/_maps/shuttles/ruin_caravan_victim.dmm
@@ -79,7 +79,7 @@
 /obj/effect/decal/cleanable/dirt,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "ct" = (
@@ -98,7 +98,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "cX" = (
@@ -108,7 +108,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "ec" = (
@@ -170,7 +170,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "gw" = (
@@ -182,7 +182,7 @@
 /obj/effect/decal/cleanable/blood,
 /obj/effect/turf_decal/tile/blue,
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "gH" = (
@@ -207,7 +207,7 @@
 	},
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/showroomfloor{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "kv" = (
@@ -282,7 +282,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "mZ" = (
@@ -300,7 +300,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "od" = (
@@ -355,7 +355,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "qp" = (
@@ -366,7 +366,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "qM" = (
@@ -504,7 +504,7 @@
 	specialfunctions = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "zd" = (
@@ -596,7 +596,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "DQ" = (
@@ -625,7 +625,7 @@
 	},
 /mob/living/simple_animal/hostile/syndicate/melee/sword/space/stormtrooper,
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "EQ" = (
@@ -640,7 +640,7 @@
 	},
 /mob/living/simple_animal/hostile/syndicate/ranged/smg/space,
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "EW" = (
@@ -657,7 +657,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "Fv" = (
@@ -727,7 +727,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "Ko" = (
@@ -739,7 +739,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "KC" = (
@@ -817,7 +817,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "Ov" = (
@@ -839,7 +839,7 @@
 	dir = 8
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "TEMP=2.7"
+	temperature = 2.7
 	},
 /area/shuttle/caravan/freighter1)
 "OK" = (
diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm
index 784830bfe9f..5672670ffda 100644
--- a/_maps/templates/battlecruiser_starfury.dmm
+++ b/_maps/templates/battlecruiser_starfury.dmm
@@ -34,7 +34,7 @@
 	},
 /obj/machinery/computer/med_data/syndie,
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=100;TEMP=80";
+	initial_gas = list("nitrogen" = 100);
 	temperature = 80
 	},
 /area/shuttle/sbc_starfury)
@@ -158,7 +158,7 @@
 	dir = 4
 	},
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=100;TEMP=80";
+	initial_gas = list("nitrogen" = 100);
 	temperature = 80
 	},
 /area/shuttle/sbc_starfury)
@@ -2054,7 +2054,7 @@
 	},
 /obj/machinery/light/directional/east,
 /turf/open/floor/iron/dark{
-	initial_gas = "n2=100;TEMP=80";
+	initial_gas = list("nitrogen" = 100);
 	temperature = 80
 	},
 /area/shuttle/sbc_starfury)
diff --git a/_maps/templates/heretic_sacrifice_template.dmm b/_maps/templates/heretic_sacrifice_template.dmm
index c11ea116bc0..16a296233ef 100644
--- a/_maps/templates/heretic_sacrifice_template.dmm
+++ b/_maps/templates/heretic_sacrifice_template.dmm
@@ -9,7 +9,7 @@
 	},
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -25,8 +25,8 @@
 "dX" = (
 /obj/effect/decal/cleanable/oil,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -43,7 +43,7 @@
 "gJ" = (
 /obj/effect/decal/remains/human,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -63,8 +63,8 @@
 "lz" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -94,7 +94,7 @@
 "nG" = (
 /obj/structure/bonfire/prelit,
 /turf/open/misc/dirt/jungle/wasteland{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -106,8 +106,8 @@
 	dir = 10
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -116,7 +116,7 @@
 	dir = 8
 	},
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -141,8 +141,8 @@
 	},
 /obj/effect/decal/cleanable/oil,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -153,8 +153,8 @@
 "qu" = (
 /obj/effect/turf_decal/weather/dirt,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -165,8 +165,8 @@
 	dir = 5
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -178,8 +178,8 @@
 "sb" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -188,8 +188,8 @@
 	dir = 9
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -211,7 +211,7 @@
 	dir = 1
 	},
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -220,8 +220,8 @@
 	dir = 4
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -230,19 +230,19 @@
 	dir = 1
 	},
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
 "wE" = (
 /turf/open/misc/dirt/jungle/wasteland{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
 "wS" = (
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -262,8 +262,8 @@
 /obj/structure/stone_tile/slab,
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -294,8 +294,8 @@
 /area/heretic_sacrifice/rust)
 "Bw" = (
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -327,7 +327,7 @@
 /obj/effect/decal/cleanable/plasma,
 /obj/effect/landmark/heretic/ash,
 /turf/open/misc/dirt/jungle/wasteland{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -336,7 +336,7 @@
 	dir = 4
 	},
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -351,8 +351,8 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -378,8 +378,8 @@
 	},
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -388,8 +388,8 @@
 	dir = 5
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -402,8 +402,8 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -420,14 +420,14 @@
 	dir = 4
 	},
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
 "Kz" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -440,8 +440,8 @@
 "KP" = (
 /obj/structure/stone_tile/surrounding_tile,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -459,7 +459,7 @@
 /obj/effect/decal/cleanable/ash/large,
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/dirt/jungle/wasteland{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -476,8 +476,8 @@
 "NA" = (
 /obj/structure/stone_tile/burnt,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -486,15 +486,15 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
 "OD" = (
 /obj/effect/landmark/heretic,
 /turf/open/misc/dirt/jungle/wasteland{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -503,8 +503,8 @@
 	dir = 10
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -513,15 +513,15 @@
 	dir = 6
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = "o2=22;n2=82;TEMP=293.15";
-	planetary_atmos = 0;
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
 "Qi" = (
 /obj/structure/stone_tile,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -532,7 +532,7 @@
 	},
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -559,7 +559,7 @@
 "Sy" = (
 /obj/structure/stone_tile/block,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -570,7 +570,7 @@
 "TC" = (
 /obj/effect/decal/cleanable/ash,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
@@ -600,7 +600,7 @@
 	},
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/dirt/jungle/dark{
-	planetary_atmos = 0;
+	simulated = 1;
 	slowdown = 0
 	},
 /area/heretic_sacrifice/ash)
diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index cf679748770..7d831e1d802 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -22,6 +22,23 @@
 #define SOUTHDOWN (SOUTH|DOWN)
 #define WESTDOWN (WEST|DOWN)
 
+
+#define AIR_UPDATE_VALUES(air) \
+	do{ \
+		var/list/cache = air.gas; \
+		air.total_moles = 0; \
+		for(var/g in cache) { \
+			if(cache[g] <= 0) { \
+				cache -= g \
+			} \
+			else { \
+				air.total_moles += cache[g]; \
+			} \
+		} \
+	} while(FALSE)
+
+
+
 //#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid) ZASTURF
 
 #define TURF_HAS_VALID_ZONE(T) (T.simulated && T:zone && !T:zone:invalid)
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index b074ca7cf08..3532338174e 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -150,7 +150,7 @@
 #define INIT_ORDER_SKILLS 15
 #define INIT_ORDER_TIMER 1
 #define INIT_ORDER_DEFAULT 0
-#define INIT_ORDER_AIR -1
+//#define INIT_ORDER_AIR -1
 #define INIT_ORDER_PERSISTENCE -2
 #define INIT_ORDER_PERSISTENT_PAINTINGS -3 // Assets relies on this
 #define INIT_ORDER_ASSETS -4
@@ -162,8 +162,9 @@
 #define INIT_ORDER_SHUTTLE -21
 #define INIT_ORDER_MINOR_MAPPING -40
 #define INIT_ORDER_PATH -50
-#define INIT_ORDER_DECAY -61 //PARIAH ADDITION
+#define INIT_ORDER_DECAY -61
 #define INIT_ORDER_EXPLOSIONS -69
+#define INIT_ORDER_AIR -70
 #define INIT_ORDER_STATPANELS -98
 #define INIT_ORDER_INIT_PROFILER -99 //Near the end, logs the costs of initialize
 #define INIT_ORDER_CHAT -100 //Should be last to ensure chat remains smooth during init.
diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index f3d98230e2b..b2b2b769182 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -56,7 +56,7 @@ SUBSYSTEM_DEF(airflow)
 		else if (target.airflow_process_delay)
 			target.airflow_process_delay = 0
 		target.airflow_speed = min(target.airflow_speed, 15)
-		target.airflow_speed -= SSzas.settings.airflow_speed_decay
+		target.airflow_speed -= zas_settings.airflow_speed_decay
 		if (!target.airflow_skip_speedcheck)
 			if (target.airflow_speed > 7)
 				if (target.airflow_time++ >= target.airflow_speed - 7)
@@ -103,7 +103,7 @@ SUBSYSTEM_DEF(airflow)
 
 		if (ismob(target))
 			var/mob/M = target
-			M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE, SSzas.settings.airflow_mob_slowdown)
+			M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE, zas_settings.airflow_mob_slowdown)
 			addtimer(CALLBACK(M, /mob/proc/remove_movespeed_modifier, /datum/movespeed_modifier/atmos_pressure, TRUE), 3 SECONDS, flags = TIMER_DELETE_ME)
 		if (MC_TICK_CHECK)
 			current.Cut(i)
@@ -120,7 +120,7 @@ SUBSYSTEM_DEF(airflow)
 
 
 /atom/movable/proc/prepare_airflow(strength)
-	if (!airflow_dest || airflow_speed < 0 || last_airflow > world.time - SSzas.settings.airflow_delay)
+	if (!airflow_dest || airflow_speed < 0 || last_airflow > world.time - zas_settings.airflow_delay)
 		return FALSE
 	if (airflow_speed)
 		airflow_speed = strength / max(get_dist(src, airflow_dest), 1)
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index a7d1973a472..178725b864f 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -60,6 +60,7 @@ Class Procs:
 		Called when an edge is erased. Removes it from processing.
 
 */
+GLOBAL_REAL(zas_settings, /datum/zas_controller) = new
 
 SUBSYSTEM_DEF(zas)
 	name = "Air Core"
@@ -118,6 +119,8 @@ SUBSYSTEM_DEF(zas)
 		while (state != SS_IDLE)
 			stoplag()
 
+	zas_settings = new //Reset the global zas settings
+
 	while (zones.len)
 		var/zone/zone = zones[zones.len]
 		zones.len--
@@ -152,7 +155,7 @@ SUBSYSTEM_DEF(zas)
 /datum/controller/subsystem/zas/Initialize(timeofday, simulate = TRUE)
 
 	var/starttime = REALTIMEOFDAY
-	settings = new
+	settings = zas_settings
 	gas_data = xgm_gas_data
 
 	to_chat(world, span_boldannounce("ZAS: Processing Geometry..."))
@@ -544,11 +547,11 @@ SUBSYSTEM_DEF(zas)
 		amount = CEILING(amount, 0.1)
 
 		mix_real.gas[gastype] += amount
-		mix_real.updateValues()
+		AIR_UPDATE_VALUES(mix_real)
 
 	while(mix_real.returnPressure() > target_pressure)
 		mix_real.gas[gastype] -= mix_real.gas[gastype] * 0.1
-		mix_real.updateValues()
+		AIR_UPDATE_VALUES(mix_real)
 
 	mix_real.gas[gastype] = FLOOR(mix_real.gas[gastype], 0.1)
 
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 7bb557f86f2..abe6c7f88cf 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -365,7 +365,7 @@
 				if(I == GAS_OXYGEN || I == GAS_NITROGEN)
 					continue
 				G_gases[I] = 0
-			G.updateValues()
+			AIR_UPDATE_VALUES(G)
 		for(var/obj/machinery/atmospherics/components/unary/U in O)
 			if(!U.welded)
 				U.welded = TRUE
diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm
index 990dd7d62ec..c7e4da45759 100644
--- a/code/game/objects/effects/effect_system/effects_water.dm
+++ b/code/game/objects/effects/effect_system/effects_water.dm
@@ -18,7 +18,6 @@
 	if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		var/altered_temp = max(env.temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * diff_temp), 0)
 		env.temperature = (diff_temp > 0) ? min(temperature, altered_temp) : max(temperature, altered_temp)
-		env.updateValues()
 
 	if (--src.life < 1)
 		qdel(src)
diff --git a/code/game/turfs/open/ashplanet.dm b/code/game/turfs/open/ashplanet.dm
index a83fd860e3f..2087bd32200 100644
--- a/code/game/turfs/open/ashplanet.dm
+++ b/code/game/turfs/open/ashplanet.dm
@@ -8,7 +8,6 @@
 	desc = "The ground is covered in volcanic ash."
 	baseturfs = /turf/open/misc/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface
 	initial_gas = LAVALAND_DEFAULT_ATMOS
-	planetary_atmos = TRUE
 
 	footstep = FOOTSTEP_SAND
 	barefootstep = FOOTSTEP_SAND
diff --git a/code/game/turfs/open/floor/glass.dm b/code/game/turfs/open/floor/glass.dm
index b40b05ea29a..fb75dfc0774 100644
--- a/code/game/turfs/open/floor/glass.dm
+++ b/code/game/turfs/open/floor/glass.dm
@@ -46,7 +46,7 @@
 	icon_state = "reinf_glass-0"
 	base_icon_state = "reinf_glass"
 	floor_tile = /obj/item/stack/tile/rglass
-	initial_gas = "ICEMOON_ATMOS"
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/floor/glass/reinforced/setup_broken_states()
 	return list("reinf_glass-damaged1", "reinf_glass-damaged2", "reinf_glass-damaged3")
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index e958300cc35..8dab77c9d09 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -25,7 +25,7 @@
 	for(var/datum/pipeline/PN as anything in SSairmachines.networks)
 		for(var/datum/gas_mixture/G in list(PN.air) & PN.other_airs)
 			G.gas = list()
-			G.updateValues()
+			AIR_UPDATE_VALUES(G)
 
 	to_chat(usr, "\[2/5\] - All pipenets purged of gas.")
 
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 011f0b6b64b..0e5412aa686 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -1,28 +1,27 @@
 /*
 Contains helper procs for airflow, handled in /connection_group.
 */
-#define AIRBORNE_DAMAGE(airborne_thing) (min(airborne_thing.airflow_speed, (airborne_thing.airborne_acceleration*2)) * SSzas.settings.airflow_damage)
+#define AIRBORNE_DAMAGE(airborne_thing) (min(airborne_thing.airflow_speed, (airborne_thing.airborne_acceleration*2)) * zas_settings.airflow_damage)
 
 /mob/var/tmp/last_airflow_stun = 0
 /mob/proc/airflow_stun()
 	return
 /mob/living/airflow_stun()
 	if(stat == 2)
-		return 0
-	if(last_airflow_stun > world.time - SSzas.settings.airflow_stun_cooldown)
+		return FALSE
+	if(last_airflow_stun > world.time - zas_settings.airflow_stun_cooldown)
 		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
-		return 0
-
+		return FALSE
 	if(!(status_flags & CANSTUN) && !(status_flags & CANKNOCKDOWN))
 		to_chat(src, "<span class='notice'>Air suddenly rushes past you, but you manage to keep your footing!</span>")
-		return 0
+		return FALSE
 	if(buckled)
 		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
-		return 0
+		return FALSE
 	if(!body_position == LYING_DOWN)
 		to_chat(src, "<span class='warning'>The sudden rush of air knocks you over!</span>")
 
-	Knockdown(SSzas.settings.airflow_stun SECONDS)
+	Knockdown(zas_settings.airflow_stun SECONDS)
 	last_airflow_stun = world.time
 
 /mob/living/silicon/airflow_stun()
@@ -38,35 +37,37 @@ Contains helper procs for airflow, handled in /connection_group.
 
 	if(anchored && !ismob(src)) return 0
 
-	if(!isobj(src) && n < SSzas.settings.airflow_dense_pressure) return 0
+	if(!isobj(src) && n < zas_settings.airflow_dense_pressure) return 0
 
 	return 1
 
 /mob/check_airflow_movable(n)
-	if(n < SSzas.settings.airflow_heavy_pressure)
-		return 0
-	return 1
+	if(n < zas_settings.airflow_heavy_pressure)
+		return FALSE
+	if(HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) //Magboots
+		return FALSE
+	return TRUE
 
 /mob/living/silicon/check_airflow_movable()
 	return 0
 
 /obj/check_airflow_movable(n)
-	if(n < SSzas.settings.airflow_dense_pressure) return 0
+	if(n < zas_settings.airflow_dense_pressure) return 0
 
 	return ..()
 
 /obj/item/check_airflow_movable(n)
 	switch(w_class)
 		if(1,2)
-			if(n < SSzas.settings.airflow_lightest_pressure) return 0
+			if(n < zas_settings.airflow_lightest_pressure) return 0
 		if(3)
-			if(n < SSzas.settings.airflow_light_pressure) return 0
+			if(n < zas_settings.airflow_light_pressure) return 0
 		if(4,5)
-			if(n < SSzas.settings.airflow_medium_pressure) return 0
+			if(n < zas_settings.airflow_medium_pressure) return 0
 		if(6)
-			if(n < SSzas.settings.airflow_heavy_pressure) return 0
+			if(n < zas_settings.airflow_heavy_pressure) return 0
 		if(7 to INFINITY)
-			if(n < SSzas.settings.airflow_dense_pressure) return 0
+			if(n < zas_settings.airflow_dense_pressure) return 0
 	return ..()
 
 
@@ -120,10 +121,10 @@ Contains helper procs for airflow, handled in /connection_group.
 	apply_damage(b_loss, BRUTE)
 	if(istype(A, /obj/structure) || iswallturf(A))
 		if(airflow_speed > 10)
-			Paralyze(round(airflow_speed * SSzas.settings.airflow_stun))
-			Stun(round(airflow_speed * SSzas.settings.airflow_stun) + 3)
+			Paralyze(round(airflow_speed * zas_settings.airflow_stun))
+			Stun(round(airflow_speed * zas_settings.airflow_stun) + 3)
 		else
-			Stun(round(airflow_speed * SSzas.settings.airflow_stun/2))
+			Stun(round(airflow_speed * zas_settings.airflow_stun/2))
 
 	return ..()
 
@@ -160,7 +161,7 @@ Contains helper procs for airflow, handled in /connection_group.
 	if(!uses_integrity)
 		return
 
-	take_damage(SSzas.settings.airflow_damage, BRUTE)
+	take_damage(zas_settings.airflow_damage, BRUTE)
 
 /mob/living/carbon/human/airflow_hit_act(atom/movable/flying)
 	. = ..()
@@ -175,10 +176,10 @@ Contains helper procs for airflow, handled in /connection_group.
 
 
 	if(airflow_speed > 10)
-		Paralyze(round(flying.airflow_speed * SSzas.settings.airflow_stun))
-		Stun(round(flying.airflow_speed * SSzas.settings.airflow_stun) + 3)
+		Paralyze(round(flying.airflow_speed * zas_settings.airflow_stun))
+		Stun(round(flying.airflow_speed * zas_settings.airflow_stun) + 3)
 	else
-		Stun(round(flying.airflow_speed * SSzas.settings.airflow_stun/2))
+		Stun(round(flying.airflow_speed * zas_settings.airflow_stun/2))
 
 /zone/proc/movables()
 	RETURN_TYPE(/list)
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 125c37c4692..ba6a7269008 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -49,7 +49,7 @@ Class Procs:
 	flow(list/movable, differential, repelled)
 		Airflow proc causing all objects in movable to be checked against a pressure differential.
 		If repelled is true, the objects move away from any turf in connecting_turfs, otherwise they approach.
-		A check against SSzas.settings.lightest_airflow_pressure should generally be performed before calling this.
+		A check against zas_settings.lightest_airflow_pressure should generally be performed before calling this.
 
 	get_connected_zone(zone/from)
 		Helper proc that allows getting the other zone of an edge given one of them.
@@ -99,11 +99,11 @@ Class Procs:
 		var/atom/movable/M = movable[i]
 
 		//If they're already being tossed, don't do it again.
-		if(M.last_airflow > world.time - SSzas.settings.airflow_delay) continue
+		if(M.last_airflow > world.time - zas_settings.airflow_delay) continue
 		if(M.airflow_speed) continue
 
 		//Check for knocking people over
-		if(ismob(M) && differential > SSzas.settings.airflow_stun_pressure)
+		if(ismob(M) && differential > zas_settings.airflow_stun_pressure)
 			if(M:status_flags & GODMODE) continue
 			M:airflow_stun()
 
@@ -159,7 +159,7 @@ Class Procs:
 	var/equiv = A.air.shareRatio(B.air, coefficient)
 
 	var/differential = A.air.returnPressure() - B.air.returnPressure()
-	if(abs(differential) >= SSzas.settings.airflow_lightest_pressure)
+	if(abs(differential) >= zas_settings.airflow_lightest_pressure)
 		var/list/attracted
 		var/list/repelled
 		if(differential > 0)
@@ -172,7 +172,7 @@ Class Procs:
 		if(REALTIMEOFDAY > last_woosh + 2 SECONDS)
 			playsound(
 				pick(connecting_turfs),
-				abs(differential) > SSzas.settings.airflow_heavy_pressure ? 'modular_pariah/master_files/sound/effects/space_wind_big.ogg' : 'modular_pariah/master_files/sound/effects/space_wind.ogg',
+				abs(differential) > zas_settings.airflow_heavy_pressure ? 'modular_pariah/master_files/sound/effects/space_wind_big.ogg' : 'modular_pariah/master_files/sound/effects/space_wind.ogg',
 				100,
 				TRUE,
 				null,
@@ -242,7 +242,7 @@ Class Procs:
 	var/equiv = A.air.shareSpace(air)
 
 	var/differential = A.air.returnPressure() - air.returnPressure()
-	if(abs(differential) >= SSzas.settings.airflow_lightest_pressure)
+	if(abs(differential) >= zas_settings.airflow_lightest_pressure)
 		var/list/attracted = A.movables()
 		flow(attracted, abs(differential), differential < 0)
 
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 2a08a3cf268..aeb088d7ad9 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -82,5 +82,5 @@
 /client/proc/ZASSettings()
 	set category = "Debug"
 
-	SSzas.settings.SetDefault(mob)
+	zas_settings.SetDefault(mob)
 */
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 53cacb34388..6a1dc3e08a2 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -41,7 +41,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	return igniting
 
 /zone/proc/process_fire()
-	var/datum/gas_mixture/burn_gas = air.removeRatio(SSzas.settings.fire_consumption_rate, fire_tiles.len)
+	var/datum/gas_mixture/burn_gas = air.removeRatio(zas_settings.fire_consumption_rate, fire_tiles.len)
 
 	var/firelevel = burn_gas.react(src, fire_tiles, force_burn = 1, no_check = 1)
 
@@ -195,7 +195,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 				//Spread the fire.
 				//Atmos Canpass probably needs to be checked here
-				if(prob(50 + 50 * (firelevel/SSzas.settings.fire_firelevel_multiplier)))
+				if(prob(50 + 50 * (firelevel/zas_settings.fire_firelevel_multiplier)))
 					enemy_tile.create_fire(firelevel)
 
 			else
@@ -222,7 +222,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	SSzas.active_hotspots.Add(src)
 
 /obj/effect/hotspot/proc/fire_color(env_temperature)
-	var/temperature = max(4000*sqrt(firelevel/SSzas.settings.fire_firelevel_multiplier), env_temperature)
+	var/temperature = max(4000*sqrt(firelevel/zas_settings.fire_firelevel_multiplier), env_temperature)
 	return heat2color(temperature)
 
 /obj/effect/hotspot/Destroy()
@@ -288,12 +288,12 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit
 
 		//vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).)
-		var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume*group_multiplier) / SSzas.settings.fire_firelevel_multiplier
+		var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume*group_multiplier) / zas_settings.fire_firelevel_multiplier
 		var/min_burn = 0.30*volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast
 		var/gas_reaction_progress = min(max(min_burn, gas_firelevel*gas_fuel)*FIRE_GAS_BURNRATE_MULT, gas_fuel)
 
 		//liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area.
-		var/liquid_firelevel = calculate_firelevel(liquid_fuel, total_oxidizers, reaction_limit, 0) / SSzas.settings.fire_firelevel_multiplier
+		var/liquid_firelevel = calculate_firelevel(liquid_fuel, total_oxidizers, reaction_limit, 0) / zas_settings.fire_firelevel_multiplier
 		var/liquid_reaction_progress = min((liquid_firelevel*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT, liquid_fuel)
 
 		var/firelevel = (gas_fuel*gas_firelevel + liquid_fuel*liquid_firelevel)/total_fuel
@@ -334,8 +334,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())
 
 		//calculate the energy produced by the reaction and then set the new temperature of the mix
-		temperature = (starting_energy + SSzas.settings.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / getHeatCapacity()
-		updateValues()
+		temperature = (starting_energy + zas_settings.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / getHeatCapacity()
+		AIR_UPDATE_VALUES(src)
 
 		#ifdef FIREDBG
 		log_admin("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
@@ -369,7 +369,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/oil/liquid)
 	. = 0
 	for(var/g in gas)
-		if(xgm_gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * SSzas.settings.fire_consumption_rate) >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * zas_settings.fire_consumption_rate) >= 0.1)
 			. = 1
 			break
 
@@ -381,11 +381,11 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	. = 0
 	for(var/g in gas)
-		if(xgm_gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * SSzas.settings.fire_consumption_rate) >= 0.1)
+		if(xgm_gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * zas_settings.fire_consumption_rate) >= 0.1)
 			. = 1
 			break
 
-//returns a value between 0 and SSzas.settings.fire_firelevel_multiplier
+//returns a value between 0 and zas_settings.fire_firelevel_multiplier
 /datum/gas_mixture/proc/calculate_firelevel(total_fuel, total_oxidizers, reaction_limit, gas_volume)
 	//Calculates the firelevel based on one equation instead of having to do this multiple times in different areas.
 	var/firelevel = 0
@@ -410,13 +410,13 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		#endif
 
 		//toss everything together -- should produce a value between 0 and fire_firelevel_multiplier
-		firelevel = SSzas.settings.fire_firelevel_multiplier * mix_multiplier * damping_multiplier
+		firelevel = zas_settings.fire_firelevel_multiplier * mix_multiplier * damping_multiplier
 
 	return max( 0, firelevel)
 
 
 /mob/living/proc/FireBurn(firelevel, last_temperature, pressure)
-	var/mx = 5 * firelevel/SSzas.settings.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
+	var/mx = 5 * firelevel/zas_settings.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
 	apply_damage(2.5*mx, BURN)
 	return mx
 
@@ -446,7 +446,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			if(C.body_parts_covered & ARMS)
 				arms_exposure = 0
 	//minimize this for low-pressure environments
-	var/mx = 5 * firelevel/SSzas.settings.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
+	var/mx = 5 * firelevel/zas_settings.fire_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1)
 
 	//Always check these damage procs first if fire damage isn't working. They're probably what's wrong.
 
diff --git a/code/modules/atmospherics/ZAS/Plasma.dm b/code/modules/atmospherics/ZAS/Plasma.dm
index c494c753e0d..faa22877f91 100644
--- a/code/modules/atmospherics/ZAS/Plasma.dm
+++ b/code/modules/atmospherics/ZAS/Plasma.dm
@@ -81,7 +81,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 	//Handles all the bad things phoron can do.
 
 	//Contamination
-	if(SSzas.settings.plc.cloth_contamination)
+	if(zas_settings.plc.cloth_contamination)
 		contaminate()
 
 	//Anything else requires them to not be dead.
@@ -89,7 +89,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 		return
 
 	//Burn skin if exposed.
-	if(SSzas.settings.plc.skin_burns)
+	if(zas_settings.plc.skin_burns)
 		if(!pl_head_protected() || !pl_suit_protected())
 			//burn_skin(0.75)
 			if(prob(20))
@@ -97,13 +97,13 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 			updatehealth()
 
 	//Burn eyes if exposed.
-	if(SSzas.settings.plc.eye_burns)
+	if(zas_settings.plc.eye_burns)
 		if(!is_eyes_covered())
 			burn_eyes()
 
 	//Genetic Corruption
-	if(SSzas.settings.plc.genetic_corruption)
-		if(rand(1,10000) < SSzas.settings.plc.genetic_corruption)
+	if(zas_settings.plc.genetic_corruption)
+		if(rand(1,10000) < zas_settings.plc.genetic_corruption)
 			easy_random_mutate(NEGATIVE)
 			to_chat(src, "<span class='danger'>High levels of toxins cause you to spontaneously mutate!</span>")
 			domutcheck(src, null)
@@ -125,7 +125,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 /mob/living/carbon/human/proc/pl_head_protected()
 	//Checks if the head is adequately sealed.
 	if(head)
-		if(SSzas.settings.plc.plasmaguard_only)
+		if(zas_settings.plc.plasmaguard_only)
 			if(head.obj_flags & PLASMAGUARD)
 				return TRUE
 		else if(is_eyes_covered())
@@ -140,15 +140,15 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 			continue
 		if(istype(protection, /obj/item/clothing))
 			var/obj/item/clothing/clothing_item = protection
-			if(SSzas.settings.plc.plasmaguard_only && !((clothing_item.clothing_flags & THICKMATERIAL) || (clothing_item.clothing_flags & GAS_FILTERING) || (clothing_item.obj_flags & PLASMAGUARD)))
+			if(zas_settings.plc.plasmaguard_only && !((clothing_item.clothing_flags & THICKMATERIAL) || (clothing_item.clothing_flags & GAS_FILTERING) || (clothing_item.obj_flags & PLASMAGUARD)))
 				return FALSE
 
-		else if(SSzas.settings.plc.plasmaguard_only && !(protection.obj_flags & PLASMAGUARD))
+		else if(zas_settings.plc.plasmaguard_only && !(protection.obj_flags & PLASMAGUARD))
 			return FALSE
 
 		coverage |= protection.body_parts_covered
 
-	if(SSzas.settings.plc.plasmaguard_only)
+	if(zas_settings.plc.plasmaguard_only)
 		return TRUE
 
 	return (~(coverage) & (CHEST|LEGS|FEET|ARMS|HANDS) == 0)
@@ -166,7 +166,7 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 /turf/Entered(obj/item/I)
 	. = ..()
 	//Items that are in plasma, but not on a mob, can still be contaminated.
-	if(istype(I) && SSzas && SSzas.settings?.plc.cloth_contamination && I.can_contaminate())
+	if(istype(I) && SSzas && zas_settings?.plc.cloth_contamination && I.can_contaminate())
 		var/datum/gas_mixture/env = return_air()
 		if(!env)
 			return
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 162fc4e9389..f2443e22dae 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -344,12 +344,15 @@
 /turf/return_air()
 	RETURN_TYPE(/datum/gas_mixture)
 	if(!simulated)
+		if(air)
+			return air
 		var/datum/gas_mixture/GM = new
 
 		if(initial_gas)
 			GM.gas = initial_gas.Copy()
 		GM.temperature = temperature
-		GM.updateValues()
+		AIR_UPDATE_VALUES(GM)
+		air = GM
 
 	if(zone)
 		if(!zone.invalid)
@@ -370,7 +373,7 @@
 	air.temperature = temperature
 	if(initial_gas)
 		air.gas = initial_gas.Copy()
-	air.updateValues()
+	AIR_UPDATE_VALUES(air)
 
 /turf/proc/c_copy_air()
 	if(!air) air = new/datum/gas_mixture
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 6b46f1c169e..23f9a084f58 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -122,8 +122,8 @@
 /datum/xgm_gas/hydrogen/deuterium
 	id = GAS_DEUTERIUM
 	name = "Deuterium"
-	symbol_html = "D"
-	symbol = "D"
+	symbol_html = "<sup>2</sup>H"
+	symbol = "2H"
 
 /datum/xgm_gas/hydrogen/tritium
 	id = GAS_TRITIUM
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 13237f5fd7a..d77064fa71f 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -41,7 +41,7 @@
 		gas[gasid] += moles
 
 	if(update)
-		updateValues()
+		AIR_UPDATE_VALUES(src)
 
 /datum/gas_mixture/proc/setGasMoles(gasid, moles, update = TRUE, divide_among_group = FALSE)
 	if(moles == 0)
@@ -54,7 +54,7 @@
 		gas[gasid] = moles
 
 	if(update)
-		updateValues()
+		AIR_UPDATE_VALUES(src)
 
 //Same as adjustGas(), but takes a temperature which is mixed in with the gas.
 /datum/gas_mixture/proc/adjustGasWithTemp(gasid, moles, temp, update = 1)
@@ -74,7 +74,7 @@
 		gas[gasid] += moles
 
 	if(update)
-		updateValues()
+		AIR_UPDATE_VALUES(src)
 
 
 //Variadic version of adjustGas().  Takes any number of gas and mole pairs and applies them.
@@ -84,7 +84,7 @@
 	for(var/i in 1 to args.len-1 step 2)
 		adjustGas(args[i], args[i+1], update = 0)
 
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 
 
 //Variadic version of adjustGasWithTemp().  Takes any number of gas, mole and temperature associations and applies them.
@@ -94,7 +94,7 @@
 	for(var/i in 1 to args.len-1 step 3)
 		adjustGasWithTemp(args[i], args[i + 1], args[i + 2], update = 0)
 
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 
 
 //Merges all the gas from another mixture into this one.  Respects group_multipliers and adjusts temperature correctly.
@@ -117,7 +117,7 @@
 		for(var/g in giver.gas)
 			gas[g] += giver.gas[g]
 
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 
 // Used to equalize the mixture between two zones before sleeping an edge.
 /datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer)
@@ -139,8 +139,8 @@
 		temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap)
 	sharer.temperature = temperature
 
-	updateValues()
-	sharer.updateValues()
+	AIR_UPDATE_VALUES(src)
+	AIR_UPDATE_VALUES(sharer)
 
 	return 1
 
@@ -209,19 +209,15 @@
 	var/safe_temp = max(temperature, TCMB) // We're about to divide by this.
 	return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * safe_temp)) * (molar_mass*specific_heat*safe_temp)**(2/3) + 1 ) +  15 )
 
-	//alternative, simpler equation
-	//var/partial_pressure = gas[gasid] * R_IDEAL_GAS_EQUATION * temperature / volume
-	//return R_IDEAL_GAS_EQUATION * ( log (1 + IDEAL_GAS_ENTROPY_CONSTANT/partial_pressure) + 20 )
-
-
-//Updates the total_moles count and trims any empty gases.
+///Updates the total_moles count and trims any empty gases. DO NOT USE. USE AIR_UPDATE_VALUES(air)!!!
 /datum/gas_mixture/proc/updateValues()
+	var/list/cached_gas = gas
 	total_moles = 0
-	for(var/g in gas)
-		if(gas[g] <= 0)
-			gas -= g
+	for(var/g in cached_gas)
+		if(cached_gas[g] <= 0)
+			cached_gas -= g
 		else
-			total_moles += gas[g]
+			total_moles += cached_gas[g]
 
 
 //Returns the pressure of the gas mix.  Only accurate if there have been no gas modifications since updateValues() has been called.
@@ -248,8 +244,8 @@
 			gas[g] = 0
 
 	removed.temperature = temperature
-	updateValues()
-	removed.updateValues()
+	AIR_UPDATE_VALUES(src)
+	AIR_UPDATE_VALUES(removed)
 
 	return removed
 
@@ -271,8 +267,8 @@
 
 	removed.temperature = temperature
 	removed.volume = volume * group_multiplier / out_group_multiplier
-	updateValues()
-	removed.updateValues()
+	AIR_UPDATE_VALUES(src)
+	AIR_UPDATE_VALUES(removed)
 
 	return removed
 
@@ -300,8 +296,8 @@
 			gas[g] -= removed.gas[g] / group_multiplier
 
 	removed.temperature = temperature
-	updateValues()
-	removed.updateValues()
+	AIR_UPDATE_VALUES(src)
+	AIR_UPDATE_VALUES(removed)
 
 	return removed
 
@@ -323,7 +319,7 @@
 	temperature = sample.temperature
 	for(var/id in sample_gas)
 		cached_gas[id] = sample_gas[id] * partial
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 	return 1
 
 
@@ -402,7 +398,7 @@
 	for(var/g in right_side.gas)
 		gas[g] += right_side.gas[g]
 
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 	return 1
 
 
@@ -411,7 +407,7 @@
 	for(var/g in right_side.gas)
 		gas[g] -= right_side.gas[g]
 
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 	return 1
 
 
@@ -420,7 +416,7 @@
 	for(var/g in gas)
 		gas[g] *= factor
 
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 	return 1
 
 
@@ -429,7 +425,7 @@
 	for(var/g in gas)
 		gas[g] /= factor
 
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 	return 1
 
 
@@ -474,8 +470,8 @@
 	if(!one_way)
 		other.temperature = max(0, (other.temperature - temp_avg) * (1-ratio) + temp_avg)
 
-	updateValues()
-	other.updateValues()
+	AIR_UPDATE_VALUES(src)
+	AIR_UPDATE_VALUES(other)
 
 	return compare(other)
 
@@ -516,14 +512,14 @@
 	return gas
 
 /datum/gas_mixture/proc/returnVisuals()
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 	checkTileGraphic()
 	return graphic
 
 /datum/gas_mixture/proc/copy()
 	RETURN_TYPE(/datum/gas_mixture)
 	var/datum/gas_mixture/new_gas = new
-	updateValues()
+	AIR_UPDATE_VALUES(src)
 	new_gas.gas = src.gas
 	new_gas.temperature = src.temperature
 	new_gas.total_moles = src.total_moles
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 6b3a544fdea..d3e84ca15ee 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -157,7 +157,7 @@ Class Procs:
 	if(air.temperature >= PHORON_FLASHPOINT && !(src in SSzas.active_fire_zones) && air.check_combustability() && contents.len)
 		var/turf/T = pick(contents)
 		if(istype(T))
-			T.create_fire(SSzas.settings.fire_firelevel_multiplier)
+			T.create_fire(zas_settings.fire_firelevel_multiplier)
 
 	// Update gas overlays.
 	if(air.checkTileGraphic(graphic_add, graphic_remove))
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index d4106022c69..59c79cc6501 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -167,8 +167,8 @@
 		power_draw += specific_power_gas[g]*transfer_moles
 
 	//Remix the resulting gases
-	sink.updateValues()
-	source.updateValues()
+	AIR_UPDATE_VALUES(sink)
+	AIR_UPDATE_VALUES(source)
 
 	return power_draw
 
@@ -231,8 +231,8 @@
 		else
 			unfiltered_power_used += power_used
 
-	sink_filtered.updateValues()
-	removed.updateValues()
+	AIR_UPDATE_VALUES(sink_filtered)
+	AIR_UPDATE_VALUES(removed)
 
 	sink_clean.merge(removed)
 
@@ -308,7 +308,7 @@
 		else
 			unfiltered_power_used += power_used
 
-	removed.updateValues()
+	AIR_UPDATE_VALUES(removed)
 
 	var/power_draw = unfiltered_power_used
 	for (var/datum/gas_mixture/sink_filtered in filtered_power_used)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 3119924232c..8852d634b82 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -132,7 +132,7 @@
 
 	check_breath(breath)
 	if(breath.total_moles)
-		breath.updateValues()
+		AIR_UPDATE_VALUES(breath)
 		loc.assume_air(breath)
 
 /mob/living/carbon/proc/has_smoke_protection()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 2390d9e5664..308c1b70549 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -7,6 +7,7 @@
 	gender = PLURAL //placeholder
 	living_flags = MOVES_ON_ITS_OWN
 	status_flags = CANPUSH
+	simulated = FALSE
 
 	var/icon_living = ""
 	///Icon when the animal is dead. Don't use animated icons for this.
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index c0809b2f8c0..8ccf4824e59 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -261,7 +261,7 @@
 
 
 	//-- TRACES --//
-	breath.updateValues()
+	AIR_UPDATE_VALUES(breath)
 	if(breath.total_moles) // If there's some other shit in the air lets deal with it here.
 
 	// N2O
@@ -439,7 +439,6 @@
 		// Activate mood on first flag, remove on second, do nothing on third.
 
 		handle_breath_temperature(breath, breather)
-		breath.updateValues()
 
 	return TRUE
 

From b5229d57282790c6640db661581a938de5b103a3 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 14 May 2022 21:29:17 -0400
Subject: [PATCH 090/200] lets see if this works i guess

---
 code/controllers/subsystem/minor_mapping.dm  |   2 +-
 code/modules/unit_tests/_unit_tests.dm       |   1 +
 code/modules/unit_tests/atmos_moles_tests.dm | 267 +++++++++++++++++++
 3 files changed, 269 insertions(+), 1 deletion(-)
 create mode 100644 code/modules/unit_tests/atmos_moles_tests.dm

diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm
index 022ab58fa61..153eff015ee 100644
--- a/code/controllers/subsystem/minor_mapping.dm
+++ b/code/controllers/subsystem/minor_mapping.dm
@@ -30,7 +30,7 @@ SUBSYSTEM_DEF(minor_mapping)
 				mouse.forceMove(proposed_turf)
 		else
 			mouse = new /mob/living/simple_animal/hostile/regalrat/controlled(proposed_turf)
-		if(proposed_turf.air.hasGas(GAS_OXYGEN, 5))
+		if(proposed_turf.return_air().hasGas(GAS_OXYGEN, 5))
 			num_mice -= 1
 			mouse = null
 
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 793e54e4364..b51d8975c70 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -46,6 +46,7 @@
 #include "achievements.dm"
 #include "anchored_mobs.dm"
 #include "anonymous_themes.dm"
+#include "atmos_moles_tests.dm"
 #include "autowiki.dm"
 #include "bespoke_id.dm"
 #include "binary_insert.dm"
diff --git a/code/modules/unit_tests/atmos_moles_tests.dm b/code/modules/unit_tests/atmos_moles_tests.dm
new file mode 100644
index 00000000000..28e68258a8b
--- /dev/null
+++ b/code/modules/unit_tests/atmos_moles_tests.dm
@@ -0,0 +1,267 @@
+#define ALL_GASIDS xgm_gas_data.gases
+
+/datum/unit_test/atmos_machinery
+	//template = /datum/unit_test/atmos_machinery
+	var/list/test_cases = list()
+
+/datum/unit_test/atmos_machinery/proc/create_gas_mixes(gas_mix_data)
+	var/list/gas_mixes = list()
+	for(var/mix_name in gas_mix_data)
+		var/list/mix_data = gas_mix_data[mix_name]
+
+		var/datum/gas_mixture/gas_mix = new (CELL_VOLUME, mix_data["temperature"])
+
+		var/list/initial_gas = mix_data["initial_gas"]
+		if(initial_gas.len)
+			var/list/gas_args = list()
+			for(var/gasid in initial_gas)
+				gas_args += gasid
+				gas_args += initial_gas[gasid]
+			gas_mix.adjustMultipleGases(arglist(gas_args))
+
+		gas_mixes[mix_name] = gas_mix
+	return gas_mixes
+
+/datum/unit_test/atmos_machinery/proc/gas_amount_changes(var/list/before_gas_mixes, var/list/after_gas_mixes)
+	var/list/result = list()
+	for(var/mix_name in before_gas_mixes & after_gas_mixes)
+		var/change = list()
+
+		var/datum/gas_mixture/before = before_gas_mixes[mix_name]
+		var/datum/gas_mixture/after = after_gas_mixes[mix_name]
+
+		var/list/all_gases = before.gas | after.gas
+		for(var/gasid in all_gases)
+			change[gasid] = after.getGroupGas(gasid) - before.getGroupGas(gasid)
+
+		result[mix_name] = change
+
+	return result
+
+/datum/unit_test/atmos_machinery/proc/check_moles_conserved(var/case_name, var/list/before_gas_mixes, var/list/after_gas_mixes)
+	var/failed = FALSE
+	for(var/gasid in xgm_gas_data.gases)
+		var/before = 0
+		for(var/gasmix in before_gas_mixes)
+			var/datum/gas_mixture/G = before_gas_mixes[gasmix]
+			before += G.getGroupGas(gasid)
+
+		var/after = 0
+		for(var/gasmix in after_gas_mixes)
+			var/datum/gas_mixture/G = after_gas_mixes[gasmix]
+			after += G.getGroupGas(gasid)
+
+		if(abs(before - after) > ATMOS_PRECISION)
+			Fail("expected [before] moles of [gasid], found [after] moles.")
+			failed |= TRUE
+
+	if(!failed)
+		pass("conserved moles of each gas ID.")
+
+/datum/unit_test/atmos_machinery/conserve_moles
+	//template = /datum/unit_test/atmos_machinery/conserve_moles
+	test_cases = list(
+		uphill = list(
+			source = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 5,
+					GAS_NITROGEN       = 10,
+					GAS_CO2 = 5,
+					GAS_PHORON         = 10,
+					GAS_N2O = 5,
+				),
+				temperature = T20C - 5,
+			),
+			sink = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 10,
+					GAS_NITROGEN       = 20,
+					GAS_CO2 = 10,
+					GAS_PHORON         = 20,
+					GAS_N2O = 10,
+				),
+				temperature = T20C + 5,
+			)
+		),
+		downhill = list(
+			source = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 10,
+					GAS_NITROGEN       = 20,
+					GAS_CO2 = 10,
+					GAS_PHORON         = 20,
+					GAS_N2O = 10,
+				),
+				temperature = T20C + 5,
+			),
+			sink = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 5,
+					GAS_NITROGEN       = 10,
+					GAS_CO2 = 5,
+					GAS_PHORON         = 10,
+					GAS_N2O = 5,
+				),
+				temperature = T20C - 5,
+			),
+		),
+		flat = list(
+			source = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 10,
+					GAS_NITROGEN       = 20,
+					GAS_CO2 = 10,
+					GAS_PHORON         = 20,
+					GAS_N2O = 10,
+				),
+				temperature = T20C,
+			),
+			sink = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 10,
+					GAS_NITROGEN       = 20,
+					GAS_CO2 = 10,
+					GAS_PHORON         = 20,
+					GAS_N2O = 10,
+				),
+				temperature = T20C,
+			),
+		),
+		vacuum_sink = list(
+			source = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 10,
+					GAS_NITROGEN       = 20,
+					GAS_CO2 = 10,
+					GAS_PHORON         = 20,
+					GAS_N2O = 10,
+				),
+				temperature = T20C,
+			),
+			sink = list(
+				initial_gas = list(),
+				temperature = 0,
+			),
+		),
+		vacuum_source = list(
+			source = list(
+				initial_gas = list(),
+				temperature = 0,
+			),
+			sink = list(
+				initial_gas = list(
+					GAS_OXYGEN         = 10,
+					GAS_NITROGEN       = 20,
+					GAS_CO2 = 10,
+					GAS_PHORON         = 20,
+					GAS_N2O = 10,
+				),
+				temperature = T20C,
+			),
+		),
+	)
+
+
+/datum/unit_test/atmos_machinery/conserve_moles/pump_gas
+	//name = "ATMOS MACHINERY: pump_gas() Conserves Moles"
+
+/datum/unit_test/atmos_machinery/conserve_moles/pump_gas/Run()
+	for(var/case_name in test_cases)
+		var/gas_mix_data = test_cases[case_name]
+		var/list/before_gas_mixes = create_gas_mixes(gas_mix_data)
+		var/list/after_gas_mixes = create_gas_mixes(gas_mix_data)
+
+		pump_gas(after_gas_mixes["source"], after_gas_mixes["sink"], null, INFINITY)
+
+		check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes)
+
+	return 1
+
+/datum/unit_test/atmos_machinery/conserve_moles/pump_gas_passive
+	//name = "ATMOS MACHINERY: pump_gas_passive() Conserves Moles"
+
+/datum/unit_test/atmos_machinery/conserve_moles/pump_gas_passive/Run()
+	for(var/case_name in test_cases)
+		var/gas_mix_data = test_cases[case_name]
+		var/list/before_gas_mixes = create_gas_mixes(gas_mix_data)
+		var/list/after_gas_mixes = create_gas_mixes(gas_mix_data)
+
+		pump_gas_passive(after_gas_mixes["source"], after_gas_mixes["sink"], null)
+
+		check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes)
+
+	return 1
+
+/datum/unit_test/atmos_machinery/conserve_moles/scrub_gas
+	//name = "ATMOS MACHINERY: scrub_gas() Conserves Moles"
+
+/datum/unit_test/atmos_machinery/conserve_moles/scrub_gas/Run()
+	var/list/filtering = xgm_gas_data.gases
+
+	for(var/case_name in test_cases)
+		var/gas_mix_data = test_cases[case_name]
+		var/list/before_gas_mixes = create_gas_mixes(gas_mix_data)
+		var/list/after_gas_mixes = create_gas_mixes(gas_mix_data)
+
+		scrub_gas(filtering, after_gas_mixes["source"], after_gas_mixes["sink"], null, INFINITY)
+
+		check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes)
+
+	return 1
+
+/datum/unit_test/atmos_machinery/conserve_moles/filter_gas
+//	name = "ATMOS MACHINERY: filter_gas() Conserves Moles"
+
+/datum/unit_test/atmos_machinery/conserve_moles/filter_gas/Run()
+	var/list/filtering = xgm_gas_data.gases
+
+	for(var/case_name in test_cases)
+		var/gas_mix_data = test_cases[case_name]
+		var/list/before_gas_mixes = create_gas_mixes(gas_mix_data)
+		var/list/after_gas_mixes = create_gas_mixes(gas_mix_data)
+
+		filter_gas(filtering, after_gas_mixes["source"], after_gas_mixes["sink"], after_gas_mixes["source"], null, INFINITY)
+
+		check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes)
+
+	return 1
+
+/datum/unit_test/atmos_machinery/conserve_moles/filter_gas_multi
+	//name = "ATMOS MACHINERY: filter_gas_multi() Conserves Moles"
+
+/datum/unit_test/atmos_machinery/conserve_moles/filter_gas_multi/Run()
+	for(var/case_name in test_cases)
+		var/gas_mix_data = test_cases[case_name]
+		var/list/before_gas_mixes = create_gas_mixes(gas_mix_data)
+		var/list/after_gas_mixes = create_gas_mixes(gas_mix_data)
+
+		var/list/filtering = list()
+		for(var/gasid in xgm_gas_data.gases)
+			filtering[gasid] = after_gas_mixes["sink"] //just filter everything to sink
+
+		filter_gas_multi(filtering, after_gas_mixes["source"], after_gas_mixes["sink"], null, INFINITY)
+
+		check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes)
+
+	return 1
+
+/datum/unit_test/atmos_machinery/conserve_moles/mix_gas
+	//name = "ATMOS MACHINERY: mix_gas() Conserves Moles"
+
+/datum/unit_test/atmos_machinery/conserve_moles/mix_gas/Run()
+	for(var/case_name in test_cases)
+		var/gas_mix_data = test_cases[case_name]
+		var/list/before_gas_mixes = create_gas_mixes(gas_mix_data)
+		var/list/after_gas_mixes = create_gas_mixes(gas_mix_data)
+
+		var/list/mix_sources = list()
+		for(var/gasid in ALL_GASIDS)
+			var/datum/gas_mixture/mix_source = after_gas_mixes["sink"]
+			mix_sources[mix_source] = 1.0/xgm_gas_data.gases.len //doesn't work as a macro for some reason
+
+		mix_gas(null, mix_sources, after_gas_mixes["sink"], null, INFINITY)
+
+		check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes)
+
+	return 1
+#undef ALL_GASIDS

From f2d7edee6539a8af300eab502c0c2971920b99c6 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 14 May 2022 22:05:51 -0400
Subject: [PATCH 091/200] Unit Test BS

---
 code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm |  4 ++--
 code/modules/atmospherics/ZAS/atmos_primitives.dm    | 12 +-----------
 code/modules/unit_tests/atmos_moles_tests.dm         |  7 ++++++-
 3 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index d77064fa71f..f2b940afcbb 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -240,8 +240,8 @@
 	for(var/g in gas)
 		removed.gas[g] = QUANTIZE((gas[g] / total_moles) * amount)
 		gas[g] -= removed.gas[g] / group_multiplier
-		if(gas[g] <= ATMOS_PRECISION) //Removing floating point errors from the equation
-			gas[g] = 0
+		/*if(gas[g] <= ATMOS_PRECISION) //Removing floating point errors from the equation
+			gas[g] = 0*/
 
 	removed.temperature = temperature
 	AIR_UPDATE_VALUES(src)
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 59c79cc6501..db72e47c9f7 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -241,7 +241,7 @@
 //For omni devices. Instead filtering is an associative list mapping gasids to gas mixtures.
 //I don't like the copypasta, but I decided to keep both versions of gas filtering as filter_gas is slightly faster (doesn't create as many temporary lists, doesn't call updateValues() as much)
 //filter_gas can be removed and replaced with this proc if need be.
-/proc/filter_gas_multi(obj/machinery/M, list/filtering, datum/gas_mixture/source, datum/gas_mixture/sink_clean, total_transfer_moles = null, available_power = null)
+/proc/filter_gas_multi(list/filtering, datum/gas_mixture/source, datum/gas_mixture/sink_clean, total_transfer_moles = null, available_power = null)
 	if (source.total_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
 		return -1
 
@@ -279,16 +279,6 @@
 	if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
 		return -1
 
-	/*
-	//Update Flow Rate var
-	if (istype(M, /obj/machinery/atmospherics))
-		var/obj/machinery/atmospherics/A = M
-		A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
-	if (istype(M, /obj/machinery/portable_atmospherics))
-		var/obj/machinery/portable_atmospherics/P = M
-		P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
-	*/
-
 	var/datum/gas_mixture/removed = source.remove(total_transfer_moles)
 	if (!removed) //Just in case
 		return -1
diff --git a/code/modules/unit_tests/atmos_moles_tests.dm b/code/modules/unit_tests/atmos_moles_tests.dm
index 28e68258a8b..5a3c108f915 100644
--- a/code/modules/unit_tests/atmos_moles_tests.dm
+++ b/code/modules/unit_tests/atmos_moles_tests.dm
@@ -4,6 +4,9 @@
 	//template = /datum/unit_test/atmos_machinery
 	var/list/test_cases = list()
 
+/datum/unit_test/atmos_machinery/Run()
+	return
+
 /datum/unit_test/atmos_machinery/proc/create_gas_mixes(gas_mix_data)
 	var/list/gas_mixes = list()
 	for(var/mix_name in gas_mix_data)
@@ -161,6 +164,8 @@
 		),
 	)
 
+/datum/unit_test/atmos_machinery/conserve_moles/Run()
+	return
 
 /datum/unit_test/atmos_machinery/conserve_moles/pump_gas
 	//name = "ATMOS MACHINERY: pump_gas() Conserves Moles"
@@ -259,7 +264,7 @@
 			var/datum/gas_mixture/mix_source = after_gas_mixes["sink"]
 			mix_sources[mix_source] = 1.0/xgm_gas_data.gases.len //doesn't work as a macro for some reason
 
-		mix_gas(null, mix_sources, after_gas_mixes["sink"], null, INFINITY)
+		mix_gas(mix_sources, after_gas_mixes["sink"], null, INFINITY)
 
 		check_moles_conserved(case_name, before_gas_mixes, after_gas_mixes)
 

From 5330368aaa4946fd04069ebf97642dea6de5fef8 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 14 May 2022 22:24:31 -0400
Subject: [PATCH 092/200] linter appeasement

---
 code/modules/unit_tests/atmos_moles_tests.dm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/modules/unit_tests/atmos_moles_tests.dm b/code/modules/unit_tests/atmos_moles_tests.dm
index 5a3c108f915..927c3a68655 100644
--- a/code/modules/unit_tests/atmos_moles_tests.dm
+++ b/code/modules/unit_tests/atmos_moles_tests.dm
@@ -25,7 +25,7 @@
 		gas_mixes[mix_name] = gas_mix
 	return gas_mixes
 
-/datum/unit_test/atmos_machinery/proc/gas_amount_changes(var/list/before_gas_mixes, var/list/after_gas_mixes)
+/datum/unit_test/atmos_machinery/proc/gas_amount_changes(list/before_gas_mixes, list/after_gas_mixes)
 	var/list/result = list()
 	for(var/mix_name in before_gas_mixes & after_gas_mixes)
 		var/change = list()
@@ -41,7 +41,7 @@
 
 	return result
 
-/datum/unit_test/atmos_machinery/proc/check_moles_conserved(var/case_name, var/list/before_gas_mixes, var/list/after_gas_mixes)
+/datum/unit_test/atmos_machinery/proc/check_moles_conserved(case_name, list/before_gas_mixes, list/after_gas_mixes)
 	var/failed = FALSE
 	for(var/gasid in xgm_gas_data.gases)
 		var/before = 0

From 9ed2125698db51662d059002e664284cc0b230d8 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 14 May 2022 22:30:02 -0400
Subject: [PATCH 093/200] TGM format

---
 _maps/map_files/debug/atmos_mintest.dmm | 2783 +++++++++++++++++++++--
 1 file changed, 2590 insertions(+), 193 deletions(-)

diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
index a4e9a68562a..1ed2380d184 100644
--- a/_maps/map_files/debug/atmos_mintest.dmm
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -1,196 +1,2593 @@
-"aa" = (/turf/open/space/basic,/area/space)
-"ab" = (/turf/closed/wall/r_wall,/area/hallway/primary/central)
-"ac" = (/obj/effect/spawner/structure/window/plasma,/turf/open/floor/plating,/area/hallway/primary/central)
-"ad" = (/obj/machinery/door/poddoor{id = "c1vent"; name = "c1vent"},/turf/open/floor/plating,/area/hallway/primary/central)
-"ae" = (/obj/machinery/door/poddoor{id = "c2vent"; name = "c2vent"},/turf/open/floor/plating,/area/hallway/primary/central)
-"af" = (/obj/machinery/door/poddoor{id = "c3vent"; name = "c3vent"},/turf/open/floor/plating,/area/hallway/primary/central)
-"ag" = (/turf/open/floor/iron,/area/hallway/primary/central)
-"ah" = (/turf/open/floor/engine/plasma,/area/hallway/primary/central)
-"ai" = (/turf/open/floor/engine/airless,/area/hallway/primary/central)
-"aj" = (/turf/open/floor/engine/n2o,/area/hallway/primary/central)
-"ak" = (/obj/item/card/id/advanced/debug,/obj/structure/rack,/turf/open/floor/iron,/area/hallway/primary/central)
-"al" = (/obj/machinery/power/rtg/debug,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"am" = (/obj/machinery/door/poddoor{id = "c1toc2"; name = "c1toc2"},/turf/open/floor/plating,/area/hallway/primary/central)
-"an" = (/obj/machinery/door/poddoor{id = "c2toc3"; name = "c2toc3"},/turf/open/floor/plating,/area/hallway/primary/central)
-"ao" = (/obj/effect/landmark/latejoin,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
-"ap" = (/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"aq" = (/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
-"ar" = (/obj/machinery/atmospherics/miner/plasma,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
-"as" = (/obj/machinery/atmospherics/miner/n2o,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
-"at" = (/obj/effect/landmark/observer_start,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
-"au" = (/obj/effect/turf_decal/trimline,/obj/machinery/air_sensor/plasma_tank,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
-"av" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/airless,/area/hallway/primary/central)
-"aw" = (/obj/effect/turf_decal/trimline,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
-"ax" = (/obj/effect/turf_decal/bot_red,/obj/effect/landmark/start/assistant,/turf/open/floor/iron,/area/hallway/primary/central)
-"ay" = (/obj/machinery/power/apc/auto_name/directional/east,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"az" = (/obj/machinery/meter/turf,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
-"aA" = (/obj/machinery/meter/turf,/turf/open/floor/engine/airless,/area/hallway/primary/central)
-"aB" = (/obj/machinery/meter/turf,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
-"aC" = (/obj/item/card/id/advanced/gold/captains_spare,/obj/item/card/id/advanced/gold/captains_spare,/obj/item/card/id/advanced/gold/captains_spare,/obj/structure/rack,/turf/open/floor/iron,/area/hallway/primary/central)
-"aD" = (/obj/machinery/button/door{id = "c1toc2"; name = "c1toc2"},/turf/closed/wall/r_wall,/area/hallway/primary/central)
-"aE" = (/obj/machinery/button/door{id = "c2toc3"; name = "c2toc3"},/turf/closed/wall/r_wall,/area/hallway/primary/central)
-"aF" = (/obj/machinery/button/door{id = "c1vent"; name = "c1vent"},/turf/open/floor/iron,/area/hallway/primary/central)
-"aG" = (/obj/machinery/button/door{id = "c2vent"; name = "c2vent"},/turf/open/floor/iron,/area/hallway/primary/central)
-"aH" = (/obj/machinery/button/door{id = "c3vent"; name = "c3vent"},/turf/open/floor/iron,/area/hallway/primary/central)
-"aI" = (/obj/structure/cable,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
-"aJ" = (/obj/machinery/atmospherics/components/unary/portables_connector,/turf/open/floor/iron,/area/hallway/primary/central)
-"aK" = (/obj/machinery/portable_atmospherics/canister/plasma,/turf/open/floor/iron,/area/hallway/primary/central)
-"aL" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/iron,/area/hallway/primary/central)
-"aM" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/open/floor/iron,/area/hallway/primary/central)
-"aN" = (/obj/structure/cable,/obj/machinery/power/rtg/debug,/turf/open/floor/iron,/area/hallway/primary/central)
-"aO" = (/turf/open/floor/iron/red,/area/hallway/primary/central)
-"aP" = (/obj/machinery/meter/turf,/turf/open/floor/iron,/area/hallway/primary/central)
-"aQ" = (/obj/machinery/meter/turf,/turf/open/floor/iron/red,/area/hallway/primary/central)
-"aR" = (/obj/machinery/light/floor,/turf/open/floor/iron/red,/area/hallway/primary/central)
-"aS" = (/obj/machinery/door/airlock/external/glass,/turf/open/floor/plating,/area/hallway/primary/central)
-"aT" = (/obj/machinery/gravity_generator/main/station,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"aU" = (/obj/machinery/light/floor,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
-"aV" = (/obj/machinery/light/floor,/turf/open/floor/engine/airless,/area/hallway/primary/central)
-"aW" = (/obj/machinery/light/floor,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
-"aX" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
-"aY" = (/obj/machinery/atmospherics/components/binary/pump{icon_state = "pump_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"aZ" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"ba" = (/obj/machinery/atmospherics/components/binary/volume_pump{icon_state = "volpump_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"bb" = (/obj/machinery/atmospherics/components/binary/valve{dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"bc" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 4},/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"bd" = (/obj/item/pipe_dispenser,/obj/structure/table/reinforced,/obj/item/debug/omnitool,/obj/item/door_remote/omni,/turf/open/floor/iron,/area/hallway/primary/central)
-"be" = (/obj/machinery/pipedispenser,/turf/open/floor/iron,/area/hallway/primary/central)
-"bf" = (/obj/machinery/light/floor,/turf/open/floor/plating,/area/hallway/primary/central)
-"bg" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
-"bh" = (/obj/effect/turf_decal/stripes/red/line,/turf/open/floor/plating,/area/hallway/primary/central)
-"bi" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
-"bj" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bk" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"bl" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/binary/valve/digital{icon_state = "dvalve_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"bm" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/components/binary/passive_gate{icon_state = "passgate_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"bn" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 9},/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"bo" = (/obj/machinery/portable_atmospherics/canister,/obj/effect/turf_decal/trimline/yellow/filled,/turf/open/floor/iron,/area/hallway/primary/central)
-"bp" = (/obj/machinery/light/floor,/obj/machinery/portable_atmospherics/canister,/obj/effect/turf_decal/trimline/yellow/filled,/turf/open/floor/iron,/area/hallway/primary/central)
-"bq" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/turf_decal/trimline/blue/filled,/turf/open/floor/iron,/area/hallway/primary/central)
-"br" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 6},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bs" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 1},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/obj/machinery/meter,/turf/open/floor/plating,/area/hallway/primary/central)
-"bt" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 10},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bu" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 8},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bv" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 4},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bw" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 5},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bx" = (/obj/effect/turf_decal/stripes/red/line,/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/obj/machinery/meter,/turf/open/floor/plating,/area/hallway/primary/central)
-"by" = (/obj/effect/turf_decal/stripes/red/line{icon_state = "warningline_red"; dir = 9},/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bz" = (/obj/machinery/door/airlock/public/glass,/turf/open/floor/iron,/area/hallway/primary/central)
-"bA" = (/obj/structure/cable,/obj/effect/turf_decal/arrows,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
-"bB" = (/obj/structure/cable,/turf/open/floor/plating,/area/hallway/primary/central)
-"bC" = (/obj/structure/cable,/obj/effect/turf_decal/arrows{icon_state = "arrows"; dir = 4},/turf/open/floor/iron,/area/hallway/primary/central)
-"bD" = (/obj/item/pipe_dispenser,/obj/structure/table/reinforced,/turf/open/floor/iron,/area/hallway/primary/central)
-"bE" = (/obj/item/holosign_creator/atmos,/obj/structure/table/reinforced,/turf/open/floor/iron,/area/hallway/primary/central)
-"bF" = (/obj/machinery/portable_atmospherics/pump,/turf/open/floor/iron,/area/hallway/primary/central)
-"bG" = (/obj/machinery/portable_atmospherics/scrubber,/turf/open/floor/iron,/area/hallway/primary/central)
-"bH" = (/obj/structure/table/reinforced,/obj/item/debug/omnitool,/obj/item/door_remote/omni,/turf/open/floor/iron,/area/hallway/primary/central)
-"bI" = (/obj/machinery/air_sensor/mix_tank,/turf/open/floor/engine/airless,/area/hallway/primary/central)
-"bJ" = (/obj/effect/turf_decal/trimline,/obj/machinery/air_sensor/nitrous_tank,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
-"bK" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output,/turf/open/floor/engine/plasma,/area/hallway/primary/central)
-"bL" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output,/turf/open/floor/engine/airless,/area/hallway/primary/central)
-"bM" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output,/turf/open/floor/engine/n2o,/area/hallway/primary/central)
-"bN" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bO" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bP" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,/turf/open/floor/plating,/area/hallway/primary/central)
-"bQ" = (/obj/machinery/portable_atmospherics/canister/plasma,/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,/turf/open/floor/iron,/area/hallway/primary/central)
-"bR" = (/obj/machinery/computer/atmos_control/plasma_tank,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
-"bS" = (/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,/turf/open/floor/iron,/area/hallway/primary/central)
-"bT" = (/obj/machinery/computer/atmos_control/mix_tank,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
-"bU" = (/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,/turf/open/floor/iron,/area/hallway/primary/central)
-"bV" = (/obj/machinery/computer/atmos_control/nitrous_tank,/obj/machinery/light/floor,/turf/open/floor/iron,/area/hallway/primary/central)
-"bW" = (/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,/turf/open/floor/iron,/area/hallway/primary/central)
-"bX" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
-"bY" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Power"},/turf/open/floor/iron,/area/hallway/primary/central)
-"bZ" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Main Floor"},/turf/open/floor/iron,/area/hallway/primary/central)
-"ca" = (/obj/machinery/light/floor,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"cb" = (/obj/machinery/door/airlock/public/glass{name = "Basic Equipment Tests"},/turf/open/floor/iron,/area/hallway/primary/central)
-"cc" = (/obj/effect/spawner/structure/window/plasma,/obj/machinery/atmospherics/pipe/heat_exchanging/junction{icon_state = "pipe11-3"; dir = 1},/turf/open/floor/plating,/area/hallway/primary/central)
-"cd" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/open/floor/iron,/area/hallway/primary/central)
-"ce" = (/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{icon_state = "manifold-3"; dir = 4},/turf/open/floor/iron,/area/hallway/primary/central)
-"cf" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
-"cg" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 8},/turf/open/floor/iron,/area/hallway/primary/central)
-"ch" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/open/floor/iron,/area/hallway/primary/central)
-"ci" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/h2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
-"cj" = (/obj/machinery/atmospherics/components/unary/thermomachine/freezer,/turf/open/floor/plating,/area/hallway/primary/central)
-"ck" = (/turf/open/floor/plating,/area/hallway/primary/central)
-"cl" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 1},/turf/open/floor/plating,/area/hallway/primary/central)
-"cm" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 6},/turf/open/space/basic,/area/space)
-"cn" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 10},/turf/open/space/basic,/area/space)
-"co" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple,/turf/open/space/basic,/area/space)
-"cp" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 5},/turf/open/space/basic,/area/space)
-"cq" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{icon_state = "pipe11-3"; dir = 9},/turf/open/space/basic,/area/space)
-"cr" = (/obj/machinery/atmospherics/components/unary/thermomachine/heater,/turf/open/floor/plating,/area/hallway/primary/central)
-"cs" = (/obj/structure/table/reinforced,/obj/item/analyzer,/turf/open/floor/iron,/area/hallway/primary/central)
-"ct" = (/obj/effect/landmark/start/assistant,/obj/effect/turf_decal/bot_red,/turf/open/floor/iron,/area/hallway/primary/central)
-"cu" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/obj/item/clothing/glasses/debug,/turf/open/floor/iron,/area/hallway/primary/central)
-"cv" = (/obj/structure/table/reinforced,/obj/item/debug/omnitool,/obj/item/debug/omnitool,/obj/item/debug/omnitool,/turf/open/floor/iron,/area/hallway/primary/central)
-"cw" = (/obj/structure/table/reinforced,/obj/item/gun/magic/wand/death/debug,/obj/item/gun/magic/wand/death/debug,/obj/item/gun/magic/wand/resurrection/debug,/obj/item/gun/magic/wand/safety/debug,/obj/item/gun/magic/wand/safety/debug,/turf/open/floor/iron,/area/hallway/primary/central)
-"cx" = (/obj/structure/table/reinforced,/obj/item/mod/control/pre_equipped/debug,/turf/open/floor/iron,/area/hallway/primary/central)
-"cy" = (/obj/structure/table/reinforced,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/obj/item/storage/box/debugtools,/turf/open/floor/iron,/area/hallway/primary/central)
-"cz" = (/obj/structure/cable,/obj/machinery/door/airlock/public/glass{name = "Gravgen"},/turf/open/floor/iron,/area/hallway/primary/central)
-"cA" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/open/floor/iron,/area/hallway/primary/central)
-"cB" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
-"cC" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/iron,/area/hallway/primary/central)
-"cD" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
-"cE" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/obj/machinery/portable_atmospherics/canister/plasma,/turf/open/floor/iron,/area/hallway/primary/central)
-"cF" = (/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma{icon_state = "filter_on-0_f"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
-"cG" = (/obj/machinery/atmospherics/components/binary/volume_pump,/turf/open/floor/iron,/area/hallway/primary/central)
-"cH" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 1},/obj/machinery/portable_atmospherics/canister,/turf/open/floor/iron,/area/hallway/primary/central)
-"cI" = (/obj/machinery/light/floor,/obj/machinery/atmospherics/components/unary/passive_vent,/turf/open/floor/iron,/area/hallway/primary/central)
-"cJ" = (/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/iron,/area/hallway/primary/central)
-"cK" = (/obj/machinery/door/airlock/public/glass,/obj/machinery/atmospherics/pipe/smart/simple/general/visible,/turf/open/floor/iron,/area/hallway/primary/central)
-"cL" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/open/floor/iron,/area/hallway/primary/central)
-"cM" = (/obj/machinery/light/floor,/obj/machinery/atmospherics/components/unary/passive_vent{icon_state = "passive_vent_map-3"; dir = 1},/turf/open/floor/iron,/area/hallway/primary/central)
-"cN" = (/obj/machinery/atmospherics/components/unary/heat_exchanger{icon_state = "he1"; dir = 8},/turf/open/floor/plating,/area/hallway/primary/central)
-"cO" = (/obj/machinery/atmospherics/components/unary/heat_exchanger{icon_state = "he1"; dir = 4},/turf/open/floor/plating,/area/hallway/primary/central)
-"cP" = (/obj/machinery/atmospherics/components/binary/circulator/cold{icon_state = "circ-off-0"; dir = 4},/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"cQ" = (/obj/machinery/power/generator,/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"cR" = (/obj/machinery/atmospherics/components/binary/circulator{icon_state = "circ-off-0"; dir = 8},/obj/structure/cable,/turf/open/floor/iron,/area/hallway/primary/central)
-"cS" = (/obj/machinery/atmospherics/components/unary/portables_connector{icon_state = "connector_map-3"; dir = 4},/turf/open/floor/iron,/area/hallway/primary/central)
-"cT" = (/obj/machinery/atmospherics/components/trinary/mixer,/turf/open/floor/iron,/area/hallway/primary/central)
-"cU" = (/obj/machinery/atmospherics/components/binary/tank_compressor,/turf/open/floor/iron,/area/hallway/primary/central)
-"cV" = (/obj/item/storage/toolbox/mechanical,/turf/open/floor/iron,/area/hallway/primary/central)
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/open/space/basic,
+/area/space)
+"ab" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"ac" = (
+/obj/effect/spawner/structure/window/plasma,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ad" = (
+/obj/machinery/door/poddoor{
+	id = "c1vent";
+	name = "c1vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ae" = (
+/obj/machinery/door/poddoor{
+	id = "c2vent";
+	name = "c2vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"af" = (
+/obj/machinery/door/poddoor{
+	id = "c3vent";
+	name = "c3vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ag" = (
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ah" = (
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"ai" = (
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aj" = (
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"ak" = (
+/obj/item/card/id/advanced/debug,
+/obj/structure/rack,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"al" = (
+/obj/machinery/power/rtg/debug,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"am" = (
+/obj/machinery/door/poddoor{
+	id = "c1toc2";
+	name = "c1toc2"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"an" = (
+/obj/machinery/door/poddoor{
+	id = "c2toc3";
+	name = "c2toc3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ao" = (
+/obj/effect/landmark/latejoin,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ap" = (
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aq" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ar" = (
+/obj/machinery/atmospherics/miner/plasma,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"as" = (
+/obj/machinery/atmospherics/miner/n2o,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"at" = (
+/obj/effect/landmark/observer_start,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"au" = (
+/obj/effect/turf_decal/trimline,
+/obj/machinery/air_sensor/plasma_tank,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"av" = (
+/obj/effect/turf_decal/trimline,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aw" = (
+/obj/effect/turf_decal/trimline,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"ax" = (
+/obj/effect/turf_decal/bot_red,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ay" = (
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"az" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"aA" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aB" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"aC" = (
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/structure/rack,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aD" = (
+/obj/machinery/button/door{
+	id = "c1toc2";
+	name = "c1toc2"
+	},
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"aE" = (
+/obj/machinery/button/door{
+	id = "c2toc3";
+	name = "c2toc3"
+	},
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"aF" = (
+/obj/machinery/button/door{
+	id = "c1vent";
+	name = "c1vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aG" = (
+/obj/machinery/button/door{
+	id = "c2vent";
+	name = "c2vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aH" = (
+/obj/machinery/button/door{
+	id = "c3vent";
+	name = "c3vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aI" = (
+/obj/structure/cable,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aJ" = (
+/obj/machinery/atmospherics/components/unary/portables_connector,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aK" = (
+/obj/machinery/portable_atmospherics/canister/plasma,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aL" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aM" = (
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aN" = (
+/obj/structure/cable,
+/obj/machinery/power/rtg/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aO" = (
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"aP" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aQ" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"aR" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"aS" = (
+/obj/machinery/door/airlock/external/glass,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"aT" = (
+/obj/machinery/gravity_generator/main/station,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aU" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"aV" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aW" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"aX" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"aY" = (
+/obj/machinery/atmospherics/components/binary/pump{
+	icon_state = "pump_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"aZ" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ba" = (
+/obj/machinery/atmospherics/components/binary/volume_pump{
+	icon_state = "volpump_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bb" = (
+/obj/machinery/atmospherics/components/binary/valve{
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bc" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 4
+	},
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bd" = (
+/obj/item/pipe_dispenser,
+/obj/structure/table/reinforced,
+/obj/item/debug/omnitool,
+/obj/item/door_remote/omni,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"be" = (
+/obj/machinery/pipedispenser,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bf" = (
+/obj/machinery/light/floor,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bg" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 4
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bh" = (
+/obj/effect/turf_decal/stripes/red/line,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bi" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bj" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bk" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bl" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/binary/valve/digital{
+	icon_state = "dvalve_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bm" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/binary/passive_gate{
+	icon_state = "passgate_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bn" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 9
+	},
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bo" = (
+/obj/machinery/portable_atmospherics/canister,
+/obj/effect/turf_decal/trimline/yellow/filled,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bp" = (
+/obj/machinery/light/floor,
+/obj/machinery/portable_atmospherics/canister,
+/obj/effect/turf_decal/trimline/yellow/filled,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bq" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/turf_decal/trimline/blue/filled,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"br" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 6
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bs" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 1
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bt" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 10
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bu" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 8
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bv" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 4
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bw" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 5
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bx" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"by" = (
+/obj/effect/turf_decal/stripes/red/line{
+	icon_state = "warningline_red";
+	dir = 9
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bz" = (
+/obj/machinery/door/airlock/public/glass,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bA" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/arrows,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bB" = (
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bC" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/arrows{
+	icon_state = "arrows";
+	dir = 4
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bD" = (
+/obj/item/pipe_dispenser,
+/obj/structure/table/reinforced,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bE" = (
+/obj/item/holosign_creator/atmos,
+/obj/structure/table/reinforced,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bF" = (
+/obj/machinery/portable_atmospherics/pump,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bG" = (
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bH" = (
+/obj/structure/table/reinforced,
+/obj/item/debug/omnitool,
+/obj/item/door_remote/omni,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bI" = (
+/obj/machinery/air_sensor/mix_tank,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"bJ" = (
+/obj/effect/turf_decal/trimline,
+/obj/machinery/air_sensor/nitrous_tank,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"bK" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"bL" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"bM" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"bN" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bO" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bP" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bQ" = (
+/obj/machinery/portable_atmospherics/canister/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bR" = (
+/obj/machinery/computer/atmos_control/plasma_tank,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bS" = (
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bT" = (
+/obj/machinery/computer/atmos_control/mix_tank,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bU" = (
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bV" = (
+/obj/machinery/computer/atmos_control/nitrous_tank,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bW" = (
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bX" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bY" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/public/glass{
+	name = "Power"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bZ" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/public/glass{
+	name = "Main Floor"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ca" = (
+/obj/machinery/light/floor,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cb" = (
+/obj/machinery/door/airlock/public/glass{
+	name = "Basic Equipment Tests"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cc" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+	icon_state = "pipe11-3";
+	dir = 1
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cd" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ce" = (
+/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{
+	icon_state = "manifold-3";
+	dir = 4
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cf" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{
+	icon_state = "filter_on-0_f";
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cg" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 8
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ch" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ci" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/h2{
+	icon_state = "filter_on-0_f";
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cj" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ck" = (
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cl" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 1
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cm" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	icon_state = "pipe11-3";
+	dir = 6
+	},
+/turf/open/space/basic,
+/area/space)
+"cn" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	icon_state = "pipe11-3";
+	dir = 10
+	},
+/turf/open/space/basic,
+/area/space)
+"co" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/open/space/basic,
+/area/space)
+"cp" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	icon_state = "pipe11-3";
+	dir = 5
+	},
+/turf/open/space/basic,
+/area/space)
+"cq" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	icon_state = "pipe11-3";
+	dir = 9
+	},
+/turf/open/space/basic,
+/area/space)
+"cr" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/heater,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cs" = (
+/obj/structure/table/reinforced,
+/obj/item/analyzer,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ct" = (
+/obj/effect/landmark/start/assistant,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cu" = (
+/obj/structure/table/reinforced,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cv" = (
+/obj/structure/table/reinforced,
+/obj/item/debug/omnitool,
+/obj/item/debug/omnitool,
+/obj/item/debug/omnitool,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cw" = (
+/obj/structure/table/reinforced,
+/obj/item/gun/magic/wand/death/debug,
+/obj/item/gun/magic/wand/death/debug,
+/obj/item/gun/magic/wand/resurrection/debug,
+/obj/item/gun/magic/wand/safety/debug,
+/obj/item/gun/magic/wand/safety/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cx" = (
+/obj/structure/table/reinforced,
+/obj/item/mod/control/pre_equipped/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cy" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cz" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/public/glass{
+	name = "Gravgen"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cA" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cB" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{
+	icon_state = "filter_on-0_f";
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cC" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cD" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{
+	icon_state = "filter_on-0_f";
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cE" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/obj/machinery/portable_atmospherics/canister/plasma,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cF" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma{
+	icon_state = "filter_on-0_f";
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cG" = (
+/obj/machinery/atmospherics/components/binary/volume_pump,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cH" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 1
+	},
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cI" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cJ" = (
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cK" = (
+/obj/machinery/door/airlock/public/glass,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cL" = (
+/obj/machinery/atmospherics/components/unary/cryo_cell,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cM" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent{
+	icon_state = "passive_vent_map-3";
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cN" = (
+/obj/machinery/atmospherics/components/unary/heat_exchanger{
+	icon_state = "he1";
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cO" = (
+/obj/machinery/atmospherics/components/unary/heat_exchanger{
+	icon_state = "he1";
+	dir = 4
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cP" = (
+/obj/machinery/atmospherics/components/binary/circulator/cold{
+	icon_state = "circ-off-0";
+	dir = 4
+	},
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cQ" = (
+/obj/machinery/power/generator,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cR" = (
+/obj/machinery/atmospherics/components/binary/circulator{
+	icon_state = "circ-off-0";
+	dir = 8
+	},
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cS" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	icon_state = "connector_map-3";
+	dir = 4
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cT" = (
+/obj/machinery/atmospherics/components/trinary/mixer,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cU" = (
+/obj/machinery/atmospherics/components/binary/tank_compressor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cV" = (
+/obj/item/storage/toolbox/mechanical,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
 
 (1,1,1) = {"
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaababacacacabababadadadabababaeaeaeabababafafafabababacacacababaaaaaaaaaaaaaaaa
-aaabagagagagagabaUahahahaUabaVaiaiaiaVabaWajajajaWabaqagagagaqabaaaaaaaaaaaaaaaa
-aaacagalagalagacahahahahahamaiaiaiaiaianajajajajajacagagagagagacaacmcncmcnaaaaaa
-aaacagaNaqaNagacahaharahahamaiaiaiaiaianajajasajajacagagagagagacaacocococoaaaaaa
-aaacagalapalapacahahauahahamaiavbIavaianajawbJawajacagagaTagagacaacocpcqcoaaaaaa
-aaabagagapagayabaUbKazahaUabaVbLaAaiaVabaWbMaBajaWabaqagapagaqababccacacccababaa
-aaababacbYacabababbNacacabaDabbOacacabaEabbPacacabababacczacababcsbXaKaKbXaqabaa
-aaabctagapagakabaKbQaFbRagagagbSaGbTagagagbUaHbVagagaqagapagagaqagagagagagagacaa
-aaacctagapagaoacaKbWagagagagagbSagagagagagbUagagagagagagapagagagagagagagagagacaa
-aaacctagbAagatacaLbXagagagagagbXagagagagagbXagagagagagagapagagagagagagagagagacaa
-aaacctagapagaxacaLagagaqagagagagaqagagagagagaqagagagaqagapagaqagagagaqagagagabaa
-aaacctagbAagaCacaLagagagagagagagagagagagagagagagagagagagapagagagagagagagagagacaa
-aaacctagapagcuacaMagagagagagagagagagagagagagagaJagaJagagapagagagagagagagagagacaa
-aaacctagbAagcvacaMagagaqagagagagaqagagagagagaqcPcQcRcaapapagaqagagagaqagagagacaa
-aaacctagapagcwacaMagagagagagagagagagagagagagagbXcVbXagagapagagagagagagagagagacaa
-aaacctagbAagcxabbeagagagagagagagaqagagagagagagagagagagagapagagagagagagagagagabaa
-aaacctagapagcyababbDbEaqagagagbBbBbBagagagagaqagagagaqagapagaqagagagaqagagagacaa
-aaacctagbAagagabbFbGbHagagagagagapagagagagagagagagagagagapagagagagagagagagagacaa
-aaacagaIapapbCbZapapaIapapapapapaIapapapapapaIapapapcaapapagaqagagagaqagagagacaa
-aaabagagagagagabagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaqabaa
-aaababacacacabababacacacacabcbcbcbabacacacacacacacacacacabacacacabacacacabababaa
-aaabckckckaXaYaZaXbaaZaXbbbcagagagbdaKaKaKaLaLaLaMaMaMbeacagagagacagagagacaaaaaa
-aaacckbfckckckckckbfckckckbgagaqagagagagaqagagagagagaqagbzagcIagbzagaqagaSaaaaaa
-aaacbhbhbhbibjbkbiblbkbibmbnagagagaJaJagagagagagagagagagacaPcJagacaPagagacaaaaaa
-aaacagagagagagagagagagagagagagagcdcecfcgagagagagagagagagabaccKacabacbzacabaaaaaa
-aaacbobpagbqbqagagaqagbrbsbtagaqchcecicgaqagcjcragcLaqagacagcJagacagagagacaaaaaa
-aaacboboagbqbqagagagaXbuckbvaZagcAcecBcgagagclclagbXagagbzagcMagbzagaqagaSaaaaaa
-aaacboboagbqbqagagagagbwbxbyagagcCcecDcgagagagagagagagagacaPagagacaPagagacaaaaaa
-aaacboboagbqbqagagagagagagagaJagcEcecFcgagaXcNcOaZagagagabacbzacabacbzacabaaaaaa
-aaacbobpagbqbqagagaqagagagcScTaqagcGbXagaqagagagagagaqagacagagagagagagagacaaaaaa
-aaabagagagagagagagagagagagagbXagagcHagagagagagagagagagagbzagaqagaPagaqagaSaaaaaa
-aaabagagagagagagagagagagagagagagagagagagagagcUagagagagagacagagagagagagagacaaaaaa
-aaababacbzacabababacacbzacacabababacbzacacabababacbzacababacacacabacacacabaaaaaa
-aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaaaaaaaaaaaaaaaaaaaaaa
-aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaaaaaaaaaaaaaaaaaaaaaa
-aaacagaqaPagagbzagagagaPaqagagbzagagaqaPagagbzaOaOaQaRaOaSaaaaaaaaaaaaaaaaaaaaaa
-aaacagagagagagacagagagagagagagacagagagagagagacaOaOaOaOaOacaaaaaaaaaaaaaaaaaaaaaa
-aaabagagagagagabagagagagagagagabagagagagagagabaOaOaOaOaOabaaaaaaaaaaaaaaaaaaaaaa
-aaababacacacabababacacacacacabababacacacacabababacaSacababaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+aa
+"}
+(3,1,1) = {"
+aa
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ag
+ag
+ab
+ck
+ck
+bh
+ag
+bo
+bo
+bo
+bo
+bo
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(4,1,1) = {"
+aa
+ac
+ag
+al
+aN
+al
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+aI
+ag
+ac
+ck
+bf
+bh
+ag
+bp
+bo
+bo
+bo
+bp
+ag
+ag
+ac
+ag
+ag
+aq
+ag
+ag
+ac
+aa
+"}
+(5,1,1) = {"
+aa
+ac
+ag
+ag
+aq
+ap
+ap
+bY
+ap
+ap
+bA
+ap
+bA
+ap
+bA
+ap
+bA
+ap
+bA
+ap
+ag
+ac
+ck
+ck
+bh
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bz
+ag
+ag
+aP
+ag
+ag
+ac
+aa
+"}
+(6,1,1) = {"
+aa
+ac
+ag
+al
+aN
+al
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aX
+ck
+bi
+ag
+bq
+bq
+bq
+bq
+bq
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(7,1,1) = {"
+aa
+ab
+ag
+ag
+ag
+ap
+ay
+ab
+ak
+ao
+at
+ax
+aC
+cu
+cv
+cw
+cx
+cy
+ag
+bC
+ag
+ab
+aY
+ck
+bj
+ag
+bq
+bq
+bq
+bq
+bq
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(8,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+bZ
+ab
+ab
+aZ
+ck
+bk
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ab
+ac
+bz
+ac
+ab
+ab
+aa
+"}
+(9,1,1) = {"
+aa
+ab
+aU
+ah
+ah
+ah
+aU
+ab
+aK
+aK
+aL
+aL
+aL
+aM
+aM
+aM
+be
+ab
+bF
+ap
+ag
+ab
+aX
+ck
+bi
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(10,1,1) = {"
+aa
+ad
+ah
+ah
+ah
+ah
+bK
+bN
+bQ
+bW
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+bD
+bG
+ap
+ag
+ac
+ba
+bf
+bl
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(11,1,1) = {"
+aa
+ad
+ah
+ah
+ar
+au
+az
+ac
+aF
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bE
+bH
+aI
+ag
+ac
+aZ
+ck
+bk
+ag
+ag
+aX
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(12,1,1) = {"
+aa
+ad
+ah
+ah
+ah
+ah
+ah
+ac
+bR
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ap
+ag
+ac
+aX
+ck
+bi
+ag
+br
+bu
+bw
+ag
+ag
+ag
+ag
+bz
+ag
+ag
+aP
+ag
+ag
+ac
+aa
+"}
+(13,1,1) = {"
+aa
+ab
+aU
+ah
+ah
+ah
+aU
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+bb
+ck
+bm
+ag
+bs
+ck
+bx
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+aq
+ag
+ag
+ac
+aa
+"}
+(14,1,1) = {"
+aa
+ab
+ab
+am
+am
+am
+ab
+aD
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ab
+bc
+bg
+bn
+ag
+bt
+bv
+by
+ag
+cS
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(15,1,1) = {"
+aa
+ab
+aV
+ai
+ai
+ai
+aV
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+cb
+ag
+ag
+ag
+ag
+ag
+aZ
+ag
+aJ
+cT
+bX
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(16,1,1) = {"
+aa
+ae
+ai
+ai
+ai
+av
+bL
+bO
+bS
+bS
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+bB
+ag
+ap
+ag
+cb
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ab
+ab
+ac
+bz
+ac
+ab
+ab
+aa
+"}
+(17,1,1) = {"
+aa
+ae
+ai
+ai
+ai
+bI
+aA
+ac
+aG
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aq
+bB
+ap
+aI
+ag
+cb
+ag
+ag
+ag
+cd
+ch
+cA
+cC
+cE
+ag
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(18,1,1) = {"
+aa
+ae
+ai
+ai
+ai
+av
+ai
+ac
+bT
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bB
+ag
+ap
+ag
+ab
+bd
+ag
+aJ
+ce
+ce
+ce
+ce
+ce
+cG
+cH
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(19,1,1) = {"
+aa
+ab
+aV
+ai
+ai
+ai
+aV
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aK
+ag
+aJ
+cf
+ci
+cB
+cD
+cF
+bX
+ag
+ag
+bz
+ag
+ag
+aq
+ag
+ag
+ac
+aa
+"}
+(20,1,1) = {"
+aa
+ab
+ab
+an
+an
+an
+ab
+aE
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aK
+ag
+ag
+cg
+cg
+cg
+cg
+cg
+ag
+ag
+ag
+ac
+ag
+ag
+aP
+ag
+ag
+ac
+aa
+"}
+(21,1,1) = {"
+aa
+ab
+aW
+aj
+aj
+aj
+aW
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aK
+aq
+ag
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(22,1,1) = {"
+aa
+af
+aj
+aj
+aj
+aw
+bM
+bP
+bU
+bU
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aL
+ag
+ag
+ag
+ag
+ag
+ag
+aX
+ag
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(23,1,1) = {"
+aa
+af
+aj
+aj
+as
+bJ
+aB
+ac
+aH
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aI
+ag
+ac
+aL
+ag
+ag
+ag
+cj
+cl
+ag
+cN
+ag
+ag
+cU
+ab
+ab
+ac
+bz
+ac
+ab
+ab
+aa
+"}
+(24,1,1) = {"
+aa
+af
+aj
+aj
+aj
+aw
+aj
+ac
+bV
+ag
+ag
+ag
+ag
+aJ
+cP
+bX
+ag
+ag
+ag
+ap
+ag
+ac
+aL
+ag
+ag
+ag
+cr
+cl
+ag
+cO
+ag
+ag
+ag
+ab
+aO
+aO
+aO
+aO
+aO
+ab
+aa
+"}
+(25,1,1) = {"
+aa
+ab
+aW
+aj
+aj
+aj
+aW
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+cQ
+cV
+ag
+ag
+ag
+ap
+ag
+ac
+aM
+ag
+ag
+ag
+ag
+ag
+ag
+aZ
+ag
+ag
+ag
+ac
+aO
+aO
+aO
+aO
+aO
+ac
+aa
+"}
+(26,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+ag
+ag
+ag
+ag
+ag
+aJ
+cR
+bX
+ag
+ag
+ag
+ap
+ag
+ac
+aM
+ag
+ag
+ag
+cL
+bX
+ag
+ag
+ag
+ag
+ag
+bz
+aO
+aO
+aQ
+aO
+aO
+aS
+aa
+"}
+(27,1,1) = {"
+aa
+ab
+aq
+ag
+ag
+ag
+aq
+ab
+aq
+ag
+ag
+aq
+ag
+ag
+ca
+ag
+ag
+aq
+ag
+ca
+ag
+ac
+aM
+aq
+ag
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ac
+aO
+aO
+aR
+aO
+aO
+ac
+aa
+"}
+(28,1,1) = {"
+aa
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+be
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+aO
+aO
+aO
+aO
+aO
+ab
+aa
+"}
+(29,1,1) = {"
+aa
+ac
+ag
+ag
+ag
+aT
+ap
+cz
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ag
+ab
+ac
+bz
+ac
+ab
+ac
+bz
+ac
+ab
+ac
+bz
+ac
+ab
+ab
+ac
+aS
+ac
+ab
+ab
+aa
+"}
+(30,1,1) = {"
+aa
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+ab
+aq
+ag
+ag
+ag
+aq
+ab
+ag
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aq
+ag
+ac
+ag
+cI
+cJ
+cK
+cJ
+cM
+ag
+bz
+ag
+aq
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+aq
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(33,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+cs
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ac
+bz
+ac
+ab
+ac
+bz
+ac
+ab
+ag
+aP
+ag
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(34,1,1) = {"
+aa
+aa
+aa
+cm
+co
+co
+cc
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(35,1,1) = {"
+aa
+aa
+aa
+cn
+co
+cp
+ac
+aK
+ag
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aq
+ag
+ac
+ag
+aq
+ag
+bz
+ag
+aq
+ag
+bz
+ag
+aq
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(36,1,1) = {"
+aa
+aa
+aa
+cm
+co
+cq
+ac
+aK
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(37,1,1) = {"
+aa
+aa
+aa
+cn
+co
+co
+cc
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ac
+aS
+ac
+ab
+ac
+aS
+ac
+ab
+ac
+aS
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(38,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aq
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+aq
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(39,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ac
+ac
+ac
+ac
+ab
+ac
+ac
+ac
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(40,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
 "}

From bc8aa4c26320dff648727617c1ff1e036ada18b7 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 14 May 2022 22:38:35 -0400
Subject: [PATCH 094/200] Whoops

---
 .../templates/heretic_sacrifice_template.dmm  | 38 +++++++++----------
 1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/_maps/templates/heretic_sacrifice_template.dmm b/_maps/templates/heretic_sacrifice_template.dmm
index 16a296233ef..97f9b0a3b6c 100644
--- a/_maps/templates/heretic_sacrifice_template.dmm
+++ b/_maps/templates/heretic_sacrifice_template.dmm
@@ -63,7 +63,7 @@
 "lz" = (
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -106,7 +106,7 @@
 	dir = 10
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -141,7 +141,7 @@
 	},
 /obj/effect/decal/cleanable/oil,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -153,7 +153,7 @@
 "qu" = (
 /obj/effect/turf_decal/weather/dirt,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -165,7 +165,7 @@
 	dir = 5
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -178,7 +178,7 @@
 "sb" = (
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -188,7 +188,7 @@
 	dir = 9
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -220,7 +220,7 @@
 	dir = 4
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -262,7 +262,7 @@
 /obj/structure/stone_tile/slab,
 /obj/effect/decal/cleanable/dirt/dust,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -294,7 +294,7 @@
 /area/heretic_sacrifice/rust)
 "Bw" = (
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -351,7 +351,7 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -378,7 +378,7 @@
 	},
 /obj/effect/decal/cleanable/blood/old,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -388,7 +388,7 @@
 	dir = 5
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -402,7 +402,7 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -440,7 +440,7 @@
 "KP" = (
 /obj/structure/stone_tile/surrounding_tile,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -476,7 +476,7 @@
 "NA" = (
 /obj/structure/stone_tile/burnt,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -486,7 +486,7 @@
 	dir = 1
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -503,7 +503,7 @@
 	dir = 10
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},
@@ -513,7 +513,7 @@
 	dir = 6
 	},
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas = list("oxygen" = 22, "nitrogen" = 82)";
+	initial_gas = list("oxygen" = 22, "nitrogen" = 82);
 	simulated = 1;
 	slowdown = 0
 	},

From d656a682836e01a1140fe69a0d06b15d28b829e6 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 17 May 2022 16:14:37 -0400
Subject: [PATCH 095/200] brings back precision clean up

---
 code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index f2b940afcbb..0c97d56a13a 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -240,8 +240,8 @@
 	for(var/g in gas)
 		removed.gas[g] = QUANTIZE((gas[g] / total_moles) * amount)
 		gas[g] -= removed.gas[g] / group_multiplier
-		/*if(gas[g] <= ATMOS_PRECISION) //Removing floating point errors from the equation
-			gas[g] = 0*/
+		if(gas[g] <= ATMOS_PRECISION) //Removing floating point errors from the equation
+			gas -= g
 
 	removed.temperature = temperature
 	AIR_UPDATE_VALUES(src)

From 9f1807eee56e06d707f7cb9c444555102748eae7 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 18 May 2022 07:46:16 -0400
Subject: [PATCH 096/200] Pushing this so dreammaker doesnt eat my ass

---
 .../modules/atmospherics/rust/reactor_core.dm |  15 +
 .../atmospherics/rust/reactor_em_field.dm     | 505 ++++++++++++++++++
 icons/obj/machines/rust/fusion.dmi            | Bin 0 -> 3681 bytes
 icons/obj/machines/rust/fusion_core.dmi       | Bin 0 -> 6470 bytes
 tgstation.dme                                 |   2 +
 5 files changed, 522 insertions(+)
 create mode 100644 code/modules/atmospherics/rust/reactor_core.dm
 create mode 100644 code/modules/atmospherics/rust/reactor_em_field.dm
 create mode 100644 icons/obj/machines/rust/fusion.dmi
 create mode 100644 icons/obj/machines/rust/fusion_core.dmi

diff --git a/code/modules/atmospherics/rust/reactor_core.dm b/code/modules/atmospherics/rust/reactor_core.dm
new file mode 100644
index 00000000000..a581e5ad4d3
--- /dev/null
+++ b/code/modules/atmospherics/rust/reactor_core.dm
@@ -0,0 +1,15 @@
+#define MAX_FIELD_STR 10000
+#define MIN_FIELD_STR 1
+
+/obj/machinery/reactor_core
+	name = "\improper R-UST Mk. 10 Tokamak Reactor"
+	desc = "An enormous solenoid for generating extremely high power electromagnetic fields."
+	icon = 'icons/obj/machines/rust/fusion_core.dmi'
+	icon_state = "core0"
+	use_power = POWER_USE_IDLE
+	idle_power_usage = 100
+	active_power_usage = 1000 //multiplied by field strength
+	anchored = FALSE
+
+	var/obj/effect/fusion_em_field/owned_field
+	var/field_strength = 1//0.01
diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
new file mode 100644
index 00000000000..d3478f841eb
--- /dev/null
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -0,0 +1,505 @@
+//the em field is where the fun happens
+/*
+Deuterium-deuterium fusion : 40 x 10^7 K
+Deuterium-tritium fusion: 4.5 x 10^7 K
+*/
+
+//#DEFINE MAX_STORED_ENERGY (held_plasma[GAS_PLASMA] * held_plasma[GAS_PLASMA] * SPECIFIC_HEAT_TOXIN)
+//#define FUSIONDBG
+
+#define FUSION_ENERGY_PER_K        20
+#define FUSION_INSTABILITY_DIVISOR 50000
+#define FUSION_RUPTURE_THRESHOLD   10000
+#define FUSION_REACTANT_CAP        10000
+
+/obj/effect/reactor_em_field
+	name = "electromagnetic field"
+	desc = "A coruscating, barely visible field of energy. It is shaped like a slightly flattened torus."
+	icon = 'icons/obj/machines/rust/fusion.dmi'
+	icon_state = "emfield_s1"
+	alpha = 30
+	layer = 4
+	light_color = COLOR_RED
+	color = COLOR_RED
+
+	var/size = 1
+	var/energy = 0
+	var/plasma_temperature = 0
+	var/radiation = 0
+	var/field_strength = 0.01
+	var/tick_instability = 0
+	var/percent_unstable = 0
+
+	var/obj/machinery/reactor_core/owned_core
+	var/list/reactants = list()
+	var/list/particle_catchers = list()
+
+	var/list/ignore_types = list(
+		/obj/item/projectile,
+		/obj/effect,
+		/obj/structure/cable,
+		/obj/machinery/atmospherics
+		)
+
+	var/light_min_range = 2
+	var/light_min_power = 0.2
+	var/light_max_range = 18
+	var/light_max_power = 1
+
+	var/last_range
+	var/last_power
+
+/obj/effect/fusion_em_field/New(loc, var/obj/machinery/power/fusion_core/new_owned_core)
+	..()
+
+	set_light(light_min_power, light_min_range / 10, light_min_range)
+	last_range = light_min_range
+	last_power = light_min_power
+
+	owned_core = new_owned_core
+	if(!owned_core)
+		qdel(src)
+
+	//create the gimmicky things to handle field collisions
+	var/obj/effect/fusion_particle_catcher/catcher
+
+	catcher = new (locate(src.x,src.y,src.z))
+	catcher.parent = src
+	catcher.SetSize(1)
+	particle_catchers.Add(catcher)
+
+	for(var/iter=1,iter<=6,iter++)
+		catcher = new (locate(src.x-iter,src.y,src.z))
+		catcher.parent = src
+		catcher.SetSize((iter*2)+1)
+		particle_catchers.Add(catcher)
+
+		catcher = new (locate(src.x+iter,src.y,src.z))
+		catcher.parent = src
+		catcher.SetSize((iter*2)+1)
+		particle_catchers.Add(catcher)
+
+		catcher = new (locate(src.x,src.y+iter,src.z))
+		catcher.parent = src
+		catcher.SetSize((iter*2)+1)
+		particle_catchers.Add(catcher)
+
+		catcher = new (locate(src.x,src.y-iter,src.z))
+		catcher.parent = src
+		catcher.SetSize((iter*2)+1)
+		particle_catchers.Add(catcher)
+
+	START_PROCESSING(SSobj, src)
+
+/obj/effect/fusion_em_field/Initialize()
+	. = ..()
+	addtimer(CALLBACK(src, .proc/update_light_colors), 10 SECONDS, TIMER_LOOP)
+
+/obj/effect/fusion_em_field/proc/update_light_colors()
+	var/use_range
+	var/use_power
+	switch (plasma_temperature)
+		if (-INFINITY to 1000)
+			light_color = COLOR_RED
+			use_range = light_min_range
+			use_power = light_min_power
+			alpha = 30
+		if (100000 to INFINITY)
+			light_color = COLOR_VIOLET
+			use_range = light_max_range
+			use_power = light_max_power
+			alpha = 230
+		else
+			var/temp_mod = ((plasma_temperature-5000)/20000)
+			use_range = light_min_range + Ceil((light_max_range-light_min_range)*temp_mod)
+			use_power = light_min_power + Ceil((light_max_power-light_min_power)*temp_mod)
+			switch (plasma_temperature)
+				if (1000 to 6000)
+					light_color = COLOR_ORANGE
+					alpha = 50
+				if (6000 to 20000)
+					light_color = COLOR_YELLOW
+					alpha = 80
+				if (20000 to 50000)
+					light_color = COLOR_GREEN
+					alpha = 120
+				if (50000 to 70000)
+					light_color = COLOR_CYAN
+					alpha = 160
+				if (70000 to 100000)
+					light_color = COLOR_BLUE
+					alpha = 200
+
+	if (last_range != use_range || last_power != use_power || color != light_color)
+		color = light_color
+		set_light(min(use_power, 1), use_range / 6, use_range) //cap first arg at 1 to avoid breaking lighting stuff.
+		last_range = use_range
+		last_power = use_power
+
+/obj/effect/fusion_em_field/Process()
+	//make sure the field generator is still intact
+	if(QDELETED(owned_core))
+		qdel(src)
+		return
+
+	// Take some gas up from our environment.
+	var/added_particles = FALSE
+	var/datum/gas_mixture/uptake_gas = owned_core.loc.return_air()
+	if(uptake_gas)
+		uptake_gas = uptake_gas.remove_by_flag(XGM_GAS_FUSION_FUEL, rand(50,100))
+	if(uptake_gas && uptake_gas.total_moles)
+		for(var/gasname in uptake_gas.gas)
+			if(uptake_gas.gas[gasname]*10 > reactants[gasname])
+				AddParticles(gasname, uptake_gas.gas[gasname]*10)
+				uptake_gas.adjust_gas(gasname, -(uptake_gas.gas[gasname]), update=FALSE)
+				added_particles = TRUE
+		if(added_particles)
+			uptake_gas.update_values()
+
+	//let the particles inside the field react
+	React()
+
+	// Dump power to our powernet.
+	owned_core.add_avail(FUSION_ENERGY_PER_K * plasma_temperature)
+
+	// Energy decay.
+	if(plasma_temperature >= 1)
+		var/lost = plasma_temperature*0.01
+		radiation += lost
+		plasma_temperature -= lost
+
+	//handle some reactants formatting
+	for(var/reactant in reactants)
+		var/amount = reactants[reactant]
+		if(amount < 1)
+			reactants.Remove(reactant)
+		else if(amount >= FUSION_REACTANT_CAP)
+			var/radiate = rand(3 * amount / 4, amount / 4)
+			reactants[reactant] -= radiate
+			radiation += radiate
+
+	check_instability()
+	Radiate()
+	if(radiation)
+		SSradiation.radiate(src, round(radiation*0.001))
+	return 1
+
+/obj/effect/fusion_em_field/proc/check_instability()
+	if(tick_instability > 0)
+		percent_unstable += (tick_instability*size)/FUSION_INSTABILITY_DIVISOR
+		tick_instability = 0
+	else
+		if(percent_unstable < 0)
+			percent_unstable = 0
+		else
+			if(percent_unstable > 1)
+				percent_unstable = 1
+			if(percent_unstable > 0)
+				percent_unstable = max(0, percent_unstable-rand(0.01,0.03))
+
+	if(percent_unstable >= 1)
+		owned_core.Shutdown(force_rupture=1)
+	else
+		if(percent_unstable > 0.5 && prob(percent_unstable*100))
+			if(plasma_temperature < FUSION_RUPTURE_THRESHOLD)
+				visible_message("<span class='danger'>\The [src] ripples uneasily, like a disturbed pond.</span>")
+			else
+				var/flare
+				var/fuel_loss
+				var/rupture
+				if(percent_unstable < 0.7)
+					visible_message("<span class='danger'>\The [src] ripples uneasily, like a disturbed pond.</span>")
+					fuel_loss = prob(5)
+				else if(percent_unstable < 0.9)
+					visible_message("<span class='danger'>\The [src] undulates violently, shedding plumes of plasma!</span>")
+					flare = prob(50)
+					fuel_loss = prob(20)
+					rupture = prob(5)
+				else
+					visible_message("<span class='danger'>\The [src] is wracked by a series of horrendous distortions, buckling and twisting like a living thing!</span>")
+					flare = 1
+					fuel_loss = prob(50)
+					rupture = prob(25)
+
+				if(rupture)
+					owned_core.Shutdown(force_rupture=1)
+				else
+					var/lost_plasma = (plasma_temperature*percent_unstable)
+					radiation += lost_plasma
+					if(flare)
+						radiation += plasma_temperature/2
+					plasma_temperature -= lost_plasma
+
+					if(fuel_loss)
+						for(var/particle in reactants)
+							var/lost_fuel = reactants[particle]*percent_unstable
+							radiation += lost_fuel
+							reactants[particle] -= lost_fuel
+							if(reactants[particle] <= 0)
+								reactants.Remove(particle)
+					Radiate()
+	return
+
+/obj/effect/fusion_em_field/proc/is_shutdown_safe()
+	return plasma_temperature < 1000
+
+/obj/effect/fusion_em_field/proc/Rupture()
+	visible_message("<span class='danger'>\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!</span>")
+	set_light(1, 0.1, 15, 2, "#ccccff")
+	empulse(get_turf(src), Ceil(plasma_temperature/1000), Ceil(plasma_temperature/300))
+	sleep(5)
+	RadiateAll()
+	explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows.
+	return
+
+/obj/effect/fusion_em_field/proc/ChangeFieldStrength(var/new_strength)
+	var/calc_size = 1
+	if(new_strength <= 50)
+		calc_size = 1
+	else if(new_strength <= 200)
+		calc_size = 3
+	else if(new_strength <= 500)
+		calc_size = 5
+	else if(new_strength <= 1000)
+		calc_size = 7
+	else if(new_strength <= 2000)
+		calc_size = 9
+	else if(new_strength <= 5000)
+		calc_size = 11
+	else
+		calc_size = 13
+	field_strength = new_strength
+	change_size(calc_size)
+
+/obj/effect/fusion_em_field/proc/AddEnergy(var/a_energy, var/a_plasma_temperature)
+	energy += a_energy
+	plasma_temperature += a_plasma_temperature
+	if(a_energy && percent_unstable > 0)
+		percent_unstable -= a_energy/10000
+		if(percent_unstable < 0)
+			percent_unstable = 0
+	while(energy >= 100)
+		energy -= 100
+		plasma_temperature += 1
+
+/obj/effect/fusion_em_field/proc/AddParticles(var/name, var/quantity = 1)
+	if(name in reactants)
+		reactants[name] += quantity
+	else if(name != "proton" && name != "electron" && name != "neutron")
+		reactants.Add(name)
+		reactants[name] = quantity
+
+/obj/effect/fusion_em_field/proc/RadiateAll(var/ratio_lost = 1)
+
+	// Create our plasma field and dump it into our environment.
+	var/turf/T = get_turf(src)
+	if(istype(T))
+		var/datum/gas_mixture/plasma
+		for(var/reactant in reactants)
+			if(!gas_data.name[reactant])
+				continue
+			if(!plasma)
+				plasma = new
+			plasma.adjust_gas(reactant, max(1,round(reactants[reactant]*0.1)), 0) // *0.1 to compensate for *10 when uptaking gas.
+		if(!plasma)
+			return
+		plasma.temperature = (plasma_temperature/2)
+		plasma.update_values()
+		T.assume_air(plasma)
+		T.hotspot_expose(plasma_temperature)
+		plasma = null
+
+	// Radiate all our unspent fuel and energy.
+	for(var/particle in reactants)
+		radiation += reactants[particle]
+		reactants.Remove(particle)
+	radiation += plasma_temperature/2
+	plasma_temperature = 0
+
+	SSradiation.radiate(src, round(radiation*0.001))
+	Radiate()
+
+/obj/effect/fusion_em_field/proc/Radiate()
+	if(istype(loc, /turf))
+		var/empsev = max(1, min(3, Ceil(size/2)))
+		for(var/atom/movable/AM in range(max(1,Floor(size/2)), loc))
+
+			if(AM == src || AM == owned_core || !AM.simulated)
+				continue
+
+			var/skip_obstacle
+			for(var/ignore_path in ignore_types)
+				if(istype(AM, ignore_path))
+					skip_obstacle = TRUE
+					break
+			if(skip_obstacle)
+				continue
+
+			AM.visible_message("<span class='danger'>The field buckles visibly around \the [AM]!</span>")
+			tick_instability += rand(30,50)
+			AM.emp_act(empsev)
+
+	if(owned_core && owned_core.loc)
+		var/datum/gas_mixture/environment = owned_core.loc.return_air()
+		if(environment && environment.temperature < (T0C+1000)) // Putting an upper bound on it to stop it being used in a TEG.
+			environment.add_thermal_energy(plasma_temperature*20000)
+	radiation = 0
+
+/obj/effect/fusion_em_field/proc/change_size(var/newsize = 1)
+	var/changed = 0
+	var/static/list/size_to_icon = list(
+			"3" = 'icons/effects/96x96.dmi',
+			"5" = 'icons/effects/160x160.dmi',
+			"7" = 'icons/effects/224x224.dmi',
+			"9" = 'icons/effects/288x288.dmi',
+			"11" = 'icons/effects/352x352.dmi',
+			"13" = 'icons/effects/416x416.dmi'
+			)
+
+	if( ((newsize-1)%2==0) && (newsize<=13) )
+		icon = 'icons/obj/machines/power/fusion.dmi'
+		if(newsize>1)
+			icon = size_to_icon["[newsize]"]
+		icon_state = "emfield_s[newsize]"
+		pixel_x = ((newsize-1) * -16) * PIXEL_MULTIPLIER
+		pixel_y = ((newsize-1) * -16) * PIXEL_MULTIPLIER
+		size = newsize
+		changed = newsize
+
+	for(var/obj/effect/fusion_particle_catcher/catcher in particle_catchers)
+		catcher.UpdateSize()
+	return changed
+
+//the !!fun!! part
+/obj/effect/fusion_em_field/proc/React()
+	//loop through the reactants in random order
+	var/list/react_pool = reactants.Copy()
+
+	//cant have any reactions if there aren't any reactants present
+	if(react_pool.len)
+		//determine a random amount to actually react this cycle, and remove it from the standard pool
+		//this is a hack, and quite nonrealistic :(
+		for(var/reactant in react_pool)
+			react_pool[reactant] = rand(Floor(react_pool[reactant]/2),react_pool[reactant])
+			reactants[reactant] -= react_pool[reactant]
+			if(!react_pool[reactant])
+				react_pool -= reactant
+
+		//loop through all the reacting reagents, picking out random reactions for them
+		var/list/produced_reactants = new/list
+		var/list/p_react_pool = react_pool.Copy()
+		while(p_react_pool.len)
+			//pick one of the unprocessed reacting reagents randomly
+			var/cur_p_react = pick(p_react_pool)
+			p_react_pool.Remove(cur_p_react)
+
+			//grab all the possible reactants to have a reaction with
+			var/list/possible_s_reacts = react_pool.Copy()
+			//if there is only one of a particular reactant, then it can not react with itself so remove it
+			possible_s_reacts[cur_p_react] -= 1
+			if(possible_s_reacts[cur_p_react] < 1)
+				possible_s_reacts.Remove(cur_p_react)
+
+			//loop through and work out all the possible reactions
+			var/list/possible_reactions
+			for(var/cur_s_react in possible_s_reacts)
+				if(possible_s_reacts[cur_s_react] < 1)
+					continue
+				var/decl/fusion_reaction/cur_reaction = get_fusion_reaction(cur_p_react, cur_s_react)
+				if(cur_reaction && plasma_temperature >= cur_reaction.minimum_energy_level)
+					LAZYDISTINCTADD(possible_reactions, cur_reaction)
+
+			//if there are no possible reactions here, abandon this primary reactant and move on
+			if(!LAZYLEN(possible_reactions))
+				continue
+
+			/// Sort based on reaction priority to avoid deut-deut eating all the deut before deut-trit can run etc.
+			sortTim(possible_reactions, /proc/cmp_fusion_reaction_des)
+
+			//split up the reacting atoms between the possible reactions
+			while(possible_reactions.len)
+				var/decl/fusion_reaction/cur_reaction = possible_reactions[1]
+				possible_reactions.Remove(cur_reaction)
+
+				//set the randmax to be the lower of the two involved reactants
+				var/max_num_reactants = react_pool[cur_reaction.p_react] > react_pool[cur_reaction.s_react] ? \
+				react_pool[cur_reaction.s_react] : react_pool[cur_reaction.p_react]
+				if(max_num_reactants < 1)
+					continue
+
+				//make sure we have enough energy
+				if(plasma_temperature < cur_reaction.minimum_reaction_temperature)
+					continue
+
+				if(plasma_temperature < max_num_reactants * cur_reaction.energy_consumption)
+					max_num_reactants = round(plasma_temperature / cur_reaction.energy_consumption)
+					if(max_num_reactants < 1)
+						continue
+
+				//randomly determined amount to react
+				var/amount_reacting = rand(1, max_num_reactants)
+
+				//removing the reacting substances from the list of substances that are primed to react this cycle
+				//if there aren't enough of that substance (there should be) then modify the reactant amounts accordingly
+				if( react_pool[cur_reaction.p_react] - amount_reacting >= 0 )
+					react_pool[cur_reaction.p_react] -= amount_reacting
+				else
+					amount_reacting = react_pool[cur_reaction.p_react]
+					react_pool[cur_reaction.p_react] = 0
+				//same again for secondary reactant
+				if(react_pool[cur_reaction.s_react] - amount_reacting >= 0 )
+					react_pool[cur_reaction.s_react] -= amount_reacting
+				else
+					react_pool[cur_reaction.p_react] += amount_reacting - react_pool[cur_reaction.p_react]
+					amount_reacting = react_pool[cur_reaction.s_react]
+					react_pool[cur_reaction.s_react] = 0
+
+				plasma_temperature -= max_num_reactants * cur_reaction.energy_consumption  // Remove the consumed energy.
+				plasma_temperature += max_num_reactants * cur_reaction.energy_production   // Add any produced energy.
+				radiation +=   max_num_reactants * cur_reaction.radiation           // Add any produced radiation.
+				tick_instability += max_num_reactants * cur_reaction.instability
+
+				// Create the reaction products.
+				for(var/reactant in cur_reaction.products)
+					var/success = 0
+					for(var/check_reactant in produced_reactants)
+						if(check_reactant == reactant)
+							produced_reactants[reactant] += cur_reaction.products[reactant] * amount_reacting
+							success = 1
+							break
+					if(!success)
+						produced_reactants[reactant] = cur_reaction.products[reactant] * amount_reacting
+
+				// Handle anything special. If this proc returns true, abort the current reaction.
+				if(cur_reaction.handle_reaction_special(src))
+					return
+
+				// This reaction is done, and can't be repeated this sub-cycle.
+				possible_reactions.Remove(cur_reaction.s_react)
+
+		// Loop through the newly produced reactants and add them to the pool.
+		for(var/reactant in produced_reactants)
+			AddParticles(reactant, produced_reactants[reactant])
+
+		// Check whether there are reactants left, and add them back to the pool.
+		for(var/reactant in react_pool)
+			AddParticles(reactant, react_pool[reactant])
+
+/obj/effect/fusion_em_field/Destroy()
+	set_light(0)
+	RadiateAll()
+	QDEL_NULL_LIST(particle_catchers)
+	if(owned_core)
+		owned_core.owned_field = null
+		owned_core = null
+	STOP_PROCESSING(SSobj, src)
+	. = ..()
+
+/obj/effect/fusion_em_field/bullet_act(var/obj/item/projectile/Proj)
+	AddEnergy(Proj.damage)
+	update_icon()
+	return 0
+
+#undef FUSION_INSTABILITY_DIVISOR
+#undef FUSION_RUPTURE_THRESHOLD
+#undef FUSION_REACTANT_CAP
diff --git a/icons/obj/machines/rust/fusion.dmi b/icons/obj/machines/rust/fusion.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..bd1131a1e6a80a9f7549f6311d445403285a5691
GIT binary patch
literal 3681
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

literal 0
HcmV?d00001

diff --git a/icons/obj/machines/rust/fusion_core.dmi b/icons/obj/machines/rust/fusion_core.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..76904a1200d5b0a5f17d30b9ceb50707678169f3
GIT binary patch
literal 6470
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

literal 0
HcmV?d00001

diff --git a/tgstation.dme b/tgstation.dme
index dc901c532c9..909c90b2aef 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2347,6 +2347,8 @@
 #include "code\modules\atmospherics\machinery\components\unary_devices\outlet_injector.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\passive_vent.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\portables_connector.dm"
+#include "code\modules\atmospherics\rust\reactor_core.dm"
+#include "code\modules\atmospherics\rust\reactor_core.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\thermomachine.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\unary_devices.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm"

From 0ab65cb22cc183922fe25176808178f2c1d77d22 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 18 May 2022 10:55:05 -0400
Subject: [PATCH 097/200] more R-UST work

---
 code/__DEFINES/maths.dm                       |   2 +
 code/__HELPERS/_lists.dm                      |   2 +
 code/__HELPERS/cmp.dm                         |   4 +
 code/__HELPERS/maths.dm                       | 125 ++++++++++++++
 code/game/atoms.dm                            |   2 +-
 code/game/machinery/doors/door.dm             |   3 +-
 code/modules/atmospherics/ZAS/Atom.dm         |  15 --
 code/modules/atmospherics/ZAS/XGM/gases.dm    |   2 +-
 .../atmospherics/rust/fusion_reactions.dm     |  28 ++++
 .../atmospherics/rust/particle_catcher.dm     |  42 +++++
 .../modules/atmospherics/rust/reactor_core.dm | 109 +++++++++++-
 .../atmospherics/rust/reactor_em_field.dm     | 158 +++++++++---------
 .../projectile/energy/nuclear_particle.dm     |   6 +
 tgstation.dme                                 |   5 +-
 14 files changed, 402 insertions(+), 101 deletions(-)
 create mode 100644 code/modules/atmospherics/rust/fusion_reactions.dm
 create mode 100644 code/modules/atmospherics/rust/particle_catcher.dm

diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm
index 6a2ae4fa531..62c1af9d200 100644
--- a/code/__DEFINES/maths.dm
+++ b/code/__DEFINES/maths.dm
@@ -17,6 +17,8 @@
 
 #define SHORT_REAL_LIMIT 16777216
 
+#define LIGHT_SPEED 299792458 // meters per second
+
 //"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
 //percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
 //collapsed to percent_of_tick_used * tick_lag
diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm
index 3c3857924d7..9aea5c6bd9e 100644
--- a/code/__HELPERS/_lists.dm
+++ b/code/__HELPERS/_lists.dm
@@ -19,6 +19,8 @@
 #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } }
 ///Add an item to the list, if the list is null it will initialize it
 #define LAZYADD(L, I) if(!L) { L = list(); } L += I;
+///Adds an item to the list, initalizing the list if necessary, if the item is not already in the list
+#define LAZYDISTINCTADD(L, I) if(!L) { L = list(); } L |= I;
 ///Add an item to the list if not already present, if the list is null it will initialize it
 #define LAZYOR(L, I) if(!L) { L = list(); } L |= I;
 ///Returns the key of the submitted item in the list
diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm
index 8545b04d6f3..8f2d8e79d08 100644
--- a/code/__HELPERS/cmp.dm
+++ b/code/__HELPERS/cmp.dm
@@ -167,3 +167,7 @@ GLOBAL_VAR_INIT(cmp_field, "name")
 /// Orders heretic knowledge by priority
 /proc/cmp_heretic_knowledge(datum/heretic_knowledge/knowledge_a, datum/heretic_knowledge/knowledge_b)
 	return initial(knowledge_b.priority) - initial(knowledge_a.priority)
+
+///Orders R-UST fusion by priority
+/proc/cmp_fusion_reaction_des(var/decl/fusion_reaction/A, var/decl/fusion_reaction/B)
+	return B.priority - A.priority
diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm
index 41b2532999c..33aea99ad99 100644
--- a/code/__HELPERS/maths.dm
+++ b/code/__HELPERS/maths.dm
@@ -134,5 +134,130 @@
 		else //It gets too tedious to use latin prefixes from here.
 			return "[number]-tuple"
 
+/// Multiplier for converting degrees to radians
+#define DEG_TO_RAD 0.0174532925
+
+
+/// Multiplier for converting radians to degrees
+#define RAD_TO_DEG 57.2957795
+
+
 /// A random real number between low and high inclusive
 #define Frand(low, high) ( rand() * ((high) - (low)) + (low) )
+
+
+/// Value or the next integer in a positive direction: Ceil(-1.5) = -1 , Ceil(1.5) = 2
+#define Ceil(value) ( -round(-(value)) )
+
+
+/// Value or the next multiple of divisor in a positive direction. Ceilm(-1.5, 0.3) = -1.5 , Ceilm(-1.5, 0.4) = -1.2
+#define Ceilm(value, divisor) ( -round(-(value) / (divisor)) * (divisor) )
+
+
+/// Value or the nearest power of power in a positive direction: Ceilp(3, 2) = 4 , Ceilp(5, 3) = 9
+#define Ceilp(value, power) ( (power) ** -round(-log((power), (value))) )
+
+
+/// Value or the next integer in a negative direction: Floor(-1.5) = -2 , Floor(1.5) = 1
+#define Floor(value) round(value)
+
+
+/// Value or the next multiple of divisor in a negative direction: Floorm(-1.5, 0.3) = -1.5 , Floorm(-1.5, 0.4) = -1.6
+#define Floorm(value, divisor) ( round((value) / (divisor)) * (divisor) )
+
+
+/// Value or the nearest integer in either direction
+#define Round(value) round((value), 1)
+
+
+/// Value or the nearest multiple of divisor in either direction
+#define Roundm(value, divisor) round((value), (divisor))
+
+
+/// The percentage of value in max, rounded to places: 1 = nearest 0.1 , 0 = nearest 1 , -1 = nearest 10, etc
+#define Percent(value, max, places) round((value) / (max) * 100, !(places) || 10 ** -(places))
+
+
+/// True if value is an integer number.
+#define IsInteger(value) (round(value) == (value))
+
+
+//NB: Not actually truly all powers of 2 but this behavior is currently expected
+/// True if value is a non-negative integer that is 0 or has a single bit set. 0, 1, 2, 4, 8 ...
+#define IsPowerOfTwo(value) ( IsInteger(value) && !((value) & ((value) - 1)) )
+
+
+/// True if value is an integer that is not zero and does not have the 1 bit set
+#define IsEven(value) ( (value) && IsPowerOfTwo(value) )
+
+
+/// True if value is an integer that has the 1 bit set.
+#define IsOdd(value) ( IsInteger(value) && ((value) & 0x1) )
+
+
+/// True if value is a multiple of divisor
+#define IsMultiple(value, divisor) ((value) % (divisor) == 0)
+
+
+/// True if value is between low and high inclusive
+#define IsInRange(value, low, high) ( (value) >= (low) && (value) <= (high) )
+
+
+/// The cosecant of degrees
+#define Csc(degrees) (1 / sin(degrees))
+
+
+/// The secant of degrees
+#define Sec(degrees) (1 / cos(degrees))
+
+
+/// The cotangent of degrees
+#define Cot(degrees) (1 / tan(degrees))
+
+
+/// The 2-argument arctangent of x and y
+/proc/Atan2(x, y)
+	if (!x && !y)
+		return 0
+	var/a = arccos(x / sqrt(x * x + y * y))
+	return y >= 0 ? a : -a
+
+
+/// Returns a linear interpolation from a to b according to weight. weight 0 is a, weight 1 is b, weight 0.5 is half-way between the two.
+/proc/Interpolate(a, b, weight = 0.5)
+	return a + (b - a) * weight
+
+
+/// Returns the mean of either a list or variadic arguments: Mean(list(1, 2, 3)) = 2 , Mean(1, 2, 3) = 2
+/proc/Mean(...)
+	var/list/values = args
+	if (islist(values[1]))
+		values = values[1]
+	var/sum = 0
+	if (values.len)
+		for (var/value in values)
+			sum += value
+		sum /= values.len
+	return sum
+
+
+/// Returns the euclidian square magnitude of a vector of either a list or variadic arguments: VecSquareMag(list(1, 2, 3)) = 14 , VecSquareMag(1, 2, 3) = 14
+/proc/VecSquareMag(...)
+	var/list/parts = args
+	if (islist(parts[1]))
+		parts = parts[1]
+	var/sum = 0
+	for (var/part in parts)
+		sum += part * part
+	return sum
+
+
+/// Returns the euclidian magnitude of a vector of either a list or variadic arguments: VecMag(list(3, 4)) = 5 , VecMag(3, 4) = 5
+/proc/VecMag(...)
+	var/squareMag = VecSquareMag(arglist(args))
+	return sqrt(squareMag)
+
+
+/// Returns the angle of the matrix according to atan2 on the b, a parts
+/matrix/proc/get_angle()
+	return Atan2(b, a)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 97591449146..7c92bef3e40 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -337,7 +337,7 @@
 	return TRUE
 
 /// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir.
-/atom/proc/CanPass(atom/movable/mover, border_dir, air_group)
+/atom/proc/CanPass(atom/movable/mover, border_dir)
 	SHOULD_CALL_PARENT(TRUE)
 	SHOULD_BE_PURE(TRUE)
 	if(!mover)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 27fa24f363e..22fdee4329b 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -183,9 +183,8 @@
 	. = ..()
 
 
-/obj/machinery/door/CanAllowThrough(atom/movable/mover, border_dir, air_group)
+/obj/machinery/door/CanAllowThrough(atom/movable/mover, border_dir)
 	. = ..()
-	if(air_group) return !block_air_zones
 	if(.)
 		return
 	// Snowflake handling for PASSGLASS.
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index d1787e7a055..501d16e1cab 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -1,18 +1,3 @@
-/*/turf/CanPass(atom/movable/mover, border_dir, height=1.5,air_group=0)
-	if(target.blocks_air||blocks_air)
-		return 0
-
-	for(var/obj/obstacle in src)
-		if(!obstacle.CanPass(mover, target, height, air_group))
-			return 0
-	if(target != src)
-		for(var/obj/obstacle in target)
-			if(!obstacle.CanPass(mover, src, height, air_group))
-				return 0
-
-	return ..()
-*/
-
 //Convenience function for atoms to update turfs they occupy
 /atom/movable/proc/update_nearby_tiles(need_rebuild)
 	//for(var/turf/simulated/turf in locs) ZASTURF
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 23f9a084f58..51fd293b931 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -33,7 +33,7 @@
 	id = GAS_METHYL_BROMIDE
 	name = "Methyl Bromide"
 	specific_heat = 42.59 // J/(mol*K)
-	molar_mass = 0.095	  // kg/mol
+	molar_mass = 0.095 // kg/mol
 	//breathed_product = /datum/reagent/toxin/methyl_bromide
 	symbol_html = "CH<sub>3</sub>Br"
 	symbol = "CH3Br"
diff --git a/code/modules/atmospherics/rust/fusion_reactions.dm b/code/modules/atmospherics/rust/fusion_reactions.dm
new file mode 100644
index 00000000000..fd5346a7e7a
--- /dev/null
+++ b/code/modules/atmospherics/rust/fusion_reactions.dm
@@ -0,0 +1,28 @@
+GLOBAL_LIST_EMPTY(fusion_reactions)
+
+/datum/fusion_reaction
+	var/p_react = "" // Primary reactant.
+	var/s_react = "" // Secondary reactant.
+	var/minimum_energy_level = 1
+	var/energy_consumption = 0
+	var/energy_production = 0
+	var/radiation = 0
+	var/instability = 0
+	var/list/products = list()
+	var/minimum_reaction_temperature = 100
+	var/priority = 100
+
+/datum/fusion_reaction/proc/handle_reaction_special(obj/effect/reactor_em_field/holder)
+	return 0
+
+/proc/get_fusion_reaction(p_react, s_react)
+	return GLOB.fusion_reactions[p_react]?[s_react]
+
+/datum/fusion_reaction/deuterium_lithium
+	p_react = GAS_DEUTERIUM
+	s_react = "lithium"
+	energy_consumption = 2
+	energy_production = 0
+	radiation = 3
+	products = list(GAS_TRITIUM= 1)
+	instability = 1
diff --git a/code/modules/atmospherics/rust/particle_catcher.dm b/code/modules/atmospherics/rust/particle_catcher.dm
new file mode 100644
index 00000000000..b8757a813db
--- /dev/null
+++ b/code/modules/atmospherics/rust/particle_catcher.dm
@@ -0,0 +1,42 @@
+/obj/effect/fusion_particle_catcher
+	density = TRUE
+	anchored = TRUE
+	invisibility = 101
+	light_color = COLOR_BLUE
+	///Typecache of particles that can interact with this field.
+	var/static/list/particle_cache = typecacheof(/obj/projectile/energy/nuclear_particle)
+	var/obj/effect/reactor_em_field/parent
+	var/mysize = 0
+
+/obj/effect/fusion_particle_catcher/Destroy()
+	. =..()
+	parent.particle_catchers -= src
+	parent = null
+
+/obj/effect/fusion_particle_catcher/proc/set_size(newsize)
+	name = "collector [newsize]"
+	mysize = newsize
+	update_size()
+
+/obj/effect/fusion_particle_catcher/proc/add_particles(name, quantity = 1)
+	if(parent && parent.size >= mysize)
+		parent.add_particles(name, quantity)
+		return 1
+	return 0
+
+/obj/effect/fusion_particle_catcher/proc/update_size()
+	if(parent.size >= mysize)
+		set_density(1)
+		name = "collector [mysize] ON"
+	else
+		set_density(0)
+		name = "collector [mysize] OFF"
+
+/obj/effect/fusion_particle_catcher/bullet_act(obj/projectile/Proj)
+	parent.add_energy(Proj.damage)
+	update_icon()
+	return 0
+
+/obj/effect/fusion_particle_catcher/CanAllowThrough(atom/movable/mover, border_dir)
+	..()
+	return !particle_cache[mover.type]
diff --git a/code/modules/atmospherics/rust/reactor_core.dm b/code/modules/atmospherics/rust/reactor_core.dm
index a581e5ad4d3..68f9c1fa89d 100644
--- a/code/modules/atmospherics/rust/reactor_core.dm
+++ b/code/modules/atmospherics/rust/reactor_core.dm
@@ -1,15 +1,114 @@
 #define MAX_FIELD_STR 10000
 #define MIN_FIELD_STR 1
 
-/obj/machinery/reactor_core
+/obj/machinery/power/reactor_core
 	name = "\improper R-UST Mk. 10 Tokamak Reactor"
 	desc = "An enormous solenoid for generating extremely high power electromagnetic fields."
-	icon = 'icons/obj/machines/rust/fusion_core.dmi'
+	icon = 'icons/obj/machines/rust/reactor_core.dmi'
 	icon_state = "core0"
-	use_power = POWER_USE_IDLE
-	idle_power_usage = 100
+	density = TRUE
+	use_power = IDLE_POWER_USE
 	active_power_usage = 1000 //multiplied by field strength
 	anchored = FALSE
 
-	var/obj/effect/fusion_em_field/owned_field
+	var/obj/effect/reactor_em_field/owned_field
 	var/field_strength = 1//0.01
+	var/initial_id_tag
+
+/obj/machinery/power/reactor_core/mapped
+	anchored = TRUE
+
+/obj/machinery/power/reactor_core/process()
+	if((machine_stat & BROKEN) || !powernet || !owned_field)
+		Shutdown()
+/*
+/obj/machinery/power/reactor_core/Topic(href, href_list)
+	if(..())
+		return 1
+	if(href_list["str"])
+		var/dif = text2num(href_list["str"])
+		field_strength = min(max(field_strength + dif, MIN_FIELD_STR), MAX_FIELD_STR)
+		change_power_consumption(500 * field_strength, POWER_USE_ACTIVE)
+		if(owned_field)
+			owned_field.ChangeFieldStrength(field_strength)
+*/
+
+/obj/machinery/power/reactor_core/proc/Startup()
+	if(owned_field)
+		return
+	owned_field = new(loc, src)
+	owned_field.set_field_strength(field_strength)
+	icon_state = "core1"
+	update_use_power(ACTIVE_POWER_USE)
+	return TRUE
+
+/obj/machinery/power/reactor_core/proc/Shutdown(force_rupture)
+	if(owned_field)
+		icon_state = "core0"
+		if(force_rupture || owned_field.plasma_temperature > 1000)
+			owned_field.rupture()
+		else
+			owned_field.radiate_all()
+		qdel(owned_field)
+		owned_field = null
+	update_use_power(IDLE_POWER_USE)
+
+/obj/machinery/power/reactor_core/proc/add_particles(var/name, var/quantity = 1)
+	if(owned_field)
+		owned_field.add_particles(name, quantity)
+		return TRUE
+
+/obj/machinery/power/reactor_core/bullet_act(obj/projectile/Proj)
+	if(owned_field)
+		. = owned_field.bullet_act(Proj)
+
+/obj/machinery/power/reactor_core/proc/set_strength(var/value)
+	value = clamp(value, MIN_FIELD_STR, MAX_FIELD_STR)
+	field_strength = value
+	active_power_usage = value*5
+	if(owned_field)
+		owned_field.set_field_strength(value)
+
+/obj/machinery/power/reactor_core/attack_hand(mob/user)
+	visible_message("<span class='notice'>\The [user] hugs \the [src] to make it feel better!</span>")
+	if(owned_field)
+		Shutdown()
+	return TRUE
+/obj/machinery/power/reactor_core/tool_act(mob/living/user, obj/item/tool, tool_type)
+	. = ..()
+
+/obj/machinery/power/reactor_core/attackby(var/obj/item/W, var/mob/user)
+
+	if(owned_field)
+		to_chat(user,"<span class='warning'>Shut \the [src] off first!</span>")
+		return
+
+	if(W.tool_behaviour & TOOL_WRENCH)
+		anchored = !anchored
+		if(W.use_tool(user, 4 SECONDS))
+			if(anchored)
+				user.visible_message("[user.name] secures [src.name] to the floor.", \
+					"You secure the [src.name] to the floor.", \
+					"You hear a ratchet.")
+			else
+				user.visible_message("[user.name] unsecures [src.name] from the floor.", \
+					"You unsecure the [src.name] from the floor.", \
+					"You hear a ratchet.")
+		return
+
+	return ..()
+
+/obj/machinery/power/reactor_core/proc/jumpstart(var/field_temperature)
+	field_strength = 501 // Generally a good size.
+	Startup()
+	if(!owned_field)
+		return FALSE
+	owned_field.plasma_temperature = field_temperature
+	return TRUE
+
+/obj/machinery/power/reactor_core/proc/check_core_status()
+	if(machine_stat & BROKEN)
+		return FALSE
+	if(idle_power_usage > avail())
+		return FALSE
+	return TRUE
diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
index d3478f841eb..29e9f00b8ce 100644
--- a/code/modules/atmospherics/rust/reactor_em_field.dm
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -18,10 +18,10 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	icon = 'icons/obj/machines/rust/fusion.dmi'
 	icon_state = "emfield_s1"
 	alpha = 30
-	layer = 4
+	layer = RIPPLE_LAYER
 	light_color = COLOR_RED
 	color = COLOR_RED
-
+	anchored = TRUE //STOP FUCKING DRAGGING THE ELECTROMAGNETIC FIELD
 	var/size = 1
 	var/energy = 0
 	var/plasma_temperature = 0
@@ -30,16 +30,16 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	var/tick_instability = 0
 	var/percent_unstable = 0
 
-	var/obj/machinery/reactor_core/owned_core
+	var/obj/machinery/power/reactor_core/owned_core
 	var/list/reactants = list()
 	var/list/particle_catchers = list()
 
-	var/list/ignore_types = list(
-		/obj/item/projectile,
+	var/list/ignore_types = typecacheof(list(
+		/obj/projectile,
 		/obj/effect,
 		/obj/structure/cable,
 		/obj/machinery/atmospherics
-		)
+	))
 
 	var/light_min_range = 2
 	var/light_min_power = 0.2
@@ -49,7 +49,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	var/last_range
 	var/last_power
 
-/obj/effect/fusion_em_field/New(loc, var/obj/machinery/power/fusion_core/new_owned_core)
+/obj/effect/reactor_em_field/New(loc, var/obj/machinery/power/reactor_core/new_owned_core)
 	..()
 
 	set_light(light_min_power, light_min_range / 10, light_min_range)
@@ -65,37 +65,47 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 
 	catcher = new (locate(src.x,src.y,src.z))
 	catcher.parent = src
-	catcher.SetSize(1)
+	catcher.set_size(1)
 	particle_catchers.Add(catcher)
 
-	for(var/iter=1,iter<=6,iter++)
+	for(var/iter in 1 to 6)
 		catcher = new (locate(src.x-iter,src.y,src.z))
 		catcher.parent = src
-		catcher.SetSize((iter*2)+1)
+		catcher.set_size((iter*2)+1)
 		particle_catchers.Add(catcher)
 
 		catcher = new (locate(src.x+iter,src.y,src.z))
 		catcher.parent = src
-		catcher.SetSize((iter*2)+1)
+		catcher.set_size((iter*2)+1)
 		particle_catchers.Add(catcher)
 
 		catcher = new (locate(src.x,src.y+iter,src.z))
 		catcher.parent = src
-		catcher.SetSize((iter*2)+1)
+		catcher.set_size((iter*2)+1)
 		particle_catchers.Add(catcher)
 
 		catcher = new (locate(src.x,src.y-iter,src.z))
 		catcher.parent = src
-		catcher.SetSize((iter*2)+1)
+		catcher.set_size((iter*2)+1)
 		particle_catchers.Add(catcher)
 
 	START_PROCESSING(SSobj, src)
 
-/obj/effect/fusion_em_field/Initialize()
+/obj/effect/reactor_em_field/Initialize()
 	. = ..()
 	addtimer(CALLBACK(src, .proc/update_light_colors), 10 SECONDS, TIMER_LOOP)
-
-/obj/effect/fusion_em_field/proc/update_light_colors()
+	if(!GLOB.fusion_reactions.len)
+		GLOB.fusion_reactions = list()
+		for(var/rtype in subtypesof(/datum/fusion_reaction))
+			var/datum/fusion_reaction/cur_reaction = new rtype()
+			if(!GLOB.fusion_reactions[cur_reaction.p_react])
+				GLOB.fusion_reactions[cur_reaction.p_react] = list()
+			GLOB.fusion_reactions[cur_reaction.p_react][cur_reaction.s_react] = cur_reaction
+			if(!GLOB.fusion_reactions[cur_reaction.s_react])
+				GLOB.fusion_reactions[cur_reaction.s_react] = list()
+			GLOB.fusion_reactions[cur_reaction.s_react][cur_reaction.p_react] = cur_reaction
+
+/obj/effect/reactor_em_field/proc/update_light_colors()
 	var/use_range
 	var/use_power
 	switch (plasma_temperature)
@@ -136,7 +146,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 		last_range = use_range
 		last_power = use_power
 
-/obj/effect/fusion_em_field/Process()
+/obj/effect/reactor_em_field/process()
 	//make sure the field generator is still intact
 	if(QDELETED(owned_core))
 		qdel(src)
@@ -146,18 +156,18 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	var/added_particles = FALSE
 	var/datum/gas_mixture/uptake_gas = owned_core.loc.return_air()
 	if(uptake_gas)
-		uptake_gas = uptake_gas.remove_by_flag(XGM_GAS_FUSION_FUEL, rand(50,100))
+		uptake_gas = uptake_gas.removeByFlag(XGM_GAS_FUSION_FUEL, rand(50,100))
 	if(uptake_gas && uptake_gas.total_moles)
 		for(var/gasname in uptake_gas.gas)
 			if(uptake_gas.gas[gasname]*10 > reactants[gasname])
-				AddParticles(gasname, uptake_gas.gas[gasname]*10)
-				uptake_gas.adjust_gas(gasname, -(uptake_gas.gas[gasname]), update=FALSE)
+				add_particles(gasname, uptake_gas.gas[gasname]*10)
+				uptake_gas.adjustGas(gasname, -(uptake_gas.gas[gasname]), update=FALSE)
 				added_particles = TRUE
 		if(added_particles)
-			uptake_gas.update_values()
+			AIR_UPDATE_VALUES(uptake_gas)
 
 	//let the particles inside the field react
-	React()
+	react()
 
 	// Dump power to our powernet.
 	owned_core.add_avail(FUSION_ENERGY_PER_K * plasma_temperature)
@@ -179,12 +189,12 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 			radiation += radiate
 
 	check_instability()
-	Radiate()
+	radiate()
 	if(radiation)
-		SSradiation.radiate(src, round(radiation*0.001))
+		radiation_pulse(src, src.size/2, RAD_FULL_INSULATION, 100)
 	return 1
 
-/obj/effect/fusion_em_field/proc/check_instability()
+/obj/effect/reactor_em_field/proc/check_instability()
 	if(tick_instability > 0)
 		percent_unstable += (tick_instability*size)/FUSION_INSTABILITY_DIVISOR
 		tick_instability = 0
@@ -237,22 +247,27 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 							reactants[particle] -= lost_fuel
 							if(reactants[particle] <= 0)
 								reactants.Remove(particle)
-					Radiate()
+					radiate()
 	return
 
-/obj/effect/fusion_em_field/proc/is_shutdown_safe()
+/obj/effect/reactor_em_field/proc/is_shutdown_safe()
 	return plasma_temperature < 1000
 
-/obj/effect/fusion_em_field/proc/Rupture()
-	visible_message("<span class='danger'>\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!</span>")
+/obj/effect/reactor_em_field/proc/rupture()
+	visible_message(
+		span_danger("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!"),
+		null,
+		span_hear("You hear a horrifying resonant crash. Oh no.")
+	)
 	set_light(1, 0.1, 15, 2, "#ccccff")
 	empulse(get_turf(src), Ceil(plasma_temperature/1000), Ceil(plasma_temperature/300))
-	sleep(5)
-	RadiateAll()
+	addtimer(CALLBACK(src, .proc/kaboom), 5 SECONDS)
+
+/obj/effect/reactor_em_field/proc/kaboom()
+	radiate_all()
 	explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows.
-	return
 
-/obj/effect/fusion_em_field/proc/ChangeFieldStrength(var/new_strength)
+/obj/effect/reactor_em_field/proc/set_field_strength(var/new_strength)
 	var/calc_size = 1
 	if(new_strength <= 50)
 		calc_size = 1
@@ -271,40 +286,39 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	field_strength = new_strength
 	change_size(calc_size)
 
-/obj/effect/fusion_em_field/proc/AddEnergy(var/a_energy, var/a_plasma_temperature)
-	energy += a_energy
-	plasma_temperature += a_plasma_temperature
-	if(a_energy && percent_unstable > 0)
-		percent_unstable -= a_energy/10000
+/obj/effect/reactor_em_field/proc/add_energy(added_energy, added_plasma_temperature)
+	energy += added_energy
+	plasma_temperature += added_plasma_temperature
+	if(added_energy && percent_unstable > 0)
+		percent_unstable -= added_energy/10000
 		if(percent_unstable < 0)
 			percent_unstable = 0
 	while(energy >= 100)
 		energy -= 100
 		plasma_temperature += 1
 
-/obj/effect/fusion_em_field/proc/AddParticles(var/name, var/quantity = 1)
+/obj/effect/reactor_em_field/proc/add_particles(name, quantity = 1)
 	if(name in reactants)
 		reactants[name] += quantity
 	else if(name != "proton" && name != "electron" && name != "neutron")
 		reactants.Add(name)
 		reactants[name] = quantity
 
-/obj/effect/fusion_em_field/proc/RadiateAll(var/ratio_lost = 1)
-
+/obj/effect/reactor_em_field/proc/radiate_all(ratio_lost = 1)
 	// Create our plasma field and dump it into our environment.
 	var/turf/T = get_turf(src)
 	if(istype(T))
 		var/datum/gas_mixture/plasma
 		for(var/reactant in reactants)
-			if(!gas_data.name[reactant])
+			if(!xgm_gas_data.name[reactant])
 				continue
 			if(!plasma)
 				plasma = new
-			plasma.adjust_gas(reactant, max(1,round(reactants[reactant]*0.1)), 0) // *0.1 to compensate for *10 when uptaking gas.
+			plasma.adjustGas(reactant, max(1,round(reactants[reactant]*0.1)), 0) // *0.1 to compensate for *10 when uptaking gas.
 		if(!plasma)
 			return
 		plasma.temperature = (plasma_temperature/2)
-		plasma.update_values()
+		AIR_UPDATE_VALUES(plasma)
 		T.assume_air(plasma)
 		T.hotspot_expose(plasma_temperature)
 		plasma = null
@@ -316,36 +330,28 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	radiation += plasma_temperature/2
 	plasma_temperature = 0
 
-	SSradiation.radiate(src, round(radiation*0.001))
-	Radiate()
+	radiation_pulse(src, src.size/2, RAD_FULL_INSULATION, 100)
+	radiate()
 
-/obj/effect/fusion_em_field/proc/Radiate()
-	if(istype(loc, /turf))
+/obj/effect/reactor_em_field/proc/radiate()
+	if(isturf(loc))
+		var/list/cache4speed = ignore_types
 		var/empsev = max(1, min(3, Ceil(size/2)))
 		for(var/atom/movable/AM in range(max(1,Floor(size/2)), loc))
-
-			if(AM == src || AM == owned_core || !AM.simulated)
-				continue
-
-			var/skip_obstacle
-			for(var/ignore_path in ignore_types)
-				if(istype(AM, ignore_path))
-					skip_obstacle = TRUE
-					break
-			if(skip_obstacle)
+			if(AM == src || AM == owned_core || !AM.simulated || cache4speed[AM.type])
 				continue
 
-			AM.visible_message("<span class='danger'>The field buckles visibly around \the [AM]!</span>")
+			AM.visible_message(span_danger("The field buckles visibly around \the [AM]!"))
 			tick_instability += rand(30,50)
 			AM.emp_act(empsev)
 
 	if(owned_core && owned_core.loc)
 		var/datum/gas_mixture/environment = owned_core.loc.return_air()
 		if(environment && environment.temperature < (T0C+1000)) // Putting an upper bound on it to stop it being used in a TEG.
-			environment.add_thermal_energy(plasma_temperature*20000)
+			environment.addThermalEnergy(plasma_temperature*20000)
 	radiation = 0
 
-/obj/effect/fusion_em_field/proc/change_size(var/newsize = 1)
+/obj/effect/reactor_em_field/proc/change_size(var/newsize = 1)
 	var/changed = 0
 	var/static/list/size_to_icon = list(
 			"3" = 'icons/effects/96x96.dmi',
@@ -361,17 +367,17 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 		if(newsize>1)
 			icon = size_to_icon["[newsize]"]
 		icon_state = "emfield_s[newsize]"
-		pixel_x = ((newsize-1) * -16) * PIXEL_MULTIPLIER
-		pixel_y = ((newsize-1) * -16) * PIXEL_MULTIPLIER
+		pixel_x = ((newsize-1) * -16)
+		pixel_y = ((newsize-1) * -16)
 		size = newsize
 		changed = newsize
 
-	for(var/obj/effect/fusion_particle_catcher/catcher in particle_catchers)
-		catcher.UpdateSize()
+	for(var/obj/effect/fusion_particle_catcher/catcher as anything in particle_catchers)
+		catcher.update_size()
 	return changed
 
 //the !!fun!! part
-/obj/effect/fusion_em_field/proc/React()
+/obj/effect/reactor_em_field/proc/react()
 	//loop through the reactants in random order
 	var/list/react_pool = reactants.Copy()
 
@@ -405,7 +411,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 			for(var/cur_s_react in possible_s_reacts)
 				if(possible_s_reacts[cur_s_react] < 1)
 					continue
-				var/decl/fusion_reaction/cur_reaction = get_fusion_reaction(cur_p_react, cur_s_react)
+				var/datum/fusion_reaction/cur_reaction = get_fusion_reaction(cur_p_react, cur_s_react)
 				if(cur_reaction && plasma_temperature >= cur_reaction.minimum_energy_level)
 					LAZYDISTINCTADD(possible_reactions, cur_reaction)
 
@@ -418,7 +424,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 
 			//split up the reacting atoms between the possible reactions
 			while(possible_reactions.len)
-				var/decl/fusion_reaction/cur_reaction = possible_reactions[1]
+				var/datum/fusion_reaction/cur_reaction = possible_reactions[1]
 				possible_reactions.Remove(cur_reaction)
 
 				//set the randmax to be the lower of the two involved reactants
@@ -479,24 +485,24 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 
 		// Loop through the newly produced reactants and add them to the pool.
 		for(var/reactant in produced_reactants)
-			AddParticles(reactant, produced_reactants[reactant])
+			add_particles(reactant, produced_reactants[reactant])
 
 		// Check whether there are reactants left, and add them back to the pool.
 		for(var/reactant in react_pool)
-			AddParticles(reactant, react_pool[reactant])
+			add_particles(reactant, react_pool[reactant])
 
-/obj/effect/fusion_em_field/Destroy()
+/obj/effect/reactor_em_field/Destroy()
 	set_light(0)
-	RadiateAll()
-	QDEL_NULL_LIST(particle_catchers)
+	radiate_all()
+	QDEL_LIST(particle_catchers)
 	if(owned_core)
 		owned_core.owned_field = null
 		owned_core = null
 	STOP_PROCESSING(SSobj, src)
-	. = ..()
+	return ..()
 
-/obj/effect/fusion_em_field/bullet_act(var/obj/item/projectile/Proj)
-	AddEnergy(Proj.damage)
+/obj/effect/reactor_em_field/bullet_act(obj/projectile/proj)
+	add_energy(proj.damage)
 	update_icon()
 	return 0
 
diff --git a/code/modules/projectiles/projectile/energy/nuclear_particle.dm b/code/modules/projectiles/projectile/energy/nuclear_particle.dm
index f8e518bdb8b..2942350ea10 100644
--- a/code/modules/projectiles/projectile/energy/nuclear_particle.dm
+++ b/code/modules/projectiles/projectile/energy/nuclear_particle.dm
@@ -1,6 +1,7 @@
 //Nuclear particle projectile - a deadly side effect of fusion
 /obj/projectile/energy/nuclear_particle
 	name = "nuclear particle"
+	desc = "Wow, that's moving pretty fast!"
 	icon_state = "nuclear_particle"
 	pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
 	armor_flag = ENERGY
@@ -9,6 +10,11 @@
 	speed = 0.4
 	hitsound = 'sound/weapons/emitter2.ogg'
 	impact_type = /obj/effect/projectile/impact/xray
+	var/energy = 10 //energy in eV
+	var/mega_energy = 0 //energy in MeV
+	var/particle_type
+	var/additional_particles = 0
+
 	var/static/list/particle_colors = list(
 		"red" = "#FF0000",
 		"blue" = "#00FF00",
diff --git a/tgstation.dme b/tgstation.dme
index 909c90b2aef..538ba3a0d06 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2327,6 +2327,7 @@
 #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer.dm"
 #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer_reactions.dm"
 */
+#include "code\modules\atmospherics\rust\fusion_reactions.dm"
 /*
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_core.dm"
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_defines.dm"
@@ -2336,6 +2337,7 @@
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_procs.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\atmos_machines_recipes.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer.dm"
+#include "code\modules\atmospherics\rust\particle_catcher.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer_items.dm"
 */
 #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm"
@@ -2348,7 +2350,8 @@
 #include "code\modules\atmospherics\machinery\components\unary_devices\passive_vent.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\portables_connector.dm"
 #include "code\modules\atmospherics\rust\reactor_core.dm"
-#include "code\modules\atmospherics\rust\reactor_core.dm"
+#include "code\modules\atmospherics\rust\reactor_em_field.dm"
+#include "code\modules\atmospherics\rust\particle_catcher.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\thermomachine.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\unary_devices.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm"

From 50cbfafec76a6fb6a98465c15d3095b2219b4c47 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 18 May 2022 17:11:47 -0400
Subject: [PATCH 098/200] R-UST progress

---
 code/__HELPERS/cmp.dm                         |   2 +-
 code/controllers/subsystem/explosions.dm      |   9 ++---
 code/game/objects/structures/window.dm        |   3 ++
 .../atmospherics/rust/fusion_reactions.dm     |   7 ++--
 .../modules/atmospherics/rust/reactor_core.dm |  29 ++++++++------
 .../atmospherics/rust/reactor_em_field.dm     |  37 ++++++++++--------
 code/modules/power/rtg.dm                     |  10 +++++
 icons/obj/machines/rust/160x160.dmi           | Bin 0 -> 55319 bytes
 icons/obj/machines/rust/224x224.dmi           | Bin 0 -> 100371 bytes
 icons/obj/machines/rust/288x288.dmi           | Bin 0 -> 174457 bytes
 icons/obj/machines/rust/352x352.dmi           | Bin 0 -> 264884 bytes
 icons/obj/machines/rust/416x416.dmi           | Bin 0 -> 366124 bytes
 icons/obj/machines/rust/96x96.dmi             | Bin 0 -> 23151 bytes
 13 files changed, 59 insertions(+), 38 deletions(-)
 create mode 100644 icons/obj/machines/rust/160x160.dmi
 create mode 100644 icons/obj/machines/rust/224x224.dmi
 create mode 100644 icons/obj/machines/rust/288x288.dmi
 create mode 100644 icons/obj/machines/rust/352x352.dmi
 create mode 100644 icons/obj/machines/rust/416x416.dmi
 create mode 100644 icons/obj/machines/rust/96x96.dmi

diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm
index 8f2d8e79d08..045664f6c97 100644
--- a/code/__HELPERS/cmp.dm
+++ b/code/__HELPERS/cmp.dm
@@ -169,5 +169,5 @@ GLOBAL_VAR_INIT(cmp_field, "name")
 	return initial(knowledge_b.priority) - initial(knowledge_a.priority)
 
 ///Orders R-UST fusion by priority
-/proc/cmp_fusion_reaction_des(var/decl/fusion_reaction/A, var/decl/fusion_reaction/B)
+/proc/cmp_fusion_reaction_des(datum/fusion_reaction/A, datum/fusion_reaction/B)
 	return B.priority - A.priority
diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm
index 337180125ae..0ca718862ca 100644
--- a/code/controllers/subsystem/explosions.dm
+++ b/code/controllers/subsystem/explosions.dm
@@ -389,8 +389,7 @@ SUBSYSTEM_DEF(explosions)
 
 	//lists are guaranteed to contain at least 1 turf at this point
 
-	for(var/TI in affected_turfs)
-		var/turf/T = TI
+	for(var/turf/T as anything in affected_turfs)
 		var/init_dist = cheap_hypotenuse(T.x, T.y, x0, y0)
 		var/dist = init_dist
 
@@ -414,12 +413,10 @@ SUBSYSTEM_DEF(explosions)
 
 		if(T == epicenter) // Ensures explosives detonating from bags trigger other explosives in that bag
 			var/list/items = list()
-			for(var/I in T)
-				var/atom/A = I
+			for(var/atom/A in T)
 				if (length(A.contents) && !(A.flags_1 & PREVENT_CONTENTS_EXPLOSION_1)) //The atom/contents_explosion() proc returns null if the contents ex_acting has been handled by the atom, and TRUE if it hasn't.
 					items += A.get_all_contents(ignore_flag_1 = PREVENT_CONTENTS_EXPLOSION_1)
-			for(var/thing in items)
-				var/atom/movable/movable_thing = thing
+			for(var/atom/movable/movable_thing as anything in items)
 				if(QDELETED(movable_thing))
 					continue
 				switch(dist)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 9c0defcbc21..73cd11da7c8 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -307,6 +307,9 @@
 		if(BURN)
 			playsound(src, 'sound/items/welder.ogg', 100, TRUE)
 
+/obj/structure/window/ex_act(severity, target)
+	return ..(min(EXPLODE_DEVASTATE, severity + 1), target)
+
 
 /obj/structure/window/deconstruct(disassembled = TRUE)
 	if(QDELETED(src))
diff --git a/code/modules/atmospherics/rust/fusion_reactions.dm b/code/modules/atmospherics/rust/fusion_reactions.dm
index fd5346a7e7a..55ea238a82f 100644
--- a/code/modules/atmospherics/rust/fusion_reactions.dm
+++ b/code/modules/atmospherics/rust/fusion_reactions.dm
@@ -20,9 +20,10 @@ GLOBAL_LIST_EMPTY(fusion_reactions)
 
 /datum/fusion_reaction/deuterium_lithium
 	p_react = GAS_DEUTERIUM
-	s_react = "lithium"
-	energy_consumption = 2
-	energy_production = 0
+	//s_react = "lithium"
+	s_react = GAS_NEON //DEBUG PURPOSES
+	energy_consumption = 0
+	energy_production = 2
 	radiation = 3
 	products = list(GAS_TRITIUM= 1)
 	instability = 1
diff --git a/code/modules/atmospherics/rust/reactor_core.dm b/code/modules/atmospherics/rust/reactor_core.dm
index 68f9c1fa89d..5c5246e2fe1 100644
--- a/code/modules/atmospherics/rust/reactor_core.dm
+++ b/code/modules/atmospherics/rust/reactor_core.dm
@@ -4,13 +4,16 @@
 /obj/machinery/power/reactor_core
 	name = "\improper R-UST Mk. 10 Tokamak Reactor"
 	desc = "An enormous solenoid for generating extremely high power electromagnetic fields."
-	icon = 'icons/obj/machines/rust/reactor_core.dmi'
+	icon = 'icons/obj/machines/rust/fusion_core.dmi'
 	icon_state = "core0"
+	layer = ABOVE_ALL_MOB_LAYER
 	density = TRUE
 	use_power = IDLE_POWER_USE
+	idle_power_usage = IDLE_POWER_USE
 	active_power_usage = 1000 //multiplied by field strength
 	anchored = FALSE
 
+	var/is_on = FALSE
 	var/obj/effect/reactor_em_field/owned_field
 	var/field_strength = 1//0.01
 	var/initial_id_tag
@@ -19,8 +22,9 @@
 	anchored = TRUE
 
 /obj/machinery/power/reactor_core/process()
-	if((machine_stat & BROKEN) || !powernet || !owned_field)
-		Shutdown()
+	if((machine_stat & BROKEN) || !use_power_from_net(use_power) || !owned_field)
+		if(is_on)
+			Shutdown()
 /*
 /obj/machinery/power/reactor_core/Topic(href, href_list)
 	if(..())
@@ -40,6 +44,7 @@
 	owned_field.set_field_strength(field_strength)
 	icon_state = "core1"
 	update_use_power(ACTIVE_POWER_USE)
+	is_on = TRUE
 	return TRUE
 
 /obj/machinery/power/reactor_core/proc/Shutdown(force_rupture)
@@ -52,6 +57,7 @@
 		qdel(owned_field)
 		owned_field = null
 	update_use_power(IDLE_POWER_USE)
+	is_on = FALSE
 
 /obj/machinery/power/reactor_core/proc/add_particles(var/name, var/quantity = 1)
 	if(owned_field)
@@ -70,15 +76,14 @@
 		owned_field.set_field_strength(value)
 
 /obj/machinery/power/reactor_core/attack_hand(mob/user)
-	visible_message("<span class='notice'>\The [user] hugs \the [src] to make it feel better!</span>")
-	if(owned_field)
-		Shutdown()
-	return TRUE
-/obj/machinery/power/reactor_core/tool_act(mob/living/user, obj/item/tool, tool_type)
 	. = ..()
+	if(!.)
+		visible_message("<span class='notice'>\The [user] hugs \the [src] to make it feel better!</span>")
+		if(owned_field)
+			Shutdown()
+		return TRUE
 
 /obj/machinery/power/reactor_core/attackby(var/obj/item/W, var/mob/user)
-
 	if(owned_field)
 		to_chat(user,"<span class='warning'>Shut \the [src] off first!</span>")
 		return
@@ -98,7 +103,7 @@
 
 	return ..()
 
-/obj/machinery/power/reactor_core/proc/jumpstart(var/field_temperature)
+/obj/machinery/power/reactor_core/proc/Jumpstart(var/field_temperature)
 	field_strength = 501 // Generally a good size.
 	Startup()
 	if(!owned_field)
@@ -109,6 +114,6 @@
 /obj/machinery/power/reactor_core/proc/check_core_status()
 	if(machine_stat & BROKEN)
 		return FALSE
-	if(idle_power_usage > avail())
-		return FALSE
+	/*if(idle_power_usage > avail())
+		return FALSE*/
 	return TRUE
diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
index 29e9f00b8ce..44b86fc0279 100644
--- a/code/modules/atmospherics/rust/reactor_em_field.dm
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -34,12 +34,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	var/list/reactants = list()
 	var/list/particle_catchers = list()
 
-	var/list/ignore_types = typecacheof(list(
-		/obj/projectile,
-		/obj/effect,
-		/obj/structure/cable,
-		/obj/machinery/atmospherics
-	))
+	var/static/list/ignore_types
 
 	var/light_min_range = 2
 	var/light_min_power = 0.2
@@ -51,8 +46,17 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 
 /obj/effect/reactor_em_field/New(loc, var/obj/machinery/power/reactor_core/new_owned_core)
 	..()
+	if(!ignore_types)
+		ignore_types = typecacheof(
+			list(
+				/obj/projectile,
+				/obj/effect,
+				/obj/structure/cable,
+				/obj/machinery/atmospherics
+			)
+		)
 
-	set_light(light_min_power, light_min_range / 10, light_min_range)
+	set_light(light_min_range, light_min_power, light_color, TRUE)
 	last_range = light_min_range
 	last_power = light_min_power
 
@@ -142,7 +146,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 
 	if (last_range != use_range || last_power != use_power || color != light_color)
 		color = light_color
-		set_light(min(use_power, 1), use_range / 6, use_range) //cap first arg at 1 to avoid breaking lighting stuff.
+		set_light(use_range, min(use_power, 1), light_color) //cap first arg at 1 to avoid breaking lighting stuff.
 		last_range = use_range
 		last_power = use_power
 
@@ -259,7 +263,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 		null,
 		span_hear("You hear a horrifying resonant crash. Oh no.")
 	)
-	set_light(1, 0.1, 15, 2, "#ccccff")
+	set_light(15, 1, "#ccccff")
 	empulse(get_turf(src), Ceil(plasma_temperature/1000), Ceil(plasma_temperature/300))
 	addtimer(CALLBACK(src, .proc/kaboom), 5 SECONDS)
 
@@ -354,16 +358,16 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 /obj/effect/reactor_em_field/proc/change_size(var/newsize = 1)
 	var/changed = 0
 	var/static/list/size_to_icon = list(
-			"3" = 'icons/effects/96x96.dmi',
-			"5" = 'icons/effects/160x160.dmi',
-			"7" = 'icons/effects/224x224.dmi',
-			"9" = 'icons/effects/288x288.dmi',
-			"11" = 'icons/effects/352x352.dmi',
-			"13" = 'icons/effects/416x416.dmi'
+			"3" = 'icons/obj/machines/rust/96x96.dmi',
+			"5" = 'icons/obj/machines/rust//160x160.dmi',
+			"7" = 'icons/obj/machines/rust/224x224.dmi',
+			"9" = 'icons/obj/machines/rust/288x288.dmi',
+			"11" = 'icons/obj/machines/rust/352x352.dmi',
+			"13" = 'icons/obj/machines/rust/416x416.dmi'
 			)
 
 	if( ((newsize-1)%2==0) && (newsize<=13) )
-		icon = 'icons/obj/machines/power/fusion.dmi'
+		icon = 'icons/obj/machines/rust/fusion.dmi'
 		if(newsize>1)
 			icon = size_to_icon["[newsize]"]
 		icon_state = "emfield_s[newsize]"
@@ -395,6 +399,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 		var/list/produced_reactants = new/list
 		var/list/p_react_pool = react_pool.Copy()
 		while(p_react_pool.len)
+		//for(var/i = 1; i <= p_react_pool.len; i++)
 			//pick one of the unprocessed reacting reagents randomly
 			var/cur_p_react = pick(p_react_pool)
 			p_react_pool.Remove(cur_p_react)
diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm
index f2772304f23..64f1527b1aa 100644
--- a/code/modules/power/rtg.dm
+++ b/code/modules/power/rtg.dm
@@ -107,6 +107,16 @@
 	SHOULD_CALL_PARENT(FALSE)
 	return
 
+/obj/machinery/power/rtg/debug/station
+	name = "Debug RTG"
+	power_gen = 400000
+
+/obj/machinery/power/rtg/debug/station/Initialize(mapload)
+	. = ..()
+	var/joke = pick("Singularity", "Supermatter Shard", "Tesla Coil")
+	name = "Totally a [joke]."
+	desc = "Yup. That's a [joke]."
+
 /obj/machinery/power/rtg/lavaland
 	name = "Lava powered RTG"
 	desc = "This device only works when exposed to the toxic fumes of Lavaland"
diff --git a/icons/obj/machines/rust/160x160.dmi b/icons/obj/machines/rust/160x160.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..4d1c433dc5d41b8a16df4fc90c310106ce8d9999
GIT binary patch
literal 55319
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
Lyi%@Hw2b^8ep6H%

literal 0
HcmV?d00001

diff --git a/icons/obj/machines/rust/224x224.dmi b/icons/obj/machines/rust/224x224.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..14ac5100a9ab0978ae68a4700a63f01f98b407d5
GIT binary patch
literal 100371
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%0D0CH%G>PyU7)_9yK
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

literal 0
HcmV?d00001

diff --git a/icons/obj/machines/rust/288x288.dmi b/icons/obj/machines/rust/288x288.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..d2169ef032a1507c6e827dbe25affb0ad421f0c6
GIT binary patch
literal 174457
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%0Dsgy7sQDBZzw0AMk_=VCiUnhFYpy1
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

literal 0
HcmV?d00001

diff --git a/icons/obj/machines/rust/352x352.dmi b/icons/obj/machines/rust/352x352.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..b5e369d91d36513778871d1ea756f27a604d5b8a
GIT binary patch
literal 264884
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

literal 0
HcmV?d00001

diff --git a/icons/obj/machines/rust/416x416.dmi b/icons/obj/machines/rust/416x416.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..93f4ba7d521491a8bda88bbb41e9b3557684c48d
GIT binary patch
literal 366124
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%0A~NSyE6ewV?xSGH7{I(m_~E@!=HbTrvD#ezT+J05
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
JWt~$(69DNHwuJxy

literal 0
HcmV?d00001

diff --git a/icons/obj/machines/rust/96x96.dmi b/icons/obj/machines/rust/96x96.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..764f03c19165da3b64a986d8830af00a2c8c409f
GIT binary patch
literal 23151
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
a`u_oKeR_8gU+j$l0000<MNUMnLSTXmo2(T8

literal 0
HcmV?d00001


From fea32ecf719ff5a06e4dbbe6868197e02817e697 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 19 May 2022 00:48:40 -0400
Subject: [PATCH 099/200] Mo shit

---
 code/__DEFINES/atmospherics/reactor.dm        |   6 ++
 .../ZAS/XGM/xgm_immutable_gas_mixture.dm      |  58 ------------------
 code/modules/atmospherics/ZAS/Zone.dm         |   2 -
 code/modules/atmospherics/rust/fuel_rod.dm    |  45 ++++++++++++++
 .../modules/atmospherics/rust/reactor_core.dm |  13 ++--
 .../atmospherics/rust/reactor_em_field.dm     |   6 +-
 icons/obj/machines/rust/fuel_rod.dmi          | Bin 0 -> 223 bytes
 tgstation.dme                                 |   4 +-
 8 files changed, 65 insertions(+), 69 deletions(-)
 create mode 100644 code/__DEFINES/atmospherics/reactor.dm
 delete mode 100644 code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
 create mode 100644 code/modules/atmospherics/rust/fuel_rod.dm
 create mode 100644 icons/obj/machines/rust/fuel_rod.dmi

diff --git a/code/__DEFINES/atmospherics/reactor.dm b/code/__DEFINES/atmospherics/reactor.dm
new file mode 100644
index 00000000000..5cda280fcf0
--- /dev/null
+++ b/code/__DEFINES/atmospherics/reactor.dm
@@ -0,0 +1,6 @@
+#define FUEL_ROD_GAS_VOLUME (CELL_VOLUME/2)
+#define FUEL_ROD_REAGENT_VOLUME 200
+
+#define ROD_FUEL (1<<0)
+#define ROD_MODERATOR (1<<1)
+#define ROD_CONTROL (1<<2)
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
deleted file mode 100644
index 25238f32b4b..00000000000
--- a/code/modules/atmospherics/ZAS/XGM/xgm_immutable_gas_mixture.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-/datum/gas_mixture/immutable
-	temperature = TCMB
-	var/initial_temperature = TCMB
-
-/datum/gas_mixture/immutable/updateValues()
-	temperature = initial_temperature
-	return ..()
-
-/datum/gas_mixture/immutable/adjustGas(gasid, moles, update = 1)
-	return
-
-/datum/gas_mixture/immutable/remove()
-	return new type
-
-/datum/gas_mixture/immutable/add()
-	return TRUE
-
-/datum/gas_mixture/immutable/subtract()
-	return TRUE
-
-/datum/gas_mixture/immutable/divide()
-	return TRUE
-
-/datum/gas_mixture/immutable/multiply()
-	return TRUE
-
-/datum/gas_mixture/immutable/adjustGasWithTemp(gasid, moles, temp, update = 1)
-	return
-
-/datum/gas_mixture/immutable/adjustMultipleGases()
-	return
-
-/datum/gas_mixture/immutable/adjustMultipleGasesWithTemp()
-	return
-
-/datum/gas_mixture/immutable/merge()
-	return
-
-/datum/gas_mixture/immutable/copyFrom()
-	return
-
-/datum/gas_mixture/immutable/getHeatCapacity()
-	return HEAT_CAPACITY_VACUUM
-
-/datum/gas_mixture/immutable/removeRatio()
-	return new type
-
-/datum/gas_mixture/immutable/removeVolume()
-	return new type
-
-/datum/gas_mixture/immutable/removeByFlag()
-	return new type
-
-/datum/gas_mixture/immutable/shareRatio(datum/gas_mixture/other, connecting_tiles, share_size, one_way)
-	. = ..()
-	temperature = initial_temperature
-
-
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index d3e84ca15ee..59079017a4a 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -161,7 +161,6 @@ Class Procs:
 
 	// Update gas overlays.
 	if(air.checkTileGraphic(graphic_add, graphic_remove))
-		//for(var/turf/simulated/T in contents)
 		for(var/turf/open/T in contents)
 			if(T.simulated)
 				T.update_graphic(graphic_add, graphic_remove)
@@ -192,7 +191,6 @@ Class Procs:
 	// Update atom temperature.
 	if(abs(air.temperature - last_air_temperature) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		last_air_temperature = air.temperature
-		//for(var/turf/simulated/T in contents) ZASTURF
 		for(var/turf/T in contents)
 			if(!T.simulated)
 				continue
diff --git a/code/modules/atmospherics/rust/fuel_rod.dm b/code/modules/atmospherics/rust/fuel_rod.dm
new file mode 100644
index 00000000000..98e7f7cf46f
--- /dev/null
+++ b/code/modules/atmospherics/rust/fuel_rod.dm
@@ -0,0 +1,45 @@
+/obj/item/fuel_rod
+	name = "fuel rod"
+	desc = "A heavy container filled with a reactive substance"
+	icon = 'icons/obj/machines/rust/fuel_rod.dmi'
+	flags_1 = CONDUCT_1
+	hitsound = 'sound/weapons/smash.ogg'
+	force = 5
+	throwforce = 10
+	throw_speed = 1
+	throw_range = 4
+	custom_materials = list(/datum/material/iron = 500)
+
+	var/obj/machinery/power/reactor_core/parent
+	var/max_volume
+	///The amount of contents being exposed to the air, as a decimal
+	var/exposure_rate = 0
+
+/obj/item/fuel_rod/proc/return_volume()
+	return
+
+/obj/item/fuel_rod/gas
+	name = "fuel rod (gas)"
+	desc = "A long and heavy container used for storing highly compressed gas."
+
+	max_volume = FUEL_ROD_GAS_VOLUME
+	var/datum/gas_mixture/air_contents = null
+
+/obj/item/fuel_rod/gas/Initialize(mapload)
+	. = ..()
+	air_contents = new(max_volume)
+
+/obj/item/fuel_rod/gas/return_volume()
+	return air_contents.removeVolume(exposure_rate * air_contents.volume)
+
+/obj/item/fuel_rod/reagent
+	name = "fuel rod (reagent)"
+
+	max_volume = FUEL_ROD_REAGENT_VOLUME
+
+/obj/item/fuel_rod/reagent/Initialize(mapload)
+	. = ..()
+	create_reagents(max_volume, TRANSPARENT)
+
+/obj/item/fuel_rod/reagent/return_volume()
+	return reagents.trans_to(parent, max_volume * exposure_rate, show_message = FALSE)
diff --git a/code/modules/atmospherics/rust/reactor_core.dm b/code/modules/atmospherics/rust/reactor_core.dm
index 5c5246e2fe1..402f037c4fb 100644
--- a/code/modules/atmospherics/rust/reactor_core.dm
+++ b/code/modules/atmospherics/rust/reactor_core.dm
@@ -18,6 +18,11 @@
 	var/field_strength = 1//0.01
 	var/initial_id_tag
 
+	var/list/all_rods = list()
+	var/list/control_rods = list()
+	var/list/moderator_rods = list()
+	var/list/fuel_rods = list()
+
 /obj/machinery/power/reactor_core/mapped
 	anchored = TRUE
 
@@ -59,7 +64,7 @@
 	update_use_power(IDLE_POWER_USE)
 	is_on = FALSE
 
-/obj/machinery/power/reactor_core/proc/add_particles(var/name, var/quantity = 1)
+/obj/machinery/power/reactor_core/proc/add_particles(name, quantity = 1)
 	if(owned_field)
 		owned_field.add_particles(name, quantity)
 		return TRUE
@@ -68,7 +73,7 @@
 	if(owned_field)
 		. = owned_field.bullet_act(Proj)
 
-/obj/machinery/power/reactor_core/proc/set_strength(var/value)
+/obj/machinery/power/reactor_core/proc/set_strength(value)
 	value = clamp(value, MIN_FIELD_STR, MAX_FIELD_STR)
 	field_strength = value
 	active_power_usage = value*5
@@ -83,7 +88,7 @@
 			Shutdown()
 		return TRUE
 
-/obj/machinery/power/reactor_core/attackby(var/obj/item/W, var/mob/user)
+/obj/machinery/power/reactor_core/attackby(obj/item/W, mob/user)
 	if(owned_field)
 		to_chat(user,"<span class='warning'>Shut \the [src] off first!</span>")
 		return
@@ -103,7 +108,7 @@
 
 	return ..()
 
-/obj/machinery/power/reactor_core/proc/Jumpstart(var/field_temperature)
+/obj/machinery/power/reactor_core/proc/Jumpstart(field_temperature)
 	field_strength = 501 // Generally a good size.
 	Startup()
 	if(!owned_field)
diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
index 44b86fc0279..111ec69fd40 100644
--- a/code/modules/atmospherics/rust/reactor_em_field.dm
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -271,7 +271,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	radiate_all()
 	explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows.
 
-/obj/effect/reactor_em_field/proc/set_field_strength(var/new_strength)
+/obj/effect/reactor_em_field/proc/set_field_strength(new_strength)
 	var/calc_size = 1
 	if(new_strength <= 50)
 		calc_size = 1
@@ -355,11 +355,11 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 			environment.addThermalEnergy(plasma_temperature*20000)
 	radiation = 0
 
-/obj/effect/reactor_em_field/proc/change_size(var/newsize = 1)
+/obj/effect/reactor_em_field/proc/change_size(newsize = 1)
 	var/changed = 0
 	var/static/list/size_to_icon = list(
 			"3" = 'icons/obj/machines/rust/96x96.dmi',
-			"5" = 'icons/obj/machines/rust//160x160.dmi',
+			"5" = 'icons/obj/machines/rust/160x160.dmi',
 			"7" = 'icons/obj/machines/rust/224x224.dmi',
 			"9" = 'icons/obj/machines/rust/288x288.dmi',
 			"11" = 'icons/obj/machines/rust/352x352.dmi',
diff --git a/icons/obj/machines/rust/fuel_rod.dmi b/icons/obj/machines/rust/fuel_rod.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..7e48b39f9ca61ff847caeeb25237d5d14bb01342
GIT binary patch
literal 223
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)Tn`*L@SlNUs{d4Ppa^40
zkY6x^!?PP{Ku&g5NJNQCYH@N=W<g12ejWou#hl=<f}+yzUxEuhetn|lt*dqJ%=zFA
zp#~R?A3V}I@1uE=p{S>KhlO#F@nvH#g*lHV9hnrO5Ugoys=rmkII^?bSatIX35}!^
zM`wmjnK7FyQCoY*ubmCNYz*aprCxaIye$V>E8ywk7{W0#Ibp*8g9i*MI2mp(Q+lZR
SU9=Y{$KdJe=d#Wzp$Pz5=}_YU

literal 0
HcmV?d00001

diff --git a/tgstation.dme b/tgstation.dme
index 538ba3a0d06..653026cb969 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -196,6 +196,7 @@
 #include "code\__DEFINES\atmospherics\atmos_mapping_helpers.dm"
 #include "code\__DEFINES\atmospherics\atmos_mob_interaction.dm"
 #include "code\__DEFINES\atmospherics\atmos_piping.dm"
+#include "code\__DEFINES\atmospherics\reactor.dm"
 #include "code\__DEFINES\atmospherics\temperature.dm"
 #include "code\__DEFINES\atmospherics\ZAS.dm"
 #include "code\__DEFINES\atmospherics\ZAS_math.dm"
@@ -2337,7 +2338,6 @@
 #include "code\modules\atmospherics\machinery\components\fusion\hfr_procs.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\atmos_machines_recipes.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer.dm"
-#include "code\modules\atmospherics\rust\particle_catcher.dm"
 #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer_items.dm"
 */
 #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm"
@@ -2352,6 +2352,7 @@
 #include "code\modules\atmospherics\rust\reactor_core.dm"
 #include "code\modules\atmospherics\rust\reactor_em_field.dm"
 #include "code\modules\atmospherics\rust\particle_catcher.dm"
+#include "code\modules\atmospherics\rust\fuel_rod.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\thermomachine.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\unary_devices.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm"
@@ -2382,7 +2383,6 @@
 #include "code\modules\atmospherics\machinery\pipes\heat_exchange\simple.dm"
 #include "code\modules\atmospherics\ZAS\Turf.dm"
 #include "code\modules\atmospherics\ZAS\XGM\gases.dm"
-#include "code\modules\atmospherics\ZAS\XGM\xgm_immutable_gas_mixture.dm"
 #include "code\modules\atmospherics\ZAS\Zone.dm"
 #include "code\modules\atmospherics\ZAS\zas_extras\inflatable.dm"
 #include "code\modules\atmospherics\ZAS\_docs.dm"

From 25528355422f23878dc078c9fbd1fd892a8c0b83 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 19 May 2022 01:39:16 -0400
Subject: [PATCH 100/200] more fuel rod stuff

---
 code/__DEFINES/atmospherics/reactor.dm        | 10 +++++
 code/modules/atmospherics/rust/fuel_rod.dm    | 44 +++++++++++++++++++
 .../modules/atmospherics/rust/reactor_core.dm | 12 +++++
 .../atmospherics/rust/reactor_em_field.dm     |  2 +-
 4 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/code/__DEFINES/atmospherics/reactor.dm b/code/__DEFINES/atmospherics/reactor.dm
index 5cda280fcf0..55d2c4afc27 100644
--- a/code/__DEFINES/atmospherics/reactor.dm
+++ b/code/__DEFINES/atmospherics/reactor.dm
@@ -4,3 +4,13 @@
 #define ROD_FUEL (1<<0)
 #define ROD_MODERATOR (1<<1)
 #define ROD_CONTROL (1<<2)
+
+#define REACTOR_SLOT_1 "one"
+#define REACTOR_SLOT_2 "two"
+#define REACTOR_SLOT_3 "three"
+#define REACTOR_SLOT_4 "four"
+#define REACTOR_SLOT_5 "five"
+#define REACTOR_SLOT_6 "six"
+#define REACTOR_SLOT_7 "seven"
+#define REACTOR_SLOT_8 "eight"
+#define REACTOR_SLOT_9 "nine"
diff --git a/code/modules/atmospherics/rust/fuel_rod.dm b/code/modules/atmospherics/rust/fuel_rod.dm
index 98e7f7cf46f..be5c0d26304 100644
--- a/code/modules/atmospherics/rust/fuel_rod.dm
+++ b/code/modules/atmospherics/rust/fuel_rod.dm
@@ -11,6 +11,10 @@
 	custom_materials = list(/datum/material/iron = 500)
 
 	var/obj/machinery/power/reactor_core/parent
+	///Fuel, Control, Moderator
+	var/rod_type
+	///The reactor slot this rod occupies
+	var/occupied_slot
 	var/max_volume
 	///The amount of contents being exposed to the air, as a decimal
 	var/exposure_rate = 0
@@ -18,6 +22,46 @@
 /obj/item/fuel_rod/proc/return_volume()
 	return
 
+/obj/item/fuel_rod/proc/insert(obj/machinery/power/reactor_core/reactor, slot, mob/user) // No, you can't put two in one slot. Im sorry.
+	if(reactor.rods_by_slot[slot])
+		to_chat(user, span_notice("There is already a fuel rod in that slot."))
+		return
+
+	parent = reactor
+	parent.rods_by_slot[slot] = src
+	parent.all_rods += src
+	occupied_slot = slot
+
+	switch(rod_type)
+		if(ROD_FUEL)
+			parent.fuel_rods += src
+		if(ROD_CONTROL)
+			parent.control_rods += src
+		if(ROD_MODERATOR)
+			parent.moderator_rods += src
+
+
+/obj/item/fuel_rod/proc/remove(mob/user) // PULL OUT PULL OUT
+	if(!parent)
+		CRASH("Fuel rod remove() called with no parent")
+
+	if(user)
+		user.put_in_hands(src)
+	else
+		forceMove(get_turf(parent))
+
+	parent.rods_by_slot[occupied_slot] = null
+	parent.all_rods -= src
+	occupied_slot = null
+	switch(rod_type)
+		if(ROD_FUEL)
+			parent.fuel_rods -= src
+		if(ROD_CONTROL)
+			parent.control_rods -= src
+		if(ROD_MODERATOR)
+			parent.moderator_rods -= src
+	parent = null
+
 /obj/item/fuel_rod/gas
 	name = "fuel rod (gas)"
 	desc = "A long and heavy container used for storing highly compressed gas."
diff --git a/code/modules/atmospherics/rust/reactor_core.dm b/code/modules/atmospherics/rust/reactor_core.dm
index 402f037c4fb..e615e1a3831 100644
--- a/code/modules/atmospherics/rust/reactor_core.dm
+++ b/code/modules/atmospherics/rust/reactor_core.dm
@@ -23,6 +23,18 @@
 	var/list/moderator_rods = list()
 	var/list/fuel_rods = list()
 
+	var/list/rods_by_slot = list(
+		REACTOR_SLOT_1 = null,
+		REACTOR_SLOT_2 = null,
+		REACTOR_SLOT_3 = null,
+		REACTOR_SLOT_4 = null,
+		REACTOR_SLOT_5 = null,
+		REACTOR_SLOT_6 = null,
+		REACTOR_SLOT_7 = null,
+		REACTOR_SLOT_8 = null,
+		REACTOR_SLOT_9 = null
+	)
+
 /obj/machinery/power/reactor_core/mapped
 	anchored = TRUE
 
diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
index 111ec69fd40..742e14a0fc7 100644
--- a/code/modules/atmospherics/rust/reactor_em_field.dm
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -44,7 +44,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	var/last_range
 	var/last_power
 
-/obj/effect/reactor_em_field/New(loc, var/obj/machinery/power/reactor_core/new_owned_core)
+/obj/effect/reactor_em_field/New(loc, obj/machinery/power/reactor_core/new_owned_core)
 	..()
 	if(!ignore_types)
 		ignore_types = typecacheof(

From bb78a5c795cf5e1485f39fb88e77e84ffa572289 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 19 May 2022 01:41:08 -0400
Subject: [PATCH 101/200] softdel my rod

---
 code/modules/atmospherics/rust/fuel_rod.dm | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/code/modules/atmospherics/rust/fuel_rod.dm b/code/modules/atmospherics/rust/fuel_rod.dm
index be5c0d26304..7bf6ee830ce 100644
--- a/code/modules/atmospherics/rust/fuel_rod.dm
+++ b/code/modules/atmospherics/rust/fuel_rod.dm
@@ -19,6 +19,11 @@
 	///The amount of contents being exposed to the air, as a decimal
 	var/exposure_rate = 0
 
+/obj/item/fuel_rod/proc/Destroy(force)
+	if(parent)
+		remove(parent)
+	return ..()
+
 /obj/item/fuel_rod/proc/return_volume()
 	return
 

From 796069baf04c861d6618629a75da132ee8e9256e Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 19 May 2022 01:53:58 -0400
Subject: [PATCH 102/200] grumble

---
 code/modules/atmospherics/rust/fuel_rod.dm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/rust/fuel_rod.dm b/code/modules/atmospherics/rust/fuel_rod.dm
index 7bf6ee830ce..b9f3470a350 100644
--- a/code/modules/atmospherics/rust/fuel_rod.dm
+++ b/code/modules/atmospherics/rust/fuel_rod.dm
@@ -19,7 +19,7 @@
 	///The amount of contents being exposed to the air, as a decimal
 	var/exposure_rate = 0
 
-/obj/item/fuel_rod/proc/Destroy(force)
+/obj/item/fuel_rod/Destroy(force)
 	if(parent)
 		remove(parent)
 	return ..()
@@ -51,7 +51,7 @@
 		CRASH("Fuel rod remove() called with no parent")
 
 	if(user)
-		user.put_in_hands(src)
+		INVOKE_ASYNC(user, /mob.proc/put_in_hands, src)
 	else
 		forceMove(get_turf(parent))
 

From 18696594275ecf42cf2f8c184487217d4af33dbd Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 1 Jun 2022 14:40:59 -0400
Subject: [PATCH 103/200] This is probably fine.

---
 code/__DEFINES/atmospherics/ZAS.dm    | 10 +++----
 code/controllers/subsystem/zas.dm     |  4 +--
 code/game/turfs/closed/_closed.dm     |  2 +-
 code/modules/atmospherics/ZAS/Atom.dm |  5 +++-
 code/modules/atmospherics/ZAS/Turf.dm | 38 +--------------------------
 5 files changed, 13 insertions(+), 46 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 7d831e1d802..e840fa15297 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,10 +1,10 @@
-//#define ZASDBG
+#define ZASDBG
 //#define MULTIZAS
 
-#define AIR_ALLOWED 0
-#define AIR_BLOCKED 1
-#define ZONE_BLOCKED 2
-#define BLOCKED 3
+#define AIR_ALLOWED (0<<0)
+#define AIR_BLOCKED (1<<0)
+#define ZONE_BLOCKED (1<<1)
+#define BLOCKED (1<<2)
 
 #define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct
 
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 178725b864f..cf92662952b 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -362,8 +362,8 @@ SUBSYSTEM_DEF(zas)
 	#endif
 	var/ablock
 	ATMOS_CANPASS_TURF(ablock, A, B)
-	if(ablock == BLOCKED)
-		return BLOCKED
+	if(ablock & BLOCKED)
+		return AIR_BLOCKED
 	ATMOS_CANPASS_TURF(., B, A)
 	return ablock | .
 
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index 6b63d1f4c13..f269032d350 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -3,7 +3,7 @@
 	turf_flags = IS_SOLID
 	opacity = TRUE
 	density = TRUE
-	blocks_air = TRUE
+	blocks_air = AIR_BLOCKED
 	rad_insulation = RAD_MEDIUM_INSULATION
 	pass_flags_self = PASSCLOSEDTURF
 /*
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index 501d16e1cab..9c15a00e3a2 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -8,18 +8,21 @@
 
 	return 1
 
-//Basically another way of calling CanPass(null, other, 0, 0) and CanPass(null, other, 1.5, 1).
+
 //Returns:
 // 0 - Not blocked
 // AIR_BLOCKED - Blocked
 // ZONE_BLOCKED - Not blocked, but zone boundaries will not cross.
 // BLOCKED - Blocked, zone boundaries will not cross even if opened.
+///Checks whether or not ZAS can occupy this atom's turf. Invoked by the ATMOS_CANPASS_TURF macro.
 /atom/proc/zas_canpass(turf/other)
 	#ifdef ZASDBG
 	ASSERT(isturf(other))
 	#endif
 	if(can_atmos_pass == CANPASS_PROC)
 		CRASH("Atmos pass assigned proc when proc doesn't exist.")
+	else
+		CRASH("FUCK. zas_canpass() invoked when the atom doesn't even use it")
 
 // This is a legacy proc only here for compatibility - you probably should just use ATMOS_CANPASS_TURF directly.
 /turf/zas_canpass(turf/other)
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index f2443e22dae..42267c2f595 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -20,7 +20,7 @@
 /turf/proc/update_air_properties()
 	var/block
 	ATMOS_CANPASS_TURF(block, src, src)
-	if(block & AIR_BLOCKED)
+	if(block & AIR_BLOCKED || block & BLOCKED)
 		//dbg(blocked)
 		return 1
 
@@ -51,42 +51,6 @@
 			//var/turf/simulated/sim = unsim
 			if(TURF_HAS_VALID_ZONE(unsim))
 				SSzas.connect(unsim, src)
-/*
-///Yes. Massive copy paste. Pain.
-/turf/open/space/update_air_properties()
-	var/block
-	ATMOS_CANPASS_TURF(block, src, src)
-	if(block & AIR_BLOCKED)
-		//dbg(blocked)
-		return 1
-
-	#ifdef MULTIZAS
-	for(var/d = 1, d < 64, d *= 2)
-	#else
-	for(var/d = 1, d < 16, d *= 2)
-	#endif
-
-		var/turf/unsim = get_step(src, d)
-
-		if(!unsim)
-			continue
-
-		block = unsim.zas_canpass(src)
-
-		if(block & AIR_BLOCKED)
-			//unsim.dbg(air_blocked, turn(180,d))
-			continue
-
-		var/r_block = zas_canpass(unsim)
-
-		if(r_block & AIR_BLOCKED)
-			continue
-
-		if(unsim.simulated)
-			var/turf/sim = unsim
-			if(TURF_HAS_VALID_ZONE(sim))
-				SSzas.connect(sim, src)
-*/
 
 // Helper for can_safely_remove_from_zone().
 //ZASTURF - MACRO IM NOT COMMENTING THIS SHIT OUT

From 6cb73e8ca0dbd1c623005ccded0d2d9bbc9c293b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 2 Jun 2022 02:20:47 -0400
Subject: [PATCH 104/200] Alot of progress. Still fighting the selfmerge bug

---
 code/__DEFINES/atmospherics/ZAS.dm            |  23 ++-
 code/controllers/subsystem/zas.dm             |   5 +-
 code/game/atoms_movable.dm                    |   2 +-
 code/game/machinery/doors/door.dm             |   4 +-
 code/game/machinery/doors/windowdoor.dm       |   2 +-
 code/game/machinery/shieldgen.dm              |   2 +-
 .../effects/effect_system/effects_foam.dm     |   4 +-
 code/game/objects/structures/false_walls.dm   |   4 +-
 code/game/objects/structures/holosign.dm      |   2 +-
 .../objects/structures/windoor_assembly.dm    |   4 +-
 code/game/objects/structures/window.dm        |   7 +-
 code/game/turfs/change_turf.dm                |  15 +-
 code/game/turfs/turf.dm                       |  16 ++
 code/modules/admin/verbs/fix_air.dm           |   1 -
 .../antagonists/blob/structures/_blob.dm      |   2 +-
 code/modules/atmospherics/ZAS/Atom.dm         |  14 +-
 code/modules/atmospherics/ZAS/Connection.dm   |  19 +-
 code/modules/atmospherics/ZAS/Debug.dm        |  63 ++++++-
 code/modules/atmospherics/ZAS/Diagnostic.dm   |  12 +-
 code/modules/atmospherics/ZAS/Fire.dm         |   9 -
 code/modules/atmospherics/ZAS/Turf.dm         | 171 +++++++++---------
 code/modules/atmospherics/ZAS/Zone.dm         |   8 +-
 .../atmospherics/ZAS/zas_extras/inflatable.dm |   2 +-
 23 files changed, 205 insertions(+), 186 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index e840fa15297..a2c4ebee8c0 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -4,7 +4,6 @@
 #define AIR_ALLOWED (0<<0)
 #define AIR_BLOCKED (1<<0)
 #define ZONE_BLOCKED (1<<1)
-#define BLOCKED (1<<2)
 
 #define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct
 
@@ -37,16 +36,15 @@
 		} \
 	} while(FALSE)
 
-
-
-//#define TURF_HAS_VALID_ZONE(T) (istype(T, /turf/simulated) && T:zone && !T:zone:invalid) ZASTURF
-
-#define TURF_HAS_VALID_ZONE(T) (T.simulated && T:zone && !T:zone:invalid)
+#define TURF_HAS_VALID_ZONE(T) (T.simulated && T.zone && !T.zone.invalid)
 #ifdef MULTIZAS
 
+///"Can safely remove from zone"
 GLOBAL_REAL(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
+///"Get zone neighbors"
 GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 
+///Can air move from B to A?
 #define ATMOS_CANPASS_TURF(ret,A,B) \
 	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
 		ret = BLOCKED; \
@@ -78,10 +76,10 @@ GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 					ret |= AM.zas_canpass(B); \
 				} \
 				if (CANPASS_NEVER) { \
-					ret = BLOCKED; \
+					ret = AIR_BLOCKED; \
 				} \
 			} \
-			if (ret == BLOCKED) { \
+			if (ret == AIR_BLOCKED) { \
 				break;\
 			}\
 		}\
@@ -91,9 +89,10 @@ GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 GLOBAL_REAL_VAR(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
 GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 
+///Can air move from B to A?
 #define ATMOS_CANPASS_TURF(ret,A,B) \
 	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
-		ret = BLOCKED; \
+		ret = AIR_BLOCKED|ZONE_BLOCKED; \
 	} \
 	else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \
 		ret = ZONE_BLOCKED; \
@@ -107,17 +106,17 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 				} \
 				if (CANPASS_DENSITY) { \
 					if (AM.density) { \
-						ret |= AIR_BLOCKED; \
+						ret |= AIR_BLOCKED|ZONE_BLOCKED; \
 					} \
 				} \
 				if (CANPASS_PROC) { \
 					ret |= AM.zas_canpass(B); \
 				} \
 				if (CANPASS_NEVER) { \
-					ret = BLOCKED; \
+					ret = AIR_BLOCKED|ZONE_BLOCKED; \
 				} \
 			} \
-			if (ret == BLOCKED) { \
+			if (ret & AIR_BLOCKED) { \
 				break;\
 			}\
 		}\
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index cf92662952b..7fd44b7f4dd 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -161,7 +161,7 @@ SUBSYSTEM_DEF(zas)
 	to_chat(world, span_boldannounce("ZAS: Processing Geometry..."))
 
 	var/simulated_turf_count = 0
-	//for(var/turf/simulated/S) ZASTURF
+
 	for(var/turf/S)
 		if(!S.simulated)
 			continue
@@ -362,7 +362,7 @@ SUBSYSTEM_DEF(zas)
 	#endif
 	var/ablock
 	ATMOS_CANPASS_TURF(ablock, A, B)
-	if(ablock & BLOCKED)
+	if(ablock & AIR_BLOCKED)
 		return AIR_BLOCKED
 	ATMOS_CANPASS_TURF(., B, A)
 	return ablock | .
@@ -382,7 +382,6 @@ SUBSYSTEM_DEF(zas)
 		B.c_merge(A)
 		mark_zone_update(A)
 
-//datum/controller/subsystem/zas/proc/connect(turf/simulated/A, turf/simulated/B) //ZASTURF
 /datum/controller/subsystem/zas/proc/connect(turf/A, turf/B)
 	#ifdef ZASDBG
 	ASSERT(A.simulated)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index f561262a0ca..c66453dea45 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -113,7 +113,7 @@
 	unbuckle_all_mobs(force = TRUE)
 
 	if(loc)
-		//Restore air flow if we were blocking it (movables with ATMOS_PASS_PROC will need to do this manually if necessary)
+		//Restore air flow if we were blocking it (movables with zas_canpass() will need to do this manually if necessary)
 		if(((can_atmos_pass == CANPASS_DENSITY && density) || can_atmos_pass == CANPASS_NEVER) && isturf(loc))
 			can_atmos_pass = CANPASS_ALWAYS
 			update_nearby_tiles()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 22fdee4329b..442193cd7c5 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -61,7 +61,7 @@
 	else
 		flags_1 &= ~PREVENT_CLICK_UNDER_1
 
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 	//doors only block while dense though so we have to use the proc
 	real_explosion_block = explosion_block
 	explosion_block = EXPLOSION_BLOCK_PROC
@@ -179,7 +179,7 @@
 		return
 
 /obj/machinery/door/Move()
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 	. = ..()
 
 
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 7ddcd91cb5c..3ee24b2a485 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -60,7 +60,7 @@
 	)
 
 	AddElement(/datum/element/connect_loc, loc_connections)
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 /obj/machinery/door/window/ComponentInitialize()
 	. = ..()
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 7798c13477f..12beef1bc21 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -14,7 +14,7 @@
 /obj/structure/emergency_shield/Initialize(mapload)
 	. = ..()
 	setDir(pick(GLOB.cardinals))
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 /obj/structure/emergency_shield/Destroy()
 	update_nearby_tiles()
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index abe6c7f88cf..c1d02254383 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -279,11 +279,11 @@
 
 /obj/structure/foamedmetal/Initialize(mapload)
 	. = ..()
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 /obj/structure/foamedmetal/Destroy()
 	set_density(0)
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 	. = ..()
 
 /obj/structure/foamedmetal/Move()
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 84a471a4931..121425c57a0 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -31,7 +31,7 @@
 	var/obj/item/stack/initialized_mineral = new mineral // Okay this kinda sucks.
 	set_custom_materials(initialized_mineral.mats_per_unit, mineral_amount)
 	qdel(initialized_mineral)
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 
 /obj/structure/falsewall/attack_hand(mob/user, list/modifiers)
@@ -56,7 +56,7 @@
 		set_opacity(density)
 		opening = FALSE
 		update_appearance()
-		update_nearby_tiles(TRUE)
+		update_nearby_tiles()
 
 /obj/structure/falsewall/zas_canpass(turf/other)
 	if(QDELETED(src))
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index f2875d4c213..a851d1ea07c 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -106,7 +106,7 @@
 	. = ..()
 	var/turf/local = get_turf(loc)
 	ADD_TRAIT(local, TRAIT_FIREDOOR_STOP, TRAIT_GENERIC)
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 /obj/structure/holosign/barrier/atmos/block_superconductivity() //Didn't used to do this, but it's "normal", and will help ease heat flow transitions with the players.
 	return TRUE
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 4539b8ff00f..449a1480076 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -33,7 +33,7 @@
 	. = ..()
 	if(set_dir)
 		setDir(set_dir)
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 	var/static/list/loc_connections = list(
 		COMSIG_ATOM_EXIT = .proc/on_exit,
@@ -41,7 +41,7 @@
 
 	AddElement(/datum/element/connect_loc, loc_connections)
 	AddComponent(/datum/component/simple_rotation, ROTATION_NEEDS_ROOM)
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 /obj/structure/windoor_assembly/Destroy()
 	set_density(FALSE)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 73cd11da7c8..a44021cf73d 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -62,7 +62,7 @@
 	if(reinf && anchored)
 		state = RWINDOW_SECURE
 
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 	if(fulltile)
 		setDir()
@@ -333,7 +333,7 @@
 		. += new /obj/item/shard(location)
 
 /obj/structure/window/proc/AfterRotation(mob/user, degrees)
-	update_nearby_tiles(TRUE)
+	update_nearby_tiles()
 
 /obj/structure/window/proc/on_painted(obj/structure/window/source, is_dark_color)
 	SIGNAL_HANDLER
@@ -358,9 +358,6 @@
 /obj/structure/window/Move()
 	update_nearby_tiles()
 	. = ..()
-	/*
-	if(anchored)
-		move_update_air(T)*/
 
 /obj/structure/window/zas_canpass(turf/T, vertical = FALSE)
 	if(QDELETED(src))
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 6ac60a6b9a4..569a0567f77 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -14,9 +14,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 		qdel(thing, force=TRUE)
 
 	if(turf_type)
-		var/turf/newT = ChangeTurf(turf_type, baseturf_type, flags)
-		SSzas.mark_for_update(newT)
-		//CALCULATE_ADJACENT_TURFS(newT, KILL_EXCITED)
+		ChangeTurf(turf_type, baseturf_type, flags)
 
 /turf/proc/copyTurf(turf/T)
 	if(T.type != type)
@@ -81,8 +79,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 	var/old_bp = blueprint_data
 	blueprint_data = null
 
-
-
 	var/list/old_baseturfs = baseturfs
 	var/old_type = type
 
@@ -91,15 +87,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 
 	changing_turf = TRUE
 
-	if(connections) connections.erase_all()
-	if(simulated)
-		//Yeah, we're just going to rebuild the whole thing.
-		//Despite this being called a bunch during explosions,
-		//the zone will only really do heavy lifting once.
-		var/turf/S = src
-		if(S.zone) S.zone.rebuild()
-
 	qdel(src) //Just get the side effects and call Destroy
+
 	//We do this here so anything that doesn't want to persist can clear itself
 	var/list/old_comp_lookup = comp_lookup?.Copy()
 	var/list/old_signal_procs = signal_procs?.Copy()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index a6e8e7a9864..356b1aa1781 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -185,10 +185,26 @@ GLOBAL_LIST_EMPTY(station_turfs)
 		for(var/A in B.contents)
 			qdel(A)
 		return
+
 	visibilityChanged()
 	QDEL_LIST(blueprint_data)
 	flags_1 &= ~INITIALIZED_1
 	requires_activation = FALSE
+
+	///ZAS THINGS
+	if(connections)
+		connections.erase_all()
+
+	if(simulated && zone)
+		///Try to gracefully remove
+		if(can_safely_remove_from_zone())
+			c_copy_air()
+			zone.remove(src)
+
+		else //Just rebuild the fucker
+			zone.rebuild()
+	///NO MORE ZAS THINGS
+
 	..()
 
 	vis_contents.Cut()
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index 8dab77c9d09..a23d19cba78 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -39,7 +39,6 @@
 	for(var/id in xgm_gas_data.tile_overlay)
 		unsorted_overlays |= xgm_gas_data.tile_overlay[id]
 
-	//for(var/turf/simulated/T in world) ZASTURF
 	for(var/turf/T in world)
 		if(!T.simulated)
 			continue
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index afcb295838a..df2b67c1b3d 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -42,7 +42,7 @@
 	setDir(pick(GLOB.cardinals))
 	update_appearance()
 	if(atmosblock)
-		update_nearby_tiles(TRUE)
+		update_nearby_tiles()
 	ConsumeTile()
 	if(!QDELETED(src)) //Consuming our tile can in rare cases cause us to del
 		AddElement(/datum/element/swabable, CELL_LINE_TABLE_BLOB, CELL_VIRUS_TABLE_GENERIC, 2, 2)
diff --git a/code/modules/atmospherics/ZAS/Atom.dm b/code/modules/atmospherics/ZAS/Atom.dm
index 9c15a00e3a2..c0bb67ae42b 100644
--- a/code/modules/atmospherics/ZAS/Atom.dm
+++ b/code/modules/atmospherics/ZAS/Atom.dm
@@ -1,6 +1,5 @@
 //Convenience function for atoms to update turfs they occupy
-/atom/movable/proc/update_nearby_tiles(need_rebuild)
-	//for(var/turf/simulated/turf in locs) ZASTURF
+/atom/movable/proc/update_nearby_tiles()
 	for(var/turf/turf in locs)
 		if(!turf.simulated)
 			continue
@@ -10,10 +9,9 @@
 
 
 //Returns:
-// 0 - Not blocked
-// AIR_BLOCKED - Blocked
-// ZONE_BLOCKED - Not blocked, but zone boundaries will not cross.
-// BLOCKED - Blocked, zone boundaries will not cross even if opened.
+// 0 / AIR_ALLOWED - Not blocked. Air and zones can mingle with this turf as they please.
+// AIR_BLOCKED - Blocked. Air cannot move into, out of, or over this turf.
+// ZONE_BLOCKED - Air can flow in this turf, but zones may not merge over it.
 ///Checks whether or not ZAS can occupy this atom's turf. Invoked by the ATMOS_CANPASS_TURF macro.
 /atom/proc/zas_canpass(turf/other)
 	#ifdef ZASDBG
@@ -32,6 +30,7 @@
 
 	. = 0
 	ATMOS_CANPASS_TURF(., src, other)
+	stack_trace("Turf ZAS canpass invoked.")
 
 /atom/proc/zas_mark_update()
 	var/turf/local_turf = get_turf(loc)
@@ -42,6 +41,3 @@
 /atom
 	var/simulated = TRUE
 	var/can_atmos_pass = CANPASS_ALWAYS
-#ifdef ZASDBG
-	var/verbose = FALSE
-#endif
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index bfd782b3e61..0b5d66fdc1e 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -48,20 +48,17 @@ Class Procs:
 		Makes numerous checks to decide whether the connection is still valid. Erases it automatically if not.
 
 */
-/* ZASTURF
-/connection/var/turf/simulated/A
-/connection/var/turf/simulated/B
-*/
-/connection/var/turf/A
-/connection/var/turf/B
-/connection/var/zone/zoneA
-/connection/var/zone/zoneB
 
-/connection/var/connection_edge/edge
+/connection/
+	var/turf/A
+	var/turf/B
+	var/zone/zoneA
+	var/zone/zoneB
+
+	var/connection_edge/edge
 
-/connection/var/state = 0
+	var/state = 0
 
-//connection/New(turf/simulated/A, turf/simulated/B) ZASTURF
 /connection/New(turf/A, turf/B)
 	#ifdef ZASDBG
 	//ASSERT(TURF_HAS_VALID_ZONE(A))
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index 9ec0d209228..961ab554798 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -1,18 +1,37 @@
+#ifdef ZASDBG
+
 GLOBAL_REAL_VAR(obj/effect/zasdbg/assigned/zasdbgovl_assigned) = new
 GLOBAL_REAL_VAR(obj/effect/zasdbg/created/zasdbgovl_created) = new
 GLOBAL_REAL_VAR(obj/effect/zasdbg/merged/zasdbgovl_merged) = new
 GLOBAL_REAL_VAR(obj/effect/zasdbg/invalid_zone/zasdbgovl_invalid_zone) = new
-GLOBAL_REAL_VAR(obj/effect/zasdbg/air_blocked/zasdbgovl_air_blocked) = new
-GLOBAL_REAL_VAR(obj/effect/zasdbg/zone_blocked/zasdbgovl_zone_blocked) = new
 GLOBAL_REAL_VAR(obj/effect/zasdbg/blocked/zasdbgovl_blocked) = new
 GLOBAL_REAL_VAR(obj/effect/zasdbg/mark/zasdbgovl_mark) = new
 
-/connection_edge/var/dbg_out = 0
+GLOBAL_REAL_VAR(list/zasdbgovl_dirblock) = list(
+	"north" = new /obj/effect/zasdbg/air_blocked/north,
+	"east" = new /obj/effect/zasdbg/air_blocked/east,
+	"south" = new /obj/effect/zasdbg/air_blocked/south,
+	"west" = new /obj/effect/zasdbg/air_blocked/west,
+)
+///Retrives the directional block indicator overlay for a given direction
+#define ZAS_DIRECTIONAL_BLOCKER(d) (zasdbgovl_dirblock[dir2text(d)])
+
+GLOBAL_REAL_VAR(list/zasdbgovl_dirzoneblock) = list(
+	"north" = new /obj/effect/zasdbg/zone_blocked/north,
+	"east" = new /obj/effect/zasdbg/zone_blocked/east,
+	"south" = new /obj/effect/zasdbg/zone_blocked/south,
+	"west" = new /obj/effect/zasdbg/zone_blocked/west,
+)
+///Retrieves the zone blocked debug overlay for a given direction
+#define ZAS_ZONE_BLOCKER(d) (zasdbgovl_dirzoneblock[dir2text(d)])
 
 /obj/effect/zasdbg
 	icon = 'modular_pariah/master_files/icons/testing/Zone.dmi'
 	invisibility = INVISIBILITY_OBSERVER
 	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+	plane = ABOVE_GAME_PLANE
+	layer = FLY_LAYER
+	vis_flags = NONE
 
 /obj/effect/zasdbg/assigned
 	icon_state = "assigned"
@@ -22,21 +41,45 @@ GLOBAL_REAL_VAR(obj/effect/zasdbg/mark/zasdbgovl_mark) = new
 	icon_state = "merged"
 /obj/effect/zasdbg/invalid_zone
 	icon_state = "invalid"
-/obj/effect/zasdbg/air_blocked
-	icon_state = "block"
-/obj/effect/zasdbg/zone_blocked
-	icon_state = "zoneblock"
 /obj/effect/zasdbg/blocked
 	icon_state = "fullblock"
 /obj/effect/zasdbg/mark
 	icon_state = "mark"
 
-/turf/var/tmp/dbg_img
-/turf/proc/dbg(image/img, d = 0)
-	if(d > 0) img.dir = d
+/obj/effect/zasdbg/zone_blocked
+	icon_state = "zoneblock"
+
+/obj/effect/zasdbg/zone_blocked/north
+	dir = NORTH
+/obj/effect/zasdbg/zone_blocked/east
+	dir = EAST
+/obj/effect/zasdbg/zone_blocked/south
+	dir = SOUTH
+/obj/effect/zasdbg/zone_blocked/west
+	dir = WEST
+
+/obj/effect/zasdbg/air_blocked
+	icon_state = "block"
+
+/obj/effect/zasdbg/air_blocked/north
+	dir = NORTH
+/obj/effect/zasdbg/air_blocked/east
+	dir = EAST
+/obj/effect/zasdbg/air_blocked/south
+	dir = SOUTH
+/obj/effect/zasdbg/air_blocked/west
+	dir = WEST
+
+
+/turf/var/tmp/obj/effect/zasdbg/dbg_img
+/turf/proc/dbg(obj/effect/zasdbg/img)
 	vis_contents -= dbg_img
 	vis_contents += img
 	dbg_img = img
 
 /proc/soft_assert(thing,fail)
 	if(!thing) message_admins(fail)
+
+/turf/proc/zas_log(string)
+	to_chat(world, "[span_admin("ZAS:")] verbose turf output of [src] at ([src.x], [src.y], [src.z]): [string]")
+#endif
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index aeb088d7ad9..17f44c2e459 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -1,8 +1,8 @@
 /client/proc/Zone_Info(turf/T as null|turf)
 	set category = "Debug"
 	if(T)
-		if(T.simulated && T:zone) //ZASTURF
-			T:zone:dbg_data(src)
+		if(T.simulated && T.zone)
+			T.zone.dbg_data(src)
 		else
 			to_chat(mob, span_admin("ZASDBG: No zone here."))
 			var/datum/gas_mixture/mix = T.return_air()
@@ -17,9 +17,9 @@
 
 /client/var/list/zone_debug_images
 
-/client/proc/Test_ZAS_Connection(turf/T as turf) //ZASTURF
+/client/proc/Test_ZAS_Connection(turf/T as turf)
 	set category = "Debug"
-	if(!T.simulated) //ZASTURF
+	if(!T.simulated)
 		return
 
 	var/direction_list = list(\
@@ -37,7 +37,9 @@
 		return
 
 	if(direction == "N/A")
-		if(!(T.zas_canpass(T) & AIR_BLOCKED))
+		var/canpass_self
+		ATMOS_CANPASS_TURF(canpass_self, T, T)
+		if(!(canpass_self & AIR_BLOCKED))
 			to_chat(mob, "The turf can pass air! :D")
 		else
 			to_chat(mob, "No air passage :x")
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 6a1dc3e08a2..029d1c979a1 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -56,7 +56,6 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 				fire_tiles -= T
 				fuel_objs -= fuel
 	else
-		//for(var/turf/simulated/T in fire_tiles) ZASTURF
 		for(var/turf/T in fire_tiles)
 			if(istype(T.fire))
 				qdel(T.fire)
@@ -92,7 +91,6 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 /turf/proc/create_fire(fl)
 	return 0
 
-//turf/simulated/create_fire(fl) ZASTURF
 /turf/open/create_fire(fl, create_own_fuel)
 	if(!simulated)
 		return
@@ -142,7 +140,6 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	if(QDELETED(src))
 		return PROCESS_KILL
 
-	//var/turf/simulated/my_tile = loc ZASTURF
 	var/turf/my_tile = loc
 	if(istype(my_tile, /turf/open/space) || !my_tile.zone)
 		if(my_tile && my_tile.fire == src)
@@ -174,7 +171,6 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	//spread
 	for(var/direction in GLOB.cardinals)
-		//var/turf/simulated/enemy_tile = get_step(my_tile, direction) ZASTURF
 		var/turf/enemy_tile = get_step(my_tile, direction)
 		if(!istype(enemy_tile, /turf/open/space))
 			if(my_tile.open_directions & direction) //Grab all valid bordering tiles
@@ -233,12 +229,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	SSzas.active_hotspots.Remove(src)
 	. = ..()
 
-//turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. ZASTURF
 /turf/var/fire_protection = 0
 /turf/proc/apply_fire_protection()
 	fire_protection = world.time
-/*/turf/simulated/apply_fire_protection() ZASTURF
-	fire_protection = world.time*/
 
 /turf/open/space/apply_fire_protection()
 	return
@@ -475,11 +468,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		to_be_destroyed = FALSE
 
 
-//turf/proc/adjacent_fire_act(turf/simulated/floor/source, exposed_temperature, exposed_volume)
 /turf/proc/adjacent_fire_act(turf/open/floor/source, datum/gas_mixture/adj_air, adj_temp, adj_volume)
 	return
 
-//turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) ZASTURF
 /turf/open/floor/adjacent_fire_act(turf/open/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
 	var/dir_to = get_dir(src, adj_turf)
 
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 42267c2f595..a30abfc5ea2 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -9,8 +9,11 @@
 	var/thermal_conductivity = 0.05
 	var/list/initial_gas
 	var/planetary_atmos //Let's just let this exist for now.
+#ifdef ZASDBG
+	///Set to TRUE during debugging to get chat output on the atmos status of this turf
+	var/verbose = FALSE
+#endif
 
-///turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) ZASTURF
 /turf/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
 	if(graphic_add && graphic_add.len)
 		vis_contents += graphic_add
@@ -18,11 +21,11 @@
 		vis_contents -= graphic_remove
 
 /turf/proc/update_air_properties()
-	var/block
-	ATMOS_CANPASS_TURF(block, src, src)
-	if(block & AIR_BLOCKED || block & BLOCKED)
-		//dbg(blocked)
-		return 1
+	var/self_block
+	ATMOS_CANPASS_TURF(self_block, src, src)
+	if(self_block & AIR_BLOCKED)
+		src.dbg(zasdbgovl_blocked)
+		return TRUE
 
 	#ifdef MULTIZAS
 	for(var/d = 1, d < 64, d *= 2)
@@ -30,30 +33,29 @@
 	for(var/d = 1, d < 16, d *= 2)
 	#endif
 
-		var/turf/unsim = get_step(src, d)
+		var/turf/target = get_step(src, d)
 
-		if(!unsim)
+		if(!target)
 			continue
+		var/us_blocks_target
+		ATMOS_CANPASS_TURF(us_blocks_target, src, target)
 
-		block = unsim.zas_canpass(src)
-
-		if(block & AIR_BLOCKED)
-			//unsim.dbg(air_blocked, turn(180,d))
+		if(us_blocks_target & AIR_BLOCKED)
 			continue
 
-		var/r_block = zas_canpass(unsim)
-
-		if(r_block & AIR_BLOCKED)
+		var/target_blocks_us
+		ATMOS_CANPASS_TURF(target_blocks_us, target, src)
+		if(target_blocks_us & AIR_BLOCKED)
+			#ifdef ZASDBG
+			target.dbg(ZAS_DIRECTIONAL_BLOCKER(turn(d, 180)))
+			#endif
 			continue
 
-		//if(istype(unsim, /turf/simulated)) ZASTURF
-		if(unsim.simulated)
-			//var/turf/simulated/sim = unsim
-			if(TURF_HAS_VALID_ZONE(unsim))
-				SSzas.connect(unsim, src)
+		if(target.simulated)
+			if(TURF_HAS_VALID_ZONE(target))
+				SSzas.connect(target, src)
 
 // Helper for can_safely_remove_from_zone().
-//ZASTURF - MACRO IM NOT COMMENTING THIS SHIT OUT
 #define GET_ZONE_NEIGHBOURS(T, ret) \
 	ret = 0; \
 	if (T.zone) { \
@@ -75,7 +77,6 @@
 	This implementation may produce false negatives but it (hopefully) will not produce any false postiives.
 */
 
-///turf/simulated/proc/can_safely_remove_from_zone() ZASTURF
 /turf/proc/can_safely_remove_from_zone()
 	if(!zone)
 		return 1
@@ -87,9 +88,7 @@
 		//for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH)
 		if((dir & check_dirs) == dir)
 			//check that they are connected by the corner turf
-			//var/turf/simulated/T = get_step(src, dir) ZASTURF
 			var/turf/T = get_step(src, dir)
-			//if (!istype(T)) ZASTURF
 			if (!T.simulated)
 				. &= ~dir
 				continue
@@ -102,7 +101,6 @@
 	//it is safe to remove src from the zone if all cardinals are connected by corner turfs
 	. = !.
 
-//turf/simulated/update_air_properties() ZAS
 /turf/open/update_air_properties()
 	if(!simulated)
 		return ..()
@@ -111,12 +109,13 @@
 		c_copy_air() //not very efficient :(
 		zone = null //Easier than iterating through the list at the zone.
 
-	var/s_block
-	ATMOS_CANPASS_TURF(s_block, src, src)
-	if(s_block & AIR_BLOCKED)
+	var/self_block
+	ATMOS_CANPASS_TURF(self_block, src, src)
+	if(self_block & AIR_BLOCKED)
 		#ifdef ZASDBG
-		//if(verbose) log_admin("Self-blocked.")
-		//dbg(blocked)
+		if(verbose)
+			zas_log("Self-blocked.")
+		src.dbg(zasdbgovl_blocked)
 		#endif
 		if(zone)
 			var/zone/z = zone
@@ -133,105 +132,101 @@
 	open_directions = 0
 
 	var/list/postponed
+
 	#ifdef MULTIZAS
 	for(var/d = 1, d < 64, d *= 2)
 	#else
 	for(var/d = 1, d < 16, d *= 2)
 	#endif
+		var/turf/target = get_step(src, d)
 
-		var/turf/unsim = get_step(src, d)
-
-		if(!unsim) //edge of map
+		if(!target) //edge of map
 			continue
 
-		//var/block = unsim.zas_canpass(src)
-		var/block
-		ATMOS_CANPASS_TURF(block, src, unsim)
-		if(block & AIR_BLOCKED)
-
+		///The air mobility of target >> src
+		var/target_to_us
+		ATMOS_CANPASS_TURF(target_to_us, src, target)
+		if(target_to_us & AIR_BLOCKED)
 			#ifdef ZASDBG
-			if(verbose) log_admin("[d] is blocked.")
-			//unsim.dbg(air_blocked, turn(180,d))
+			if(verbose)
+				zas_log("[dir2text(d)] is blocked.")
+			src.dbg(ZAS_DIRECTIONAL_BLOCKER(d))
 			#endif
 
 			continue
 
-		//var/r_block = zas_canpass(unsim)
-		var/r_block
-		ATMOS_CANPASS_TURF(r_block, unsim, src)
-		if(r_block & AIR_BLOCKED)
-
+		///The air mobility of src >> target
+		var/us_to_target
+		ATMOS_CANPASS_TURF(us_to_target, target, src)
+		if(us_to_target & AIR_BLOCKED)
 			#ifdef ZASDBG
-			if(verbose) log_admin("[d] is blocked.")
-			//dbg(air_blocked, d)
+			if(verbose)
+				log_admin("[dir2text(d)] is blocked.")
+			target.dbg(ZAS_DIRECTIONAL_BLOCKER(turn(d, 180)))
 			#endif
 
 			//Check that our zone hasn't been cut off recently.
 			//This happens when windows move or are constructed. We need to rebuild.
-			//if((previously_open & d) && istype(unsim, /turf/simulated)) ZAS
-			if((previously_open & d) && unsim.simulated)
-				var/turf/sim = unsim
-				if(zone && sim.zone == zone)
+			if((previously_open & d) && target.simulated)
+				var/turf/sim_target = target
+				if(zone && sim_target.zone == zone)
 					zone.rebuild()
 					return
-
 			continue
 
 		open_directions |= d
 
-		//if(istype(unsim, /turf/simulated)) ZASTURF
-		if(unsim.simulated)
-
-			var/turf/sim = unsim
-			sim.open_directions |= GLOB.reverse_dir[d]
-
-			if(TURF_HAS_VALID_ZONE(sim))
+		if(target.simulated)
+			var/turf/sim_target = target
+			sim_target.open_directions |= GLOB.reverse_dir[d]
 
+			if(TURF_HAS_VALID_ZONE(sim_target))
 				//Might have assigned a zone, since this happens for each direction.
 				if(!zone)
-
 					//We do not merge if
 					//    they are blocking us and we are not blocking them, or if
 					//    we are blocking them and not blocking ourselves - this prevents tiny zones from forming on doorways.
-					if(((block & ZONE_BLOCKED) && !(r_block & ZONE_BLOCKED)) || ((r_block & ZONE_BLOCKED) && !(s_block & ZONE_BLOCKED)))
+					if(((target_to_us & ZONE_BLOCKED) && !(us_to_target & ZONE_BLOCKED)) || ((us_to_target & ZONE_BLOCKED) && !(self_block & ZONE_BLOCKED)))
 						#ifdef ZASDBG
-						if(verbose) log_admin("[d] is zone blocked.")
-
-						dbg(zasdbgovl_zone_blocked, d)
+						if(verbose)
+							zas_log("[dir2text(d)] is zone blocked.")
+						dbg(ZAS_ZONE_BLOCKER(d))
 						#endif
 
 						//Postpone this tile rather than exit, since a connection can still be made.
-						if(!postponed) postponed = list()
-						postponed.Add(sim)
+						if(!postponed)
+							postponed = list()
+						postponed.Add(sim_target)
 
 					else
-
-						sim.zone.add(src)
+						sim_target.zone.add(src)
 
 						#ifdef ZASDBG
 						dbg(zasdbgovl_assigned)
-						if(verbose) log_admin("Added to [zone]")
+						if(verbose)
+							zas_log("Added to [zone]")
 						#endif
 
-				else if(sim.zone != zone)
-
+				else if(sim_target.zone != zone)
 					#ifdef ZASDBG
-					if(verbose) log_admin("Connecting to [sim.zone]")
+					if(verbose)
+						zas_log("Connecting to [sim_target.zone]")
 					#endif
 
-					SSzas.connect(src, sim)
-
+					SSzas.connect(src, sim_target)
 
 			#ifdef ZASDBG
-				else if(verbose) log_admin("[d] has same zone.")
+				else if(verbose)
+					zas_log("[dir2text(d)] has same zone.")
 
-			else if(verbose) log_admin("[d] has invalid zone.")
+			else if(verbose)
+				zas_log("[dir2text(d)] has invalid or rebuilding zone.")
 			#endif
 		else
-
 			//Postponing connections to tiles until a zone is assured.
-			if(!postponed) postponed = list()
-			postponed.Add(unsim)
+			if(!postponed)
+				postponed = list()
+			postponed.Add(target)
 
 	if(!TURF_HAS_VALID_ZONE(src)) //Still no zone, make a new one.
 		var/zone/newzone = new/zone()
@@ -247,17 +242,16 @@
 
 	for(var/turf/T in postponed)
 		if(T.zone == src.zone)
+			#ifdef ZASDBG
+			zas_log("This turf tried to merge into itself! Current type: [src.type]")
+			#endif
 			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
 		SSzas.connect(src, T)
 
 /turf/proc/post_update_air_properties()
-	if(connections) connections.update_all()
-/*
-/turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
-	return 0*/
+	if(connections)
+		connections.update_all()
 
-/*/turf/proc/assume_gas(gasid, moles, temp = 0)
-	return 0*/
 /atom/movable/proc/block_superconductivity()
 	return
 
@@ -282,14 +276,12 @@
 	var/datum/gas_mixture/GM = return_air()
 	return GM.remove(amount)
 
-///turf/simulated/assume_air(datum/gas_mixture/giver) ZASTURF
 /turf/assume_air(datum/gas_mixture/giver)
 	if(!simulated)
 		return
 	var/datum/gas_mixture/my_air = return_air()
 	my_air.merge(giver)
 
-//turf/simulated/assume_gas(gasid, moles, temp = null) ZASTURF
 ///Basically adjustGasWithTemp() but a turf proc.
 /turf/proc/assume_gas(gasid, moles, temp = null)
 	if(!simulated)
@@ -304,7 +296,6 @@
 
 	return 1
 
-//turf/simulated/return_air() ZASTURF
 /turf/return_air()
 	RETURN_TYPE(/datum/gas_mixture)
 	if(!simulated)
@@ -340,12 +331,12 @@
 	AIR_UPDATE_VALUES(air)
 
 /turf/proc/c_copy_air()
-	if(!air) air = new/datum/gas_mixture
+	if(!air)
+		air = new/datum/gas_mixture
 	air.copyFrom(zone.air)
 	air.group_multiplier = 1
 
 
-//turf/simulated/proc/atmos_spawn_air(gas_id, amount, initial_temperature) ZASTURF
 /turf/proc/atmos_spawn_air(gas_id, amount, initial_temperature)
 	if(!simulated)
 		return
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 59079017a4a..8b8c2e02ed3 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -104,7 +104,7 @@ Class Procs:
 	ASSERT(!into.invalid)
 #endif
 	c_invalidate()
-	//for(var/turf/simulated/T in contents) ZASTURF
+
 	for(var/turf/T in contents)
 		if(!T.simulated)
 			continue
@@ -125,16 +125,16 @@ Class Procs:
 	invalid = 1
 	SSzas.remove_zone(src)
 	#ifdef ZASDBG
-	//for(var/turf/simulated/T in contents) ZASTURF
 	for(var/turf/T in contents)
 		if(!T.simulated)
 			T.dbg(zasdbgovl_invalid_zone)
 	#endif
 
 /zone/proc/rebuild()
-	if(invalid) return //Short circuit for explosions where rebuild is called many times over.
+	if(invalid)
+		return //Short circuit for explosions where rebuild is called many times over.
 	c_invalidate()
-	//for(var/turf/simulated/T in contents) ZASTURF
+
 	for(var/turf/T in contents)
 		if(!T.simulated)
 			continue
diff --git a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
index f9d1edb23ce..d5a35bff08b 100644
--- a/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
+++ b/code/modules/atmospherics/ZAS/zas_extras/inflatable.dm
@@ -71,7 +71,7 @@
 
 /obj/structure/inflatable/New(location)
 	..()
-	update_nearby_tiles(need_rebuild=1)
+	update_nearby_tiles()
 
 /obj/structure/inflatable/Initialize()
 	. = ..()

From 58e2b5ec8134e51273d829ad334def5f97922801 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 2 Jun 2022 13:15:25 -0400
Subject: [PATCH 105/200] ZAS READABILITY UPDATE

Adds a ton of comments to ZAS procs, renames some, and greatly improves ZAS debugging tools.
---
 code/__DEFINES/atmospherics/ZAS.dm            |  14 +-
 code/controllers/subsystem/zas.dm             |  35 +++--
 code/game/turfs/open/_open.dm                 |   2 -
 code/game/turfs/open/asteroid.dm              |  10 +-
 code/game/turfs/open/basalt.dm                |   2 +-
 code/game/turfs/open/chasm.dm                 |   6 +-
 code/game/turfs/open/floor/misc_floor.dm      |   4 +-
 .../turfs/open/floor/plating/misc_plating.dm  |   6 +-
 code/game/turfs/open/ice.dm                   |   4 +-
 code/game/turfs/open/lava.dm                  |   2 +-
 code/game/turfs/open/openspace.dm             |   4 +-
 code/game/turfs/open/planet.dm                |   4 +-
 code/game/turfs/open/snow.dm                  |   4 +-
 code/game/turfs/open/water.dm                 |   3 +-
 code/game/turfs/turf.dm                       |   4 +-
 code/modules/admin/verbs/fix_air.dm           |   2 +-
 code/modules/atmospherics/ZAS/Connection.dm   | 122 ++++++++++++++----
 .../atmospherics/ZAS/ConnectionGroup.dm       |  88 +++++++++----
 .../atmospherics/ZAS/ConnectionManager.dm     |  16 ++-
 code/modules/atmospherics/ZAS/Debug.dm        |  13 +-
 code/modules/atmospherics/ZAS/Turf.dm         |  61 ++++-----
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  62 ++++-----
 code/modules/atmospherics/ZAS/Zone.dm         |  47 +++++--
 .../atmospherics/machinery/other/miner.dm     |   2 +-
 .../awaymissions/mission_code/snowdin.dm      |   2 -
 .../ruins/icemoonruin_code/hotsprings.dm      |   2 +-
 code/modules/mod/modules/modules_maint.dm     |   2 +-
 27 files changed, 336 insertions(+), 187 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index a2c4ebee8c0..450fb1d3cf2 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,15 +1,23 @@
-#define ZASDBG
+//#define ZASDBG
 //#define MULTIZAS
 
+///Air and zones freely mingle with this turf under the given conditions
 #define AIR_ALLOWED (0<<0)
+///Neither air nor zones can interact with this turf under the given conditions
 #define AIR_BLOCKED (1<<0)
+///Air can pass through or into this turf, but zones may not merge with it.
 #define ZONE_BLOCKED (1<<1)
 
-#define ZONE_MIN_SIZE 14 //zones with less than this many turfs will always merge, even if the connection is not direct
+///Zones with less than this many turfs will always merge, even if the connection is not direct
+#define ZONE_MIN_SIZE 14
 
+///Air can always pass
 #define CANPASS_ALWAYS 1
+///Air can only pass if density is FALSE
 #define CANPASS_DENSITY 2
+///This atom uses /proc/zas_canpass()
 #define CANPASS_PROC 3
+///Air can never pass
 #define CANPASS_NEVER 4
 
 #define NORTHUP (NORTH|UP)
@@ -21,7 +29,7 @@
 #define SOUTHDOWN (SOUTH|DOWN)
 #define WESTDOWN (WEST|DOWN)
 
-
+///A replacement for /datum/gas_mixture/proc/update_values()
 #define AIR_UPDATE_VALUES(air) \
 	do{ \
 		var/list/cache = air.gas; \
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 7fd44b7f4dd..725c03eb5d1 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -107,7 +107,7 @@ SUBSYSTEM_DEF(zas)
 	var/active_zones = 0
 	var/next_id = 1
 
-
+///Stops processing while all ZAS-controlled airs and fires are nulled and the subsystem is reinitialized.
 /datum/controller/subsystem/zas/proc/Reboot()
 	// Stop processing while we rebuild.
 	can_fire = FALSE
@@ -125,7 +125,7 @@ SUBSYSTEM_DEF(zas)
 		var/zone/zone = zones[zones.len]
 		zones.len--
 
-		zone.c_invalidate()
+		zone.invalidate()
 
 	edges.Cut()
 	tiles_to_update.Cut()
@@ -344,17 +344,20 @@ SUBSYSTEM_DEF(zas)
 	cached_cost += TICK_USAGE_REAL - timer
 	cost_zones = MC_AVERAGE(cost_zones, TICK_DELTA_TO_MS(cached_cost))
 
+///Adds a zone to the subsystem, gives it's identifer, and marks it for update.
 /datum/controller/subsystem/zas/proc/add_zone(zone/z)
 	zones += z
 	z.name = "Zone [next_id++]"
 	mark_zone_update(z)
 
+///Removes a zone from the subsystem.
 /datum/controller/subsystem/zas/proc/remove_zone(zone/z)
 	zones -= z
 	zones_to_update -= z
 	if (processing_zones)
 		processing_zones -= z
 
+///Checks to see if air can flow between A and B.
 /datum/controller/subsystem/zas/proc/air_blocked(turf/A, turf/B)
 	#ifdef ZASDBG
 	ASSERT(isturf(A))
@@ -367,6 +370,7 @@ SUBSYSTEM_DEF(zas)
 	ATMOS_CANPASS_TURF(., B, A)
 	return ablock | .
 
+///Merges two zones. Largest by turf count wins.
 /datum/controller/subsystem/zas/proc/merge(zone/A, zone/B)
 	#ifdef ZASDBG
 	ASSERT(istype(A))
@@ -376,12 +380,13 @@ SUBSYSTEM_DEF(zas)
 	ASSERT(A != B)
 	#endif
 	if(A.contents.len < B.contents.len)
-		A.c_merge(B)
+		A.merge_into(B)
 		mark_zone_update(B)
 	else
-		B.c_merge(A)
+		B.merge_into(A)
 		mark_zone_update(A)
 
+///Forms a /connection/ between two turfs.
 /datum/controller/subsystem/zas/proc/connect(turf/A, turf/B)
 	#ifdef ZASDBG
 	ASSERT(A.simulated)
@@ -406,15 +411,17 @@ SUBSYSTEM_DEF(zas)
 	var/a_to_b = get_dir(A,B)
 	var/b_to_a = get_dir(B,A)
 
-	if(!A.connections) A.connections = new
-	if(!B.connections) B.connections = new
+	if(!A.connections)
+		A.connections = new
+	if(!B.connections)
+		B.connections = new
 
 	if(A.connections.get(a_to_b))
 		return
 	if(B.connections.get(b_to_a))
 		return
-	if(!space)
-		if(A.zone == B.zone) return
+	if(!space && (A.zone == B.zone))
+		return
 
 
 	var/connection/c = new /connection(A,B)
@@ -422,8 +429,10 @@ SUBSYSTEM_DEF(zas)
 	A.connections.place(c, a_to_b)
 	B.connections.place(c, b_to_a)
 
-	if(direct) c.mark_direct()
+	if(direct)
+		c.mark_direct()
 
+///Marks a turf for update.
 /datum/controller/subsystem/zas/proc/mark_for_update(turf/T)
 	#ifdef ZASDBG
 	ASSERT(isturf(T))
@@ -436,6 +445,7 @@ SUBSYSTEM_DEF(zas)
 	#endif
 	T.needs_air_update = 1
 
+///Marks a zone for update.
 /datum/controller/subsystem/zas/proc/mark_zone_update(zone/Z)
 	#ifdef ZASDBG
 	ASSERT(istype(Z))
@@ -445,6 +455,7 @@ SUBSYSTEM_DEF(zas)
 	zones_to_update += Z
 	Z.needs_update = 1
 
+///Sleeps an edge, preventing it from processing.
 /datum/controller/subsystem/zas/proc/mark_edge_sleeping(connection_edge/E)
 	#ifdef ZASDBG
 	ASSERT(istype(E))
@@ -454,6 +465,7 @@ SUBSYSTEM_DEF(zas)
 	active_edges -= E
 	E.sleeping = 1
 
+///Wakes an edge, adding it to the active process list.
 /datum/controller/subsystem/zas/proc/mark_edge_active(connection_edge/E)
 	#ifdef ZASDBG
 	ASSERT(istype(E))
@@ -463,9 +475,11 @@ SUBSYSTEM_DEF(zas)
 	active_edges += E
 	E.sleeping = 0
 
+///Wrapper for zoneA.air.compare(zoneB.air)
 /datum/controller/subsystem/zas/proc/equivalent_pressure(zone/A, zone/B)
 	return A.air.compare(B.air)
 
+///Returns *AN* edge between zones A and B, if one exists. Calls recheck() on it.
 /datum/controller/subsystem/zas/proc/get_edge(zone/A, zone/B)
 	if(istype(B))
 		for(var/connection_edge/zone/edge in A.edges)
@@ -484,6 +498,7 @@ SUBSYSTEM_DEF(zas)
 		edge.recheck()
 		return edge
 
+///Compare two turfs to see if they are EXACTLY the same.
 /datum/controller/subsystem/zas/proc/has_same_air(turf/A, turf/B)
 	if(A.initial_gas)
 		if(!B.initial_gas)
@@ -501,6 +516,7 @@ SUBSYSTEM_DEF(zas)
 		return 0
 	return 1
 
+///Removes an edge from the subsystem.
 /datum/controller/subsystem/zas/proc/remove_edge(connection_edge/E)
 	edges -= E
 	if(!E.sleeping)
@@ -508,6 +524,7 @@ SUBSYSTEM_DEF(zas)
 	if(processing_edges)
 		processing_edges -= E
 
+///Randomizes the lavaland gas mixture, and sets all lavaland unsimmed turfs to it.
 /datum/controller/subsystem/zas/proc/fuck_lavaland()
 	var/list/restricted_gases = list()
 	///No funny gasses allowed
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index b081387af5d..9ed6fe05a38 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -118,7 +118,6 @@
 	icon = 'icons/turf/boss_floors.dmi'
 	icon_state = "boss"
 	baseturfs = /turf/open/indestructible/boss
-	planetary_atmos = TRUE
 	initial_gas = LAVALAND_DEFAULT_ATMOS
 
 /turf/open/indestructible/boss/air
@@ -126,7 +125,6 @@
 
 /turf/open/indestructible/hierophant
 	icon = 'icons/turf/floors/hierophant_floor.dmi'
-	planetary_atmos = TRUE
 	initial_gas = LAVALAND_DEFAULT_ATMOS
 	baseturfs = /turf/open/indestructible/hierophant
 	smoothing_flags = SMOOTH_CORNERS
diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index 9201e54213c..b42fc44024a 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -141,7 +141,6 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/basalt/lava_land_surface
 	initial_gas = LAVALAND_DEFAULT_ATMOS
-	planetary_atmos = TRUE
 	baseturfs = /turf/open/lava/smooth/lava_land_surface
 
 /turf/open/misc/asteroid/lowpressure
@@ -172,7 +171,6 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 	simulated = FALSE
 	initial_gas = ICEMOON_DEFAULT_ATMOS
 
-	planetary_atmos = TRUE
 	bullet_sizzle = TRUE
 	bullet_bounce_sound = null
 	digResult = /obj/item/stack/sheet/mineral/snow
@@ -193,7 +191,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/lava/plasma/ice_moon
 	baseturfs = /turf/open/lava/plasma/ice_moon
-	planetary_atmos = TRUE
+
 
 /turf/open/misc/asteroid/snow/ice
 	name = "icy snow"
@@ -212,7 +210,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/snow/ice/icemoon
 	baseturfs = /turf/open/misc/asteroid/snow/ice/icemoon
-	planetary_atmos = TRUE
+
 	slowdown = 0
 
 /turf/open/misc/asteroid/snow/ice/burn_tile()
@@ -230,9 +228,9 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/misc/asteroid/snow/atmosphere
 	temperature = 180
-	planetary_atmos = FALSE
+
 
 /turf/open/misc/asteroid/snow/standard_air
 	initial_gas = OPENTURF_DEFAULT_ATMOS
 	temperature = T0C
-	planetary_atmos = FALSE
+
diff --git a/code/game/turfs/open/basalt.dm b/code/game/turfs/open/basalt.dm
index fd4f2f327cf..1c70f46de50 100644
--- a/code/game/turfs/open/basalt.dm
+++ b/code/game/turfs/open/basalt.dm
@@ -14,4 +14,4 @@
 		set_basalt_light(src)
 
 /turf/open/misc/basalt/safe
-	planetary_atmos = FALSE
+
diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm
index 693a5965a68..54bde9b1231 100644
--- a/code/game/turfs/open/chasm.dm
+++ b/code/game/turfs/open/chasm.dm
@@ -78,7 +78,7 @@
 // Chasms for Lavaland, with planetary atmos and lava glow
 /turf/open/chasm/lavaland
 	initial_gas = LAVALAND_DEFAULT_ATMOS
-	planetary_atmos = TRUE
+
 	baseturfs = /turf/open/chasm/lavaland
 	light_range = 1.9 //slightly less range than lava
 	light_power = 0.65 //less bright, too
@@ -90,7 +90,7 @@
 	icon_state = "icechasms-255"
 	base_icon_state = "icechasms"
 	initial_gas = ICEMOON_DEFAULT_ATMOS
-	planetary_atmos = TRUE
+
 	baseturfs = /turf/open/chasm/icemoon
 	light_range = 1.9
 	light_power = 0.65
@@ -102,7 +102,7 @@
 	icon_state = "junglechasm-255"
 	base_icon_state = "junglechasm"
 	initial_gas = OPENTURF_LOW_PRESSURE
-	planetary_atmos = TRUE
+
 	baseturfs = /turf/open/chasm/jungle
 
 /turf/open/chasm/jungle/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm
index 3879144366b..73bf110c48b 100644
--- a/code/game/turfs/open/floor/misc_floor.dm
+++ b/code/game/turfs/open/floor/misc_floor.dm
@@ -156,11 +156,11 @@
 	floor_tile = /obj/item/stack/tile/bronze/filled
 
 /turf/open/floor/bronze/filled/lavaland
-	planetary_atmos = TRUE
+
 	initial_gas = LAVALAND_DEFAULT_ATMOS
 
 /turf/open/floor/bronze/filled/icemoon
-	planetary_atmos = TRUE
+
 	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/floor/white
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
index 9425673e2cc..f4d3e60a5ae 100644
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ b/code/game/turfs/open/floor/plating/misc_plating.dm
@@ -47,7 +47,7 @@
 	temperature = 180
 	temperature = 180
 	attachment_holes = FALSE
-	planetary_atmos = TRUE
+
 	footstep = FOOTSTEP_SAND
 	barefootstep = FOOTSTEP_SAND
 	clawfootstep = FOOTSTEP_SAND
@@ -66,7 +66,7 @@
 	smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
 	smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_FLOOR_SNOWED)
 	canSmoothWith = list(SMOOTH_GROUP_FLOOR_SNOWED)
-	planetary_atmos = TRUE
+
 
 /turf/open/floor/plating/snowed/temperatre
 	temperature = 255.37
@@ -79,7 +79,7 @@
 	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/floor/plating/lavaland_atmos
-	planetary_atmos = TRUE
+
 	baseturfs = /turf/open/lava/smooth/lava_land_surface
 	initial_gas = LAVALAND_DEFAULT_ATMOS
 
diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm
index 8cd466fcefb..0ec9348e4dd 100644
--- a/code/game/turfs/open/ice.dm
+++ b/code/game/turfs/open/ice.dm
@@ -6,7 +6,7 @@
 	base_icon_state = "ice_turf-0"
 	temperature = 180
 	temperature = 180
-	planetary_atmos = TRUE
+
 	baseturfs = /turf/open/misc/ice
 	slowdown = 1
 	bullet_sizzle = TRUE
@@ -38,4 +38,4 @@
 	slowdown = 0
 
 /turf/open/misc/ice/icemoon/no_planet_atmos
-	planetary_atmos = FALSE
+
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 15a9f4b23cc..84d032626b6 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -236,7 +236,7 @@
 
 /turf/open/lava/smooth/lava_land_surface
 	initial_gas = LAVALAND_DEFAULT_ATMOS
-	planetary_atmos = TRUE
+
 	baseturfs = /turf/open/lava/smooth/lava_land_surface
 
 /turf/open/lava/smooth/airless
diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm
index 154e956b95f..951b06ad0b6 100644
--- a/code/game/turfs/open/openspace.dm
+++ b/code/game/turfs/open/openspace.dm
@@ -27,7 +27,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
 	initial_gas = AIRLESS_ATMOS
 
 /turf/open/openspace/airless/planetary
-	planetary_atmos = TRUE
+
 
 /turf/open/openspace/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
 	. = ..()
@@ -167,7 +167,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
 	name = "ice chasm"
 	baseturfs = /turf/open/openspace/icemoon
 	initial_gas = ICEMOON_DEFAULT_ATMOS
-	planetary_atmos = TRUE
+
 	var/replacement_turf = /turf/open/misc/asteroid/snow/icemoon
 	/// Replaces itself with replacement_turf if the turf below this one is in a no ruins allowed area (usually ruins themselves)
 	var/protect_ruin = TRUE
diff --git a/code/game/turfs/open/planet.dm b/code/game/turfs/open/planet.dm
index 30e7a430020..e1166876be0 100644
--- a/code/game/turfs/open/planet.dm
+++ b/code/game/turfs/open/planet.dm
@@ -7,7 +7,7 @@
 	base_icon_state = "dirt"
 	baseturfs = /turf/open/chasm/jungle
 	initial_gas = OPENTURF_LOW_PRESSURE
-	planetary_atmos = TRUE
+
 	footstep = FOOTSTEP_SAND
 	barefootstep = FOOTSTEP_SAND
 	clawfootstep = FOOTSTEP_SAND
@@ -47,7 +47,7 @@
 /turf/open/misc/grass/jungle
 	name = "jungle grass"
 	initial_gas = OPENTURF_DEFAULT_ATMOS
-	planetary_atmos = TRUE
+
 	baseturfs = /turf/open/misc/dirt
 	desc = "Greener on the other side."
 	icon_state = "junglegrass"
diff --git a/code/game/turfs/open/snow.dm b/code/game/turfs/open/snow.dm
index c1504c049cd..bb2ab0eeb52 100644
--- a/code/game/turfs/open/snow.dm
+++ b/code/game/turfs/open/snow.dm
@@ -4,7 +4,7 @@
 	icon = 'icons/turf/snow.dmi'
 	desc = "Looks cold."
 	icon_state = "snow"
-	planetary_atmos = TRUE
+
 	temperature = 180
 	slowdown = 2
 	bullet_sizzle = TRUE
@@ -23,5 +23,5 @@
 
 /turf/open/misc/snow/actually_safe
 	slowdown = 0
-	planetary_atmos = FALSE
+
 	initial_gas = OPENTURF_DEFAULT_ATMOS
diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm
index 37003cc214d..8965c75b04d 100644
--- a/code/game/turfs/open/water.dm
+++ b/code/game/turfs/open/water.dm
@@ -5,7 +5,7 @@
 	icon_state = "riverwater_motion"
 	baseturfs = /turf/open/chasm/lavaland
 	initial_gas = OPENTURF_LOW_PRESSURE
-	planetary_atmos = TRUE
+
 	slowdown = 1
 	bullet_sizzle = TRUE
 	bullet_bounce_sound = null //needs a splashing sound one day.
@@ -20,7 +20,6 @@
 	initial_gas = OPENTURF_DEFAULT_ATMOS
 
 /turf/open/water/beach
-	planetary_atmos = FALSE
 	gender = PLURAL
 	desc = "You get the feeling that nobody's bothered to actually make this water functional..."
 	icon = 'icons/misc/beach.dmi'
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 356b1aa1781..65db9c9c62c 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -198,8 +198,8 @@ GLOBAL_LIST_EMPTY(station_turfs)
 	if(simulated && zone)
 		///Try to gracefully remove
 		if(can_safely_remove_from_zone())
-			c_copy_air()
-			zone.remove(src)
+			take_zone_air()
+			zone.remove_turf(src)
 
 		else //Just rebuild the fucker
 			zone.rebuild()
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index a23d19cba78..4bf696557e0 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -31,7 +31,7 @@
 
 	// Delete all zones.
 	for(var/zone/Z in world)
-		Z.c_invalidate()
+		Z.invalidate()
 
 	to_chat(usr, "\[3/5\] - All ZAS Zones removed.")
 
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 0b5d66fdc1e..035869985d7 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -49,7 +49,7 @@ Class Procs:
 
 */
 
-/connection/
+/connection
 	var/turf/A
 	var/turf/B
 	var/zone/zoneA
@@ -57,8 +57,14 @@ Class Procs:
 
 	var/connection_edge/edge
 
+	///Invalid or Valid
 	var/state = 0
 
+	#ifdef ZASDBG
+	///Set to true during testing to get verbose debug information
+	var/verbose = FALSE
+	#endif
+
 /connection/New(turf/A, turf/B)
 	#ifdef ZASDBG
 	//ASSERT(TURF_HAS_VALID_ZONE(A))
@@ -76,45 +82,77 @@ Class Procs:
 		edge = SSzas.get_edge(A.zone,B.zone)
 		edge.add_connection(src)
 
+///Unmarks this connection as direct. Does not update the edge. Called by update() as a correction.
 /connection/proc/mark_direct()
 	if(!direct())
 		state |= CONNECTION_DIRECT
 		edge.direct++
-//	log_admin("Marked direct.")
 
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("Marked direct.")
+	#endif
+
+///Unmarks this connection as direct. Does not update the edge. Called by update() as a correction.
 /connection/proc/mark_indirect()
 	if(direct())
 		state &= ~CONNECTION_DIRECT
 		edge.direct--
-//	log_admin("Marked indirect.")
 
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("Marked indirect.")
+	#endif
+
+///Marks this connection as unsimulated. Updating the connection will check the validity of this. See file header for more information.
 /connection/proc/mark_space()
 	state |= CONNECTION_SPACE
 
+///Returns 1 if no doors are in between A and B.
 /connection/proc/direct()
 	return (state & CONNECTION_DIRECT)
 
+///Returns 1 if the connection has not been erased.
 /connection/proc/valid()
 	return !(state & CONNECTION_INVALID)
 
+///Called by update() and connection_manager/erase_all(). Marks the connection as erased and removes it from its edge.
 /connection/proc/erase()
 	edge.remove_connection(src)
 	state |= CONNECTION_INVALID
-//	log_admin("Connection Erased: [state]")
 
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("Connection Erased: [state]")
+	#endif
+
+///Makes numerous checks to decide whether the connection is still valid. Erases it automatically if not.
 /connection/proc/update()
-//	log_admin("Updated, \...")
-	if(!A.simulated)
-//		log_admin("Invalid A.")
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("Updated, \...")
+	#endif
+
+	if(!A.simulated) //If turf A isn't simulated, erase this connection.
+		#ifdef ZASDBG
+		if(verbose)
+			zas_log("Invalid A. Erasing...")
+		#endif
+
 		erase()
 		return
 
 	var/block_status = SSzas.air_blocked(A,B)
-	if(block_status & AIR_BLOCKED)
-//		log_admin("Blocked connection.")
+	if(block_status & AIR_BLOCKED) //If turfs A and B cant mingle, erase this connection
+		#ifdef ZASDBG
+		if(verbose)
+			zas_log("Blocked connection. Erasing...")
+		#endif
+
 		erase()
 		return
-	else if(block_status & ZONE_BLOCKED)
+
+	else if(block_status & ZONE_BLOCKED) //If they can mingle but they can't merge zones, mark this connection as indirect
 		mark_indirect()
 	else
 		mark_direct()
@@ -122,48 +160,78 @@ Class Procs:
 	var/b_is_space = !B.simulated
 
 	if(state & CONNECTION_SPACE)
-		if(!b_is_space)
-//			log_admin("Invalid B.")
+		if(!b_is_space) //If this is an unsimulated connection and B isn't unsimulated, erase.
+			#ifdef ZASDBG
+			if(verbose)
+				zas_log("Invalid B. Erasing...")
+			#endif
 			erase()
 			return
-		if(A.zone != zoneA)
-//			log_admin("Zone changed, \...")
-			if(!A.zone)
+
+		if(A.zone != zoneA) //If turf A's zone has changed, attempt to migrate the connection to the new zone. Otherwise, erase.
+			#ifdef ZASDBG
+			if(verbose)
+				zas_log("Zone changed, \...")
+			#endif
+
+			if(!A.zone) //No zone, erase.
 				erase()
-//				log_admin("erased.")
+
+				#ifdef ZASDBG
+				if(verbose)
+					zas_log("Turf A's zone has disappeared. Erasing...")
+				#endif
 				return
+
 			else
 				edge.remove_connection(src)
 				edge = SSzas.get_edge(A.zone, B)
 				edge.add_connection(src)
 				zoneA = A.zone
 
-//		log_admin("valid.")
+		#ifdef ZASDBG
+		if(verbose)
+			zas_log("Connection is valid.")
+		#endif
 		return
 
-	else if(b_is_space)
-//		log_admin("Invalid B.")
+	else if(b_is_space) //If B is unsimulated and this isn't an unsimulated connection, erase.
+		#ifdef ZASDBG
+		if(verbose)
+			zas_log("Turf B is unsimulated, but this is a simulated connection. Erasing...")
+		#endif
 		erase()
 		return
 
-	if(A.zone == B.zone)
-//		log_admin("A == B")
+	if(A.zone == B.zone) //If both turfs share a zone, erase.
+		#ifdef ZASDBG
+		if(verbose)
+			zas_log("Turf A and Turf B share a zone. Erasing...")
+		#endif
 		erase()
 		return
 
-	if(A.zone != zoneA || (zoneB && (B.zone != zoneB)))
+	if(A.zone != zoneA || (zoneB && (B.zone != zoneB))) //If either turf's zone changed
+		#ifdef ZASDBG
+		if(verbose)
+			zas_log("Zones changed, \...")
+		#endif
 
-//		log_admin("Zones changed, \...")
-		if(A.zone && B.zone)
+		if(A.zone && B.zone) //Find where we're supposed to be and move us there
 			edge.remove_connection(src)
 			edge = SSzas.get_edge(A.zone, B.zone)
 			edge.add_connection(src)
 			zoneA = A.zone
 			zoneB = B.zone
 		else
-//			log_admin("erased.")
+			#ifdef ZASDBG
+			if(verbose)
+				zas_log("Turf A or B lost it's zone. Erasing...")
+			#endif ZASDBG
 			erase()
 			return
 
-
-//	log_admin("valid.")
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("Connection is valid.")
+	#endif
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index ba6a7269008..04d3518a912 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -58,42 +58,67 @@ Class Procs:
 */
 
 
-/connection_edge/var/zone/A
+/connection_edge
+	var/zone/A
 
-/connection_edge/var/list/connecting_turfs = list()
-/connection_edge/var/direct = 0
-/connection_edge/var/sleeping = 1
+	var/list/connecting_turfs = list()
+	var/direct = 0
+	var/sleeping = 1
+	var/coefficient = 0
 
-/connection_edge/var/coefficient = 0
+	#ifdef ZASDBG
+	///Set this to TRUE during testing to get verbose debug information.
+	var/verbose = FALSE
+	#endif
 
 /connection_edge/New()
 	CRASH("Cannot make connection edge without specifications.")
 
+///Adds a connection to this edge. Usually increments the coefficient and adds a turf to connecting_turfs.
 /connection_edge/proc/add_connection(connection/c)
 	coefficient++
-	if(c.direct()) direct++
-//	log_admin("Connection added: [type] Coefficient: [coefficient]")
+	if(c.direct())
+		direct++
 
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("Connection added: [type] Coefficient: [coefficient]")
+	#endif
 
+///Removes a connection from this edge. This works even if c is not in the edge, so be careful.
 /connection_edge/proc/remove_connection(connection/c)
-//	log_admin("Connection removed: [type] Coefficient: [coefficient-1]")
-
 	coefficient--
 	if(coefficient <= 0)
 		erase()
-	if(c.direct()) direct--
+	if(c.direct())
+		direct--
+
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("Connection removed: [type] Coefficient: [coefficient-1]")
+	#endif
 
+///Returns true if either A or B is equal to Z. Unsimulated connections return true only on A.
 /connection_edge/proc/contains_zone(zone/Z)
+	return
 
+///Removes this connection from processing and zone edge lists.
 /connection_edge/proc/erase()
 	SSzas.remove_edge(src)
-//	log_admin("[type] Erased.")
-
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("[type] Erased.")
+	#endif
 
+///Called every air tick on edges in the processing list. Equalizes gas.
 /connection_edge/proc/tick()
+	return
 
+///Checks both connection ends to see if they need to process.
 /connection_edge/proc/recheck()
+	return
 
+///Airflow proc causing all objects in movable to be checked against a pressure differential. See file header for more info.
 /connection_edge/proc/flow(list/movable, differential, repelled)
 	for(var/i in 1 to length(movable))
 		var/atom/movable/M = movable[i]
@@ -122,8 +147,10 @@ Class Procs:
 
 
 
-/connection_edge/zone/var/zone/B
-/connection_edge/zone/var/last_woosh
+/connection_edge/zone
+	var/zone/B
+	///The last time the "woosh" airflow sound played, world.time
+	var/last_woosh
 
 /connection_edge/zone/New(zone/A, zone/B)
 
@@ -132,8 +159,10 @@ Class Procs:
 	A.edges.Add(src)
 	B.edges.Add(src)
 	//id = edge_id(A,B)
-//	log_admin("New edge between [A] and [B]")
-
+	#ifdef ZASDBG
+	if(verbose)
+		zas_log("New edge between [A] and [B]")
+	#endif
 
 /connection_edge/zone/add_connection(connection/c)
 	. = ..()
@@ -141,7 +170,7 @@ Class Procs:
 
 /connection_edge/zone/remove_connection(connection/c)
 	connecting_turfs.Remove(c.A)
-	. = ..()
+	return ..()
 
 /connection_edge/zone/contains_zone(zone/Z)
 	return A == Z || B == Z
@@ -149,7 +178,7 @@ Class Procs:
 /connection_edge/zone/erase()
 	A.edges.Remove(src)
 	B.edges.Remove(src)
-	. = ..()
+	return ..()
 
 /connection_edge/zone/tick()
 	if(A.invalid || B.invalid)
@@ -200,21 +229,26 @@ Class Procs:
 	// Edges with only one side being vacuum need processing no matter how close.
 		SSzas.mark_edge_active(src)
 
-//Helper proc to get connections for a zone.
+///Helper proc to get connections for a zone.
 /connection_edge/zone/proc/get_connected_zone(zone/from)
-	if(A == from) return B
-	else return A
+	if(A == from)
+		return B
+	else
+		return A
 
-/connection_edge/unsimulated/var/turf/B
-/connection_edge/unsimulated/var/datum/gas_mixture/air
+/connection_edge/unsimulated
+	var/turf/B
+	var/datum/gas_mixture/air
 
 /connection_edge/unsimulated/New(zone/A, turf/B)
 	src.A = A
 	src.B = B
 	A.edges.Add(src)
 	air = B.return_air()
-	//id = 52*A.id
-//	log_admin("New edge from [A] to [B].")
+	#ifdef ZASDBG
+	if(verbose)
+		log_admin("New edge from [A] to [B] ([B.x], [B.y], [B.z]).")
+	#endif
 
 
 /connection_edge/unsimulated/add_connection(connection/c)
@@ -225,11 +259,11 @@ Class Procs:
 /connection_edge/unsimulated/remove_connection(connection/c)
 	connecting_turfs.Remove(c.B)
 	air.group_multiplier = coefficient
-	. = ..()
+	return ..()
 
 /connection_edge/unsimulated/erase()
 	A.edges.Remove(src)
-	. = ..()
+	return ..()
 
 /connection_edge/unsimulated/contains_zone(zone/Z)
 	return A == Z
diff --git a/code/modules/atmospherics/ZAS/ConnectionManager.dm b/code/modules/atmospherics/ZAS/ConnectionManager.dm
index 3890cd85f5c..c54099da70d 100644
--- a/code/modules/atmospherics/ZAS/ConnectionManager.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionManager.dm
@@ -34,16 +34,18 @@ Macros:
 // macro-ized to cut down on proc calls
 #define check(c) (c && c.valid())
 
-/turf/var/tmp/connection_manager/connections
+/turf
+	var/tmp/connection_manager/connections
 
-/connection_manager/var/connection/N
-/connection_manager/var/connection/S
-/connection_manager/var/connection/E
-/connection_manager/var/connection/W
+/connection_manager/
+	var/connection/N
+	var/connection/S
+	var/connection/E
+	var/connection/W
 
 #ifdef MULTIZAS
-/connection_manager/var/connection/U
-/connection_manager/var/connection/D
+	var/connection/U
+	var/connection/D
 #endif
 
 /connection_manager/proc/get(d)
diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index 961ab554798..b9e6b571f6a 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -80,6 +80,15 @@ GLOBAL_REAL_VAR(list/zasdbgovl_dirzoneblock) = list(
 /proc/soft_assert(thing,fail)
 	if(!thing) message_admins(fail)
 
-/turf/proc/zas_log(string)
-	to_chat(world, "[span_admin("ZAS:")] verbose turf output of [src] at ([src.x], [src.y], [src.z]): [string]")
+/datum/proc/zas_log(string)
+	return
+
+/turf/zas_log(string)
+	to_chat(world, "[span_admin("ZAS:")] Turf output of [src] at ([src.x], [src.y], [src.z]): [string]")
+
+/connection/zas_log(string)
+	to_chat(world, "[span_admin("ZAS:")] Verbose connection output: [string]")
+
+/connection_edge/zas_log(string)
+	to_chat(world, "[span_admin("ZAS:")] Verbose connection edge output: [string]")
 #endif
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index a30abfc5ea2..35c0c3b6540 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -1,25 +1,31 @@
 /turf
+	///The turf's current zone parent.
 	var/zone/zone
+	///All directions in which a turf that can contain air is present.
 	var/open_directions
 
 /turf
+	///Does this turf need to be ran through SSzas? (SSzas.mark_for_update(turf) OR turf.update_nearby_tiles())
 	var/needs_air_update = 0
+	///The local gas mixture of this turf. Use return_air(). This will always exist even if not in use, because GCing air contents would be too expensive.
 	var/datum/gas_mixture/air
 	var/heat_capacity = 1
 	var/thermal_conductivity = 0.05
+	///A gas_mixture gas list to be used as the initial value. Ex: list(GAS_OXYGEN = 50)
 	var/list/initial_gas
-	var/planetary_atmos //Let's just let this exist for now.
 #ifdef ZASDBG
 	///Set to TRUE during debugging to get chat output on the atmos status of this turf
 	var/verbose = FALSE
 #endif
 
+///Adds the graphic_add list to vis_contents, removes graphic_remove.
 /turf/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null)
 	if(graphic_add && graphic_add.len)
 		vis_contents += graphic_add
 	if(graphic_remove && graphic_remove.len)
 		vis_contents -= graphic_remove
 
+///Updates the turf's air source properties, breaking or creating zone connections as necessary.
 /turf/proc/update_air_properties()
 	var/self_block
 	ATMOS_CANPASS_TURF(self_block, src, src)
@@ -76,7 +82,7 @@
 	Instead of analyzing the entire zone, we only check the nearest 3x3 turfs surrounding the src turf.
 	This implementation may produce false negatives but it (hopefully) will not produce any false postiives.
 */
-
+///Simple heuristic for determining if removing the turf from it's zone will not partition the zone (A very bad thing).
 /turf/proc/can_safely_remove_from_zone()
 	if(!zone)
 		return 1
@@ -106,7 +112,7 @@
 		return ..()
 
 	if(zone && zone.invalid) //this turf's zone is in the process of being rebuilt
-		c_copy_air() //not very efficient :(
+		take_zone_air() //not very efficient :(
 		zone = null //Easier than iterating through the list at the zone.
 
 	var/self_block
@@ -121,8 +127,8 @@
 			var/zone/z = zone
 
 			if(can_safely_remove_from_zone()) //Helps normal airlocks avoid rebuilding zones all the time
-				c_copy_air() //we aren't rebuilding, but hold onto the old air so it can be readded
-				z.remove(src)
+				take_zone_air() //we aren't rebuilding, but hold onto the old air so it can be readded
+				z.remove_turf(src)
 			else
 				z.rebuild()
 
@@ -161,7 +167,7 @@
 		if(us_to_target & AIR_BLOCKED)
 			#ifdef ZASDBG
 			if(verbose)
-				log_admin("[dir2text(d)] is blocked.")
+				zas_log("[dir2text(d)] is blocked.")
 			target.dbg(ZAS_DIRECTIONAL_BLOCKER(turn(d, 180)))
 			#endif
 
@@ -199,7 +205,7 @@
 						postponed.Add(sim_target)
 
 					else
-						sim_target.zone.add(src)
+						sim_target.zone.add_turf(src)
 
 						#ifdef ZASDBG
 						dbg(zasdbgovl_assigned)
@@ -230,7 +236,7 @@
 
 	if(!TURF_HAS_VALID_ZONE(src)) //Still no zone, make a new one.
 		var/zone/newzone = new/zone()
-		newzone.add(src)
+		newzone.add_turf(src)
 
 	#ifdef ZASDBG
 		dbg(zasdbgovl_created)
@@ -243,7 +249,8 @@
 	for(var/turf/T in postponed)
 		if(T.zone == src.zone)
 			#ifdef ZASDBG
-			zas_log("This turf tried to merge into itself! Current type: [src.type]")
+			if(verbose)
+				zas_log("This turf tried to merge into itself! Current type: [src.type]")
 			#endif
 			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
 		SSzas.connect(src, T)
@@ -252,30 +259,16 @@
 	if(connections)
 		connections.update_all()
 
+///Currently unused.
 /atom/movable/proc/block_superconductivity()
 	return
 
-/turf/return_air()
-	RETURN_TYPE(/datum/gas_mixture)
-	//Create gas mixture to hold data for passing
-	if(zone)
-		if(!zone.invalid)
-			SSzas.mark_zone_update(zone)
-			return zone.air
-		else
-			if(!air)
-				make_air()
-			c_copy_air()
-			return air
-	else
-		if(!air)
-			make_air()
-		return air
-
+///Wrapper for [/datum/gas_mixture/proc/remove()]
 /turf/remove_air(amount as num)
 	var/datum/gas_mixture/GM = return_air()
 	return GM.remove(amount)
 
+///Merges a given gas mixture with the turf's current air source.
 /turf/assume_air(datum/gas_mixture/giver)
 	if(!simulated)
 		return
@@ -296,6 +289,7 @@
 
 	return 1
 
+///Return the currently used gas_mixture datum.
 /turf/return_air()
 	RETURN_TYPE(/datum/gas_mixture)
 	if(!simulated)
@@ -316,13 +310,14 @@
 		else
 			if(!air)
 				make_air()
-			c_copy_air()
+			take_zone_air()
 			return air
 	else
 		if(!air)
 			make_air()
 		return air
 
+///Initializes the turf's "air" datum to it's initial values.
 /turf/proc/make_air()
 	air = new/datum/gas_mixture
 	air.temperature = temperature
@@ -330,13 +325,14 @@
 		air.gas = initial_gas.Copy()
 	AIR_UPDATE_VALUES(air)
 
-/turf/proc/c_copy_air()
+///Takes this turf's group share from the zone. Usually used before removing it from the zone.
+/turf/proc/take_zone_air()
 	if(!air)
 		air = new/datum/gas_mixture
 	air.copyFrom(zone.air)
 	air.group_multiplier = 1
 
-
+///Creates a gas_mixture datum with the given parameters and merges it into the turf's air source.
 /turf/proc/atmos_spawn_air(gas_id, amount, initial_temperature)
 	if(!simulated)
 		return
@@ -351,9 +347,7 @@
 /turf/open/space/atmos_spawn_air()
 	return
 
-/proc/turf_contains_dense_objects(turf/T)
-	return T.contains_dense_objects()
-
+///Checks a turf to see if any of it's contents are dense. Is NOT recursive.
 /turf/proc/contains_dense_objects()
 	if(density)
 		return 1
@@ -366,9 +360,10 @@
 /turf/proc/TryGetNonDenseNeighbour()
 	for(var/d in GLOB.cardinals)
 		var/turf/T = get_step(src, d)
-		if (T && !turf_contains_dense_objects(T))
+		if (T && !T.contains_dense_objects())
 			return T
 
+///Returns a list of adjacent turfs that can contain air. Returns null if none.
 /turf/proc/get_atmos_adjacent_turfs()
 	var/list/adjacent_turfs = list()
 	for(var/dir in GLOB.cardinals)
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 0c97d56a13a..51aaa3f0563 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -22,15 +22,17 @@
 	temperature = _temperature
 	group_multiplier = _group_multiplier
 
+///Returns the volume of a specific gas within the entire zone.
 /datum/gas_mixture/proc/getGroupGas(gasid)
 	if(!gas.len)
 		return 0 //if the list is empty BYOND treats it as a non-associative list, which runtimes
 	return gas[gasid] * group_multiplier
 
+///Returns the volume of the entire zone's gas contents.
 /datum/gas_mixture/proc/getGroupMoles()
 	return total_moles * group_multiplier
 
-//Takes a gas string and the amount of moles to adjust by.  Calls updateValues() if update isn't 0.
+///Takes a gas string and the amount of moles to adjust by. Calls updateValues() if update isn't 0.
 /datum/gas_mixture/proc/adjustGas(gasid, moles, update = TRUE)
 	if(moles == 0)
 		return
@@ -43,6 +45,7 @@
 	if(update)
 		AIR_UPDATE_VALUES(src)
 
+///Sets the given gas id's mole count to the specified amount.
 /datum/gas_mixture/proc/setGasMoles(gasid, moles, update = TRUE, divide_among_group = FALSE)
 	if(moles == 0)
 		return
@@ -56,7 +59,7 @@
 	if(update)
 		AIR_UPDATE_VALUES(src)
 
-//Same as adjustGas(), but takes a temperature which is mixed in with the gas.
+///Same as adjustGas(), but takes a temperature which is mixed in with the gas.
 /datum/gas_mixture/proc/adjustGasWithTemp(gasid, moles, temp, update = 1)
 	if(moles == 0)
 		return
@@ -77,7 +80,7 @@
 		AIR_UPDATE_VALUES(src)
 
 
-//Variadic version of adjustGas().  Takes any number of gas and mole pairs and applies them.
+///Variadic version of adjustGas().  Takes any number of gas and mole pairs and applies them.
 /datum/gas_mixture/proc/adjustMultipleGases()
 	ASSERT(!(args.len % 2))
 
@@ -87,7 +90,7 @@
 	AIR_UPDATE_VALUES(src)
 
 
-//Variadic version of adjustGasWithTemp().  Takes any number of gas, mole and temperature associations and applies them.
+///Variadic version of adjustGasWithTemp().  Takes any number of gas, mole and temperature associations and applies them.
 /datum/gas_mixture/proc/adjustMultipleGasesWithTemp()
 	ASSERT(!(args.len % 3))
 
@@ -97,8 +100,7 @@
 	AIR_UPDATE_VALUES(src)
 
 
-//Merges all the gas from another mixture into this one.  Respects group_multipliers and adjusts temperature correctly.
-//Does not modify giver in any way.
+///Merges all the gas from another mixture into this one.  Respects group_multipliers and adjusts temperature correctly. Does not modify giver in any way.
 /datum/gas_mixture/proc/merge(const/datum/gas_mixture/giver)
 	if(!giver)
 		return
@@ -119,7 +121,7 @@
 
 	AIR_UPDATE_VALUES(src)
 
-// Used to equalize the mixture between two zones before sleeping an edge.
+///Used to equalize the mixture between two zones before sleeping an edge.
 /datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer)
 	var/our_heatcap = getHeatCapacity()
 	var/share_heatcap = sharer.getHeatCapacity()
@@ -145,7 +147,7 @@
 	return 1
 
 
-//Returns the heat capacity of the gas mix based on the specific heat of the gases.
+///Returns the heat capacity of the gas mix based on the specific heat of the gases.
 /datum/gas_mixture/proc/getHeatCapacity()
 	. = 0
 	for(var/g in gas)
@@ -153,7 +155,7 @@
 	. *= group_multiplier
 
 
-//Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB.
+///Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB.
 /datum/gas_mixture/proc/addThermalEnergy(thermal_energy)
 
 	if (total_moles == 0)
@@ -168,16 +170,16 @@
 	temperature += thermal_energy/heat_capacity
 	return thermal_energy
 
-//Returns the thermal energy change required to get to a new temperature
+///Returns the thermal energy change required to get to a new temperature
 /datum/gas_mixture/proc/getThermalEnergyChange(new_temperature)
 	return getHeatCapacity()*(max(new_temperature, 0) - temperature)
 
 
-//Technically vacuum doesn't have a specific entropy. Just use a really big number (infinity would be ideal) here so that it's easy to add gas to vacuum and hard to take gas out.
+///Technically vacuum doesn't have a specific entropy. Just use a really big number (infinity would be ideal) here so that it's easy to add gas to vacuum and hard to take gas out.
 #define SPECIFIC_ENTROPY_VACUUM		150000
 
 
-//Returns the ideal gas specific entropy of the whole mix. This is the entropy per mole of /mixed/ gas.
+///Returns the ideal gas specific entropy of the whole mix. This is the entropy per mole of /mixed/ gas.
 /datum/gas_mixture/proc/specificGroupEntropy()
 	if (!gas.len || total_moles == 0)
 		return SPECIFIC_ENTROPY_VACUUM
@@ -220,14 +222,14 @@
 			total_moles += cached_gas[g]
 
 
-//Returns the pressure of the gas mix.  Only accurate if there have been no gas modifications since updateValues() has been called.
+///Returns the pressure of the gas mix.  Only accurate if there have been no gas modifications since updateValues() has been called.
 /datum/gas_mixture/proc/returnPressure()
 	if(volume)
 		return total_moles * R_IDEAL_GAS_EQUATION * temperature / volume
 	return 0
 
 
-//Removes moles from the gas mixture and returns a gas_mixture containing the removed air.
+///Removes moles from the gas mixture and returns a gas_mixture containing the removed air.
 /datum/gas_mixture/proc/remove(amount)
 	RETURN_TYPE(/datum/gas_mixture)
 
@@ -250,7 +252,7 @@
 	return removed
 
 
-//Removes a ratio of gas from the mixture and returns a gas_mixture containing the removed air.
+///Removes a ratio of gas from the mixture and returns a gas_mixture containing the removed air.
 /datum/gas_mixture/proc/removeRatio(ratio, out_group_multiplier = 1)
 	if(ratio <= 0)
 		return null
@@ -272,13 +274,13 @@
 
 	return removed
 
-//Removes a volume of gas from the mixture and returns a gas_mixture containing the removed air with the given volume
+///Removes a volume of gas from the mixture and returns a gas_mixture containing the removed air with the given volume/
 /datum/gas_mixture/proc/removeVolume(removed_volume)
 	var/datum/gas_mixture/removed = removeRatio(removed_volume/(volume*group_multiplier), 1)
 	removed.volume = removed_volume
 	return removed
 
-//Removes moles from the gas mixture, limited by a given flag.  Returns a gax_mixture containing the removed air.
+///Removes moles from the gas mixture, limited by a given flag.  Returns a gax_mixture containing the removed air.
 /datum/gas_mixture/proc/removeByFlag(flag, amount)
 	var/datum/gas_mixture/removed = new
 
@@ -301,14 +303,14 @@
 
 	return removed
 
-//Returns the amount of gas that has the given flag, in moles
+///Returns the amount of gas that has the given flag, in moles..
 /datum/gas_mixture/proc/getByFlag(flag)
 	. = 0
 	for(var/g in gas)
 		if(xgm_gas_data.flags[g] & flag)
 			. += gas[g]
 
-//Copies gas and temperature from another gas_mixture.
+///Copies gas and temperature from another gas_mixture.
 /datum/gas_mixture/proc/copyFrom(const/datum/gas_mixture/sample, partial = 1)
 	var/list/cached_gas = gas
 	var/list/sample_gas = sample.gas.Copy()
@@ -323,7 +325,7 @@
 	return 1
 
 
-//Checks if we are within acceptable range of another gas_mixture to suspend processing or merge.
+///Checks if we are within acceptable range of another gas_mixture to suspend processing or merge.
 /datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample, vacuum_exception = 0)
 	if(!sample) return 0
 
@@ -360,8 +362,7 @@
 
 	return 1
 
-//Rechecks the gas_mixture and adjusts the graphic list if needed.
-//Two lists can be passed by reference if you need know specifically which graphics were added and removed.
+///Rechecks the gas_mixture and adjusts the graphic list if needed. ///Two lists can be passed by reference if you need know specifically which graphics were added and removed.
 /datum/gas_mixture/proc/checkTileGraphic(list/graphic_add = null, list/graphic_remove = null)
 	for(var/obj/effect/gas_overlay/O in graphic)
 		if(gas[O.gas_id] <= xgm_gas_data.overlay_limit[O.gas_id])
@@ -393,7 +394,7 @@
 		LAZYSET(tile_overlay_cache, gas_id, new/obj/effect/gas_overlay(null, gas_id))
 	return tile_overlay_cache[gas_id]
 
-//Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier.
+///Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier.
 /datum/gas_mixture/proc/add(datum/gas_mixture/right_side)
 	for(var/g in right_side.gas)
 		gas[g] += right_side.gas[g]
@@ -402,7 +403,7 @@
 	return 1
 
 
-//Simpler version of remove(), adjusts gas amounts directly and doesn't account for group_multiplier.
+///Simpler version of remove(), adjusts gas amounts directly and doesn't account for group_multiplier.
 /datum/gas_mixture/proc/subtract(datum/gas_mixture/right_side)
 	for(var/g in right_side.gas)
 		gas[g] -= right_side.gas[g]
@@ -411,7 +412,7 @@
 	return 1
 
 
-//Multiply all gas amounts by a factor.
+///Multiply all gas amounts by a factor.
 /datum/gas_mixture/proc/multiply(factor)
 	for(var/g in gas)
 		gas[g] *= factor
@@ -420,7 +421,7 @@
 	return 1
 
 
-//Divide all gas amounts by a factor.
+///Divide all gas amounts by a factor.
 /datum/gas_mixture/proc/divide(factor)
 	for(var/g in gas)
 		gas[g] /= factor
@@ -429,7 +430,7 @@
 	return 1
 
 
-//Shares gas with another gas_mixture based on the amount of connecting tiles and a fixed lookup table.
+///Shares gas with another gas_mixture based on the amount of connecting tiles and a fixed lookup table.
 /datum/gas_mixture/proc/shareRatio(datum/gas_mixture/other, connecting_tiles, share_size = null, one_way = 0)
 	var/static/list/sharing_lookup_table = list(0.30, 0.40, 0.48, 0.54, 0.60, 0.66)
 	//Shares a specific ratio of gas between mixtures using simple weighted averages.
@@ -476,7 +477,7 @@
 	return compare(other)
 
 
-//A wrapper around share_ratio for spacing gas at the same rate as if it were going into a large airless room.
+///A wrapper around share_ratio for spacing gas at the same rate as if it were going into a large airless room.
 /datum/gas_mixture/proc/shareSpace(datum/gas_mixture/unsim_air)
 	return shareRatio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
 
@@ -489,8 +490,9 @@
 	if(M)
 		return getMass()/M
 
+///Returns TRUE if the given gas has a volume equal to or greater than the given amount in one group share of gas.
 /datum/gas_mixture/proc/hasGas(gas_id, required_amount)
-	var/amt = getGroupGas(gas_id)
+	var/amt = gas[gas_id]
 	return (amt >= required_amount)
 
 ////LINDA COMPATABILITY PROCS////
@@ -503,6 +505,7 @@
 /datum/gas_mixture/proc/get_moles()
 	//updateValues()
 	return total_moles
+
 ////END LINDA COMPATABILITY////
 
 ///Returns the gas list with an update.
@@ -516,6 +519,7 @@
 	checkTileGraphic()
 	return graphic
 
+///Returns a gas_mixture datum with identical contents.
 /datum/gas_mixture/proc/copy()
 	RETURN_TYPE(/datum/gas_mixture)
 	var/datum/gas_mixture/new_gas = new
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 8b8c2e02ed3..79a1753efd1 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -12,17 +12,17 @@ Class Vars:
 	air - The gas mixture that any turfs in this zone will return. Values are per-tile with a group multiplier.
 
 Class Procs:
-	add(turf/simulated/T)
+	add_turf(turf/T)
 		Adds a turf to the contents, sets its zone and merges its air.
 
-	remove(turf/simulated/T)
+	remove_turf(turf/T)
 		Removes a turf, sets its zone to null and erases any gas graphics.
 		Invalidates the zone if it has no more tiles.
 
-	c_merge(zone/into)
+	merge_into(zone/into)
 		Invalidates this zone and adds all its former contents to into.
 
-	c_invalidate()
+	invalidate()
 		Marks this zone as invalid and removes it from processing.
 
 	rebuild()
@@ -41,15 +41,24 @@ Class Procs:
 
 
 /zone
+	///A simple numerical value
 	var/name
+	///If a zone is "invalid" it will not process
 	var/invalid = 0
 	var/list/contents = list()
+	///All fire tiles in this zone
 	var/list/fire_tiles = list()
+	///All physical sources of fire fuel in this zone
 	var/list/fuel_objs = list()
+	///Does SSzas need to update this zone? (SSzas.mark_zone_update(zone))
 	var/needs_update = 0
+	///A list of /connection_edge/
 	var/list/edges = list()
+	///The zone's gas contents
 	var/datum/gas_mixture/air = new
+	///Air overlays to add next process
 	var/list/graphic_add = list()
+	///Air overlays to remove next process
 	var/list/graphic_remove = list()
 	var/last_air_temperature = TCMB
 
@@ -59,7 +68,8 @@ Class Procs:
 	air.group_multiplier = 1
 	air.volume = CELL_VOLUME
 
-/zone/proc/add(turf/T)
+///Adds the given turf to the zone
+/zone/proc/add_turf(turf/T)
 #ifdef ZASDBG
 	ASSERT(!invalid)
 	ASSERT(istype(T))
@@ -77,7 +87,8 @@ Class Procs:
 		if(fuel) fuel_objs += fuel
 	T.update_graphic(air.graphic)
 
-/zone/proc/remove(turf/T)
+///Removes the given turf from the zone. Will invalidate the zone if it was the last turf.
+/zone/proc/remove_turf(turf/T)
 #ifdef ZASDBG
 	ASSERT(!invalid)
 	ASSERT(istype(T))
@@ -94,21 +105,22 @@ Class Procs:
 	if(contents.len)
 		air.group_multiplier = contents.len
 	else
-		c_invalidate()
+		invalidate()
 
-/zone/proc/c_merge(zone/into)
+///Merges src into the given zone
+/zone/proc/merge_into(zone/into)
 #ifdef ZASDBG
 	ASSERT(!invalid)
 	ASSERT(istype(into))
 	ASSERT(into != src)
 	ASSERT(!into.invalid)
 #endif
-	c_invalidate()
+	invalidate()
 
 	for(var/turf/T in contents)
 		if(!T.simulated)
 			continue
-		into.add(T)
+		into.add_turf(T)
 		T.update_graphic(graphic_remove = air.graphic)
 		#ifdef ZASDBG
 		T.dbg(zasdbgovl_merged)
@@ -121,7 +133,8 @@ Class Procs:
 		for(var/turf/T in E.connecting_turfs)
 			SSzas.mark_for_update(T)
 
-/zone/proc/c_invalidate()
+///Marks the zone as invalid, removing it from the SSzas zone list.
+/zone/proc/invalidate()
 	invalid = 1
 	SSzas.remove_zone(src)
 	#ifdef ZASDBG
@@ -130,27 +143,31 @@ Class Procs:
 			T.dbg(zasdbgovl_invalid_zone)
 	#endif
 
+///Invalidates the zone and marks all of it's contents for update.
 /zone/proc/rebuild()
 	if(invalid)
 		return //Short circuit for explosions where rebuild is called many times over.
-	c_invalidate()
+	invalidate()
 
 	for(var/turf/T in contents)
 		if(!T.simulated)
 			continue
 		T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
+		#ifdef ZASDBG
 		//T.dbg(invalid_zone)
+		#endif
 		T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
 		SSzas.mark_for_update(T)
 
+///Assumes a given gas mixture, dividing it amongst the zone.
 /zone/proc/add_tile_air(datum/gas_mixture/tile_air)
-	//air.volume += CELL_VOLUME
 	air.group_multiplier = 1
 	air.multiply(contents.len)
 	air.merge(tile_air)
 	air.divide(contents.len+1)
 	air.group_multiplier = contents.len+1
 
+///Zone's process proc.
 /zone/proc/tick()
 
 	// Update fires.
@@ -200,6 +217,7 @@ Class Procs:
 					QUEUE_TEMPERATURE_ATOMS(checking)
 			CHECK_TICK
 
+///Prints debug information to the given mob. Used by the "Zone Info" verb. Does not require ZASDBG compile define.
 /zone/proc/dbg_data(mob/M)
 	to_chat(M, name)
 	for(var/g in air.gas)
@@ -213,7 +231,8 @@ Class Procs:
 	var/space_edges = 0
 	var/space_coefficient = 0
 	for(var/connection_edge/E in edges)
-		if(E.type == /connection_edge/zone) zone_edges++
+		if(E.type == /connection_edge/zone)
+			zone_edges++
 		else
 			space_edges++
 			space_coefficient += E.coefficient
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 500ff56c50b..bf142a0b058 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -47,7 +47,7 @@
 		set_broken(TRUE)
 		return FALSE
 	var/turf/open/OT = T
-	if(OT.planetary_atmos)
+	if(!OT.simulated)
 		broken_message = span_boldwarning("DEVICE NOT ENCLOSED IN A PRESSURIZED ENVIRONMENT")
 		set_broken(TRUE)
 		return FALSE
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index 6db9ee158a9..a83c6ce77a8 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -158,8 +158,6 @@
 
 /turf/open/floor/iron/dark/snowdin
 	temperature = 180
-	planetary_atmos = 1
-	temperature = 180
 
 /turf/open/lava/plasma
 	name = "liquid plasma"
diff --git a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm
index af9be4f5989..e56594df2d3 100644
--- a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm
+++ b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm
@@ -12,7 +12,7 @@
 
 /turf/open/water/cursed_spring
 	baseturfs = /turf/open/water/cursed_spring
-	planetary_atmos = TRUE
+
 	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/water/cursed_spring/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm
index 3b9f075b585..a851581f33e 100644
--- a/code/modules/mod/modules/modules_maint.dm
+++ b/code/modules/mod/modules/modules_maint.dm
@@ -315,7 +315,7 @@
 	var/turf/open/openspace/turf_above = get_step_multiz(mod.wearer, UP)
 	if(current_turf && istype(turf_above))
 		current_turf.zFall(mod.wearer)
-	else if(!turf_above && istype(current_turf) && current_turf.planetary_atmos) //nothing holding you down
+	else if(!turf_above && istype(current_turf) && !current_turf.simulated) //nothing holding you down
 		INVOKE_ASYNC(src, .proc/fly_away)
 	else if(!(step_count % 2))
 		playsound(current_turf, 'sound/items/modsuit/atrocinator_step.ogg', 50)

From e06daa964e537150de8f17195d31e07bc661154f Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 2 Jun 2022 16:53:00 -0400
Subject: [PATCH 106/200] REALLY hacky fix to shuttle movement

---
 code/modules/atmospherics/ZAS/Turf.dm | 2 +-
 code/modules/shuttle/docking.dm       | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 35c0c3b6540..cad7834802c 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -226,7 +226,7 @@
 					zas_log("[dir2text(d)] has same zone.")
 
 			else if(verbose)
-				zas_log("[dir2text(d)] has invalid or rebuilding zone.")
+				zas_log("[dir2text(d)] has an invalid or rebuilding zone.")
 			#endif
 		else
 			//Postponing connections to tiles until a zone is assured.
diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm
index 13c8fe5410b..c085cad12d7 100644
--- a/code/modules/shuttle/docking.dm
+++ b/code/modules/shuttle/docking.dm
@@ -216,3 +216,8 @@
 			continue
 		var/turf/oldT = moved_atoms[moved_object]
 		moved_object.lateShuttleMove(oldT, movement_force, movement_direction)
+
+
+	///THIS IS PROBABLY NOT THE ANSWER. BUT IT WORKS AND ISN'T TERRIBLY EXPENSIVE.
+	for(var/turf/T as anything in new_turfs)
+		SSzas.mark_for_update(T)

From bb96173ad8221d195f22e2d3d96e3bcfd36f2a6b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 2 Jun 2022 17:09:13 -0400
Subject: [PATCH 107/200] Compile stuff + misleading proc name change

---
 code/game/turfs/turf.dm                     |  2 +-
 code/modules/atmospherics/ZAS/Connection.dm |  2 +-
 code/modules/atmospherics/ZAS/Turf.dm       | 12 +++++++-----
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 65db9c9c62c..a0493a0ab10 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
 	if(simulated && zone)
 		///Try to gracefully remove
 		if(can_safely_remove_from_zone())
-			take_zone_air()
+			copy_zone_air()
 			zone.remove_turf(src)
 
 		else //Just rebuild the fucker
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 035869985d7..fb8a596bdf2 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -227,7 +227,7 @@ Class Procs:
 			#ifdef ZASDBG
 			if(verbose)
 				zas_log("Turf A or B lost it's zone. Erasing...")
-			#endif ZASDBG
+			#endif
 			erase()
 			return
 
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index cad7834802c..3bd87c160a1 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -30,7 +30,9 @@
 	var/self_block
 	ATMOS_CANPASS_TURF(self_block, src, src)
 	if(self_block & AIR_BLOCKED)
+		#ifdef ZASDBG
 		src.dbg(zasdbgovl_blocked)
+		#endif
 		return TRUE
 
 	#ifdef MULTIZAS
@@ -112,7 +114,7 @@
 		return ..()
 
 	if(zone && zone.invalid) //this turf's zone is in the process of being rebuilt
-		take_zone_air() //not very efficient :(
+		copy_zone_air() //not very efficient :(
 		zone = null //Easier than iterating through the list at the zone.
 
 	var/self_block
@@ -127,7 +129,7 @@
 			var/zone/z = zone
 
 			if(can_safely_remove_from_zone()) //Helps normal airlocks avoid rebuilding zones all the time
-				take_zone_air() //we aren't rebuilding, but hold onto the old air so it can be readded
+				copy_zone_air() //we aren't rebuilding, but hold onto the old air so it can be readded
 				z.remove_turf(src)
 			else
 				z.rebuild()
@@ -310,7 +312,7 @@
 		else
 			if(!air)
 				make_air()
-			take_zone_air()
+			copy_zone_air()
 			return air
 	else
 		if(!air)
@@ -325,8 +327,8 @@
 		air.gas = initial_gas.Copy()
 	AIR_UPDATE_VALUES(air)
 
-///Takes this turf's group share from the zone. Usually used before removing it from the zone.
-/turf/proc/take_zone_air()
+///Copies this turf's group share from the zone. Usually used before removing it from the zone.
+/turf/proc/copy_zone_air()
 	if(!air)
 		air = new/datum/gas_mixture
 	air.copyFrom(zone.air)

From d3feb67278572f6ab629074b46113eb9479fb88f Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Fri, 3 Jun 2022 21:35:49 -0400
Subject: [PATCH 108/200] multizas testing map

---
 _maps/atmostest_multiz.json                   |   24 +
 .../multizas_debug/atmos_mintest_mz_1.dmm     | 2602 +++++++++++++++++
 .../multizas_debug/atmos_mintest_mz_2.dmm     | 1845 ++++++++++++
 .../multizas_debug/atmos_mintest_mz_3.dmm     | 1838 ++++++++++++
 4 files changed, 6309 insertions(+)
 create mode 100644 _maps/atmostest_multiz.json
 create mode 100644 _maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
 create mode 100644 _maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm
 create mode 100644 _maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm

diff --git a/_maps/atmostest_multiz.json b/_maps/atmostest_multiz.json
new file mode 100644
index 00000000000..ad9a259de0f
--- /dev/null
+++ b/_maps/atmostest_multiz.json
@@ -0,0 +1,24 @@
+{
+	"version": 1,
+	"map_name": "MultiZ Zas Testing Rooms",
+	"map_path": "map_files/multizas_debug",
+	"map_file": [
+		"atmos_mintest_mz_1.dmm",
+		"atmos_mintest_mz_2.dmm",
+		"atmos_mintest_mz_3.dmm"
+	],
+	"traits": [{
+			"Up": 1,
+			"Linkage": null
+		},
+		{
+			"Up": 1,
+			"Down": -1,
+			"Linkage": null
+		},
+		{
+			"Down": -1,
+			"Linkage": null
+		}
+	]
+}
\ No newline at end of file
diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
new file mode 100644
index 00000000000..7326b841ed6
--- /dev/null
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
@@ -0,0 +1,2602 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/open/space/basic,
+/area/space)
+"ab" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"ac" = (
+/obj/effect/spawner/structure/window/plasma,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ad" = (
+/obj/machinery/door/poddoor{
+	id = "c1vent";
+	name = "c1vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ae" = (
+/obj/machinery/door/poddoor{
+	id = "c2vent";
+	name = "c2vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"af" = (
+/obj/machinery/door/poddoor{
+	id = "c3vent";
+	name = "c3vent"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ag" = (
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ah" = (
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"ai" = (
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aj" = (
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"ak" = (
+/obj/item/card/id/advanced/debug,
+/obj/structure/rack,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"al" = (
+/obj/machinery/power/rtg/debug,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"am" = (
+/obj/machinery/door/poddoor{
+	id = "c1toc2";
+	name = "c1toc2"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"an" = (
+/obj/machinery/door/poddoor{
+	id = "c2toc3";
+	name = "c2toc3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ao" = (
+/obj/effect/landmark/latejoin,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ap" = (
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aq" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ar" = (
+/obj/machinery/atmospherics/miner/plasma,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"as" = (
+/obj/machinery/atmospherics/miner/n2o,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"at" = (
+/obj/effect/landmark/observer_start,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"au" = (
+/obj/effect/turf_decal/trimline,
+/obj/machinery/air_sensor/plasma_tank,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"av" = (
+/obj/effect/turf_decal/trimline,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aw" = (
+/obj/effect/turf_decal/trimline,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"ax" = (
+/obj/effect/turf_decal/bot_red,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ay" = (
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"az" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"aA" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aB" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"aC" = (
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/item/card/id/advanced/gold/captains_spare,
+/obj/structure/rack,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aD" = (
+/obj/machinery/button/door{
+	id = "c1toc2";
+	name = "c1toc2"
+	},
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"aE" = (
+/obj/machinery/button/door{
+	id = "c2toc3";
+	name = "c2toc3"
+	},
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"aF" = (
+/obj/machinery/button/door{
+	id = "c1vent";
+	name = "c1vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aG" = (
+/obj/machinery/button/door{
+	id = "c2vent";
+	name = "c2vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aH" = (
+/obj/machinery/button/door{
+	id = "c3vent";
+	name = "c3vent"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aI" = (
+/obj/structure/cable,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aJ" = (
+/obj/machinery/atmospherics/components/unary/portables_connector,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aK" = (
+/obj/machinery/portable_atmospherics/canister/plasma,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aL" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aM" = (
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aN" = (
+/obj/structure/cable,
+/obj/machinery/power/rtg/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aO" = (
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"aP" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aQ" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"aR" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central)
+"aS" = (
+/obj/machinery/door/airlock/external/glass,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"aT" = (
+/obj/machinery/gravity_generator/main/station,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"aU" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"aV" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"aW" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"aX" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"aY" = (
+/obj/machinery/atmospherics/components/binary/pump{
+	dir = 8;
+	icon_state = "pump_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"aZ" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 8;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ba" = (
+/obj/machinery/atmospherics/components/binary/volume_pump{
+	dir = 8;
+	icon_state = "volpump_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bb" = (
+/obj/machinery/atmospherics/components/binary/valve{
+	dir = 8
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bc" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 4;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 8;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bd" = (
+/obj/item/pipe_dispenser,
+/obj/structure/table/reinforced,
+/obj/item/debug/omnitool,
+/obj/item/door_remote/omni,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"be" = (
+/obj/machinery/pipedispenser,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bf" = (
+/obj/machinery/light/floor,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bg" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 4;
+	icon_state = "warningline_red"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bh" = (
+/obj/effect/turf_decal/stripes/red/line,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bi" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bj" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bk" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 8;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bl" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/binary/valve/digital{
+	dir = 8;
+	icon_state = "dvalve_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bm" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/components/binary/passive_gate{
+	dir = 8;
+	icon_state = "passgate_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bn" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 9;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 8;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bo" = (
+/obj/machinery/portable_atmospherics/canister,
+/obj/effect/turf_decal/trimline/yellow/filled,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bp" = (
+/obj/machinery/light/floor,
+/obj/machinery/portable_atmospherics/canister,
+/obj/effect/turf_decal/trimline/yellow/filled,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bq" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/turf_decal/trimline/blue/filled,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"br" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 6;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bs" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 1;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bt" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 10;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bu" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 8;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bv" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 4;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bw" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 5;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bx" = (
+/obj/effect/turf_decal/stripes/red/line,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"by" = (
+/obj/effect/turf_decal/stripes/red/line{
+	dir = 9;
+	icon_state = "warningline_red"
+	},
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bz" = (
+/obj/machinery/door/airlock/public/glass,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bA" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/arrows,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bB" = (
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bC" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/arrows{
+	dir = 4;
+	icon_state = "arrows"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bD" = (
+/obj/item/pipe_dispenser,
+/obj/structure/table/reinforced,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bE" = (
+/obj/item/holosign_creator/atmos,
+/obj/structure/table/reinforced,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bF" = (
+/obj/machinery/portable_atmospherics/pump,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bG" = (
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bH" = (
+/obj/structure/table/reinforced,
+/obj/item/debug/omnitool,
+/obj/item/door_remote/omni,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bI" = (
+/obj/machinery/air_sensor/mix_tank,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"bJ" = (
+/obj/effect/turf_decal/trimline,
+/obj/machinery/air_sensor/nitrous_tank,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"bK" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output,
+/turf/open/floor/engine/plasma,
+/area/hallway/primary/central)
+"bL" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/central)
+"bM" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output,
+/turf/open/floor/engine/n2o,
+/area/hallway/primary/central)
+"bN" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bO" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bP" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"bQ" = (
+/obj/machinery/portable_atmospherics/canister/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bR" = (
+/obj/machinery/computer/atmos_control/plasma_tank,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bS" = (
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bT" = (
+/obj/machinery/computer/atmos_control/mix_tank,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bU" = (
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bV" = (
+/obj/machinery/computer/atmos_control/nitrous_tank,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bW" = (
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bX" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 1;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bY" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/public/glass{
+	name = "Power"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"bZ" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/public/glass{
+	name = "Main Floor"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ca" = (
+/obj/machinery/light/floor,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cb" = (
+/obj/machinery/door/airlock/public/glass{
+	name = "Basic Equipment Tests"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cc" = (
+/obj/effect/spawner/structure/window/plasma,
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+	dir = 1;
+	icon_state = "pipe11-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cd" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ce" = (
+/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{
+	dir = 4;
+	icon_state = "manifold-3"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cf" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{
+	dir = 1;
+	icon_state = "filter_on-0_f"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cg" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 8;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ch" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ci" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/h2{
+	dir = 1;
+	icon_state = "filter_on-0_f"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cj" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"ck" = (
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cl" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 1;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cm" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	dir = 6;
+	icon_state = "pipe11-3"
+	},
+/turf/open/space/basic,
+/area/space)
+"cn" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	dir = 10;
+	icon_state = "pipe11-3"
+	},
+/turf/open/space/basic,
+/area/space)
+"co" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/open/space/basic,
+/area/space)
+"cp" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	dir = 5;
+	icon_state = "pipe11-3"
+	},
+/turf/open/space/basic,
+/area/space)
+"cq" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+	dir = 9;
+	icon_state = "pipe11-3"
+	},
+/turf/open/space/basic,
+/area/space)
+"cr" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/heater,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cs" = (
+/obj/structure/table/reinforced,
+/obj/item/analyzer,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"ct" = (
+/obj/effect/landmark/start/assistant,
+/obj/effect/turf_decal/bot_red,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cu" = (
+/obj/structure/table/reinforced,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/obj/item/clothing/glasses/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cv" = (
+/obj/structure/table/reinforced,
+/obj/item/debug/omnitool,
+/obj/item/debug/omnitool,
+/obj/item/debug/omnitool,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cw" = (
+/obj/structure/table/reinforced,
+/obj/item/gun/magic/wand/death/debug,
+/obj/item/gun/magic/wand/death/debug,
+/obj/item/gun/magic/wand/resurrection/debug,
+/obj/item/gun/magic/wand/safety/debug,
+/obj/item/gun/magic/wand/safety/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cx" = (
+/obj/structure/table/reinforced,
+/obj/item/mod/control/pre_equipped/debug,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cy" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/obj/item/storage/box/debugtools,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cz" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/public/glass{
+	name = "Gravgen"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cA" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cB" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{
+	dir = 1;
+	icon_state = "filter_on-0_f"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cC" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cD" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{
+	dir = 1;
+	icon_state = "filter_on-0_f"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cE" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/obj/machinery/portable_atmospherics/canister/plasma,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cF" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma{
+	dir = 1;
+	icon_state = "filter_on-0_f"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cG" = (
+/obj/machinery/atmospherics/components/binary/volume_pump,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cH" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 1;
+	icon_state = "connector_map-3"
+	},
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cI" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cJ" = (
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cK" = (
+/obj/machinery/door/airlock/public/glass,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cL" = (
+/obj/machinery/atmospherics/components/unary/cryo_cell,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cM" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent{
+	dir = 1;
+	icon_state = "passive_vent_map-3"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cN" = (
+/obj/machinery/atmospherics/components/unary/heat_exchanger{
+	dir = 8;
+	icon_state = "he1"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cO" = (
+/obj/machinery/atmospherics/components/unary/heat_exchanger{
+	dir = 4;
+	icon_state = "he1"
+	},
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cP" = (
+/obj/machinery/atmospherics/components/binary/circulator/cold{
+	dir = 4;
+	icon_state = "circ-off-0"
+	},
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cQ" = (
+/obj/machinery/power/generator,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cR" = (
+/obj/machinery/atmospherics/components/binary/circulator{
+	dir = 8;
+	icon_state = "circ-off-0"
+	},
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cS" = (
+/obj/machinery/atmospherics/components/unary/portables_connector{
+	dir = 4;
+	icon_state = "connector_map-3"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cT" = (
+/obj/machinery/atmospherics/components/trinary/mixer,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cU" = (
+/obj/machinery/atmospherics/components/binary/tank_compressor,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cV" = (
+/obj/item/storage/toolbox/mechanical,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+"cW" = (
+/obj/structure/cable,
+/obj/structure/cable/multilayer/multiz,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"cX" = (
+/obj/structure/ladder,
+/turf/open/floor/iron,
+/area/hallway/primary/central)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+aa
+"}
+(3,1,1) = {"
+aa
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ct
+ag
+ag
+ab
+ck
+ck
+bh
+ag
+bo
+bo
+bo
+bo
+bo
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(4,1,1) = {"
+aa
+ac
+ag
+al
+aN
+al
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+aI
+cW
+ac
+ck
+bf
+bh
+ag
+bp
+bo
+bo
+bo
+bp
+ag
+ag
+ac
+ag
+ag
+aq
+ag
+ag
+ac
+aa
+"}
+(5,1,1) = {"
+aa
+ac
+ag
+ag
+aq
+ap
+ap
+bY
+ap
+ap
+bA
+ap
+bA
+ap
+bA
+ap
+bA
+ap
+bA
+ap
+ag
+ac
+ck
+ck
+bh
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bz
+ag
+ag
+aP
+ag
+ag
+ac
+aa
+"}
+(6,1,1) = {"
+aa
+ac
+ag
+al
+aN
+al
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aX
+ck
+bi
+ag
+bq
+bq
+bq
+bq
+bq
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(7,1,1) = {"
+aa
+ab
+ag
+ag
+ag
+ap
+ay
+ab
+ak
+ao
+at
+ax
+aC
+cu
+cv
+cw
+cx
+cy
+ag
+bC
+cX
+ab
+aY
+ck
+bj
+ag
+bq
+bq
+bq
+bq
+bq
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(8,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ab
+ab
+bZ
+ab
+ab
+aZ
+ck
+bk
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ab
+ac
+bz
+ac
+ab
+ab
+aa
+"}
+(9,1,1) = {"
+aa
+ab
+aU
+ah
+ah
+ah
+aU
+ab
+aK
+aK
+aL
+aL
+aL
+aM
+aM
+aM
+be
+ab
+bF
+ap
+ag
+ab
+aX
+ck
+bi
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(10,1,1) = {"
+aa
+ad
+ah
+ah
+ah
+ah
+bK
+bN
+bQ
+bW
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+bD
+bG
+ap
+ag
+ac
+ba
+bf
+bl
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(11,1,1) = {"
+aa
+ad
+ah
+ah
+ar
+au
+az
+ac
+aF
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bE
+bH
+aI
+ag
+ac
+aZ
+ck
+bk
+ag
+ag
+aX
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(12,1,1) = {"
+aa
+ad
+ah
+ah
+ah
+ah
+ah
+ac
+bR
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ap
+ag
+ac
+aX
+ck
+bi
+ag
+br
+bu
+bw
+ag
+ag
+ag
+ag
+bz
+ag
+ag
+aP
+ag
+ag
+ac
+aa
+"}
+(13,1,1) = {"
+aa
+ab
+aU
+ah
+ah
+ah
+aU
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+bb
+ck
+bm
+ag
+bs
+ck
+bx
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+aq
+ag
+ag
+ac
+aa
+"}
+(14,1,1) = {"
+aa
+ab
+ab
+am
+am
+am
+ab
+aD
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ab
+bc
+bg
+bn
+ag
+bt
+bv
+by
+ag
+cS
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(15,1,1) = {"
+aa
+ab
+aV
+ai
+ai
+ai
+aV
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+cb
+ag
+ag
+ag
+ag
+ag
+aZ
+ag
+aJ
+cT
+bX
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(16,1,1) = {"
+aa
+ae
+ai
+ai
+ai
+av
+bL
+bO
+bS
+bS
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+bB
+ag
+ap
+ag
+cb
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ab
+ab
+ac
+bz
+ac
+ab
+ab
+aa
+"}
+(17,1,1) = {"
+aa
+ae
+ai
+ai
+ai
+bI
+aA
+ac
+aG
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aq
+bB
+ap
+aI
+ag
+cb
+ag
+ag
+ag
+cd
+ch
+cA
+cC
+cE
+ag
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(18,1,1) = {"
+aa
+ae
+ai
+ai
+ai
+av
+ai
+ac
+bT
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bB
+ag
+ap
+ag
+ab
+bd
+ag
+aJ
+ce
+ce
+ce
+ce
+ce
+cG
+cH
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(19,1,1) = {"
+aa
+ab
+aV
+ai
+ai
+ai
+aV
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aK
+ag
+aJ
+cf
+ci
+cB
+cD
+cF
+bX
+ag
+ag
+bz
+ag
+ag
+aq
+ag
+ag
+ac
+aa
+"}
+(20,1,1) = {"
+aa
+ab
+ab
+an
+an
+an
+ab
+aE
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aK
+ag
+ag
+cg
+cg
+cg
+cg
+cg
+ag
+ag
+ag
+ac
+ag
+ag
+aP
+ag
+ag
+ac
+aa
+"}
+(21,1,1) = {"
+aa
+ab
+aW
+aj
+aj
+aj
+aW
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aK
+aq
+ag
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+aa
+"}
+(22,1,1) = {"
+aa
+af
+aj
+aj
+aj
+aw
+bM
+bP
+bU
+bU
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+aL
+ag
+ag
+ag
+ag
+ag
+ag
+aX
+ag
+ag
+ag
+ab
+ag
+ag
+ag
+ag
+ag
+ab
+aa
+"}
+(23,1,1) = {"
+aa
+af
+aj
+aj
+as
+bJ
+aB
+ac
+aH
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aI
+ag
+ac
+aL
+ag
+ag
+ag
+cj
+cl
+ag
+cN
+ag
+ag
+cU
+ab
+ab
+ac
+bz
+ac
+ab
+ab
+aa
+"}
+(24,1,1) = {"
+aa
+af
+aj
+aj
+aj
+aw
+aj
+ac
+bV
+ag
+ag
+ag
+ag
+aJ
+cP
+bX
+ag
+ag
+ag
+ap
+ag
+ac
+aL
+ag
+ag
+ag
+cr
+cl
+ag
+cO
+ag
+ag
+ag
+ab
+aO
+aO
+aO
+aO
+aO
+ab
+aa
+"}
+(25,1,1) = {"
+aa
+ab
+aW
+aj
+aj
+aj
+aW
+ab
+ag
+ag
+ag
+ag
+ag
+ag
+cQ
+cV
+ag
+ag
+ag
+ap
+ag
+ac
+aM
+ag
+ag
+ag
+ag
+ag
+ag
+aZ
+ag
+ag
+ag
+ac
+aO
+aO
+aO
+aO
+aO
+ac
+aa
+"}
+(26,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+ag
+ag
+ag
+ag
+ag
+aJ
+cR
+bX
+ag
+ag
+ag
+ap
+ag
+ac
+aM
+ag
+ag
+ag
+cL
+bX
+ag
+ag
+ag
+ag
+ag
+bz
+aO
+aO
+aQ
+aO
+aO
+aS
+aa
+"}
+(27,1,1) = {"
+aa
+ab
+aq
+ag
+ag
+ag
+aq
+ab
+aq
+ag
+ag
+aq
+ag
+ag
+ca
+ag
+ag
+aq
+ag
+ca
+ag
+ac
+aM
+aq
+ag
+ag
+aq
+ag
+ag
+ag
+aq
+ag
+ag
+ac
+aO
+aO
+aR
+aO
+aO
+ac
+aa
+"}
+(28,1,1) = {"
+aa
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ap
+ag
+ag
+ag
+ag
+ap
+ag
+ac
+be
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+aO
+aO
+aO
+aO
+aO
+ab
+aa
+"}
+(29,1,1) = {"
+aa
+ac
+ag
+ag
+ag
+aT
+ap
+cz
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ag
+ab
+ac
+bz
+ac
+ab
+ac
+bz
+ac
+ab
+ac
+bz
+ac
+ab
+ab
+ac
+aS
+ac
+ab
+ab
+aa
+"}
+(30,1,1) = {"
+aa
+ac
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+ab
+aq
+ag
+ag
+ag
+aq
+ab
+ag
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aq
+ag
+ac
+ag
+cI
+cJ
+cK
+cJ
+cM
+ag
+bz
+ag
+aq
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ab
+aq
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(33,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+cs
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ac
+bz
+ac
+ab
+ac
+bz
+ac
+ab
+ag
+aP
+ag
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(34,1,1) = {"
+aa
+aa
+aa
+cm
+co
+co
+cc
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+aP
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(35,1,1) = {"
+aa
+aa
+aa
+cn
+co
+cp
+ac
+aK
+ag
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+ag
+aq
+ag
+aq
+ag
+ac
+ag
+aq
+ag
+bz
+ag
+aq
+ag
+bz
+ag
+aq
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(36,1,1) = {"
+aa
+aa
+aa
+cm
+co
+cq
+ac
+aK
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+ag
+ag
+ag
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(37,1,1) = {"
+aa
+aa
+aa
+cn
+co
+co
+cc
+bX
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ac
+aS
+ac
+ab
+ac
+aS
+ac
+ab
+ac
+aS
+ac
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(38,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aq
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+aq
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(39,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ac
+ac
+ac
+ac
+ab
+ac
+ac
+ac
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(40,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm
new file mode 100644
index 00000000000..34e9ccacc5f
--- /dev/null
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm
@@ -0,0 +1,1845 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/open/space/basic,
+/area/space)
+"b" = (
+/turf/open/floor/engine/airless,
+/area/hallway/primary/upper)
+"c" = (
+/obj/machinery/light/floor,
+/turf/open/floor/engine/airless,
+/area/hallway/primary/upper)
+"d" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/upper)
+"e" = (
+/obj/effect/spawner/structure/window/plasma,
+/turf/open/floor/plating,
+/area/hallway/primary/upper)
+"f" = (
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"g" = (
+/turf/open/openspace,
+/area/hallway/primary/upper)
+"h" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"i" = (
+/turf/open/floor/plating,
+/area/hallway/primary/upper)
+"j" = (
+/obj/structure/lattice/catwalk,
+/turf/open/openspace,
+/area/hallway/primary/upper)
+"k" = (
+/obj/machinery/light/floor,
+/obj/structure/railing{
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"l" = (
+/obj/structure/railing{
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"m" = (
+/obj/machinery/door/airlock/public/glass{
+	name = "Main Floor"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"n" = (
+/obj/machinery/light/floor,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/west,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"o" = (
+/obj/structure/cable/multilayer/multiz,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/hallway/primary/upper)
+"p" = (
+/obj/structure/ladder,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"q" = (
+/obj/machinery/door/airlock/public/glass{
+	name = "Basic Equipment Tests"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"r" = (
+/obj/machinery/light/floor,
+/turf/open/floor/plating,
+/area/hallway/primary/upper)
+"s" = (
+/obj/machinery/door/airlock/public/glass,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"t" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"u" = (
+/obj/machinery/door/airlock/external/glass,
+/turf/open/floor/plating,
+/area/hallway/primary/upper)
+"v" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"w" = (
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"x" = (
+/obj/machinery/door/airlock/public/glass,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"y" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent{
+	dir = 1;
+	icon_state = "passive_vent_map-3"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/upper)
+"z" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron/red,
+/area/hallway/primary/upper)
+"A" = (
+/turf/open/floor/iron/red,
+/area/hallway/primary/upper)
+"B" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron/red,
+/area/hallway/primary/upper)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+d
+e
+e
+e
+e
+e
+e
+e
+e
+e
+e
+e
+d
+d
+d
+e
+e
+e
+e
+e
+e
+e
+e
+d
+d
+d
+d
+e
+e
+e
+d
+d
+a
+"}
+(3,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+g
+g
+g
+g
+g
+g
+g
+g
+g
+k
+f
+f
+n
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(4,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+g
+g
+g
+g
+g
+g
+g
+g
+g
+l
+f
+f
+o
+e
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+h
+f
+f
+e
+a
+"}
+(5,1,1) = {"
+a
+b
+b
+c
+b
+b
+b
+e
+g
+g
+g
+g
+g
+g
+g
+g
+g
+l
+f
+f
+f
+e
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+s
+f
+f
+v
+f
+f
+e
+a
+"}
+(6,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+g
+g
+g
+g
+g
+g
+g
+g
+g
+l
+f
+f
+h
+e
+i
+r
+i
+f
+f
+f
+h
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(7,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+g
+g
+g
+g
+g
+g
+g
+g
+g
+k
+f
+f
+p
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(8,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+d
+i
+i
+i
+i
+i
+i
+i
+d
+d
+d
+m
+d
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+d
+e
+s
+e
+d
+d
+a
+"}
+(9,1,1) = {"
+a
+b
+b
+c
+b
+b
+b
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(10,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+f
+e
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(11,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+f
+e
+i
+r
+i
+f
+f
+i
+h
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(12,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+f
+f
+f
+g
+g
+f
+h
+f
+f
+f
+e
+i
+i
+i
+f
+i
+i
+i
+f
+f
+f
+f
+s
+f
+f
+v
+f
+f
+e
+a
+"}
+(13,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+h
+j
+j
+f
+h
+f
+j
+j
+f
+f
+f
+f
+f
+e
+i
+i
+i
+f
+i
+i
+i
+f
+f
+f
+f
+e
+f
+f
+h
+f
+f
+e
+a
+"}
+(14,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+h
+f
+f
+d
+i
+i
+i
+f
+i
+i
+i
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(15,1,1) = {"
+a
+b
+b
+c
+b
+b
+b
+d
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+f
+q
+f
+f
+f
+f
+f
+i
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(16,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+g
+j
+g
+g
+g
+f
+i
+f
+f
+f
+q
+f
+h
+f
+f
+f
+f
+h
+f
+f
+h
+f
+d
+d
+e
+s
+e
+d
+d
+a
+"}
+(17,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+f
+f
+f
+g
+g
+f
+i
+f
+f
+f
+q
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(18,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+h
+j
+j
+f
+h
+f
+j
+j
+f
+i
+f
+f
+f
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(19,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+s
+f
+f
+h
+f
+f
+e
+a
+"}
+(20,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+v
+f
+f
+e
+a
+"}
+(21,1,1) = {"
+a
+b
+b
+c
+b
+b
+b
+d
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+f
+e
+f
+h
+f
+f
+f
+f
+h
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(22,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+i
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(23,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+h
+j
+j
+f
+h
+f
+j
+j
+f
+h
+f
+f
+f
+e
+f
+f
+f
+f
+i
+i
+f
+i
+f
+f
+f
+d
+d
+e
+s
+e
+d
+d
+a
+"}
+(24,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+i
+i
+f
+i
+f
+f
+f
+d
+z
+A
+A
+z
+B
+d
+a
+"}
+(25,1,1) = {"
+a
+b
+b
+c
+b
+b
+b
+d
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+f
+f
+i
+f
+f
+f
+e
+A
+g
+g
+g
+z
+e
+a
+"}
+(26,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+f
+e
+f
+h
+f
+f
+f
+f
+h
+f
+f
+h
+f
+s
+A
+g
+g
+g
+A
+u
+a
+"}
+(27,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+A
+g
+g
+g
+A
+e
+a
+"}
+(28,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+h
+j
+j
+f
+h
+f
+j
+j
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+z
+A
+A
+A
+z
+d
+a
+"}
+(29,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+e
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+f
+d
+e
+s
+e
+d
+e
+s
+e
+d
+e
+s
+e
+d
+d
+e
+u
+e
+d
+d
+a
+"}
+(30,1,1) = {"
+a
+b
+b
+c
+b
+b
+b
+e
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+h
+f
+e
+f
+f
+v
+e
+f
+f
+v
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(31,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+d
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+f
+e
+f
+t
+w
+x
+w
+y
+f
+s
+f
+h
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(32,1,1) = {"
+a
+b
+b
+b
+b
+b
+d
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+f
+e
+f
+f
+f
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(33,1,1) = {"
+a
+a
+a
+a
+a
+a
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+h
+f
+f
+f
+d
+e
+s
+e
+d
+e
+s
+e
+d
+f
+v
+f
+d
+a
+a
+a
+a
+a
+a
+a
+"}
+(34,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+h
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+g
+f
+v
+e
+f
+f
+v
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(35,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+h
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+g
+h
+f
+s
+f
+h
+f
+s
+f
+h
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(36,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+f
+f
+f
+f
+h
+f
+f
+f
+f
+f
+e
+g
+f
+f
+e
+f
+f
+f
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(37,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+e
+u
+e
+d
+e
+u
+e
+d
+e
+u
+e
+d
+a
+a
+a
+a
+a
+a
+a
+"}
+(38,1,1) = {"
+a
+a
+a
+a
+a
+a
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(39,1,1) = {"
+a
+a
+a
+a
+a
+a
+d
+d
+e
+e
+e
+d
+e
+e
+e
+e
+d
+e
+e
+e
+d
+d
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(40,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm
new file mode 100644
index 00000000000..ec204fb4362
--- /dev/null
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm
@@ -0,0 +1,1838 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/open/space/basic,
+/area/space)
+"d" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central/fore)
+"e" = (
+/obj/effect/spawner/structure/window/plasma,
+/turf/open/floor/plating,
+/area/hallway/primary/central/fore)
+"f" = (
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"g" = (
+/turf/open/openspace,
+/area/hallway/primary/central/fore)
+"h" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"i" = (
+/turf/open/floor/plating,
+/area/hallway/primary/central/fore)
+"j" = (
+/obj/structure/lattice/catwalk,
+/turf/open/openspace,
+/area/hallway/primary/central/fore)
+"k" = (
+/obj/machinery/light/floor,
+/obj/structure/railing{
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"l" = (
+/obj/structure/railing{
+	dir = 1
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"m" = (
+/obj/machinery/door/airlock/public/glass{
+	name = "Main Floor"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"n" = (
+/obj/machinery/light/floor,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/west,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"o" = (
+/obj/structure/cable/multilayer/multiz,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/hallway/primary/central/fore)
+"p" = (
+/obj/structure/ladder,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"q" = (
+/obj/machinery/door/airlock/public/glass{
+	name = "Basic Equipment Tests"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"r" = (
+/obj/machinery/light/floor,
+/turf/open/floor/plating,
+/area/hallway/primary/central/fore)
+"s" = (
+/obj/machinery/door/airlock/public/glass,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"t" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"u" = (
+/obj/machinery/door/airlock/external/glass,
+/turf/open/floor/plating,
+/area/hallway/primary/central/fore)
+"v" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"w" = (
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"x" = (
+/obj/machinery/door/airlock/public/glass,
+/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"y" = (
+/obj/machinery/light/floor,
+/obj/machinery/atmospherics/components/unary/passive_vent{
+	dir = 1;
+	icon_state = "passive_vent_map-3"
+	},
+/turf/open/floor/iron,
+/area/hallway/primary/central/fore)
+"z" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central/fore)
+"A" = (
+/turf/open/floor/iron/red,
+/area/hallway/primary/central/fore)
+"B" = (
+/obj/machinery/meter/turf,
+/turf/open/floor/iron/red,
+/area/hallway/primary/central/fore)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+d
+e
+e
+e
+e
+e
+e
+e
+e
+e
+e
+e
+d
+d
+d
+e
+e
+e
+e
+e
+e
+e
+e
+d
+d
+d
+d
+e
+e
+e
+d
+d
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+g
+g
+g
+g
+g
+g
+g
+g
+g
+k
+f
+f
+n
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+g
+g
+g
+g
+g
+g
+g
+g
+g
+l
+f
+f
+o
+e
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+h
+f
+f
+e
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+g
+g
+g
+g
+g
+g
+g
+g
+g
+l
+f
+f
+f
+e
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+s
+f
+f
+v
+f
+f
+e
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+g
+g
+g
+g
+g
+g
+g
+g
+g
+l
+f
+f
+h
+e
+i
+r
+i
+f
+f
+f
+h
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+g
+g
+g
+g
+g
+g
+g
+g
+g
+k
+f
+f
+p
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+d
+i
+i
+i
+i
+i
+i
+i
+d
+d
+d
+m
+d
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+d
+e
+s
+e
+d
+d
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+d
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+i
+i
+i
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+i
+r
+i
+f
+f
+i
+h
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(12,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+h
+f
+f
+f
+e
+i
+i
+i
+f
+i
+i
+i
+f
+f
+f
+f
+s
+f
+f
+v
+f
+f
+e
+a
+"}
+(13,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+h
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+e
+i
+i
+i
+f
+i
+i
+i
+f
+f
+f
+f
+e
+f
+f
+h
+f
+f
+e
+a
+"}
+(14,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+g
+g
+g
+j
+g
+g
+g
+f
+h
+f
+f
+d
+i
+i
+i
+f
+i
+i
+i
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(15,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+q
+f
+f
+f
+f
+f
+i
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(16,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+j
+j
+f
+h
+f
+j
+j
+i
+f
+f
+f
+q
+f
+h
+f
+f
+f
+f
+h
+f
+f
+h
+f
+d
+d
+e
+s
+e
+d
+d
+a
+"}
+(17,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+g
+g
+f
+f
+f
+g
+g
+i
+f
+f
+f
+q
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(18,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+h
+f
+g
+g
+g
+j
+g
+g
+g
+i
+f
+f
+f
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(19,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+s
+f
+f
+h
+f
+f
+e
+a
+"}
+(20,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+f
+f
+v
+f
+f
+e
+a
+"}
+(21,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+j
+j
+f
+h
+f
+j
+j
+f
+f
+f
+f
+e
+f
+h
+f
+f
+f
+f
+h
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+e
+a
+"}
+(22,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+i
+f
+f
+f
+d
+f
+f
+f
+f
+f
+d
+a
+"}
+(23,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+h
+f
+g
+g
+g
+j
+g
+g
+g
+h
+f
+f
+f
+e
+f
+f
+f
+f
+i
+i
+f
+i
+f
+f
+f
+d
+d
+e
+s
+e
+d
+d
+a
+"}
+(24,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+e
+f
+f
+f
+f
+i
+i
+f
+i
+f
+f
+f
+d
+z
+A
+A
+z
+B
+d
+a
+"}
+(25,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+h
+f
+e
+f
+f
+f
+f
+f
+f
+f
+i
+f
+f
+f
+e
+A
+g
+g
+g
+z
+e
+a
+"}
+(26,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+j
+j
+f
+h
+f
+j
+j
+f
+f
+f
+f
+e
+f
+h
+f
+f
+f
+f
+h
+f
+f
+h
+f
+s
+A
+g
+g
+g
+A
+u
+a
+"}
+(27,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+A
+g
+g
+g
+A
+e
+a
+"}
+(28,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+h
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+z
+A
+A
+A
+z
+d
+a
+"}
+(29,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+d
+e
+s
+e
+d
+e
+s
+e
+d
+e
+s
+e
+d
+d
+e
+u
+e
+d
+d
+a
+"}
+(30,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+e
+f
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+h
+f
+e
+f
+f
+v
+e
+f
+f
+v
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(31,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+d
+f
+f
+j
+j
+f
+h
+f
+j
+j
+f
+f
+f
+f
+e
+f
+t
+w
+x
+w
+y
+f
+s
+f
+h
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(32,1,1) = {"
+a
+a
+a
+a
+a
+a
+d
+d
+f
+f
+g
+g
+f
+f
+f
+g
+g
+f
+f
+f
+f
+e
+f
+f
+f
+e
+f
+f
+f
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(33,1,1) = {"
+a
+a
+a
+a
+a
+a
+d
+f
+f
+f
+g
+g
+g
+j
+g
+g
+g
+h
+f
+f
+f
+d
+e
+s
+e
+d
+e
+s
+e
+d
+f
+v
+f
+d
+a
+a
+a
+a
+a
+a
+a
+"}
+(34,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+h
+f
+g
+g
+g
+j
+g
+g
+g
+f
+f
+f
+f
+e
+g
+f
+v
+e
+f
+f
+v
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(35,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+h
+f
+f
+f
+f
+f
+f
+f
+f
+f
+e
+g
+h
+f
+s
+f
+h
+f
+s
+f
+h
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(36,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+f
+f
+f
+f
+h
+f
+f
+f
+f
+f
+e
+g
+f
+f
+e
+f
+f
+f
+e
+f
+f
+f
+e
+a
+a
+a
+a
+a
+a
+a
+"}
+(37,1,1) = {"
+a
+a
+a
+a
+a
+a
+e
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+e
+u
+e
+d
+e
+u
+e
+d
+e
+u
+e
+d
+a
+a
+a
+a
+a
+a
+a
+"}
+(38,1,1) = {"
+a
+a
+a
+a
+a
+a
+d
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+f
+d
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(39,1,1) = {"
+a
+a
+a
+a
+a
+a
+d
+d
+e
+e
+e
+d
+e
+e
+e
+e
+d
+e
+e
+e
+d
+d
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(40,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}

From 59fef0d39aef93fb1309b469a04dddea1733ee2b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 03:12:50 -0400
Subject: [PATCH 109/200] Enables MultiZAS

---
 code/__DEFINES/atmospherics/ZAS.dm          | 32 +++++++++++++--------
 code/__DEFINES/flags.dm                     | 10 +++++++
 code/game/turfs/open/openspace.dm           |  7 ++++-
 code/game/turfs/open/space/space.dm         |  3 +-
 code/modules/atmospherics/ZAS/Diagnostic.dm |  2 ++
 code/modules/atmospherics/ZAS/Turf.dm       | 10 ++++---
 config/maps.txt                             |  3 ++
 7 files changed, 49 insertions(+), 18 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 450fb1d3cf2..969b12897de 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,5 +1,5 @@
 //#define ZASDBG
-//#define MULTIZAS
+#define MULTIZAS
 
 ///Air and zones freely mingle with this turf under the given conditions
 #define AIR_ALLOWED (0<<0)
@@ -45,28 +45,34 @@
 	} while(FALSE)
 
 #define TURF_HAS_VALID_ZONE(T) (T.simulated && T.zone && !T.zone.invalid)
-#ifdef MULTIZAS
 
+#ifdef MULTIZAS
 ///"Can safely remove from zone"
-GLOBAL_REAL(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
+GLOBAL_REAL_VAR(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTHUP, EASTUP, WESTUP, SOUTHUP, NORTHDOWN, EASTDOWN, WESTDOWN, SOUTHDOWN)
 ///"Get zone neighbors"
-GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
+GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 
 ///Can air move from B to A?
 #define ATMOS_CANPASS_TURF(ret,A,B) \
 	if (A.blocks_air & AIR_BLOCKED || B.blocks_air & AIR_BLOCKED) { \
-		ret = BLOCKED; \
+		ret = AIR_BLOCKED|ZONE_BLOCKED; \
 	} \
 	else if (B.z != A.z) { \
-		if (B.z < A.z) { \
-			ret = (A.z_flags & ZM_ALLOW_ATMOS) ? ZONE_BLOCKED : BLOCKED; \
+		var/canpass_dir = get_dir_multiz(B, A); \
+		if(canpass_dir) { \
+			if (canpass_dir & UP) { \
+				ret = ((A.z_flags & Z_ATMOS_IN_DOWN) && (B.z_flags & Z_ATMOS_OUT_UP)) ? ZONE_BLOCKED : AIR_BLOCKED|ZONE_BLOCKED; \
+			} \
+			else { \
+				ret = ((A.z_flags & Z_ATMOS_IN_UP) && (B.z_flags & Z_ATMOS_OUT_DOWN)) ? ZONE_BLOCKED : AIR_BLOCKED|ZONE_BLOCKED; \
+			} \
 		} \
 		else { \
-			ret = (B.z_flags & ZM_ALLOW_ATMOS) ? ZONE_BLOCKED : BLOCKED; \
+			ret = AIR_BLOCKED|ZONE_BLOCKED; \
 		} \
 	} \
 	else if (A.blocks_air & ZONE_BLOCKED || B.blocks_air & ZONE_BLOCKED) { \
-		ret = (A.z == B.z) ? ZONE_BLOCKED : AIR_BLOCKED; \
+		ret = (A.z == B.z) ? ZONE_BLOCKED : AIR_BLOCKED|ZONE_BLOCKED; \
 	} \
 	else if (A.contents.len) { \
 		ret = 0;\
@@ -77,24 +83,26 @@ GLOBAL_REAL(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 				} \
 				if (CANPASS_DENSITY) { \
 					if (AM.density) { \
-						ret |= AIR_BLOCKED; \
+						ret |= AIR_BLOCKED|ZONE_BLOCKED; \
 					} \
 				} \
 				if (CANPASS_PROC) { \
 					ret |= AM.zas_canpass(B); \
 				} \
 				if (CANPASS_NEVER) { \
-					ret = AIR_BLOCKED; \
+					ret = AIR_BLOCKED|ZONE_BLOCKED; \
 				} \
 			} \
-			if (ret == AIR_BLOCKED) { \
+			if (ret == AIR_BLOCKED|ZONE_BLOCKED) { \
 				break;\
 			}\
 		}\
 	}
 #else
 
+///"Can safely remove from zone"
 GLOBAL_REAL_VAR(list/csrfz_check) = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
+///"Get zone neighbors"
 GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 
 ///Can air move from B to A?
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index b1139fcf476..154a9078f06 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -288,3 +288,13 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
 #define SPACEVINE_HEAT_RESISTANT (1 << 0)
 /// Is the spacevine / flower bud cold resistant
 #define SPACEVINE_COLD_RESISTANT (1 << 1)
+
+//Z-level flags. Currently only for ZAS
+///Allows air to flow IN from higher Z levels
+#define Z_ATMOS_IN_UP (1<<0)
+///Allows air to flow IN from lower z levels
+#define Z_ATMOS_IN_DOWN (1<<1)
+///Allows air to flow OUT to higher Z levels
+#define Z_ATMOS_OUT_UP (1<<2)
+///Allows air to flow OUT to LOWER z levels
+#define Z_ATMOS_OUT_DOWN (1<<3)
diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm
index 951b06ad0b6..2d1d0b25f30 100644
--- a/code/game/turfs/open/openspace.dm
+++ b/code/game/turfs/open/openspace.dm
@@ -18,8 +18,13 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
 	baseturfs = /turf/open/openspace
 	overfloor_placed = FALSE
 	underfloor_accessibility = UNDERFLOOR_INTERACTABLE
+	#ifndef ZASDBG //Multi-Z zone debugging
 	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+	#endif
 	pathing_pass_method = TURF_PATHING_PASS_PROC
+
+	z_flags = Z_ATMOS_IN_DOWN|Z_ATMOS_IN_UP|Z_ATMOS_OUT_DOWN|Z_ATMOS_OUT_UP
+
 	var/can_cover_up = TRUE
 	var/can_build_on = TRUE
 
@@ -27,7 +32,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
 	initial_gas = AIRLESS_ATMOS
 
 /turf/open/openspace/airless/planetary
-
+	simulated = FALSE
 
 /turf/open/openspace/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
 	. = ..()
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index 5e11964b1f9..2d68c3082de 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -4,7 +4,7 @@
 	name = "\proper space"
 	overfloor_placed = FALSE
 	underfloor_accessibility = UNDERFLOOR_INTERACTABLE
-
+	z_flags = Z_ATMOS_IN_DOWN|Z_ATMOS_IN_UP|Z_ATMOS_OUT_DOWN|Z_ATMOS_OUT_UP
 	temperature = TCMB
 	thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
 	heat_capacity = 700000
@@ -228,6 +228,7 @@
 /turf/open/space/openspace
 	icon = 'icons/turf/floors.dmi'
 	icon_state = "invisible"
+	simulated = TRUE
 
 /turf/open/space/openspace/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
 	. = ..()
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 17f44c2e459..12b1198674a 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -37,6 +37,7 @@
 		return
 
 	if(direction == "N/A")
+		to_chat(mob, "Testing self-blocking...")
 		var/canpass_self
 		ATMOS_CANPASS_TURF(canpass_self, T, T)
 		if(!(canpass_self & AIR_BLOCKED))
@@ -54,6 +55,7 @@
 	var/o_block
 	ATMOS_CANPASS_TURF(o_block, other_turf, T)
 
+	to_chat(mob, "Testing connection between ([T.x], [T.y], [T.z]) and ([other_turf.x], [other_turf.y], [other_turf.z])...")
 	if(o_block & AIR_BLOCKED)
 		if(t_block & AIR_BLOCKED)
 			to_chat(mob, "Neither turf can connect. :(")
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 3bd87c160a1..aab7eda075f 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -3,6 +3,8 @@
 	var/zone/zone
 	///All directions in which a turf that can contain air is present.
 	var/open_directions
+	///Can atmos pass down through this turf?
+	var/z_flags = Z_ATMOS_IN_UP|Z_ATMOS_OUT_UP
 
 /turf
 	///Does this turf need to be ran through SSzas? (SSzas.mark_for_update(turf) OR turf.update_nearby_tiles())
@@ -55,7 +57,7 @@
 		ATMOS_CANPASS_TURF(target_blocks_us, target, src)
 		if(target_blocks_us & AIR_BLOCKED)
 			#ifdef ZASDBG
-			target.dbg(ZAS_DIRECTIONAL_BLOCKER(turn(d, 180)))
+			//target.dbg(ZAS_DIRECTIONAL_BLOCKER(turn(d, 180)))
 			#endif
 			continue
 
@@ -158,7 +160,7 @@
 			#ifdef ZASDBG
 			if(verbose)
 				zas_log("[dir2text(d)] is blocked.")
-			src.dbg(ZAS_DIRECTIONAL_BLOCKER(d))
+			//src.dbg(ZAS_DIRECTIONAL_BLOCKER(d))
 			#endif
 
 			continue
@@ -170,7 +172,7 @@
 			#ifdef ZASDBG
 			if(verbose)
 				zas_log("[dir2text(d)] is blocked.")
-			target.dbg(ZAS_DIRECTIONAL_BLOCKER(turn(d, 180)))
+			//target.dbg(ZAS_DIRECTIONAL_BLOCKER(turn(d, 180)))
 			#endif
 
 			//Check that our zone hasn't been cut off recently.
@@ -198,7 +200,7 @@
 						#ifdef ZASDBG
 						if(verbose)
 							zas_log("[dir2text(d)] is zone blocked.")
-						dbg(ZAS_ZONE_BLOCKER(d))
+						//dbg(ZAS_ZONE_BLOCKER(d))
 						#endif
 
 						//Postpone this tile rather than exit, since a connection can still be made.
diff --git a/config/maps.txt b/config/maps.txt
index 87293fd9bca..6d098587b0e 100644
--- a/config/maps.txt
+++ b/config/maps.txt
@@ -45,5 +45,8 @@ endmap
 map atmostest
 endmap
 
+map atmostest_multiz
+endmap
+
 map multiz_debug
 endmap

From 2850f3b013b7f578d10c2d13bb3328c20c771315 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 12:34:15 -0400
Subject: [PATCH 110/200] Try to fix world bounds issue with ZAS

---
 code/modules/atmospherics/ZAS/Turf.dm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index aab7eda075f..4faa1887abd 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -71,7 +71,7 @@
 	if (T.zone) { \
 		for (var/_gzn_dir in gzn_check) { \
 			var/turf/other = get_step(T, _gzn_dir); \
-			if (other.simulated && other.zone == T.zone) { \
+			if (other && other.simulated && other.zone == T.zone) { \
 				var/block; \
 				ATMOS_CANPASS_TURF(block, other, T); \
 				if (!(block & AIR_BLOCKED)) { \
@@ -99,7 +99,7 @@
 		if((dir & check_dirs) == dir)
 			//check that they are connected by the corner turf
 			var/turf/T = get_step(src, dir)
-			if (!T.simulated)
+			if (!T?.simulated)
 				. &= ~dir
 				continue
 

From 09812a34db6063ea9a70fbed285e58946faf0fa4 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 12:56:22 -0400
Subject: [PATCH 111/200] Runtimes fix

---
 code/modules/atmospherics/rust/particle_catcher.dm | 2 +-
 code/modules/mob/living/carbon/life.dm             | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/code/modules/atmospherics/rust/particle_catcher.dm b/code/modules/atmospherics/rust/particle_catcher.dm
index b8757a813db..a029ecd1779 100644
--- a/code/modules/atmospherics/rust/particle_catcher.dm
+++ b/code/modules/atmospherics/rust/particle_catcher.dm
@@ -10,7 +10,7 @@
 
 /obj/effect/fusion_particle_catcher/Destroy()
 	. =..()
-	parent.particle_catchers -= src
+	parent?.particle_catchers -= src //This should never actually exist outside of the R-UST, but, unit tests.
 	parent = null
 
 /obj/effect/fusion_particle_catcher/proc/set_size(newsize)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 8852d634b82..edf8ad1fc3c 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -131,7 +131,7 @@
 					breath.adjustGas(gasname, -breath.gas[gasname], update = 0) //update after
 
 	check_breath(breath)
-	if(breath.total_moles)
+	if(breath?.total_moles)
 		AIR_UPDATE_VALUES(breath)
 		loc.assume_air(breath)
 

From b492c73d2b43943fc2d1a9e1d6c519c500522b73 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 13:11:37 -0400
Subject: [PATCH 112/200] Fixes a hilarious oversight

---
 code/modules/atmospherics/ZAS/Airflow.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 0e5412aa686..7567fb63841 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -27,7 +27,7 @@ Contains helper procs for airflow, handled in /connection_group.
 /mob/living/silicon/airflow_stun()
 	return
 
-/mob/living/carbon/slime/airflow_stun()
+/mob/living/simple_animal/slime/airflow_stun()
 	return
 
 /atom/movable/proc/experience_pressure_difference()

From 995c023ccbedef8fa0418f3ea67256a9c0b0af2e Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 13:38:13 -0400
Subject: [PATCH 113/200] CI

---
 _maps/map_files/debug/atmos_mintest.dmm               | 4 +++-
 _maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm | 4 +++-
 code/modules/atmospherics/ZAS/Turf.dm                 | 4 +++-
 code/modules/mapping/map_template.dm                  | 4 +++-
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
index 1ed2380d184..c85ea297d00 100644
--- a/_maps/map_files/debug/atmos_mintest.dmm
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -15,7 +15,9 @@
 	name = "c1vent"
 	},
 /turf/open/floor/plating,
-/area/hallway/primary/central)
+/area/hallway/primary/central,
+/obj/effect/landmark/blobstart
+)
 "ae" = (
 /obj/machinery/door/poddoor{
 	id = "c2vent";
diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
index 7326b841ed6..b62bc208916 100644
--- a/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
@@ -15,7 +15,9 @@
 	name = "c1vent"
 	},
 /turf/open/floor/plating,
-/area/hallway/primary/central)
+/area/hallway/primary/central,
+/obj/effect/landmark/blobstart
+)
 "ae" = (
 /obj/machinery/door/poddoor{
 	id = "c2vent";
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 4faa1887abd..e710aea0bd9 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -255,8 +255,10 @@
 			#ifdef ZASDBG
 			if(verbose)
 				zas_log("This turf tried to merge into itself! Current type: [src.type]")
-			#endif
+
 			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
+			#endif
+			return //THIS BUG IS SMALL ENOUGH THAT IT IS FINE FOR NOW. I WILL FIX IT IN THE FUTURE.
 		SSzas.connect(src, T)
 
 /turf/proc/post_update_air_properties()
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index 29bdb96720d..b2398487777 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -155,8 +155,10 @@
 		return
 
 	/*var/list/border = block(locate(max(T.x-1, 1), max(T.y-1, 1),  T.z),
-							locate(min(T.x+width+1, world.maxx), min(T.y+height+1, world.maxy), T.z))*/
+							locate(min(T.x+width+1, world.maxx), min(T.y+height+1, world.maxy), T.z))*/\
+	#ifdef ZASDBG
 	stack_trace("This is a reminder that kapu touched this code")
+	#endif
 	/*
 	for(var/L in border)
 		var/turf/turf_to_disable = L

From 9234bf61905835a01e3d866bf1ef7e3e0af0a9a3 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 13:50:45 -0400
Subject: [PATCH 114/200] please

---
 _maps/map_files/debug/atmos_mintest.dmm               | 2 +-
 _maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/_maps/map_files/debug/atmos_mintest.dmm b/_maps/map_files/debug/atmos_mintest.dmm
index c85ea297d00..5d6b4a9ae09 100644
--- a/_maps/map_files/debug/atmos_mintest.dmm
+++ b/_maps/map_files/debug/atmos_mintest.dmm
@@ -16,7 +16,6 @@
 	},
 /turf/open/floor/plating,
 /area/hallway/primary/central,
-/obj/effect/landmark/blobstart
 )
 "ae" = (
 /obj/machinery/door/poddoor{
@@ -52,6 +51,7 @@
 "al" = (
 /obj/machinery/power/rtg/debug,
 /obj/structure/cable,
+/obj/effect/landmark/blobstart,
 /turf/open/floor/iron,
 /area/hallway/primary/central)
 "am" = (
diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
index b62bc208916..59f291fd322 100644
--- a/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
@@ -16,7 +16,6 @@
 	},
 /turf/open/floor/plating,
 /area/hallway/primary/central,
-/obj/effect/landmark/blobstart
 )
 "ae" = (
 /obj/machinery/door/poddoor{
@@ -33,6 +32,7 @@
 /turf/open/floor/plating,
 /area/hallway/primary/central)
 "ag" = (
+/obj/effect/landmark/blobstart,
 /turf/open/floor/iron,
 /area/hallway/primary/central)
 "ah" = (

From c399329664cd353e693caeeba14af0c1f02a2d8d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 13:54:59 -0400
Subject: [PATCH 115/200] fix icebox

---
 .../map_files/IceBoxStation/IcemoonUnderground_Below.dmm | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/_maps/map_files/IceBoxStation/IcemoonUnderground_Below.dmm b/_maps/map_files/IceBoxStation/IcemoonUnderground_Below.dmm
index 60de0ef835a..90d504fa044 100644
--- a/_maps/map_files/IceBoxStation/IcemoonUnderground_Below.dmm
+++ b/_maps/map_files/IceBoxStation/IcemoonUnderground_Below.dmm
@@ -142,7 +142,8 @@
 /obj/structure/window/reinforced/spawner,
 /obj/item/throwing_star/toy,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = list("oxygen" = 22, "nitrogen"=82);
+	temperature =293.15;
 	},
 /area/security/prison/rec)
 "bz" = (
@@ -2465,7 +2466,8 @@
 /obj/structure/flora/ausbushes/sparsegrass,
 /obj/machinery/light/warm/directional/north,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = list("oxygen" = 22, "nitrogen"=82);
+	temperature =293.15;
 	},
 /area/security/prison/rec)
 "zD" = (
@@ -4244,7 +4246,8 @@
 /obj/structure/flora/junglebush,
 /obj/structure/flora/ausbushes/sparsegrass,
 /turf/open/misc/ashplanet/wateryrock{
-	initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+	initial_gas = list("oxygen" = 22, "nitrogen"=82);
+	temperature =293.15;
 	},
 /area/security/prison/rec)
 "Rs" = (

From 2b627f84e2b598d2d3a1b23b89440944784c40f9 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 14:28:35 -0400
Subject: [PATCH 116/200] Linter pass attempt 1

---
 ..._underground_abandoned_plasma_facility.dmm |  1 -
 .../lavaland_surface_syndicate_base1.dmm      | 11 -------
 .../mistake_inevitable.dmm                    |  2 +-
 _maps/RandomRuins/SpaceRuins/oldstation.dmm   |  2 +-
 .../map_files/Deltastation/DeltaStation2.dmm  | 29 +------------------
 .../map_files/IceBoxStation/IceBoxStation.dmm | 21 +-------------
 .../IcemoonUnderground_Above.dmm              |  1 -
 _maps/map_files/KiloStation/KiloStation.dmm   | 22 ++------------
 _maps/map_files/MetaStation/MetaStation.dmm   | 27 +----------------
 _maps/map_files/debug/multiz.dmm              |  1 +
 _maps/map_files/tramstation/tramstation.dmm   | 25 +---------------
 _maps/shuttles/emergency_supermatter.dmm      |  4 +--
 12 files changed, 11 insertions(+), 135 deletions(-)

diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
index bf28ba25c77..cc5c691094d 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
@@ -410,7 +410,6 @@
 "fO" = (
 /obj/structure/lattice/catwalk,
 /obj/structure/railing,
-/obj/machinery/portable_atmospherics/canister/water_vapor,
 /turf/open/lava/plasma/ice_moon,
 /area/icemoon/underground/explored)
 "fP" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index 65777fe61c5..66e94e9fe85 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -634,10 +634,6 @@
 /area/ruin/syndicate_lava_base/engineering)
 "eM" = (
 /obj/machinery/light/small/directional/south,
-/obj/machinery/computer/turbine_computer{
-	dir = 1;
-	mapping_id = "syndie_lavaland_incineratorturbine"
-	},
 /obj/effect/turf_decal/stripes/line,
 /turf/open/floor/iron,
 /area/ruin/syndicate_lava_base/engineering)
@@ -3230,9 +3226,6 @@
 /turf/open/floor/iron,
 /area/ruin/syndicate_lava_base/engineering)
 "AB" = (
-/obj/machinery/power/turbine/inlet_compressor{
-	dir = 4
-	},
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/engineering)
 "AD" = (
@@ -4354,10 +4347,6 @@
 /turf/open/floor/iron,
 /area/ruin/syndicate_lava_base/engineering)
 "TV" = (
-/obj/machinery/power/turbine/core_rotor{
-	dir = 4;
-	mapping_id = "syndie_lavaland_incineratorturbine"
-	},
 /obj/structure/cable,
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/engineering)
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
index bb1769f52d8..5419ac4716a 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
@@ -243,7 +243,7 @@
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/testlab)
 "yO" = (
-/obj/machinery/power/supermatter_crystal/shard/syndicate,
+/obj/machinery/power/rtg/debug/station,
 /obj/structure/window/reinforced/plasma/spawner,
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/testlab)
diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index 2c4ec370eb6..fb261395aef 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -4771,7 +4771,7 @@
 /turf/open/floor/iron,
 /area/ruin/space/has_grav/ancientstation/charlie/hall)
 "mm" = (
-/obj/machinery/power/supermatter_crystal/shard,
+/obj/machinery/power/rtg/debug/station,
 /obj/structure/closet/crate/engineering{
 	name = "supermatter shard crate"
 	},
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 629c9878aee..d3a94a14fb8 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -2342,7 +2342,6 @@
 /area/security/courtroom)
 "aEE" = (
 /obj/effect/decal/cleanable/dirt,
-/obj/machinery/portable_atmospherics/canister/water_vapor,
 /obj/machinery/light/small/directional/south,
 /obj/effect/turf_decal/bot/right,
 /turf/open/floor/iron/checker,
@@ -4203,10 +4202,6 @@
 /area/engineering/atmos/pumproom)
 "bah" = (
 /obj/structure/table/reinforced,
-/obj/item/hfr_box/body/waste_output,
-/obj/item/hfr_box/body/moderator_input,
-/obj/item/hfr_box/body/interface,
-/obj/item/hfr_box/body/fuel_input,
 /obj/machinery/airalarm/directional/west,
 /turf/open/floor/iron/dark,
 /area/engineering/atmos/hfr_room)
@@ -16311,10 +16306,6 @@
 /turf/open/floor/iron,
 /area/engineering/atmos/storage/gas)
 "dqJ" = (
-/obj/machinery/computer/turbine_computer{
-	dir = 1;
-	mapping_id = "main_turbine"
-	},
 /obj/effect/turf_decal/tile/yellow{
 	dir = 8
 	},
@@ -27653,7 +27644,6 @@
 /turf/open/floor/iron/dark,
 /area/hallway/secondary/service)
 "fTx" = (
-/obj/machinery/power/turbine/inlet_compressor,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "fTH" = (
@@ -35266,7 +35256,6 @@
 /obj/effect/turf_decal/tile/yellow{
 	dir = 4
 	},
-/obj/machinery/bluespace_vendor/directional/east,
 /turf/open/floor/iron,
 /area/hallway/primary/port)
 "iaE" = (
@@ -43563,9 +43552,6 @@
 /turf/open/floor/iron/white,
 /area/medical/virology)
 "kxl" = (
-/obj/machinery/power/turbine/core_rotor{
-	mapping_id = "main_turbine"
-	},
 /obj/structure/cable,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
@@ -50384,7 +50370,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/central/aft)
 "msD" = (
@@ -54008,7 +53993,6 @@
 /obj/effect/turf_decal/tile/neutral{
 	dir = 8
 	},
-/obj/machinery/bluespace_vendor/directional/south,
 /turf/open/floor/iron{
 	heat_capacity = 1e+006
 	},
@@ -58071,7 +58055,6 @@
 	dir = 4
 	},
 /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron/white/corner{
 	dir = 1
 	},
@@ -59092,7 +59075,6 @@
 /obj/effect/turf_decal/tile/neutral{
 	dir = 4
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/starboard)
 "paR" = (
@@ -66974,7 +66956,6 @@
 "rrB" = (
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/north,
 /obj/effect/turf_decal/tile/neutral/half/contrasted{
 	dir = 1
 	},
@@ -70146,7 +70127,6 @@
 /obj/effect/turf_decal/tile/neutral,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/east,
 /turf/open/floor/iron,
 /area/hallway/primary/central/fore)
 "smO" = (
@@ -74585,7 +74565,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/port)
 "txm" = (
@@ -75793,7 +75772,6 @@
 /area/engineering/storage_shared)
 "tRE" = (
 /obj/effect/turf_decal/delivery,
-/obj/machinery/bluespace_vendor/directional/west,
 /turf/open/floor/iron,
 /area/hallway/secondary/exit/departure_lounge)
 "tRP" = (
@@ -77290,7 +77268,7 @@
 /turf/open/floor/iron,
 /area/medical/virology)
 "uqa" = (
-/obj/machinery/power/supermatter_crystal/engine,
+/obj/machinery/power/rtg/debug/station,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4,
 /turf/open/floor/engine,
@@ -79304,7 +79282,6 @@
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
 /obj/effect/turf_decal/tile/neutral,
-/obj/machinery/bluespace_vendor/directional/south,
 /turf/open/floor/iron,
 /area/hallway/secondary/entry)
 "uXJ" = (
@@ -85177,7 +85154,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/commons/dorms)
 "wOG" = (
@@ -87329,7 +87305,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/central/aft)
 "xwx" = (
@@ -88159,7 +88134,6 @@
 /obj/effect/turf_decal/tile/neutral{
 	dir = 8
 	},
-/obj/machinery/bluespace_vendor/directional/west,
 /turf/open/floor/iron,
 /area/hallway/primary/aft)
 "xJN" = (
@@ -88182,7 +88156,6 @@
 	dir = 1
 	},
 /obj/effect/turf_decal/tile/yellow,
-/obj/machinery/bluespace_vendor/directional/east,
 /obj/effect/turf_decal/delivery,
 /turf/open/floor/iron,
 /area/hallway/secondary/entry)
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 6e5e4d44ed1..41fa2b2e4da 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -1666,7 +1666,6 @@
 /turf/open/floor/iron/white/corner,
 /area/hallway/primary/starboard)
 "aGk" = (
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/central)
 "aGJ" = (
@@ -10228,7 +10227,6 @@
 /turf/open/floor/iron,
 /area/hallway/primary/aft)
 "dOw" = (
-/obj/machinery/bluespace_vendor/directional/south,
 /turf/open/floor/iron,
 /area/commons/locker)
 "dOB" = (
@@ -12555,7 +12553,6 @@
 /obj/effect/turf_decal/tile/neutral{
 	dir = 4
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/secondary/entry)
 "fbY" = (
@@ -17079,7 +17076,6 @@
 /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
 	dir = 4
 	},
-/obj/machinery/bluespace_vendor/directional/west,
 /obj/machinery/camera/directional/west{
 	c_tag = "Fore Primary Hallway"
 	},
@@ -17777,7 +17773,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/commons/dorms)
 "hzq" = (
@@ -22136,9 +22131,6 @@
 /turf/open/floor/plating,
 /area/security/lockers)
 "jEN" = (
-/obj/machinery/power/turbine/inlet_compressor{
-	dir = 8
-	},
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "jET" = (
@@ -23491,10 +23483,6 @@
 /turf/open/misc/asteroid/snow/icemoon,
 /area/ai_monitored/turret_protected/aisat/maint)
 "kmx" = (
-/obj/machinery/power/turbine/core_rotor{
-	dir = 8;
-	mapping_id = "main_turbine"
-	},
 /obj/structure/cable,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
@@ -32256,7 +32244,6 @@
 /turf/open/floor/iron,
 /area/hallway/secondary/exit/departure_lounge)
 "oOi" = (
-/obj/machinery/portable_atmospherics/canister/water_vapor,
 /turf/open/floor/iron,
 /area/service/janitor)
 "oOj" = (
@@ -36757,7 +36744,6 @@
 /area/maintenance/aft/greater)
 "raT" = (
 /obj/effect/turf_decal/delivery,
-/obj/machinery/bluespace_vendor/directional/north,
 /obj/effect/mapping_helpers/trapdoor_placer,
 /turf/open/floor/iron,
 /area/hallway/primary/central)
@@ -39940,7 +39926,7 @@
 /turf/open/floor/iron/showroomfloor,
 /area/security/processing)
 "szM" = (
-/obj/machinery/power/supermatter_crystal/engine,
+/obj/machinery/power/rtg/debug/station,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "szW" = (
@@ -48304,7 +48290,6 @@
 /obj/structure/chair{
 	dir = 8
 	},
-/obj/machinery/bluespace_vendor/directional/east,
 /turf/open/floor/iron,
 /area/hallway/primary/starboard)
 "wEX" = (
@@ -48659,10 +48644,6 @@
 /turf/open/floor/plating,
 /area/maintenance/port/aft)
 "wPs" = (
-/obj/machinery/computer/turbine_computer{
-	dir = 1;
-	mapping_id = "main_turbine"
-	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/dark,
diff --git a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
index cb4c8511c61..7aa1650b370 100644
--- a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
+++ b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
@@ -8348,7 +8348,6 @@
 /turf/open/floor/iron/dark,
 /area/medical/morgue)
 "xb" = (
-/obj/machinery/bluespace_vendor/directional/north,
 /obj/effect/turf_decal/tile/red/half/contrasted{
 	dir = 1
 	},
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 14d0d73c955..c3a4f550fd5 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -22599,7 +22599,6 @@
 /obj/effect/turf_decal/tile/neutral{
 	dir = 1
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron/dark/corner{
 	dir = 4
 	},
@@ -26485,7 +26484,6 @@
 	c_tag = "Port Hallway Firelock";
 	name = "port camera"
 	},
-/obj/machinery/bluespace_vendor/directional/west,
 /turf/open/floor/iron/dark/corner{
 	dir = 8
 	},
@@ -43849,7 +43847,6 @@
 	c_tag = "Fore Hallway Diner";
 	name = "fore camera"
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/central/fore)
 "kmJ" = (
@@ -46830,9 +46827,6 @@
 /turf/open/floor/iron,
 /area/maintenance/disposal/incinerator)
 "lmB" = (
-/obj/machinery/power/turbine/core_rotor{
-	mapping_id = "main_turbine"
-	},
 /obj/structure/cable,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
@@ -47185,10 +47179,6 @@
 	name = "atmospherics camera";
 	network = list("ss13","engine")
 	},
-/obj/item/hfr_box/body/fuel_input,
-/obj/item/hfr_box/body/interface,
-/obj/item/hfr_box/body/moderator_input,
-/obj/item/hfr_box/body/waste_output,
 /turf/open/floor/iron,
 /area/maintenance/disposal/incinerator)
 "lrD" = (
@@ -47897,7 +47887,7 @@
 /turf/open/floor/wood,
 /area/service/lawoffice)
 "lGe" = (
-/obj/machinery/power/supermatter_crystal/engine,
+/obj/machinery/power/rtg/debug/station,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "lGj" = (
@@ -50104,7 +50094,6 @@
 	dir = 1
 	},
 /obj/effect/decal/cleanable/dirt,
-/obj/machinery/bluespace_vendor/directional/west,
 /turf/open/floor/iron,
 /area/hallway/secondary/entry)
 "moD" = (
@@ -54821,7 +54810,6 @@
 /turf/open/floor/plating,
 /area/cargo/warehouse)
 "nUs" = (
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron/dark,
 /area/service/chapel/monastery)
 "nUt" = (
@@ -54928,7 +54916,7 @@
 /obj/effect/turf_decal/siding/wideplating/dark{
 	dir = 4
 	},
-/obj/machinery/bluespace_vendor/directional/south,
+
 /turf/open/floor/iron/dark,
 /area/service/chapel/monastery)
 "nVD" = (
@@ -76127,10 +76115,6 @@
 /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
 	dir = 9
 	},
-/obj/machinery/computer/turbine_computer{
-	dir = 1;
-	mapping_id = "main_turbine"
-	},
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "uXa" = (
@@ -77204,7 +77188,6 @@
 	dir = 8
 	},
 /obj/effect/turf_decal/tile/neutral,
-/obj/machinery/bluespace_vendor/directional/south,
 /turf/open/floor/iron,
 /area/hallway/primary/central)
 "vpc" = (
@@ -84298,7 +84281,6 @@
 /turf/open/floor/iron,
 /area/hallway/primary/starboard)
 "xFO" = (
-/obj/machinery/power/turbine/inlet_compressor,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "xFY" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 6b9dd20b479..45ab5261ff5 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -7709,7 +7709,6 @@
 "bWb" = (
 /obj/machinery/light/directional/south,
 /obj/effect/turf_decal/tile/neutral,
-/obj/machinery/bluespace_vendor/directional/south,
 /turf/open/floor/iron,
 /area/commons/locker)
 "bWz" = (
@@ -8962,7 +8961,7 @@
 /turf/open/floor/iron,
 /area/hallway/primary/port)
 "ctk" = (
-/obj/machinery/power/supermatter_crystal/engine,
+/obj/machinery/power/rtg/debug/station,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "ctm" = (
@@ -16843,7 +16842,6 @@
 	dir = 1
 	},
 /obj/structure/cable,
-/obj/machinery/bluespace_vendor/directional/west,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
 /turf/open/floor/iron,
 /area/commons/fitness/recreation)
@@ -20959,10 +20957,6 @@
 /area/service/kitchen/coldroom)
 "gql" = (
 /obj/structure/table,
-/obj/item/hfr_box/body/waste_output,
-/obj/item/hfr_box/body/moderator_input,
-/obj/item/hfr_box/body/fuel_input,
-/obj/item/hfr_box/body/interface,
 /obj/structure/extinguisher_cabinet/directional/east,
 /turf/open/floor/iron/dark,
 /area/engineering/atmospherics_engine)
@@ -28618,7 +28612,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/port)
 "jpP" = (
@@ -29676,7 +29669,6 @@
 /obj/effect/turf_decal/stripes/line{
 	dir = 8
 	},
-/obj/machinery/bluespace_vendor/directional/west,
 /turf/open/floor/iron,
 /area/hallway/secondary/exit/departure_lounge)
 "jIS" = (
@@ -29967,7 +29959,6 @@
 	dir = 1
 	},
 /obj/structure/cable,
-/obj/machinery/bluespace_vendor/directional/west,
 /turf/open/floor/iron,
 /area/commons/dorms)
 "jOn" = (
@@ -31159,7 +31150,6 @@
 /obj/effect/turf_decal/tile/neutral{
 	dir = 4
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/central)
 "kmR" = (
@@ -40096,7 +40086,6 @@
 	},
 /obj/item/pen,
 /obj/effect/turf_decal/delivery,
-/obj/machinery/bluespace_vendor/directional/east,
 /turf/open/floor/iron,
 /area/hallway/secondary/command)
 "nnO" = (
@@ -58421,10 +58410,6 @@
 /turf/open/floor/iron,
 /area/ai_monitored/command/storage/eva)
 "uuy" = (
-/obj/machinery/power/turbine/core_rotor{
-	dir = 4;
-	mapping_id = "main_turbine"
-	},
 /obj/structure/cable,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
@@ -60485,7 +60470,6 @@
 	dir = 1
 	},
 /obj/structure/cable,
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/port)
 "vlR" = (
@@ -62415,9 +62399,6 @@
 /turf/open/floor/iron,
 /area/security/prison)
 "vVR" = (
-/obj/machinery/power/turbine/inlet_compressor{
-	dir = 4
-	},
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "vWe" = (
@@ -62621,7 +62602,6 @@
 	dir = 8
 	},
 /obj/effect/landmark/start/hangover,
-/obj/machinery/bluespace_vendor/directional/west,
 /turf/open/floor/iron,
 /area/hallway/primary/central)
 "waq" = (
@@ -62740,9 +62720,6 @@
 "wdO" = (
 /obj/effect/decal/cleanable/dirt,
 /obj/structure/cable,
-/obj/machinery/computer/turbine_computer{
-	mapping_id = "main_turbine"
-	},
 /turf/open/floor/iron,
 /area/maintenance/disposal/incinerator)
 "wdQ" = (
@@ -64238,7 +64215,6 @@
 /obj/effect/turf_decal/tile/red,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/south,
 /turf/open/floor/iron,
 /area/hallway/primary/fore)
 "wGZ" = (
@@ -65299,7 +65275,6 @@
 /area/command/heads_quarters/cmo)
 "xaY" = (
 /obj/effect/decal/cleanable/dirt,
-/obj/machinery/portable_atmospherics/canister/water_vapor,
 /turf/open/floor/iron,
 /area/service/janitor)
 "xbs" = (
diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm
index 1ae9b65d0b2..b7435ceb1ce 100644
--- a/_maps/map_files/debug/multiz.dmm
+++ b/_maps/map_files/debug/multiz.dmm
@@ -647,6 +647,7 @@
 /turf/open/floor/iron,
 /area/commons/storage/primary)
 "cW" = (
+/obj/effect/landmark/blobstart,
 /obj/effect/turf_decal/stripes/corner,
 /obj/structure/cable,
 /turf/open/floor/iron,
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index 90917df648c..008764b10b6 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -3500,7 +3500,6 @@
 /obj/structure/cable,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/north,
 /obj/structure/disposalpipe/segment{
 	dir = 10
 	},
@@ -18345,9 +18344,6 @@
 /turf/open/floor/iron/dark,
 /area/command/bridge)
 "fkD" = (
-/obj/machinery/power/turbine/inlet_compressor{
-	dir = 4
-	},
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "fkQ" = (
@@ -20640,9 +20636,6 @@
 /area/maintenance/central/greater)
 "fZl" = (
 /obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/turbine_computer{
-	mapping_id = "main_turbine"
-	},
 /obj/structure/cable/layer1,
 /turf/open/floor/iron,
 /area/maintenance/disposal/incinerator)
@@ -24824,7 +24817,6 @@
 /obj/effect/turf_decal/trimline/brown/filled/line,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/south,
 /obj/structure/disposalpipe/segment{
 	dir = 5
 	},
@@ -28929,7 +28921,6 @@
 /area/medical/medbay/central)
 "iZW" = (
 /obj/effect/turf_decal/bot,
-/obj/machinery/portable_atmospherics/canister/water_vapor,
 /obj/machinery/airalarm/directional/north,
 /obj/effect/turf_decal/trimline/neutral/filled/line{
 	dir = 1
@@ -31653,7 +31644,6 @@
 /obj/effect/turf_decal/trimline/neutral/filled/corner{
 	dir = 1
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/tram/left)
 "jWc" = (
@@ -37104,7 +37094,6 @@
 /obj/effect/turf_decal/trimline/neutral/filled/line{
 	dir = 1
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/secondary/exit)
 "lON" = (
@@ -42581,7 +42570,7 @@
 /turf/open/floor/iron/white,
 /area/science/explab)
 "nSy" = (
-/obj/machinery/power/supermatter_crystal/engine,
+/obj/machinery/power/rtg/debug/station,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "nSQ" = (
@@ -54687,10 +54676,6 @@
 /obj/effect/turf_decal/bot,
 /obj/item/stack/sheet/plasteel/fifty,
 /obj/effect/decal/cleanable/dirt,
-/obj/item/hfr_box/body/fuel_input,
-/obj/item/hfr_box/body/interface,
-/obj/item/hfr_box/body/moderator_input,
-/obj/item/hfr_box/body/waste_output,
 /turf/open/floor/iron,
 /area/engineering/atmospherics_engine)
 "sop" = (
@@ -55922,7 +55907,6 @@
 /obj/structure/chair{
 	dir = 4
 	},
-/obj/machinery/bluespace_vendor/directional/south,
 /obj/effect/turf_decal/tile/neutral/fourcorners,
 /turf/open/floor/iron/dark,
 /area/hallway/secondary/exit/departure_lounge)
@@ -58945,7 +58929,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/east,
 /obj/structure/cable,
 /turf/open/floor/iron,
 /area/hallway/secondary/entry)
@@ -59169,10 +59152,6 @@
 /turf/open/floor/iron,
 /area/maintenance/tram/left)
 "tTD" = (
-/obj/machinery/power/turbine/core_rotor{
-	dir = 4;
-	mapping_id = "main_turbine"
-	},
 /obj/structure/cable/layer1,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
@@ -64014,7 +63993,6 @@
 /obj/effect/turf_decal/siding/thinplating/corner{
 	dir = 1
 	},
-/obj/machinery/bluespace_vendor/directional/north,
 /turf/open/floor/iron,
 /area/hallway/primary/tram/center)
 "vLu" = (
@@ -64362,7 +64340,6 @@
 	},
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/bluespace_vendor/directional/east,
 /obj/structure/cable,
 /obj/structure/disposalpipe/junction/flip{
 	dir = 1
diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm
index a6b6e490f8b..c56aadb7554 100644
--- a/_maps/shuttles/emergency_supermatter.dmm
+++ b/_maps/shuttles/emergency_supermatter.dmm
@@ -104,7 +104,7 @@
 /turf/open/floor/plating,
 /area/shuttle/escape)
 "aB" = (
-/obj/machinery/power/supermatter_crystal/shard/hugbox/fakecrystal,
+/obj/machinery/power/rtg/debug/station,
 /turf/open/floor/plating,
 /area/shuttle/escape)
 "aD" = (
@@ -193,7 +193,7 @@
 /turf/open/floor/plating/airless,
 /area/shuttle/escape)
 "aV" = (
-/obj/machinery/power/supermatter_crystal/shard/hugbox,
+/obj/machinery/power/rtg/debug/station,
 /turf/open/floor/plating/airless,
 /area/shuttle/escape)
 "aW" = (

From fb85661c227dbc7b5b9e069a4baa7e727a7c28e2 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 14:34:39 -0400
Subject: [PATCH 117/200] more unused stuff cleanup

---
 _maps/map_files/Deltastation/DeltaStation2.dmm  | 10 ----------
 _maps/map_files/IceBoxStation/IceBoxStation.dmm |  1 -
 _maps/map_files/KiloStation/KiloStation.dmm     |  6 ------
 _maps/map_files/MetaStation/MetaStation.dmm     |  6 ------
 _maps/map_files/tramstation/tramstation.dmm     |  6 ------
 5 files changed, 29 deletions(-)

diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index d3a94a14fb8..a7d1ae5576c 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -54697,7 +54697,6 @@
 "nNk" = (
 /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
 /obj/effect/turf_decal/bot,
-/obj/machinery/electrolyzer,
 /obj/effect/decal/cleanable/dirt,
 /turf/open/floor/iron/textured_large,
 /area/engineering/atmos/project)
@@ -67256,14 +67255,6 @@
 /area/engineering/atmos)
 "rvE" = (
 /obj/structure/table/reinforced,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/core{
-	pixel_x = 3;
-	pixel_y = 3
-	},
 /obj/machinery/camera/directional/west{
 	c_tag = "Atmospherics - HFR";
 	name = "atmospherics camera"
@@ -70772,7 +70763,6 @@
 /area/engineering/atmos/hfr_room)
 "swc" = (
 /obj/effect/turf_decal/bot,
-/obj/machinery/electrolyzer,
 /obj/item/radio/intercom/directional/west,
 /turf/open/floor/iron/textured_large,
 /area/engineering/atmos/project)
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 41fa2b2e4da..225a48a5830 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -4540,7 +4540,6 @@
 /area/maintenance/disposal/incinerator)
 "bEy" = (
 /obj/effect/decal/cleanable/dirt,
-/obj/machinery/electrolyzer,
 /turf/open/floor/iron,
 /area/maintenance/disposal/incinerator)
 "bEC" = (
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index c3a4f550fd5..b6afa7ea603 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -61249,7 +61249,6 @@
 /area/ai_monitored/turret_protected/aisat/atmos)
 "pZk" = (
 /obj/effect/decal/cleanable/dirt,
-/obj/machinery/electrolyzer,
 /turf/open/floor/iron/dark,
 /area/maintenance/disposal/incinerator)
 "pZn" = (
@@ -65562,11 +65561,6 @@
 	dir = 4
 	},
 /obj/structure/table,
-/obj/item/hfr_box/core,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
 /turf/open/floor/iron,
 /area/maintenance/disposal/incinerator)
 "rou" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 45ab5261ff5..921b87eed7e 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -57087,7 +57087,6 @@
 /area/engineering/gravity_generator)
 "tSb" = (
 /obj/effect/decal/cleanable/dirt,
-/obj/machinery/electrolyzer,
 /obj/machinery/power/apc/auto_name/directional/north,
 /obj/structure/cable,
 /turf/open/floor/iron,
@@ -61462,11 +61461,6 @@
 /area/hallway/primary/starboard)
 "vEF" = (
 /obj/structure/table,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/core,
 /turf/open/floor/iron/dark,
 /area/engineering/atmospherics_engine)
 "vEJ" = (
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index 008764b10b6..f7e62ec6ecc 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -19149,11 +19149,6 @@
 /obj/effect/turf_decal/trimline/yellow/filled/line{
 	dir = 6
 	},
-/obj/item/hfr_box/core,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
-/obj/item/hfr_box/corner,
 /turf/open/floor/iron/dark,
 /area/engineering/atmospherics_engine)
 "fze" = (
@@ -34937,7 +34932,6 @@
 	dir = 8
 	},
 /obj/machinery/firealarm/directional/west,
-/obj/machinery/electrolyzer,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
 /obj/structure/cable,
 /turf/open/floor/iron,

From 03191c2fef7b38a52fc39c0bf6e5defdf40dfd8a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 14:39:14 -0400
Subject: [PATCH 118/200] gas id update

---
 .../lavaland_surface_syndicate_base1/mistake_inevitable.dmm     | 2 +-
 _maps/map_files/Deltastation/DeltaStation2.dmm                  | 2 +-
 _maps/map_files/IceBoxStation/IceBoxStation.dmm                 | 2 +-
 _maps/map_files/KiloStation/KiloStation.dmm                     | 2 +-
 _maps/map_files/MetaStation/MetaStation.dmm                     | 2 +-
 _maps/map_files/tramstation/tramstation.dmm                     | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
index 5419ac4716a..a2dfdbd7520 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
@@ -305,7 +305,7 @@
 "JO" = (
 /obj/machinery/atmospherics/components/trinary/filter/on{
 	dir = 1;
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list("nitrogen")
 	},
 /obj/structure/window/reinforced/plasma/spawner,
 /turf/open/floor/engine,
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index a7d1ae5576c..90d4ca0bf39 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -68175,7 +68175,7 @@
 "rJL" = (
 /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
 	dir = 8;
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list("nitrogen")
 	},
 /obj/effect/turf_decal/bot,
 /obj/effect/turf_decal/tile/yellow{
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 225a48a5830..e84c75295b0 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -21465,7 +21465,7 @@
 /obj/structure/cable,
 /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
 	dir = 8;
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list("nitrogen")
 	},
 /turf/open/floor/engine,
 /area/engineering/supermatter/room)
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index b6afa7ea603..116e91b9f85 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -56068,7 +56068,7 @@
 "oqQ" = (
 /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
 	dir = 8;
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list("nitrogen")
 	},
 /obj/effect/turf_decal/stripes/line,
 /obj/structure/cable,
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 921b87eed7e..652b9a1917e 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -23842,7 +23842,7 @@
 	dir = 4
 	},
 /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list("nitrogen")
 	},
 /turf/open/floor/engine,
 /area/engineering/supermatter/room)
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index f7e62ec6ecc..419c8ab6071 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -59270,7 +59270,7 @@
 "tVn" = (
 /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
 	dir = 8;
-	filter_type = list(/datum/gas/nitrogen)
+	filter_type = list("nitrogen")
 	},
 /turf/open/floor/engine,
 /area/engineering/supermatter/room)

From 256f3d63027cbf051ac2faf957b21c98b0918c1d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 14:44:03 -0400
Subject: [PATCH 119/200] more unused stuff

---
 .../LavaRuins/lavaland_surface_syndicate_base1.dmm        | 3 ---
 _maps/map_files/Deltastation/DeltaStation2.dmm            | 3 ---
 _maps/map_files/IceBoxStation/IceBoxStation.dmm           | 4 ----
 .../map_files/IceBoxStation/IcemoonUnderground_Above.dmm  | 3 ---
 _maps/map_files/KiloStation/KiloStation.dmm               | 3 ---
 _maps/map_files/MetaStation/MetaStation.dmm               | 8 --------
 _maps/map_files/tramstation/tramstation.dmm               | 5 -----
 _maps/shuttles/pirate_silverscale.dmm                     | 1 -
 8 files changed, 30 deletions(-)

diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index 66e94e9fe85..488356a36a5 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -4041,9 +4041,6 @@
 /turf/open/floor/iron,
 /area/ruin/syndicate_lava_base/engineering)
 "OI" = (
-/obj/machinery/power/turbine/turbine_outlet{
-	dir = 4
-	},
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/engineering)
 "OQ" = (
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 90d4ca0bf39..964842551b4 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -68417,7 +68417,6 @@
 /turf/open/floor/iron/white,
 /area/medical/medbay/central)
 "rMk" = (
-/obj/machinery/portable_atmospherics/canister/bz,
 /obj/machinery/light/directional/south,
 /obj/effect/turf_decal/bot,
 /obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -76438,7 +76437,6 @@
 /turf/open/floor/iron,
 /area/hallway/primary/starboard)
 "ueV" = (
-/obj/machinery/atmospherics/components/unary/bluespace_sender,
 /obj/effect/turf_decal/stripes/line{
 	dir = 10
 	},
@@ -87403,7 +87401,6 @@
 /turf/open/floor/iron,
 /area/engineering/main)
 "xyC" = (
-/obj/machinery/power/turbine/turbine_outlet,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "xyE" = (
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index e84c75295b0..00726188a84 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -12188,7 +12188,6 @@
 /turf/open/floor/iron,
 /area/hallway/secondary/exit/departure_lounge)
 "eRO" = (
-/obj/machinery/atmospherics/components/unary/bluespace_sender,
 /obj/effect/turf_decal/stripes/line{
 	dir = 9
 	},
@@ -47835,9 +47834,6 @@
 /turf/open/floor/iron/white,
 /area/medical/medbay/lobby)
 "wtn" = (
-/obj/machinery/power/turbine/turbine_outlet{
-	dir = 8
-	},
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "wtr" = (
diff --git a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
index 7aa1650b370..639151a26e7 100644
--- a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
+++ b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm
@@ -3831,7 +3831,6 @@
 /area/security/detectives_office)
 "kp" = (
 /obj/structure/bonfire,
-/obj/item/melee/roastingstick,
 /turf/open/floor/plating/snowed/smoothed/icemoon,
 /area/icemoon/underground/explored)
 "kq" = (
@@ -7101,7 +7100,6 @@
 /turf/open/floor/iron,
 /area/service/bar)
 "tu" = (
-/obj/machinery/portable_atmospherics/canister/bz,
 /turf/open/floor/plating,
 /area/security/prison/safe)
 "tv" = (
@@ -8018,7 +8016,6 @@
 /turf/open/floor/plating/snowed/smoothed/icemoon,
 /area/icemoon/underground/explored)
 "wg" = (
-/obj/machinery/portable_atmospherics/canister/bz,
 /obj/machinery/atmospherics/components/unary/portables_connector/visible,
 /obj/effect/turf_decal/stripes/line{
 	dir = 10
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 116e91b9f85..7beeee11f00 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -61649,7 +61649,6 @@
 /turf/open/floor/iron/dark,
 /area/service/hydroponics)
 "qga" = (
-/obj/machinery/power/turbine/turbine_outlet,
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "qge" = (
@@ -73063,7 +73062,6 @@
 /obj/machinery/atmospherics/components/unary/portables_connector/visible{
 	dir = 4
 	},
-/obj/machinery/portable_atmospherics/canister/bz,
 /obj/effect/turf_decal/tile/neutral,
 /obj/effect/turf_decal/tile/neutral{
 	dir = 4
@@ -76033,7 +76031,6 @@
 /area/service/chapel/dock)
 "uVC" = (
 /obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/components/unary/bluespace_sender,
 /turf/open/floor/iron/dark,
 /area/engineering/atmos)
 "uVP" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 652b9a1917e..d8836c0b1dc 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -23400,9 +23400,6 @@
 /turf/open/floor/iron/dark,
 /area/engineering/main)
 "hoj" = (
-/obj/machinery/atmospherics/components/binary/crystallizer{
-	dir = 4
-	},
 /obj/effect/turf_decal/trimline/yellow/filled/line{
 	dir = 1
 	},
@@ -25442,7 +25439,6 @@
 /obj/effect/turf_decal/stripes/line{
 	dir = 6
 	},
-/obj/machinery/atmospherics/components/unary/bluespace_sender,
 /turf/open/floor/iron,
 /area/engineering/atmos)
 "ies" = (
@@ -26944,9 +26940,6 @@
 /turf/open/floor/iron/dark,
 /area/ai_monitored/aisat/exterior)
 "iKn" = (
-/obj/machinery/power/turbine/turbine_outlet{
-	dir = 4
-	},
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "iKr" = (
@@ -44116,7 +44109,6 @@
 /area/science/storage)
 "oRj" = (
 /obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/portable_atmospherics/canister/bz,
 /obj/machinery/light/directional/north,
 /obj/effect/turf_decal/box,
 /turf/open/floor/iron,
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index 419c8ab6071..37c7068b95f 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -35659,7 +35659,6 @@
 /obj/effect/turf_decal/trimline/yellow/filled/line{
 	dir = 4
 	},
-/obj/machinery/atmospherics/components/unary/bluespace_sender,
 /turf/open/floor/iron,
 /area/engineering/atmos)
 "lpr" = (
@@ -47761,7 +47760,6 @@
 /obj/machinery/atmospherics/components/unary/portables_connector/visible{
 	dir = 4
 	},
-/obj/machinery/portable_atmospherics/canister/bz,
 /turf/open/floor/iron/dark,
 /area/science/xenobiology)
 "pKr" = (
@@ -51120,9 +51118,6 @@
 /turf/open/floor/iron,
 /area/security/checkpoint)
 "qYn" = (
-/obj/machinery/power/turbine/turbine_outlet{
-	dir = 4
-	},
 /turf/open/floor/engine,
 /area/maintenance/disposal/incinerator)
 "qYy" = (
diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm
index 03e1630574f..0eb09f930bc 100644
--- a/_maps/shuttles/pirate_silverscale.dmm
+++ b/_maps/shuttles/pirate_silverscale.dmm
@@ -920,7 +920,6 @@
 	amount = 10
 	},
 /obj/item/lighter,
-/obj/item/melee/roastingstick,
 /turf/open/floor/iron/dark/textured,
 /area/shuttle/pirate)
 "UJ" = (

From b22f09f8f6c2f62df417d564fb731baac68afe20 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 14:52:35 -0400
Subject: [PATCH 120/200] mooooore shiit

---
 _maps/RandomRuins/SpaceRuins/hellfactory.dmm | 3 ---
 _maps/RandomZLevels/snowdin.dmm              | 6 +++---
 2 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm
index 15df219c4db..859f70d5789 100644
--- a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm
+++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm
@@ -910,9 +910,6 @@
 /turf/open/floor/iron,
 /area/ruin/space/has_grav/hellfactory)
 "hk" = (
-/obj/machinery/atmospherics/components/tank/water_vapor{
-	dir = 8
-	},
 /turf/open/floor/iron/grimy,
 /area/ruin/space/has_grav/hellfactoryoffice)
 "hv" = (
diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm
index 123f4959e96..5504640208d 100644
--- a/_maps/RandomZLevels/snowdin.dmm
+++ b/_maps/RandomZLevels/snowdin.dmm
@@ -9405,7 +9405,7 @@
 	},
 /turf/open/floor/mineral/plastitanium{
 	initial_gas = "o2=22;n2=82;TEMP=180";
-	planetary_atmos = 1;
+	simulated = 0;
 	temperature = 180
 	},
 /area/awaymission/snowdin/cave)
@@ -9417,7 +9417,7 @@
 /obj/machinery/suit_storage_unit/syndicate,
 /turf/open/floor/mineral/plastitanium{
 	initial_gas = "o2=22;n2=82;TEMP=180";
-	planetary_atmos = 1;
+	simulateds = 0;
 	temperature = 180
 	},
 /area/awaymission/snowdin/cave)
@@ -9431,7 +9431,7 @@
 	},
 /turf/open/floor/mineral/plastitanium{
 	initial_gas = "o2=22;n2=82;TEMP=180";
-	planetary_atmos = 1;
+	simulateds = 0;
 	temperature = 180
 	},
 /area/awaymission/snowdin/cave)

From b5296151e6b1a557040721e3435725c7531314f2 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 14:56:22 -0400
Subject: [PATCH 121/200] are you fucking kidding me

---
 _maps/RandomZLevels/snowdin.dmm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm
index 5504640208d..74a9178f641 100644
--- a/_maps/RandomZLevels/snowdin.dmm
+++ b/_maps/RandomZLevels/snowdin.dmm
@@ -9417,7 +9417,7 @@
 /obj/machinery/suit_storage_unit/syndicate,
 /turf/open/floor/mineral/plastitanium{
 	initial_gas = "o2=22;n2=82;TEMP=180";
-	simulateds = 0;
+	simulated = 0;
 	temperature = 180
 	},
 /area/awaymission/snowdin/cave)
@@ -9431,7 +9431,7 @@
 	},
 /turf/open/floor/mineral/plastitanium{
 	initial_gas = "o2=22;n2=82;TEMP=180";
-	simulateds = 0;
+	simulated = 0;
 	temperature = 180
 	},
 /area/awaymission/snowdin/cave)

From f6db6bcdb2245347f54a766211fa91efcdbd0039 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 15:28:30 -0400
Subject: [PATCH 122/200] please dont make me force push a reset

---
 code/modules/atmospherics/rust/reactor_em_field.dm | 4 ++++
 code/modules/unit_tests/breath.dm                  | 8 +++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
index 742e14a0fc7..c2daf103703 100644
--- a/code/modules/atmospherics/rust/reactor_em_field.dm
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -109,6 +109,10 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 				GLOB.fusion_reactions[cur_reaction.s_react] = list()
 			GLOB.fusion_reactions[cur_reaction.s_react][cur_reaction.p_react] = cur_reaction
 
+/obj/effect/reactor_em_field/Destroy()
+	QDEL_LIST(particle_catchers)
+	return ..()
+
 /obj/effect/reactor_em_field/proc/update_light_colors()
 	var/use_range
 	var/use_power
diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index 81ebfae7313..bd3e16becab 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -25,12 +25,11 @@
 	var/turf/open/to_fill = run_loc_floor_bottom_left
 	//Prep the floor
 	to_fill.initial_gas = OPENTURF_DEFAULT_ATMOS
-	to_fill.air = new
-	to_fill.air.copyFrom(to_fill.return_air())
+	to_fill.make_air()
 
 	lab_rat.breathe()
 
-	TEST_ASSERT(!lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN), "Humans can't get a full breath from the standard initial_gas on a turf")
+	TEST_ASSERT(!lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN), "Humans can't get a full breath from the standard initial_gas on a turf. Turf: [to_fill.type] | Air: [json_encode(to_fill.air.gas)] | Returned Air: [json_encode(to_fill.return_air().gas)]")
 
 /// Tests to make sure plasmaman can breath from their internal tanks
 /datum/unit_test/breath_sanity_plasmamen
@@ -65,8 +64,7 @@
 	var/turf/open/to_fill = run_loc_floor_bottom_left
 	//Prep the floor
 	to_fill.initial_gas = LAVALAND_DEFAULT_ATMOS
-	to_fill.air = new
-	to_fill.air.copyFrom(to_fill.return_air())
+	to_fill.make_air()
 
 	lab_rat.breathe()
 

From a9206890deba9d80866ef829ed66eb0d2f22ea29 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 15:55:16 -0400
Subject: [PATCH 123/200] hard del fix + transfer moles debugging

---
 code/modules/atmospherics/ZAS/atmos_primitives.dm  | 6 ++++++
 code/modules/atmospherics/rust/particle_catcher.dm | 2 +-
 code/modules/atmospherics/rust/reactor_em_field.dm | 4 ----
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index db72e47c9f7..87ce211dc09 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -426,6 +426,12 @@
 		var/transfer_heat_capacity = source.getHeatCapacity()*estimate_moles/source_total_moles
 		air_temperature = (sink.temperature*sink_heat_capacity  + source.temperature*transfer_heat_capacity) / (sink_heat_capacity + transfer_heat_capacity)
 
+	#ifdef UNIT_TESTS
+	if(air_temperature == 0)
+		CRASH("Air temperature is 0. Source: ([json_encode(source.gas)], [source.temperature] | Sink: ([json_encode(sink.gasJ)], [sink.temperature])")
+	if((output_volume/(air_temperature*R_IDEAL_GAS_EQUATION)) == 0)
+		CRASH("Transfer moles is about to divide by 0. Source Total Moles: [source_total_moles] | Output Volume: [output_volume]")
+	#endif
 	//get the number of moles that would have to be transfered to bring sink to the target pressure
 	return pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION)
 
diff --git a/code/modules/atmospherics/rust/particle_catcher.dm b/code/modules/atmospherics/rust/particle_catcher.dm
index a029ecd1779..d0e214d83e6 100644
--- a/code/modules/atmospherics/rust/particle_catcher.dm
+++ b/code/modules/atmospherics/rust/particle_catcher.dm
@@ -9,9 +9,9 @@
 	var/mysize = 0
 
 /obj/effect/fusion_particle_catcher/Destroy()
-	. =..()
 	parent?.particle_catchers -= src //This should never actually exist outside of the R-UST, but, unit tests.
 	parent = null
+	return ..()
 
 /obj/effect/fusion_particle_catcher/proc/set_size(newsize)
 	name = "collector [newsize]"
diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
index c2daf103703..742e14a0fc7 100644
--- a/code/modules/atmospherics/rust/reactor_em_field.dm
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -109,10 +109,6 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 				GLOB.fusion_reactions[cur_reaction.s_react] = list()
 			GLOB.fusion_reactions[cur_reaction.s_react][cur_reaction.p_react] = cur_reaction
 
-/obj/effect/reactor_em_field/Destroy()
-	QDEL_LIST(particle_catchers)
-	return ..()
-
 /obj/effect/reactor_em_field/proc/update_light_colors()
 	var/use_range
 	var/use_power

From 8c78bcde1576fbe69a5ca37ed9eaadef1117467c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 16:01:32 -0400
Subject: [PATCH 124/200] typo

---
 code/modules/atmospherics/ZAS/atmos_primitives.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 87ce211dc09..b370be78301 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -428,7 +428,7 @@
 
 	#ifdef UNIT_TESTS
 	if(air_temperature == 0)
-		CRASH("Air temperature is 0. Source: ([json_encode(source.gas)], [source.temperature] | Sink: ([json_encode(sink.gasJ)], [sink.temperature])")
+		CRASH("Air temperature is 0. Source: ([json_encode(source.gas)], [source.temperature] | Sink: ([json_encode(sink.gas)], [sink.temperature])")
 	if((output_volume/(air_temperature*R_IDEAL_GAS_EQUATION)) == 0)
 		CRASH("Transfer moles is about to divide by 0. Source Total Moles: [source_total_moles] | Output Volume: [output_volume]")
 	#endif

From 6724e21d731a4fd0aeb4af9ed2bf89f7430c7382 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 16:39:59 -0400
Subject: [PATCH 125/200] try to fix reactor hard del

---
 code/modules/atmospherics/rust/reactor_em_field.dm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/code/modules/atmospherics/rust/reactor_em_field.dm b/code/modules/atmospherics/rust/reactor_em_field.dm
index 742e14a0fc7..da4c479508a 100644
--- a/code/modules/atmospherics/rust/reactor_em_field.dm
+++ b/code/modules/atmospherics/rust/reactor_em_field.dm
@@ -63,6 +63,7 @@ Deuterium-tritium fusion: 4.5 x 10^7 K
 	owned_core = new_owned_core
 	if(!owned_core)
 		qdel(src)
+		return
 
 	//create the gimmicky things to handle field collisions
 	var/obj/effect/fusion_particle_catcher/catcher

From 1eaa40704a5dd884215cfc65e7b366d421628352 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 22:14:34 -0400
Subject: [PATCH 126/200] Fix some bugs. fuel_objs no longer leave refs

---
 code/datums/components/combustible_flooder.dm         |  2 +-
 code/datums/components/thermite.dm                    |  2 +-
 code/game/objects/effects/decals/cleanable.dm         |  2 +-
 code/game/objects/effects/decals/decal.dm             |  2 +-
 code/game/objects/structures/window.dm                |  4 ++--
 code/modules/atmospherics/ZAS/Fire.dm                 | 11 +++++++----
 code/modules/atmospherics/ZAS/Zone.dm                 |  8 +++++++-
 .../machinery/components/binary_devices/pump.dm       |  2 +-
 .../food_and_drinks/kitchen_machinery/griddle.dm      |  2 +-
 code/modules/reagents/reagent_containers.dm           |  6 +++---
 10 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/code/datums/components/combustible_flooder.dm b/code/datums/components/combustible_flooder.dm
index cae32ef8f64..361ceeb8778 100644
--- a/code/datums/components/combustible_flooder.dm
+++ b/code/datums/components/combustible_flooder.dm
@@ -56,7 +56,7 @@
 	qdel(src)
 
 /// fire_act reaction.
-/datum/component/combustible_flooder/proc/flame_react(datum/source, exposed_temperature, exposed_volume)
+/datum/component/combustible_flooder/proc/flame_react(datum/source, exposed_contents, exposed_temperature, exposed_volume)
 	SIGNAL_HANDLER
 
 	if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm
index 536f6d36e51..63a29ba3ebd 100644
--- a/code/datums/components/thermite.dm
+++ b/code/datums/components/thermite.dm
@@ -130,7 +130,7 @@
  * * exposed_temperature - The temperature of the flame hitting the thermite
  * * exposed_volume - The volume of the flame
  */
-/datum/component/thermite/proc/flame_react(datum/source, exposed_temperature, exposed_volume)
+/datum/component/thermite/proc/flame_react(datum/source, exposed_contents, exposed_temperature, exposed_volume)
 	SIGNAL_HANDLER
 
 	if(exposed_temperature > 1922) // This is roughly the real life requirement to ignite thermite
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index 247e5b0ab18..e4dacb783d2 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -83,7 +83,7 @@
 	else
 		return ..()
 
-/obj/effect/decal/cleanable/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/decal/cleanable/fire_act(exposed_temperature, exposed_volume)
 	if(reagents)
 		reagents.expose_temperature(exposed_temperature)
 	..()
diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm
index 6bfd03aec75..309fc091388 100644
--- a/code/game/objects/effects/decals/decal.dm
+++ b/code/game/objects/effects/decals/decal.dm
@@ -20,7 +20,7 @@
 /obj/effect/decal/ex_act(severity, target)
 	qdel(src)
 
-/obj/effect/decal/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/decal/fire_act(exposed_temperature, exposed_volume)
 	if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava
 		qdel(src)
 
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index a44021cf73d..46d71b5d308 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -394,9 +394,9 @@
 	crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1))
 	. += crack_overlay
 
-/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/structure/window/fire_act(exposed_temperature, exposed_volume)
 	if (exposed_temperature > melting_point)
-		take_damage(round(air.get_volume() / 100), BURN, 0, 0) //The max of 9 is to ensure it takes 4 ticks to destroy, which is incredibly dramatic
+		take_damage(round(exposed_volume / 100), BURN, 0, 0) //The max of 9 is to ensure it takes 4 ticks to destroy, which is incredibly dramatic
 
 /obj/structure/window/get_dumping_location()
 	return null
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 029d1c979a1..9b9ec0a2452 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -60,6 +60,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			if(istype(T.fire))
 				qdel(T.fire)
 		fire_tiles.Cut()
+		//Gotta make sure we don't leave any left over signals
+		for(var/fuel in fuel_objs)
+			UnregisterSignal(fuel, COMSIG_PARENT_QDELETING)
 		fuel_objs.Cut()
 
 	if(!fire_tiles.len)
@@ -84,8 +87,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		if(fuel.reagent_amount <= 0)
 			fuel_objs -= fuel
 			if(remove_fire)
-				var/turf/T = fuel.loc
-				if(istype(T) && T.fire) qdel(T.fire)
+				if(T.fire)
+					qdel(T.fire)
 			qdel(fuel)
 
 /turf/proc/create_fire(fl)
@@ -165,9 +168,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 	for(var/mob/living/L in loc)
 		L.FireBurn(firelevel, air_contents.temperature, air_contents.returnPressure())  //Burn the mobs!
 
-	loc.fire_act(air_contents, air_contents.temperature, air_contents.volume)
+	loc.fire_act(air_contents.temperature, air_contents.volume)
 	for(var/atom/A in loc)
-		A.fire_act(air_contents, air_contents.temperature, air_contents.volume)
+		A.fire_act(air_contents.temperature, air_contents.volume)
 
 	//spread
 	for(var/direction in GLOB.cardinals)
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 79a1753efd1..f1270bc8d4b 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -84,7 +84,9 @@ Class Procs:
 		var/obj/effect/decal/cleanable/oil/fuel = locate() in T
 		fire_tiles.Add(T)
 		SSzas.active_fire_zones |= src
-		if(fuel) fuel_objs += fuel
+		if(fuel)
+			fuel_objs += fuel
+			RegisterSignal(fuel, COMSIG_PARENT_QDELETING, .proc/handle_fuel_del)
 	T.update_graphic(air.graphic)
 
 ///Removes the given turf from the zone. Will invalidate the zone if it was the last turf.
@@ -243,3 +245,7 @@ Class Procs:
 
 	//for(var/turf/T in unsimulated_contents)
 //		to_chat(M, "[T] at ([T.x],[T.y])")
+
+///If fuel disappears from anything that isn't a fire burning it out, we gotta clear it's ref
+/zone/proc/handle_fuel_del(datum/source)
+	fuel_objs -= src
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 1f65b89e936..6ef2f5db36f 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -65,7 +65,7 @@
 	var/datum/gas_mixture/air1 = airs[1]
 	var/datum/gas_mixture/air2 = airs[2]
 	//var/transfer_moles = (target_pressure/air1.volume)*air1.total_moles
-	var/transfer_moles = calculate_transfer_moles(air1, air2, target_pressure - air2.returnPressure(), air2 ? air2.volume : 0)
+	var/transfer_moles = calculate_transfer_moles(air1, air2, target_pressure - air2.returnPressure())
 	if(pump_gas(air1, air2, transfer_moles))
 		update_parents()
 
diff --git a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm
index 40421e50a35..d0cc81a683c 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm
@@ -137,7 +137,7 @@
 		var/obj/item/griddled_item = i
 		if(SEND_SIGNAL(griddled_item, COMSIG_ITEM_GRILLED, src, delta_time) & COMPONENT_HANDLED_GRILLING)
 			continue
-		griddled_item.fire_act(1000) //Hot hot hot!
+		griddled_item.fire_act(null, 1000) //Hot hot hot!
 		if(prob(10))
 			visible_message(span_danger("[griddled_item] doesn't seem to be doing too great on the [src]!"))
 
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 23666e3dd7b..f82a8c17eb3 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -154,7 +154,7 @@
 
 	return ..()
 
-/obj/item/reagent_containers/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/item/reagent_containers/fire_act(exposed_temperature, exposed_volume)
 	reagents.expose_temperature(exposed_temperature)
 	..()
 
@@ -207,8 +207,8 @@
 	reagents.expose_temperature(1000)
 	..()
 
-/obj/item/reagent_containers/fire_act(datum/gas_mixture/air, temperature, volume)
-	reagents.expose_temperature(temperature)
+/obj/item/reagent_containers/fire_act(exposed_temperature, exposed_volume)
+	reagents.expose_temperature(exposed_temperature)
 
 /// Updates the icon of the container when the reagents change. Eats signal args
 /obj/item/reagent_containers/proc/on_reagent_change(datum/reagents/holder, ...)

From cc55229ea42a19c6ab4add43be37240b8cda9e57 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 22:24:41 -0400
Subject: [PATCH 127/200] I Am An Idiot (fire compile fix)

---
 code/modules/atmospherics/ZAS/Fire.dm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 9b9ec0a2452..895dcf2784d 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -87,7 +87,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		if(fuel.reagent_amount <= 0)
 			fuel_objs -= fuel
 			if(remove_fire)
-				if(T.fire)
+				var/turf/T = fuel.loc
+				if(istype(T) && T.fire)
 					qdel(T.fire)
 			qdel(fuel)
 

From 951e4e70a1b0ebcf2c5b560fe578b1eafc487cbc Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 4 Jun 2022 23:18:02 -0400
Subject: [PATCH 128/200] Fixes mapping error causing a bad init

---
 _maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm   | 1 -
 _maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm   | 1 -
 _maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm   | 1 -
 code/modules/mapping/space_management/multiz_helpers.dm | 6 ++++++
 4 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
index 59f291fd322..979d678b16a 100644
--- a/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_1.dmm
@@ -873,7 +873,6 @@
 /turf/open/floor/iron,
 /area/hallway/primary/central)
 "cW" = (
-/obj/structure/cable,
 /obj/structure/cable/multilayer/multiz,
 /turf/open/floor/plating,
 /area/hallway/primary/central)
diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm
index 34e9ccacc5f..71450ce61a0 100644
--- a/_maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_2.dmm
@@ -60,7 +60,6 @@
 /area/hallway/primary/upper)
 "o" = (
 /obj/structure/cable/multilayer/multiz,
-/obj/structure/cable,
 /turf/open/floor/plating,
 /area/hallway/primary/upper)
 "p" = (
diff --git a/_maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm b/_maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm
index ec204fb4362..c80d97fa08f 100644
--- a/_maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm
+++ b/_maps/map_files/multizas_debug/atmos_mintest_mz_3.dmm
@@ -53,7 +53,6 @@
 /area/hallway/primary/central/fore)
 "o" = (
 /obj/structure/cable/multilayer/multiz,
-/obj/structure/cable,
 /turf/open/floor/plating,
 /area/hallway/primary/central/fore)
 "p" = (
diff --git a/code/modules/mapping/space_management/multiz_helpers.dm b/code/modules/mapping/space_management/multiz_helpers.dm
index 4f9174e719f..7e19114ed6f 100644
--- a/code/modules/mapping/space_management/multiz_helpers.dm
+++ b/code/modules/mapping/space_management/multiz_helpers.dm
@@ -8,6 +8,12 @@
 	return get_step(ref, dir)
 
 /proc/get_dir_multiz(turf/us, turf/them)
+	///Type mismatch of "list" at some point, I WILL FIND THIS BUG.
+	#ifdef UNIT_TESTS
+	ASSERT(istype(us))
+	ASSERT(istype(them))
+	#endif
+
 	us = get_turf(us)
 	them = get_turf(them)
 	if(!us || !them)

From 51cb1f9c198913b84fb20e67b2e7ca1f5c519984 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 5 Jun 2022 00:36:20 -0400
Subject: [PATCH 129/200] docs zas compile options

---
 code/__DEFINES/atmospherics/ZAS.dm | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 969b12897de..0aa8918112b 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,4 +1,6 @@
+///Enables verbose debugging and the debug overlay. NOTE: Debug Overlay does not report MultiZAS information at this time.
 //#define ZASDBG
+///Enables multi-Z air movement. Zones do not merge across Z levels.
 #define MULTIZAS
 
 ///Air and zones freely mingle with this turf under the given conditions

From 0233fb5571adc3b638f3f8968e3fe9d407e599cd Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 5 Jun 2022 01:27:46 -0400
Subject: [PATCH 130/200] Disables SSairflow during unit tests.

---
 code/modules/unit_tests/unit_test.dm | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm
index 4359d2f1de0..71f5a2bf5a3 100644
--- a/code/modules/unit_tests/unit_test.dm
+++ b/code/modules/unit_tests/unit_test.dm
@@ -127,6 +127,8 @@ GLOBAL_LIST_EMPTY(unit_test_mapping_logs)
 	qdel(test)
 
 /proc/RunUnitTests()
+	SSairflow.pause() //Look man, shit's whack. I don't trust airflow to not displace things when it shouldn't.
+
 	CHECK_TICK
 
 	var/list/tests_to_run = subtypesof(/datum/unit_test)

From a8697e94e1e19510c3accd9214752267d87befec Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 5 Jun 2022 16:00:30 -0400
Subject: [PATCH 131/200] Fixes a critical bug, some more bugs, and comments

---
 code/__DEFINES/atmospherics/ZAS.dm         | 53 +++++++++++++++-------
 code/game/turfs/open/_open.dm              |  2 +
 code/game/turfs/open/floor/iron_floor.dm   |  1 +
 code/game/turfs/open/ice.dm                |  2 +
 code/game/turfs/open/openspace.dm          |  1 +
 code/modules/atmospherics/ZAS/Fire.dm      |  3 +-
 code/modules/atmospherics/ZAS/Turf.dm      |  5 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm |  2 +-
 8 files changed, 48 insertions(+), 21 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 0aa8918112b..26498a2186e 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,8 +1,13 @@
 ///Enables verbose debugging and the debug overlay. NOTE: Debug Overlay does not report MultiZAS information at this time.
-//#define ZASDBG
+#define ZASDBG
+
 ///Enables multi-Z air movement. Zones do not merge across Z levels.
 #define MULTIZAS
 
+#ifdef ZASDBG
+#warn ZAS debugging tools are enabled.
+#endif
+
 ///Air and zones freely mingle with this turf under the given conditions
 #define AIR_ALLOWED (0<<0)
 ///Neither air nor zones can interact with this turf under the given conditions
@@ -46,6 +51,7 @@
 		} \
 	} while(FALSE)
 
+///Checks is a turf is simulated and has a valid zone.
 #define TURF_HAS_VALID_ZONE(T) (T.simulated && T.zone && !T.zone.invalid)
 
 #ifdef MULTIZAS
@@ -95,7 +101,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST, UP, DOWN)
 					ret = AIR_BLOCKED|ZONE_BLOCKED; \
 				} \
 			} \
-			if (ret == AIR_BLOCKED|ZONE_BLOCKED) { \
+			if (ret & AIR_BLOCKED) { \
 				break;\
 			}\
 		}\
@@ -144,35 +150,50 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 
 //#define ATMOS_CANPASS(A, O) ( A.can_atmos_pass == CANPASS_PROC ? A.zas_canpass(O) : ( A.can_atmos_pass == CANPASS_DENSITY? !A.density : A.can_atmos_pass))
 #define ATMOS_CANPASS_NOTTURF(A) (A.can_atmos_pass == CANPASS_DENSITY ? !A.density : A.can_atmos_pass)
-#define CELL_VOLUME        2500 // Liters in a cell.
-#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) // Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C.
-
-#define O2STANDARD 0.21 // Percentage.
+///The volume of a standard cell, in liters. 1 turf is 1 cell.
+#define CELL_VOLUME 2500
+///Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C.
+#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION))
+
+///The standard O2 percentage for livable atmos.
+#define O2STANDARD 0.21
+///The standard N2 percentage for livable atmos.
 #define N2STANDARD 0.79
-
-#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible.
+///The amount of moles in a standard cell (1 turf) when Plasma starts being visible.
+#define MOLES_PHORON_VISIBLE 0.7
+///The standard molar content of Oxygen in a livible cell (turf).
 #define MOLES_O2STANDARD     (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%)
+///The standard molar content of Nitrogen in a livible cell (turf).
 #define MOLES_N2STANDARD     (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%)
+
 #define MOLES_O2ATMOS (MOLES_O2STANDARD*50)
 #define MOLES_N2ATMOS (MOLES_N2STANDARD*50)
 
-// These are for when a mob breathes poisonous air.
+///Minimum damage taken when inhaling an airborne toxin (UNUSED)
 #define MIN_TOXIN_DAMAGE 1
+///Maximum damage taken when inhaling an airborne toxin (UNUSED)
 #define MAX_TOXIN_DAMAGE 10
 
-#define STD_BREATH_VOLUME      12 // Liters in a normal breath.
+/// Liters in a normal breath. (UNUSED)
+#define STD_BREATH_VOLUME 12
 
-#define HUMAN_HEAT_CAPACITY 280000 //J/K For 80kg person
+///The heat capacity of a meatbag (J/K For 80kg person).
+#define HUMAN_HEAT_CAPACITY 280000
 
+///The minimum pressure for sound to be audible to a human
 #define SOUND_MINIMUM_PRESSURE 10
 
-#define PRESSURE_DAMAGE_COEFFICIENT 4   // The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE.
+///The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE
+#define PRESSURE_DAMAGE_COEFFICIENT 4
 #define MAX_HIGH_PRESSURE_DAMAGE 4   // This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :(
 #define LOW_PRESSURE_DAMAGE 0.6 // The amount of damage someone takes when in a low pressure area. (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
 
-#define MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND (MINIMUM_AIR_TO_SUSPEND*R_IDEAL_GAS_EQUATION*T20C)/CELL_VOLUME			// Minimum pressure difference between zones to suspend
-#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 // Minimum ratio of air that must move to/from a tile to suspend group processing
-#define MINIMUM_AIR_TO_SUSPEND       (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Minimum amount of air that has to move before a group processing can be suspended
+///If the pressure delta between two zones is below this value, they will not process.
+#define MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND (MINIMUM_AIR_TO_SUSPEND*R_IDEAL_GAS_EQUATION*T20C)/CELL_VOLUME
+///Minimum ratio of air that must move to/from a tile to suspend group processing
+#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05
+///Minimum amount of air that has to move before a group processing can be suspended
+#define MINIMUM_AIR_TO_SUSPEND       (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND)
 #define MINIMUM_MOLES_DELTA_TO_MOVE  (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Either this must be active
 #define MINIMUM_TEMPERATURE_TO_MOVE  (T20C + 100)                                        // or this (or both, obviously)
 
@@ -230,8 +251,8 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 #define FLOWFRAC                 0.99 // Fraction of gas transfered per process.
 
 //Flags for zone sleeping
-#define ZONE_ACTIVE   1
 #define ZONE_SLEEPING 0
+#define ZONE_ACTIVE 1
 
 //OPEN TURF ATMOS
 /// the default air mix that open turfs spawn
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 9ed6fe05a38..185c457e323 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -2,11 +2,13 @@
 	plane = FLOOR_PLANE
 	var/slowdown = 0 //negative for faster, positive for slower
 	initial_gas = OPENTURF_DEFAULT_ATMOS
+	z_flags = Z_ATMOS_IN_UP|Z_ATMOS_OUT_UP
 	var/footstep = null
 	var/barefootstep = null
 	var/clawfootstep = null
 	var/heavyfootstep = null
 
+
 //direction is direction of travel of A
 /turf/open/zPassIn(atom/movable/A, direction, turf/source)
 	if(direction == DOWN)
diff --git a/code/game/turfs/open/floor/iron_floor.dm b/code/game/turfs/open/floor/iron_floor.dm
index af92db181a7..881efa922da 100644
--- a/code/game/turfs/open/floor/iron_floor.dm
+++ b/code/game/turfs/open/floor/iron_floor.dm
@@ -36,6 +36,7 @@
 /turf/open/floor/iron/icemoon
 	initial_gas = ICEMOON_DEFAULT_ATMOS
 	temperature = 80
+
 /turf/open/floor/iron/edge
 	icon_state = "floor_edge"
 	base_icon_state = "floor_edge"
diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm
index 0ec9348e4dd..c02c5712f2c 100644
--- a/code/game/turfs/open/ice.dm
+++ b/code/game/turfs/open/ice.dm
@@ -36,6 +36,8 @@
 	baseturfs = /turf/open/openspace/icemoon
 	initial_gas = ICEMOON_DEFAULT_ATMOS
 	slowdown = 0
+	simulated = FALSE
 
 /turf/open/misc/ice/icemoon/no_planet_atmos
+	simulated = TRUE
 
diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm
index 2d1d0b25f30..e774eacfacd 100644
--- a/code/game/turfs/open/openspace.dm
+++ b/code/game/turfs/open/openspace.dm
@@ -172,6 +172,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
 	name = "ice chasm"
 	baseturfs = /turf/open/openspace/icemoon
 	initial_gas = ICEMOON_DEFAULT_ATMOS
+	simulated = FALSE
 
 	var/replacement_turf = /turf/open/misc/asteroid/snow/icemoon
 	/// Replaces itself with replacement_turf if the turf below this one is in a no ruins allowed area (usually ruins themselves)
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 895dcf2784d..98c624883ed 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -449,7 +449,6 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	apply_damage(0.9*mx*head_exposure,  BURN, BODY_ZONE_HEAD)
 	apply_damage(2.5*mx*chest_exposure, BURN, BODY_ZONE_CHEST)
-	//apply_damage(2,0*mx*groin_exposure, BURN, BODY_ZONE_PRECISE_GROIN)
 	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_L_LEG)
 	apply_damage(0.6*mx*legs_exposure,  BURN, BODY_ZONE_R_LEG)
 	apply_damage(0.4*mx*arms_exposure,  BURN, BODY_ZONE_L_ARM)
@@ -480,7 +479,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 
 	for(var/obj/structure/window/W in src)
 		if(W.dir == dir_to || W.fulltile) //Same direction or diagonal (full tile)
-			W.fire_act(adj_air, adj_temp, adj_volume)
+			W.fire_act(adj_temp, adj_volume)
 
 /turf/closed/wall/adjacent_fire_act(turf/open/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
 	burn(adj_temp)
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index e710aea0bd9..068bc50b251 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -4,7 +4,7 @@
 	///All directions in which a turf that can contain air is present.
 	var/open_directions
 	///Can atmos pass down through this turf?
-	var/z_flags = Z_ATMOS_IN_UP|Z_ATMOS_OUT_UP
+	var/z_flags = NONE
 
 /turf
 	///Does this turf need to be ran through SSzas? (SSzas.mark_for_update(turf) OR turf.update_nearby_tiles())
@@ -257,8 +257,9 @@
 				zas_log("This turf tried to merge into itself! Current type: [src.type]")
 
 			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
-			#endif
+			#else
 			return //THIS BUG IS SMALL ENOUGH THAT IT IS FINE FOR NOW. I WILL FIX IT IN THE FUTURE.
+			#endif
 		SSzas.connect(src, T)
 
 /turf/proc/post_update_air_properties()
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 51fd293b931..93576c89f9d 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -52,7 +52,7 @@
 	molar_mass = 0.405	// kg/mol
 
 	tile_overlay = "plasma"
-	overlay_limit = 0.7
+	overlay_limit = MOLES_PHORON_VISIBLE
 	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL
 	breathed_product = /datum/reagent/toxin/plasma
 	symbol_html = "Ph"

From ec8c3b6d44d741dcc89f05335ac482ceb1ac4e70 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 5 Jun 2022 16:01:02 -0400
Subject: [PATCH 132/200] Disables ZASDBG

---
 code/__DEFINES/atmospherics/ZAS.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 26498a2186e..7dc9dca7034 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,5 +1,5 @@
 ///Enables verbose debugging and the debug overlay. NOTE: Debug Overlay does not report MultiZAS information at this time.
-#define ZASDBG
+//#define ZASDBG
 
 ///Enables multi-Z air movement. Zones do not merge across Z levels.
 #define MULTIZAS

From dec488edcef8642e2c02add57b7bf5150d8c44c2 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 5 Jun 2022 16:41:39 -0400
Subject: [PATCH 133/200] more comments + another attempt to find this bug

---
 code/modules/atmospherics/ZAS/Airflow.dm      | 43 +++++++++++++------
 .../atmospherics/ZAS/ConnectionGroup.dm       |  1 +
 .../environmental/LINDA_turf_tile.dm          |  2 +-
 .../mapping/space_management/traits.dm        |  6 +++
 4 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 7567fb63841..88dff6c3dcd 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -1,11 +1,27 @@
 /*
 Contains helper procs for airflow, handled in /connection_group.
+This entire system is an absolute mess.
 */
 #define AIRBORNE_DAMAGE(airborne_thing) (min(airborne_thing.airflow_speed, (airborne_thing.airborne_acceleration*2)) * zas_settings.airflow_damage)
 
-/mob/var/tmp/last_airflow_stun = 0
+/mob
+	var/tmp/last_airflow_stun = 0
+
+/atom/movable
+	///The location the atom is trying to step towards during airflow.
+	var/tmp/turf/airflow_dest
+	///The speed the object is travelling during airflow
+	var/tmp/airflow_speed = 0
+	///Time (ticks) spent in airflow
+	var/tmp/airflow_time = 0
+	///Time (ticks) since last airflow movement
+	var/tmp/last_airflow = 0
+	var/tmp/airborne_acceleration = 0
+
+///Applies the effects of the mob colliding with another movable due to airflow.
 /mob/proc/airflow_stun()
 	return
+
 /mob/living/airflow_stun()
 	if(stat == 2)
 		return FALSE
@@ -30,16 +46,19 @@ Contains helper procs for airflow, handled in /connection_group.
 /mob/living/simple_animal/slime/airflow_stun()
 	return
 
+///NEEDS IMPLIMENATION, SEE: LINDA_turf_tile.dm
 /atom/movable/proc/experience_pressure_difference()
 	return
 
+///Checks to see if airflow can move this movable.
 /atom/movable/proc/check_airflow_movable(n)
+	if(anchored && !ismob(src))
+		return FALSE
 
-	if(anchored && !ismob(src)) return 0
-
-	if(!isobj(src) && n < zas_settings.airflow_dense_pressure) return 0
+	if(!isobj(src) && n < zas_settings.airflow_dense_pressure)
+		return FALSE
 
-	return 1
+	return TRUE
 
 /mob/check_airflow_movable(n)
 	if(n < zas_settings.airflow_heavy_pressure)
@@ -52,7 +71,8 @@ Contains helper procs for airflow, handled in /connection_group.
 	return 0
 
 /obj/check_airflow_movable(n)
-	if(n < zas_settings.airflow_dense_pressure) return 0
+	if(n < zas_settings.airflow_dense_pressure)
+		return FALSE
 
 	return ..()
 
@@ -70,13 +90,7 @@ Contains helper procs for airflow, handled in /connection_group.
 			if(n < zas_settings.airflow_dense_pressure) return 0
 	return ..()
 
-
-/atom/movable/var/tmp/turf/airflow_dest
-/atom/movable/var/tmp/airflow_speed = 0
-/atom/movable/var/tmp/airflow_time = 0
-/atom/movable/var/tmp/last_airflow = 0
-/atom/movable/var/tmp/airborne_acceleration = 0
-
+///Seemingly redundant, look to remove.
 /atom/movable/proc/AirflowCanMove(n)
 	return 1
 
@@ -111,6 +125,7 @@ Contains helper procs for airflow, handled in /connection_group.
 		airborne_acceleration = 0
 		. = ..()
 
+///Called when src collides with A during airflow
 /atom/movable/proc/airflow_hit(atom/A)
 	airflow_speed = 0
 	airflow_dest = null
@@ -133,7 +148,7 @@ Contains helper procs for airflow, handled in /connection_group.
 		loc.add_blood_DNA(return_blood_DNA())
 	return ..()
 
-
+///Called when "flying" calls airflow_hit() on src
 /atom/proc/airflow_hit_act(atom/movable/flying)
 	src.visible_message(
 		span_danger("A flying [flying.name] slams into \the [src]!"),
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 04d3518a912..0589a4c0434 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -141,6 +141,7 @@ Class Procs:
 
 			M.airflow_dest = pick(close_turfs) //Pick a random midpoint to fly towards.
 
+			//Soul code im too scared to touch
 			if(repelled) spawn if(M) M.RepelAirflowDest(differential/5)
 			else spawn if(M) M.GotoAirflowDest(differential/10)
 
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
index e8e572644a8..8d24a5ed94c 100644
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
@@ -374,7 +374,7 @@
 
 /atom/movable
 	///How much delta pressure is needed for us to move
-	var///pressure_resistance = 10
+	var/pressure_resistance = 10
 	var/last_high_pressure_movement_air_cycle = 0
 
 /atom/movable/proc/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0)
diff --git a/code/modules/mapping/space_management/traits.dm b/code/modules/mapping/space_management/traits.dm
index cd53a3632da..e6269a12009 100644
--- a/code/modules/mapping/space_management/traits.dm
+++ b/code/modules/mapping/space_management/traits.dm
@@ -51,6 +51,12 @@
 
 /// Attempt to get the turf below the provided one according to Z traits
 /datum/controller/subsystem/mapping/proc/get_turf_below(turf/T)
+	///Type mismatch of "list" at some point, I WILL FIND THIS BUG.
+	#ifdef UNIT_TESTS
+	ASSERT(istype(us))
+	ASSERT(istype(them))
+	#endif
+
 	if (!T)
 		return
 	var/offset = level_trait(T.z, ZTRAIT_DOWN)

From 8ae400833b4a7c195e0d36874439a6157a74678b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 5 Jun 2022 16:50:32 -0400
Subject: [PATCH 134/200] fixes an erroneous return value

---
 .../modules/mapping/space_management/multiz_helpers.dm |  6 ------
 code/modules/mapping/space_management/traits.dm        | 10 ++--------
 2 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/code/modules/mapping/space_management/multiz_helpers.dm b/code/modules/mapping/space_management/multiz_helpers.dm
index 7e19114ed6f..4f9174e719f 100644
--- a/code/modules/mapping/space_management/multiz_helpers.dm
+++ b/code/modules/mapping/space_management/multiz_helpers.dm
@@ -8,12 +8,6 @@
 	return get_step(ref, dir)
 
 /proc/get_dir_multiz(turf/us, turf/them)
-	///Type mismatch of "list" at some point, I WILL FIND THIS BUG.
-	#ifdef UNIT_TESTS
-	ASSERT(istype(us))
-	ASSERT(istype(them))
-	#endif
-
 	us = get_turf(us)
 	them = get_turf(them)
 	if(!us || !them)
diff --git a/code/modules/mapping/space_management/traits.dm b/code/modules/mapping/space_management/traits.dm
index e6269a12009..db9a517139b 100644
--- a/code/modules/mapping/space_management/traits.dm
+++ b/code/modules/mapping/space_management/traits.dm
@@ -5,14 +5,14 @@
 	if (z_list)
 		if (z > z_list.len)
 			stack_trace("Unmanaged z-level [z]! maxz = [world.maxz], z_list.len = [z_list.len]")
-			return list()
+			return FALSE
 		var/datum/space_level/S = get_level(z)
 		return S.traits[trait]
 	else
 		var/list/default = DEFAULT_MAP_TRAITS
 		if (z > default.len)
 			stack_trace("Unmanaged z-level [z]! maxz = [world.maxz], default.len = [default.len]")
-			return list()
+			return FALSE
 		return default[z][DL_TRAITS][trait]
 
 /// Check if levels[z] has any of the specified traits
@@ -51,12 +51,6 @@
 
 /// Attempt to get the turf below the provided one according to Z traits
 /datum/controller/subsystem/mapping/proc/get_turf_below(turf/T)
-	///Type mismatch of "list" at some point, I WILL FIND THIS BUG.
-	#ifdef UNIT_TESTS
-	ASSERT(istype(us))
-	ASSERT(istype(them))
-	#endif
-
 	if (!T)
 		return
 	var/offset = level_trait(T.z, ZTRAIT_DOWN)

From 6bd953d5a13b4d9fd5b0a0feabd98b2eaa90d18b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 5 Jun 2022 16:52:51 -0400
Subject: [PATCH 135/200] Prevents air from moving up/down in hyperspace

---
 code/game/turfs/open/space/transit.dm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/code/game/turfs/open/space/transit.dm b/code/game/turfs/open/space/transit.dm
index 9e1e9643b26..a3a659c3070 100644
--- a/code/game/turfs/open/space/transit.dm
+++ b/code/game/turfs/open/space/transit.dm
@@ -5,6 +5,7 @@
 	baseturfs = /turf/open/space/transit
 	flags_1 = NOJAUNT //This line goes out to every wizard that ever managed to escape the den. I'm sorry.
 	explosion_block = INFINITY
+	z_flags = NONE
 
 /turf/open/space/transit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
 	. = ..()

From 96bd9bbd26197214d3ad592e31d1e06341bae455 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 6 Jun 2022 17:56:18 -0400
Subject: [PATCH 136/200] Please don't break anything. Adds the Supermatter

---
 .../mistake_inevitable.dmm                    |   2 +-
 _maps/RandomRuins/SpaceRuins/oldstation.dmm   |   2 +-
 .../map_files/Deltastation/DeltaStation2.dmm  |   2 +-
 .../map_files/IceBoxStation/IceBoxStation.dmm |   2 +-
 _maps/map_files/KiloStation/KiloStation.dmm   |   2 +-
 _maps/map_files/MetaStation/MetaStation.dmm   |   2 +-
 _maps/map_files/tramstation/tramstation.dmm   |   2 +-
 _maps/shuttles/emergency_supermatter.dmm      |   4 +-
 code/__DEFINES/atmospherics/ZAS.dm            |   4 +-
 code/controllers/subsystem/airflow.dm         |  10 --
 code/game/objects/effects/effects.dm          |   3 -
 code/game/objects/items/RCD.dm                |   2 +-
 code/game/objects/items/melee/misc.dm         |   4 +-
 code/game/objects/structures/bonfire.dm       |   4 +-
 .../turfs/open/floor/plating/misc_plating.dm  |   1 -
 code/modules/atmospherics/ZAS/Airflow.dm      |  93 +++++++------
 .../atmospherics/ZAS/ConnectionGroup.dm       |   2 +
 code/modules/atmospherics/ZAS/Diagnostic.dm   |   5 +-
 code/modules/atmospherics/ZAS/Plasma.dm       |   6 +-
 code/modules/atmospherics/ZAS/Turf.dm         |   7 +-
 code/modules/atmospherics/ZAS/XGM/gases.dm    |   9 ++
 code/modules/atmospherics/ZAS/ZAS_Settings.dm |   2 +-
 .../atmospherics/ZAS/atmos_primitives.dm      |  25 ++++
 .../atmospherics/machinery/datum_pipeline.dm  |  66 +++++++---
 .../machinery/pipes/heat_exchange/he_pipes.dm |  13 +-
 .../machinery/portable/canister.dm            |   6 +-
 code/modules/power/supermatter/supermatter.dm | 124 +++++++-----------
 .../power/supermatter/supermatter_process.dm  |  71 +++++-----
 code/modules/projectiles/projectile.dm        |   3 -
 code/modules/research/designs/misc_designs.dm |   2 +-
 code/modules/surgery/organs/lungs.dm          |  18 +--
 config/admins.txt                             |   2 +
 pariah.dme                                    |   2 -
 33 files changed, 279 insertions(+), 223 deletions(-)

diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
index a2dfdbd7520..b8c4064a653 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
@@ -243,7 +243,7 @@
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/testlab)
 "yO" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /obj/structure/window/reinforced/plasma/spawner,
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/testlab)
diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index fb261395aef..79c4ff94141 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -4771,7 +4771,7 @@
 /turf/open/floor/iron,
 /area/ruin/space/has_grav/ancientstation/charlie/hall)
 "mm" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /obj/structure/closet/crate/engineering{
 	name = "supermatter shard crate"
 	},
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 964842551b4..593e362a2d7 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -77256,7 +77256,7 @@
 /turf/open/floor/iron,
 /area/medical/virology)
 "uqa" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4,
 /turf/open/floor/engine,
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 00726188a84..66d5f9bedc8 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -39924,7 +39924,7 @@
 /turf/open/floor/iron/showroomfloor,
 /area/security/processing)
 "szM" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "szW" = (
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 7beeee11f00..00ec48f95a1 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -47887,7 +47887,7 @@
 /turf/open/floor/wood,
 /area/service/lawoffice)
 "lGe" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "lGj" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index d8836c0b1dc..ff8cb0cb369 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -8961,7 +8961,7 @@
 /turf/open/floor/iron,
 /area/hallway/primary/port)
 "ctk" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "ctm" = (
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index 37c7068b95f..e761e21cf3d 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -42563,7 +42563,7 @@
 /turf/open/floor/iron/white,
 /area/science/explab)
 "nSy" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "nSQ" = (
diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm
index c56aadb7554..d6e69b10923 100644
--- a/_maps/shuttles/emergency_supermatter.dmm
+++ b/_maps/shuttles/emergency_supermatter.dmm
@@ -104,7 +104,7 @@
 /turf/open/floor/plating,
 /area/shuttle/escape)
 "aB" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/plating,
 /area/shuttle/escape)
 "aD" = (
@@ -193,7 +193,7 @@
 /turf/open/floor/plating/airless,
 /area/shuttle/escape)
 "aV" = (
-/obj/machinery/power/rtg/debug/station,
+/obj/machinery/power/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/plating/airless,
 /area/shuttle/escape)
 "aW" = (
diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 7dc9dca7034..4121a6d7411 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -12,7 +12,7 @@
 #define AIR_ALLOWED (0<<0)
 ///Neither air nor zones can interact with this turf under the given conditions
 #define AIR_BLOCKED (1<<0)
-///Air can pass through or into this turf, but zones may not merge with it.
+///Air can pass through or into this turf, but zones may not merge with it. Will not block zone merges, if either zone is below ZONE_MIN_SIZE
 #define ZONE_BLOCKED (1<<1)
 
 ///Zones with less than this many turfs will always merge, even if the connection is not direct
@@ -306,6 +306,8 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 #define GAS_SULFUR				"sulfurdioxide"
 #define GAS_STEAM				"water"
 #define GAS_PLASMA				"plasma"
+//TG GASES - PLAN TO REMOVE
+#define GAS_PLUOXIUM			"pluoxium"
 
 GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
 GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index b2b2b769182..5d2e11bd847 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -111,22 +111,12 @@ SUBSYSTEM_DEF(airflow)
 
 #undef CLEAR_OBJECT
 
-
-/atom/movable/var/tmp/airflow_xo
-/atom/movable/var/tmp/airflow_yo
-/atom/movable/var/tmp/airflow_originally_not_dense
-/atom/movable/var/tmp/airflow_process_delay
-/atom/movable/var/tmp/airflow_skip_speedcheck
-
-
 /atom/movable/proc/prepare_airflow(strength)
 	if (!airflow_dest || airflow_speed < 0 || last_airflow > world.time - zas_settings.airflow_delay)
 		return FALSE
 	if (airflow_speed)
 		airflow_speed = strength / max(get_dist(src, airflow_dest), 1)
 		return FALSE
-	if (!AirflowCanMove(strength))
-		return FALSE
 	if (airflow_dest == loc)
 		step_away(src, loc)
 	if (ismob(src))
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index 3d084c917a2..01ab5d3e5ec 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -36,9 +36,6 @@
 /obj/effect/attack_hulk(mob/living/carbon/human/user)
 	return FALSE
 
-/obj/effect/experience_pressure_difference()
-	return
-
 /obj/effect/ex_act(severity, target)
 	return FALSE
 
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index e91e9486b7e..5dc6b045242 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -1005,7 +1005,7 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
 						for(var/direction in GLOB.cardinals)
 							var/turf/C = get_step(W, direction)
 							var/list/dupes = checkdupes(C)
-							if((isspaceturf(C) || C.open_directions) && !dupes.len)
+							if((isspaceturf(C) || (get_step(src, 0).open_directions & direction)) && !dupes.len)
 								candidates += C
 						if(!candidates.len)
 							to_chat(user, span_warning("Valid target not found..."))
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 12a78e769d0..37dc275e1fb 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -295,7 +295,7 @@
 		var/mob/living/carbon/human/human_target = target
 		human_target.drop_all_held_items()
 		human_target.visible_message(span_danger("[user] disarms [human_target]!"), span_userdanger("[user] disarmed you!"))
-/*
+
 /obj/item/melee/roastingstick
 	name = "advanced roasting stick"
 	desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits."
@@ -414,7 +414,7 @@
 		QDEL_NULL(beam)
 		playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE)
 		to_chat(user, span_notice("You put [src] away."))
-*/
+
 
 /obj/item/melee/cleric_mace
 	name = "cleric mace"
diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm
index 5acf553e299..43cfa1e1b1c 100644
--- a/code/game/objects/structures/bonfire.dm
+++ b/code/game/objects/structures/bonfire.dm
@@ -61,7 +61,7 @@
 				return ..()
 	if(used_item.get_temperature())
 		start_burning()
-	/*
+
 	if(grill)
 		if(istype(used_item, /obj/item/melee/roastingstick))
 			return FALSE
@@ -76,7 +76,7 @@
 				used_item.pixel_x = used_item.base_pixel_x + clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2)
 				used_item.pixel_y = used_item.base_pixel_y + clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2)
 		else
-			return ..()*/
+			return ..()
 	return ..()
 
 
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
index f4d3e60a5ae..fbe06d95201 100644
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ b/code/game/turfs/open/floor/plating/misc_plating.dm
@@ -45,7 +45,6 @@
 	icon_state = "snowplating"
 	base_icon_state = "snowplating"
 	temperature = 180
-	temperature = 180
 	attachment_holes = FALSE
 
 	footstep = FOOTSTEP_SAND
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 88dff6c3dcd..73050dd39c4 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -18,6 +18,13 @@ This entire system is an absolute mess.
 	var/tmp/last_airflow = 0
 	var/tmp/airborne_acceleration = 0
 
+	var/tmp/airflow_xo
+	var/tmp/airflow_yo
+	///If the movable is dense by default, it won't step into tiles containing other dense objects
+	var/tmp/airflow_originally_not_dense
+	var/tmp/airflow_process_delay
+	var/tmp/airflow_skip_speedcheck
+
 ///Applies the effects of the mob colliding with another movable due to airflow.
 /mob/proc/airflow_stun()
 	return
@@ -34,10 +41,16 @@ This entire system is an absolute mess.
 	if(buckled)
 		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
 		return FALSE
-	if(!body_position == LYING_DOWN)
-		to_chat(src, "<span class='warning'>The sudden rush of air knocks you over!</span>")
+	if(body_position == LYING_DOWN) //Lying down protects you from Z A S M O M E N T S
+		return
+
+	Knockdown(zas_settings.airflow_stun)
+	visible_message(
+		span_danger("[src] is thrown to the floor by a gust of air!"),
+		span_danger("A sudden rush of air knocks you over!"),
+		span_hear("You hear a gust of air, followed by a soft thud.")
+	)
 
-	Knockdown(zas_settings.airflow_stun SECONDS)
 	last_airflow_stun = world.time
 
 /mob/living/silicon/airflow_stun()
@@ -46,34 +59,28 @@ This entire system is an absolute mess.
 /mob/living/simple_animal/slime/airflow_stun()
 	return
 
-///NEEDS IMPLIMENATION, SEE: LINDA_turf_tile.dm
-/atom/movable/proc/experience_pressure_difference()
-	return
-
 ///Checks to see if airflow can move this movable.
 /atom/movable/proc/check_airflow_movable(n)
-	if(anchored && !ismob(src))
-		return FALSE
-
-	if(!isobj(src) && n < zas_settings.airflow_dense_pressure)
-		return FALSE
-
+	//We're just hoping nothing goes wrong
 	return TRUE
 
 /mob/check_airflow_movable(n)
+	if(status_flags & GODMODE)
+		return FALSE
 	if(n < zas_settings.airflow_heavy_pressure)
 		return FALSE
 	if(HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) //Magboots
 		return FALSE
-	return TRUE
+	return ..()
 
 /mob/living/silicon/check_airflow_movable()
 	return 0
 
 /obj/check_airflow_movable(n)
+	if(anchored)
+		return FALSE
 	if(n < zas_settings.airflow_dense_pressure)
 		return FALSE
-
 	return ..()
 
 /obj/item/check_airflow_movable(n)
@@ -90,20 +97,6 @@ This entire system is an absolute mess.
 			if(n < zas_settings.airflow_dense_pressure) return 0
 	return ..()
 
-///Seemingly redundant, look to remove.
-/atom/movable/proc/AirflowCanMove(n)
-	return 1
-
-/mob/AirflowCanMove(n)
-	if(status_flags & GODMODE)
-		return 0
-	if(buckled)
-		return 0
-	var/obj/item/clothing/shoes = get_item_by_slot(ITEM_SLOT_FEET)
-	if(istype(shoes) && (shoes.clothing_flags & NOSLIP))
-		return 0
-	return 1
-
 /atom/movable/Bump(atom/A)
 	if(airflow_speed > 0 && airflow_dest)
 		var/turf/T = get_turf(A)
@@ -112,6 +105,12 @@ This entire system is an absolute mess.
 			A.airflow_hit_act(src)
 		else if(istype(src, /mob/living/carbon/human))
 			to_chat(src, "<span class='notice'>You are pinned against [A] by airflow!</span>")
+		/*
+		If the turf of the atom we bumped is NOT dense, then we check if the flying object is dense.
+		We check the special var because flying objects gain density so they can Bump() objects.
+		If the object is NOT normally dense, we remove our density and the target's density,
+		enabling us to step into their turf. Then, we set the density back to the way its supposed to be for airflow.
+		*/
 		if(!T.density)
 			if(ismovable(A) && A:airflow_originally_not_dense)
 				set_density(FALSE)
@@ -134,30 +133,42 @@ This entire system is an absolute mess.
 /mob/living/airflow_hit(atom/A)
 	var/b_loss = AIRBORNE_DAMAGE(src)
 	apply_damage(b_loss, BRUTE)
+	return ..()
+
+/mob/living/carbon/airflow_hit(atom/A)
 	if(istype(A, /obj/structure) || iswallturf(A))
 		if(airflow_speed > 10)
 			Paralyze(round(airflow_speed * zas_settings.airflow_stun))
 			Stun(round(airflow_speed * zas_settings.airflow_stun) + 3)
+			loc.add_blood_DNA(return_blood_DNA())
+			visible_message(
+				span_danger("[src] splats against \the [A]!"),
+				span_userdanger("You slam into \the [A] with tremendous force!"),
+				span_hear("You hear a loud thud.")
+			)
+			INVOKE_ASYNC(emote("scream"))
 		else
 			Stun(round(airflow_speed * zas_settings.airflow_stun/2))
+			visible_message(
+				span_danger("[src] slams into \the [A]!"),
+				span_userdanger("You're thrown against \the [A] by pressure!"),
+				span_hear("You hear a loud thud.")
+			)
 
 	return ..()
 
-/mob/living/carbon/airflow_hit(atom/A)
-	if (prob(33))
-		loc.add_blood_DNA(return_blood_DNA())
-	return ..()
-
 ///Called when "flying" calls airflow_hit() on src
 /atom/proc/airflow_hit_act(atom/movable/flying)
+	return
+
+/mob/living/airflow_hit_act(atom/movable/flying)
+	. = ..()
 	src.visible_message(
 		span_danger("A flying [flying.name] slams into \the [src]!"),
 		span_danger("You're hit by a flying [flying]!"),
-		span_danger("You hear a loud slam!")
+		span_danger("You hear a soft thud.")
 	)
 
-/mob/living/airflow_hit_act(atom/movable/flying)
-	. = ..()
 	playsound(src.loc, "punch", 25, 1, -1)
 	var/weak_amt
 	if(istype(flying,/obj/item))
@@ -171,6 +182,13 @@ This entire system is an absolute mess.
 
 /obj/airflow_hit_act(atom/movable/flying)
 	. = ..()
+	if(!flying.airflow_originally_not_dense)
+		src.visible_message(
+			span_danger("A flying [flying.name] slams into \the [src]!"),
+			null,
+			span_danger("You hear a loud slam!")
+		)
+
 	playsound(src.loc, "smash.ogg", 25, 1, -1)
 
 	if(!uses_integrity)
@@ -180,6 +198,7 @@ This entire system is an absolute mess.
 
 /mob/living/carbon/human/airflow_hit_act(atom/movable/flying)
 	. = ..()
+
 	if (prob(33))
 		loc.add_blood_DNA(return_blood_DNA())
 
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 0589a4c0434..f48bfccb9da 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -122,6 +122,8 @@ Class Procs:
 /connection_edge/proc/flow(list/movable, differential, repelled)
 	for(var/i in 1 to length(movable))
 		var/atom/movable/M = movable[i]
+		//Non simulated objects dont get tossed
+		if(!M.simulated) continue
 
 		//If they're already being tossed, don't do it again.
 		if(M.last_airflow > world.time - zas_settings.airflow_delay) continue
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index 12b1198674a..ca0d4543ebe 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -6,9 +6,12 @@
 		else
 			to_chat(mob, span_admin("ZASDBG: No zone here."))
 			var/datum/gas_mixture/mix = T.return_air()
-			to_chat(mob,span_admin( "ZASDBG_MAIN: [mix.returnPressure()] kPa [mix.temperature]C"))
+			to_chat(mob,span_admin( "ZASDBG_MAIN: [mix.returnPressure()] kPa [mix.temperature] k"))
 			for(var/g in mix.gas)
 				to_chat(mob, span_admin("ZASDBG_GAS: [g]: [mix.gas[g]]\n"))
+
+			if((T.zone && (length(T.zone.contents) > ZONE_MIN_SIZE)))
+				to_chat(mob, span_notice("This turf's zone is below the minimum size, and will merge over zone blockers."))
 	else
 		if(zone_debug_images)
 			for(var/zone in  zone_debug_images)
diff --git a/code/modules/atmospherics/ZAS/Plasma.dm b/code/modules/atmospherics/ZAS/Plasma.dm
index faa22877f91..a1f1e623b1d 100644
--- a/code/modules/atmospherics/ZAS/Plasma.dm
+++ b/code/modules/atmospherics/ZAS/Plasma.dm
@@ -5,9 +5,9 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('modular_pariah/master_fi
 	var/plasma_dmg_name = "Plasma Damage Amount"
 	var/plasma_dmg_desc = "Self Descriptive"
 
-	var/cloth_contamination = TRUE
-	var/cloth_contamination_name = "Cloth Contamination"
-	var/cloth_contamination_desc = "If this is on, phoron does damage by getting into cloth."
+	var/cloth_contamination = FALSE
+	var/cloth_contamination_name = "Phoron Contamination"
+	var/cloth_contamination_desc = "If this is on, phoron can contiminate items."
 
 	var/plasmaguard_only = FALSE
 	var/plamaguard_only_name = "\"PlasmaGuard Only\""
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 068bc50b251..aaa2836b0e2 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -11,7 +11,7 @@
 	var/needs_air_update = 0
 	///The local gas mixture of this turf. Use return_air(). This will always exist even if not in use, because GCing air contents would be too expensive.
 	var/datum/gas_mixture/air
-	var/heat_capacity = 1
+	var/heat_capacity = INFINITY
 	var/thermal_conductivity = 0.05
 	///A gas_mixture gas list to be used as the initial value. Ex: list(GAS_OXYGEN = 50)
 	var/list/initial_gas
@@ -37,6 +37,9 @@
 		#endif
 		return TRUE
 
+	///EXPERIMENTAL
+	open_directions = NONE
+
 	#ifdef MULTIZAS
 	for(var/d = 1, d < 64, d *= 2)
 	#else
@@ -61,6 +64,8 @@
 			#endif
 			continue
 
+		open_directions |= d
+
 		if(target.simulated)
 			if(TURF_HAS_VALID_ZONE(target))
 				SSzas.connect(target, src)
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 93576c89f9d..84639c85774 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -255,3 +255,12 @@
 	breathed_product = /datum/reagent/carbon_monoxide
 	symbol_html = "CO"
 	symbol = "CO"
+
+/datum/xgm_gas/pluoxium
+	id = GAS_PLUOXIUM
+	name = "Pluoxium"
+	specific_heat = 80
+	molar_mass = 0.002 //Yeah idk, its some kind of super gas or something
+	base_value = 5
+	symbol_html = "Pl"
+	symbol = "Pl"
diff --git a/code/modules/atmospherics/ZAS/ZAS_Settings.dm b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
index f7f6a08d42c..f9975f0a122 100644
--- a/code/modules/atmospherics/ZAS/ZAS_Settings.dm
+++ b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
@@ -46,7 +46,7 @@
 	var/airflow_stun_cooldown_NAME = "Aiflow Stunning - Cooldown"
 	var/airflow_stun_cooldown_DESC = "How long, in tenths of a second, to wait before stunning them again."
 
-	var/airflow_stun = 1
+	var/airflow_stun = 1 SECONDS
 	var/airflow_stun_NAME = "Airflow Impact - Stunning"
 	var/airflow_stun_DESC = "How much a mob is stunned when hit by an object."
 
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index b370be78301..2ca321410a4 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -502,6 +502,31 @@
 	else
 		return status.len
 
+//surface must be the surface area in m^2
+/proc/radiate_heat_to_space(datum/gas_mixture/air, surface, thermal_conductivity)
+	var/gas_density = air.total_moles/air.volume
+	thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio
+
+	var/heat_gain = get_thermal_radiation(air.temperature, surface, RADIATOR_EXPOSED_SURFACE_AREA_RATIO, thermal_conductivity)
+
+	air.addThermalEnergy(heat_gain)
+
+//Returns the amount of heat gained while in space due to thermal radiation (usually a negative value)
+//surface - the surface area in m^2
+//exposed_surface_ratio - the proportion of the surface that is exposed to sunlight
+//thermal_conductivity - a multipler on the heat transfer rate. See OPEN_HEAT_TRANSFER_COEFFICIENT and friends
+/proc/get_thermal_radiation(var/surface_temperature, var/surface, var/exposed_surface_ratio, var/thermal_conductivity)
+	//*** Gain heat from sunlight, then lose heat from radiation.
+
+	// We only get heat from the star on the exposed surface area.
+	// If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase.
+	. = AVERAGE_SOLAR_RADIATION * (exposed_surface_ratio * surface) * thermal_conductivity
+
+	// Previously, the temperature would enter equilibrium at 26C or 294K.
+	// Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight.  We now assume it aligned edge on.
+	// It currently should stabilise at 129.6K or -143.6C
+	. -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (surface_temperature - COSMIC_RADIATION_TEMPERATURE) ** 4
+
 #undef MINIMUM_MOLES_TO_PUMP
 #undef MINIMUM_MOLES_TO_FILTER
 #undef ATMOS_PUMP_EFFICIENCY
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index e9ea7937732..0db1d72042d 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -188,29 +188,61 @@
 
 /datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
 	var/total_heat_capacity = air.getHeatCapacity()
-	var/partial_heat_capacity = total_heat_capacity * (share_volume / air.volume)
-	var/target_temperature
-	var/target_heat_capacity
+	var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
 
+	if(target.simulated)
+		var/turf/modeled_location = target
 
-	var/turf/modeled_location = target
-	target_temperature = modeled_location.return_temperature()
-	target_heat_capacity = modeled_location.GetHeatCapacity()
+		if(modeled_location.blocks_air)
 
-	var/delta_temperature = air.temperature - target_temperature
-	var/sharer_heat_capacity = target_heat_capacity
+			if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
+				var/delta_temperature = air.temperature - modeled_location.temperature
 
-	if((sharer_heat_capacity <= 0) || (partial_heat_capacity <= 0))
-		return TRUE
-	var/heat = thermal_conductivity * delta_temperature * (partial_heat_capacity * sharer_heat_capacity / (partial_heat_capacity + sharer_heat_capacity))
+				var/heat = thermal_conductivity*delta_temperature* \
+					(partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity))
 
-	var/self_temperature_delta = - heat / total_heat_capacity
-	var/sharer_temperature_delta = heat / sharer_heat_capacity
+				air.temperature -= heat/total_heat_capacity
+				modeled_location.temperature += heat/modeled_location.heat_capacity
 
-	air.temperature += self_temperature_delta
-	modeled_location.TakeTemperature(sharer_temperature_delta)
-	/*if(modeled_location.blocks_air & AIR_BLOCKED)
-		modeled_location.temperature_expose(air, modeled_location.temperature)*/
+		else
+			var/delta_temperature = 0
+			var/sharer_heat_capacity = 0
+
+			if(modeled_location.zone)
+				delta_temperature = (air.temperature - modeled_location.zone.air.temperature)
+				sharer_heat_capacity = modeled_location.zone.air.getHeatCapacity()
+			else
+				delta_temperature = (air.temperature - modeled_location.air.temperature)
+				sharer_heat_capacity = modeled_location.air.getHeatCapacity()
+
+			var/self_temperature_delta = 0
+			var/sharer_temperature_delta = 0
+
+			if((sharer_heat_capacity>0) && (partial_heat_capacity>0))
+				var/heat = thermal_conductivity*delta_temperature* \
+					(partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity))
+
+				self_temperature_delta = -heat/total_heat_capacity
+				sharer_temperature_delta = heat/sharer_heat_capacity
+			else
+				return 1
+
+			air.temperature += self_temperature_delta
+
+			if(modeled_location.zone)
+				modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier
+			else
+				modeled_location.air.temperature += sharer_temperature_delta
+
+
+	else
+		if((target.heat_capacity>0) && (partial_heat_capacity>0))
+			var/delta_temperature = air.temperature - target.temperature
+
+			var/heat = thermal_conductivity*delta_temperature* \
+				(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
+
+			air.temperature -= heat/total_heat_capacity
 
 	update = TRUE
 
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index ac0ac32ae1c..04369c32521 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -23,7 +23,11 @@
 	var/datum/gas_mixture/pipe_air = return_air()
 
 	var/turf/local_turf = loc
-	if(istype(local_turf))
+	if(!istype(local_turf))
+		CRASH("Processing HE pipe not in a")
+	if(isspaceturf(local_turf))
+		radiate_heat_to_space(pipe_air, 2, 1) //the magic "2" is the surface area in square meters.
+	else
 		if(islava(local_turf))
 			environment_temperature = 5000 //Yuck
 		else if(local_turf.blocks_air)
@@ -31,10 +35,9 @@
 		else
 			var/turf/open/open_local = local_turf
 			environment_temperature = open_local.return_temperature()
-	else
-		environment_temperature = local_turf.temperature
-	if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference)
-		parent.temperature_interact(local_turf, volume, thermal_conductivity)
+
+		if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference)
+			parent.temperature_interact(local_turf, volume, thermal_conductivity)
 
 
 	//heatup/cooldown any mobs buckled to ourselves based on our temperature
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index c4d6cef1498..c96ad8f415c 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -233,13 +233,13 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 	gas_type = GAS_OXYGEN
 	greyscale_config = /datum/greyscale_config/canister/stripe
 	greyscale_colors = "#2786e5#e8fefe"
-/*
+
 /obj/machinery/portable_atmospherics/canister/pluoxium
 	name = "Pluoxium canister"
-	gas_type = /datum/gas/pluoxium
+	gas_type = GAS_PLUOXIUM
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#2786e5"
-
+/*
 /obj/machinery/portable_atmospherics/canister/proto_nitrate
 	name = "Proto Nitrate canister"
 	gas_type = /datum/gas/proto_nitrate
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index a3622673254..3f6fff19940 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -69,90 +69,58 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 	var/gas_change_rate = 0.05
 	///The list of gases we will be interacting with in process_atoms()
 	var/list/gases_we_care_about = list(
-		/datum/gas/oxygen,
-		/datum/gas/water_vapor,
-		/datum/gas/plasma,
-		/datum/gas/carbon_dioxide,
-		/datum/gas/nitrous_oxide,
-		/datum/gas/nitrogen,
-		/datum/gas/pluoxium,
-		/datum/gas/tritium,
-		/datum/gas/bz,
-		/datum/gas/freon,
-		/datum/gas/hydrogen,
-		/datum/gas/healium,
-		/datum/gas/proto_nitrate,
-		/datum/gas/zauker,
-		/datum/gas/miasma
+		GAS_OXYGEN,
+		GAS_PLASMA,
+		GAS_CO2,
+		GAS_N2O,
+		GAS_NITROGEN,
+		GAS_TRITIUM,
+		GAS_HYDROGEN,
+		GAS_STEAM,
 	)
 	///The list of gases mapped against their current comp. We use this to calculate different values the supermatter uses, like power or heat resistance. It doesn't perfectly match the air around the sm, instead moving up at a rate determined by gas_change_rate per call. Ranges from 0 to 1
 	var/list/gas_comp = list(
-		/datum/gas/oxygen = 0,
-		/datum/gas/water_vapor = 0,
-		/datum/gas/plasma = 0,
-		/datum/gas/carbon_dioxide = 0,
-		/datum/gas/nitrous_oxide = 0,
-		/datum/gas/nitrogen = 0,
-		/datum/gas/pluoxium = 0,
-		/datum/gas/tritium = 0,
-		/datum/gas/bz = 0,
-		/datum/gas/freon = 0,
-		/datum/gas/hydrogen = 0,
-		/datum/gas/healium = 0,
-		/datum/gas/proto_nitrate = 0,
-		/datum/gas/zauker = 0,
+		GAS_OXYGEN = 0,
+		GAS_PLASMA = 0,
+		GAS_CO2 = 0,
+		GAS_N2O = 0,
+		GAS_NITROGEN = 0,
+		GAS_TRITIUM = 0,
+		GAS_HYDROGEN = 0,
+		GAS_STEAM = 0,
 	)
 	///The list of gases mapped against their transmit values. We use it to determine the effect different gases have on the zaps
 	var/list/gas_trans = list(
-		/datum/gas/oxygen = OXYGEN_TRANSMIT_MODIFIER,
-		/datum/gas/water_vapor = H2O_TRANSMIT_MODIFIER,
-		/datum/gas/plasma = PLASMA_TRANSMIT_MODIFIER,
-		/datum/gas/pluoxium = PLUOXIUM_TRANSMIT_MODIFIER,
-		/datum/gas/tritium = TRITIUM_TRANSMIT_MODIFIER,
-		/datum/gas/bz = BZ_TRANSMIT_MODIFIER,
-		/datum/gas/hydrogen = HYDROGEN_TRANSMIT_MODIFIER,
-		/datum/gas/healium = HEALIUM_TRANSMIT_MODIFIER,
-		/datum/gas/proto_nitrate = PROTO_NITRATE_TRANSMIT_MODIFIER,
-		/datum/gas/zauker = ZAUKER_TRANSMIT_MODIFIER,
+		GAS_OXYGEN = OXYGEN_TRANSMIT_MODIFIER,
+		GAS_PLASMA = PLASMA_TRANSMIT_MODIFIER,
+		GAS_TRITIUM = TRITIUM_TRANSMIT_MODIFIER,
+		GAS_HYDROGEN = HYDROGEN_TRANSMIT_MODIFIER,
+		GAS_STEAM = H2O_TRANSMIT_MODIFIER,
 	)
 	///The list of gases mapped against their heat penaltys. We use it to determin molar and heat output
 	var/list/gas_heat = list(
-		/datum/gas/oxygen = OXYGEN_HEAT_PENALTY,
-		/datum/gas/water_vapor = H2O_HEAT_PENALTY,
-		/datum/gas/plasma = PLASMA_HEAT_PENALTY,
-		/datum/gas/carbon_dioxide = CO2_HEAT_PENALTY,
-		/datum/gas/nitrogen = NITROGEN_HEAT_PENALTY,
-		/datum/gas/pluoxium = PLUOXIUM_HEAT_PENALTY,
-		/datum/gas/tritium = TRITIUM_HEAT_PENALTY,
-		/datum/gas/bz = BZ_HEAT_PENALTY,
-		/datum/gas/freon = FREON_HEAT_PENALTY,
-		/datum/gas/hydrogen = HYDROGEN_HEAT_PENALTY,
-		/datum/gas/healium = HEALIUM_HEAT_PENALTY,
-		/datum/gas/proto_nitrate = PROTO_NITRATE_HEAT_PENALTY,
-		/datum/gas/zauker = ZAUKER_HEAT_PENALTY,
+		GAS_OXYGEN = OXYGEN_HEAT_PENALTY,
+		GAS_PLASMA = PLASMA_HEAT_PENALTY,
+		GAS_CO2 = CO2_HEAT_PENALTY,
+		GAS_NITROGEN = NITROGEN_HEAT_PENALTY,
+		GAS_TRITIUM = TRITIUM_HEAT_PENALTY,
+		GAS_HYDROGEN = HYDROGEN_HEAT_PENALTY,
+		GAS_STEAM = H2O_HEAT_PENALTY,
 	)
 	///The list of gases mapped against their heat resistance. We use it to moderate heat damage.
 	var/list/gas_resist = list(
-		/datum/gas/nitrous_oxide = N2O_HEAT_RESISTANCE,
-		/datum/gas/hydrogen = HYDROGEN_HEAT_RESISTANCE,
-		/datum/gas/proto_nitrate = PROTO_NITRATE_HEAT_RESISTANCE,
+		GAS_N2O = N2O_HEAT_RESISTANCE,
+		GAS_HYDROGEN = HYDROGEN_HEAT_RESISTANCE,
 	)
 	///The list of gases mapped against their powermix ratio
 	var/list/gas_powermix = list(
-		/datum/gas/oxygen = 1,
-		/datum/gas/water_vapor = 1,
-		/datum/gas/plasma = 1,
-		/datum/gas/carbon_dioxide = 1,
-		/datum/gas/nitrogen = -1,
-		/datum/gas/pluoxium = -1,
-		/datum/gas/tritium = 1,
-		/datum/gas/bz = 1,
-		/datum/gas/freon = -1,
-		/datum/gas/hydrogen = 1,
-		/datum/gas/healium = 1,
-		/datum/gas/proto_nitrate = 1,
-		/datum/gas/zauker = 1,
-		/datum/gas/miasma = 0.5,
+		GAS_OXYGEN = 1,
+		GAS_STEAM = 1,
+		GAS_PLASMA = 1,
+		GAS_CO2 = 1,
+		GAS_NITROGEN = -1,
+		GAS_TRITIUM = 1,
+		GAS_HYDROGEN = 1,
 	)
 	///The last air sample's total molar count, will always be above or equal to 0
 	var/combined_gas = 0
@@ -254,7 +222,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 /obj/machinery/power/supermatter_crystal/Initialize(mapload)
 	. = ..()
 	uid = gl_uid++
-	SSair.start_processing_machine(src)
+	SSairmachines.start_processing_machine(src)
 	countdown = new(src)
 	countdown.start()
 	SSpoints_of_interest.make_point_of_interest(src)
@@ -288,7 +256,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 
 /obj/machinery/power/supermatter_crystal/Destroy()
 	investigate_log("has been destroyed.", INVESTIGATE_ENGINE)
-	SSair.stop_processing_machine(src)
+	SSairmachines.stop_processing_machine(src)
 	QDEL_NULL(radio)
 	QDEL_NULL(countdown)
 	if(is_main_engine && GLOB.main_supermatter_engine == src)
@@ -340,17 +308,17 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 
 	var/list/gasdata = list()
 
-	if(air.get_moles())
-		data["SM_moles"] = air.get_moles()
-		for(var/gasid in air.gases)
+	if(air.total_moles)
+		data["SM_moles"] = air.total_moles
+		for(var/gasid in air.gas)
 			gasdata.Add(list(list(
-			"name"= air.gases[gasid][GAS_META][META_GAS_NAME],
-			"amount" = round(100*air.gases[gasid][MOLES]/air.get_moles(),0.01))))
+			"name"= xgm_gas_data.name[air.gas[gasid]],
+			"amount" = round(100*air.gas[gasid]/air.total_moles,0.01))))
 
 	else
-		for(var/gasid in air.gases)
+		for(var/gasid in air.gas)
 			gasdata.Add(list(list(
-				"name"= air.gases[gasid][GAS_META][META_GAS_NAME],
+				"name"= xgm_gas_data.name[air.gas[gasid]],
 				"amount" = 0)))
 
 	data["gases"] = gasdata
diff --git a/code/modules/power/supermatter/supermatter_process.dm b/code/modules/power/supermatter/supermatter_process.dm
index d343f452258..1c273d6e643 100644
--- a/code/modules/power/supermatter/supermatter_process.dm
+++ b/code/modules/power/supermatter/supermatter_process.dm
@@ -22,7 +22,7 @@
 	var/datum/gas_mixture/removed
 	if(produces_gas)
 		//Remove gas from surrounding area
-		removed = env.remove(gasefficency * env.get_moles())
+		removed = env.remove(gasefficency * env.total_moles)
 	else
 		// Pass all the gas related code an empty gas container
 		removed = new()
@@ -35,21 +35,19 @@
 		else
 			psy_overlay = FALSE
 	damage_archived = damage
-	if(!removed || !removed.get_moles() || isspaceturf(local_turf)) //we're in space or there is no gas to process
+	if(!removed || !removed.total_moles || isspaceturf(local_turf)) //we're in space or there is no gas to process
 		if(takes_damage)
 			damage += max((power / 1000) * DAMAGE_INCREASE_MULTIPLIER, 0.1) // always does at least some damage
-		if(!istype(env, /datum/gas_mixture/immutable) && produces_gas && power) //There is no gas to process, but we are not in a space turf. Lets make them.
+		if(local_turf.simulated && produces_gas && power) //There is no gas to process, but we are not in a space turf. Lets make them.
 			//Power * 0.55 * a value between 1 and 0.8
 			var/device_energy = power * REACTION_POWER_MODIFIER * (1 - (psyCoeff * 0.2))
 			//Can't do stuff if it's null, so lets make a new gasmix.
 			removed = new()
 			//Since there is no gas to process, we will produce as if heat penalty is 1 and temperature at TCMB.
-			removed.assert_gases(/datum/gas/plasma, /datum/gas/oxygen)
 			removed.temperature = ((device_energy) / THERMAL_RELEASE_MODIFIER)
 			removed.temperature = max(TCMB, min(removed.temperature, 2500))
-			removed.gases[/datum/gas/plasma][MOLES] = max((device_energy) / PLASMA_RELEASE_MODIFIER, 0)
-			removed.gases[/datum/gas/oxygen][MOLES] = max(((device_energy + TCMB) - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
-			removed.garbage_collect()
+			removed.adjustGas(GAS_PLASMA, max((device_energy) / PLASMA_RELEASE_MODIFIER, 0), FALSE) //Don't update just yet
+			removed.adjustGas(GAS_OXYGEN, max(((device_energy + TCMB) - T0C) / OXYGEN_RELEASE_MODIFIER, 0), TRUE) //Now we update the mixture
 			env.merge(removed)
 			//air_update_turf(FALSE, FALSE)
 	else
@@ -59,14 +57,21 @@
 
 		//registers the current enviromental gases in the various lists and vars
 		setup_lists(removed)
+		AIR_UPDATE_VALUES(removed)
 		//some gases can have special interactions
 		special_gases_interactions(env, removed)
+		AIR_UPDATE_VALUES(removed)
+		AIR_UPDATE_VALUES(env)
 		//main power calculations proc
 		power_calculations(env, removed)
+		AIR_UPDATE_VALUES(removed)
+		AIR_UPDATE_VALUES(env)
 		//irradiate at this point
 		emit_radiation()
 		//handles temperature increase and gases made by the crystal
 		temperature_gas_production(env, removed)
+		AIR_UPDATE_VALUES(removed)
+		AIR_UPDATE_VALUES(env)
 
 	//handles hallucinations and the presence of a psychiatrist
 	psychological_examination()
@@ -127,7 +132,7 @@
 
 	//Check for holes in the SM inner chamber
 	for(var/turf/open/space/turf_to_check in RANGE_TURFS(1, loc))
-		if(LAZYLEN(turf_to_check.atmos_adjacent_turfs))
+		if(LAZYLEN(turf_to_check.get_atmos_adjacent_turfs()))
 			var/integrity = get_integrity_percent()
 			if(integrity < 10)
 				damage += clamp((power * 0.0005) * DAMAGE_INCREASE_MULTIPLIER, 0, MAX_SPACE_EXPOSURE_DAMAGE)
@@ -145,10 +150,6 @@
 	damage = min(damage_archived + (DAMAGE_HARDCAP * explosion_point),damage)
 
 /obj/machinery/power/supermatter_crystal/proc/setup_lists(datum/gas_mixture/removed)
-
-	for(var/gas_id in gases_we_care_about)
-		removed.assert_gas(gas_id)
-
 	//calculating gas related values
 	//Wanna know a secret? See that max() to zero? it's used for error checking. If we get a mol count in the negative, we'll get a divide by zero error //Old me, you're insane
 	combined_gas = max(removed.get_moles(), 0)
@@ -159,14 +160,14 @@
 	//Lets get the proportions of the gasses in the mix for scaling stuff later
 	//They range between 0 and 1
 	for(var/gas_id in gases_we_care_about)
-		gas_comp[gas_id] = clamp(removed.gases[gas_id][MOLES] / combined_gas, 0, 1)
+		gas_comp[gas_id] = clamp(removed.gas[gas_id] / combined_gas, 0, 1)
 
 	var/list/heat_mod = gases_we_care_about.Copy()
 	var/list/transit_mod = gases_we_care_about.Copy()
 	var/list/resistance_mod = gases_we_care_about.Copy()
 
-	var/h2obonus = 1 - (gas_comp[/datum/gas/water_vapor] * 0.25)//At max this value should be 0.75
-	freonbonus = (gas_comp[/datum/gas/freon] <= 0.03) //Let's just yeet power output if this shit is high
+	var/h2obonus = 1 - (gas_comp[GAS_STEAM] * 0.25)//At max this value should be 0.75
+	//freonbonus = (gas_comp[/datum/gas/freon] <= 0.03) //Let's just yeet power output if this shit is high
 
 
 	//No less then zero, and no greater then one, we use this to do explosions and heat to power transfer
@@ -196,30 +197,33 @@
 
 /obj/machinery/power/supermatter_crystal/proc/special_gases_interactions(datum/gas_mixture/env, datum/gas_mixture/removed)
 	//Miasma is really just microscopic particulate. It gets consumed like anything else that touches the crystal.
-	if(gas_comp[/datum/gas/miasma])
+	/*if(gas_comp[/datum/gas/miasma])
 		var/miasma_pp = env.returnPressure() * gas_comp[/datum/gas/miasma]
 		var/consumed_miasma = clamp(((miasma_pp - MIASMA_CONSUMPTION_PP) / (miasma_pp + MIASMA_PRESSURE_SCALING)) * (1 + (gasmix_power_ratio * MIASMA_GASMIX_SCALING)), MIASMA_CONSUMPTION_RATIO_MIN, MIASMA_CONSUMPTION_RATIO_MAX)
 		consumed_miasma *= gas_comp[/datum/gas/miasma] * combined_gas
 		if(consumed_miasma)
 			removed.gases[/datum/gas/miasma][MOLES] -= consumed_miasma
 			matter_power += consumed_miasma * MIASMA_POWER_GAIN
+	*/
 
 	//Let's say that the CO2 touches the SM surface and the radiation turns it into Pluoxium.
-	if(gas_comp[/datum/gas/carbon_dioxide] && gas_comp[/datum/gas/oxygen])
-		var/carbon_dioxide_pp = env.returnPressure() * gas_comp[/datum/gas/carbon_dioxide]
+	if(gas_comp[GAS_CO2] && gas_comp[GAS_OXYGEN])
+		var/carbon_dioxide_pp = env.returnPressure() * gas_comp[GAS_CO2]
 		var/consumed_carbon_dioxide = clamp(((carbon_dioxide_pp - CO2_CONSUMPTION_PP) / (carbon_dioxide_pp + CO2_PRESSURE_SCALING)), CO2_CONSUMPTION_RATIO_MIN, CO2_CONSUMPTION_RATIO_MAX)
-		consumed_carbon_dioxide = min(consumed_carbon_dioxide * gas_comp[/datum/gas/carbon_dioxide] * combined_gas, removed.gases[/datum/gas/carbon_dioxide][MOLES] * INVERSE(0.5), removed.gases[/datum/gas/oxygen][MOLES] * INVERSE(0.5))
+		consumed_carbon_dioxide = min(consumed_carbon_dioxide * gas_comp[GAS_CO2] * combined_gas, removed.gas[GAS_CO2] * INVERSE(0.5), removed.gas[GAS_OXYGEN] * INVERSE(0.5))
 		if(consumed_carbon_dioxide)
-			removed.gases[/datum/gas/carbon_dioxide][MOLES] -= consumed_carbon_dioxide * 0.5
-			removed.gases[/datum/gas/oxygen][MOLES] -= consumed_carbon_dioxide * 0.5
-			removed.gases[/datum/gas/pluoxium][MOLES] += consumed_carbon_dioxide * 0.25
+			removed.adjustGas(GAS_CO2, -consumed_carbon_dioxide * 0.5, FALSE)
+			removed.adjustGas(GAS_OXYGEN, -consumed_carbon_dioxide * 0.5, FALSE)
+			removed.adjustGas(GAS_PLUOXIUM, consumed_carbon_dioxide * 0.25, FALSE)
 
-	if(prob(gas_comp[/datum/gas/zauker]))
+	/*if(prob(gas_comp[/datum/gas/zauker]))
 		playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10)
 		supermatter_zap(src, 6, clamp(power * 2, 4000, 20000), ZAP_MOB_STUN, zap_cutoff = src.zap_cutoff, power_level = power, zap_icon = src.zap_icon)
+	*/
 
-	if(gas_comp[/datum/gas/bz] >= 0.4 && prob(30 * gas_comp[/datum/gas/bz]))
+	/*if(gas_comp[/datum/gas/bz] >= 0.4 && prob(30 * gas_comp[/datum/gas/bz]))
 		fire_nuclear_particle()        // Start to emit radballs at a maximum of 30% chance per tick
+	*/
 
 
 /obj/machinery/power/supermatter_crystal/proc/power_calculations(datum/gas_mixture/env, datum/gas_mixture/removed)
@@ -229,8 +233,8 @@
 	//Ramps up or down in increments of 0.02 up to the proportion of co2
 	//Given infinite time, powerloss_dynamic_scaling = co2comp
 	//Some value between 0 and 1
-	if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && gas_comp[/datum/gas/carbon_dioxide] > POWERLOSS_INHIBITION_GAS_THRESHOLD) //If there are more then 20 mols, and more then 20% co2
-		powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(gas_comp[/datum/gas/carbon_dioxide] - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1)
+	if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && gas_comp[GAS_CO2] > POWERLOSS_INHIBITION_GAS_THRESHOLD) //If there are more then 20 mols, and more then 20% co2
+		powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(gas_comp[GAS_CO2] - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1)
 	else
 		powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05, 0, 1)
 	//Ranges from 0 to 1(1-(value between 0 and 1 * ranges from 1 to 1.5(mol / 500)))
@@ -264,9 +268,10 @@
 	if(power && (last_power_zap + 4 SECONDS - (power * 0.001)) < world.time)
 		//(1 + (tritRad + pluoxDampen * bzDampen * o2Rad * plasmaRad / (10 - bzrads))) * freonbonus
 		playsound(src, 'sound/weapons/emitter2.ogg', 70, TRUE)
-		var/power_multiplier = max(0, (1 + (power_transmission_bonus / (10 - (gas_comp[/datum/gas/bz] * BZ_RADIOACTIVITY_MODIFIER)))) * freonbonus)// RadModBZ(500%)
+		//var/power_multiplier = max(0, (1 + (power_transmission_bonus / (10 - (gas_comp[/datum/gas/bz] * BZ_RADIOACTIVITY_MODIFIER)))) * freonbonus)// RadModBZ(500%)
+		var/power_multiplier = max(0, (1 + (power_transmission_bonus / 10)))
 		var/pressure_multiplier = max((1 / ((env.returnPressure() ** pressure_bonus_curve_angle) + 1) * pressure_bonus_derived_steepness) + pressure_bonus_derived_constant, 1)
-		var/co2_power_increase = max(gas_comp[/datum/gas/carbon_dioxide] * 2, 1)
+		var/co2_power_increase = max(gas_comp[GAS_CO2] * 2, 1)
 		supermatter_zap(
 			zapstart = src,
 			range = 3,
@@ -295,12 +300,12 @@
 
 	//Calculate how much gas to release
 	//Varies based on power and gas content
-	removed.gases[/datum/gas/plasma][MOLES] += max((device_energy * dynamic_heat_modifier) / PLASMA_RELEASE_MODIFIER, 0)
+	removed.adjustGas(GAS_PLASMA, max((device_energy * dynamic_heat_modifier) / PLASMA_RELEASE_MODIFIER, 0), FALSE)
 	//Varies based on power, gas content, and heat
-	removed.gases[/datum/gas/oxygen][MOLES] += max(((device_energy + removed.temperature * dynamic_heat_modifier) - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
+	removed.adjustGas(GAS_OXYGEN, max(((device_energy + removed.temperature * dynamic_heat_modifier) - T0C) / OXYGEN_RELEASE_MODIFIER, 0), FALSE)
 
 	if(produces_gas)
-		removed.garbage_collect()
+		AIR_UPDATE_VALUES(removed) //This might be a waste
 		env.merge(removed)
 		//air_update_turf(FALSE, FALSE)
 
@@ -334,9 +339,9 @@
 		return
 	var/range = 4
 	zap_cutoff = 1500
-	if(removed && removed.returnPressure() > 0 && removed.get_temperature() > 0)
+	if(removed && removed.returnPressure() > 0 && removed.temperature > 0)
 		//You may be able to freeze the zapstate of the engine with good planning, we'll see
-		zap_cutoff = clamp(3000 - (power * (removed.get_moles()) / 10) / removed.get_temperature(), 350, 3000)//If the core is cold, it's easier to jump, ditto if there are a lot of mols
+		zap_cutoff = clamp(3000 - (power * (removed.total_moles) / 10) / removed.temperature, 350, 3000)//If the core is cold, it's easier to jump, ditto if there are a lot of mols
 		//We should always be able to zap our way out of the default enclosure
 		//See supermatter_zap() for more details
 		range = clamp(power / removed.returnPressure() * 10, 2, 7)
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 4c033de1cd5..58f6ad6b352 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -1020,9 +1020,6 @@
 	if(cleanup)
 		cleanup_beam_segments()
 
-/obj/projectile/experience_pressure_difference()
-	return
-
 ///Like [/obj/item/proc/updateEmbedding] but for projectiles instead, call this when you want to add embedding or update the stats on the embedding element
 /obj/projectile/proc/updateEmbedding()
 	if(!shrapnel_type || !LAZYLEN(embedding))
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 6b31f2247e2..89a9280a677 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -233,7 +233,7 @@
 	id = "roastingstick"
 	build_type = PROTOLATHE | AWAY_LATHE
 	materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/bluespace = 250)
-	//build_path = /obj/item/melee/roastingstick
+	build_path = /obj/item/melee/roastingstick
 	category = list("Equipment")
 	departmental_flags = DEPARTMENTAL_FLAG_SERVICE
 
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 8ccf4824e59..ac392239b8d 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -115,19 +115,19 @@
 
 	var/gas_breathed = 0
 
-	//var/list/breath_gases = breath.gases
+	var/list/breath_gases = breath.gas
 	//Handle subtypes' breath processing
 	handle_gas_override(breather, breath, gas_breathed)
 
-	//Partial pressures in our breath
-	var/O2_moles = breath.gas[GAS_OXYGEN]
-	var/N2_moles = breath.gas[GAS_NITROGEN]
-	var/plasma_moles = breath.gas[GAS_PLASMA]
-	var/CO2_moles = breath.gas[GAS_CO2]
-	var/SA_moles = breath.gas[GAS_N2O]
-
+	//Molar count cache of our key gases
+	var/O2_moles = breath_gases[GAS_OXYGEN]
+	var/N2_moles = breath_gases[GAS_NITROGEN]
+	var/plasma_moles = breath_gases[GAS_PLASMA]
+	var/CO2_moles = breath_gases[GAS_CO2]
+	var/SA_moles = breath_gases[GAS_N2O]
 
-	var/O2_pp = breath.getBreathPartialPressure(O2_moles)//+(8*breath.getBreathPartialPressure(breath_gases[/datum/gas/pluoxium][MOLES]))
+	//Partial pressures in our breath
+	var/O2_pp = breath.getBreathPartialPressure(O2_moles) / max(1, (8 * breath.getBreathPartialPressure(breath_gases[GAS_PLUOXIUM])))
 	var/N2_pp = breath.getBreathPartialPressure(N2_moles)
 	var/Plasma_pp = breath.getBreathPartialPressure(plasma_moles)
 	var/CO2_pp = breath.getBreathPartialPressure(CO2_moles)
diff --git a/config/admins.txt b/config/admins.txt
index 9a6f0eb28a2..5f7377aa202 100644
--- a/config/admins.txt
+++ b/config/admins.txt
@@ -5,3 +5,5 @@
 #If SQL-based admin loading is enabled, admins listed here will always be loaded first and will override any duplicate entries in the database.
 
 Octus = Host
+Francinum = Host
+Gonenoculer5 = Host
\ No newline at end of file
diff --git a/pariah.dme b/pariah.dme
index b9214af28a5..88a04ea60b7 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -3793,13 +3793,11 @@
 #include "code\modules\power\singularity\field_generator.dm"
 #include "code\modules\power\singularity\narsie.dm"
 #include "code\modules\power\singularity\singularity.dm"
-/*
 #include "code\modules\power\supermatter\supermatter.dm"
 #include "code\modules\power\supermatter\supermatter_delamination.dm"
 #include "code\modules\power\supermatter\supermatter_hit_procs.dm"
 #include "code\modules\power\supermatter\supermatter_process.dm"
 #include "code\modules\power\supermatter\supermatter_radiation.dm"
-*/
 #include "code\modules\power\tesla\coil.dm"
 #include "code\modules\power\tesla\energy_ball.dm"
 /*

From 02d2c6045c5fa157ad14eb6087e5839f74b9b58e Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 6 Jun 2022 18:47:49 -0400
Subject: [PATCH 137/200] Hibernating scrubbers now appear as off

---
 code/modules/atmospherics/ZAS/Fire.dm                     | 5 +++--
 .../machinery/components/unary_devices/vent_scrubber.dm   | 8 +++++---
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 98c624883ed..46fb1b18a3f 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -482,8 +482,9 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			W.fire_act(adj_temp, adj_volume)
 
 /turf/closed/wall/adjacent_fire_act(turf/open/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
-	burn(adj_temp)
-	if(adj_temp > heat_capacity)
+	if(!uses_integrity)
+		burn(adj_temp)
+	else if (adj_temp > heat_capacity)
 		take_damage(log(Frand(0.9, 1.1) * (adj_temp - heat_capacity)), BURN)
 
 	return ..()
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 ed2b2fc3b6b..c3191132c5a 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -137,7 +137,7 @@
 		icon_state = "scrub_welded"
 		return
 
-	if(!nodes[1] || !on || !is_operational)
+	if(!nodes[1] || !on || !is_operational || !COOLDOWN_FINISHED(src, hibernating))
 		icon_state = "scrub_off"
 		return
 
@@ -205,8 +205,6 @@
 /obj/machinery/atmospherics/components/unary/vent_scrubber/process_atmos()
 	if(welded || !is_operational)
 		return
-//	if(!COOLDOWN_FINISHED(src, hibernating))
-//		return
 	if(!on || !nodes[1])
 		on = FALSE
 		return
@@ -224,6 +222,7 @@
 				should_cooldown = FALSE
 	if(should_cooldown)
 		COOLDOWN_START(src, hibernating, 15 SECONDS)
+	update_icon_nopipes()
 
 	return TRUE
 
@@ -261,6 +260,7 @@
 			//Remix the resulting gases
 			air_contents.merge(filtered_out)
 			update_parents()
+			return TRUE
 
 	else //Just siphoning all air
 
@@ -384,6 +384,8 @@
 	. = ..()
 	if(welded)
 		. += "It seems welded shut."
+	if(!COOLDOWN_FINISHED(src, hibernating))
+		. += span_notice("It is sleeping to conserve power.")
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/attack_alien(mob/user, list/modifiers)
 	if(!welded || !(do_after(user, 20, target = src)))

From 389b1ebf8c5ef954dd532c8e87cdcf5879ef987c Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 6 Jun 2022 18:58:35 -0400
Subject: [PATCH 138/200] Whoops. Forgot to stage the N2 tank changes.

---
 code/game/objects/items/tanks/n2_tanks.dm | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/code/game/objects/items/tanks/n2_tanks.dm b/code/game/objects/items/tanks/n2_tanks.dm
index b2dccb11363..bd6108c7a47 100644
--- a/code/game/objects/items/tanks/n2_tanks.dm
+++ b/code/game/objects/items/tanks/n2_tanks.dm
@@ -10,12 +10,10 @@
 	distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
 
 /obj/item/tank/internals/nitrogen/populate_gas()
-	air_contents.assert_gas(/datum/gas/nitrogen)
-	air_contents.gases[/datum/gas/nitrogen][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjustGas(GAS_NITROGEN, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/nitrogen/full/populate_gas()
-	air_contents.assert_gas(/datum/gas/nitrogen)
-	air_contents.gases[/datum/gas/nitrogen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjustGas(GAS_NITROGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/nitrogen/belt
 	icon_state = "nitrogen_extended"
@@ -26,8 +24,7 @@
 	supports_variations_flags = CLOTHING_VOX_VARIATION
 
 /obj/item/tank/internals/nitrogen/belt/full/populate_gas()
-	air_contents.assert_gas(/datum/gas/nitrogen)
-	air_contents.gases[/datum/gas/nitrogen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjustGas(GAS_NITROGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 
 /obj/item/tank/internals/nitrogen/belt/emergency
 	name = "emergency nitrogen tank"
@@ -36,6 +33,5 @@
 	volume = 3
 
 /obj/item/tank/internals/nitrogen/belt/emergency/populate_gas()
-	air_contents.assert_gas(/datum/gas/nitrogen)
-	air_contents.gases[/datum/gas/nitrogen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+	air_contents.adjustGas(GAS_NITROGEN, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
 

From dda2003658119d06dccb532907bbf6fcd0356871 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 6 Jun 2022 19:05:07 -0400
Subject: [PATCH 139/200] fix maps

---
 .../lavaland_surface_syndicate_base1/mistake_inevitable.dmm   | 2 +-
 _maps/RandomRuins/SpaceRuins/oldstation.dmm                   | 2 +-
 _maps/map_files/Deltastation/DeltaStation2.dmm                | 2 +-
 _maps/map_files/IceBoxStation/IceBoxStation.dmm               | 2 +-
 _maps/map_files/KiloStation/KiloStation.dmm                   | 2 +-
 _maps/map_files/MetaStation/MetaStation.dmm                   | 2 +-
 _maps/map_files/tramstation/tramstation.dmm                   | 2 +-
 _maps/shuttles/emergency_supermatter.dmm                      | 4 ++--
 code/modules/atmospherics/ZAS/atmos_primitives.dm             | 2 +-
 9 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
index b8c4064a653..d4d2b013a22 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_inevitable.dmm
@@ -243,7 +243,7 @@
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/testlab)
 "yO" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /obj/structure/window/reinforced/plasma/spawner,
 /turf/open/floor/engine,
 /area/ruin/syndicate_lava_base/testlab)
diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index 79c4ff94141..18746a4ecea 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -4771,7 +4771,7 @@
 /turf/open/floor/iron,
 /area/ruin/space/has_grav/ancientstation/charlie/hall)
 "mm" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /obj/structure/closet/crate/engineering{
 	name = "supermatter shard crate"
 	},
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 593e362a2d7..0bed26dc145 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -77256,7 +77256,7 @@
 /turf/open/floor/iron,
 /area/medical/virology)
 "uqa" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2,
 /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4,
 /turf/open/floor/engine,
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 66d5f9bedc8..8a405b5025f 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -39924,7 +39924,7 @@
 /turf/open/floor/iron/showroomfloor,
 /area/security/processing)
 "szM" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "szW" = (
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 00ec48f95a1..7a0e0fe54bf 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -47887,7 +47887,7 @@
 /turf/open/floor/wood,
 /area/service/lawoffice)
 "lGe" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "lGj" = (
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index ff8cb0cb369..fdd3688ada0 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -8961,7 +8961,7 @@
 /turf/open/floor/iron,
 /area/hallway/primary/port)
 "ctk" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "ctm" = (
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index e761e21cf3d..a0c53440362 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -42563,7 +42563,7 @@
 /turf/open/floor/iron/white,
 /area/science/explab)
 "nSy" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/engine,
 /area/engineering/supermatter)
 "nSQ" = (
diff --git a/_maps/shuttles/emergency_supermatter.dmm b/_maps/shuttles/emergency_supermatter.dmm
index d6e69b10923..34e20b2e027 100644
--- a/_maps/shuttles/emergency_supermatter.dmm
+++ b/_maps/shuttles/emergency_supermatter.dmm
@@ -104,7 +104,7 @@
 /turf/open/floor/plating,
 /area/shuttle/escape)
 "aB" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/plating,
 /area/shuttle/escape)
 "aD" = (
@@ -193,7 +193,7 @@
 /turf/open/floor/plating/airless,
 /area/shuttle/escape)
 "aV" = (
-/obj/machinery/power/obj/machinery/power/supermatter_crystal,
+/obj/machinery/power/supermatter_crystal,
 /turf/open/floor/plating/airless,
 /area/shuttle/escape)
 "aW" = (
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 2ca321410a4..4739a4357e9 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -515,7 +515,7 @@
 //surface - the surface area in m^2
 //exposed_surface_ratio - the proportion of the surface that is exposed to sunlight
 //thermal_conductivity - a multipler on the heat transfer rate. See OPEN_HEAT_TRANSFER_COEFFICIENT and friends
-/proc/get_thermal_radiation(var/surface_temperature, var/surface, var/exposed_surface_ratio, var/thermal_conductivity)
+/proc/get_thermal_radiation(surface_temperature, surface, exposed_surface_ratio, thermal_conductivity)
 	//*** Gain heat from sunlight, then lose heat from radiation.
 
 	// We only get heat from the star on the exposed surface area.

From 5632fad48f433f43680ef39ce7f2a4aad18f83c5 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 6 Jun 2022 21:01:32 -0400
Subject: [PATCH 140/200] re-adds SM monitor

---
 .../modular_computers/computers/item/tablet_presets.dm        | 4 ++--
 .../modular_computers/computers/machinery/console_presets.dm  | 2 +-
 code/modules/modular_computers/hardware/job_disk.dm           | 2 +-
 code/modules/power/supermatter/supermatter.dm                 | 4 ++--
 pariah.dme                                                    | 4 ++--
 5 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm
index ac0fc1da938..1bb4124fdf5 100644
--- a/code/modules/modular_computers/computers/item/tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/tablet_presets.dm
@@ -73,7 +73,7 @@
 	. = ..()
 	var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
 	hard_drive.store_file(new /datum/computer_file/program/alarm_monitor)
-	//hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
+	hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
 
 /obj/item/modular_computer/tablet/preset/advanced/security/Initialize(mapload)
 	. = ..()
@@ -93,7 +93,7 @@
 	. = ..()
 	var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
 	hard_drive.store_file(new /datum/computer_file/program/alarm_monitor)
-	//hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
+	hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
 
 /// Given to Nuke Ops members.
 /obj/item/modular_computer/tablet/nukeops/Initialize(mapload)
diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm
index 3263088816b..e2e79eed7d0 100644
--- a/code/modules/modular_computers/computers/machinery/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console_presets.dm
@@ -36,7 +36,7 @@
 	var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
 	hard_drive.store_file(new/datum/computer_file/program/power_monitor())
 	hard_drive.store_file(new/datum/computer_file/program/alarm_monitor())
-	//hard_drive.store_file(new/datum/computer_file/program/supermatter_monitor())
+	hard_drive.store_file(new/datum/computer_file/program/supermatter_monitor())
 
 // ===== RESEARCH CONSOLE =====
 /obj/machinery/modular_computer/console/preset/research
diff --git a/code/modules/modular_computers/hardware/job_disk.dm b/code/modules/modular_computers/hardware/job_disk.dm
index e2daf69dca7..528ed67a02a 100644
--- a/code/modules/modular_computers/hardware/job_disk.dm
+++ b/code/modules/modular_computers/hardware/job_disk.dm
@@ -22,7 +22,7 @@
 
 	if(disk_flags & DISK_POWER)
 		progs_to_store += new /datum/computer_file/program/power_monitor(src)
-		//progs_to_store += new /datum/computer_file/program/supermatter_monitor(src)
+		progs_to_store += new /datum/computer_file/program/supermatter_monitor(src)
 
 	if(disk_flags & DISK_ATMOS)
 		progs_to_store += new /datum/computer_file/program/atmosscan(src)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 3f6fff19940..45e07d5c08a 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -312,13 +312,13 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
 		data["SM_moles"] = air.total_moles
 		for(var/gasid in air.gas)
 			gasdata.Add(list(list(
-			"name"= xgm_gas_data.name[air.gas[gasid]],
+			"name"= xgm_gas_data.name[gasid],
 			"amount" = round(100*air.gas[gasid]/air.total_moles,0.01))))
 
 	else
 		for(var/gasid in air.gas)
 			gasdata.Add(list(list(
-				"name"= xgm_gas_data.name[air.gas[gasid]],
+				"name"= xgm_gas_data.name[gasid],
 				"amount" = 0)))
 
 	data["gases"] = gasdata
diff --git a/pariah.dme b/pariah.dme
index 1bf0e125819..f1282321eff 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -3671,8 +3671,8 @@
 #include "code\modules\modular_computers\file_system\programs\secureye.dm"
 #include "code\modules\modular_computers\file_system\programs\signaler.dm"
 #include "code\modules\modular_computers\file_system\programs\skill_tracker.dm"
-//#include "code\modules\modular_computers\file_system\programs\sm_monitor.dm"
-//#include "code\modules\modular_computers\file_system\programs\statusdisplay.dm"
+#include "code\modules\modular_computers\file_system\programs\sm_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\statusdisplay.dm"
 #include "code\modules\modular_computers\file_system\programs\techweb.dm"
 #include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
 #include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm"

From b0bc30cba03a42da283ff8bbc0355cae72e650c3 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 7 Jun 2022 13:59:14 -0400
Subject: [PATCH 141/200] Fixes scrubber runtime

---
 code/modules/atmospherics/machinery/portable/scrubber.dm | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index e7c8abbcee5..1d37ffebd47 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -71,11 +71,13 @@
 /obj/machinery/portable_atmospherics/scrubber/proc/scrub(datum/gas_mixture/mixture)
 	if(air_contents.returnPressure() >= overpressure_m * ONE_ATMOSPHERE)
 		return
+	if(!mixture.total_moles)
+		return
 
 	var/transfer_moles = min(1, volume_rate/mixture.volume)*mixture.total_moles
 
 	var/datum/gas_mixture/gas2scrub = mixture.remove(transfer_moles) // Remove part of the mixture to filter.
-	//var/datum/gas_mixture/filtered = new
+
 	if(!scrubbing)
 		return
 

From 9adb576c9e270b877da68e100c7aaa8a6f76a95b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 7 Jun 2022 16:01:51 -0400
Subject: [PATCH 142/200] Hopefully fixes magboots

---
 code/controllers/subsystem/airflow.dm | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index 5d2e11bd847..d3ba8a319e3 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -117,6 +117,8 @@ SUBSYSTEM_DEF(airflow)
 	if (airflow_speed)
 		airflow_speed = strength / max(get_dist(src, airflow_dest), 1)
 		return FALSE
+	if(!check_airflow_movable(strength))
+		return FALSE
 	if (airflow_dest == loc)
 		step_away(src, loc)
 	if (ismob(src))

From d52a0ee575b170559d1eb5d909aa7ef954429422 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 7 Jun 2022 19:21:36 -0400
Subject: [PATCH 143/200] Fixes

---
 code/__HELPERS/areas.dm                     | 2 +-
 code/game/objects/structures/false_walls.dm | 2 +-
 code/modules/atmospherics/ZAS/Airflow.dm    | 2 ++
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm
index a15767bb241..c4b814aed40 100644
--- a/code/__HELPERS/areas.dm
+++ b/code/__HELPERS/areas.dm
@@ -37,7 +37,7 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
 				return FALSE
 			var/static/list/cardinal_cache = list("[NORTH]"=TRUE, "[EAST]"=TRUE, "[SOUTH]"=TRUE, "[WEST]"=TRUE)
 			var/canpass
-			ATMOS_CANPASS_TURF(canpass, sourceT, checkT)
+			ATMOS_CANPASS_TURF(canpass, checkT, sourceT)
 			if(!cardinal_cache["[dir]"] || !canpass)
 				continue
 			found_turfs += checkT // Since checkT is connected, add it to the list to be processed
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 121425c57a0..172d42c5c39 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -61,7 +61,7 @@
 /obj/structure/falsewall/zas_canpass(turf/other)
 	if(QDELETED(src))
 		return AIR_ALLOWED
-	return density ? (AIR_BLOCKED|ZONE_BLOCKED) : ZONE_BLOCKED
+	return ZONE_BLOCKED
 
 /obj/structure/falsewall/update_icon(updates=ALL)//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
 	. = ..()
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 73050dd39c4..85280a16009 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -43,6 +43,8 @@ This entire system is an absolute mess.
 		return FALSE
 	if(body_position == LYING_DOWN) //Lying down protects you from Z A S M O M E N T S
 		return
+	if(HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) //Magboots
+		return FALSE
 
 	Knockdown(zas_settings.airflow_stun)
 	visible_message(

From fa61389d6844d40b66ce63d06aa7b40427ae1036 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 8 Jun 2022 15:23:37 -0400
Subject: [PATCH 144/200] EXPERIMENTAL: Smart Vents/Pipes

---
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |   7 ++-----
 .../atmospherics/ZAS/atmos_primitives.dm      |  10 ++++++++--
 .../components/unary_devices/vent_pump.dm     |   6 ++++++
 .../components/unary_devices/vent_scrubber.dm |  13 ++++++++++---
 .../components/idle2_cc_-_Copy.dmi            | Bin 0 -> 31546 bytes
 .../atmospherics/components/unary_devices.dmi | Bin 100872 -> 127851 bytes
 6 files changed, 26 insertions(+), 10 deletions(-)
 create mode 100644 icons/obj/atmospherics/components/idle2_cc_-_Copy.dmi

diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index 51aaa3f0563..c9f5b3c6bbc 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -47,11 +47,8 @@
 
 ///Sets the given gas id's mole count to the specified amount.
 /datum/gas_mixture/proc/setGasMoles(gasid, moles, update = TRUE, divide_among_group = FALSE)
-	if(moles == 0)
-		return
-
 	//Generally setGasMoles actions pre-calculate, just in case.
-	if(divide_among_group && group_multiplier != 1)
+	if(divide_among_group && group_multiplier != 1 && moles != 0)
 		gas[gasid] = moles/group_multiplier
 	else
 		gas[gasid] = moles
@@ -274,7 +271,7 @@
 
 	return removed
 
-///Removes a volume of gas from the mixture and returns a gas_mixture containing the removed air with the given volume/
+///Removes a volume of gas from the mixture and returns a gas_mixture containing the removed air with the given volume.
 /datum/gas_mixture/proc/removeVolume(removed_volume)
 	var/datum/gas_mixture/removed = removeRatio(removed_volume/(volume*group_multiplier), 1)
 	removed.volume = removed_volume
diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 4739a4357e9..2e49450a19c 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -38,7 +38,8 @@
 //transfer_moles - Limits the amount of moles to transfer. The actual amount of gas moved may also be limited by available_power, if given.
 //available_power - the maximum amount of power that may be used when moving gas. If null then the transfer is not limited by power.
 /proc/pump_gas(datum/gas_mixture/source, datum/gas_mixture/sink, transfer_moles = null, available_power = null)
-	if (source.total_moles < MINIMUM_MOLES_TO_PUMP) //if we can't transfer enough gas just stop to avoid further processing
+	if (source.total_moles < MINIMUM_MOLES_TO_PUMP)
+		sink.merge(source.remove(INFINITY))
 		return -1
 
 	if (isnull(transfer_moles))
@@ -116,13 +117,18 @@
 	var/list/specific_power_gas = list()	//the power required to remove one mole of pure gas, for each gas type
 	for (var/g in filtering)
 		if (source.gas[g] < MINIMUM_MOLES_TO_FILTER)
+			total_filterable_moles += source.gas[g] //Just get rid of it, ffs
 			continue
 
 		var/specific_power = calculate_specific_power_gas(g, source, sink)/ATMOS_FILTER_EFFICIENCY
 		specific_power_gas[g] = specific_power
 		total_filterable_moles += source.gas[g]
 
-	if (total_filterable_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
+	///Just transfer it, who really cares at a scale this small.
+	if (total_filterable_moles < MINIMUM_MOLES_TO_FILTER)
+		for(var/g in filtering)
+			source.setGasMoles(g, 0)
+			sink.adjustGasWithTemp(g, source.gas[g] * source.group_multiplier, source.temperature)
 		return -1
 
 	//now that we know the total amount of filterable gas, we can calculate the amount of power needed to scrub one mole of gas
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 8cf8e756e5b..53948d1ed43 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -81,6 +81,10 @@
 			icon_state = "vent_in-off"
 		return
 
+	if(!COOLDOWN_FINISHED(src, hibernating))
+		icon_state = "vent_hibernating"
+		return
+
 	if(icon_state == ("vent_out-off" || "vent_in-off" || "vent_off"))
 		if(pump_direction & RELEASING)
 			icon_state = "vent_out"
@@ -129,6 +133,8 @@
 		if(pump_direction && (pressure_checks&EXT_BOUND))
 			COOLDOWN_START(src, hibernating, 15 SECONDS)
 
+	update_icon_nopipes()
+
 /obj/machinery/atmospherics/components/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment)
 	var/pressure_delta = DEFAULT_PRESSURE_DELTA
 	var/environment_pressure = environment.returnPressure()
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 c3191132c5a..51f8ed022cd 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -137,11 +137,17 @@
 		icon_state = "scrub_welded"
 		return
 
-	if(!nodes[1] || !on || !is_operational || !COOLDOWN_FINISHED(src, hibernating))
+	if(!nodes[1] || !on || !is_operational)
 		icon_state = "scrub_off"
 		return
 
-	if(scrubbing & SCRUBBING)
+	if(!COOLDOWN_FINISHED(src, hibernating))
+		if(widenet)
+			icon_state = "scrub_wide_hibernating"
+		else
+			icon_state = "scrub_hibernating"
+
+	else if(scrubbing & SCRUBBING)
 		if(widenet)
 			icon_state = "scrub_wide"
 		else
@@ -240,6 +246,7 @@
 
 	if(scrubbing == SCRUBBING)
 		if(length(environment.gas & filter_types))
+			. = TRUE
 			///contains all of the gas we're sucking out of the tile, gets put into our parent pipenet
 			var/datum/gas_mixture/filtered_out = new
 			filtered_out.temperature = environment.temperature
@@ -260,7 +267,7 @@
 			//Remix the resulting gases
 			air_contents.merge(filtered_out)
 			update_parents()
-			return TRUE
+			return .
 
 	else //Just siphoning all air
 
diff --git a/icons/obj/atmospherics/components/idle2_cc_-_Copy.dmi b/icons/obj/atmospherics/components/idle2_cc_-_Copy.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..6e3cd7c45a97342a2c45ef0b81df9a285d81686b
GIT binary patch
literal 31546
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

literal 0
HcmV?d00001

diff --git a/icons/obj/atmospherics/components/unary_devices.dmi b/icons/obj/atmospherics/components/unary_devices.dmi
index 3350500fde9503b6589c5f41a04e9cba0c0817c0..e3215f57990e6a2291e65c55c1ddd430eac40671 100644
GIT binary patch
literal 127851
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
WWy$@O%Y|IvFwiwQU!;BW(f<ITO5_6o

literal 100872
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


From c985edfab3461ca7efbdec5960a033dd47c6d183 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 9 Jun 2022 02:03:48 -0400
Subject: [PATCH 145/200] Airflow tweaks and improvements

---
 code/controllers/subsystem/airflow.dm         |  4 +---
 code/modules/atmospherics/ZAS/Airflow.dm      | 22 ++++++++++---------
 .../atmospherics/ZAS/ConnectionGroup.dm       |  3 ++-
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index d3ba8a319e3..2e10b15d7ec 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -95,9 +95,7 @@ SUBSYSTEM_DEF(airflow)
 			continue
 
 		var/olddir = target.dir
-		//target.set_dir_on_move = FALSE
 		step_towards(target, target.airflow_dest)
-		//target.set_dir_on_move = TRUE
 		target.dir = olddir
 		target.airborne_acceleration++
 
@@ -117,7 +115,7 @@ SUBSYSTEM_DEF(airflow)
 	if (airflow_speed)
 		airflow_speed = strength / max(get_dist(src, airflow_dest), 1)
 		return FALSE
-	if(!check_airflow_movable(strength))
+	if(!check_airflow_movable(INFINITY)) //This is a hack but it works so im sure its fine
 		return FALSE
 	if (airflow_dest == loc)
 		step_away(src, loc)
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 85280a16009..f0db10f2d7a 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -26,27 +26,26 @@ This entire system is an absolute mess.
 	var/tmp/airflow_skip_speedcheck
 
 ///Applies the effects of the mob colliding with another movable due to airflow.
-/mob/proc/airflow_stun()
+/mob/proc/airflow_stun(delta_p)
 	return
 
-/mob/living/airflow_stun()
+/mob/living/airflow_stun(delta_p)
 	if(stat == 2)
 		return FALSE
+	if(pulledby || pulling)
+		return FALSE
 	if(last_airflow_stun > world.time - zas_settings.airflow_stun_cooldown)
-		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
 		return FALSE
 	if(!(status_flags & CANSTUN) && !(status_flags & CANKNOCKDOWN))
-		to_chat(src, "<span class='notice'>Air suddenly rushes past you, but you manage to keep your footing!</span>")
 		return FALSE
 	if(buckled)
-		to_chat(src, "<span class='notice'>Air suddenly rushes past you!</span>")
 		return FALSE
 	if(body_position == LYING_DOWN) //Lying down protects you from Z A S M O M E N T S
-		return
+		return FALSE
 	if(HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) //Magboots
 		return FALSE
 
-	Knockdown(zas_settings.airflow_stun)
+	Knockdown(zas_settings.airflow_stun * clamp((delta_p / zas_settings.airflow_stun_pressure), 1, 3))
 	visible_message(
 		span_danger("[src] is thrown to the floor by a gust of air!"),
 		span_danger("A sudden rush of air knocks you over!"),
@@ -55,10 +54,10 @@ This entire system is an absolute mess.
 
 	last_airflow_stun = world.time
 
-/mob/living/silicon/airflow_stun()
+/mob/living/silicon/airflow_stun(delta_p)
 	return
 
-/mob/living/simple_animal/slime/airflow_stun()
+/mob/living/simple_animal/slime/airflow_stun(delta_p)
 	return
 
 ///Checks to see if airflow can move this movable.
@@ -87,7 +86,7 @@ This entire system is an absolute mess.
 
 /obj/item/check_airflow_movable(n)
 	switch(w_class)
-		if(1,2)
+		if(0,1,2)
 			if(n < zas_settings.airflow_lightest_pressure) return 0
 		if(3)
 			if(n < zas_settings.airflow_light_pressure) return 0
@@ -107,6 +106,7 @@ This entire system is an absolute mess.
 			A.airflow_hit_act(src)
 		else if(istype(src, /mob/living/carbon/human))
 			to_chat(src, "<span class='notice'>You are pinned against [A] by airflow!</span>")
+			src:Stun(1 SECONDS) // :)
 		/*
 		If the turf of the atom we bumped is NOT dense, then we check if the flying object is dense.
 		We check the special var because flying objects gain density so they can Bump() objects.
@@ -128,9 +128,11 @@ This entire system is an absolute mess.
 
 ///Called when src collides with A during airflow
 /atom/movable/proc/airflow_hit(atom/A)
+	SHOULD_CALL_PARENT(TRUE)
 	airflow_speed = 0
 	airflow_dest = null
 	airborne_acceleration = 0
+	A.airflow_hit_act(src)
 
 /mob/living/airflow_hit(atom/A)
 	var/b_loss = AIRBORNE_DAMAGE(src)
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index f48bfccb9da..0eebe53c966 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -132,7 +132,8 @@ Class Procs:
 		//Check for knocking people over
 		if(ismob(M) && differential > zas_settings.airflow_stun_pressure)
 			if(M:status_flags & GODMODE) continue
-			M:airflow_stun()
+			if(!M:airflow_stun())
+				to_chat(M, "<span class='danger'>Air suddenly rushes past you!</span>")
 
 		if(M.check_airflow_movable(differential))
 			//Check for things that are in range of the midpoint turfs.

From 1c16d068b063fcbe24e16ff7e7cf8e2ff9cc9809 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 9 Jun 2022 16:21:34 -0400
Subject: [PATCH 146/200] TTVs should now function more

---
 code/__DEFINES/atmospherics/ZAS.dm            |  6 +++
 code/__DEFINES/dcs/signals/signals_object.dm  |  1 +
 code/__HELPERS/_logging.dm                    |  6 +--
 code/controllers/subsystem/airflow.dm         |  3 +-
 code/datums/components/pellet_cloud.dm        |  6 ++-
 code/game/objects/items/tanks/tanks.dm        | 45 ++++++++++++++++---
 code/modules/atmospherics/ZAS/ZAS_Settings.dm |  4 ++
 7 files changed, 59 insertions(+), 12 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 4121a6d7411..077bc0709ff 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -326,3 +326,9 @@ GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
 #define ATMOS_DEFAULT_VOLUME_FILTER 500 // L.
 #define ATMOS_DEFAULT_VOLUME_MIXER  500 // L.
 #define ATMOS_DEFAULT_VOLUME_PIPE   70  // L.
+
+///Bomb caps
+#define BOMBCAP_DVSTN_RADIUS (zas_settings.max_explosion_range / 4)
+#define BOMBCAP_HEAVY_RADIUS (zas_settings.max_explosion_range / 2)
+#define BOMBCAP_LIGHT_RADIUS (zas_settings.max_explosion_range)
+#define BOMBCAP_FLASH_RADIUS (zas_settings.max_explosion_range * 1.5)
diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm
index ef9610159e9..341879b4a7c 100644
--- a/code/__DEFINES/dcs/signals/signals_object.dm
+++ b/code/__DEFINES/dcs/signals/signals_object.dm
@@ -177,6 +177,7 @@
 #define COMSIG_MINE_TRIGGERED "minegoboom"
 ///from [/obj/structure/closet/supplypod/proc/preOpen]:
 #define COMSIG_SUPPLYPOD_LANDED "supplypodgoboom"
+#define COMSIG_TANK_SNOWFLAKE_PELLET_TRIGGER "ihatethiscodesomuch"
 
 ///from /obj/item/storage/book/bible/afterattack(): (mob/user, proximity)
 #define COMSIG_BIBLE_SMACKED "bible_smacked"
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 4d46d4e5a68..f2b6022dbbb 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -178,9 +178,9 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
 /// Logs the contents of the gasmix to the game log, prefixed by text
 /proc/log_atmos(text, datum/gas_mixture/mix)
 	var/message = text
-	message += "TEMP=[mix.get_temperature()],MOL=[mix.get_moles()],VOL=[mix.volume]"
-	for(var/key in mix.getGases())
-		message += "[key]=[mix.getGroupGas(key)];"
+	message += "TEMP=[mix.temperature] K, MOL=[mix.total_moles], VOL=[mix.volume]L"
+	for(var/key in mix.gas)
+		message += "[xgm_gas_data.name[key]]=[mix.gas[key]] moles;"
 	log_game(message)
 
 /proc/log_say(text)
diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index 2e10b15d7ec..6a3fb2e3fc0 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -15,6 +15,7 @@ SUBSYSTEM_DEF(airflow)
 	wait = 1
 	flags = SS_NO_INIT
 	priority = FIRE_PRIORITY_AIRFLOW
+	runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME
 
 	var/static/tmp/list/processing = list()
 	var/static/tmp/list/current = list()
@@ -115,7 +116,7 @@ SUBSYSTEM_DEF(airflow)
 	if (airflow_speed)
 		airflow_speed = strength / max(get_dist(src, airflow_dest), 1)
 		return FALSE
-	if(!check_airflow_movable(INFINITY)) //This is a hack but it works so im sure its fine
+	if(!check_airflow_movable(strength*10)) //Repel/Gotoairflowdest() divide the differential by a max of 10, so we're undoing that here
 		return FALSE
 	if (airflow_dest == loc)
 		step_away(src, loc)
diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm
index fdde1edbeca..f845c0f132f 100644
--- a/code/datums/components/pellet_cloud.dm
+++ b/code/datums/components/pellet_cloud.dm
@@ -55,7 +55,7 @@
 
 
 /datum/component/pellet_cloud/Initialize(projectile_type=/obj/item/shrapnel, magnitude=5)
-	if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent))
+	if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent) && !istype(parent, /obj/item/tank))
 		return COMPONENT_INCOMPATIBLE
 
 	if(magnitude < 1)
@@ -64,7 +64,7 @@
 
 	src.projectile_type = projectile_type
 
-	if(isammocasing(parent))
+	if(isammocasing(parent) || istype(parent, /obj/item/tank))
 		num_pellets = magnitude
 	else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent))
 		radius = magnitude
@@ -88,6 +88,8 @@
 		RegisterSignal(parent, COMSIG_MINE_TRIGGERED, .proc/create_blast_pellets)
 	else if(issupplypod(parent))
 		RegisterSignal(parent, COMSIG_SUPPLYPOD_LANDED, .proc/create_blast_pellets)
+	else if(istype(parent, /obj/item/tank))
+		RegisterSignal(parent, COMSIG_TANK_SNOWFLAKE_PELLET_TRIGGER, .proc/create_blast_pellets)
 
 /datum/component/pellet_cloud/UnregisterFromParent()
 	UnregisterSignal(parent, list(COMSIG_PARENT_PREQDELETED, COMSIG_PELLET_CLOUD_INIT, COMSIG_GRENADE_DETONATE, COMSIG_GRENADE_ARMED, COMSIG_MOVABLE_MOVED, COMSIG_MINE_TRIGGERED, COMSIG_ITEM_DROPPED))
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index d77e02a152d..b7d9a9a9665 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -264,7 +264,7 @@
 		return
 
 	//Allow for reactions
-	excited = (excited | air_contents.react(src))
+	excited = (excited | air_contents.react())
 	excited = (excited | handle_tolerances(delta_time))
 	excited = (excited | leaking)
 
@@ -324,19 +324,52 @@
 	if(!air_contents)
 		return ..()
 
+	var/turf/T = get_turf(src)
+	if(!T)
+		return ..()
+	T.hotspot_expose(air_contents.temperature, 70, 1)
+	T.assume_air(air_contents)
 	/// Handle fragmentation
 	var/pressure = air_contents.returnPressure()
 	if(pressure > TANK_FRAGMENT_PRESSURE)
 		if(!istype(loc, /obj/item/transfer_valve))
 			log_bomber(get_mob_by_key(fingerprintslast), "was last key to touch", src, "which ruptured explosively")
-		//Give the gas a chance to build up more pressure through reacting
-		air_contents.react(src)
+		//Give the gas a chance to build up more pressure through reacting. Alot.
+		air_contents.react()
+		air_contents.react()
+		air_contents.react()
+
 		pressure = air_contents.returnPressure()
 
 		// As of writing this this is calibrated to maxcap at 140L and 160atm.
-		var/power = (air_contents.volume * (pressure - TANK_FRAGMENT_PRESSURE)) / TANK_FRAGMENT_SCALE
-		log_atmos("[type] exploded with a power of [power] and a mix of ", air_contents)
-		dyn_explosion(src, power, flash_range = 1.5, ignorecap = FALSE)
+		var/strength = ((pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE)
+		var/mult = ((air_contents.volume/140)**(1/2)) * (air_contents.total_moles**2/3)/((29*0.64) **2/3)
+
+		log_atmos("[type] exploded with a power of [strength * mult] and a mix of ", air_contents)
+		explosion(
+			get_turf(loc),
+			round(min(BOMBCAP_DVSTN_RADIUS, ((mult)*strength)*0.15)),
+			round(min(BOMBCAP_HEAVY_RADIUS, ((mult)*strength)*0.35)),
+			round(min(BOMBCAP_LIGHT_RADIUS, ((mult)*strength)*0.80)),
+			round(min(BOMBCAP_FLASH_RADIUS, ((mult)*strength)*1.20)),
+		)
+		var/num_fragments = round(rand(8,10) * sqrt(strength * mult))
+		///Holy. Fucking. Shit. This is AGONIZING. Give me /obj/proc/fragmentate() PLEASE.
+		AddComponent(/datum/component/pellet_cloud, projectile_type = /obj/projectile/bullet/shrapnel, magnitude = num_fragments)
+		SEND_SIGNAL(src, COMSIG_TANK_SNOWFLAKE_PELLET_TRIGGER)
+
+	else if (pressure > TANK_RUPTURE_PRESSURE)
+		playsound(T, 'sound/weapons/gun/shotgun/shot.ogg', 20, 1)
+		visible_message("[icon2html(src, viewers(get_turf(src)))] <span class='danger'>\The [src] flies apart!</span>", "<span class='warning'>You hear a bang!</span>")
+
+		var/strength = 1+((pressure-TANK_LEAK_PRESSURE)/TANK_FRAGMENT_SCALE)
+
+		var/mult = (air_contents.total_moles**2/3)/((29*0.64) **2/3) //tanks appear to be experiencing a reduction on scale of about 0.64 total moles
+
+		var/num_fragments = round(rand(6,8) * sqrt(strength * mult)) //Less chunks, but bigger
+		AddComponent(/datum/component/pellet_cloud, projectile_type = /obj/projectile/bullet/shrapnel/mega, magnitude = num_fragments)
+		SEND_SIGNAL(src, COMSIG_TANK_SNOWFLAKE_PELLET_TRIGGER)
+
 	return ..()
 
 /obj/item/tank/proc/merging_information()
diff --git a/code/modules/atmospherics/ZAS/ZAS_Settings.dm b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
index f9975f0a122..53891545cc3 100644
--- a/code/modules/atmospherics/ZAS/ZAS_Settings.dm
+++ b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
@@ -73,3 +73,7 @@
 	var/connection_temperature_delta = 10
 	var/connection_temperature_delta_NAME = "Connections - Temperature Difference"
 	var/connection_temperature_delta_DESC = "The smallest temperature difference which will cause heat to travel through doors."
+
+	var/max_explosion_range = 14
+	var/max_explosion_range_NAME = "TTV Explosion Range Maximum"
+	var/max_explosion_range_DESC = "What it says on the tin"

From f6a329fbb2f59705c132a17be1b41981afa12d80 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 10 Jun 2022 14:17:09 -0400
Subject: [PATCH 147/200] writing

---
 code/game/objects/items/tanks/tanks.dm | 1 -
 code/modules/surgery/organs/ears.dm    | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index b7d9a9a9665..d8542985686 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -341,7 +341,6 @@
 
 		pressure = air_contents.returnPressure()
 
-		// As of writing this this is calibrated to maxcap at 140L and 160atm.
 		var/strength = ((pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE)
 		var/mult = ((air_contents.volume/140)**(1/2)) * (air_contents.total_moles**2/3)/((29*0.64) **2/3)
 
diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm
index 211a4555a2c..04489150731 100644
--- a/code/modules/surgery/organs/ears.dm
+++ b/code/modules/surgery/organs/ears.dm
@@ -10,7 +10,7 @@
 	healing_factor = STANDARD_ORGAN_HEALING
 	decay_factor = STANDARD_ORGAN_DECAY
 
-	low_threshold_passed = "<span class='info'>Your ears begin to resonate with an internal ring sometimes.</span>"
+	low_threshold_passed = "<span class='info'>Your ears begin to resonate with an internal ring.</span>"
 	now_failing = "<span class='warning'>You are unable to hear at all!</span>"
 	now_fixed = "<span class='info'>Noise slowly begins filling your ears once more.</span>"
 	low_threshold_cleared = "<span class='info'>The ringing in your ears has died down.</span>"

From 5e536aa0f13fd408643066f9d079c85fae5cd81d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 10 Jun 2022 15:34:45 -0400
Subject: [PATCH 148/200] Fixes fire runtime

---
 code/modules/atmospherics/machinery/components/tank.dm          | 2 +-
 code/modules/atmospherics/machinery/datum_pipeline.dm           | 2 +-
 .../atmospherics/machinery/portable/portable_atmospherics.dm    | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm
index 3f517833072..8ea5cf113d5 100644
--- a/code/modules/atmospherics/machinery/components/tank.dm
+++ b/code/modules/atmospherics/machinery/components/tank.dm
@@ -139,7 +139,7 @@
 	air_contents.adjustGas(gastype, moles_to_add)
 
 /obj/machinery/atmospherics/components/tank/process_atmos()
-	if(air_contents.react(src))
+	if(air_contents.react())
 		update_parents()
 
 	if(air_contents.returnPressure() > max_pressure)
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index 0db1d72042d..b1c0850f11e 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -36,7 +36,7 @@
 		return
 	reconcile_air()
 	//Only react if the mix has changed, and don't keep updating if it hasn't
-	update = air.react(src)
+	update = air.react()
 
 ///Preps a pipeline for rebuilding, insterts it into the rebuild queue
 /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base)
diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
index 8a19c6e46fe..4ffb3acd0d0 100644
--- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
+++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm
@@ -44,7 +44,7 @@
 
 /obj/machinery/portable_atmospherics/process_atmos()
 	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))
+		excited = (excited | air_contents.react())
 		if(!excited)
 			return PROCESS_KILL
 	excited = FALSE

From 378acac6525f400c4d35fa7d86ba0776bdb25e3d Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 11 Jun 2022 14:34:52 -0400
Subject: [PATCH 149/200] optimizations, gasgas bad

---
 code/modules/atmospherics/machinery/airalarm.dm             | 6 +++---
 .../machinery/components/unary_devices/vent_scrubber.dm     | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index ef635f0ce5e..bd60cf57d93 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -237,7 +237,7 @@
 	))
 	var/total_moles = environment.get_moles()
 	var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume
-	for(var/gas_id in environment.getGases())
+	for(var/gas_id in environment.gas)
 		if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
 			continue
 		cur_tlv = TLV[gas_id]
@@ -624,7 +624,7 @@
 	//cache for sanic speed (lists are references anyways)
 	var/list/cached_tlv = TLV
 
-	var/list/env_gases = environment.getGases()
+	var/list/env_gases = environment.gas
 	//var/partial_pressure = R_IDEAL_GAS_EQUATION * exposed_temperature / environment.volume
 
 	current_tlv = cached_tlv["pressure"]
@@ -994,7 +994,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 		pressure.set_output(round(environment.returnPressure()))
 		my_temperature.set_output(round(environment.temperature))
 		if(ispath(options_map[current_option]))
-			gas_amount.set_output(round(environment.getGases()[options_map[current_option]]))
+			gas_amount.set_output(round(environment.gas[options_map[current_option]]))
 		return
 
 	var/datum/tlv/settings = connected_alarm.TLV[options_map[current_option]]
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 51f8ed022cd..48e0e854e5f 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -252,7 +252,7 @@
 			filtered_out.temperature = environment.temperature
 
 			var/total_moles_to_remove = 0
-			for(var/gas in filter_types & environment.getGases())
+			for(var/gas in filter_types & environment.gas)
 				total_moles_to_remove += environment.gas[gas]
 
 			if(total_moles_to_remove == 0)//sometimes this gets non gc'd values

From be287e74fe8a4f1ad4ba5decec6a39cf5ad20b0a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 11 Jun 2022 15:09:50 -0400
Subject: [PATCH 150/200] Liquid plasma now has the proper atmos temp

---
 code/game/turfs/open/asteroid.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm
index b42fc44024a..74c1d36ac0a 100644
--- a/code/game/turfs/open/asteroid.dm
+++ b/code/game/turfs/open/asteroid.dm
@@ -191,7 +191,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt)
 
 /turf/open/lava/plasma/ice_moon
 	baseturfs = /turf/open/lava/plasma/ice_moon
-
+	initial_gas = ICEMOON_DEFAULT_ATMOS
 
 /turf/open/misc/asteroid/snow/ice
 	name = "icy snow"

From 584a3e02aff3fa8fa3417142201ce6217a9db21b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 15:43:27 -0400
Subject: [PATCH 151/200] fixes the implosion thingy

---
 code/game/objects/items/tanks/tanks.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index d8542985686..fa8c22424cb 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -346,7 +346,7 @@
 
 		log_atmos("[type] exploded with a power of [strength * mult] and a mix of ", air_contents)
 		explosion(
-			get_turf(loc),
+			src,
 			round(min(BOMBCAP_DVSTN_RADIUS, ((mult)*strength)*0.15)),
 			round(min(BOMBCAP_HEAVY_RADIUS, ((mult)*strength)*0.35)),
 			round(min(BOMBCAP_LIGHT_RADIUS, ((mult)*strength)*0.80)),

From af1bad6ddddec9a4b0f1962233a8dfbb706c8998 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 15:46:07 -0400
Subject: [PATCH 152/200] Fixes is_safe_turf

---
 code/datums/helper_datums/teleport.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index adb5e927175..8711afe571f 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -135,7 +135,7 @@
 	if(no_teleport && (destination_area.area_flags & NOTELEPORT))
 		return
 
-	var/datum/gas_mixture/floor_gases= floor_turf.return_air()?.getGases()
+	var/list/floor_gases= floor_turf.return_air()?.gas
 
 	if(!floor_gases)
 		return

From 09f5aae1ebf7b08877fa65eead7c93dd9fc9fe56 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 15:49:47 -0400
Subject: [PATCH 153/200] fixes is_safe_turf for real

---
 code/datums/helper_datums/teleport.dm | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 8711afe571f..3a96cf84a06 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -135,11 +135,13 @@
 	if(no_teleport && (destination_area.area_flags & NOTELEPORT))
 		return
 
-	var/list/floor_gases= floor_turf.return_air()?.gas
+	var/datum/gas_mixture/floor_gas = floor_turf.return_air()
 
-	if(!floor_gases)
+	if(!floor_gas)
 		return
 
+	var/list/floor_gases = floor_gas.gas
+
 	if(!(floor_gases[GAS_OXYGEN] >= 16))
 		return
 	if(floor_gases[GAS_PLASMA])
@@ -148,9 +150,9 @@
 		return
 
 	// Aim for goldilocks temperatures and pressure
-	if((floor_gases.temperature <= 270) || (floor_gases.temperature >= 360))
+	if((floor_gas.temperature <= 270) || (floor_gas.temperature >= 360))
 		return
-	var/pressure = floor_gases.returnPressure()
+	var/pressure = floor_gas.returnPressure()
 	if((pressure <= 20) || (pressure >= 550))
 		return
 

From f35d1c76d96d3e7e3d03de5c41310f522de0b0fd Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 15:55:27 -0400
Subject: [PATCH 154/200] misc tweaks

---
 code/__DEFINES/atmospherics/ZAS.dm         | 2 +-
 code/__HELPERS/atmospherics.dm             | 2 +-
 code/datums/elements/atmos_requirements.dm | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 077bc0709ff..aa644fe2a3e 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -15,7 +15,7 @@
 ///Air can pass through or into this turf, but zones may not merge with it. Will not block zone merges, if either zone is below ZONE_MIN_SIZE
 #define ZONE_BLOCKED (1<<1)
 
-///Zones with less than this many turfs will always merge, even if the connection is not direct
+///Zones with less than this many turfs will always merge, even if the connection is not direct, tons of micro zones are expensive!
 #define ZONE_MIN_SIZE 14
 
 ///Air can always pass
diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index 711c18f7fda..f1a1aeb8c48 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -41,7 +41,7 @@
 	)
 	if(!gasmix)
 		return
-	for(var/gas_path in gasmix.getGases())
+	for(var/gas_path in gasmix.gas)
 		.["gases"] += list(list(
 			"[gas_path]",
 			xgm_gas_data.name[gas_path],
diff --git a/code/datums/elements/atmos_requirements.dm b/code/datums/elements/atmos_requirements.dm
index 735c78e1230..ff86e1482b5 100644
--- a/code/datums/elements/atmos_requirements.dm
+++ b/code/datums/elements/atmos_requirements.dm
@@ -46,7 +46,7 @@
 	if(!open_turf.air && (atmos_requirements["min_oxy"] || atmos_requirements["min_tox"] || atmos_requirements["min_n2"] || atmos_requirements["min_co2"]))
 		return FALSE
 
-	var/datum/gas_mixture/open_turf_gases = open_turf.return_air().getGases()
+	var/list/open_turf_gases = open_turf.return_air().gas
 
 
 	var/plas = open_turf_gases[GAS_PLASMA]

From 78b666e23418b6f1a5ee52e19ee5f36f2b469ad0 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 16:13:33 -0400
Subject: [PATCH 155/200] vent pump examine

---
 .../machinery/components/unary_devices/vent_pump.dm             | 2 ++
 1 file changed, 2 insertions(+)

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 53948d1ed43..bc90b48e88e 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -305,6 +305,8 @@
 	. = ..()
 	if(welded)
 		. += "It seems welded shut."
+	if(!COOLDOWN_FINISHED(src, hibernating))
+		. += span_notice("It is sleeping to conserve power.")
 
 /obj/machinery/atmospherics/components/unary/vent_pump/power_change()
 	. = ..()

From d48b4243faa938f3bd7d82c58d695e0ba89f7650 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 22:03:19 -0400
Subject: [PATCH 156/200] HOW DID THIS FIX IT? WHAT? THE FUCK ?????

---
 code/__HELPERS/type2type.dm                   |  4 ++++
 code/game/machinery/doors/firedoor.dm         |  2 +-
 code/modules/atmospherics/ZAS/Connection.dm   |  2 +-
 .../atmospherics/ZAS/ConnectionGroup.dm       |  2 +-
 code/modules/atmospherics/ZAS/Turf.dm         | 19 +++++++++----------
 code/modules/atmospherics/ZAS/Zone.dm         |  2 +-
 code/modules/mapping/map_template.dm          | 11 -----------
 7 files changed, 17 insertions(+), 25 deletions(-)

diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 1a8c9a6886a..e0db3fa65b7 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -36,6 +36,10 @@
 			return "northwest"
 		if(SOUTHWEST)
 			return "southwest"
+		if(UP)
+			return "upwards"
+		if(DOWN)
+			return "downwards"
 		else
 	return
 
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 92216006308..6af333e0904 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -665,7 +665,7 @@
 	if(get_dir(loc, T) == dir)
 		return density ? (AIR_BLOCKED|ZONE_BLOCKED) : ZONE_BLOCKED
 	else
-		return  ZONE_BLOCKED
+		return ZONE_BLOCKED
 
 /obj/machinery/door/firedoor/heavy
 	name = "heavy firelock"
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index fb8a596bdf2..80c20b582a9 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -62,7 +62,7 @@ Class Procs:
 
 	#ifdef ZASDBG
 	///Set to true during testing to get verbose debug information
-	var/verbose = FALSE
+	var/tmp/verbose = FALSE
 	#endif
 
 /connection/New(turf/A, turf/B)
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 0eebe53c966..2517abe2bec 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -68,7 +68,7 @@ Class Procs:
 
 	#ifdef ZASDBG
 	///Set this to TRUE during testing to get verbose debug information.
-	var/verbose = FALSE
+	var/tmp/verbose = FALSE
 	#endif
 
 /connection_edge/New()
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index aaa2836b0e2..5d91fe83ccc 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -17,7 +17,7 @@
 	var/list/initial_gas
 #ifdef ZASDBG
 	///Set to TRUE during debugging to get chat output on the atmos status of this turf
-	var/verbose = FALSE
+	var/tmp/verbose = FALSE
 #endif
 
 ///Adds the graphic_add list to vis_contents, removes graphic_remove.
@@ -244,27 +244,26 @@
 			postponed.Add(target)
 
 	if(!TURF_HAS_VALID_ZONE(src)) //Still no zone, make a new one.
-		var/zone/newzone = new/zone()
+		var/zone/newzone = new
 		newzone.add_turf(src)
 
 	#ifdef ZASDBG
 		dbg(zasdbgovl_created)
+		if(verbose)
+			zas_log("New zone created for src.")
 
 	ASSERT(zone)
 	#endif
 
 	//At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug.
 
-	for(var/turf/T in postponed)
+	for(var/turf/T as anything in postponed)
 		if(T.zone == src.zone)
 			#ifdef ZASDBG
 			if(verbose)
 				zas_log("This turf tried to merge into itself! Current type: [src.type]")
-
-			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
-			#else
-			return //THIS BUG IS SMALL ENOUGH THAT IT IS FINE FOR NOW. I WILL FIX IT IN THE FUTURE.
 			#endif
+			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
 		SSzas.connect(src, T)
 
 /turf/proc/post_update_air_properties()
@@ -378,9 +377,9 @@
 ///Returns a list of adjacent turfs that can contain air. Returns null if none.
 /turf/proc/get_atmos_adjacent_turfs()
 	var/list/adjacent_turfs = list()
-	for(var/dir in GLOB.cardinals)
-		if(open_directions & dir)
-			adjacent_turfs += get_step(src, dir)
+	for(var/direct in GLOB.cardinals)
+		if(open_directions & direct)
+			adjacent_turfs += get_step(src, direct)
 	return length(adjacent_turfs) ? adjacent_turfs : null
 
 /turf/open/return_analyzable_air()
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index f1270bc8d4b..79fddf11563 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -180,7 +180,7 @@ Class Procs:
 
 	// Update gas overlays.
 	if(air.checkTileGraphic(graphic_add, graphic_remove))
-		for(var/turf/open/T in contents)
+		for(var/turf/T in contents)
 			if(T.simulated)
 				T.update_graphic(graphic_add, graphic_remove)
 		graphic_add.len = 0
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index b2398487777..aca8c8d2103 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -154,17 +154,6 @@
 	if(T.y+height > world.maxy)
 		return
 
-	/*var/list/border = block(locate(max(T.x-1, 1), max(T.y-1, 1),  T.z),
-							locate(min(T.x+width+1, world.maxx), min(T.y+height+1, world.maxy), T.z))*/\
-	#ifdef ZASDBG
-	stack_trace("This is a reminder that kapu touched this code")
-	#endif
-	/*
-	for(var/L in border)
-		var/turf/turf_to_disable = L
-		SSair.remove_from_active(turf_to_disable) //stop processing turfs along the border to prevent runtimes, we return it in initTemplateBounds()
-		turf_to_disable.atmos_adjacent_turfs?.Cut()
-	*/
 	SSzas.can_fire = FALSE
 	// Accept cached maps, but don't save them automatically - we don't want
 	// ruins clogging up memory for the whole round.

From a82178c452925634a24054015f9cef141565300e Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 22:49:06 -0400
Subject: [PATCH 157/200] Fuck it. This is fine.

---
 code/controllers/subsystem/zas.dm | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 725c03eb5d1..d469bc188fe 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -397,7 +397,8 @@ SUBSYSTEM_DEF(zas)
 	ASSERT(A != B)
 	#endif
 	var/block = air_blocked(A,B)
-	if(block & AIR_BLOCKED) return
+	if(block & AIR_BLOCKED)
+		return
 
 	var/direct = !(block & ZONE_BLOCKED)
 	//var/space = istype(B, /turf/open/space)
@@ -406,7 +407,7 @@ SUBSYSTEM_DEF(zas)
 	if(!space)
 		if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0)))
 			merge(A.zone,B.zone)
-			return
+			return TRUE
 
 	var/a_to_b = get_dir(A,B)
 	var/b_to_a = get_dir(B,A)
@@ -432,6 +433,8 @@ SUBSYSTEM_DEF(zas)
 	if(direct)
 		c.mark_direct()
 
+	return TRUE
+
 ///Marks a turf for update.
 /datum/controller/subsystem/zas/proc/mark_for_update(turf/T)
 	#ifdef ZASDBG

From 136a9360632dbb69b1a7a43688673e4e5a986fd7 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 25 Jun 2022 22:49:16 -0400
Subject: [PATCH 158/200] oops

---
 code/modules/atmospherics/ZAS/Debug.dm |  6 +++---
 code/modules/atmospherics/ZAS/Turf.dm  | 10 ++++------
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Debug.dm b/code/modules/atmospherics/ZAS/Debug.dm
index b9e6b571f6a..22d92de2125 100644
--- a/code/modules/atmospherics/ZAS/Debug.dm
+++ b/code/modules/atmospherics/ZAS/Debug.dm
@@ -84,11 +84,11 @@ GLOBAL_REAL_VAR(list/zasdbgovl_dirzoneblock) = list(
 	return
 
 /turf/zas_log(string)
-	to_chat(world, "[span_admin("ZAS:")] Turf output of [src] at ([src.x], [src.y], [src.z]): [string]")
+	to_chat(world, "[span_admin("ZAS:")] ([src.x], [src.y], [src.z]): [string]")
 
 /connection/zas_log(string)
-	to_chat(world, "[span_admin("ZAS:")] Verbose connection output: [string]")
+	to_chat(world, "[span_admin("ZAS:")] connection output: [string]")
 
 /connection_edge/zas_log(string)
-	to_chat(world, "[span_admin("ZAS:")] Verbose connection edge output: [string]")
+	to_chat(world, "[span_admin("ZAS:")] connection edge output: [string]")
 #endif
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index 5d91fe83ccc..c545e53284a 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -257,15 +257,13 @@
 
 	//At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug.
 
+	//Loop through all previous connection attempts and try again
 	for(var/turf/T as anything in postponed)
-		if(T.zone == src.zone)
-			#ifdef ZASDBG
-			if(verbose)
-				zas_log("This turf tried to merge into itself! Current type: [src.type]")
-			#endif
-			CRASH("Turf in the postponed turflist shares a zone with src, aborting merge!") //Yes yes this is not a fix but atleast it keeps the warning
+		if(T.zone == src.zone) //Don't try to connect to yourself
+			continue
 		SSzas.connect(src, T)
 
+
 /turf/proc/post_update_air_properties()
 	if(connections)
 		connections.update_all()

From 751aa8fef2846d5d13c42fc9fc1fa84655b6b8ab Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 26 Jun 2022 21:25:23 -0400
Subject: [PATCH 159/200] please dont break anything thx

---
 code/__DEFINES/atmospherics/ZAS.dm                | 2 +-
 code/controllers/subsystem/zas.dm                 | 2 +-
 code/game/machinery/doors/firedoor.dm             | 2 +-
 code/game/machinery/doors/windowdoor.dm           | 2 +-
 code/game/objects/structures/windoor_assembly.dm  | 2 +-
 code/game/objects/structures/window.dm            | 2 +-
 code/modules/antagonists/blob/structures/_blob.dm | 4 ++--
 code/modules/atmospherics/ZAS/Turf.dm             | 8 ++------
 8 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index aa644fe2a3e..b7cee4f9ac9 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,5 +1,5 @@
 ///Enables verbose debugging and the debug overlay. NOTE: Debug Overlay does not report MultiZAS information at this time.
-//#define ZASDBG
+#define ZASDBG
 
 ///Enables multi-Z air movement. Zones do not merge across Z levels.
 #define MULTIZAS
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index d469bc188fe..16e88bb09b6 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -366,7 +366,7 @@ SUBSYSTEM_DEF(zas)
 	var/ablock
 	ATMOS_CANPASS_TURF(ablock, A, B)
 	if(ablock & AIR_BLOCKED)
-		return AIR_BLOCKED
+		return AIR_BLOCKED|ZONE_BLOCKED
 	ATMOS_CANPASS_TURF(., B, A)
 	return ablock | .
 
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 6af333e0904..5f92c5412b2 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -659,7 +659,7 @@
 		leaving.Bump(src)
 		return COMPONENT_ATOM_BLOCK_EXIT
 
-/obj/machinery/door/firedoor/border_only/zas_canpass(turf/T, vertical = FALSE)
+/obj/machinery/door/firedoor/border_only/zas_canpass(turf/T)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 3ee24b2a485..3456279f7b2 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -174,7 +174,7 @@
 
 	return TRUE
 
-/obj/machinery/door/window/zas_canpass(turf/T, vertical = FALSE)
+/obj/machinery/door/window/zas_canpass(turf/T)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 449a1480076..24115f9b8e6 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -70,7 +70,7 @@
 	if(istype(mover, /obj/structure/windoor_assembly) || istype(mover, /obj/machinery/door/window))
 		return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
 
-/obj/structure/windoor_assembly/zas_canpass(turf/T, vertical = FALSE)
+/obj/structure/windoor_assembly/zas_canpass(turf/T)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(get_dir(loc, T) == dir)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 0b3a9adf366..33f3dc2d8e2 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -359,7 +359,7 @@
 	update_nearby_tiles()
 	. = ..()
 
-/obj/structure/window/zas_canpass(turf/T, vertical = FALSE)
+/obj/structure/window/zas_canpass(turf/T)
 	if(QDELETED(src))
 		return AIR_ALLOWED
 	if(!anchored || !density)
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index df2b67c1b3d..379f99ac02b 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -98,10 +98,10 @@
 /obj/structure/blob/block_superconductivity()
 	return atmosblock
 
-/obj/structure/blob/zas_canpass(turf/T, vertical = FALSE)
+/obj/structure/blob/zas_canpass(turf/T)
 	if(QDELETED(src))
 		return AIR_ALLOWED
-	return atmosblock ? AIR_BLOCKED : AIR_ALLOWED
+	return atmosblock ? (AIR_BLOCKED|ZONE_BLOCKED) : AIR_ALLOWED
 
 /obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind.
 	. = ..()
diff --git a/code/modules/atmospherics/ZAS/Turf.dm b/code/modules/atmospherics/ZAS/Turf.dm
index c545e53284a..940fd90669a 100644
--- a/code/modules/atmospherics/ZAS/Turf.dm
+++ b/code/modules/atmospherics/ZAS/Turf.dm
@@ -209,9 +209,7 @@
 						#endif
 
 						//Postpone this tile rather than exit, since a connection can still be made.
-						if(!postponed)
-							postponed = list()
-						postponed.Add(sim_target)
+						LAZYADD(postponed, sim_target)
 
 					else
 						sim_target.zone.add_turf(src)
@@ -239,9 +237,7 @@
 			#endif
 		else
 			//Postponing connections to tiles until a zone is assured.
-			if(!postponed)
-				postponed = list()
-			postponed.Add(target)
+			LAZYADD(postponed, target)
 
 	if(!TURF_HAS_VALID_ZONE(src)) //Still no zone, make a new one.
 		var/zone/newzone = new

From 37147ac39e2b21e1b144a9fe04a3dc78b824495e Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 27 Jun 2022 00:52:52 -0400
Subject: [PATCH 160/200] disables debug

---
 code/__DEFINES/atmospherics/ZAS.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index b7cee4f9ac9..aa644fe2a3e 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -1,5 +1,5 @@
 ///Enables verbose debugging and the debug overlay. NOTE: Debug Overlay does not report MultiZAS information at this time.
-#define ZASDBG
+//#define ZASDBG
 
 ///Enables multi-Z air movement. Zones do not merge across Z levels.
 #define MULTIZAS

From ed15ed0d16a97185fb3be39a6b9ec3cd229f7448 Mon Sep 17 00:00:00 2001
From: Francinum <5572280+francinum@users.noreply.github.com>
Date: Wed, 29 Jun 2022 21:35:55 -0400
Subject: [PATCH 161/200] Remove multiline comments in the DME

---
 pariah.dme | 52 ++++++++++++++++++++++------------------------------
 1 file changed, 22 insertions(+), 30 deletions(-)

diff --git a/pariah.dme b/pariah.dme
index 80b83d6b94c..389f2c6b3e9 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -2309,16 +2309,14 @@
 #include "code\modules\asset_cache\assets\vv.dm"
 #include "code\modules\asset_cache\transports\asset_transport.dm"
 #include "code\modules\asset_cache\transports\webroot_transport.dm"
-/*
-#include "code\modules\atmospherics\environmental\LINDA_fire.dm"
-#include "code\modules\atmospherics\environmental\LINDA_system.dm"
-#include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm"
-#include "code\modules\atmospherics\gasmixtures\gas_mixture.dm"
-#include "code\modules\atmospherics\gasmixtures\gas_types.dm"
-#include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm"
-#include "code\modules\atmospherics\gasmixtures\reaction_factors.dm"
-#include "code\modules\atmospherics\gasmixtures\reactions.dm"
-*/
+// #include "code\modules\atmospherics\environmental\LINDA_fire.dm"
+// #include "code\modules\atmospherics\environmental\LINDA_system.dm"
+// #include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm"
+// #include "code\modules\atmospherics\gasmixtures\gas_mixture.dm"
+// #include "code\modules\atmospherics\gasmixtures\gas_types.dm"
+// #include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm"
+// #include "code\modules\atmospherics\gasmixtures\reaction_factors.dm"
+// #include "code\modules\atmospherics\gasmixtures\reactions.dm"
 #include "code\modules\atmospherics\machinery\airalarm.dm"
 #include "code\modules\atmospherics\machinery\atmosmachinery.dm"
 //#include "code\modules\atmospherics\machinery\bluespace_vendor.dm"
@@ -2335,22 +2333,18 @@
 #include "code\modules\atmospherics\machinery\components\binary_devices\temperature_pump.dm"
 #include "code\modules\atmospherics\machinery\components\binary_devices\valve.dm"
 #include "code\modules\atmospherics\machinery\components\binary_devices\volume_pump.dm"
-/*
-#include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer.dm"
-#include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer_reactions.dm"
-*/
+// #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer.dm"
+// #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer_reactions.dm"
 #include "code\modules\atmospherics\rust\fusion_reactions.dm"
-/*
-#include "code\modules\atmospherics\machinery\components\fusion\hfr_core.dm"
-#include "code\modules\atmospherics\machinery\components\fusion\hfr_defines.dm"
-#include "code\modules\atmospherics\machinery\components\fusion\hfr_fuel_datums.dm"
-#include "code\modules\atmospherics\machinery\components\fusion\hfr_main_processes.dm"
-#include "code\modules\atmospherics\machinery\components\fusion\hfr_parts.dm"
-#include "code\modules\atmospherics\machinery\components\fusion\hfr_procs.dm"
-#include "code\modules\atmospherics\machinery\components\gas_recipe_machines\atmos_machines_recipes.dm"
-#include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer.dm"
-#include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer_items.dm"
-*/
+// #include "code\modules\atmospherics\machinery\components\fusion\hfr_core.dm"
+// #include "code\modules\atmospherics\machinery\components\fusion\hfr_defines.dm"
+// #include "code\modules\atmospherics\machinery\components\fusion\hfr_fuel_datums.dm"
+// #include "code\modules\atmospherics\machinery\components\fusion\hfr_main_processes.dm"
+// #include "code\modules\atmospherics\machinery\components\fusion\hfr_parts.dm"
+// #include "code\modules\atmospherics\machinery\components\fusion\hfr_procs.dm"
+// #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\atmos_machines_recipes.dm"
+// #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer.dm"
+// #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer_items.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\mixer.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_devices.dm"
@@ -3818,11 +3812,9 @@
 #include "code\modules\power\supermatter\supermatter_radiation.dm"
 #include "code\modules\power\tesla\coil.dm"
 #include "code\modules\power\tesla\energy_ball.dm"
-/*
-#include "code\modules\power\turbine\turbine.dm"
-#include "code\modules\power\turbine\turbine_computer.dm"
-#include "code\modules\power\turbine\turbine_parts.dm"
-*/
+// #include "code\modules\power\turbine\turbine.dm"
+// #include "code\modules\power\turbine\turbine_computer.dm"
+// #include "code\modules\power\turbine\turbine_parts.dm"
 #include "code\modules\procedural_mapping\mapGenerator.dm"
 #include "code\modules\procedural_mapping\mapGeneratorModule.dm"
 #include "code\modules\procedural_mapping\mapGeneratorObj.dm"

From 8ca70b7511b3cac8d1ddf8cb4b8dd00b78029940 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 1 Jul 2022 21:32:10 -0400
Subject: [PATCH 162/200] runtime fix

---
 code/modules/mob/living/life.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 0b3de9b55b8..c3294b190c1 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -121,7 +121,7 @@
 		extinguish_mob()
 		return TRUE //mob was put out, on_fire = FALSE via extinguish_mob(), no need to update everything down the chain.
 	var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
-	if(!G.hasGas(GAS_OXYGEN, 1))
+	if(!G?.hasGas(GAS_OXYGEN, 1))
 		extinguish_mob() //If there's no oxygen in the tile we're on, put out the fire
 		return TRUE
 	var/turf/location = get_turf(src)

From 07f9b136f2e4e42aead233b8e2f57d45ba40c5f7 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Fri, 1 Jul 2022 23:22:13 -0400
Subject: [PATCH 163/200] Tries to fix knockdown, and buffs extinguisher
 cooling

---
 code/game/objects/effects/effect_system/effects_water.dm | 2 +-
 code/modules/atmospherics/ZAS/Airflow.dm                 | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm
index c7e4da45759..9bfce3659f0 100644
--- a/code/game/objects/effects/effect_system/effects_water.dm
+++ b/code/game/objects/effects/effect_system/effects_water.dm
@@ -14,7 +14,7 @@
 /obj/effect/particle_effect/water/Move(turf/newloc)
 	//WOW. OKAY. THIS IS REALLY HACKY. THIS NEEDS TO BE STANDARDIZED.
 	var/datum/gas_mixture/env = get_step(src, 0)?.return_air()
-	var/diff_temp = (temperature - env.temperature) / env.group_multiplier / 4 //MAGIC NUMBER ALERT!!!!!!!
+	var/diff_temp = (temperature - env.temperature) / env.group_multiplier / 2 //MAGIC NUMBER ALERT!!!!!!!
 	if(abs(diff_temp) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		var/altered_temp = max(env.temperature + (ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT * diff_temp), 0)
 		env.temperature = (diff_temp > 0) ? min(temperature, altered_temp) : max(temperature, altered_temp)
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index f0db10f2d7a..6cc76ddb73f 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -44,6 +44,8 @@ This entire system is an absolute mess.
 		return FALSE
 	if(HAS_TRAIT(src, TRAIT_NEGATES_GRAVITY)) //Magboots
 		return FALSE
+	if(IsKnockdown()) //Uhhh maybe?
+		return FALSE
 
 	Knockdown(zas_settings.airflow_stun * clamp((delta_p / zas_settings.airflow_stun_pressure), 1, 3))
 	visible_message(

From 296f0c9207851645929f8d1ce224e54847157f41 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 00:19:31 -0400
Subject: [PATCH 164/200] help me debug pls

---
 code/modules/unit_tests/breath.dm | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index bd3e16becab..97cde0e0658 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -67,8 +67,19 @@
 	to_fill.make_air()
 
 	lab_rat.breathe()
+	var/list/reason
+	if(lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN))
+		if(!to_fill.return_air())
+			return Fail("Assertion Failed: Turf failed to return air. Type: [to_fill.type], Initial Gas: [json_encode(to_fill.initial_gas)]")
 
-	TEST_ASSERT(!lab_rat.has_alert(ALERT_NOT_ENOUGH_OXYGEN), "Ashwalkers can't get a full breath from the Lavaland's initial_gas on a turf")
+		var/datum/gas_mixture/turf_gas = to_fill.return_air()
+		LAZYADD(reason, "Turf mix: [json_encode(turf_gas.gas)] | T: [turf_gas.temperature] | P: [turf_gas.returnPressure()]")
+
+		if(lab_rat.loc != to_fill)
+			LAZYADD(reason, "Rat was not located on it's intended turf!")
+
+	if(reason)
+		return Fail("Assertion Failed: [reason.Join(";")]", __FILE__, __LINE__)
 
 /datum/unit_test/breath_sanity_ashwalker/Destroy()
 	//Reset initial_gas to avoid future issues on other tests

From f0c9001a14ec0209284567528d1dca1be8915cbf Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 14:09:23 -0400
Subject: [PATCH 165/200] "air" is now a valid label for canisers

---
 code/game/machinery/spaceheater.dm                       | 2 +-
 code/modules/atmospherics/machinery/portable/canister.dm | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 59b80cbf08b..834ae74c42e 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -82,7 +82,7 @@
 
 /obj/machinery/space_heater/process_atmos()
 	if(!on || !is_operational)
-		if (on) // If it's broken, turn it off too
+		if(on) // If it's broken, turn it off too
 			on = FALSE
 		return PROCESS_KILL
 
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index c96ad8f415c..2204a2b62de 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		GAS_ARGON = /obj/machinery/portable_atmospherics/canister/argon,
 		GAS_CHLORINE = /obj/machinery/portable_atmospherics/canister/chlorine,
 		GAS_NEON = /obj/machinery/portable_atmospherics/canister/neon,
+		"air" = /obj/machinery/portable_atmospherics/canister/air,
 		/*"nitrium" = /obj/machinery/portable_atmospherics/canister/nitrium,
 		"bz" = /obj/machinery/portable_atmospherics/canister/bz,
 		"air" = /obj/machinery/portable_atmospherics/canister/air,

From 1cddb4396d1ad006d95204cc12f3a9cdea36b87a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 15:04:37 -0400
Subject: [PATCH 166/200] filter changes

---
 code/__DEFINES/atmospherics/ZAS.dm            |  2 +-
 .../atmospherics/machinery/airalarm.dm        |  4 ++--
 .../components/trinary_devices/filter.dm      |  2 +-
 .../machinery/portable/scrubber.dm            |  2 +-
 code/modules/power/smes.dm                    |  4 ++--
 tgui/packages/tgui/constants.js               | 20 ++++++++++++++++++-
 6 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index aa644fe2a3e..ed6728175b6 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -309,7 +309,7 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 //TG GASES - PLAN TO REMOVE
 #define GAS_PLUOXIUM			"pluoxium"
 
-GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
+GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_PLUOXIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
 GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
 GLOBAL_LIST_INIT(noble_gases, list(GAS_HELIUM, GAS_ARGON, GAS_NEON, GAS_KRYPTON))
 
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index bd60cf57d93..a13bc6ec031 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -312,7 +312,7 @@
 		thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "warning_max", "selected" = selected.warning_max))
 		thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "hazard_max", "selected" = selected.hazard_max))
 
-		for(var/gas_id in GLOB.all_gases)
+		for(var/gas_id in GLOB.all_gases - GAS_ALIEN)
 			if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
 				continue
 			selected = TLV[gas_id]
@@ -476,7 +476,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"set_filters" = GLOB.all_gases,
+					"set_filters" = GLOB.all_gases - GAS_ALIEN,
 					"scrubbing" = 1,
 					"widenet" = 1
 				), signal_source)
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 14c3824a143..924f2e6b9c2 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -139,7 +139,7 @@
 	data["max_rate"] = round(MAX_TRANSFER_RATE)
 
 	data["filter_types"] = list()
-	for(var/gas in GLOB.common_gases)
+	for(var/gas in GLOB.all_gases - GAS_ALIEN)
 		data["filter_types"] += list(list("name" = xgm_gas_data.name[gas], "gas_id" = gas, "enabled" = (gas in filter_type)))
 
 	return data
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 1d37ffebd47..063003cd82d 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -112,7 +112,7 @@
 
 	data["id_tag"] = -1 //must be defined in order to reuse code between portable and vent scrubbers
 	data["filter_types"] = list()
-	for(var/gas_id in GLOB.common_gases)
+	for(var/gas_id in GLOB.all_gases - GAS_ALIEN)
 		data["filter_types"] += list(list("gas_id" = gas_id, "gas_name" = gas_id, "enabled" = (gas_id in scrubbing)))
 
 	if(holding)
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index dffba8c22a6..cbf48d67cf8 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -15,7 +15,7 @@
 #define SMES_INPUT_ATTEMPT 9
 
 /obj/machinery/power/smes
-	name = "power storage unit"
+	name = "\improper SMES unit"
 	desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."
 	icon_state = "smes"
 	density = TRUE
@@ -408,7 +408,7 @@
 	log_smes()
 
 /obj/machinery/power/smes/engineering
-	charge = 2e6 // Engineering starts with some charge for singulo //sorry little one, singulo as engine is gone
+	charge = 5e6 // Engineering starts with some charge for singulo //sorry little one, singulo as engine is gone //ZAS supermatter takes longer to set up so you get max.
 	output_level = 90000
 
 /obj/machinery/power/smes/magical
diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index 482560f90b6..5fdf75be9a6 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -164,7 +164,7 @@ const GASES = [
     'color': 'pink',
   },
   {
-    'id': 'steam',
+    'id': 'water',
     'name': 'Water Vapor',
     'label': 'H₂O',
     'color': 'lightsteelblue',
@@ -325,6 +325,24 @@ const GASES = [
     'label': 'SO₂',
     'color': 'maroon',
   },
+  {
+    'id': 'nitricoxide',
+    'name': 'Nitric Oxide',
+    'label': 'NO',
+    'color': 'maroon',
+  },
+  {
+    'id': 'deuterium',
+    'name': 'Deuterium',
+    'label': 'D',
+    'color': 'lightgrey',
+  },
+  {
+    'id': 'tritium',
+    'name': 'Tritium',
+    'label': '³H',
+    'color': 'limegreen',
+  },
 ];
 
 export const getGasLabel = (gasId, fallbackValue) => {

From 1ced23150f0184b0d00824b3f09aca19692c70c2 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 15:24:12 -0400
Subject: [PATCH 167/200] Fixes pluox and tritium :)

---
 tgui/packages/tgui/constants.js | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index 5fdf75be9a6..14fae459ea2 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -187,12 +187,6 @@ const GASES = [
     'label': 'Nitrodioxide',
     'color': 'brown',
   },
-  {
-    'id': 'tritium',
-    'name': 'Tritium',
-    'label': 'Tritium',
-    'color': 'limegreen',
-  },
   {
     'id': 'bz',
     'name': 'BZ',
@@ -202,7 +196,7 @@ const GASES = [
   {
     'id': 'pluox',
     'name': 'Pluoxium',
-    'label': 'Pluoxium',
+    'label': 'O₁₆',
     'color': 'mediumslateblue',
   },
   {

From bed3a58d64d5038a00e5019bee9c21bea47fb7dc Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 15:55:32 -0400
Subject: [PATCH 168/200] air alarms now have the full gas list + reordered

---
 code/__DEFINES/atmospherics/ZAS.dm            | 27 ++++++++++++++++++-
 .../atmospherics/machinery/airalarm.dm        |  3 +--
 .../components/unary_devices/vent_scrubber.dm |  2 +-
 3 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index ed6728175b6..03ddd83021f 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -309,7 +309,32 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 //TG GASES - PLAN TO REMOVE
 #define GAS_PLUOXIUM			"pluoxium"
 
-GLOBAL_LIST_INIT(all_gases, list(GAS_OXYGEN, GAS_CO2, GAS_CO, GAS_METHYL_BROMIDE, GAS_N2O, GAS_NITROGEN, GAS_NO, GAS_METHANE, GAS_ALIEN, GAS_HYDROGEN, GAS_DEUTERIUM, GAS_TRITIUM, GAS_PLUOXIUM, GAS_HELIUM, GAS_ARGON, GAS_KRYPTON, GAS_NEON, GAS_XENON, GAS_AMMONIA, GAS_CHLORINE, GAS_SULFUR, GAS_STEAM, GAS_PLASMA))
+///All gases in the game. The sorting of UIs like scrubbers will match this, so keep that in mind.
+GLOBAL_LIST_INIT(all_gases, list(
+	GAS_ALIEN,
+	GAS_OXYGEN,
+	GAS_NITROGEN,
+	GAS_CO2,
+	GAS_N2O,
+	GAS_PLASMA,
+	GAS_STEAM,
+	GAS_HYDROGEN,
+	GAS_DEUTERIUM,
+	GAS_TRITIUM,
+	GAS_PLUOXIUM,
+	GAS_HELIUM,
+	GAS_ARGON,
+	GAS_KRYPTON,
+	GAS_NEON,
+	GAS_XENON,
+	GAS_AMMONIA,
+	GAS_CHLORINE,
+	GAS_SULFUR,
+	GAS_METHANE,
+	GAS_CO,
+	GAS_NO,
+	GAS_METHYL_BROMIDE,
+))
 GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
 GLOBAL_LIST_INIT(noble_gases, list(GAS_HELIUM, GAS_ARGON, GAS_NEON, GAS_KRYPTON))
 
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index a13bc6ec031..c10a2a19e3e 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -967,8 +967,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 			"Temperature" = "temperature"
 		)
 
-		for(var/gas_id in GLOB.common_gases)
-			//component_options[GLOB.meta_gas_info[gas_id][META_GAS_NAME]] = gas_id2path(gas_id)
+		for(var/gas_id in GLOB.all_gases)
 			component_options |= gas_id
 	air_alarm_options = add_option_port("Air Alarm Options", component_options)
 	options_map = component_options
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 48e0e854e5f..7c02ca7b2b4 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -165,7 +165,7 @@
 		return FALSE
 
 	var/list/f_types = list()
-	for(var/gas_id in GLOB.common_gases)
+	for(var/gas_id in GLOB.all_gases - GAS_ALIEN)
 		f_types += list(list("gas_id" = gas_id, "gas_name" = gas_id, "enabled" = (gas_id in filter_types)))
 
 	var/datum/signal/signal = new(list(

From e99cdc143155435bb13464ef40ec8b40291b629a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 16:05:05 -0400
Subject: [PATCH 169/200] Re-orders common gas list

---
 code/__DEFINES/atmospherics/ZAS.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 03ddd83021f..648fa9551cf 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -335,7 +335,7 @@ GLOBAL_LIST_INIT(all_gases, list(
 	GAS_NO,
 	GAS_METHYL_BROMIDE,
 ))
-GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_CO2, GAS_N2O, GAS_PLASMA, GAS_NITROGEN))
+GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_NITROGEN, GAS_CO2, GAS_N2O, GAS_PLASMA,))
 GLOBAL_LIST_INIT(noble_gases, list(GAS_HELIUM, GAS_ARGON, GAS_NEON, GAS_KRYPTON))
 
 GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir

From e3bd197d07d64b1949667b2ebacfae1f8400213b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 16:09:29 -0400
Subject: [PATCH 170/200] Makes deuterium isotope 2

---
 tgui/packages/tgui/constants.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index 14fae459ea2..e7cb7a320da 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -328,7 +328,7 @@ const GASES = [
   {
     'id': 'deuterium',
     'name': 'Deuterium',
-    'label': 'D',
+    'label': '²H',
     'color': 'lightgrey',
   },
   {

From 25d1d235d0691fde3cfb4a731b579113a33f35e1 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 20:59:13 -0400
Subject: [PATCH 171/200] vent and scrubber controls now reset hibernation

---
 .../machinery/components/unary_devices/vent_pump.dm             | 2 ++
 .../machinery/components/unary_devices/vent_scrubber.dm         | 1 +
 2 files changed, 3 insertions(+)

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 bc90b48e88e..f3ad7ace8e2 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -212,6 +212,8 @@
 	if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
 		return
 
+	COOLDOWN_RESET(src, hibernating)
+
 	var/atom/signal_sender = signal.data["user"]
 
 	if("purge" in signal.data)
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 7c02ca7b2b4..dcfccb507e0 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -292,6 +292,7 @@
 /obj/machinery/atmospherics/components/unary/vent_scrubber/receive_signal(datum/signal/signal)
 	if(!is_operational || !signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
 		return
+	COOLDOWN_RESET(src, hibernating)
 
 	var/old_widenet = widenet
 	var/old_scrubbing = scrubbing

From 63f4312741d7291ab6a5d6e9172b295c0fc2d708 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 2 Jul 2022 22:10:46 -0400
Subject: [PATCH 172/200] Fixes portable scrubbers, changes to air alarms

---
 .../atmospherics/ZAS/atmos_primitives.dm      | 10 -----
 .../atmospherics/machinery/airalarm.dm        | 20 ++++-----
 .../components/unary_devices/vent_scrubber.dm | 44 +++++++------------
 .../machinery/portable/scrubber.dm            | 26 ++++-------
 .../tgui/interfaces/common/AtmosControls.js   | 12 ++---
 5 files changed, 40 insertions(+), 72 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/atmos_primitives.dm b/code/modules/atmospherics/ZAS/atmos_primitives.dm
index 2e49450a19c..161d371ef7e 100644
--- a/code/modules/atmospherics/ZAS/atmos_primitives.dm
+++ b/code/modules/atmospherics/ZAS/atmos_primitives.dm
@@ -150,16 +150,6 @@
 	if (total_transfer_moles < MINIMUM_MOLES_TO_FILTER) //if we cant transfer enough gas just stop to avoid further processing
 		return -1
 
-	/*
-	//Update flow rate var
-	if (istype(M, /obj/machinery/atmospherics))
-		var/obj/machinery/atmospherics/A = M
-		A.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
-	if (istype(M, /obj/machinery/portable_atmospherics))
-		var/obj/machinery/portable_atmospherics/P = M
-		P.last_flow_rate = (total_transfer_moles/source.total_moles)*source.volume //group_multiplier gets divided out here
-	*/
-
 	var/power_draw = 0
 	for (var/g in filtering)
 		var/transfer_moles = source.gas[g]
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index c10a2a19e3e..c0878c0cbfa 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -53,12 +53,12 @@
 
 #define AALARM_MODE_SCRUBBING 1
 #define AALARM_MODE_VENTING 2 //makes draught
-#define AALARM_MODE_PANIC 3 //like siphon, but stronger (enables widenet)
+#define AALARM_MODE_PANIC 3 //like siphon, but stronger (enables quicksucc)
 #define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing
 #define AALARM_MODE_OFF 5
 #define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents
 #define AALARM_MODE_SIPHON 7 //Scrubbers suck air
-#define AALARM_MODE_CONTAMINATED 8 //Turns on all filtering and widenet scrubbing.
+#define AALARM_MODE_CONTAMINATED 8 //Turns on all filtering and quicksucc scrubbing.
 #define AALARM_MODE_REFILL 9 //just like normal, but with triple the air output
 
 #define AALARM_REPORT_TIMEOUT 100
@@ -279,7 +279,7 @@
 					"long_name" = sanitize(long_name),
 					"power" = info["power"],
 					"scrubbing" = info["scrubbing"],
-					"widenet" = info["widenet"],
+					"quicksucc" = info["quicksucc"],
 					"filter_types" = info["filter_types"]
 				))
 		data["mode"] = mode
@@ -338,7 +338,7 @@
 			if(usr.has_unlimited_silicon_privilege && !wires.is_cut(WIRE_IDSCAN))
 				locked = !locked
 				. = TRUE
-		if("power", "toggle_filter", "widenet", "scrubbing", "direction")
+		if("power", "toggle_filter", "quicksucc", "scrubbing", "direction")
 			send_signal(device_id, list("[action]" = params["val"]), usr)
 			. = TRUE
 		if("excheck")
@@ -464,7 +464,7 @@
 					"power" = 1,
 					"set_filters" = list(GAS_CO2),
 					"scrubbing" = 1,
-					"widenet" = 0
+					"quicksucc" = 0
 				), signal_source)
 			for(var/device_id in my_area.air_vent_info)
 				send_signal(device_id, list(
@@ -478,7 +478,7 @@
 					"power" = 1,
 					"set_filters" = GLOB.all_gases - GAS_ALIEN,
 					"scrubbing" = 1,
-					"widenet" = 1
+					"quicksucc" = 1
 				), signal_source)
 			for(var/device_id in my_area.air_vent_info)
 				send_signal(device_id, list(
@@ -490,7 +490,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"widenet" = 0,
+					"quicksucc" = 0,
 					"scrubbing" = 0
 				), signal_source)
 			for(var/device_id in my_area.air_vent_info)
@@ -505,7 +505,7 @@
 					"power" = 1,
 					"set_filters" = list(GAS_CO2),
 					"scrubbing" = 1,
-					"widenet" = 0
+					"quicksucc" = 0
 				), signal_source)
 			for(var/device_id in my_area.air_vent_info)
 				send_signal(device_id, list(
@@ -518,7 +518,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"widenet" = 1,
+					"quicksucc" = 1,
 					"scrubbing" = 0
 				), signal_source)
 			for(var/device_id in my_area.air_vent_info)
@@ -529,7 +529,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"widenet" = 0,
+					"quicksucc" = 0,
 					"scrubbing" = 0
 				), signal_source)
 			for(var/device_id in my_area.air_vent_info)
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 dcfccb507e0..98161a8c20d 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -24,10 +24,8 @@
 	var/list/filter_types = list(GAS_CO2)
 	///Rate of the scrubber to remove gases from the air
 	var/volume_rate = 200
-	///is this scrubber acting on the 3x3 area around it.
-	var/widenet = FALSE
-	///List of the turfs near the scrubber, used for widenet
-	var/list/turf/adjacent_turfs = list()
+	///A fast-siphon toggle, siphons at 9x speed for 9x the power cost.
+	var/quicksucc = FALSE
 
 	///Frequency id for connecting to the NTNet
 	var/frequency = FREQ_ATMOS_CONTROL
@@ -59,7 +57,6 @@
 
 	SSradio.remove_object(src,frequency)
 	radio_connection = null
-	adjacent_turfs.Cut()
 	SSairmachines.stop_processing_machine(src)
 	return ..()
 
@@ -142,13 +139,13 @@
 		return
 
 	if(!COOLDOWN_FINISHED(src, hibernating))
-		if(widenet)
+		if(quicksucc)
 			icon_state = "scrub_wide_hibernating"
 		else
 			icon_state = "scrub_hibernating"
 
 	else if(scrubbing & SCRUBBING)
-		if(widenet)
+		if(quicksucc)
 			icon_state = "scrub_wide"
 		else
 			icon_state = "scrub_on"
@@ -175,7 +172,7 @@
 		"timestamp" = world.time,
 		"power" = on,
 		"scrubbing" = scrubbing,
-		"widenet" = widenet,
+		"quicksucc" = quicksucc,
 		"filter_types" = f_types,
 		"sigtype" = "status"
 	))
@@ -205,7 +202,6 @@
 	if(frequency)
 		set_frequency(frequency)
 	broadcast_status()
-	check_turfs()
 	. = ..()
 
 /obj/machinery/atmospherics/components/unary/vent_scrubber/process_atmos()
@@ -221,10 +217,9 @@
 	var/should_cooldown = TRUE
 	if(scrub(us))
 		should_cooldown = FALSE
-	if(widenet)
-		check_turfs()
-		for(var/turf/tile in adjacent_turfs)
-			if(scrub(tile) && should_cooldown)
+	if(quicksucc)
+		for(var/i in 1 to 9) //quicksucc is actually now just "fast mode"
+			if(scrub(us))
 				should_cooldown = FALSE
 	if(should_cooldown)
 		COOLDOWN_START(src, hibernating, 15 SECONDS)
@@ -282,19 +277,12 @@
 
 #undef MINIMUM_MOLES_TO_SCRUB
 
-///we populate a list of turfs with nonatmos-blocked cardinal turfs AND
-/// diagonal turfs that can share atmos with *both* of the cardinal turfs
-/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/check_turfs()
-	adjacent_turfs.Cut()
-	var/turf/local_turf = get_turf(src)
-	adjacent_turfs = get_adjacent_open_turfs(local_turf)
-
 /obj/machinery/atmospherics/components/unary/vent_scrubber/receive_signal(datum/signal/signal)
 	if(!is_operational || !signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
 		return
 	COOLDOWN_RESET(src, hibernating)
 
-	var/old_widenet = widenet
+	var/old_quicksucc = quicksucc
 	var/old_scrubbing = scrubbing
 	var/old_filter_length = length(filter_types)
 
@@ -308,10 +296,10 @@
 	if("power_toggle" in signal.data)
 		on = !on
 
-	if("widenet" in signal.data)
-		widenet = text2num(signal.data["widenet"])
-	if("toggle_widenet" in signal.data)
-		widenet = !widenet
+	if("quicksucc" in signal.data)
+		quicksucc = text2num(signal.data["quicksucc"])
+	if("toggle_quicksucc" in signal.data)
+		quicksucc = !quicksucc
 
 	if("scrubbing" in signal.data)
 		scrubbing = text2num(signal.data["scrubbing"])
@@ -340,7 +328,7 @@
 	update_appearance()
 
 
-	if(length(filter_types) == old_filter_length && old_scrubbing == scrubbing && old_widenet == widenet)
+	if(length(filter_types) == old_filter_length && old_scrubbing == scrubbing && old_quicksucc == quicksucc)
 		return
 
 	idle_power_usage = initial(idle_power_usage)
@@ -354,8 +342,8 @@
 		new_power_usage = active_power_usage
 		update_use_power(ACTIVE_POWER_USE)
 
-	if(widenet)
-		new_power_usage += new_power_usage * (length(adjacent_turfs) * (length(adjacent_turfs) / 2))
+	if(quicksucc)
+		new_power_usage += new_power_usage * 9
 
 	update_mode_power_usage(scrubbing == SCRUBBING ? IDLE_POWER_USE : ACTIVE_POWER_USE, new_power_usage)
 
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 063003cd82d..843f00d1819 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -18,12 +18,11 @@
 	///Should the machine use overlay in update_overlays() when open/close?
 	var/use_overlays = TRUE
 	var/power_rating = 7500
-	///List of gases that can be scrubbed
-	var/list/scrubbing = list(
-		GAS_PLASMA,
-		GAS_CO2,
-		GAS_N2O,
-	)
+	///List of gases that are being scrubbed.
+	var/list/scrubbing = list()
+
+/obj/machinery/portable_atmospherics/scrubber/Initialize(mapload)
+	. = ..()
 
 /obj/machinery/portable_atmospherics/scrubber/Destroy()
 	var/turf/T = get_turf(src)
@@ -69,23 +68,14 @@
  * * mixture: the gas mixture to be scrubbed
  */
 /obj/machinery/portable_atmospherics/scrubber/proc/scrub(datum/gas_mixture/mixture)
-	if(air_contents.returnPressure() >= overpressure_m * ONE_ATMOSPHERE)
+	if(!mixture.total_moles || !length(scrubbing))
 		return
-	if(!mixture.total_moles)
+	if(air_contents.returnPressure() >= overpressure_m * ONE_ATMOSPHERE)
 		return
 
 	var/transfer_moles = min(1, volume_rate/mixture.volume)*mixture.total_moles
 
-	var/datum/gas_mixture/gas2scrub = mixture.remove(transfer_moles) // Remove part of the mixture to filter.
-
-	if(!scrubbing)
-		return
-
-	scrub_gas(scrubbing, gas2scrub, air_contents, transfer_moles, power_rating)
-	/*
-	if(!holding)
-		air_update_turf(FALSE, FALSE)
-	*/
+	scrub_gas(scrubbing, mixture, air_contents, transfer_moles, power_rating)
 
 /obj/machinery/portable_atmospherics/scrubber/emp_act(severity)
 	. = ..()
diff --git a/tgui/packages/tgui/interfaces/common/AtmosControls.js b/tgui/packages/tgui/interfaces/common/AtmosControls.js
index fcca00188ab..cfa167bf821 100644
--- a/tgui/packages/tgui/interfaces/common/AtmosControls.js
+++ b/tgui/packages/tgui/interfaces/common/AtmosControls.js
@@ -120,7 +120,7 @@ export const Scrubber = (props, context) => {
     power,
     scrubbing,
     id_tag,
-    widenet,
+    quicksucc,
     filter_types,
   } = scrubber;
   return (
@@ -148,12 +148,12 @@ export const Scrubber = (props, context) => {
               val: Number(!scrubbing),
             })} />
           <Button
-            icon={widenet ? 'expand' : 'compress'}
-            selected={widenet}
-            content={widenet ? 'Expanded range' : 'Normal range'}
-            onClick={() => act('widenet', {
+            icon={quicksucc ? 'expand' : 'compress'}
+            selected={quicksucc}
+            content={quicksucc ? 'Fast Siphon' : 'Standard Siphon'}
+            onClick={() => act('quicksucc', {
               id_tag,
-              val: Number(!widenet),
+              val: Number(!quicksucc),
             })} />
         </LabeledList.Item>
         <LabeledList.Item label="Filters">

From 894370d8c4dd45b7fc02b0967ac656cfcba0fe43 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 3 Jul 2022 00:30:23 -0400
Subject: [PATCH 173/200] Explosion pass

---
 code/_globalvars/configuration.dm             | 10 ------
 .../configuration/entries/game_options.dm     |  8 ++---
 code/controllers/subsystem/explosions.dm      | 24 +++++++-------
 code/game/objects/items/tanks/tanks.dm        |  8 ++---
 code/modules/admin/admin_verbs.dm             | 25 ++++++++-------
 code/modules/admin/verbs/secrets.dm           | 10 +++---
 code/modules/atmospherics/ZAS/ZAS_Settings.dm | 32 +++++++++++++++++--
 code/modules/cargo/centcom_podlauncher.dm     |  2 +-
 .../projectiles/guns/special/blastcannon.dm   |  4 +--
 .../projectile/bullets/cannonball.dm          |  2 +-
 .../research/anomaly/anomaly_refinery.dm      |  8 ++---
 config/game_options.txt                       |  2 +-
 12 files changed, 74 insertions(+), 61 deletions(-)

diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm
index 67e67ac051b..159be647d7b 100644
--- a/code/_globalvars/configuration.dm
+++ b/code/_globalvars/configuration.dm
@@ -24,14 +24,4 @@ GLOBAL_VAR_INIT(Debug2, FALSE)
 
 //This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
 //Protecting these because the proper way to edit them is with the config/secrets
-GLOBAL_VAR_INIT(MAX_EX_DEVESTATION_RANGE, 3)
-GLOBAL_PROTECT(MAX_EX_DEVESTATION_RANGE)
-GLOBAL_VAR_INIT(MAX_EX_HEAVY_RANGE, 7)
-GLOBAL_PROTECT(MAX_EX_HEAVY_RANGE)
-GLOBAL_VAR_INIT(MAX_EX_LIGHT_RANGE, 14)
-GLOBAL_PROTECT(MAX_EX_LIGHT_RANGE)
-GLOBAL_VAR_INIT(MAX_EX_FLASH_RANGE, 14)
-GLOBAL_PROTECT(MAX_EX_FLASH_RANGE)
-GLOBAL_VAR_INIT(MAX_EX_FLAME_RANGE, 14)
-GLOBAL_PROTECT(MAX_EX_FLAME_RANGE)
 GLOBAL_VAR_INIT(DYN_EX_SCALE, 0.5)
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index 65d0ad8bb2e..2e20b1ac00d 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -345,17 +345,13 @@
 	min_val = 0
 
 /datum/config_entry/number/bombcap
-	default = 14
+	default = 16
 	min_val = 4
 
 /datum/config_entry/number/bombcap/ValidateAndSet(str_val)
 	. = ..()
 	if(.)
-		GLOB.MAX_EX_DEVESTATION_RANGE = round(config_entry_value / 4)
-		GLOB.MAX_EX_HEAVY_RANGE = round(config_entry_value / 2)
-		GLOB.MAX_EX_LIGHT_RANGE = config_entry_value
-		GLOB.MAX_EX_FLASH_RANGE = config_entry_value
-		GLOB.MAX_EX_FLAME_RANGE = config_entry_value
+		zas_settings.set_bomb_cap(text2num(str_val))
 
 /datum/config_entry/number/emergency_shuttle_autocall_threshold
 	min_val = 0
diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm
index 0ca718862ca..ed3b6834322 100644
--- a/code/controllers/subsystem/explosions.dm
+++ b/code/controllers/subsystem/explosions.dm
@@ -182,7 +182,7 @@ SUBSYSTEM_DEF(explosions)
 		return
 	var/range = 0
 	range = round((2 * power)**GLOB.DYN_EX_SCALE)
-	explosion(epicenter, devastation_range = round(range * 0.25), heavy_impact_range = round(range * 0.5), light_impact_range = round(range), flame_range = flame_range*range, flash_range = flash_range*range, adminlog = adminlog, ignorecap = ignorecap, silent = silent, smoke = smoke, explosion_cause = explosion_cause)
+	return explosion(epicenter, devastation_range = round(range * 0.25), heavy_impact_range = round(range * 0.5), light_impact_range = round(range), flame_range = flame_range*range, flash_range = flash_range*range, adminlog = adminlog, ignorecap = ignorecap, silent = silent, smoke = smoke, explosion_cause = explosion_cause)
 
 
 
@@ -238,12 +238,12 @@ SUBSYSTEM_DEF(explosions)
 	)
 	var/atom/location = isturf(origin) ? origin : origin.loc
 	if(SEND_SIGNAL(origin, COMSIG_ATOM_EXPLODE, arguments) & COMSIG_CANCEL_EXPLOSION)
-		return // Signals are incompatible with `arglist(...)` so we can't actually use that for these. Additionally,
+		return COMSIG_CANCEL_EXPLOSION // Signals are incompatible with `arglist(...)` so we can't actually use that for these. Additionally,
 
 	while(location)
 		var/next_loc = location.loc
 		if(SEND_SIGNAL(location, COMSIG_ATOM_INTERNAL_EXPLOSION, arguments) & COMSIG_CANCEL_EXPLOSION)
-			return
+			return COMSIG_CANCEL_EXPLOSION
 		if(isturf(location))
 			break
 		location = next_loc
@@ -253,7 +253,7 @@ SUBSYSTEM_DEF(explosions)
 
 	var/area/epicenter_area = get_area(location)
 	if(SEND_SIGNAL(epicenter_area, COMSIG_AREA_INTERNAL_EXPLOSION, arguments) & COMSIG_CANCEL_EXPLOSION)
-		return
+		return COMSIG_CANCEL_EXPLOSION
 
 	arguments -= EXARG_KEY_ORIGIN
 
@@ -303,11 +303,11 @@ SUBSYSTEM_DEF(explosions)
 		cap_multiplier = 1
 
 	if(!ignorecap)
-		devastation_range = min(GLOB.MAX_EX_DEVESTATION_RANGE * cap_multiplier, devastation_range)
-		heavy_impact_range = min(GLOB.MAX_EX_HEAVY_RANGE * cap_multiplier, heavy_impact_range)
-		light_impact_range = min(GLOB.MAX_EX_LIGHT_RANGE * cap_multiplier, light_impact_range)
-		flash_range = min(GLOB.MAX_EX_FLASH_RANGE * cap_multiplier, flash_range)
-		flame_range = min(GLOB.MAX_EX_FLAME_RANGE * cap_multiplier, flame_range)
+		devastation_range = min(zas_settings.maxex_devastation_range * cap_multiplier, devastation_range)
+		heavy_impact_range = min(zas_settings.maxex_heavy_range * cap_multiplier, heavy_impact_range)
+		light_impact_range = min(zas_settings.maxex_light_range * cap_multiplier, light_impact_range)
+		flash_range = min(zas_settings.maxex_flash_range * cap_multiplier, flash_range)
+		flame_range = min(zas_settings.maxex_fire_range * cap_multiplier, flame_range)
 
 	var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
 	var/started_at = REALTIMEOFDAY
@@ -669,10 +669,8 @@ SUBSYSTEM_DEF(explosions)
 		var/list/flame_turf = flameturf
 		flameturf = list()
 		for(var/thing in flame_turf)
-			if(thing)
-				var/turf/T = thing
-				//new /obj/effect/hotspot(T) //Mostly for ambience!
-				T.create_fire(2, 25)
+			var/turf/T = thing
+			T.create_fire(2, rand(5, 20))
 		cost_flameturf = MC_AVERAGE(cost_flameturf, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
 
 		if (low_turf.len || med_turf.len || high_turf.len)
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index fa8c22424cb..6e47c2f618f 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -347,10 +347,10 @@
 		log_atmos("[type] exploded with a power of [strength * mult] and a mix of ", air_contents)
 		explosion(
 			src,
-			round(min(BOMBCAP_DVSTN_RADIUS, ((mult)*strength)*0.15)),
-			round(min(BOMBCAP_HEAVY_RADIUS, ((mult)*strength)*0.35)),
-			round(min(BOMBCAP_LIGHT_RADIUS, ((mult)*strength)*0.80)),
-			round(min(BOMBCAP_FLASH_RADIUS, ((mult)*strength)*1.20)),
+			round(mult*strength*0.15),
+			round(mult*strength*0.35),
+			round(mult*strength*0.80),
+			round(mult*strength*1.20),
 		)
 		var/num_fragments = round(rand(8,10) * sqrt(strength * mult))
 		///Holy. Fucking. Shit. This is AGONIZING. Give me /obj/proc/fragmentate() PLEASE.
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 4bd9e298d4a..7d1b17eebc7 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -528,35 +528,38 @@ GLOBAL_PROTECT(admin_verbs_hideable)
 	set name = "Drop Bomb"
 	set desc = "Cause an explosion of varying strength at your location."
 
-	var/list/choices = list("Small Bomb (1, 2, 3, 3)", "Medium Bomb (2, 3, 4, 4)", "Big Bomb (3, 5, 7, 5)", "Maxcap", "Custom Bomb")
+	var/list/choices = list("Small Bomb (1, 2, 3, 0, 3)", "Medium Bomb (1, 2, 3, 0, 3)", "Big Bomb (3, 5, 7, 0, 5)", "Maxcap (4, 8, 16, 16, 20 by default)", "Custom Bomb")
 	var/choice = tgui_input_list(src, "What size explosion would you like to produce? NOTE: You can do all this rapidly and in an IC manner (using cruise missiles!) with the Config/Launch Supplypod verb. WARNING: These ignore the maxcap", "Drop Bomb", choices)
 	if(isnull(choice))
 		return
 	var/turf/epicenter = mob.loc
 
 	switch(choice)
-		if("Small Bomb (1, 2, 3, 3)")
+		if("Small Bomb (1, 2, 3, 0, 3)")
 			explosion(epicenter, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 3, flash_range = 3, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob)
-		if("Medium Bomb (2, 3, 4, 4)")
+		if("Medium Bomb (1, 2, 3, 0, 3)")
 			explosion(epicenter, devastation_range = 2, heavy_impact_range = 3, light_impact_range = 4, flash_range = 4, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob)
-		if("Big Bomb (3, 5, 7, 5)")
+		if("Big Bomb (3, 5, 7, 0, 5)")
 			explosion(epicenter, devastation_range = 3, heavy_impact_range = 5, light_impact_range = 7, flash_range = 5, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob)
-		if("Maxcap")
-			explosion(epicenter, devastation_range = GLOB.MAX_EX_DEVESTATION_RANGE, heavy_impact_range = GLOB.MAX_EX_HEAVY_RANGE, light_impact_range = GLOB.MAX_EX_LIGHT_RANGE, flash_range = GLOB.MAX_EX_FLASH_RANGE, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob)
+		if("Maxcap (4, 8, 16, 16, 20 by default)")
+			explosion(epicenter, devastation_range = zas_settings.maxex_devastation_range, heavy_impact_range = zas_settings.maxex_heavy_range, light_impact_range = zas_settings.maxex_light_range, flame_range = zas_settings.maxex_fire_range, flash_range = zas_settings.maxex_flash_range, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob)
 		if("Custom Bomb")
 			var/range_devastation = input("Devastation range (in tiles):") as null|num
-			if(range_devastation == null)
+			if(isnull(range_devastation))
 				return
 			var/range_heavy = input("Heavy impact range (in tiles):") as null|num
-			if(range_heavy == null)
+			if(isnull(range_heavy))
 				return
 			var/range_light = input("Light impact range (in tiles):") as null|num
-			if(range_light == null)
+			if(isnull(range_light))
+				return
+			var/range_flame = input("Flame range (in tiles):") as null|num
+			if(isnull(range_flame))
 				return
 			var/range_flash = input("Flash range (in tiles):") as null|num
-			if(range_flash == null)
+			if(isnull(range_flash))
 				return
-			if(range_devastation > GLOB.MAX_EX_DEVESTATION_RANGE || range_heavy > GLOB.MAX_EX_HEAVY_RANGE || range_light > GLOB.MAX_EX_LIGHT_RANGE || range_flash > GLOB.MAX_EX_FLASH_RANGE)
+			if(range_devastation > zas_settings.maxex_devastation_range || range_heavy > zas_settings.maxex_heavy_range || range_light > zas_settings.maxex_light_range || range_flash > zas_settings.maxex_flash_range || range_flame > zas_settings.maxex_fire_range)
 				if(tgui_alert(usr, "Bomb is bigger than the maxcap. Continue?",,list("Yes","No")) != "Yes")
 					return
 			epicenter = mob.loc //We need to reupdate as they may have moved again
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index 427dc6f577b..62e5fde8552 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -451,12 +451,12 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
 				return
 			SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Bomb Cap"))
 
-			var/newBombCap = input(holder,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", GLOB.MAX_EX_LIGHT_RANGE) as num|null
-			if (!CONFIG_SET(number/bombcap, newBombCap))
+			var/newBombCap = input(holder,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", zas_settings.maxex_light_range) as num|null
+			if(!newBombCap)
 				return
-
-			message_admins(span_boldannounce("[key_name_admin(holder)] changed the bomb cap to [GLOB.MAX_EX_DEVESTATION_RANGE], [GLOB.MAX_EX_HEAVY_RANGE], [GLOB.MAX_EX_LIGHT_RANGE]"))
-			log_admin("[key_name(holder)] changed the bomb cap to [GLOB.MAX_EX_DEVESTATION_RANGE], [GLOB.MAX_EX_HEAVY_RANGE], [GLOB.MAX_EX_LIGHT_RANGE]")
+			zas_settings.set_bomb_cap(newBombCap)
+			message_admins(span_boldannounce("[key_name_admin(holder)] changed the bomb cap to [zas_settings.maxex_devastation_range], [zas_settings.maxex_heavy_range], [zas_settings.maxex_light_range], [zas_settings.maxex_fire_range], [zas_settings.maxex_flash_range]"))
+			log_admin("[key_name_admin(holder)] changed the bomb cap to [zas_settings.maxex_devastation_range], [zas_settings.maxex_heavy_range], [zas_settings.maxex_light_range], [zas_settings.maxex_fire_range], [zas_settings.maxex_flash_range]")
 		//buttons that are fun for exactly you and nobody else.
 		if("monkey")
 			if(!is_funmin)
diff --git a/code/modules/atmospherics/ZAS/ZAS_Settings.dm b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
index 53891545cc3..159d54a52e6 100644
--- a/code/modules/atmospherics/ZAS/ZAS_Settings.dm
+++ b/code/modules/atmospherics/ZAS/ZAS_Settings.dm
@@ -74,6 +74,32 @@
 	var/connection_temperature_delta_NAME = "Connections - Temperature Difference"
 	var/connection_temperature_delta_DESC = "The smallest temperature difference which will cause heat to travel through doors."
 
-	var/max_explosion_range = 14
-	var/max_explosion_range_NAME = "TTV Explosion Range Maximum"
-	var/max_explosion_range_DESC = "What it says on the tin"
+	var/maxex_devastation_range = 4
+	var/max_explosion_range_NAME = "Explosion Devastation Range"
+	var/max_explosion_range_DESC = "By default, 1/4th of fire range."
+
+	var/maxex_heavy_range = 8
+	var/max_heavy_range_NAME = "Explosion Heavy Range"
+	var/max_heavy_range_DESC = "By default, 1/2 of light range"
+
+	var/maxex_light_range = 16
+	var/max_light_range_NAME = "Explosion Light Range"
+	var/max_light_range_DESC = "By default, this is the baseline for other explosion values."
+
+	var/maxex_fire_range = 16
+	var/max_fire_range_NAME = "Explosion Fire Range"
+	var/max_fire_range_DESC = "By default, equal to light range."
+
+	var/maxex_flash_range = 20
+	var/max_flash_range_NAME = "Explosion Flash Range"
+	var/max_flash_range_DESC = "By default, 5/4ths of light range."
+
+/datum/zas_controller/proc/set_bomb_cap(val)
+	if(!isnum(val))
+		CRASH("Non-number given to set_bomb_cap.")
+
+	maxex_devastation_range = val/4
+	maxex_heavy_range = val/2
+	maxex_light_range = val
+	maxex_fire_range = val
+	maxex_flash_range = val*1.2
diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm
index 52eb1611bae..c2fd281e86f 100644
--- a/code/modules/cargo/centcom_podlauncher.dm
+++ b/code/modules/cargo/centcom_podlauncher.dm
@@ -301,7 +301,7 @@
 				temp_pod.explosionSize = list(0,0,0,0)
 				return
 			explosionChoice = 2
-			temp_pod.explosionSize = list(GLOB.MAX_EX_DEVESTATION_RANGE, GLOB.MAX_EX_HEAVY_RANGE, GLOB.MAX_EX_LIGHT_RANGE,GLOB.MAX_EX_FLAME_RANGE) //Set explosion to max cap of server
+			temp_pod.explosionSize = list(zas_settings.maxex_devastation_range, zas_settings.maxex_heavy_range, zas_settings.maxex_light_range, zas_settings.maxex_fire_range) //Set explosion to max cap of server
 			. = TRUE
 		if("damageCustom") //Deals damage to whoevers under the pod when it lands
 			if (damageChoice == 1) //If already doing custom damage, set back to default (no damage)
diff --git a/code/modules/projectiles/guns/special/blastcannon.dm b/code/modules/projectiles/guns/special/blastcannon.dm
index 3596105c4d3..3443d68b7f7 100644
--- a/code/modules/projectiles/guns/special/blastcannon.dm
+++ b/code/modules/projectiles/guns/special/blastcannon.dm
@@ -189,8 +189,8 @@
 	var/cap_multiplier = SSmapping.level_trait(start_turf.z, ZTRAIT_BOMBCAP_MULTIPLIER)
 	if(isnull(cap_multiplier))
 		cap_multiplier = 1
-	var/capped_heavy = min(GLOB.MAX_EX_DEVESTATION_RANGE * cap_multiplier, heavy)
-	var/capped_medium = min(GLOB.MAX_EX_HEAVY_RANGE * cap_multiplier, medium)
+	var/capped_heavy = min(zas_settings.maxex_devastation_range * cap_multiplier, heavy)
+	var/capped_medium = min(zas_settings.maxex_heavy_range * cap_multiplier, medium)
 	SSexplosions.shake_the_room(start_turf, max(heavy, medium, light, 0), (capped_heavy * 15) + (capped_medium * 20), capped_heavy, capped_medium)
 
 	var/obj/projectile/blastwave/blastwave = new(loc, heavy, medium, light)
diff --git a/code/modules/projectiles/projectile/bullets/cannonball.dm b/code/modules/projectiles/projectile/bullets/cannonball.dm
index 587e1a2e99d..eadaf11564a 100644
--- a/code/modules/projectiles/projectile/bullets/cannonball.dm
+++ b/code/modules/projectiles/projectile/bullets/cannonball.dm
@@ -55,7 +55,7 @@
 
 /obj/projectile/bullet/cannonball/biggest_one/on_hit(atom/target, blocked = FALSE)
 	if(projectile_piercing == NONE)
-		explosion(target, devastation_range = GLOB.MAX_EX_DEVESTATION_RANGE, heavy_impact_range = GLOB.MAX_EX_HEAVY_RANGE, light_impact_range = GLOB.MAX_EX_LIGHT_RANGE, flash_range = GLOB.MAX_EX_FLASH_RANGE, explosion_cause = src)
+		explosion(target,devastation_range = zas_settings.maxex_devastation_range, heavy_impact_range = zas_settings.maxex_heavy_range, light_impact_range = zas_settings.maxex_light_range, flash_range = zas_settings.maxex_flash_range, explosion_cause = src)
 	. = ..()
 
 /obj/projectile/bullet/cannonball/trashball
diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm
index 5d70b73af31..a2de260fc3f 100644
--- a/code/modules/research/anomaly/anomaly_refinery.dm
+++ b/code/modules/research/anomaly/anomaly_refinery.dm
@@ -1,5 +1,5 @@
-#define MAX_RADIUS_REQUIRED 20 //maxcap
-#define MIN_RADIUS_REQUIRED 4 //1, 2, 4
+#define MAX_RADIUS_REQUIRED zas_settings.maxex_light_range //maxcap
+#define MIN_RADIUS_REQUIRED zas_settings.maxex_light_range/5 //1, 2, 4
 /// How long the compression test can last before the machine just gives up and ejects the items.
 #define COMPRESSION_TEST_TIME (SSOBJ_DT SECONDS * 5)
 
@@ -216,8 +216,8 @@
 	var/cap_multiplier = SSmapping.level_trait(location.z, ZTRAIT_BOMBCAP_MULTIPLIER)
 	if(isnull(cap_multiplier))
 		cap_multiplier = 1
-	var/capped_heavy = min(GLOB.MAX_EX_DEVESTATION_RANGE * cap_multiplier, heavy)
-	var/capped_medium = min(GLOB.MAX_EX_HEAVY_RANGE * cap_multiplier, medium)
+	var/capped_heavy = min(zas_settings.maxex_devastation_range * cap_multiplier, heavy)
+	var/capped_medium = min(zas_settings.maxex_heavy_range * cap_multiplier, medium)
 	SSexplosions.shake_the_room(location, explosion_range, (capped_heavy * 15) + (capped_medium * 20), capped_heavy, capped_medium)
 
 	if(explosion_range < required_range)
diff --git a/config/game_options.txt b/config/game_options.txt
index 0d246725aec..5777c639830 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -403,7 +403,7 @@ REACTIONARY_EXPLOSIONS
 ## eg: If you give the number 20. The bomb cap will be 5,10,20.
 ## Can be any number above 4, some examples are provided below.
 
-## Small (3, 7, 14)
+## Small (4, 8, 16)
 #BOMBCAP 14
 ## Default (5, 10, 20) (recommended if you enable REACTIONARY_EXPLOSIONS above)
 BOMBCAP 20

From ae8dba35f09761f34da470f82682f0ade8f1d906 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 3 Jul 2022 02:00:22 -0400
Subject: [PATCH 174/200] Fixes

---
 code/__DEFINES/atmospherics/ZAS.dm                   |  4 +++-
 code/modules/atmospherics/ZAS/Fire.dm                | 12 +++++++-----
 code/modules/holodeck/turfs.dm                       |  4 ++--
 .../living/simple_animal/hostile/megafauna/drake.dm  |  7 +++----
 4 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 648fa9551cf..a353a86a993 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -258,7 +258,9 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 /// the default air mix that open turfs spawn
 #define OPENTURF_DEFAULT_ATMOS list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN=MOLES_N2STANDARD)
 #define OPENTURF_LOW_PRESSURE list(GAS_OXYGEN = 14, GAS_NITROGEN = 30)
-//#define OPENTURF_LOW_PRESSURE "o2=14;n2=30;TEMP=293.15"
+
+///A long and hot fire
+#define BURNMIX_ATMOS list(GAS_OXYGEN = 2500, GAS_PLASMA = 5000); temperature = PHORON_FLASHPOINT
 /// -193,15°C telecommunications. also used for xenobiology slime killrooms
 #define TCOMMS_ATMOS list(GAS_NITROGEN = 100)
 //#define TCOMMS_ATMOS "n2=100;TEMP=80"
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index 46fb1b18a3f..ee4155e2238 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -92,7 +92,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 					qdel(T.fire)
 			qdel(fuel)
 
-/turf/proc/create_fire(fl)
+///Creates a fire with firelevel (fl). If create_own_fuel is given, it will create that many units of welding fuel on the turf.
+/turf/proc/create_fire(fl, create_own_fuel)
 	return 0
 
 /turf/open/create_fire(fl, create_own_fuel)
@@ -100,10 +101,10 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		return
 	if(fire)
 		fire.firelevel = max(fl, fire.firelevel)
-		return 1
+		return
 
 	if(!zone)
-		return 1
+		return
 
 	fire = new(src, fl)
 	SSzas.active_fire_zones |= zone
@@ -117,9 +118,10 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 			fuel.reagent_amount += create_own_fuel
 
 	zone.fire_tiles |= src
-	if(fuel) zone.fuel_objs += fuel
+	if(fuel)
+		zone.fuel_objs += fuel
 
-	return 0
+	return src
 
 /turf/open/space/create_fire()
 	return
diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm
index 2ba223ac489..78fce7e403d 100644
--- a/code/modules/holodeck/turfs.dm
+++ b/code/modules/holodeck/turfs.dm
@@ -51,8 +51,8 @@
 
 /turf/open/floor/holofloor/plating/burnmix
 	name = "burn-mix floor"
-	// initial_gas = BURNMIX_ATMOS
-	//TODO: cause warcrimes later
+	initial_gas = BURNMIX_ATMOS
+
 /turf/open/floor/holofloor/grass
 	gender = PLURAL
 	name = "lush grass"
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 8a64375ef8e..89059e8828a 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -183,10 +183,9 @@
 	for(var/turf/T in turfs)
 		if(istype(T, /turf/closed))
 			break
-		//var/obj/effect/hotspot/drake_fire_hotspot = new /obj/effect/hotspot(T)
-		T.create_fire(1, 10)
-		var/obj/effect/hotspot/drake_fire_hotspot = locate() in T
-		if(frozen)
+
+		var/obj/effect/hotspot/drake_fire_hotspot = T.create_fire(1, 10)
+		if(frozen && drake_fire_hotspot)
 			drake_fire_hotspot.add_atom_colour(COLOR_BLUE_LIGHT, FIXED_COLOUR_PRIORITY)
 		T.hotspot_expose(DRAKE_FIRE_TEMP,DRAKE_FIRE_EXPOSURE,1)
 		for(var/mob/living/L in T.contents)

From 6265406ae8ea6ea1913ea30edf9bb849fb868aa5 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 3 Jul 2022 14:17:25 -0400
Subject: [PATCH 175/200] Fixes atmozphere program. fuck js

---
 code/__HELPERS/atmospherics.dm                |  3 +--
 .../file_system/programs/atmosscan.dm         |  2 +-
 tgui/packages/tgui/interfaces/GasAnalyzer.tsx |  9 --------
 .../tgui/interfaces/common/AtmosHandbook.tsx  | 22 -------------------
 .../tgui/interfaces/common/GasmixParser.tsx   |  2 --
 5 files changed, 2 insertions(+), 36 deletions(-)

diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm
index f1a1aeb8c48..2ba039a1b1a 100644
--- a/code/__HELPERS/atmospherics.dm
+++ b/code/__HELPERS/atmospherics.dm
@@ -31,7 +31,6 @@
 /proc/gas_mixture_parser(datum/gas_mixture/gasmix, name)
 	. = list(
 		"gases" = list(),
-		"reactions" = list(),
 		"name" = name,
 		"total_moles" = null,
 		"temperature" = null,
@@ -47,7 +46,7 @@
 			xgm_gas_data.name[gas_path],
 			gasmix.gas[gas_path],
 		))
-	.["total_moles"] = gasmix.get_moles()
+	.["total_moles"] = gasmix.total_moles
 	.["temperature"] = gasmix.temperature
 	.["volume"] = gasmix.volume
 	.["pressure"] = gasmix.returnPressure()
diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm
index fe744c72ecf..50c1e27aee5 100644
--- a/code/modules/modular_computers/file_system/programs/atmosscan.dm
+++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm
@@ -16,7 +16,7 @@
 		to_chat(user, span_warning("\The [computer] flashes an error: \"hardware\\sensorpackage\\startup.bin -- file not found\"."))
 
 /datum/computer_file/program/atmosscan/ui_static_data(mob/user)
-	return //return_atmos_handbooks()
+	return
 
 /datum/computer_file/program/atmosscan/ui_data(mob/user)
 	var/list/data = get_header_data()
diff --git a/tgui/packages/tgui/interfaces/GasAnalyzer.tsx b/tgui/packages/tgui/interfaces/GasAnalyzer.tsx
index 96695edc2c5..84f8ac654a8 100644
--- a/tgui/packages/tgui/interfaces/GasAnalyzer.tsx
+++ b/tgui/packages/tgui/interfaces/GasAnalyzer.tsx
@@ -1,29 +1,21 @@
 import { useBackend } from '../backend';
 import { GasmixParser } from './common/GasmixParser';
 import type { Gasmix } from './common/GasmixParser';
-import {
-  AtmosHandbookContent,
-  atmosHandbookHooks,
-} from './common/AtmosHandbook';
 import { Window } from '../layouts';
 import { Section } from '../components';
 
 export const GasAnalyzerContent = (props, context) => {
   const { act, data } = useBackend<{ gasmixes: Gasmix[] }>(context);
   const { gasmixes } = data;
-  const [setActiveGasId, setActiveReactionId] = atmosHandbookHooks(context);
   return (
     <>
       {gasmixes.map((gasmix) => (
         <Section title={gasmix.name} key={gasmix.reference}>
           <GasmixParser
             gasmix={gasmix}
-            gasesOnClick={setActiveGasId}
-            reactionOnClick={setActiveReactionId}
           />
         </Section>
       ))}
-      <AtmosHandbookContent vertical />
     </>
   );
 };
@@ -37,4 +29,3 @@ export const GasAnalyzer = (props, context) => {
     </Window>
   );
 };
-  
\ No newline at end of file
diff --git a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx
index a423fae5078..4e15a0d8a89 100644
--- a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx
+++ b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx
@@ -7,7 +7,6 @@ import {
   Input,
   LabeledList,
   Section,
-  Stack,
   Tooltip,
 } from '../../components';
 
@@ -208,27 +207,6 @@ const ReactionHandbook = (props, context) => {
   );
 };
 
-export const AtmosHandbookContent = (
-  props: { vertical?: boolean },
-  context
-) => {
-  return props.vertical ? (
-    <>
-      <GasHandbook />
-      <ReactionHandbook />
-    </>
-  ) : (
-    <Stack>
-      <Stack.Item grow>
-        <ReactionHandbook />
-      </Stack.Item>
-      <Stack.Item grow>
-        <GasHandbook />
-      </Stack.Item>
-    </Stack>
-  );
-};
-
 export const atmosHandbookHooks = (context) => {
   const [activeGasId, setActiveGasId] = useLocalState(
     context,
diff --git a/tgui/packages/tgui/interfaces/common/GasmixParser.tsx b/tgui/packages/tgui/interfaces/common/GasmixParser.tsx
index a6fe672080d..b614d6bff3e 100644
--- a/tgui/packages/tgui/interfaces/common/GasmixParser.tsx
+++ b/tgui/packages/tgui/interfaces/common/GasmixParser.tsx
@@ -16,7 +16,6 @@ type GasmixParserProps = {
   temperatureOnClick?: () => void;
   volumeOnClick?: () => void;
   pressureOnClick?: () => void;
-  reactionOnClick?: (reaction_id: string) => void;
 };
 
 export const GasmixParser = (props: GasmixParserProps, context) => {
@@ -26,7 +25,6 @@ export const GasmixParser = (props: GasmixParserProps, context) => {
     temperatureOnClick,
     volumeOnClick,
     pressureOnClick,
-    reactionOnClick,
     ...rest
   } = props;
 

From 3b4ae83ed81fe1688f7546a08ba35cbebce13762 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 3 Jul 2022 16:03:59 -0400
Subject: [PATCH 176/200] Reworks some lists n' things

---
 code/__DEFINES/atmospherics/XGM.dm            |  76 ++++++
 code/__DEFINES/atmospherics/ZAS.dm            |  61 -----
 code/controllers/subsystem/zas.dm             |   2 +-
 code/game/objects/structures/window.dm        |   3 +-
 code/modules/atmospherics/ZAS/XGM/gas_data.dm |   6 +
 code/modules/atmospherics/ZAS/XGM/gases.dm    | 231 ++++++++++--------
 .../ZAS/zas_extras/gas_reagents.dm            |   9 +
 .../atmospherics/machinery/airalarm.dm        |   6 +-
 .../components/trinary_devices/filter.dm      |   4 +-
 .../components/unary_devices/vent_scrubber.dm |   2 +-
 .../machinery/portable/canister.dm            | 135 +++-------
 .../machinery/portable/scrubber.dm            |   2 +-
 code/modules/cargo/exports/large_objects.dm   |   2 +-
 .../power/supermatter/supermatter_process.dm  |   2 +-
 code/modules/surgery/organs/lungs.dm          |   2 +-
 pariah.dme                                    |   1 +
 tgui/packages/tgui/constants.js               |   6 +
 17 files changed, 274 insertions(+), 276 deletions(-)
 create mode 100644 code/__DEFINES/atmospherics/XGM.dm

diff --git a/code/__DEFINES/atmospherics/XGM.dm b/code/__DEFINES/atmospherics/XGM.dm
new file mode 100644
index 00000000000..a65db3775b8
--- /dev/null
+++ b/code/__DEFINES/atmospherics/XGM.dm
@@ -0,0 +1,76 @@
+// XGM gas flags.
+#define XGM_GAS_FUEL        (1<<0)
+#define XGM_GAS_OXIDIZER    (1<<1)
+#define XGM_GAS_CONTAMINANT (1<<2)
+#define XGM_GAS_FUSION_FUEL (1<<3)
+#define XGM_GAS_NOBLE		(1<<4)
+#define XGM_GAS_COMMON		(1<<5)
+
+//"Common" station gases.
+#define GAS_OXYGEN				"oxygen"
+#define GAS_NITROGEN			"nitrogen"
+#define GAS_CO2					"carbon_dioxide"
+#define GAS_N2O					"sleeping_agent"
+#define GAS_PLASMA				"plasma"
+#define GAS_STEAM				"water"
+
+//Gases for use with the SM or R-UST
+#define GAS_HYDROGEN			"hydrogen" //H
+#define GAS_DEUTERIUM			"deuterium" //2H
+#define GAS_TRITIUM				"tritium" //3H
+
+//Noble gases
+#define GAS_BORON				"boron"
+#define GAS_HELIUM				"helium"
+#define GAS_ARGON				"argon"
+#define GAS_KRYPTON				"krypton"
+#define GAS_NEON				"neon"
+#define GAS_XENON				"xenon"
+
+//Random bullshit for random gases, feel free to use elsewhere.
+#define GAS_AMMONIA				"ammonia"
+#define GAS_CHLORINE			"chlorine"
+#define GAS_SULFUR				"sulfurdioxide"
+#define GAS_METHANE				"methane"
+
+//Random bullshit: compound edition
+#define GAS_METHYL_BROMIDE		"methyl_bromide"
+#define GAS_NO					"nitricoxide"
+#define GAS_NO2					"nitrodioxide"
+#define GAS_CO					"carbon_monoxide"
+
+//A placeholder for a random gas generated each round.
+#define GAS_ALIEN				"aliether"
+
+///All gases that are not placeholders.
+#define ASSORTED_GASES (xgm_gas_data.gases - GAS_ALIEN)
+///All gases in the game. The sorting of UIs like scrubbers will match this, so keep that in mind.
+GLOBAL_LIST_INIT(all_gases, list(
+	GAS_ALIEN,
+	GAS_OXYGEN,
+	GAS_NITROGEN,
+	GAS_CO2,
+	GAS_N2O,
+	GAS_PLASMA,
+	GAS_STEAM,
+	GAS_HYDROGEN,
+	GAS_DEUTERIUM,
+	GAS_TRITIUM,
+	GAS_HELIUM,
+	GAS_ARGON,
+	GAS_KRYPTON,
+	GAS_NEON,
+	GAS_XENON,
+	GAS_BORON,
+	GAS_AMMONIA,
+	GAS_CHLORINE,
+	GAS_SULFUR,
+	GAS_METHANE,
+	GAS_CO,
+	GAS_NO,
+	GAS_METHYL_BROMIDE,
+))
+///All gases that a player will reliably encounter every round or close to it.
+GLOBAL_LIST_EMPTY(common_gases) //Filled in by xgm_gas_data/New()
+///All the noble gases.
+GLOBAL_LIST_EMPTY(noble_gases) //Filled in by xgm_gas_data/New()
diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index a353a86a993..b92464dae21 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -235,12 +235,6 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 //How many moles of fuel are contained within one solid/liquid fuel volume unit
 #define LIQUIDFUEL_AMOUNT_TO_MOL		0.45  //mol/volume unit
 
-// XGM gas flags.
-#define XGM_GAS_FUEL        1
-#define XGM_GAS_OXIDIZER    2
-#define XGM_GAS_CONTAMINANT 4
-#define XGM_GAS_FUSION_FUEL 8
-
 #define TANK_LEAK_PRESSURE     (30 * ONE_ATMOSPHERE) // Tank starts leaking.
 #define TANK_RUPTURE_PRESSURE  (40 * ONE_ATMOSPHERE) // Tank spills all contents into atmosphere.
 #define TANK_FRAGMENT_PRESSURE (50 * ONE_ATMOSPHERE) // Boom 3x3 base explosion.
@@ -285,61 +279,6 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 #define MAX_PUMP_PRESSURE		15000	// Maximal pressure setting for pumps and vents
 #define MAX_OMNI_PRESSURE		15000	// Maximal output(s) pressure for omni devices (filters/mixers)
 
-#define GAS_OXYGEN				"oxygen"
-#define GAS_CO2					"carbon_dioxide"
-#define GAS_CO					"carbon_monoxide"
-#define GAS_METHYL_BROMIDE		"methyl_bromide"
-#define GAS_N2O					"sleeping_agent"
-#define GAS_NITROGEN			"nitrogen"
-#define GAS_NO2					"nitrodioxide"
-#define GAS_NO					"nitricoxide"
-#define GAS_METHANE				"methane"
-#define GAS_ALIEN				"aliether"
-#define GAS_HYDROGEN			"hydrogen"
-#define GAS_DEUTERIUM			"deuterium"
-#define GAS_TRITIUM				"tritium"
-#define GAS_HELIUM				"helium"
-#define GAS_ARGON				"argon"
-#define GAS_KRYPTON				"krypton"
-#define GAS_NEON				"neon"
-#define GAS_XENON				"xenon"
-#define GAS_AMMONIA				"ammonia"
-#define GAS_CHLORINE			"chlorine"
-#define GAS_SULFUR				"sulfurdioxide"
-#define GAS_STEAM				"water"
-#define GAS_PLASMA				"plasma"
-//TG GASES - PLAN TO REMOVE
-#define GAS_PLUOXIUM			"pluoxium"
-
-///All gases in the game. The sorting of UIs like scrubbers will match this, so keep that in mind.
-GLOBAL_LIST_INIT(all_gases, list(
-	GAS_ALIEN,
-	GAS_OXYGEN,
-	GAS_NITROGEN,
-	GAS_CO2,
-	GAS_N2O,
-	GAS_PLASMA,
-	GAS_STEAM,
-	GAS_HYDROGEN,
-	GAS_DEUTERIUM,
-	GAS_TRITIUM,
-	GAS_PLUOXIUM,
-	GAS_HELIUM,
-	GAS_ARGON,
-	GAS_KRYPTON,
-	GAS_NEON,
-	GAS_XENON,
-	GAS_AMMONIA,
-	GAS_CHLORINE,
-	GAS_SULFUR,
-	GAS_METHANE,
-	GAS_CO,
-	GAS_NO,
-	GAS_METHYL_BROMIDE,
-))
-GLOBAL_LIST_INIT(common_gases, list(GAS_OXYGEN, GAS_NITROGEN, GAS_CO2, GAS_N2O, GAS_PLASMA,))
-GLOBAL_LIST_INIT(noble_gases, list(GAS_HELIUM, GAS_ARGON, GAS_NEON, GAS_KRYPTON))
-
 GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir
 	     2,  1,  3,  8, 10,  9, 11,  4,  6,  5,  7, 12, 14, 13, 15,
 	32, 34, 33, 35, 40, 42,	41, 43, 36, 38, 37, 39, 44, 46, 45, 47,
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 16e88bb09b6..ddcd8c2293f 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -535,7 +535,7 @@ SUBSYSTEM_DEF(zas)
 		if(xgm_gas_data.flags[gas] & (XGM_GAS_CONTAMINANT|XGM_GAS_FUEL|XGM_GAS_OXIDIZER))
 			restricted_gases |= gas
 
-	var/list/viable_gases = GLOB.all_gases - restricted_gases - GAS_XENON //TODO: add XGM_GAS_DANGEROUS
+	var/list/viable_gases = xgm_gas_data.gases - restricted_gases - GAS_XENON //TODO: add XGM_GAS_DANGEROUS
 	var/datum/gas_mixture/mix_real = new
 	var/list/mix_list = list()
 	var/num_gases = rand(1, 3)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 33f3dc2d8e2..5ddd86e803e 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -396,7 +396,7 @@
 
 /obj/structure/window/fire_act(exposed_temperature, exposed_volume)
 	if (exposed_temperature > melting_point)
-		take_damage(round(exposed_volume / 100), BURN, 0, 0) //The max of 9 is to ensure it takes 4 ticks to destroy, which is incredibly dramatic
+		take_damage(round(exposed_volume / 100), BURN, 0, 0)
 
 /obj/structure/window/get_dumping_location()
 	return null
@@ -586,6 +586,7 @@
 	damage_deflection = 21
 	explosion_block = 2
 	glass_type = /obj/item/stack/sheet/plasmarglass
+	melting_point = 25000
 
 /obj/structure/window/reinforced/plasma/block_superconductivity()
 	return TRUE
diff --git a/code/modules/atmospherics/ZAS/XGM/gas_data.dm b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
index a59e99f620b..68b4e127a0f 100644
--- a/code/modules/atmospherics/ZAS/XGM/gas_data.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gas_data.dm
@@ -88,6 +88,12 @@ GLOBAL_REAL(xgm_gas_data, /datum/xgm_gas_data) = new
 		base_value[gas.id] = gas.base_value
 		purchaseable[gas.id] = gas.purchaseable
 
+		if(flags & XGM_GAS_COMMON)
+			GLOB.common_gases += p
+
+		if(flags & XGM_GAS_NOBLE)
+			GLOB.noble_gases += p
+
 	return 1
 
 /obj/effect/gas_overlay
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index 84639c85774..e00022c5815 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -1,9 +1,41 @@
+//WHEN ADDING A NEW GAS, ADD IT TO constants.js!!
+
+/datum/xgm_gas/alium
+	id = GAS_ALIEN
+	name = "Aliether"
+	hidden_from_codex = TRUE
+	symbol_html = "X"
+	symbol = "X"
+
+/datum/xgm_gas/alium/New()
+	var/num = rand(100,999)
+	name = "Compound #[num]"
+	specific_heat = rand(1, 400)	// J/(mol*K)
+	molar_mass = rand(20,800)/1000	// kg/mol
+	if(prob(40))
+		flags |= XGM_GAS_FUEL
+	else if(prob(40)) //it's prooobably a bad idea for gas being oxidizer to itself.
+		flags |= XGM_GAS_OXIDIZER
+	if(prob(40))
+		flags |= XGM_GAS_CONTAMINANT
+	if(prob(40))
+		flags |= XGM_GAS_FUSION_FUEL
+	if(!flags)
+		flags |= XGM_GAS_NOBLE
+
+	symbol_html = "X<sup>[num]</sup>"
+	symbol = "X-[num]"
+	if(prob(50))
+		tile_color = RANDOM_RGB
+		overlay_limit = 0.5
+
+//COMMON GASES
 /datum/xgm_gas/oxygen
 	id = GAS_OXYGEN
 	name = "Oxygen"
 	specific_heat = 20	// J/(mol*K)
 	molar_mass = 0.032	// kg/mol
-	flags = XGM_GAS_OXIDIZER | XGM_GAS_FUSION_FUEL
+	flags = XGM_GAS_OXIDIZER | XGM_GAS_FUSION_FUEL | XGM_GAS_COMMON
 	symbol_html = "O<sub>2</sub>"
 	symbol = "O2"
 	purchaseable = TRUE
@@ -14,6 +46,7 @@
 	name = "Nitrogen"
 	specific_heat = 20	// J/(mol*K)
 	molar_mass = 0.028	// kg/mol
+	flags = XGM_GAS_COMMON
 	symbol_html = "N<sub>2</sub>"
 	symbol = "N2"
 	purchaseable = TRUE
@@ -24,19 +57,37 @@
 	name = "Carbon Dioxide"
 	specific_heat = 30	// J/(mol*K)
 	molar_mass = 0.044	// kg/mol
+	flags = XGM_GAS_COMMON
 	symbol_html = "CO<sub>2</sub>"
 	symbol = "CO2"
 	purchaseable = TRUE
 	base_value = 0.2
 
-/datum/xgm_gas/methyl_bromide
-	id = GAS_METHYL_BROMIDE
-	name = "Methyl Bromide"
-	specific_heat = 42.59 // J/(mol*K)
-	molar_mass = 0.095 // kg/mol
-	//breathed_product = /datum/reagent/toxin/methyl_bromide
-	symbol_html = "CH<sub>3</sub>Br"
-	symbol = "CH3Br"
+/datum/xgm_gas/sleeping_agent
+	id = GAS_N2O
+	name = "Nitrous Oxide"
+	specific_heat = 40	// J/(mol*K)
+	molar_mass = 0.044	// kg/mol. N2O
+	tile_overlay = "sleeping_agent"
+	overlay_limit = 0.5
+	flags = XGM_GAS_OXIDIZER | XGM_GAS_COMMON //N2O is a powerful oxidizer
+	//breathed_product = /datum/reagent/nitrous_oxide
+	symbol_html = "N<sub>2</sub>O"
+	symbol = "N2O"
+	base_value = 3
+
+/datum/xgm_gas/vapor
+	id = GAS_STEAM
+	name = "Steam"
+	tile_overlay = "generic"
+	overlay_limit = 0.5
+	specific_heat = 30	// J/(mol*K)
+	molar_mass = 0.020	// kg/mol
+	flags = XGM_GAS_COMMON
+	breathed_product = /datum/reagent/water
+	condensation_point = 308.15 // 35C. Dew point is ~20C but this is better for gameplay considerations.
+	symbol_html = "H<sub>2</sub>O"
+	symbol = "H2O"
 
 /datum/xgm_gas/phoron
 	id = GAS_PLASMA
@@ -53,62 +104,13 @@
 
 	tile_overlay = "plasma"
 	overlay_limit = MOLES_PHORON_VISIBLE
-	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL
+	flags = XGM_GAS_FUEL | XGM_GAS_CONTAMINANT | XGM_GAS_FUSION_FUEL | XGM_GAS_COMMON
 	breathed_product = /datum/reagent/toxin/plasma
 	symbol_html = "Ph"
 	symbol = "Ph"
 	base_value = 2
 
-/datum/xgm_gas/sleeping_agent
-	id = GAS_N2O
-	name = "Nitrous Oxide"
-	specific_heat = 40	// J/(mol*K)
-	molar_mass = 0.044	// kg/mol. N2O
-	tile_overlay = "sleeping_agent"
-	overlay_limit = 0.5
-	flags = XGM_GAS_OXIDIZER //N2O is a powerful oxidizer
-	//breathed_product = /datum/reagent/nitrous_oxide
-	symbol_html = "N<sub>2</sub>O"
-	symbol = "N2O"
-	base_value = 3
-
-/datum/xgm_gas/methane
-	id = GAS_METHANE
-	name = "Methane"
-	specific_heat = 30	// J/(mol*K)
-	molar_mass = 0.016	// kg/mol
-	flags = XGM_GAS_FUEL
-	symbol_html = "CH<sub>4</sub>"
-	symbol = "CH4"
-
-/datum/xgm_gas/alium
-	id = GAS_ALIEN
-	name = "Aliether"
-	hidden_from_codex = TRUE
-	symbol_html = "X"
-	symbol = "X"
-
-/datum/xgm_gas/alium/New()
-	var/num = rand(100,999)
-	name = "Compound #[num]"
-	specific_heat = rand(1, 400)	// J/(mol*K)
-	molar_mass = rand(20,800)/1000	// kg/mol
-	if(prob(40))
-		flags |= XGM_GAS_FUEL
-	else if(prob(40)) //it's prooobably a bad idea for gas being oxidizer to itself.
-		flags |= XGM_GAS_OXIDIZER
-	if(prob(40))
-		flags |= XGM_GAS_CONTAMINANT
-	if(prob(40))
-		flags |= XGM_GAS_FUSION_FUEL
-
-	symbol_html = "X<sup>[num]</sup>"
-	symbol = "X-[num]"
-	if(prob(50))
-		tile_color = RANDOM_RGB
-		overlay_limit = 0.5
-
-
+//SM & R-UST GASES
 /datum/xgm_gas/hydrogen
 	id = GAS_HYDROGEN
 	name = "Hydrogen"
@@ -128,15 +130,16 @@
 /datum/xgm_gas/hydrogen/tritium
 	id = GAS_TRITIUM
 	name = "Tritium"
-	symbol_html = "T"
+	symbol_html = "<sup>3</sup>H"
 	symbol = "T"
 
+//NOBLE GASES
 /datum/xgm_gas/helium
 	id = GAS_HELIUM
 	name = "Helium"
 	specific_heat = 80	// J/(mol*K)
 	molar_mass = 0.004	// kg/mol
-	flags = XGM_GAS_FUSION_FUEL
+	flags = XGM_GAS_FUSION_FUEL | XGM_GAS_NOBLE
 	symbol_html = "He"
 	symbol = "He"
 
@@ -145,6 +148,7 @@
 	name = "Argon"
 	specific_heat = 10	// J/(mol*K)
 	molar_mass = 0.018	// kg/mol
+	flags = XGM_GAS_NOBLE
 	symbol_html = "Ar"
 	symbol = "Ar"
 	purchaseable = TRUE
@@ -156,6 +160,7 @@
 	name = "Krypton"
 	specific_heat = 5	// J/(mol*K)
 	molar_mass = 0.036	// kg/mol
+	flags = XGM_GAS_NOBLE
 	symbol_html = "Kr"
 	symbol = "Kr"
 	purchaseable = TRUE
@@ -166,6 +171,7 @@
 	name = "Neon"
 	specific_heat = 20	// J/(mol*K)
 	molar_mass = 0.01	// kg/mol
+	flags = XGM_GAS_NOBLE
 	symbol_html = "Ne"
 	symbol = "Ne"
 	purchaseable = TRUE
@@ -176,12 +182,68 @@
 	name = "Xenon"
 	specific_heat = 3	// J/(mol*K)
 	molar_mass = 0.054	// kg/mol
+	flags = XGM_GAS_NOBLE
 	breathed_product = /datum/reagent/nitrous_oxide/xenon
 	symbol_html = "Xe"
 	symbol = "Xe"
 	purchaseable = TRUE
 	base_value = 5
 
+/datum/xgm_gas/boron
+	id = GAS_BORON
+	name = "Boron"
+	specific_heat = 11
+	molar_mass = 0.011
+	flags = XGM_GAS_FUSION_FUEL | XGM_GAS_NOBLE
+	breathed_product = /datum/reagent/toxin/boron
+	symbol_html = "B"
+	symbol = "B"
+
+//MISC ELEMENTS
+/datum/xgm_gas/methane
+	id = GAS_METHANE
+	name = "Methane"
+	specific_heat = 30	// J/(mol*K)
+	molar_mass = 0.016	// kg/mol
+	flags = XGM_GAS_FUEL
+	symbol_html = "CH<sub>4</sub>"
+	symbol = "CH4"
+
+/datum/xgm_gas/ammonia
+	id = GAS_AMMONIA
+	name = "Ammonia"
+	specific_heat = 20	// J/(mol*K)
+	molar_mass = 0.017	// kg/mol
+	breathed_product = /datum/reagent/ammonia
+	symbol_html = "NH<sub>3</sub>"
+	symbol = "NH3"
+
+/datum/xgm_gas/chlorine
+	id = GAS_CHLORINE
+	name = "Chlorine"
+	tile_color = "#c5f72d"
+	overlay_limit = 0.5
+	specific_heat = 5	// J/(mol*K)
+	molar_mass = 0.017	// kg/mol
+	tile_overlay = "chlorine"
+	overlay_limit = 0.1
+	flags = XGM_GAS_OXIDIZER
+	breathed_product = /datum/reagent/chlorine
+	symbol_html = "Cl"
+	symbol = "Cl"
+	purchaseable = TRUE
+	base_value = 7
+
+//MISC COMPOUNDS
+/datum/xgm_gas/methyl_bromide
+	id = GAS_METHYL_BROMIDE
+	name = "Methyl Bromide"
+	specific_heat = 42.59 // J/(mol*K)
+	molar_mass = 0.095 // kg/mol
+	//breathed_product = /datum/reagent/toxin/methyl_bromide
+	symbol_html = "CH<sub>3</sub>Br"
+	symbol = "CH3Br"
+
 /datum/xgm_gas/nitrodioxide
 	id = GAS_NO2
 	name = "Nitrogen Dioxide"
@@ -202,34 +264,6 @@
 	symbol_html = "NO"
 	symbol = "NO"
 
-/datum/xgm_gas/chlorine
-	id = GAS_CHLORINE
-	name = "Chlorine"
-	tile_color = "#c5f72d"
-	overlay_limit = 0.5
-	specific_heat = 5	// J/(mol*K)
-	molar_mass = 0.017	// kg/mol
-	tile_overlay = "chlorine"
-	overlay_limit = 0.1
-	flags = XGM_GAS_OXIDIZER
-	breathed_product = /datum/reagent/chlorine
-	symbol_html = "Cl"
-	symbol = "Cl"
-	purchaseable = TRUE
-	base_value = 7
-
-/datum/xgm_gas/vapor
-	id = GAS_STEAM
-	name = "Steam"
-	tile_overlay = "generic"
-	overlay_limit = 0.5
-	specific_heat = 30	// J/(mol*K)
-	molar_mass = 0.020	// kg/mol
-	breathed_product = /datum/reagent/water
-	condensation_point = 308.15 // 35C. Dew point is ~20C but this is better for gameplay considerations.
-	symbol_html = "H<sub>2</sub>O"
-	symbol = "H2O"
-
 /datum/xgm_gas/sulfurdioxide
 	id = GAS_SULFUR
 	name = "Sulfur Dioxide"
@@ -238,15 +272,6 @@
 	symbol_html = "SO<sub>2</sub>"
 	symbol = "SO2"
 
-/datum/xgm_gas/ammonia
-	id = GAS_AMMONIA
-	name = "Ammonia"
-	specific_heat = 20	// J/(mol*K)
-	molar_mass = 0.017	// kg/mol
-	breathed_product = /datum/reagent/ammonia
-	symbol_html = "NH<sub>3</sub>"
-	symbol = "NH3"
-
 /datum/xgm_gas/carbon_monoxide
 	id = GAS_CO
 	name = "Carbon Monoxide"
@@ -256,11 +281,3 @@
 	symbol_html = "CO"
 	symbol = "CO"
 
-/datum/xgm_gas/pluoxium
-	id = GAS_PLUOXIUM
-	name = "Pluoxium"
-	specific_heat = 80
-	molar_mass = 0.002 //Yeah idk, its some kind of super gas or something
-	base_value = 5
-	symbol_html = "Pl"
-	symbol = "Pl"
diff --git a/code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm b/code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm
index dbdd45cbb25..66197ddb6a5 100644
--- a/code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm
+++ b/code/modules/atmospherics/ZAS/zas_extras/gas_reagents.dm
@@ -36,6 +36,15 @@
 		to_chat(M, "<span class='warning'>You feel [warning_message].</span>")
 
 	return ..()
+
 /datum/reagent/carbon_monoxide/on_mob_end_metabolize(mob/living/L)
 	. = ..()
 	L.clear_alert(ALERT_TOO_MUCH_CO2, clear_override = TRUE)
+
+/datum/reagent/toxin/boron
+	name = "Boron"
+	description = "A chemical that is highly valued for its potential in fusion energy."
+	taste_description = "metal"
+	reagent_state = SOLID
+	color = "#837e79"
+	toxpwr = 7
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index c0878c0cbfa..b59985506ce 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -312,7 +312,7 @@
 		thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "warning_max", "selected" = selected.warning_max))
 		thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "hazard_max", "selected" = selected.hazard_max))
 
-		for(var/gas_id in GLOB.all_gases - GAS_ALIEN)
+		for(var/gas_id in ASSORTED_GASES)
 			if(!(gas_id in TLV)) // We're not interested in this gas, it seems.
 				continue
 			selected = TLV[gas_id]
@@ -476,7 +476,7 @@
 			for(var/device_id in my_area.air_scrub_info)
 				send_signal(device_id, list(
 					"power" = 1,
-					"set_filters" = GLOB.all_gases - GAS_ALIEN,
+					"set_filters" = ASSORTED_GASES,
 					"scrubbing" = 1,
 					"quicksucc" = 1
 				), signal_source)
@@ -967,7 +967,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 			"Temperature" = "temperature"
 		)
 
-		for(var/gas_id in GLOB.all_gases)
+		for(var/gas_id in ASSORTED_GASES)
 			component_options |= gas_id
 	air_alarm_options = add_option_port("Air Alarm Options", component_options)
 	options_map = component_options
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 924f2e6b9c2..7df1a82b953 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -133,13 +133,13 @@
 
 /obj/machinery/atmospherics/components/trinary/filter/ui_data()
 	var/data = list()
-	var/static/all_gases = GLOB.all_gases
+	var/static/all_gases = xgm_gas_data.gases
 	data["on"] = on
 	data["rate"] = round(transfer_rate)
 	data["max_rate"] = round(MAX_TRANSFER_RATE)
 
 	data["filter_types"] = list()
-	for(var/gas in GLOB.all_gases - GAS_ALIEN)
+	for(var/gas in ASSORTED_GASES)
 		data["filter_types"] += list(list("name" = xgm_gas_data.name[gas], "gas_id" = gas, "enabled" = (gas in filter_type)))
 
 	return data
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 98161a8c20d..659829a0ced 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -162,7 +162,7 @@
 		return FALSE
 
 	var/list/f_types = list()
-	for(var/gas_id in GLOB.all_gases - GAS_ALIEN)
+	for(var/gas_id in ASSORTED_GASES)
 		f_types += list(list("gas_id" = gas_id, "gas_name" = gas_id, "enabled" = (gas_id in filter_types)))
 
 	var/datum/signal/signal = new(list(
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 2204a2b62de..580b0928c25 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -16,23 +16,11 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 		GAS_CHLORINE = /obj/machinery/portable_atmospherics/canister/chlorine,
 		GAS_NEON = /obj/machinery/portable_atmospherics/canister/neon,
 		"air" = /obj/machinery/portable_atmospherics/canister/air,
-		/*"nitrium" = /obj/machinery/portable_atmospherics/canister/nitrium,
-		"bz" = /obj/machinery/portable_atmospherics/canister/bz,
-		"air" = /obj/machinery/portable_atmospherics/canister/air,
-		"water_vapor" = /obj/machinery/portable_atmospherics/canister/water_vapor,
-		"tritium" = /obj/machinery/portable_atmospherics/canister/tritium,
-		"hyper-noblium" = /obj/machinery/portable_atmospherics/canister/nob,
-		"pluoxium" = /obj/machinery/portable_atmospherics/canister/pluoxium,
+		GAS_HYDROGEN = /obj/machinery/portable_atmospherics/canister/hydrogen,
+		GAS_DEUTERIUM = /obj/machinery/portable_atmospherics/canister/deuterium,
+		GAS_TRITIUM = /obj/machinery/portable_atmospherics/canister/tritium,
 		"caution" = /obj/machinery/portable_atmospherics/canister,
-		"miasma" = /obj/machinery/portable_atmospherics/canister/miasma,
-		"freon" = /obj/machinery/portable_atmospherics/canister/freon,
-		"hydrogen" = /obj/machinery/portable_atmospherics/canister/hydrogen,
-		"healium" = /obj/machinery/portable_atmospherics/canister/healium,
-		"proto_nitrate" = /obj/machinery/portable_atmospherics/canister/proto_nitrate,
-		"zauker" = /obj/machinery/portable_atmospherics/canister/zauker,
-		"helium" = /obj/machinery/portable_atmospherics/canister/helium,
-		"antinoblium" = /obj/machinery/portable_atmospherics/canister/antinoblium,
-		"halon" = /obj/machinery/portable_atmospherics/canister/halon*/
+		GAS_STEAM = /obj/machinery/portable_atmospherics/canister/water_vapor,
 	))
 
 
@@ -143,156 +131,111 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
 // Basic canister per gas below here
 
 /obj/machinery/portable_atmospherics/canister/air
-	name = "Air canister"
+	name = "air canister"
 	desc = "Pre-mixed air."
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#c6c0b5"
-/*
-/obj/machinery/portable_atmospherics/canister/antinoblium
-	name = "Antinoblium canister"
-	gas_type = /datum/gas/antinoblium
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#9b5d7f#368bff"
 
-/obj/machinery/portable_atmospherics/canister/bz
-	name = "\improper BZ canister"
-	gas_type = /datum/gas/bz
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#9b5d7f#d0d2a0"
-*/
 /obj/machinery/portable_atmospherics/canister/carbon_dioxide
-	name = "Carbon dioxide canister"
+	name = "carbon dioxide canister"
 	gas_type = GAS_CO2
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#4e4c48"
 
 /obj/machinery/portable_atmospherics/canister/carbon_monoxide
-	name = "Carbon monoxide canister"
+	name = "carbon monoxide canister"
 	gas_type = GAS_CO
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#808080"
 
 /obj/machinery/portable_atmospherics/canister/xenon
-	name = "Xenon canister"
+	name = "xenon canister"
 	gas_type = GAS_XENON
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#808080"
 
 /obj/machinery/portable_atmospherics/canister/krypton
-	name = "Krypton canister"
+	name = "krypton canister"
 	gas_type = GAS_KRYPTON
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#44E022"
 
 /obj/machinery/portable_atmospherics/canister/nitrogen
-	name = "Nitrogen canister"
+	name = "nitrogen canister"
 	gas_type = GAS_NITROGEN
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#d41010"
 
 /obj/machinery/portable_atmospherics/canister/nitrous_oxide
-	name = "Nitrous oxide canister"
+	name = "nitrous oxide canister"
 	gas_type = GAS_N2O
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#c63e3b#f7d5d3"
 
 /obj/machinery/portable_atmospherics/canister/chlorine
-	name = "Chlorine canister"
+	name = "chlorine canister"
 	gas_type = GAS_CHLORINE
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#b9d41b"
 
 /obj/machinery/portable_atmospherics/canister/argon
-	name = "Argon canister"
+	name = "argon canister"
 	gas_type = GAS_ARGON
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#CC4DCD"
 
 /obj/machinery/portable_atmospherics/canister/neon
-	name = "Neon canister"
+	name = "neon canister"
 	gas_type = GAS_NEON
 	greyscale_config = /datum/greyscale_config/canister
 	greyscale_colors = "#FF825C"
 
-/*
-/obj/machinery/portable_atmospherics/canister/nitrium
-	name = "Nitrium canister"
-	gas_type = /datum/gas/nitrium
-	greyscale_config = /datum/greyscale_config/canister
-	greyscale_colors = "#7b4732"
-
-/obj/machinery/portable_atmospherics/canister/nob
-	name = "Hyper-noblium canister"
-	gas_type = /datum/gas/hypernoblium
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#6399fc#b2b2b2"
-*/
-
 /obj/machinery/portable_atmospherics/canister/oxygen
-	name = "Oxygen canister"
+	name = "oxygen canister"
 	gas_type = GAS_OXYGEN
 	greyscale_config = /datum/greyscale_config/canister/stripe
 	greyscale_colors = "#2786e5#e8fefe"
 
-/obj/machinery/portable_atmospherics/canister/pluoxium
-	name = "Pluoxium canister"
-	gas_type = GAS_PLUOXIUM
+/obj/machinery/portable_atmospherics/canister/boron
+	name = "boron canister"
+	gas_type = GAS_BORON
 	greyscale_config = /datum/greyscale_config/canister
-	greyscale_colors = "#2786e5"
-/*
-/obj/machinery/portable_atmospherics/canister/proto_nitrate
-	name = "Proto Nitrate canister"
-	gas_type = /datum/gas/proto_nitrate
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#008200#33cc33"
-*/
+	greyscale_colors = "#32DF1F"
+
 /obj/machinery/portable_atmospherics/canister/plasma
-	name = "Plasma canister"
+	name = "plasma canister"
 	gas_type = GAS_PLASMA
 	greyscale_config = /datum/greyscale_config/canister/hazard
 	greyscale_colors = "#f62800#000000"
-/*
+
+/obj/machinery/portable_atmospherics/canister/hydrogen
+	name = "hydrogen canister"
+	gas_type = GAS_HYDROGEN
+	greyscale_config = /datum/greyscale_config/canister/hazard
+	greyscale_colors = "#3fcd40#000000"
+
+/obj/machinery/portable_atmospherics/canister/deuterium
+	name = "hydrogen canister"
+	gas_type = GAS_DEUTERIUM
+	greyscale_config = /datum/greyscale_config/canister/hazard
+	greyscale_colors = "#E81BFF#000000"
+
 /obj/machinery/portable_atmospherics/canister/tritium
-	name = "Tritium canister"
-	gas_type = /datum/gas/tritium
+	name = "tritium canister"
+	gas_type = GAS_TRITIUM
 	greyscale_config = /datum/greyscale_config/canister/hazard
 	greyscale_colors = "#3fcd40#000000"
 
 /obj/machinery/portable_atmospherics/canister/water_vapor
-	name = "Water vapor canister"
-	gas_type = /datum/gas/water_vapor
+	name = "steam canister"
+	gas_type = GAS_STEAM
 	filled = 1
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#4c4e4d#f7d5d3"
 
-/obj/machinery/portable_atmospherics/canister/zauker
-	name = "Zauker canister"
-	gas_type = /datum/gas/zauker
-	filled = 1
-	greyscale_config = /datum/greyscale_config/canister/double_stripe
-	greyscale_colors = "#009a00#006600"
-*/
 // Special canisters below here
-
-/obj/machinery/portable_atmospherics/canister/fusion_test
-	name = "fusion test canister"
-	desc = "Don't be a badmin."
-	heat_limit = 1e12
-	pressure_limit = 1e14
-
-/*
-/obj/machinery/portable_atmospherics/canister/fusion_test/create_gas()
-	air_contents.add_gases(/datum/gas/hydrogen, /datum/gas/tritium)
-	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)
-*/
-
 /obj/machinery/portable_atmospherics/canister/anesthetic_mix
-	name = "Anesthetic mix"
+	name = "anesthetic mix"
 	desc = "A mixture of N2O and Oxygen"
 	greyscale_config = /datum/greyscale_config/canister/double_stripe
 	greyscale_colors = "#9fba6c#3d4680"
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 843f00d1819..4afb885df45 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -102,7 +102,7 @@
 
 	data["id_tag"] = -1 //must be defined in order to reuse code between portable and vent scrubbers
 	data["filter_types"] = list()
-	for(var/gas_id in GLOB.all_gases - GAS_ALIEN)
+	for(var/gas_id in ASSORTED_GASES)
 		data["filter_types"] += list(list("gas_id" = gas_id, "gas_name" = gas_id, "enabled" = (gas_id in scrubbing)))
 
 	if(holding)
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index 2d4c4b227f8..10ad1c85695 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -106,7 +106,7 @@
 	var/obj/machinery/portable_atmospherics/canister/C = O
 	var/worth = cost
 	var/datum/gas_mixture/canister_mix = C.return_air()
-	var/list/gases_to_check = GLOB.all_gases
+	var/list/gases_to_check = xgm_gas_data.gases
 
 	for(var/gasID in gases_to_check)
 		if(canister_mix.getGroupGas(gasID) > 0)
diff --git a/code/modules/power/supermatter/supermatter_process.dm b/code/modules/power/supermatter/supermatter_process.dm
index 1c273d6e643..857aa00dbd2 100644
--- a/code/modules/power/supermatter/supermatter_process.dm
+++ b/code/modules/power/supermatter/supermatter_process.dm
@@ -214,7 +214,7 @@
 		if(consumed_carbon_dioxide)
 			removed.adjustGas(GAS_CO2, -consumed_carbon_dioxide * 0.5, FALSE)
 			removed.adjustGas(GAS_OXYGEN, -consumed_carbon_dioxide * 0.5, FALSE)
-			removed.adjustGas(GAS_PLUOXIUM, consumed_carbon_dioxide * 0.25, FALSE)
+			removed.adjustGas(GAS_HYDROGEN, consumed_carbon_dioxide * 0.25, FALSE) //Pluoxium is hydrogen now, deal with it.
 
 	/*if(prob(gas_comp[/datum/gas/zauker]))
 		playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10)
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 3a1a83616dd..f15a8088b31 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -127,7 +127,7 @@
 	var/SA_moles = breath_gases[GAS_N2O]
 
 	//Partial pressures in our breath
-	var/O2_pp = breath.getBreathPartialPressure(O2_moles) / max(1, (8 * breath.getBreathPartialPressure(breath_gases[GAS_PLUOXIUM])))
+	var/O2_pp = breath.getBreathPartialPressure(O2_moles)
 	var/N2_pp = breath.getBreathPartialPressure(N2_moles)
 	var/Plasma_pp = breath.getBreathPartialPressure(plasma_moles)
 	var/CO2_pp = breath.getBreathPartialPressure(CO2_moles)
diff --git a/pariah.dme b/pariah.dme
index 389f2c6b3e9..575acdf6792 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -200,6 +200,7 @@
 #include "code\__DEFINES\atmospherics\atmos_piping.dm"
 #include "code\__DEFINES\atmospherics\reactor.dm"
 #include "code\__DEFINES\atmospherics\temperature.dm"
+#include "code\__DEFINES\atmospherics\XGM.dm"
 #include "code\__DEFINES\atmospherics\ZAS.dm"
 #include "code\__DEFINES\atmospherics\ZAS_math.dm"
 #include "code\__DEFINES\dcs\flags.dm"
diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index e7cb7a320da..52e38bfbcee 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -337,6 +337,12 @@ const GASES = [
     'label': '³H',
     'color': 'limegreen',
   },
+  {
+    'id': 'boron',
+    'name': 'Boron',
+    'label': 'B',
+    'color': 'limegreen',
+  },
 ];
 
 export const getGasLabel = (gasId, fallbackValue) => {

From adc4e3ec1abccb233e72ae9da27a6713bc62fbb5 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 3 Jul 2022 16:06:07 -0400
Subject: [PATCH 177/200] removes redundant global list

---
 code/__DEFINES/atmospherics/XGM.dm | 26 --------------------------
 1 file changed, 26 deletions(-)

diff --git a/code/__DEFINES/atmospherics/XGM.dm b/code/__DEFINES/atmospherics/XGM.dm
index a65db3775b8..089efc4ced4 100644
--- a/code/__DEFINES/atmospherics/XGM.dm
+++ b/code/__DEFINES/atmospherics/XGM.dm
@@ -44,32 +44,6 @@
 
 ///All gases that are not placeholders.
 #define ASSORTED_GASES (xgm_gas_data.gases - GAS_ALIEN)
-///All gases in the game. The sorting of UIs like scrubbers will match this, so keep that in mind.
-GLOBAL_LIST_INIT(all_gases, list(
-	GAS_ALIEN,
-	GAS_OXYGEN,
-	GAS_NITROGEN,
-	GAS_CO2,
-	GAS_N2O,
-	GAS_PLASMA,
-	GAS_STEAM,
-	GAS_HYDROGEN,
-	GAS_DEUTERIUM,
-	GAS_TRITIUM,
-	GAS_HELIUM,
-	GAS_ARGON,
-	GAS_KRYPTON,
-	GAS_NEON,
-	GAS_XENON,
-	GAS_BORON,
-	GAS_AMMONIA,
-	GAS_CHLORINE,
-	GAS_SULFUR,
-	GAS_METHANE,
-	GAS_CO,
-	GAS_NO,
-	GAS_METHYL_BROMIDE,
-))
 ///All gases that a player will reliably encounter every round or close to it.
 GLOBAL_LIST_EMPTY(common_gases) //Filled in by xgm_gas_data/New()
 ///All the noble gases.

From d1e7ab5b6553f06f5f0807bcbf499ab8b5a1fc91 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 3 Jul 2022 16:36:34 -0400
Subject: [PATCH 178/200] Back-to-basics firelocks, pt1

---
 code/game/machinery/doors/firedoor.dm | 56 ++++++++-------------------
 1 file changed, 17 insertions(+), 39 deletions(-)

diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 5f92c5412b2..843bfab60ef 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -39,8 +39,6 @@
 	var/area/my_area
 	///List of problem turfs with bad temperature
 	var/list/turf/issue_turfs
-	///Tracks if the firelock is being held open by a crowbar. If so, we don't close until they walk away
-	var/being_held_open = FALSE
 	///Type of alarm when active. See code/defines/firealarm.dm for the list. This var being null means there is no alarm.
 	var/alarm_type = null
 	///The merger_id and merger_typecache variables are used to make rows of firelocks activate at the same time.
@@ -233,7 +231,6 @@
 			continue
 		process_results(checked_turf)
 		RegisterSignal(checked_turf, COMSIG_TURF_EXPOSE, .proc/process_results)
-		RegisterSignal(checked_turf, COMSIG_TURF_CALCULATED_ADJACENT_ATMOS, .proc/process_results)
 
 
 /obj/machinery/door/firedoor/proc/unregister_adjacent_turfs(atom/loc)
@@ -244,7 +241,6 @@
 			continue
 
 		UnregisterSignal(checked_turf, COMSIG_TURF_EXPOSE)
-		UnregisterSignal(checked_turf, COMSIG_TURF_CALCULATED_ADJACENT_ATMOS)
 
 /obj/machinery/door/firedoor/proc/check_atmos(turf/checked_turf)
 	var/datum/gas_mixture/environment = checked_turf.return_air()
@@ -459,45 +455,27 @@
 		return
 
 	if(density)
-		being_held_open = TRUE
-		user.balloon_alert_to_viewers("holding [src] open", "holding [src] open")
-		open()
-		if(QDELETED(user))
-			being_held_open = FALSE
+		user.visible_message(
+			span_danger("[user] presses their crowbar into [src] to pry it open!"),
+			span_notice("You press your crowbar between the door and begin to pry it open..."),
+			span_hear("You hear a metal clang, followed by metallic groans.")
+		)
+		if(!do_after(user, 3 SECONDS, src))
 			return
-		RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/handle_held_open_adjacency)
-		RegisterSignal(user, COMSIG_LIVING_SET_BODY_POSITION, .proc/handle_held_open_adjacency)
-		RegisterSignal(user, COMSIG_PARENT_QDELETING, .proc/handle_held_open_adjacency)
-		handle_held_open_adjacency(user)
-	else
-		close()
-
-/// A simple toggle for firedoors between on and off
-/obj/machinery/door/firedoor/try_to_crowbar_secondary(obj/item/acting_object, mob/user)
-	if(welded || operating)
-		return
-
-	if(density)
+		user.visible_message(
+			span_danger("[user] forces [src] open with a crowbar!"),
+			span_notice("You force open [src]."),
+			span_hear("You hear a heavy metallic object sliding.")
+		)
 		open()
-		if(alarm_type)
-			addtimer(CALLBACK(src, .proc/correct_state), 2 SECONDS, TIMER_UNIQUE)
 	else
+		user.visible_message(
+			span_notice("[user] forces [src] shut."),
+			span_notice("You force [src] closed."),
+			span_hear("You hear a heavy metallic object sliding, followed by a clang.")
+		)
 		close()
 
-/obj/machinery/door/firedoor/proc/handle_held_open_adjacency(mob/user)
-	SIGNAL_HANDLER
-
-	var/mob/living/living_user = user
-	if(!QDELETED(user) && Adjacent(user) && isliving(user) && (living_user.body_position == STANDING_UP))
-		return
-	being_held_open = FALSE
-	correct_state()
-	UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
-	UnregisterSignal(user, COMSIG_LIVING_SET_BODY_POSITION)
-	UnregisterSignal(user, COMSIG_PARENT_QDELETING)
-	if(user)
-		user.balloon_alert_to_viewers("released [src]", "released [src]")
-
 /obj/machinery/door/firedoor/attack_ai(mob/user)
 	add_fingerprint(user)
 	if(welded || operating || machine_stat & NOPOWER)
@@ -557,7 +535,7 @@
  * changes during the timer, the door doesn't close or open incorrectly.
  */
 /obj/machinery/door/firedoor/proc/correct_state()
-	if(obj_flags & EMAGGED || being_held_open)
+	if(obj_flags & EMAGGED)
 		return //Unmotivated, indifferent, we have no real care what state we're in anymore.
 	if(alarm_type && !density) //We should be closed but we're not
 		INVOKE_ASYNC(src, .proc/close)

From 8b9a28af04e57562935aeebdc8b2f615b25eaf74 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 4 Jul 2022 01:08:08 -0400
Subject: [PATCH 179/200] fire/air alarm + firedoor refactor. Fuck me harder

---
 code/__DEFINES/dcs/signals/signals_global.dm  |   3 +
 .../dcs/signals/signals_machinery.dm          |   2 +
 code/__DEFINES/firealarm.dm                   |   7 +
 code/__HELPERS/areas.dm                       |   9 +-
 code/game/area/areas.dm                       |  94 ++++--
 code/game/machinery/doors/firedoor.dm         | 315 +++---------------
 code/game/machinery/firealarm.dm              | 122 ++++---
 code/game/objects/items/blueprints.dm         |   4 -
 code/game/turfs/change_turf.dm                |  82 -----
 code/modules/atmospherics/ZAS/XGM/gases.dm    |   4 +
 .../atmospherics/machinery/airalarm.dm        | 104 ++----
 pariah.dme                                    |   1 +
 12 files changed, 229 insertions(+), 518 deletions(-)
 create mode 100644 code/__DEFINES/dcs/signals/signals_machinery.dm

diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm
index 0ef60fca2ee..d6e1ef2bde8 100644
--- a/code/__DEFINES/dcs/signals/signals_global.dm
+++ b/code/__DEFINES/dcs/signals/signals_global.dm
@@ -68,3 +68,6 @@
 
 /// Global signal sent when a light mechanism is completed (try_id)
 #define COMSIG_GLOB_LIGHT_MECHANISM_COMPLETED "!light_mechanism_completed"
+
+///Global signal sent when SSticker enters Runlevel Game
+#define COMSIG_GLOB_GAME_START "!game_started"
diff --git a/code/__DEFINES/dcs/signals/signals_machinery.dm b/code/__DEFINES/dcs/signals/signals_machinery.dm
new file mode 100644
index 00000000000..05a22ceb1c0
--- /dev/null
+++ b/code/__DEFINES/dcs/signals/signals_machinery.dm
@@ -0,0 +1,2 @@
+///Issued by Air Alarms and Fire Alarms to communicate.
+#define COMSIG_FIRE_ALERT "comsig_fire_alert"
diff --git a/code/__DEFINES/firealarm.dm b/code/__DEFINES/firealarm.dm
index f2a561d12d2..0f7894c2730 100644
--- a/code/__DEFINES/firealarm.dm
+++ b/code/__DEFINES/firealarm.dm
@@ -11,3 +11,10 @@
 #define FIRELOCK_ALARM_TYPE_COLD "firelock_alarm_type_cold"
 ///Designates a fire lock should be closed due unknown reasons (IE fire alarm was pulled)
 #define FIRELOCK_ALARM_TYPE_GENERIC "firelock_alarm_type_generic"
+
+///Fire alert cleared by any means
+#define FIRE_CLEAR (0<<0)
+///Fire alert raised by pulling the fire alarm
+#define FIRE_RAISED_PULL (1<<0)
+///Fire alert raised by the air alarm
+#define FIRE_RAISED_AIRALARM (1<<1)
diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm
index c4b814aed40..956ebf09b7b 100644
--- a/code/__HELPERS/areas.dm
+++ b/code/__HELPERS/areas.dm
@@ -93,15 +93,14 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
 
 	newA.reg_in_areas_in_z()
 
+	for(var/thing2move in oldA.firedoors + oldA.firealarms + oldA.airalarms)
+		thing2move:set_area(get_area(thing2move)) //Dude trust me
+
 	if(!isarea(area_choice) && newA.static_lighting)
 		newA.create_area_lighting_objects()
 
-	var/list/firedoors = oldA.firedoors
-	for(var/door in firedoors)
-		var/obj/machinery/door/firedoor/FD = door
-		FD.CalculateAffectingAreas()
-
 	SEND_GLOBAL_SIGNAL(COMSIG_AREA_CREATED, newA, oldA, creator)
+	CalculateAdjacentFireAreas()
 	to_chat(creator, span_notice("You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered."))
 	return TRUE
 
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 3e6dfc194de..b933a211dae 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -15,20 +15,18 @@
 
 	var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
 
-	///Do we have an active fire alarm?
-	var/fire = FALSE
-	///A var for whether the area allows for detecting fires/etc. Disabled or enabled at a fire alarm, checked by fire locks.
+	///A var for whether the area allows for detecting fires/etc. Disabled or enabled at a fire alarm.
 	var/fire_detect = TRUE
 	///A list of all fire locks in this area. Used by fire alarm panels when resetting fire locks or activating all in an area
 	var/list/firedoors
-	///A list of firelocks currently active. Used by fire alarms when setting their icons.
-	var/list/active_firelocks
 	///A list of all fire alarms in this area. Used by fire locks and burglar alarms to tell the fire alarm to change its icon.
 	var/list/firealarms
+	///A list of all air alarms in this area
+	var/list/airalarms
+	///A list of adjacent areas that will close their fire doors when a fire alarm is sent out by us.
+	var/list/adjacent_fire_areas
 	///Alarm type to count of sources. Not usable for ^ because we handle fires differently
 	var/list/active_alarms = list()
-	///We use this just for fire alarms, because they're area based right now so one alarm going poof shouldn't prevent you from clearing your alarms listing. Fire alarms and fire locks will set and clear alarms.
-	var/datum/alarm_handler/alarm_manager
 
 	var/lightswitch = TRUE
 
@@ -100,6 +98,8 @@
 	var/list/air_vent_info = list()
 	var/list/air_scrub_info = list()
 
+	var/datum/alarm_handler/alarm_manager
+
 /**
  * A list of teleport locations
  *
@@ -143,7 +143,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
 	if (area_flags & UNIQUE_AREA)
 		GLOB.areas_by_type[type] = src
 	power_usage = new /list(AREA_USAGE_LEN) // Some atoms would like to use power in Initialize()
-	alarm_manager = new(src) // just in case
+	alarm_manager = new(src) //Just in case. Apparently.
 	return ..()
 
 /*
@@ -194,6 +194,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
 /area/LateInitialize()
 	power_change() // all machines set to current power level, also updates icon
 	update_beauty()
+	CalculateAdjacentFireAreas()
 
 /area/proc/RunGeneration()
 	if(map_generator)
@@ -266,39 +267,11 @@ GLOBAL_LIST_EMPTY(teleportlocs)
 	if (area_flags & NO_ALERTS)
 		return
 	//Trigger alarm effect
-	set_fire_alarm_effect()
+	communicate_fire_alert(FIRE_RAISED_PULL)
 	//Lockdown airlocks
 	for(var/obj/machinery/door/door in src)
 		close_and_lock_door(door)
 
-/**
- * Trigger the fire alarm visual affects in an area
- *
- * Updates the fire light on fire alarms in the area and sets all lights to emergency mode
- */
-/area/proc/set_fire_alarm_effect()
-	if(fire)
-		return
-	fire = TRUE
-	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-	for(var/obj/machinery/light/L in src)
-		L.update()
-	for(var/obj/machinery/firealarm/firepanel in firealarms)
-		firepanel.set_status()
-
-/**
- * unset the fire alarm visual affects in an area
- *
- * Updates the fire light on fire alarms in the area and sets all lights to emergency mode
- */
-/area/proc/unset_fire_alarm_effects()
-	fire = FALSE
-	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-	for(var/obj/machinery/light/L in src)
-		L.update()
-	for(var/obj/machinery/firealarm/firepanel in firealarms)
-		firepanel.set_status()
-
 /**
  * Update the icon state of the area
  *
@@ -506,3 +479,50 @@ GLOBAL_LIST_EMPTY(teleportlocs)
 /// Called when a living mob that spawned here, joining the round, receives the player client.
 /area/proc/on_joining_game(mob/living/boarder)
 	return
+
+///Called by airalarms and firealarms to communicate the status of the area to relevant machines
+/area/proc/communicate_fire_alert(code, sent_by_neighbor)
+	for(var/obj/machinery/light/L in src)
+		L.update()
+
+	if(sent_by_neighbor) //If a neighboring area is sending an alert, only the firedoors care.
+		if(firedoors)
+			for(var/datum/listener as anything in firedoors)
+				SEND_SIGNAL(listener, COMSIG_FIRE_ALERT, code, sent_by_neighbor)
+	else
+		for(var/datum/listener in airalarms + firealarms + firedoors)
+			SEND_SIGNAL(listener, COMSIG_FIRE_ALERT, code, sent_by_neighbor)
+
+		for(var/area/neighbor as anything in adjacent_fire_areas)
+			neighbor.communicate_fire_alert(code, TRUE)
+
+/**
+ * Calculates what areas are nearby to recieve alarm.
+ *
+ * This proc builds a list of areas that border other areas using firedoors.
+ * It is fairly expensive so it should be run as little as possible (lateinit + area creation)
+ */
+/proc/CalculateAdjacentFireAreas()
+	for(var/area/area_iter in GLOB.sortedAreas)
+		area_iter.adjacent_fire_areas = list()
+
+	for(var/area/area_iter in GLOB.sortedAreas)
+		//Area has no fire doors? Fuck it. We don't care about it.
+		if(!area_iter.firedoors)
+			continue
+
+		//Loop through all fire doors in the area...
+		for(var/obj/machinery/door/firedoor/FD as anything in area_iter.firedoors)
+			//Grab a list of areas adjacent to the fire doors
+			var/list/areas2add = get_adjacent_areas(FD)
+			//Loop through the areas that the firedoors are touching...
+			for(var/area/adj_area as anything in areas2add)
+				//Ignore their loc area
+				if(adj_area == area_iter)
+					continue
+				//Add them to iter's adjacency
+				area_iter.adjacent_fire_areas |= adj_area
+				//Add iter to their adjacency
+				adj_area.adjacent_fire_areas |= area_iter
+
+
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 843bfab60ef..6cb605a23d0 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -23,8 +23,6 @@
 	armor = list(MELEE = 10, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 30, BIO = 100, FIRE = 95, ACID = 70)
 	interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
 
-	COOLDOWN_DECLARE(detect_cooldown)
-
 	///Trick to get the glowing overlay visible from a distance
 	luminosity = 1
 	///X offset for the overlay lights, so that they line up with the thin border firelocks
@@ -33,39 +31,21 @@
 	var/light_yoffset = 0
 
 	var/boltslocked = TRUE
-	///List of areas we handle. See CalculateAffectingAreas()
-	var/list/affecting_areas
 	///For the few times we affect only the area we're actually in. Set during Init. If we get moved, we don't update, but this is consistant with fire alarms and also kinda funny so call it intentional.
 	var/area/my_area
-	///List of problem turfs with bad temperature
-	var/list/turf/issue_turfs
 	///Type of alarm when active. See code/defines/firealarm.dm for the list. This var being null means there is no alarm.
-	var/alarm_type = null
-	///The merger_id and merger_typecache variables are used to make rows of firelocks activate at the same time.
-	var/merger_id = "firelocks"
-	var/static/list/merger_typecache
+	var/alarm_type = FIRE_CLEAR
 
 	///Overlay object for the warning lights. This and some plane settings allows the lights to glow in the dark.
 	var/mutable_appearance/warn_lights
 
-	///looping sound datum for our fire alarm siren.
-	var/datum/looping_sound/firealarm/soundloop
-	///Keeps track of if we're playing the alarm sound loop (as only one firelock per group should be). Used during power changes.
-	var/is_playing_alarm = FALSE
-
 	var/knock_sound = 'sound/effects/glassknock.ogg'
 	var/bash_sound = 'sound/effects/glassbash.ogg'
 
 
 /obj/machinery/door/firedoor/Initialize(mapload)
 	. = ..()
-	COOLDOWN_START(src, detect_cooldown, DETECT_COOLDOWN_STEP_TIME)
-	soundloop = new(src, FALSE)
-	CalculateAffectingAreas()
-	my_area = get_area(src)
-	if(!merger_typecache)
-		merger_typecache = typecacheof(/obj/machinery/door/firedoor)
-
+	RegisterSignal(src, COMSIG_FIRE_ALERT, .proc/handle_alert)
 	if(prob(0.004) && icon == 'icons/obj/doors/doorfireglass.dmi')
 		base_icon_state = "sus"
 		desc += " This one looks a bit sus..."
@@ -74,10 +54,12 @@
 
 /obj/machinery/door/firedoor/LateInitialize()
 	. = ..()
-	RegisterSignal(src, COMSIG_MERGER_ADDING, .proc/merger_adding)
-	RegisterSignal(src, COMSIG_MERGER_REMOVING, .proc/merger_removing)
-	GetMergeGroup(merger_id, merger_typecache)
-	register_adjacent_turfs(src)
+	set_area(get_area(src))
+
+/obj/machinery/door/firedoor/Destroy()
+	set_area(null)
+	return ..()
+
 /**
  * Sets the offset for the warning lights.
  *
@@ -86,11 +68,6 @@
 /obj/machinery/door/firedoor/proc/adjust_lights_starting_offset()
 	return
 
-/obj/machinery/door/firedoor/Destroy()
-	remove_from_areas()
-	QDEL_NULL(soundloop)
-	return ..()
-
 /obj/machinery/door/firedoor/examine(mob/user)
 	. = ..()
 	if(!density)
@@ -159,202 +136,48 @@
 
 	return .
 
-/**
- * Calculates what areas we should worry about.
- *
- * This proc builds a list of areas we are in and areas we border
- * and writes it to affecting_areas.
- */
-/obj/machinery/door/firedoor/proc/CalculateAffectingAreas()
-	var/list/new_affecting_areas = get_adjacent_open_areas(src) | get_area(src)
-	if(compare_list(new_affecting_areas, affecting_areas))
-		return //No changes needed
-
-	remove_from_areas()
-	affecting_areas = new_affecting_areas
-	for(var/area/place in affecting_areas)
-		LAZYADD(place.firedoors, src)
-		if(alarm_type)
-			if(place == get_area(src))
-				LAZYADD(place.active_firelocks, src) //We only add ourselves to our own area's active firelocks...
-			for(var/obj/machinery/firealarm/fire_panel in place.firealarms)
-				fire_panel.set_status() //...but all adjacent fire alarms are notified
-
-/**
- * Removes us from any lists of areas in the affecting_areas list, then clears affecting_areas
- *
- * Undoes everything done in the CalculateAffectingAreas() proc, to clean up prior to deletion.
- * Calls reset() first, in case any alarms need to be cleared first.
- */
-/obj/machinery/door/firedoor/proc/remove_from_areas()
-	if(!affecting_areas)
-		return
-	for(var/area/place in affecting_areas)
-		LAZYREMOVE(place.firedoors, src)
-		LAZYREMOVE(place.active_firelocks, src)
-		if(LAZYLEN(place.active_firelocks)) //if we were the last firelock still active in this particular area
-			continue
-		for(var/obj/machinery/firealarm/fire_panel in place.firealarms)
-			fire_panel.set_status()
-
-/obj/machinery/door/firedoor/proc/merger_adding(obj/machinery/door/firedoor/us, datum/merger/new_merger)
-	SIGNAL_HANDLER
-	if(new_merger.id != merger_id)
-		return
-	RegisterSignal(new_merger, COMSIG_MERGER_REFRESH_COMPLETE, .proc/refresh_shared_turfs)
-
-/obj/machinery/door/firedoor/proc/merger_removing(obj/machinery/door/firedoor/us, datum/merger/old_merger)
-	SIGNAL_HANDLER
-	if(old_merger.id != merger_id)
-		return
-	UnregisterSignal(old_merger, COMSIG_MERGER_REFRESH_COMPLETE)
-
-/obj/machinery/door/firedoor/proc/refresh_shared_turfs(datum/source, list/leaving_members, list/joining_members)
-	SIGNAL_HANDLER
-	var/datum/merger/temp_group = source
-	if(temp_group.origin != src)
+/obj/machinery/door/firedoor/Moved(atom/oldloc)
+	. = ..()
+	var/new_area = get_area(src)
+	if(my_area != new_area)
+		set_area(new_area)
+
+/obj/machinery/door/firedoor/proc/set_area(new_area)
+	if(my_area)
+		LAZYREMOVE(my_area.firedoors, src)
+	if(!new_area)
 		return
-	var/list/shared_problems = list() // We only want to do this once, this is a nice way of pulling that off
-	for(var/obj/machinery/door/firedoor/firelock as anything in temp_group.members)
-		firelock.issue_turfs = shared_problems
-		for(var/dir in GLOB.cardinals)
-			var/turf/checked_turf = get_step(get_turf(firelock), dir)
-			if(!checked_turf)
-				continue
-			process_results(checked_turf)
-
-/obj/machinery/door/firedoor/proc/register_adjacent_turfs(atom/loc)
-	for(var/dir in GLOB.cardinals)
-		var/turf/checked_turf = get_step(get_turf(loc), dir)
-
-		if(!checked_turf)
-			continue
-		process_results(checked_turf)
-		RegisterSignal(checked_turf, COMSIG_TURF_EXPOSE, .proc/process_results)
-
+	my_area = new_area
+	if(my_area)
+		LAZYADD(my_area.firedoors, src)
 
-/obj/machinery/door/firedoor/proc/unregister_adjacent_turfs(atom/loc)
-	for(var/dir in GLOB.cardinals)
-		var/turf/checked_turf = get_step(get_turf(loc), dir)
 
-		if(!checked_turf)
-			continue
-
-		UnregisterSignal(checked_turf, COMSIG_TURF_EXPOSE)
-
-/obj/machinery/door/firedoor/proc/check_atmos(turf/checked_turf)
-	var/datum/gas_mixture/environment = checked_turf.return_air()
-
-	if(environment?.temperature >= FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
-		return FIRELOCK_ALARM_TYPE_HOT
-	if(environment?.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT)
-		return FIRELOCK_ALARM_TYPE_COLD
-	return
-
-/obj/machinery/door/firedoor/proc/process_results(datum/source)
+/obj/machinery/door/firedoor/proc/handle_alert(datum/source, code, sent_by_neighbor)
 	SIGNAL_HANDLER
 
-	if(!COOLDOWN_FINISHED(src, detect_cooldown))
-		return
-	if(alarm_type == FIRELOCK_ALARM_TYPE_GENERIC)
+	if(sent_by_neighbor && !alarm_type) //We dont care about neighbors if we have our own problems
+		if(code == FIRE_CLEAR) //bitflag & 0 returns false, dumbass.
+			INVOKE_ASYNC(src, .proc/open)
+		else
+			INVOKE_ASYNC(src, .proc/close)
 		return
 
-	for(var/area/place in affecting_areas)
-		if(!place.fire_detect) //if any area is set to disable detection
-			return
-
-	var/turf/checked_turf = source
-	var/result = check_atmos(checked_turf)
-
-	if(result && Adjacent(checked_turf))
-		issue_turfs |= checked_turf
-		if(!alarm_type)
-			start_activation_process(result)
-	else
-		issue_turfs -= checked_turf
-		if(!length(issue_turfs) && alarm_type)
-			start_deactivation_process()
-
-
-/**
- * Begins activation process of us and our neighbors.
- *
- * This proc will call activate() on every fire lock (including us) listed
- * in the merge group datum. Returns without doing anything if our alarm_type
- * was already set, as that means that we're already active.
- *
- * Arguments:
- * code should be one of three defined alarm types, or can be not supplied. Will dictate the color of the fire alarm lights, and defults to "firelock_alarm_type_generic"
- */
-/obj/machinery/door/firedoor/proc/start_activation_process(code = FIRELOCK_ALARM_TYPE_GENERIC)
-	if(alarm_type)
-		return //We're already active
-	soundloop.start()
-	is_playing_alarm = TRUE
-	var/datum/merger/merge_group = GetMergeGroup(merger_id, merger_typecache)
-	for(var/obj/machinery/door/firedoor/buddylock as anything in merge_group.members)
-		buddylock.activate(code)
-/**
- * Begins deactivation process of us and our neighbors.
- *
- * This proc will call reset() on every fire lock (including us) listed
- * in the merge group datum. sets our alarm type to null, signifying no alarm.
- */
-/obj/machinery/door/firedoor/proc/start_deactivation_process()
-	soundloop.stop()
-	is_playing_alarm = FALSE
-	var/datum/merger/merge_group = GetMergeGroup(merger_id, merger_typecache)
-	for(var/obj/machinery/door/firedoor/buddylock as anything in merge_group.members)
-		buddylock.reset()
-
-/**
- * Proc that handles activation of the firelock and all this details
- *
- * Sets the alarm_type variable based on the single arg, which is in turn
- * used by several procs to understand the intended state of the fire lock.
- * Also calls set_status() on all fire alarms in all affected areas, tells
- * the area the firelock sits in to report the event (AI, alarm consoles, etc)
- * and finally calls correct_state(), which will handle opening or closing
- * this fire lock.
- */
-/obj/machinery/door/firedoor/proc/activate(code = FIRELOCK_ALARM_TYPE_GENERIC)
-	SIGNAL_HANDLER
-	if(alarm_type)
-		return //Already active
-	alarm_type = code
-	for(var/area/place in affecting_areas)
-		LAZYADD(place.active_firelocks, src)
-		if(LAZYLEN(place.active_firelocks) == 1) //if we're the first to activate in this particular area
-			for(var/obj/machinery/firealarm/fire_panel in place.firealarms)
-				fire_panel.set_status()
-			if(alarm_type != FIRELOCK_ALARM_TYPE_GENERIC) //Generic alarms tend to activate all firelocks in an area, which otherwise makes the red lighting spread like a virus. Anyway, fire alarms already do this for manual pulls.
-				place.set_fire_alarm_effect() //bathe in red
-			if(place == my_area)
-				place.alarm_manager.send_alarm(ALARM_FIRE, place) //We'll limit our reporting to just the area we're on. If the issue affects bordering areas, they can report it themselves
-	update_icon() //Sets the door lights even if the door doesn't move.
-	correct_state()
+	if(code == alarm_type) //We're already on this alert level.
+		return
 
-/**
- * Proc that handles reset steps
- *
- * Clears the alarm state and attempts to open the firelock.
- */
-/obj/machinery/door/firedoor/proc/reset()
-	SIGNAL_HANDLER
-	alarm_type = null
-	for(var/area/place in affecting_areas)
-		LAZYREMOVE(place.active_firelocks, src)
-		if(!LAZYLEN(place.active_firelocks)) //if we were the last firelock still active in this particular area
-			for(var/obj/machinery/firealarm/fire_panel in place.firealarms)
-				fire_panel.set_status()
-			if(place == my_area)
-				place.alarm_manager.clear_alarm(ALARM_FIRE, place)
-			place.unset_fire_alarm_effects()
-	COOLDOWN_START(src, detect_cooldown, DETECT_COOLDOWN_STEP_TIME)
-	soundloop.stop()
-	is_playing_alarm = FALSE
-	update_icon() //Sets the door lights even if the door doesn't move.
-	correct_state()
+	switch(code)
+		if(FIRE_CLEAR)
+			alarm_type = code
+			INVOKE_ASYNC(src, .proc/open)
+		if(FIRE_RAISED_AIRALARM) //Pulls do not override air alarms
+			if(!alarm_type)
+				alarm_type = code
+				INVOKE_ASYNC(src, .proc/close)
+		if(FIRE_RAISED_PULL)
+			if(alarm_type & FIRE_RAISED_AIRALARM)
+				return //We cannot overrule airalarms
+			alarm_type = code
+			INVOKE_ASYNC(src, .proc/close)
 
 /obj/machinery/door/firedoor/emag_act(mob/user, obj/item/card/emag/doorjack/digital_crowbar)
 	if(obj_flags & EMAGGED)
@@ -380,16 +203,6 @@
 	. = ..()
 	update_icon()
 
-	if(machine_stat & NOPOWER)
-		soundloop.stop()
-		return
-
-	correct_state()
-
-	if(is_playing_alarm)
-		soundloop.start()
-
-
 /obj/machinery/door/firedoor/attack_hand(mob/living/user, list/modifiers)
 	. = ..()
 	if(.)
@@ -447,7 +260,6 @@
 		user.visible_message(span_danger("[user] [welded?"welds":"unwelds"] [src]."), span_notice("You [welded ? "weld" : "unweld"] [src]."))
 		log_game("[key_name(user)] [welded ? "welded":"unwelded"] firedoor [src] with [W] at [AREACOORD(src)]")
 		update_appearance()
-		correct_state()
 
 /// We check for adjacency when using the primary attack.
 /obj/machinery/door/firedoor/try_to_crowbar(obj/item/acting_object, mob/user)
@@ -482,8 +294,6 @@
 		return TRUE
 	if(density)
 		open()
-		if(alarm_type)
-			addtimer(CALLBACK(src, .proc/correct_state), 2 SECONDS, TIMER_UNIQUE)
 	else
 		close()
 	return TRUE
@@ -497,8 +307,6 @@
 		to_chat(user, span_warning("[src] refuses to budge!"))
 		return
 	open()
-	if(alarm_type)
-		addtimer(CALLBACK(src, .proc/correct_state), 2 SECONDS, TIMER_UNIQUE)
 
 /obj/machinery/door/firedoor/do_animate(animation)
 	switch(animation)
@@ -526,39 +334,16 @@
 		hazards.pixel_y = light_yoffset
 		. += hazards
 
-/**
- * Corrects the current state of the door, based on if alarm_type is set.
- *
- * This proc is called after weld and power restore events. Gives the
- * illusion that the door is constantly attempting to move without actually
- * having to process it. Timers also call this, so that if alarm_type
- * changes during the timer, the door doesn't close or open incorrectly.
- */
-/obj/machinery/door/firedoor/proc/correct_state()
-	if(obj_flags & EMAGGED)
-		return //Unmotivated, indifferent, we have no real care what state we're in anymore.
-	if(alarm_type && !density) //We should be closed but we're not
-		INVOKE_ASYNC(src, .proc/close)
-		return
-	if(!alarm_type && density) //We should be open but we're not
-		INVOKE_ASYNC(src, .proc/open)
-		return
-
 /obj/machinery/door/firedoor/open()
 	if(welded)
 		return
-	var/alarm = alarm_type
-	. = ..()
-	if(alarm != alarm_type) //Something changed while we were sleeping
-		correct_state() //So we should re-evaluate our state
+	return ..()
 
 /obj/machinery/door/firedoor/close()
 	if(HAS_TRAIT(loc, TRAIT_FIREDOOR_STOP))
 		return
-	var/alarm = alarm_type
-	. = ..()
-	if(alarm != alarm_type) //Something changed while we were sleeping
-		correct_state() //So we should re-evaluate our state
+	return ..()
+
 
 /obj/machinery/door/firedoor/deconstruct(disassembled = TRUE)
 	if(!(flags_1 & NODECONSTRUCT_1))
@@ -575,15 +360,10 @@
 			new /obj/item/electronics/firelock (targetloc)
 	qdel(src)
 
-/obj/machinery/door/firedoor/Moved(atom/oldloc)
-	. = ..()
-	unregister_adjacent_turfs(oldloc)
-	register_adjacent_turfs(src)
-
 /obj/machinery/door/firedoor/closed
 	icon_state = "door_closed"
 	density = TRUE
-	alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
+	alarm_type = FIRE_RAISED_PULL
 
 /obj/machinery/door/firedoor/border_only
 	icon = 'icons/obj/doors/edge_Doorfire.dmi'
@@ -594,7 +374,7 @@
 /obj/machinery/door/firedoor/border_only/closed
 	icon_state = "door_closed"
 	density = TRUE
-	alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
+	alarm_type = FIRE_RAISED_PULL
 
 /obj/machinery/door/firedoor/border_only/Initialize(mapload)
 	. = ..()
@@ -812,4 +592,3 @@
 
 #undef CONSTRUCTION_PANEL_OPEN
 #undef CONSTRUCTION_NO_CIRCUIT
-#undef DETECT_COOLDOWN_STEP_TIME
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index aaac9406ed2..dee5d853115 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -33,8 +33,8 @@
 	var/buildstage = 2
 	///Our home area, set in Init. Due to loading step order, this seems to be null very early in the server setup process, which is why some procs use `my_area?` for var or list checks.
 	var/area/my_area = null
-	///looping sound datum for our fire alarm siren.
-	var/datum/looping_sound/firealarm/soundloop
+	///The current alarm state
+	var/alarm_type = FIRE_CLEAR
 
 /obj/machinery/firealarm/Initialize(mapload, dir, building)
 	. = ..()
@@ -44,11 +44,8 @@
 	if(name == initial(name))
 		name = "[get_area_name(src)] [initial(name)]"
 	update_appearance()
-	my_area = get_area(src)
-	LAZYADD(my_area.firealarms, src)
-
+	RegisterSignal(src, COMSIG_FIRE_ALERT, .proc/handle_alert)
 	RegisterSignal(SSsecurity_level, COMSIG_SECURITY_LEVEL_CHANGED, .proc/check_security_level)
-	soundloop = new(src, FALSE)
 
 	AddComponent(/datum/component/usb_port, list(
 		/obj/item/circuit_component/firealarm,
@@ -60,28 +57,34 @@
 		rmb_text = "Turn off", \
 	)
 
+	return INITIALIZE_HINT_LATELOAD
+
+/obj/machinery/firealarm/LateInitialize()
+	. = ..()
+	set_area(get_area(src))
+
 /obj/machinery/firealarm/Destroy()
-	if(my_area)
-		LAZYREMOVE(my_area.firealarms, src)
-		my_area = null
-	QDEL_NULL(soundloop)
+	set_area(null)
 	return ..()
 
-/**
- * Sets the sound state, and then calls update_icon()
- *
- * This proc exists to be called by areas and firelocks
- * so that it may update its icon and start or stop playing
- * the alarm sound based on the state of an area variable.
- */
-/obj/machinery/firealarm/proc/set_status()
-	if(!(my_area.fire || LAZYLEN(my_area.active_firelocks)) || (obj_flags & EMAGGED))
-		soundloop.stop()
-	update_appearance()
+/obj/machinery/firealarm/Moved(atom/OldLoc, Dir)
+	. = ..()
+	var/new_area = get_area(src)
+	if(my_area != new_area)
+		set_area(new_area)
+
+/obj/machinery/firealarm/proc/set_area(new_area)
+	if(my_area)
+		LAZYREMOVE(my_area.firealarms, src)
+	if(!new_area)
+		return
+	my_area = new_area
+	if(my_area)
+		LAZYADD(my_area.firealarms, src)
 
 /obj/machinery/firealarm/update_appearance(updates)
 	. = ..()
-	if((my_area?.fire || LAZYLEN(my_area?.active_firelocks)) && !(obj_flags & EMAGGED) && !(machine_stat & (BROKEN|NOPOWER)))
+	if(alarm_type && !(obj_flags & EMAGGED) && !(machine_stat & (BROKEN|NOPOWER)))
 		set_light(l_power = 0.8)
 	else
 		set_light(l_power = 0)
@@ -111,7 +114,7 @@
 		. += mutable_appearance(icon, "fire_[SEC_LEVEL_GREEN]")
 		. += emissive_appearance(icon, "fire_[SEC_LEVEL_GREEN]", alpha = src.alpha)
 
-	if(!(my_area?.fire || LAZYLEN(my_area?.active_firelocks)))
+	if(!alarm_type)
 		if(my_area?.fire_detect) //If this is false, leave the green light missing. A good hint to anyone paying attention.
 			. += "fire_off"
 			. += mutable_appearance(icon, "fire_off")
@@ -125,7 +128,7 @@
 		. += mutable_appearance(icon, "fire_on")
 		. += emissive_appearance(icon, "fire_on", alpha = src.alpha)
 
-	if(!panel_open && my_area?.fire_detect && my_area?.fire) //It just looks horrible with the panel open
+	if(!panel_open && alarm_type) //It just looks horrible with the panel open
 		. += "fire_detected"
 		. += mutable_appearance(icon, "fire_detected")
 		. += emissive_appearance(icon, "fire_detected", alpha = src.alpha) //Pain
@@ -148,7 +151,7 @@
 		user.visible_message(span_warning("Sparks fly out of [src]!"),
 							span_notice("You override [src], disabling the speaker."))
 	playsound(src, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
-	set_status()
+
 
 /**
  * Signal handler for checking if we should update fire alarm appearance accordingly to a newly set security level
@@ -163,6 +166,27 @@
 	if(is_station_level(z))
 		update_appearance()
 
+/obj/machinery/firealarm/proc/handle_alert(datum/source, code)
+	SIGNAL_HANDLER
+
+	if(alarm_type == code)
+		return
+
+	switch(code)
+		if(FIRE_CLEAR)
+			alarm_type = code
+			reset()
+		if(FIRE_RAISED_AIRALARM)
+			if(alarm_type & FIRE_RAISED_PULL)
+				return
+			alarm_type = code
+			alarm()
+		if(FIRE_RAISED_PULL)
+			if(alarm_type & FIRE_RAISED_AIRALARM)
+				return //We cannot overrule airalarms
+			alarm_type = code
+			alarm()
+
 /**
  * Sounds the fire alarm and closes all firelocks in the area. Also tells the area to color the lights red.
  *
@@ -172,18 +196,10 @@
 /obj/machinery/firealarm/proc/alarm(mob/user)
 	if(!is_operational)
 		return
-
-	if(my_area.fire)
-		return //area alarm already active
-	my_area.alarm_manager.send_alarm(ALARM_FIRE, my_area)
-	my_area.set_fire_alarm_effect()
-	for(var/obj/machinery/door/firedoor/firelock in my_area.firedoors)
-		firelock.activate(FIRELOCK_ALARM_TYPE_GENERIC)
-	if(user)
-		log_game("[user] triggered a fire alarm at [COORD(src)]")
-	soundloop.start() //Manually pulled fire alarms will make the sound, rather than the doors.
 	SEND_SIGNAL(src, COMSIG_FIREALARM_ON_TRIGGER)
 	update_use_power(ACTIVE_POWER_USE)
+	update_appearance()
+
 
 /**
  * Resets all firelocks in the area. Also tells the area to disable alarm lighting, if it was enabled.
@@ -194,22 +210,31 @@
 /obj/machinery/firealarm/proc/reset(mob/user)
 	if(!is_operational)
 		return
-	my_area.unset_fire_alarm_effects()
-	for(var/obj/machinery/door/firedoor/firelock in my_area.firedoors)
-		firelock.reset()
-	my_area.alarm_manager.clear_alarm(ALARM_FIRE, my_area)
-	if(user)
-		log_game("[user] reset a fire alarm at [COORD(src)]")
-	soundloop.stop()
 	SEND_SIGNAL(src, COMSIG_FIREALARM_ON_RESET)
 	update_use_power(IDLE_POWER_USE)
+	update_appearance()
 
 /obj/machinery/firealarm/attack_hand(mob/user, list/modifiers)
 	if(buildstage != 2)
 		return
 	. = ..()
 	add_fingerprint(user)
-	alarm(user)
+	if(!is_operational)
+		return
+
+	switch(alarm_type)
+		if(FIRE_RAISED_AIRALARM) //Can't clear an atmos alert with a fire alarm
+			if(issilicon(user))
+				to_chat(user, span_danger("This alert was triggered by an airalarm, it won't budge!"))
+			else
+				to_chat(user, span_danger("[src] doesn't budge!"))
+			return
+		if(FIRE_RAISED_PULL)
+			my_area.communicate_fire_alert(FIRE_CLEAR)
+			log_game("[user] triggered a fire alarm at [COORD(src)]")
+		else
+			my_area.communicate_fire_alert(FIRE_RAISED_PULL)
+			log_game("[user] cleared a fire alarm at [COORD(src)]")
 
 /obj/machinery/firealarm/attack_hand_secondary(mob/user, list/modifiers)
 	if(buildstage != 2)
@@ -267,9 +292,7 @@
 
 				else if(tool.force) //hit and turn it on
 					..()
-					var/area/area = get_area(src)
-					if(!area.fire)
-						alarm()
+					attack_hand(user)
 					return
 
 			if(1)
@@ -371,13 +394,8 @@
 // Allows users to examine the state of the thermal sensor
 /obj/machinery/firealarm/examine(mob/user)
 	. = ..()
-	if((my_area?.fire || LAZYLEN(my_area?.active_firelocks)))
+	if((alarm_type))
 		. += "The local area hazard light is flashing."
-		. += "<b>Left-Click</b> to activate all firelocks in this area."
-		. += "<b>Right-Click</b> to reset firelocks in this area."
-	else
-		. += "The local area thermal detection light is [my_area.fire_detect ? "lit" : "unlit"]."
-		. += "<b>Left-Click</b> to activate all firelocks in this area."
 
 // Allows Silicons to disable thermal sensor
 /obj/machinery/firealarm/BorgCtrlClick(mob/living/silicon/robot/user)
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index e8147324351..194db8520f9 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -219,10 +219,6 @@
 	var/prevname = "[A.name]"
 	set_area_machinery_title(A, new_name, prevname)
 	A.name = new_name
-	if(A.firedoors)
-		for(var/D in A.firedoors)
-			var/obj/machinery/door/firedoor/FD = D
-			FD.CalculateAffectingAreas()
 	A.update_areasize()
 	return TRUE
 
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index dc2472d72e0..a6aa1a60e8a 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -290,19 +290,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 //If you modify this function, ensure it works correctly with lateloaded map templates.
 /turf/proc/AfterChange(flags, oldType) //called after a turf has been replaced in ChangeTurf()
 	levelupdate()
-	/*if(flags & CHANGETURF_RECALC_ADJACENT)
-		immediate_calculate_adjacent_turfs()
-		if(ispath(oldType, /turf/closed) && istype(src, /turf/open))
-			SSair.add_to_active(src)
-	else //In effect, I want closed turfs to make their tile active when sheered, but we need to queue it since they have no adjacent turfs
-		CALCULATE_ADJACENT_TURFS(src, (!(ispath(oldType, /turf/closed) && istype(src, /turf/open)) ? NORMAL_TURF : MAKE_ACTIVE))*/
-	//update firedoor adjacency
-	var/list/turfs_to_check = get_adjacent_open_turfs(src) | src
-	for(var/I in turfs_to_check)
-		var/turf/T = I
-		for(var/obj/machinery/door/firedoor/FD in T)
-			FD.CalculateAffectingAreas()
-
 	HandleTurfChange(src)
 
 /turf/open/AfterChange(flags, oldType)
@@ -312,75 +299,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
 		//Assimilate_Air()
 		SSzas.mark_for_update(src)
 
-//////Assimilate Air//////
-/*/turf/open/proc/Assimilate_Air()
-	var/list/turf/turf_list = get_adjacent_open_turfs(src)
-	var/turf_count = LAZYLEN(turf_list)
-	if(blocks_air || !turf_count)
-		return
-	var/datum/gas_mixture/total = new
-	var/list/total_gases = total.gas
-	turf_list += src
-	turf_count += 1
-	var/energy = 0
-	var/heat_cap = 0
-	for(var/turf/T in turf_list)
-		var/datum/gas_mixture/turf_mix = T.return_air()
-		var/capacity = turf_mix.getHeatCapacity()
-		energy += turf_mix.temperature * capacity
-		heat_cap += capacity
-
-		var/list/giver_gases = turf_mix.gas
-		for(var/giver_id in giver_gases)
-			total_gases[giver_id] = giver_gases[giver_id]
-
-	total.temperature = energy / heat_cap
-	for(var/id in total_gases)
-		total_gases[id] /= turf_count
-
-	for(var/turf/T as anything in turf_list)
-		T.return_air().copyFrom(total)
-		SSzas.mark_for_update(T)
-*/
-/*
-/turf/open/proc/Assimilate_Air()
-	var/turf_count = LAZYLEN(atmos_adjacent_turfs)
-	if(blocks_air || !turf_count) //if there weren't any open turfs, no need to update.
-		return
-
-	var/datum/gas_mixture/total = new//Holders to assimilate air from nearby turfs
-	var/list/total_gases = total.gases
-	//Stolen blatently from self_breakdown
-	var/list/turf_list = atmos_adjacent_turfs + src
-	var/turflen = turf_list.len
-	var/energy = 0
-	var/heat_cap = 0
-
-	for(var/t in turf_list)
-		var/turf/open/T = t
-		//Cache?
-		var/datum/gas_mixture/turf/mix = T.air
-		//"borrowing" this code from merge(), I need to play with the temp portion. Lets expand it out
-		//temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
-		var/capacity = mix.getHeatCapacity()
-		energy += mix.temperature * capacity
-		heat_cap += capacity
-
-		var/list/giver_gases = mix.gases
-		for(var/giver_id in giver_gases)
-			ASSERT_GAS(giver_id, total)
-			total_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES]
-
-	total.temperature = energy / heat_cap
-	for(var/id in total_gases)
-		total_gases[id][MOLES] /= turflen
-
-	for(var/t in turf_list)
-		var/turf/open/T = t
-		T.air.copyFrom(total)
-		T.update_visuals()
-		SSair.add_to_active(T)
-*/
 /turf/proc/ReplaceWithLattice()
 	ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
 	new /obj/structure/lattice(locate(x, y, z))
diff --git a/code/modules/atmospherics/ZAS/XGM/gases.dm b/code/modules/atmospherics/ZAS/XGM/gases.dm
index e00022c5815..706c7b7178c 100644
--- a/code/modules/atmospherics/ZAS/XGM/gases.dm
+++ b/code/modules/atmospherics/ZAS/XGM/gases.dm
@@ -124,12 +124,16 @@
 /datum/xgm_gas/hydrogen/deuterium
 	id = GAS_DEUTERIUM
 	name = "Deuterium"
+	specific_heat = 80
+	molar_mass = 0.004
 	symbol_html = "<sup>2</sup>H"
 	symbol = "2H"
 
 /datum/xgm_gas/hydrogen/tritium
 	id = GAS_TRITIUM
 	name = "Tritium"
+	molar_mass = 0.006
+	specific_heat = 60
 	symbol_html = "<sup>3</sup>H"
 	symbol = "T"
 
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index b59985506ce..768f2d5bbb1 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -79,6 +79,8 @@
 
 	var/danger_level = 0
 	var/mode = AALARM_MODE_SCRUBBING
+	///The fire alert type currently active
+	var/alert_type = FIRE_CLEAR
 	///A reference to the area we are in
 	var/area/my_area
 
@@ -121,30 +123,6 @@
 		GAS_SULFUR = new/datum/tlv(-1, -1, 1000, 1000),
 		GAS_ARGON = new/datum/tlv(-1, -1, 1000, 1000),
 	)
-	/* // Breathable air.
-		"pressure" = new/datum/tlv(HAZARD_LOW_PRESSURE, WARNING_LOW_PRESSURE, WARNING_HIGH_PRESSURE, HAZARD_HIGH_PRESSURE), // kPa. Values are hazard_min, warning_min, warning_max, hazard_max
-		"temperature" = new/datum/tlv(BODYTEMP_COLD_WARNING_1, BODYTEMP_COLD_WARNING_1+10, BODYTEMP_HEAT_WARNING_1-27, BODYTEMP_HEAT_WARNING_1),
-		/datum/gas/oxygen = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
-		/datum/gas/nitrogen = new/datum/tlv(-1, -1, 1000, 1000),
-		/datum/gas/carbon_dioxide = new/datum/tlv(-1, -1, 5, 10),
-		/datum/gas/miasma = new/datum/tlv/(-1, -1, 15, 30),
-		/datum/gas/plasma = new/datum/tlv/dangerous,
-		/datum/gas/nitrous_oxide = new/datum/tlv/dangerous,
-		/datum/gas/bz = new/datum/tlv/dangerous,
-		/datum/gas/hypernoblium = new/datum/tlv(-1, -1, 1000, 1000), // Hyper-Noblium is inert and nontoxic
-		/datum/gas/water_vapor = new/datum/tlv/dangerous,
-		/datum/gas/tritium = new/datum/tlv/dangerous,
-		/datum/gas/nitrium = new/datum/tlv/dangerous,
-		/datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires
-		/datum/gas/freon = new/datum/tlv/dangerous,
-		/datum/gas/hydrogen = new/datum/tlv/dangerous,
-		/datum/gas/healium = new/datum/tlv/dangerous,
-		/datum/gas/proto_nitrate = new/datum/tlv/dangerous,
-		/datum/gas/zauker = new/datum/tlv/dangerous,
-		/datum/gas/helium = new/datum/tlv/dangerous,
-		/datum/gas/antinoblium = new/datum/tlv/dangerous,
-		/datum/gas/halon = new/datum/tlv/dangerous
-		)*/
 
 /obj/machinery/airalarm/Initialize(mapload, ndir, nbuild)
 	. = ..()
@@ -160,7 +138,7 @@
 		name = "[get_area_name(src)] Air Alarm"
 
 	alarm_manager = new(src)
-	my_area = get_area(src)
+	RegisterSignal(src, COMSIG_FIRE_ALERT, .proc/handle_alert)
 	update_appearance()
 
 	set_frequency(frequency)
@@ -169,16 +147,36 @@
 		/obj/item/circuit_component/air_alarm,
 	))
 
+	return INITIALIZE_HINT_LATELOAD
 
+/obj/machinery/airalarm/LateInitialize()
+	. = ..()
+	set_area(get_area(src))
 
 /obj/machinery/airalarm/Destroy()
-	if(my_area)
-		my_area = null
+	set_area(null)
 	SSradio.remove_object(src, frequency)
 	QDEL_NULL(wires)
 	QDEL_NULL(alarm_manager)
 	return ..()
 
+/obj/machinery/airalarm/Moved(atom/OldLoc, Dir)
+	. = ..()
+	var/new_area = get_area(src)
+	if(my_area != new_area)
+		set_area(new_area)
+
+/obj/machinery/airalarm/proc/set_area(new_area)
+	SHOULD_NOT_SLEEP(TRUE)
+
+	if(my_area)
+		LAZYREMOVE(my_area.airalarms, src)
+	if(!new_area)
+		return
+	my_area = new_area
+	if(my_area)
+		LAZYADD(my_area.airalarms, src)
+
 /obj/machinery/airalarm/examine(mob/user)
 	. = ..()
 	switch(buildstage)
@@ -211,8 +209,8 @@
 		"danger_level" = danger_level,
 	)
 
-	data["atmos_alarm"] = !!my_area.active_alarms[ALARM_ATMOS]
-	data["fire_alarm"] = my_area.fire
+	data["atmos_alarm"] = !!my_area.active_alarms[ALARM_ATMOS] //Casting to boolean
+	data["fire_alarm"] = !!alert_type //Same here
 
 	var/turf/T = get_turf(src)
 	var/datum/gas_mixture/environment = T.return_air()
@@ -673,22 +671,13 @@
 /obj/machinery/airalarm/proc/apply_danger_level()
 
 	var/new_area_danger_level = 0
-	for(var/obj/machinery/airalarm/AA in my_area)
+	for(var/obj/machinery/airalarm/AA in my_area?.airalarms)
 		if (!(AA.machine_stat & (NOPOWER|BROKEN)) && !AA.shorted)
 			new_area_danger_level = clamp(max(new_area_danger_level, AA.danger_level), 0, 1)
 
 	var/did_anything_happen
-	var/area/local_area = get_area(src)
 	if(new_area_danger_level)
 		did_anything_happen = alarm_manager.send_alarm(ALARM_ATMOS)
-		if(danger_level == TLV_OUTSIDE_HAZARD_LIMIT)
-			for(var/obj/machinery/door/firedoor/door in local_area.firedoors)
-				door.start_activation_process(FIRELOCK_ALARM_TYPE_GENERIC)
-	else
-		if(danger_level < TLV_OUTSIDE_WARNING_LIMIT)
-			for(var/obj/machinery/door/firedoor/door in local_area.firedoors)
-				door.start_deactivation_process(FIRELOCK_ALARM_TYPE_GENERIC)
-
 		did_anything_happen = alarm_manager.clear_alarm(ALARM_ATMOS)
 	if(did_anything_happen) //if something actually changed
 		post_alert(new_area_danger_level)
@@ -852,23 +841,8 @@
 		GAS_OXYGEN = new/datum/tlv/no_checks,
 		GAS_NITROGEN = new/datum/tlv/no_checks,
 		GAS_CO2 = new/datum/tlv/no_checks,
-		//datum/gas/miasma = new/datum/tlv/no_checks,
 		GAS_PLASMA = new/datum/tlv/no_checks,
 		GAS_N2O = new/datum/tlv/no_checks,
-		/*/datum/gas/bz = new/datum/tlv/no_checks,
-		/datum/gas/hypernoblium = new/datum/tlv/no_checks,
-		/datum/gas/water_vapor = new/datum/tlv/no_checks,
-		/datum/gas/tritium = new/datum/tlv/no_checks,
-		/datum/gas/nitrium = new/datum/tlv/no_checks,
-		/datum/gas/pluoxium = new/datum/tlv/no_checks,
-		/datum/gas/freon = new/datum/tlv/no_checks,
-		/datum/gas/hydrogen = new/datum/tlv/no_checks,
-		/datum/gas/healium = new/datum/tlv/dangerous,
-		/datum/gas/proto_nitrate = new/datum/tlv/dangerous,
-		/datum/gas/zauker = new/datum/tlv/dangerous,
-		/datum/gas/helium = new/datum/tlv/dangerous,
-		/datum/gas/antinoblium = new/datum/tlv/dangerous,
-		/datum/gas/halon = new/datum/tlv/dangerous,*/
 	)
 
 /obj/machinery/airalarm/kitchen_cold_room // Kitchen cold rooms start off at -14°C or 259.15K.
@@ -878,23 +852,7 @@
 		GAS_OXYGEN = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
 		GAS_NITROGEN = new/datum/tlv(-1, -1, 1000, 1000),
 		GAS_CO2 = new/datum/tlv(-1, -1, 5, 10),
-		//datum/gas/miasma = new/datum/tlv/(-1, -1, 2, 5),
 		GAS_PLASMA = new/datum/tlv/dangerous,
-		/*/datum/gas/nitrous_oxide = new/datum/tlv/dangerous,
-		/datum/gas/bz = new/datum/tlv/dangerous,
-		/datum/gas/hypernoblium = new/datum/tlv(-1, -1, 1000, 1000), // Hyper-Noblium is inert and nontoxic
-		/datum/gas/water_vapor = new/datum/tlv/dangerous,
-		/datum/gas/tritium = new/datum/tlv/dangerous,
-		/datum/gas/nitrium = new/datum/tlv/dangerous,
-		/datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires
-		/datum/gas/freon = new/datum/tlv/dangerous,
-		/datum/gas/hydrogen = new/datum/tlv/dangerous,
-		/datum/gas/healium = new/datum/tlv/dangerous,
-		/datum/gas/proto_nitrate = new/datum/tlv/dangerous,
-		/datum/gas/zauker = new/datum/tlv/dangerous,
-		/datum/gas/helium = new/datum/tlv/dangerous,
-		/datum/gas/antinoblium = new/datum/tlv/dangerous,
-		/datum/gas/halon = new/datum/tlv/dangerous,*/
 	)
 
 /obj/machinery/airalarm/unlocked
@@ -1002,6 +960,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 	settings.warning_max = max_1
 	settings.hazard_max = max_2
 
+/obj/machinery/airalarm/proc/handle_alert(datum/source, code, sent_by_neighbor)
+	SIGNAL_HANDLER
+
+	return
+
+
 #undef AALARM_MODE_SCRUBBING
 #undef AALARM_MODE_VENTING
 #undef AALARM_MODE_PANIC
diff --git a/pariah.dme b/pariah.dme
index 575acdf6792..6b62c0bbe0e 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -229,6 +229,7 @@
 #include "code\__DEFINES\dcs\signals\signals_janitor.dm"
 #include "code\__DEFINES\dcs\signals\signals_ladder.dm"
 #include "code\__DEFINES\dcs\signals\signals_light_eater.dm"
+#include "code\__DEFINES\dcs\signals\signals_machinery.dm"
 #include "code\__DEFINES\dcs\signals\signals_medical.dm"
 #include "code\__DEFINES\dcs\signals\signals_mind.dm"
 #include "code\__DEFINES\dcs\signals\signals_mod.dm"

From f84479658b45fda464f6dda8b309f9002cfc8ec6 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 4 Jul 2022 01:39:17 -0400
Subject: [PATCH 180/200] IM A DUMBASS IM A DUMBASS IM A DUMBASS

---
 code/__HELPERS/areas.dm                       |  1 -
 code/game/area/areas.dm                       | 52 ++-----------------
 code/game/machinery/doors/firedoor.dm         | 26 +++++-----
 .../atmospherics/machinery/airalarm.dm        |  2 +-
 4 files changed, 20 insertions(+), 61 deletions(-)

diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm
index 956ebf09b7b..2ea46b62a9a 100644
--- a/code/__HELPERS/areas.dm
+++ b/code/__HELPERS/areas.dm
@@ -100,7 +100,6 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engineerin
 		newA.create_area_lighting_objects()
 
 	SEND_GLOBAL_SIGNAL(COMSIG_AREA_CREATED, newA, oldA, creator)
-	CalculateAdjacentFireAreas()
 	to_chat(creator, span_notice("You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered."))
 	return TRUE
 
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index b933a211dae..c011af57b5b 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -17,14 +17,12 @@
 
 	///A var for whether the area allows for detecting fires/etc. Disabled or enabled at a fire alarm.
 	var/fire_detect = TRUE
-	///A list of all fire locks in this area. Used by fire alarm panels when resetting fire locks or activating all in an area
+	///A list of all fire locks in this area and on the border of this area.
 	var/list/firedoors
-	///A list of all fire alarms in this area. Used by fire locks and burglar alarms to tell the fire alarm to change its icon.
+	///A list of all fire alarms in this area OR ADJACENT TO IT
 	var/list/firealarms
 	///A list of all air alarms in this area
 	var/list/airalarms
-	///A list of adjacent areas that will close their fire doors when a fire alarm is sent out by us.
-	var/list/adjacent_fire_areas
 	///Alarm type to count of sources. Not usable for ^ because we handle fires differently
 	var/list/active_alarms = list()
 
@@ -194,7 +192,6 @@ GLOBAL_LIST_EMPTY(teleportlocs)
 /area/LateInitialize()
 	power_change() // all machines set to current power level, also updates icon
 	update_beauty()
-	CalculateAdjacentFireAreas()
 
 /area/proc/RunGeneration()
 	if(map_generator)
@@ -481,48 +478,9 @@ GLOBAL_LIST_EMPTY(teleportlocs)
 	return
 
 ///Called by airalarms and firealarms to communicate the status of the area to relevant machines
-/area/proc/communicate_fire_alert(code, sent_by_neighbor)
+/area/proc/communicate_fire_alert(code)
 	for(var/obj/machinery/light/L in src)
 		L.update()
 
-	if(sent_by_neighbor) //If a neighboring area is sending an alert, only the firedoors care.
-		if(firedoors)
-			for(var/datum/listener as anything in firedoors)
-				SEND_SIGNAL(listener, COMSIG_FIRE_ALERT, code, sent_by_neighbor)
-	else
-		for(var/datum/listener in airalarms + firealarms + firedoors)
-			SEND_SIGNAL(listener, COMSIG_FIRE_ALERT, code, sent_by_neighbor)
-
-		for(var/area/neighbor as anything in adjacent_fire_areas)
-			neighbor.communicate_fire_alert(code, TRUE)
-
-/**
- * Calculates what areas are nearby to recieve alarm.
- *
- * This proc builds a list of areas that border other areas using firedoors.
- * It is fairly expensive so it should be run as little as possible (lateinit + area creation)
- */
-/proc/CalculateAdjacentFireAreas()
-	for(var/area/area_iter in GLOB.sortedAreas)
-		area_iter.adjacent_fire_areas = list()
-
-	for(var/area/area_iter in GLOB.sortedAreas)
-		//Area has no fire doors? Fuck it. We don't care about it.
-		if(!area_iter.firedoors)
-			continue
-
-		//Loop through all fire doors in the area...
-		for(var/obj/machinery/door/firedoor/FD as anything in area_iter.firedoors)
-			//Grab a list of areas adjacent to the fire doors
-			var/list/areas2add = get_adjacent_areas(FD)
-			//Loop through the areas that the firedoors are touching...
-			for(var/area/adj_area as anything in areas2add)
-				//Ignore their loc area
-				if(adj_area == area_iter)
-					continue
-				//Add them to iter's adjacency
-				area_iter.adjacent_fire_areas |= adj_area
-				//Add iter to their adjacency
-				adj_area.adjacent_fire_areas |= area_iter
-
-
+	for(var/datum/listener in airalarms + firealarms + firedoors)
+		SEND_SIGNAL(listener, COMSIG_FIRE_ALERT, code,)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 6cb605a23d0..d5cda2d3a77 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -31,8 +31,10 @@
 	var/light_yoffset = 0
 
 	var/boltslocked = TRUE
-	///For the few times we affect only the area we're actually in. Set during Init. If we get moved, we don't update, but this is consistant with fire alarms and also kinda funny so call it intentional.
+	///The firedoor's area loc
 	var/area/my_area
+	///Every area a firedoor is listening to.
+	var/list/joined_areas = list()
 	///Type of alarm when active. See code/defines/firealarm.dm for the list. This var being null means there is no alarm.
 	var/alarm_type = FIRE_CLEAR
 
@@ -145,23 +147,23 @@
 /obj/machinery/door/firedoor/proc/set_area(new_area)
 	if(my_area)
 		LAZYREMOVE(my_area.firedoors, src)
+	for(var/area/A in joined_areas)
+		LAZYREMOVE(A.firedoors, src)
+	joined_areas.Cut()
+
 	if(!new_area)
 		return
 	my_area = new_area
-	if(my_area)
-		LAZYADD(my_area.firedoors, src)
-
+	if(!my_area)
+		return
 
-/obj/machinery/door/firedoor/proc/handle_alert(datum/source, code, sent_by_neighbor)
-	SIGNAL_HANDLER
+	for(var/area/area2join in get_adjacent_open_areas(src) | my_area)
+		LAZYDISTINCTADD(area2join.firedoors, src)
+		joined_areas |= area2join
 
-	if(sent_by_neighbor && !alarm_type) //We dont care about neighbors if we have our own problems
-		if(code == FIRE_CLEAR) //bitflag & 0 returns false, dumbass.
-			INVOKE_ASYNC(src, .proc/open)
-		else
-			INVOKE_ASYNC(src, .proc/close)
-		return
 
+/obj/machinery/door/firedoor/proc/handle_alert(datum/source, code)
+	SIGNAL_HANDLER
 	if(code == alarm_type) //We're already on this alert level.
 		return
 
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 768f2d5bbb1..498a1e9ddc9 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -960,7 +960,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 	settings.warning_max = max_1
 	settings.hazard_max = max_2
 
-/obj/machinery/airalarm/proc/handle_alert(datum/source, code, sent_by_neighbor)
+/obj/machinery/airalarm/proc/handle_alert(datum/source, code)
 	SIGNAL_HANDLER
 
 	return

From 7cbcb1a4f6923d6eae8d65c48d32681dbb6876de Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 4 Jul 2022 02:33:02 -0400
Subject: [PATCH 181/200] ashlizard lungs

---
 code/modules/surgery/organs/lungs.dm | 189 +++------------------------
 code/modules/unit_tests/breath.dm    |   4 +-
 2 files changed, 22 insertions(+), 171 deletions(-)

diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index f15a8088b31..f06077023e8 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -279,159 +279,6 @@
 			n2o_euphoria = EUPHORIA_INACTIVE
 			breather.clear_alert(ALERT_TOO_MUCH_N2O)
 
-	/*
-	// BZ
-
-		var/bz_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/bz][MOLES])
-		if(bz_pp > BZ_trip_balls_min)
-			breather.hallucination += 10
-			breather.reagents.add_reagent(/datum/reagent/bz_metabolites,5)
-		if(bz_pp > BZ_brain_damage_min && prob(33))
-			breather.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
-
-	// Tritium
-		var/trit_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/tritium][MOLES])
-		// If you're breathing in half an atmosphere of radioactive gas, you fucked up.
-		if (trit_pp > tritium_irradiation_moles_min && SSradiation.can_irradiate_basic(breather))
-			var/lerp_scale = min(tritium_irradiation_moles_max, trit_pp - tritium_irradiation_moles_min) / (tritium_irradiation_moles_max - tritium_irradiation_moles_min)
-			var/chance = LERP(tritium_irradiation_probability_min, tritium_irradiation_probability_max, lerp_scale)
-			if (prob(chance))
-				breather.AddComponent(/datum/component/irradiated)
-
-		gas_breathed = breath_gases[/datum/gas/tritium][MOLES]
-
-		if (trit_pp > 0)
-			var/ratio = gas_breathed * 15
-			breather.adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE))
-
-		breath_gases[/datum/gas/tritium][MOLES] -= gas_breathed
-
-	// Nitrium
-		var/nitrium_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/nitrium][MOLES])
-		if (prob(nitrium_pp) && nitrium_pp > 15)
-			breather.adjustOrganLoss(ORGAN_SLOT_LUNGS, nitrium_pp * 0.1)
-			to_chat(breather, "<span class='notice'>You feel a burning sensation in your chest</span>")
-		gas_breathed = breath_gases[/datum/gas/nitrium][MOLES]
-		if (nitrium_pp > 5)
-			var/existing = breather.reagents.get_reagent_amount(/datum/reagent/nitrium_low_metabolization)
-			breather.reagents.add_reagent(/datum/reagent/nitrium_low_metabolization, max(0, 2 - existing))
-		if (nitrium_pp > 10)
-			var/existing = breather.reagents.get_reagent_amount(/datum/reagent/nitrium_high_metabolization)
-			breather.reagents.add_reagent(/datum/reagent/nitrium_high_metabolization, max(0, 1 - existing))
-
-		breath_gases[/datum/gas/nitrium][MOLES] -= gas_breathed
-
-	// Freon
-		var/freon_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/freon][MOLES])
-		if (prob(freon_pp))
-			to_chat(breather, span_alert("Your mouth feels like it's burning!"))
-		if (freon_pp >40)
-			breather.emote("gasp")
-			breather.adjustFireLoss(15)
-			if (prob(freon_pp/2))
-				to_chat(breather, span_alert("Your throat closes up!"))
-				breather.silent = max(breather.silent, 3)
-		else
-			breather.adjustFireLoss(freon_pp/4)
-		gas_breathed = breath_gases[/datum/gas/freon][MOLES]
-		if (gas_breathed > gas_stimulation_min)
-			breather.reagents.add_reagent(/datum/reagent/freon,1)
-
-		breath_gases[/datum/gas/freon][MOLES]-=gas_breathed
-
-	// Healium
-		var/healium_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/healium][MOLES])
-		if(healium_pp > gas_stimulation_min)
-			if(prob(15))
-				to_chat(breather, span_alert("Your head starts spinning and your lungs burn!"))
-				healium_euphoria = EUPHORIA_ACTIVE
-				breather.emote("gasp")
-		else
-			healium_euphoria = EUPHORIA_INACTIVE
-
-		if(healium_pp > healium_para_min)
-			breather.Unconscious(rand(30, 50))//not in seconds to have a much higher variation
-			if(healium_pp > healium_sleep_min)
-				var/existing = breather.reagents.get_reagent_amount(/datum/reagent/healium)
-				breather.reagents.add_reagent(/datum/reagent/healium,max(0, 1 - existing))
-		gas_breathed = breath_gases[/datum/gas/healium][MOLES]
-		breath_gases[/datum/gas/healium][MOLES]-=gas_breathed
-
-	// Proto Nitrate
-		// Inert
-	// Zauker
-		var/zauker_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/zauker][MOLES])
-		if(zauker_pp > gas_stimulation_min)
-			var/existing = breather.reagents.get_reagent_amount(/datum/reagent/zauker)
-			breather.reagents.add_reagent(/datum/reagent/zauker, max(0, 1 - existing))
-		gas_breathed = breath_gases[/datum/gas/zauker][MOLES]
-		breath_gases[/datum/gas/zauker][MOLES]-=gas_breathed
-
-	// Halon
-		var/halon_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/halon][MOLES])
-		if(halon_pp > gas_stimulation_min)
-			breather.adjustOxyLoss(5)
-			var/existing = breather.reagents.get_reagent_amount(/datum/reagent/halon)
-			breather.reagents.add_reagent(/datum/reagent/halon,max(0, 1 - existing))
-		gas_breathed = breath_gases[/datum/gas/halon][MOLES]
-		breath_gases[/datum/gas/halon][MOLES]-=gas_breathed
-
-	// Hyper-Nob
-		gas_breathed = breath_gases[/datum/gas/hypernoblium][MOLES]
-		if (gas_breathed > gas_stimulation_min)
-			var/existing = breather.reagents.get_reagent_amount(/datum/reagent/hypernoblium)
-			breather.reagents.add_reagent(/datum/reagent/hypernoblium,max(0, 1 - existing))
-		breath_gases[/datum/gas/hypernoblium][MOLES]-=gas_breathed
-
-	// Miasma
-		if (breath_gases[/datum/gas/miasma] && suffers_miasma)
-			var/miasma_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/miasma][MOLES])
-
-			//Miasma sickness
-			if(prob(0.5 * miasma_pp))
-				var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(min(round(max(miasma_pp/2, 1), 1), 6), min(round(max(miasma_pp, 1), 1), 8))
-				//tl;dr the first argument chooses the smaller of miasma_pp/2 or 6(typical max virus symptoms), the second chooses the smaller of miasma_pp or 8(max virus symptom level) //
-				miasma_disease.name = "Unknown"//^each argument has a minimum of 1 and rounds to the nearest value. Feel free to change the pp scaling I couldn't decide on good numbers for it.
-				miasma_disease.try_infect(owner)
-
-			// Miasma side effects
-			switch(miasma_pp)
-				if(0.25 to 5)
-					// At lower pp, give out a little warning
-					SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
-					if(prob(5))
-						to_chat(owner, span_notice("There is an unpleasant smell in the air."))
-				if(5 to 15)
-					//At somewhat higher pp, warning becomes more obvious
-					if(prob(15))
-						to_chat(owner, span_warning("You smell something horribly decayed inside this room."))
-						SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/bad_smell)
-				if(15 to 30)
-					//Small chance to vomit. By now, people have internals on anyway
-					if(prob(5))
-						to_chat(owner, span_warning("The stench of rotting carcasses is unbearable!"))
-						SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
-						owner.vomit()
-				if(30 to INFINITY)
-					//Higher chance to vomit. Let the horror start
-					if(prob(15))
-						to_chat(owner, span_warning("The stench of rotting carcasses is unbearable!"))
-						SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
-						owner.vomit()
-				else
-					SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
-
-			// In a full miasma atmosphere with 101.34 pKa, about 10 disgust per breath, is pretty low compared to threshholds
-			// Then again, this is a purely hypothetical scenario and hardly reachable
-			owner.adjust_disgust(0.1 * miasma_pp)
-
-			breath_gases[/datum/gas/miasma][MOLES]-=gas_breathed
-
-		// Clear out moods when no miasma at all
-		else
-			SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
-		*/
-
 		if (n2o_euphoria == EUPHORIA_ACTIVE || healium_euphoria == EUPHORIA_ACTIVE)
 			SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "chemical_euphoria", /datum/mood_event/chemical_euphoria)
 		else if (n2o_euphoria == EUPHORIA_INACTIVE && healium_euphoria == EUPHORIA_INACTIVE)
@@ -610,11 +457,11 @@
 // Normal oxygen is 21 kPa partial pressure, but SS13 humans can tolerate down
 // to 16 kPa. So it follows that ashwalkers, as humanoids, follow the same rules.
 #define GAS_TOLERANCE 5
-/*
+
 /obj/item/organ/lungs/ashwalker/Initialize(mapload)
 	. = ..()
 
-	var/datum/gas_mixture/immutable/planetary/mix = SSair.planetary[LAVALAND_DEFAULT_ATMOS]
+	var/datum/gas_mixture/mix = SSzas.lavaland_atmos
 
 	if(!mix?.get_moles()) // this typically means we didn't load lavaland, like if we're using #define LOWMEMORYMODE
 		return
@@ -622,26 +469,30 @@
 	// Take a "breath" of the air
 	var/datum/gas_mixture/breath = mix.remove(mix.get_moles() * BREATH_PERCENTAGE)
 
-	var/oxygen_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/oxygen][MOLES])
-	var/nitrogen_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/nitrogen][MOLES])
-	var/plasma_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/plasma][MOLES])
-	var/carbon_dioxide_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])
-	/*
-	var/bz_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/bz][MOLES])
-	var/miasma_pp = breath.getBreathPartialPressure(breath_gases[/datum/gas/miasma][MOLES])
-	*/
+	var/list/breath_gases = breath.gas
+	var/O2_moles = breath_gases[GAS_OXYGEN]
+	var/N2_moles = breath_gases[GAS_NITROGEN]
+	var/plasma_moles = breath_gases[GAS_PLASMA]
+	var/CO2_moles = breath_gases[GAS_CO2]
+	var/SA_moles = breath_gases[GAS_N2O]
 
-	safe_oxygen_min = max(0, oxygen_pp - GAS_TOLERANCE)
-	safe_nitro_min = max(0, nitrogen_pp - GAS_TOLERANCE)
-	safe_plasma_min = max(0, plasma_pp - GAS_TOLERANCE)
+	//Partial pressures in our breath
+	var/O2_pp = breath.getBreathPartialPressure(O2_moles)
+	var/N2_pp = breath.getBreathPartialPressure(N2_moles)
+	var/Plasma_pp = breath.getBreathPartialPressure(plasma_moles)
+	var/CO2_pp = breath.getBreathPartialPressure(CO2_moles)
+
+	safe_oxygen_min = max(0, O2_pp - GAS_TOLERANCE)
+	safe_nitro_min = max(0, N2_pp - GAS_TOLERANCE)
+	safe_plasma_min = max(0, Plasma_pp - GAS_TOLERANCE)
 
 	// Increase plasma tolerance based on amount in base air
-	safe_plasma_max += plasma_pp
+	safe_plasma_max += Plasma_pp
 
 	// CO2 is always a waste gas, so none is required, but ashwalkers
 	// tolerate the base amount plus tolerance*2 (humans tolerate only 10 pp)
 
-	safe_co2_max = carbon_dioxide_pp + GAS_TOLERANCE * 2
+	safe_co2_max = CO2_pp + GAS_TOLERANCE * 2
 
 	// The lung tolerance against BZ is also increased the amount of BZ in the base air
 	/*
@@ -653,7 +504,7 @@
 
 	//if(miasma_pp)
 		//suffers_miasma = FALSE
-*/
+
 #undef GAS_TOLERANCE
 
 /obj/item/organ/lungs/ethereal
diff --git a/code/modules/unit_tests/breath.dm b/code/modules/unit_tests/breath.dm
index 97cde0e0658..fa7994e43f1 100644
--- a/code/modules/unit_tests/breath.dm
+++ b/code/modules/unit_tests/breath.dm
@@ -63,7 +63,7 @@
 
 	var/turf/open/to_fill = run_loc_floor_bottom_left
 	//Prep the floor
-	to_fill.initial_gas = LAVALAND_DEFAULT_ATMOS
+	to_fill.initial_gas = SSzas.lavaland_atmos.gas
 	to_fill.make_air()
 
 	lab_rat.breathe()
@@ -73,7 +73,7 @@
 			return Fail("Assertion Failed: Turf failed to return air. Type: [to_fill.type], Initial Gas: [json_encode(to_fill.initial_gas)]")
 
 		var/datum/gas_mixture/turf_gas = to_fill.return_air()
-		LAZYADD(reason, "Turf mix: [json_encode(turf_gas.gas)] | T: [turf_gas.temperature] | P: [turf_gas.returnPressure()]")
+		LAZYADD(reason, "Turf mix: [json_encode(turf_gas.gas)] | T: [turf_gas.temperature] | P: [turf_gas.returnPressure()] | Initial Gas: [json_encode(to_fill.initial_gas)]")
 
 		if(lab_rat.loc != to_fill)
 			LAZYADD(reason, "Rat was not located on it's intended turf!")

From 1a04596ae84410f3525d6fa3c9d8430433c58b7b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 4 Jul 2022 02:49:18 -0400
Subject: [PATCH 182/200] fix compile

---
 code/modules/surgery/organs/lungs.dm | 1 -
 1 file changed, 1 deletion(-)

diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index f06077023e8..22da13e7641 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -474,7 +474,6 @@
 	var/N2_moles = breath_gases[GAS_NITROGEN]
 	var/plasma_moles = breath_gases[GAS_PLASMA]
 	var/CO2_moles = breath_gases[GAS_CO2]
-	var/SA_moles = breath_gases[GAS_N2O]
 
 	//Partial pressures in our breath
 	var/O2_pp = breath.getBreathPartialPressure(O2_moles)

From 9d6b16aa5e7596aab6b35a1403892763b806fb00 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 4 Jul 2022 22:37:42 -0400
Subject: [PATCH 183/200] Adds airalarm firealerts and thermostats

---
 _maps/map_files/MetaStation/MetaStation.dmm   |   5 +-
 code/__DEFINES/atmospherics/ZAS.dm            |   3 +-
 .../datums/looping_sounds/machinery_sounds.dm |  10 ++
 code/game/machinery/spaceheater.dm            |   1 -
 code/game/objects/obj_defense.dm              |   2 +-
 code/game/turfs/open/floor/iron_floor.dm      |   3 +-
 code/modules/atmospherics/ZAS/Fire.dm         |   2 +-
 .../atmospherics/machinery/airalarm.dm        | 142 ++++++++++++++++--
 sound/machines/atmosalarm.ogg                 | Bin 0 -> 27052 bytes
 tgui/packages/tgui/interfaces/AirAlarm.js     |  80 +++++++++-
 10 files changed, 225 insertions(+), 23 deletions(-)
 create mode 100644 sound/machines/atmosalarm.ogg

diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index fdd3688ada0..a0c3ba088b0 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -13320,7 +13320,10 @@
 /obj/item/wrench/medical,
 /obj/effect/turf_decal/siding/white,
 /obj/item/food/popsicle/creamsicle_orange,
-/obj/machinery/airalarm/directional/north,
+/obj/machinery/airalarm/kitchen_cold_room{
+	dir = 1;
+	pixel_y = 24
+	},
 /turf/open/floor/iron/kitchen_coldroom,
 /area/medical/coldroom)
 "dDG" = (
diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index b92464dae21..d7940b12d21 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -263,7 +263,8 @@ GLOBAL_REAL_VAR(list/gzn_check) = list(NORTH, SOUTH, EAST, WEST)
 /// -93.15°C snow and ice turfs
 //#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180"
 /// -14°C kitchen coldroom, just might loss your tail; higher amount of mol to reach about 101.3 kpA
-//#define KITCHEN_COLDROOM_ATMOS "o2=26;n2=97;TEMP=[COLD_ROOM_TEMP]"
+#define KITCHEN_COLDROOM_ATMOS list(GAS_OXYGEN = 26, GAS_NITROGEN = 97); temperature = COLD_ROOM_TEMP
+
 
 // Defines how much of certain gas do the Atmospherics tanks start with. Values are in kpa per tile (assuming 20C)
 #define ATMOSTANK_NITROGEN      list(GAS_NITROGEN = 90000) // A lot of N2 is needed to produce air mix, that's why we keep 90MPa of it
diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm
index baf8564c8a0..b7c530b44ba 100644
--- a/code/datums/looping_sounds/machinery_sounds.dm
+++ b/code/datums/looping_sounds/machinery_sounds.dm
@@ -150,6 +150,16 @@
 	mid_sounds = list('sound/machines/FireAlarm1.ogg' = 1,'sound/machines/FireAlarm2.ogg' = 1,'sound/machines/FireAlarm3.ogg' = 1,'sound/machines/FireAlarm4.ogg' = 1)
 	mid_length = 2.4 SECONDS
 	volume = 75
+	ignore_walls = FALSE
+	extra_range = 5
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/looping_sound/atmosalarm
+	mid_sounds = list('sound/machines/atmosalarm.ogg' = 1)
+	mid_length = 1 SECONDS
+	ignore_walls = FALSE
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 834ae74c42e..5474451a015 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -125,7 +125,6 @@
 		delta_temperature *= -1
 	if(delta_temperature)
 		enviroment.temperature += delta_temperature
-		//air_update_turf(FALSE, FALSE)
 	cell.use(required_energy / efficiency)
 
 /obj/machinery/space_heater/RefreshParts()
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 17f039c0d0f..41ed4bd98c5 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -131,7 +131,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
 		var/turf/T = loc
 		if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && HAS_TRAIT(src, TRAIT_T_RAY_VISIBLE))
 			return
-	if(exposed_temperature && !(resistance_flags & FIRE_PROOF))
+	if(uses_integrity && exposed_temperature && !(resistance_flags & FIRE_PROOF))
 		take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, FIRE, 0)
 	if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF))
 		resistance_flags |= ON_FIRE
diff --git a/code/game/turfs/open/floor/iron_floor.dm b/code/game/turfs/open/floor/iron_floor.dm
index 881efa922da..2948d5e9df2 100644
--- a/code/game/turfs/open/floor/iron_floor.dm
+++ b/code/game/turfs/open/floor/iron_floor.dm
@@ -297,7 +297,6 @@
 /turf/open/floor/iron/solarpanel/airless
 	initial_gas = AIRLESS_ATMOS
 
-
 /turf/open/floor/iron/freezer
 	icon_state = "freezerfloor"
 	base_icon_state = "freezerfloor"
@@ -308,7 +307,7 @@
 
 /turf/open/floor/iron/kitchen_coldroom
 	name = "cold room floor"
-	temperature = COLD_ROOM_TEMP
+	initial_gas = KITCHEN_COLDROOM_ATMOS
 
 /turf/open/floor/iron/kitchen_coldroom/freezerfloor
 	icon_state = "freezerfloor"
diff --git a/code/modules/atmospherics/ZAS/Fire.dm b/code/modules/atmospherics/ZAS/Fire.dm
index ee4155e2238..a5f8538a7fd 100644
--- a/code/modules/atmospherics/ZAS/Fire.dm
+++ b/code/modules/atmospherics/ZAS/Fire.dm
@@ -172,7 +172,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
 		L.FireBurn(firelevel, air_contents.temperature, air_contents.returnPressure())  //Burn the mobs!
 
 	loc.fire_act(air_contents.temperature, air_contents.volume)
-	for(var/atom/A in loc)
+	for(var/atom/A as anything in loc)
 		A.fire_act(air_contents.temperature, air_contents.volume)
 
 	//spread
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 498a1e9ddc9..a47f6dee41a 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -63,6 +63,9 @@
 
 #define AALARM_REPORT_TIMEOUT 100
 
+#define AALARM_THERMOSTAT_HEATING_POWER 40000 //T2 space heater
+#define AALARM_THERMOSTAT_HEATING_EFFICIENCY 30000 //T2 space heater
+
 /obj/machinery/airalarm
 	name = "air alarm"
 	desc = "A machine that monitors atmosphere levels. Goes off if the area is dangerous."
@@ -79,25 +82,34 @@
 
 	var/danger_level = 0
 	var/mode = AALARM_MODE_SCRUBBING
+
+	//Fire alarm related vars//
+
 	///The fire alert type currently active
 	var/alert_type = FIRE_CLEAR
 	///A reference to the area we are in
 	var/area/my_area
+	///The loopingsound for when there's shit fucky
+	var/datum/looping_sound/firealarm/soundloop
+	var/datum/looping_sound/atmosalarm/atmosloop
 
 	var/locked = TRUE
 	var/aidisabled = 0
 	var/shorted = 0
 	var/buildstage = AIRALARM_BUILD_COMPLETE // 2 = complete, 1 = no wires,  0 = circuit gone
 
+	///How far the thermostat may deviate from T2OC
+	var/thermostat_deviation_max = 20
+	///The current thermostat target temp
+	var/thermostat_target = T20C
+
 	var/frequency = FREQ_ATMOS_CONTROL
 	var/alarm_frequency = FREQ_ATMOS_ALARMS
 	var/datum/radio_frequency/radio_connection
 	///Represents a signel source of atmos alarms, complains to all the listeners if one of our thresholds is violated
 	var/datum/alarm_handler/alarm_manager
 
-	var/static/list/atmos_connections = list(COMSIG_TURF_EXPOSE = .proc/check_air_dangerlevel)
-
-	var/list/TLV = list(
+	var/list/datum/tlv/TLV = list(
 		"pressure" = new/datum/tlv(HAZARD_LOW_PRESSURE, WARNING_LOW_PRESSURE, WARNING_HIGH_PRESSURE, HAZARD_HIGH_PRESSURE),
 		"temperature" = new/datum/tlv(BODYTEMP_COLD_WARNING_1, BODYTEMP_COLD_WARNING_1+10, BODYTEMP_HEAT_WARNING_1-27, BODYTEMP_HEAT_WARNING_1),
 		GAS_OXYGEN = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa
@@ -138,14 +150,27 @@
 		name = "[get_area_name(src)] Air Alarm"
 
 	alarm_manager = new(src)
+	soundloop = new(src, FALSE)
+	atmosloop = new(src, FALSE)
 	RegisterSignal(src, COMSIG_FIRE_ALERT, .proc/handle_alert)
 	update_appearance()
 
 	set_frequency(frequency)
-	AddElement(/datum/element/connect_loc, atmos_connections)
 	AddComponent(/datum/component/usb_port, list(
 		/obj/item/circuit_component/air_alarm,
 	))
+	SSairmachines.start_processing_machine(src)
+
+	/*
+	if(mapload)
+		var/turf/my_turf = get_turf(src)
+		if(my_turf && (initial(my_turf.temperature) != T20C))
+			var/difftemp = T20C - initial(my_turf.temperature)
+			TLV["temperature"].warning_min -= difftemp
+			TLV["temperature"].hazard_min -= difftemp
+			TLV["temperature"].warning_max -= difftemp
+			TLV["temperature"].hazard_max -= difftemp
+	*/
 
 	return INITIALIZE_HINT_LATELOAD
 
@@ -156,8 +181,11 @@
 /obj/machinery/airalarm/Destroy()
 	set_area(null)
 	SSradio.remove_object(src, frequency)
+	SSairmachines.stop_processing_machine(src)
 	QDEL_NULL(wires)
 	QDEL_NULL(alarm_manager)
+	QDEL_NULL(soundloop)
+	QDEL_NULL(atmosloop)
 	return ..()
 
 /obj/machinery/airalarm/Moved(atom/OldLoc, Dir)
@@ -246,6 +274,11 @@
 								"danger_level" = cur_tlv.get_danger_level(environment.gas[gas_id]* partial_pressure)
 		))
 
+	data["thermostat"] = list(
+		"deviation" = thermostat_deviation_max,
+		"target" = thermostat_target - T0C //Convert kelvin to Celsius for the UI
+	)
+
 	if(!locked || user.has_unlimited_silicon_privilege)
 		data["vents"] = list()
 		for(var/id_tag in my_area.air_vent_info)
@@ -328,6 +361,15 @@
 
 	if(. || buildstage != AIRALARM_BUILD_COMPLETE)
 		return
+
+	if(action == "target") //Setting the thermostat doesn't require any access
+		var/target = text2num(params["target"])
+		if(target != null)
+			thermostat_target = target
+			. = TRUE
+			thermostat_target = clamp(target, 20 - thermostat_deviation_max, 20 + thermostat_deviation_max)
+			thermostat_target += T0C //Convert back to Kelvin //-270.45 is TCMB
+
 	if((locked && !usr.has_unlimited_silicon_privilege) || (usr.has_unlimited_silicon_privilege && aidisabled))
 		return
 	var/device_id = params["id_tag"]
@@ -374,7 +416,7 @@
 				investigate_log(" treshold value for [env]:[name] was set to [value] by [key_name(usr)]",INVESTIGATE_ATMOS)
 				var/turf/our_turf = get_turf(src)
 				var/datum/gas_mixture/environment = our_turf.return_air()
-				check_air_dangerlevel(our_turf, environment, environment.temperature)
+				check_air_dangerlevel(environment)
 				. = TRUE
 		if("mode")
 			mode = text2num(params["mode"])
@@ -389,6 +431,10 @@
 			if(alarm_manager.clear_alarm(ALARM_ATMOS))
 				post_alert(0)
 			. = TRUE
+		if("fire_alarm")
+			my_area.communicate_fire_alert(alert_type ? FIRE_CLEAR : FIRE_RAISED_AIRALARM)
+			. = TRUE
+
 	update_appearance()
 
 
@@ -565,7 +611,9 @@
 
 	var/area/our_area = get_area(src)
 	var/color
-	switch(max(danger_level, !!our_area.active_alarms[ALARM_ATMOS]))
+	var/alert = max(danger_level, !!our_area.active_alarms[ALARM_ATMOS])
+	alert ||= !!alert_type //Fires should only display yellow alerts
+	switch(alert)
 		if(0)
 			color = "#03A728" // green
 		if(1)
@@ -597,7 +645,10 @@
 
 	var/area/our_area = get_area(src)
 	var/state
-	switch(max(danger_level, !!our_area.active_alarms[ALARM_ATMOS]))
+
+	var/alert = max(danger_level, !!our_area.active_alarms[ALARM_ATMOS])
+	alert ||= !!alert_type //Fires should only display yellow alerts
+	switch(alert)
 		if(0)
 			state = "alarm0"
 		if(1)
@@ -608,16 +659,53 @@
 	. += mutable_appearance(icon, state)
 	. += emissive_appearance(icon, state, alpha = src.alpha)
 
+/obj/machinery/airalarm/fire_act(exposed_temperature, exposed_volume)
+	. = ..()
+	if(!danger_level)
+		check_air_dangerlevel(loc.return_air())
+
+/obj/machinery/airalarm/process_atmos()
+	if((machine_stat & (NOPOWER|BROKEN)) || shorted)
+		return
+
+	var/datum/gas_mixture/environment = loc.return_air()
+
+	check_air_dangerlevel(loc.return_air())
+
+	if(!my_area.apc?.terminal)
+		COOLDOWN_START(src, hibernating, 5 SECONDS)
+		return
+
+	var/obj/machinery/power/terminal/local_term = my_area.apc.terminal
+
+	var/heat_capacity = environment.getHeatCapacity()
+	var/required_energy = abs(environment.temperature - thermostat_target) * heat_capacity
+	required_energy = min(required_energy, AALARM_THERMOSTAT_HEATING_POWER)
+
+	if(required_energy < 1 && !danger_level)
+		COOLDOWN_START(src, hibernating, 5 SECONDS)
+		return
+
+	var/delta_temperature = required_energy / heat_capacity
+	if(!delta_temperature)
+		return
+
+	if(environment.temperature > thermostat_target)
+		delta_temperature *= -1
+
+	var/energy2use = required_energy / AALARM_THERMOSTAT_HEATING_EFFICIENCY
+	if(!local_term.avail(energy2use))
+		return
+
+	local_term.use_power(energy2use)
+	environment.temperature += delta_temperature
+
 /**
  * main proc for throwing a shitfit if the air isnt right.
  * goes into warning mode if gas parameters are beyond the tlv warning bounds, goes into hazard mode if gas parameters are beyond tlv hazard bounds
  *
  */
-/obj/machinery/airalarm/proc/check_air_dangerlevel(turf/location, datum/gas_mixture/environment, exposed_temperature)
-	SIGNAL_HANDLER
-	if((machine_stat & (NOPOWER|BROKEN)) || shorted)
-		return
-
+/obj/machinery/airalarm/proc/check_air_dangerlevel(datum/gas_mixture/environment)
 	var/datum/tlv/current_tlv
 	//cache for sanic speed (lists are references anyways)
 	var/list/cached_tlv = TLV
@@ -630,7 +718,7 @@
 	var/pressure_dangerlevel = current_tlv.get_danger_level(environment_pressure)
 
 	current_tlv = cached_tlv["temperature"]
-	var/temperature_dangerlevel = current_tlv.get_danger_level(exposed_temperature)
+	var/temperature_dangerlevel = current_tlv.get_danger_level(environment.temperature)
 
 	var/gas_dangerlevel = 0
 	for(var/gas_id in env_gases)
@@ -651,7 +739,7 @@
 
 /obj/machinery/airalarm/proc/post_alert(alert_level)
 	var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency)
-
+	my_area.communicate_fire_alert(alert_level ? FIRE_RAISED_AIRALARM : FIRE_CLEAR)
 	if(!frequency)
 		return
 
@@ -678,7 +766,9 @@
 	var/did_anything_happen
 	if(new_area_danger_level)
 		did_anything_happen = alarm_manager.send_alarm(ALARM_ATMOS)
+	else
 		did_anything_happen = alarm_manager.clear_alarm(ALARM_ATMOS)
+
 	if(did_anything_happen) //if something actually changed
 		post_alert(new_area_danger_level)
 
@@ -844,6 +934,8 @@
 		GAS_PLASMA = new/datum/tlv/no_checks,
 		GAS_N2O = new/datum/tlv/no_checks,
 	)
+	thermostat_target = 80
+	thermostat_deviation_max = 250
 
 /obj/machinery/airalarm/kitchen_cold_room // Kitchen cold rooms start off at -14°C or 259.15K.
 	TLV = list(
@@ -854,6 +946,8 @@
 		GAS_CO2 = new/datum/tlv(-1, -1, 5, 10),
 		GAS_PLASMA = new/datum/tlv/dangerous,
 	)
+	thermostat_target = COLD_ROOM_TEMP
+	thermostat_deviation_max = 34
 
 /obj/machinery/airalarm/unlocked
 	locked = FALSE
@@ -963,7 +1057,25 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 /obj/machinery/airalarm/proc/handle_alert(datum/source, code)
 	SIGNAL_HANDLER
 
-	return
+	if(alert_type == code)
+		return
+
+	switch(code)
+		if(FIRE_RAISED_AIRALARM)
+			if(alert_type & FIRE_RAISED_PULL)
+				soundloop.stop()
+			alarm_manager.send_alarm(ALARM_FIRE)
+			atmosloop.start()
+		if(FIRE_RAISED_PULL) //We will never recieve a pulled signal if we aren't currently clear
+			soundloop.start()
+			alarm_manager.send_alarm(ALARM_FIRE)
+		else
+			alarm_manager.clear_alarm(ALARM_FIRE)
+			soundloop.stop()
+			atmosloop.stop()
+
+	alert_type = code
+
 
 
 #undef AALARM_MODE_SCRUBBING
diff --git a/sound/machines/atmosalarm.ogg b/sound/machines/atmosalarm.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..fe44b7e434374c6d614219fbda58fc0e76959043
GIT binary patch
literal 27052
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%0A{gIBja>Wgs-0K
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

literal 0
HcmV?d00001

diff --git a/tgui/packages/tgui/interfaces/AirAlarm.js b/tgui/packages/tgui/interfaces/AirAlarm.js
index 402ced320eb..2639a0853a0 100644
--- a/tgui/packages/tgui/interfaces/AirAlarm.js
+++ b/tgui/packages/tgui/interfaces/AirAlarm.js
@@ -1,7 +1,7 @@
 import { toFixed } from 'common/math';
 import { Fragment } from 'inferno';
 import { useBackend, useLocalState } from '../backend';
-import { Box, Button, LabeledList, Section } from '../components';
+import { Box, Button, Flex, Knob, LabeledControls, LabeledList, RoundGauge, Section } from '../components';
 import { Window } from '../layouts';
 import { Scrubber, Vent } from './common/AtmosControls';
 import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox';
@@ -15,6 +15,7 @@ export const AirAlarm = (props, context) => {
       height={650}>
       <Window.Content scrollable>
         <InterfaceLockNoticeBox />
+        <ThermostatControl />
         <AirAlarmStatus />
         {!locked && (
           <AirAlarmControl />
@@ -91,6 +92,74 @@ const AirAlarmStatus = (props, context) => {
   );
 };
 
+const ThermostatControl = (props, context) => {
+  const { act, data } = useBackend(context);
+  const entries = (data.environment_data || [])
+    .filter(entry => entry.value >= 0.01);
+  return (
+    <Section title="Thermostat">
+      <Flex>
+        <Flex.Item>
+          <LabeledControls>
+            <LabeledControls.Item label="Control">
+              <Box
+                position="relative"
+                mr={2}
+                ml={2}
+                mt={1}>
+                <Knob
+                  size={1.25}
+                  color={'green'}
+                  value={data.thermostat.target}
+                  unit="°C"
+                  minValue={20 - data.thermostat.deviation}
+                  maxValue={20 + data.thermostat.deviation}
+                  step={1}
+                  stepPixelSize={0.75}
+                  onDrag={(e, value) => act('target', {
+                    target: value,
+                  })} />
+                <Button
+                  fluid
+                  position="absolute"
+                  top="16px"
+                  right="-20px"
+                  color="transparent"
+                  icon="undo"
+                  onClick={() => act('target', {
+                    target: "20",
+                  })} />
+              </Box>
+            </LabeledControls.Item>
+          </LabeledControls>
+        </Flex.Item>
+        <Flex.Item>
+          <LabeledControls
+            ml={1}>
+            <LabeledControls.Item
+              minWidth="66px"
+              label="Target (°C)">
+              <RoundGauge
+                size={1.75}
+                value={toFixed(data.thermostat.target, 0)}
+                minValue={20 - data.thermostat.deviation}
+                maxValue={20 + data.thermostat.deviation}
+                ranges={{
+                  "good": [20 - data.thermostat.deviation, 10],
+                  "average": [11,
+                    29],
+                  "bad": [30,
+                    20 + data.thermostat.deviation],
+                }}
+              />
+            </LabeledControls.Item>
+          </LabeledControls>
+        </Flex.Item>
+      </Flex>
+    </Section>
+  );
+};
+
 const AIR_ALARM_ROUTES = {
   home: {
     title: 'Air Controls',
@@ -142,9 +211,18 @@ const AirAlarmControlHome = (props, context) => {
   const {
     mode,
     atmos_alarm,
+    fire_alarm,
   } = data;
   return (
     <>
+      <Button
+        icon="exclamation-triangle"
+        color={fire_alarm ? 'danger' : 'caution'}
+        content="Fire Alarm"
+        onClick={() => act('fire_alarm', {
+          fire_alarm: fire_alarm === 1 ? 0 : 1,
+        })} />
+      <Box mt={1} />
       <Button
         icon={atmos_alarm
           ? 'exclamation-triangle'

From aec655a916c63aeaeaeb55401d0b78b269abede3 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 6 Jul 2022 02:01:42 -0400
Subject: [PATCH 184/200] fix some runtimes

---
 code/__DEFINES/atmospherics/temperature.dm      | 11 +----------
 code/modules/atmospherics/ZAS/Zone.dm           |  3 +--
 code/modules/atmospherics/machinery/airalarm.dm |  4 ++++
 code/modules/mob/living/life.dm                 |  2 +-
 4 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/code/__DEFINES/atmospherics/temperature.dm b/code/__DEFINES/atmospherics/temperature.dm
index d9a31fd0bcc..d6a53f945b7 100644
--- a/code/__DEFINES/atmospherics/temperature.dm
+++ b/code/__DEFINES/atmospherics/temperature.dm
@@ -1,14 +1,6 @@
 #define ATOM_IS_TEMPERATURE_SENSITIVE(A) (A && !QDELETED(A) && !(A.flags_2 & NO_TEMP_CHANGE_2))
 #define ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD 5
 #define ATOM_TEMPERATURE_EQUILIBRIUM_CONSTANT 0.25
-#define KEEP_ME_GOING 1
-
-/*#define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
-	_atom.temperature = _temp; \
-	if(_atom.reagents) { \
-		START_PROCESSING(SSreagents, _atom.reagents); \
-	} \
-	QUEUE_TEMPERATURE_ATOMS(_atom);*/
 
 #define ADJUST_ATOM_TEMPERATURE(_atom, _temp) \
 	_atom.temperature = _temp; \
@@ -16,8 +8,7 @@
 
 #define QUEUE_TEMPERATURE_ATOMS(_atoms) \
 	if(islist(_atoms)) { \
-		for(var/thing in _atoms) { \
-			var/atom/A = thing; \
+		for(var/atom/A as anything in _atoms) { \
 			if(ATOM_IS_TEMPERATURE_SENSITIVE(A)) { \
 				START_PROCESSING(SSairatoms, A); \
 			} \
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 79fddf11563..1afeb1bfa09 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -213,8 +213,7 @@ Class Procs:
 		for(var/turf/T in contents)
 			if(!T.simulated)
 				continue
-			for(var/check_atom in T.contents)
-				var/atom/checking = check_atom
+			for(var/atom/movable/checking as anything in T.contents)
 				if(checking.simulated)
 					QUEUE_TEMPERATURE_ATOMS(checking)
 			CHECK_TICK
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index a47f6dee41a..15bd4ffb677 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -679,6 +679,10 @@
 	var/obj/machinery/power/terminal/local_term = my_area.apc.terminal
 
 	var/heat_capacity = environment.getHeatCapacity()
+
+	if(!heat_capacity) //No air
+		return
+
 	var/required_energy = abs(environment.temperature - thermostat_target) * heat_capacity
 	required_energy = min(required_energy, AALARM_THERMOSTAT_HEATING_POWER)
 
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index c3294b190c1..0fa12c22f25 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -121,7 +121,7 @@
 		extinguish_mob()
 		return TRUE //mob was put out, on_fire = FALSE via extinguish_mob(), no need to update everything down the chain.
 	var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
-	if(!G?.hasGas(GAS_OXYGEN, 1))
+	if(G && (G.gas[GAS_OXYGEN] >= 1))
 		extinguish_mob() //If there's no oxygen in the tile we're on, put out the fire
 		return TRUE
 	var/turf/location = get_turf(src)

From 201e02b823dc802cad3be969dd221c706ff6a53e Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 6 Jul 2022 02:15:33 -0400
Subject: [PATCH 185/200] oops

---
 code/game/machinery/doors/windowdoor.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 3456279f7b2..0b6226038fe 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -266,7 +266,7 @@
 	add_atom_colour("#7D1919", FIXED_COLOUR_PRIORITY)
 
 /obj/machinery/door/window/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > T0C + (reinf ? 1600 : 800)) ? KEEP_ME_GOING : FALSE
+	return (exposed_temperature > T0C + (reinf ? 1600 : 800)) ? TRUE : FALSE
 
 /obj/machinery/door/window/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	take_damage(round(exposed_temperature / 200), BURN, 0, 0)

From f9e5f220168cd9e7de6fe9cf67bf2dd330e5ea01 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 6 Jul 2022 02:15:49 -0400
Subject: [PATCH 186/200] I CLICKED STAGE ALL FOR FUCK SAKE VSC

---
 code/game/objects/effects/glowshroom.dm              | 2 +-
 code/game/objects/effects/spiderwebs.dm              | 2 +-
 code/game/objects/structures/aliens.dm               | 2 +-
 code/modules/atmospherics/ZAS/Temperature.dm         | 2 +-
 code/modules/mob/living/simple_animal/bot/firebot.dm | 2 +-
 code/modules/power/apc/apc_main.dm                   | 2 +-
 code/modules/vehicles/mecha/mecha_defense.dm         | 2 +-
 7 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 1cb3618c11b..415254f7fd7 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -242,7 +242,7 @@ GLOBAL_VAR_INIT(glowshrooms, 0)
 		playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
 
 /obj/structure/glowshroom/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > 300) ? KEEP_ME_GOING : FALSE
+	return (exposed_temperature > 300) ? TRUE : FALSE
 
 /obj/structure/glowshroom/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > 300)
diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm
index d498b8bebe2..1053a438b84 100644
--- a/code/game/objects/effects/spiderwebs.dm
+++ b/code/game/objects/effects/spiderwebs.dm
@@ -24,7 +24,7 @@
 	. = ..()
 
 /obj/structure/spider/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > 300) ? KEEP_ME_GOING : FALSE
+	return (exposed_temperature > 300) ? TRUE : FALSE
 
 /obj/structure/spider/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > 300)
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index bc36af79fe0..6667cdae921 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -420,7 +420,7 @@
 						break
 
 /obj/structure/alien/egg/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return exposed_temperature > 500 ? KEEP_ME_GOING : 0
+	return exposed_temperature > 500 ? TRUE : 0
 
 /obj/structure/alien/egg/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > 500)
diff --git a/code/modules/atmospherics/ZAS/Temperature.dm b/code/modules/atmospherics/ZAS/Temperature.dm
index a362dc5c88c..b864c9b3499 100644
--- a/code/modules/atmospherics/ZAS/Temperature.dm
+++ b/code/modules/atmospherics/ZAS/Temperature.dm
@@ -68,6 +68,6 @@
 /atom/proc/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	return
 
-///Return KEEP_ME_GOING if the atom should keep processing regardless of normal conditions.
+///Return TRUE if the atom should keep processing regardless of normal conditions.
 /atom/proc/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
 	return
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index a9db73302fd..081676809d2 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -262,7 +262,7 @@
 	return result
 /mob/living/simple_animal/bot/firebot/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT)
-		return KEEP_ME_GOING
+		return TRUE
 
 /mob/living/simple_animal/bot/firebot/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT)
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index 8fa0dcb1f2f..914e03a4008 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -558,7 +558,7 @@
 		breaked_light.break_light_tube()
 		stoplag()
 /obj/machinery/power/apc/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature > 2000) ? KEEP_ME_GOING : FALSE
+	return (exposed_temperature > 2000) ? TRUE : FALSE
 
 /obj/machinery/power/apc/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > 2000)
diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm
index 9e8b7bc8dd0..ee3e99da778 100644
--- a/code/modules/vehicles/mecha/mecha_defense.dm
+++ b/code/modules/vehicles/mecha/mecha_defense.dm
@@ -193,7 +193,7 @@
 
 /obj/vehicle/sealed/mecha/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > max_temperature)
-		return KEEP_ME_GOING
+		return TRUE
 
 /obj/vehicle/sealed/mecha/atmos_expose(datum/gas_mixture/air, exposed_temperature)
 	if(exposed_temperature > max_temperature)

From 1abf7e81e3c7721c25183f30dccc8997a575613b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Wed, 6 Jul 2022 16:09:09 -0400
Subject: [PATCH 187/200] Fix fire

---
 code/modules/mob/living/life.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 0fa12c22f25..cad4424b77f 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -121,7 +121,7 @@
 		extinguish_mob()
 		return TRUE //mob was put out, on_fire = FALSE via extinguish_mob(), no need to update everything down the chain.
 	var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
-	if(G && (G.gas[GAS_OXYGEN] >= 1))
+	if(G && (G.gas[GAS_OXYGEN] <= 1))
 		extinguish_mob() //If there's no oxygen in the tile we're on, put out the fire
 		return TRUE
 	var/turf/location = get_turf(src)

From ec5cbd1caea10064fd28caa20983c5e03681d0aa Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 9 Jul 2022 15:00:49 -0400
Subject: [PATCH 188/200] removes leftover testing artifact

---
 code/modules/atmospherics/machinery/airalarm.dm | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 15bd4ffb677..1954a721078 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -91,7 +91,6 @@
 	var/area/my_area
 	///The loopingsound for when there's shit fucky
 	var/datum/looping_sound/firealarm/soundloop
-	var/datum/looping_sound/atmosalarm/atmosloop
 
 	var/locked = TRUE
 	var/aidisabled = 0
@@ -151,7 +150,6 @@
 
 	alarm_manager = new(src)
 	soundloop = new(src, FALSE)
-	atmosloop = new(src, FALSE)
 	RegisterSignal(src, COMSIG_FIRE_ALERT, .proc/handle_alert)
 	update_appearance()
 
@@ -1066,17 +1064,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
 
 	switch(code)
 		if(FIRE_RAISED_AIRALARM)
-			if(alert_type & FIRE_RAISED_PULL)
-				soundloop.stop()
 			alarm_manager.send_alarm(ALARM_FIRE)
-			atmosloop.start()
+			soundloop.start()
 		if(FIRE_RAISED_PULL) //We will never recieve a pulled signal if we aren't currently clear
 			soundloop.start()
 			alarm_manager.send_alarm(ALARM_FIRE)
 		else
 			alarm_manager.clear_alarm(ALARM_FIRE)
 			soundloop.stop()
-			atmosloop.stop()
 
 	alert_type = code
 

From 12e40b1d52f65e367449f20c56adb54e1126b7f8 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 9 Jul 2022 15:05:42 -0400
Subject: [PATCH 189/200] for real this time

---
 code/modules/atmospherics/machinery/airalarm.dm | 1 -
 1 file changed, 1 deletion(-)

diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 1954a721078..e733948234b 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -183,7 +183,6 @@
 	QDEL_NULL(wires)
 	QDEL_NULL(alarm_manager)
 	QDEL_NULL(soundloop)
-	QDEL_NULL(atmosloop)
 	return ..()
 
 /obj/machinery/airalarm/Moved(atom/OldLoc, Dir)

From 0044d815786e365554f898bb7ec9051239483408 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 10 Jul 2022 14:22:21 -0400
Subject: [PATCH 190/200] Removes unused files

---
 .../atmospherics/environmental/LINDA_fire.dm  |  312 -----
 .../environmental/LINDA_system.dm             |  161 ---
 .../environmental/LINDA_turf_tile.dm          |  664 ---------
 .../atmospherics/gasmixtures/gas_mixture.dm   |  726 ----------
 .../atmospherics/gasmixtures/gas_types.dm     |  287 ----
 .../gasmixtures/immutable_mixtures.dm         |   96 --
 .../gasmixtures/reaction_factors.dm           |  216 ---
 .../atmospherics/gasmixtures/reactions.dm     | 1194 -----------------
 .../machinery/bluespace_vendor.dm             |  282 ----
 .../components/electrolyzer/electrolyzer.dm   |  212 ---
 .../electrolyzer/electrolyzer_reactions.dm    |   63 -
 .../machinery/components/fusion/hfr_core.dm   |  203 ---
 .../components/fusion/hfr_defines.dm          |  150 ---
 .../components/fusion/hfr_fuel_datums.dm      |  140 --
 .../components/fusion/hfr_main_processes.dm   |  579 --------
 .../machinery/components/fusion/hfr_parts.dm  |  518 -------
 .../machinery/components/fusion/hfr_procs.dm  |  619 ---------
 .../atmos_machines_recipes.dm                 |  183 ---
 .../gas_recipe_machines/crystallizer.dm       |  338 -----
 .../gas_recipe_machines/crystallizer_items.dm |   30 -
 .../unary_devices/bluespace_sender.dm         |  178 ---
 pariah.dme                                    |   21 -
 22 files changed, 7172 deletions(-)
 delete mode 100644 code/modules/atmospherics/environmental/LINDA_fire.dm
 delete mode 100644 code/modules/atmospherics/environmental/LINDA_system.dm
 delete mode 100644 code/modules/atmospherics/environmental/LINDA_turf_tile.dm
 delete mode 100644 code/modules/atmospherics/gasmixtures/gas_mixture.dm
 delete mode 100644 code/modules/atmospherics/gasmixtures/gas_types.dm
 delete mode 100644 code/modules/atmospherics/gasmixtures/immutable_mixtures.dm
 delete mode 100644 code/modules/atmospherics/gasmixtures/reaction_factors.dm
 delete mode 100644 code/modules/atmospherics/gasmixtures/reactions.dm
 delete mode 100644 code/modules/atmospherics/machinery/bluespace_vendor.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/fusion/hfr_core.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/fusion/hfr_defines.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm
 delete mode 100644 code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm

diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm
deleted file mode 100644
index 2b8e4cd9307..00000000000
--- a/code/modules/atmospherics/environmental/LINDA_fire.dm
+++ /dev/null
@@ -1,312 +0,0 @@
-/// Returns reactions which will contribute to a hotspot's size.
-/proc/init_hotspot_reactions()
-	var/list/fire_reactions = list()
-	for (var/datum/gas_reaction/reaction as anything in subtypesof(/datum/gas_reaction))
-		if(initial(reaction.expands_hotspot))
-			fire_reactions += reaction
-
-	return fire_reactions
-
-/atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
-	return null
-
-
-
-/turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
-	return
-
-/**
- * Handles the creation of hotspots and initial activation of turfs.
- * Setting the conditions for the reaction to actually happen for gasmixtures
- * is handled by the hotspot itself, specifically perform_exposure().
- */
-/turf/open/hotspot_expose(exposed_temperature, exposed_volume, soh)
-	//If the air doesn't exist we just return false
-	var/list/air_gases = air?.gases
-	if(!air_gases)
-		return
-
-	. = air_gases[/datum/gas/oxygen]
-	var/oxy = . ? .[MOLES] : 0
-	if (oxy < 0.5)
-		return
-	. = air_gases[/datum/gas/plasma]
-	var/plas = . ? .[MOLES] : 0
-	. = air_gases[/datum/gas/tritium]
-	var/trit = . ? .[MOLES] : 0
-	. = air_gases[/datum/gas/hydrogen]
-	var/h2 = . ? .[MOLES] : 0
-	. = air_gases[/datum/gas/freon]
-	var/freon = . ? .[MOLES] : 0
-	if(active_hotspot)
-		if(soh)
-			if(plas > 0.5 || trit > 0.5 || h2 > 0.5)
-				if(active_hotspot.temperature < exposed_temperature)
-					active_hotspot.temperature = exposed_temperature
-				if(active_hotspot.volume < exposed_volume)
-					active_hotspot.volume = exposed_volume
-			else if(freon > 0.5)
-				if(active_hotspot.temperature > exposed_temperature)
-					active_hotspot.temperature = exposed_temperature
-				if(active_hotspot.volume < exposed_volume)
-					active_hotspot.volume = exposed_volume
-		return
-
-	if(((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && (plas > 0.5 || trit > 0.5 || h2 > 0.5)) || \
-		((exposed_temperature < FREON_MAXIMUM_BURN_TEMPERATURE) && (freon > 0.5)))
-
-		active_hotspot = new /obj/effect/hotspot(src, exposed_volume*25, exposed_temperature)
-
-		active_hotspot.just_spawned = (current_cycle < SSair.times_fired)
-			//remove just_spawned protection if no longer processing this cell
-		SSair.add_to_active(src)
-
-/**
- * Hotspot objects interfaces with the temperature of turf gasmixtures while also providing visual effects.
- * One important thing to note about hotspots are that they can roughly be divided into two categories based on the bypassing variable.
- */
-/obj/effect/hotspot
-	anchored = TRUE
-	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-	icon = 'icons/effects/fire.dmi'
-	icon_state = "1"
-	layer = GASFIRE_LAYER
-	plane = ABOVE_GAME_PLANE
-	blend_mode = BLEND_ADD
-	light_system = MOVABLE_LIGHT
-	light_range = LIGHT_RANGE_FIRE
-	light_power = 1
-	light_color = LIGHT_COLOR_FIRE
-
-	/**
-	 * Volume is the representation of how big and healthy a fire is.
-	 * Hotspot volume will be divided by turf volume to get the ratio for temperature setting on non bypassing mode.
-	 * Also some visual stuffs for fainter fires.
-	 */
-	var/volume = 125
-	/// Temperature handles the initial ignition and the colouring.
-	var/temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
-	/// Whether the hotspot is new or not. Used for bypass logic.
-	var/just_spawned = TRUE
-	/// Whether the hotspot becomes passive and follows the gasmix temp instead of changing it.
-	var/bypassing = FALSE
-	var/visual_update_tick = 0
-	///Are we burning freon?
-	var/cold_fire = FALSE
-
-
-/obj/effect/hotspot/Initialize(mapload, starting_volume, starting_temperature)
-	. = ..()
-	SSair.hotspots += src
-	if(!isnull(starting_volume))
-		volume = starting_volume
-	if(!isnull(starting_temperature))
-		temperature = starting_temperature
-	perform_exposure()
-	setDir(pick(GLOB.cardinals))
-	//air_update_turf(FALSE, FALSE)
-	var/static/list/loc_connections = list(
-		COMSIG_ATOM_ENTERED = .proc/on_entered,
-	)
-	AddElement(/datum/element/connect_loc, loc_connections)
-
-/**
- * Perform interactions between the hotspot and the gasmixture.
- *
- * For the first tick, hotspots will take a sample of the air in the turf,
- * set the temperature equal to a certain amount, and then reacts it.
- * In some implementations the ratio comes out to around 1, so all of the air in the turf.
- *
- * Afterwards if the reaction is big enough it mostly just tags along the fire,
- * copying the temperature and handling the colouring.
- * If the reaction is too small it will perform like the first tick.
- *
- * Also calls fire_act() which handles burning.
- */
-/obj/effect/hotspot/proc/perform_exposure()
-	var/turf/open/location = loc
-	var/datum/gas_mixture/reference
-	if(!istype(location) || !(location.air))
-		return
-
-	location.active_hotspot = src
-
-	bypassing = !just_spawned && (volume > CELL_VOLUME*0.95)
-
-	//Passive mode
-	if(bypassing || cold_fire)
-		reference = location.air // Our color and volume will depend on the turf's gasmix
-	//Active mode
-	else
-		var/datum/gas_mixture/affected = location.air.removeRatio(volume/location.air.volume)
-		if(affected) //in case volume is 0
-			reference = affected // Our color and volume will depend on this small sparked gasmix
-			affected.temperature = temperature
-			affected.react(src)
-			location.assume_air(affected)
-
-	if(reference)
-		volume = 0
-		var/list/cached_results = reference.reaction_results
-		for (var/reaction in SSair.hotspot_reactions)
-			volume += cached_results[reaction] * FIRE_GROWTH_RATE
-		temperature = reference.temperature
-
-	// Handles the burning of atoms.
-	if(cold_fire)
-		return
-	for(var/A in location)
-		var/atom/AT = A
-		if(!QDELETED(AT) && AT != src)
-			AT.fire_act(temperature, volume)
-	return
-
-/// Mathematics to be used for color calculation.
-/obj/effect/hotspot/proc/gauss_lerp(x, x1, x2)
-	var/b = (x1 + x2) * 0.5
-	var/c = (x2 - x1) / 6
-	return NUM_E ** -((x - b) ** 2 / (2 * c) ** 2)
-
-/obj/effect/hotspot/proc/update_color()
-	cut_overlays()
-
-	var/heat_r = heat2colour_r(temperature)
-	var/heat_g = heat2colour_g(temperature)
-	var/heat_b = heat2colour_b(temperature)
-	var/heat_a = 255
-	var/greyscale_fire = 1 //This determines how greyscaled the fire is.
-
-	if(cold_fire)
-		heat_r = 0
-		heat_g = LERP(255, temperature, 1.2)
-		heat_b = LERP(255, temperature, 0.9)
-		heat_a = 100
-	else if(temperature < 5000) //This is where fire is very orange, we turn it into the normal fire texture here.
-		var/normal_amt = gauss_lerp(temperature, 1000, 3000)
-		heat_r = LERP(heat_r,255,normal_amt)
-		heat_g = LERP(heat_g,255,normal_amt)
-		heat_b = LERP(heat_b,255,normal_amt)
-		heat_a -= gauss_lerp(temperature, -5000, 5000) * 128
-		greyscale_fire -= normal_amt
-	if(temperature > 40000) //Past this temperature the fire will gradually turn a bright purple
-		var/purple_amt = temperature < LERP(40000,200000,0.5) ? gauss_lerp(temperature, 40000, 200000) : 1
-		heat_r = LERP(heat_r,255,purple_amt)
-	if(temperature > 200000 && temperature < 500000) //Somewhere at this temperature nitryl happens.
-		var/sparkle_amt = gauss_lerp(temperature, 200000, 500000)
-		var/mutable_appearance/sparkle_overlay = mutable_appearance('icons/effects/effects.dmi', "shieldsparkles")
-		sparkle_overlay.blend_mode = BLEND_ADD
-		sparkle_overlay.alpha = sparkle_amt * 255
-		add_overlay(sparkle_overlay)
-	if(temperature > 400000 && temperature < 1500000) //Lightning because very anime.
-		var/mutable_appearance/lightning_overlay = mutable_appearance(icon, "overcharged")
-		lightning_overlay.blend_mode = BLEND_ADD
-		add_overlay(lightning_overlay)
-	if(temperature > 4500000) //This is where noblium happens. Some fusion-y effects.
-		var/fusion_amt = temperature < LERP(4500000,12000000,0.5) ? gauss_lerp(temperature, 4500000, 12000000) : 1
-		var/mutable_appearance/fusion_overlay = mutable_appearance('icons/effects/atmospherics.dmi', "fusion_gas")
-		fusion_overlay.blend_mode = BLEND_ADD
-		fusion_overlay.alpha = fusion_amt * 255
-		var/mutable_appearance/rainbow_overlay = mutable_appearance('icons/hud/screen_gen.dmi', "druggy")
-		rainbow_overlay.blend_mode = BLEND_ADD
-		rainbow_overlay.alpha = fusion_amt * 255
-		rainbow_overlay.appearance_flags = RESET_COLOR
-		heat_r = LERP(heat_r,150,fusion_amt)
-		heat_g = LERP(heat_g,150,fusion_amt)
-		heat_b = LERP(heat_b,150,fusion_amt)
-		add_overlay(fusion_overlay)
-		add_overlay(rainbow_overlay)
-
-	set_light_color(rgb(LERP(250, heat_r, greyscale_fire), LERP(160, heat_g, greyscale_fire), LERP(25, heat_b, greyscale_fire)))
-
-	heat_r /= 255
-	heat_g /= 255
-	heat_b /= 255
-
-	color = list(LERP(0.3, 1, 1-greyscale_fire) * heat_r,0.3 * heat_g * greyscale_fire,0.3 * heat_b * greyscale_fire, 0.59 * heat_r * greyscale_fire,LERP(0.59, 1, 1-greyscale_fire) * heat_g,0.59 * heat_b * greyscale_fire, 0.11 * heat_r * greyscale_fire,0.11 * heat_g * greyscale_fire,LERP(0.11, 1, 1-greyscale_fire) * heat_b, 0,0,0)
-	alpha = heat_a
-
-#define INSUFFICIENT(path) (!location.air.gases[path] || location.air.gases[path][MOLES] < 0.5)
-
-/**
- * Regular process proc for hotspots governed by the controller.
- * Handles the calling of perform_exposure() which handles the bulk of temperature processing.
- * Burning or fire_act() are also called by perform_exposure().
- * Also handles the dying and qdeletion of the hotspot and hotspot creations on adjacent cardinal turfs.
- * And some visual stuffs too! Colors and fainter icons for specific conditions.
- */
-/obj/effect/hotspot/process()
-	if(just_spawned)
-		just_spawned = FALSE
-		return
-
-	var/turf/open/location = loc
-	if(!istype(location))
-		qdel(src)
-		return
-
-	if(location.excited_group)
-		location.excited_group.reset_cooldowns()
-
-	cold_fire = FALSE
-	if(temperature <= FREON_MAXIMUM_BURN_TEMPERATURE)
-		cold_fire = TRUE
-
-	if((temperature < FIRE_MINIMUM_TEMPERATURE_TO_EXIST && !cold_fire) || (volume <= 1))
-		qdel(src)
-		return
-
-	//Not enough / nothing to burn
-	if(!location.air || (INSUFFICIENT(/datum/gas/plasma) && INSUFFICIENT(/datum/gas/tritium) && INSUFFICIENT(/datum/gas/hydrogen) && INSUFFICIENT(/datum/gas/freon)) || INSUFFICIENT(/datum/gas/oxygen))
-		qdel(src)
-		return
-
-	perform_exposure()
-
-	if(bypassing)
-		icon_state = "3"
-		if(!cold_fire)
-			location.burn_tile()
-
-		//Possible spread due to radiated heat.
-		if(location.air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD || cold_fire)
-			var/radiated_temperature = location.air.temperature*FIRE_SPREAD_RADIOSITY_SCALE
-			if(cold_fire)
-				radiated_temperature = location.air.temperature * COLD_FIRE_SPREAD_RADIOSITY_SCALE
-			for(var/t in location.atmos_adjacent_turfs)
-				var/turf/open/T = t
-				if(!T.active_hotspot)
-					T.hotspot_expose(radiated_temperature, CELL_VOLUME/4)
-
-	else
-		if(volume > CELL_VOLUME*0.4)
-			icon_state = "2"
-		else
-			icon_state = "1"
-
-	if((visual_update_tick++ % 7) == 0)
-		update_color()
-
-	return TRUE
-
-/obj/effect/hotspot/Destroy()
-	SSair.hotspots -= src
-	var/turf/open/T = loc
-	if(istype(T) && T.active_hotspot == src)
-		T.active_hotspot = null
-	return ..()
-
-/obj/effect/hotspot/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
-	SIGNAL_HANDLER
-	if(isliving(arrived) && !cold_fire)
-		var/mob/living/immolated = arrived
-		immolated.fire_act(temperature, volume)
-
-/obj/effect/hotspot/singularity_pull()
-	return
-
-/obj/effect/dummy/lighting_obj/moblight/fire
-	name = "fire"
-	light_color = LIGHT_COLOR_FIRE
-	light_range = LIGHT_RANGE_FIRE
-
-#undef INSUFFICIENT
diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm
deleted file mode 100644
index 298be57fbbd..00000000000
--- a/code/modules/atmospherics/environmental/LINDA_system.dm
+++ /dev/null
@@ -1,161 +0,0 @@
-/atom
-	///Check if atmos can pass in this atom (ATMOS_PASS_YES, ATMOS_PASS_NO, ATMOS_PASS_DENSITY, ATMOS_PASS_PROC)
-	var/can_atmos_pass = ATMOS_PASS_YES
-
-/atom/proc/can_atmos_pass(turf/target_turf, vertical = FALSE)
-	switch (can_atmos_pass)
-		if (ATMOS_PASS_PROC)
-			return ATMOS_PASS_YES
-		if (ATMOS_PASS_DENSITY)
-			return !density
-		else
-			return can_atmos_pass
-
-/turf
-	can_atmos_pass = ATMOS_PASS_NO
-
-/turf/open
-	can_atmos_pass = ATMOS_PASS_PROC
-
-///Do NOT use this to see if 2 turfs are connected, it mutates state, and we cache that info anyhow.
-///Use TURFS_CAN_SHARE or TURF_SHARES depending on your usecase
-/turf/open/can_atmos_pass(turf/target_turf, vertical = FALSE)
-	var/can_pass = TRUE
-	var/direction = vertical ? get_dir_multiz(src, target_turf) : get_dir(src, target_turf)
-	var/opposite_direction = REVERSE_DIR(direction)
-	if(vertical && !(zAirOut(direction, target_turf) && target_turf.zAirIn(direction, src)))
-		can_pass = FALSE
-	if(blocks_air || target_turf.blocks_air)
-		can_pass = FALSE
-	//This path is a bit weird, if we're just checking with ourselves no sense asking objects on the turf
-	if (target_turf == src)
-		return can_pass
-
-	//Can't just return if canpass is false here, we need to set superconductivity
-	for(var/obj/checked_object in contents + target_turf.contents)
-		var/turf/other = (checked_object.loc == src ? target_turf : src)
-		if(CANATMOSPASS(checked_object, other, vertical))
-			continue
-		can_pass = FALSE
-		//the direction and open/closed are already checked on can_atmos_pass() so there are no arguments
-		if(checked_object.block_superconductivity())
-			atmos_supeconductivity |= direction
-			target_turf.atmos_supeconductivity |= opposite_direction
-			return FALSE //no need to keep going, we got all we asked (Is this even faster? fuck you it's soul)
-
-	//Superconductivity is a bitfield of directions we can't conduct with
-	//Yes this is really weird. Fuck you
-	atmos_supeconductivity &= ~direction
-	target_turf.atmos_supeconductivity &= ~opposite_direction
-
-	return can_pass
-
-/atom/movable/proc/block_superconductivity() // objects that block air and don't let superconductivity act
-	return FALSE
-
-/turf/proc/immediate_calculate_adjacent_turfs()
-	//Basic optimization, if we can't share why bother asking other people ya feel?
-	var/canpass = CANATMOSPASS(src, src, FALSE)
-	for(var/direction in GLOB.cardinals_multiz)
-		var/turf/current_turf = get_step_multiz(src, direction)
-		if(!isopenturf(current_turf)) // not interested in you brother
-			continue
-		//Can you and me form a deeper relationship, or is this just a passing wind
-		// (direction & (UP | DOWN)) is just "is this vertical" by the by
-		if(canpass && CANATMOSPASS(current_turf, src, (direction & (UP|DOWN))) && !(blocks_air || current_turf.blocks_air))
-			LAZYINITLIST(atmos_adjacent_turfs)
-			LAZYINITLIST(current_turf.atmos_adjacent_turfs)
-			atmos_adjacent_turfs[current_turf] = TRUE
-			current_turf.atmos_adjacent_turfs[src] = TRUE
-		else
-			if (atmos_adjacent_turfs)
-				atmos_adjacent_turfs -= current_turf
-			if (current_turf.atmos_adjacent_turfs)
-				current_turf.atmos_adjacent_turfs -= src
-			UNSETEMPTY(current_turf.atmos_adjacent_turfs)
-	UNSETEMPTY(atmos_adjacent_turfs)
-	src.atmos_adjacent_turfs = atmos_adjacent_turfs
-	SEND_SIGNAL(src, COMSIG_TURF_CALCULATED_ADJACENT_ATMOS)
-
-/**
- * returns a list of adjacent turfs that can share air with this one.
- * alldir includes adjacent diagonal tiles that can share
- * air with both of the related adjacent cardinal tiles
-**/
-/*
-/turf/proc/get_atmos_adjacent_turfs(alldir = 0)
-	var/adjacent_turfs
-	if (atmos_adjacent_turfs)
-		adjacent_turfs = atmos_adjacent_turfs.Copy()
-	else
-		adjacent_turfs = list()
-
-	if (!alldir)
-		return adjacent_turfs
-
-	var/turf/current_location = src
-
-	for (var/direction in GLOB.diagonals_multiz)
-		var/matching_directions = 0
-		var/turf/checked_turf = get_step_multiz(current_location, direction)
-		if(!checked_turf)
-			continue
-
-		for (var/check_direction in GLOB.cardinals_multiz)
-			var/turf/secondary_turf = get_step(checked_turf, check_direction)
-			if(!checked_turf.atmos_adjacent_turfs || !checked_turf.atmos_adjacent_turfs[secondary_turf])
-				continue
-
-			if (adjacent_turfs[secondary_turf])
-				matching_directions++
-
-			if (matching_directions >= 2)
-				adjacent_turfs += checked_turf
-				break
-
-	return adjacent_turfs
-*/
-/atom/proc/air_update_turf(update = FALSE, remove = FALSE)
-	var/turf/local_turf = get_turf(loc)
-	if(!local_turf)
-		return
-	//local_turf.air_update_turf(update, remove)
-
-/**
- * A helper proc for dealing with atmos changes
- *
- * Ok so this thing is pretty much used as a catch all for all the situations someone might wanna change something
- * About a turfs atmos. It's real clunky, and someone needs to clean it up, but not today.
- * Arguments:
- * * update - Has the state of the structures in the world changed? If so, update our adjacent atmos turf list, if not, don't.
- * * remove - Are you removing an active turf (Read wall), or adding one
-*/
-/turf/air_update_turf(update = FALSE, remove = FALSE)
-	if(update)
-		immediate_calculate_adjacent_turfs()
-	if(remove)
-		SSair.remove_from_active(src)
-	else
-		SSair.add_to_active(src)
-
-/atom/movable/proc/move_update_air(turf/target_turf)
-	if(isturf(target_turf))
-		target_turf.//air_update_turf(TRUE, FALSE) //You're empty now
-	//air_update_turf(TRUE, TRUE) //You aren't
-
-/atom/proc/atmos_spawn_air(text) //because a lot of people loves to copy paste awful code lets just make an easy proc to spawn your plasma fires
-	var/turf/open/local_turf = get_turf(src)
-	if(!istype(local_turf))
-		return
-	local_turf.atmos_spawn_air(text)
-
-/turf/open/atmos_spawn_air(text)
-	if(!text || !air)
-		return
-
-	var/datum/gas_mixture/turf_mixture = new
-	turf_mixture.parse_gas_string(text)
-
-	air.merge(turf_mixture)
-	archive()
-	SSair.add_to_active(src)
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
deleted file mode 100644
index 8d24a5ed94c..00000000000
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ /dev/null
@@ -1,664 +0,0 @@
-/turf
-	///used for temperature calculations in superconduction
-	var/thermal_conductivity = 0.05
-	///Amount of heat necessary to activate some atmos processes (there is a weird usage of this var because is compared directly to the temperature instead of heat energy)
-	var/heat_capacity = INFINITY //This should be opt in rather then opt out
-	///Archived version of the temperature on a turf
-	var/temperature_archived
-	///All currently stored conductivities changes
-	var/list/thermal_conductivities
-
-	///list of turfs adjacent to us that air can flow onto
-	var/list/atmos_adjacent_turfs
-	///bitfield of dirs in which we are superconducitng
-	var/atmos_supeconductivity = NONE
-
-	///used to determine whether we should archive
-	var/archived_cycle = 0
-	var/current_cycle = 0
-
-	/**
-	 * used for mapping and for breathing while in walls (because that's a thing that needs to be accounted for...)
-	 * string parsed by /datum/gas/proc/copy_from_turf
-	 * approximation of MOLES_O2STANDARD and MOLES_N2STANDARD pending byond allowing constant expressions to be embedded in constant strings
-	 * If someone will place 0 of some gas there, SHIT WILL BREAK. Do not do that.
-	**/
-	var/initial_gas = OPENTURF_DEFAULT_ATMOS
-
-/turf/open
-	//used for spacewind
-	///Pressure difference between two turfs
-	var/pressure_difference = 0
-	///Where the difference come from (from higher pressure to lower pressure)
-	var/pressure_direction = 0
-
-	///Excited group we are part of
-	var/datum/excited_group/excited_group
-	///Are we active?
-	var/excited = FALSE
-	///Our gas mix
-	var/datum/gas_mixture/turf/air
-
-	///If there is an active hotspot on us store a reference to it here
-	var/obj/effect/hotspot/active_hotspot
-	/// air will slowly revert to initial_gas
-	var/planetary_atmos = FALSE
-	/// once our paired turfs are finished with all other shares, do one 100% share
-	/// exists so things like space can ask to take 100% of a tile's gas
-	var/run_later = FALSE
-
-	///gas IDs of current active gas overlays
-	var/list/atmos_overlay_types
-	var/significant_share_ticker = 0
-	#ifdef TRACK_MAX_SHARE
-	var/max_share = 0
-	#endif
-
-/turf/open/Initialize(mapload)
-	if(!blocks_air)
-		air = new
-		air.copy_from_turf(src)
-		if(planetary_atmos)
-			if(!SSair.planetary[initial_gas])
-				var/datum/gas_mixture/immutable/planetary/mix = new
-				mix.parse_string_immutable(initial_gas)
-				SSair.planetary[initial_gas] = mix
-	. = ..()
-
-/turf/open/Destroy()
-	if(active_hotspot)
-		QDEL_NULL(active_hotspot)
-	// Adds the adjacent turfs to the current atmos processing
-	for(var/near_turf in atmos_adjacent_turfs)
-		SSair.add_to_active(near_turf)
-	return ..()
-
-/////////////////GAS MIXTURE PROCS///////////////////
-
-/turf/open/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
-	if(!giver)
-		return FALSE
-	air.merge(giver)
-	update_visuals()
-	//air_update_turf(FALSE, FALSE)
-	return TRUE
-
-/turf/open/remove_air(amount)
-	var/datum/gas_mixture/ours = return_air()
-	var/datum/gas_mixture/removed = ours.remove(amount)
-	update_visuals()
-	//air_update_turf(FALSE, FALSE)
-	return removed
-
-/turf/open/proc/copy_air_with_tile(turf/open/target_turf)
-	if(istype(target_turf))
-		air.copyFrom(target_turf.air)
-
-/turf/open/proc/copy_air(datum/gas_mixture/copy)
-	if(copy)
-		air.copyFrom(copy)
-
-/turf/return_air()
-	RETURN_TYPE(/datum/gas_mixture)
-	var/datum/gas_mixture/copied_mixture = new
-	copied_mixture.copy_from_turf(src)
-	return copied_mixture
-
-/turf/open/return_air()
-	RETURN_TYPE(/datum/gas_mixture)
-	return air
-
-/turf/open/return_analyzable_air()
-	return return_air()
-
-/turf/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
-	return (exposed_temperature >= heat_capacity || to_be_destroyed)
-
-/turf/atmos_expose(datum/gas_mixture/air, exposed_temperature)
-	if(exposed_temperature >= heat_capacity)
-		to_be_destroyed = TRUE
-	if(to_be_destroyed && exposed_temperature >= max_fire_temperature_sustained)
-		max_fire_temperature_sustained = min(exposed_temperature, max_fire_temperature_sustained + heat_capacity / 4) //Ramp up to 100% yeah?
-	if(to_be_destroyed && !changing_turf)
-		burn()
-
-/turf/proc/burn()
-	burn_tile()
-	var/chance_of_deletion
-	if (heat_capacity) //beware of division by zero
-		chance_of_deletion = max_fire_temperature_sustained / heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0
-	else
-		chance_of_deletion = 100
-	if(prob(chance_of_deletion))
-		Melt()
-		max_fire_temperature_sustained = 0
-	else
-		to_be_destroyed = FALSE
-
-/turf/open/burn()
-	if(!active_hotspot) //Might not even be needed since excited groups are no longer cringe
-		..()
-
-/turf/temperature_expose(datum/gas_mixture/air, exposed_temperature)
-	atmos_expose(air, exposed_temperature)
-
-/turf/open/temperature_expose(datum/gas_mixture/air, exposed_temperature)
-	SEND_SIGNAL(src, COMSIG_TURF_EXPOSE, air, exposed_temperature)
-	check_atmos_process(src, air, exposed_temperature) //Manually do this to avoid needing to use elements, don't want 200 second atom init times
-
-/turf/proc/archive()
-	temperature_archived = temperature
-
-/turf/open/archive()
-	LINDA_CYCLE_ARCHIVE(src)
-
-/////////////////////////GAS OVERLAYS//////////////////////////////
-
-
-/turf/open/proc/update_visuals()
-	var/list/atmos_overlay_types = src.atmos_overlay_types // Cache for free performance
-
-	if(!air) // 2019-05-14: was not able to get this path to fire in testing. Consider removing/looking at callers -Naksu
-		if (atmos_overlay_types)
-			for(var/overlay in atmos_overlay_types)
-				vis_contents -= overlay
-			src.atmos_overlay_types = null
-		return
-
-	var/list/gases = air.gases
-
-	var/list/new_overlay_types
-	GAS_OVERLAYS(gases, new_overlay_types)
-
-	if (atmos_overlay_types)
-		for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added
-			vis_contents -= overlay
-
-	if (length(new_overlay_types))
-		if (atmos_overlay_types)
-			vis_contents += new_overlay_types - atmos_overlay_types //don't add overlays that already exist
-		else
-			vis_contents += new_overlay_types
-
-	UNSETEMPTY(new_overlay_types)
-	src.atmos_overlay_types = new_overlay_types
-
-/proc/typecache_of_gases_with_no_overlays()
-	. = list()
-	for (var/gastype in subtypesof(/datum/gas))
-		var/datum/gas/gasvar = gastype
-		if (!initial(gasvar.gas_overlay))
-			.[gastype] = TRUE
-
-/////////////////////////////SIMULATION///////////////////////////////////
-#ifdef TRACK_MAX_SHARE
-#define LAST_SHARE_CHECK \
-	var/last_share = our_air.last_share;\
-	max_share = max(last_share, max_share);\
-	if(last_share > MINIMUM_AIR_TO_SUSPEND){\
-		our_excited_group.reset_cooldowns();\
-		cached_ticker = 0;\
-		enemy_tile.significant_share_ticker = 0;\
-	} else if(last_share > MINIMUM_MOLES_DELTA_TO_MOVE) {\
-		our_excited_group.dismantle_cooldown = 0;\
-		cached_ticker = 0;\
-		enemy_tile.significant_share_ticker = 0;\
-	}
-#else
-#define LAST_SHARE_CHECK \
-	var/last_share = our_air.last_share;\
-	if(last_share > MINIMUM_AIR_TO_SUSPEND){\
-		our_excited_group.reset_cooldowns();\
-		cached_ticker = 0;\
-		enemy_tile.significant_share_ticker = 0;\
-	} else if(last_share > MINIMUM_MOLES_DELTA_TO_MOVE) {\
-		our_excited_group.dismantle_cooldown = 0;\
-		cached_ticker = 0;\
-		enemy_tile.significant_share_ticker = 0;\
-	}
-#endif
-#ifdef TRACK_MAX_SHARE
-#define PLANET_SHARE_CHECK \
-	var/last_share = our_air.last_share;\
-	max_share = max(last_share, max_share);\
-	if(last_share > MINIMUM_AIR_TO_SUSPEND){\
-		our_excited_group.reset_cooldowns();\
-		cached_ticker = 0;\
-	} else if(last_share > MINIMUM_MOLES_DELTA_TO_MOVE) {\
-		our_excited_group.dismantle_cooldown = 0;\
-		cached_ticker = 0;\
-	}
-#else
-#define PLANET_SHARE_CHECK \
-	var/last_share = our_air.last_share;\
-	if(last_share > MINIMUM_AIR_TO_SUSPEND){\
-		our_excited_group.reset_cooldowns();\
-		cached_ticker = 0;\
-	} else if(last_share > MINIMUM_MOLES_DELTA_TO_MOVE) {\
-		our_excited_group.dismantle_cooldown = 0;\
-		cached_ticker = 0;\
-	}
-#endif
-
-/turf/proc/process_cell(fire_count)
-	SSair.remove_from_active(src)
-
-/turf/open/process_cell(fire_count)
-	if(archived_cycle < fire_count) //archive self if not already done
-		LINDA_CYCLE_ARCHIVE(src)
-
-	current_cycle = fire_count
-	var/cached_ticker = significant_share_ticker
-	cached_ticker += 1
-
-	//cache for sanic speed
-	var/list/adjacent_turfs = atmos_adjacent_turfs
-	var/datum/excited_group/our_excited_group = excited_group
-	var/our_share_coeff = 1/(LAZYLEN(adjacent_turfs) + 1)
-
-	var/datum/gas_mixture/our_air = air
-
-	var/list/share_end
-
-	#ifdef TRACK_MAX_SHARE
-	max_share = 0 //Gotta reset our tracker
-	#endif
-
-	for(var/turf/open/enemy_tile as anything in adjacent_turfs)
-		// This var is only rarely set, exists so turfs can request to share at the end of our sharing
-		// We need this so we can assume share is communative, which we need to do to avoid a hellish amount of garbage_collect()s
-		if(enemy_tile.run_later)
-			LAZYADD(share_end, enemy_tile)
-
-		if(fire_count <= enemy_tile.current_cycle)
-			continue
-		LINDA_CYCLE_ARCHIVE(enemy_tile)
-
-	/******************* GROUP HANDLING START *****************************************************************/
-
-		var/should_share_air = FALSE
-		var/datum/gas_mixture/enemy_air = enemy_tile.air
-
-		//cache for sanic speed
-		var/datum/excited_group/enemy_excited_group = enemy_tile.excited_group
-		//If we are both in an excited group, and they aren't the same, merge.
-		//If we are both in an excited group, and you're active, share
-		//If we pass compare, and if we're not already both in a group, lets join up
-		//If we both pass compare, add to active and share
-		if(our_excited_group && enemy_excited_group)
-			if(our_excited_group != enemy_excited_group)
-				//combine groups (this also handles updating the excited_group var of all involved turfs)
-				our_excited_group.merge_groups(enemy_excited_group)
-				our_excited_group = excited_group //update our cache
-		if(our_excited_group && enemy_excited_group && enemy_tile.excited) //If you're both excited, no need to compare right?
-			should_share_air = TRUE
-		else if(our_air.compare(enemy_air)) //Lets see if you're up for it
-			SSair.add_to_active(enemy_tile) //Add yourself young man
-			var/datum/excited_group/existing_group = our_excited_group || enemy_excited_group || new
-			if(!our_excited_group)
-				existing_group.add_turf(src)
-			if(!enemy_excited_group)
-				existing_group.add_turf(enemy_tile)
-			our_excited_group = excited_group
-			should_share_air = TRUE
-
-		//air sharing
-		if(should_share_air)
-			var/difference = our_air.share(enemy_air, our_share_coeff, 1 / (LAZYLEN(enemy_tile.atmos_adjacent_turfs) + 1))
-			if(difference)
-				if(difference > 0)
-					consider_pressure_difference(enemy_tile, difference)
-				else
-					enemy_tile.consider_pressure_difference(src, -difference)
-			//This acts effectivly as a very slow timer, the max deltas of the group will slowly lower until it breaksdown, they then pop up a bit, and fall back down until irrelevant
-			LAST_SHARE_CHECK
-
-
-	/******************* GROUP HANDLING FINISH *********************************************************************/
-
-	if (planetary_atmos) //share our air with the "atmosphere" "above" the turf
-		var/datum/gas_mixture/planetary_mix = SSair.planetary[initial_gas]
-		// archive ourself again so we don't accidentally share more gas than we currently have
-		LINDA_CYCLE_ARCHIVE(src)
-		if(our_air.compare(planetary_mix))
-			if(!our_excited_group)
-				var/datum/excited_group/new_group = new
-				new_group.add_turf(src)
-				our_excited_group = excited_group
-			// shares 4/5 of our difference in moles with the atmosphere
-			our_air.share(planetary_mix, 0.8, 0.8)
-			// temperature share with the atmosphere with an inflated heat capacity to simulate faster sharing with a large atmosphere
-			our_air.temperature_share(planetary_mix, OPEN_HEAT_TRANSFER_COEFFICIENT, planetary_mix.temperature_archived, planetary_mix.getHeatCapacity() * 5)
-			planetary_mix.garbage_collect()
-			PLANET_SHARE_CHECK
-
-	for(var/turf/open/enemy_tile as anything in share_end)
-		var/datum/gas_mixture/enemy_mix = enemy_tile.air
-		archive()
-		// We share 100% of our mix in this step. Let's jive
-		var/difference = our_air.share(enemy_mix, 1, 1)
-		LAST_SHARE_CHECK
-		if(!difference)
-			continue
-		if(difference > 0)
-			consider_pressure_difference(enemy_tile, difference)
-		else
-			enemy_tile.consider_pressure_difference(src, difference)
-
-	our_air.react(src)
-
-	update_visuals()
-	if(!consider_superconductivity(starting = TRUE) && !active_hotspot) //Might need to include the return of react() here
-		if(!our_excited_group) //If nothing of interest is happening, kill the active turf
-			SSair.remove_from_active(src) //This will kill any connected excited group, be careful (This broke atmos for 4 years)
-		if(cached_ticker > EXCITED_GROUP_DISMANTLE_CYCLES) //If you're stalling out, take a rest
-			SSair.sleep_active_turf(src)
-
-	significant_share_ticker = cached_ticker //Save our changes
-	temperature_expose(our_air, our_air.temperature)
-
-//////////////////////////SPACEWIND/////////////////////////////
-
-/turf/open/proc/consider_pressure_difference(turf/target_turf, difference)
-	SSair.high_pressure_delta |= src
-	if(difference > pressure_difference)
-		pressure_direction = get_dir(src, target_turf)
-		pressure_difference = difference
-
-/turf/open/proc/high_pressure_movements()
-	var/atom/movable/moving_atom
-	for(var/thing in src)
-		moving_atom = thing
-		if (!moving_atom.anchored && !moving_atom.pulledby && moving_atom.last_high_pressure_movement_air_cycle < SSair.times_fired)
-			moving_atom.experience_pressure_difference(pressure_difference, pressure_direction)
-
-/atom/movable
-	///How much delta pressure is needed for us to move
-	var/pressure_resistance = 10
-	var/last_high_pressure_movement_air_cycle = 0
-
-/atom/movable/proc/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0)
-	set waitfor = FALSE
-	if(SEND_SIGNAL(src, COMSIG_ATOM_PRE_PRESSURE_PUSH) & COMSIG_ATOM_BLOCKS_PRESSURE)
-		return
-	var/const/PROBABILITY_OFFSET = 25
-	var/const/PROBABILITY_BASE_PRECENT = 75
-	var/max_force = sqrt(pressure_difference) * (MOVE_FORCE_DEFAULT / 5)
-	var/move_prob = 100
-	if (pressure_resistance > 0)
-		move_prob = (pressure_difference / pressure_resistance * PROBABILITY_BASE_PRECENT) - PROBABILITY_OFFSET
-	move_prob += pressure_resistance_prob_delta
-	if (move_prob > PROBABILITY_OFFSET && prob(move_prob) && (move_resist != INFINITY) && (!anchored && (max_force >= (move_resist * MOVE_FORCE_PUSH_RATIO))) || (anchored && (max_force >= (move_resist * MOVE_FORCE_FORCEPUSH_RATIO))))
-		step(src, direction)
-		last_high_pressure_movement_air_cycle = SSair.times_fired
-
-///////////////////////////EXCITED GROUPS/////////////////////////////
-
-/datum/excited_group
-	///Stores a reference to the turfs we are controlling
-	var/list/turf_list = list()
-	///If this is over EXCITED_GROUP_BREAKDOWN_CYCLES we call self_breakdown()
-	var/breakdown_cooldown = 0
-	///If this is over EXCITED_GROUP_DISMANTLE_CYCLES we call dismantle()
-	var/dismantle_cooldown = 0
-	///Used for debug to show the excited groups active and their turfs
-	var/should_display = FALSE
-	///Id of the index color of the displayed group
-	var/display_id = 0
-	///Wrapping loop of the index colors
-	var/static/wrapping_id = 0
-
-/datum/excited_group/New()
-	SSair.excited_groups += src
-
-/datum/excited_group/proc/add_turf(turf/open/target_turf)
-	turf_list += target_turf
-	target_turf.excited_group = src
-	dismantle_cooldown = 0
-	if(should_display || SSair.display_all_groups)
-		display_turf(target_turf)
-
-/datum/excited_group/proc/merge_groups(datum/excited_group/target_group)
-	if(turf_list.len > target_group.turf_list.len)
-		SSair.excited_groups -= target_group
-		for(var/turf/open/group_member as anything in target_group.turf_list)
-			group_member.excited_group = src
-			turf_list += group_member
-		should_display = target_group.should_display | should_display
-		if(should_display || SSair.display_all_groups)
-			target_group.hide_turfs()
-			display_turfs()
-		breakdown_cooldown = min(breakdown_cooldown, target_group.breakdown_cooldown) //Take the smaller of the two options
-		dismantle_cooldown = 0
-	else
-		SSair.excited_groups -= src
-		for(var/turf/open/group_member as anything in turf_list)
-			group_member.excited_group = target_group
-			target_group.turf_list += group_member
-		target_group.should_display = target_group.should_display | should_display
-		if(target_group.should_display || SSair.display_all_groups)
-			hide_turfs()
-			target_group.display_turfs()
-		target_group.breakdown_cooldown = min(breakdown_cooldown, target_group.breakdown_cooldown)
-		target_group.dismantle_cooldown = 0
-
-/datum/excited_group/proc/reset_cooldowns()
-	breakdown_cooldown = 0
-	dismantle_cooldown = 0
-
-/datum/excited_group/proc/self_breakdown(roundstart = FALSE, poke_turfs = FALSE)
-	var/datum/gas_mixture/shared_mix = new
-
-	//make local for sanic speed
-	var/list/shared_gases = shared_mix.gases
-	var/list/turf_list = src.turf_list
-	var/turflen = turf_list.len
-	var/imumutable_in_group = FALSE
-	var/energy = 0
-	var/heat_cap = 0
-
-	for(var/turf/open/group_member as anything in turf_list)
-		//Cache?
-		var/datum/gas_mixture/turf/mix = group_member.air
-		if (roundstart && istype(group_member.air, /datum/gas_mixture/immutable))
-			imumutable_in_group = TRUE
-			shared_mix.copyFrom(group_member.air) //This had better be immutable young man
-			shared_gases = shared_mix.gases //update the cache
-			break
-		//"borrowing" this code from merge(), I need to play with the temp portion. Lets expand it out
-		//temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
-		var/capacity = mix.getHeatCapacity()
-		energy += mix.temperature * capacity
-		heat_cap += capacity
-
-		var/list/giver_gases = mix.gases
-		for(var/giver_id in giver_gases)
-			ASSERT_GAS(giver_id, shared_mix)
-			shared_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES]
-
-	if(!imumutable_in_group)
-		shared_mix.temperature = energy / heat_cap
-		for(var/id in shared_gases)
-			shared_gases[id][MOLES] /= turflen
-		shared_mix.garbage_collect()
-
-	for(var/turf/open/group_member as anything in turf_list)
-		if(group_member.planetary_atmos) //We do this as a hack to try and minimize unneeded excited group spread over planetary turfs
-			group_member.air.copyFrom(SSair.planetary[group_member.initial_gas]) //Comes with a cost of "slower" drains, but it's worth it
-		else
-			group_member.air.copyFrom(shared_mix) //Otherwise just set the mix to a copy of our equalized mix
-		group_member.update_visuals()
-		if(poke_turfs) //Because we only activate all these once every breakdown, in event of lag due to this code and slow space + vent things, increase the wait time for breakdowns
-			SSair.add_to_active(group_member)
-			group_member.significant_share_ticker = EXCITED_GROUP_DISMANTLE_CYCLES //Max out the ticker, if they don't share next tick, nuke em
-
-	breakdown_cooldown = 0
-
-///Dismantles the excited group, puts allll the turfs to sleep
-/datum/excited_group/proc/dismantle()
-	for(var/turf/open/current_turf as anything in turf_list)
-		current_turf.excited = FALSE
-		current_turf.significant_share_ticker = 0
-		SSair.active_turfs -= current_turf
-		#ifdef VISUALIZE_ACTIVE_TURFS //Use this when you want details about how the turfs are moving, display_all_groups should work for normal operation
-		current_turf.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_VIBRANT_LIME)
-		#endif
-	garbage_collect()
-
-//Breaks down the excited group, this doesn't sleep the turfs mind, just removes them from the group
-/datum/excited_group/proc/garbage_collect()
-	if(display_id) //If we ever did make those changes
-		hide_turfs()
-	for(var/turf/open/current_turf as anything in turf_list)
-		current_turf.excited_group = null
-	turf_list.Cut()
-	SSair.excited_groups -= src
-	if(SSair.currentpart == SSAIR_EXCITEDGROUPS)
-		SSair.currentrun -= src
-
-/datum/excited_group/proc/display_turfs()
-	if(display_id == 0) //Hasn't been shown before
-		wrapping_id = wrapping_id % GLOB.colored_turfs.len
-		wrapping_id++ //We do this after because lists index at 1
-		display_id = wrapping_id
-	for(var/thing in turf_list)
-		var/turf/display = thing
-		display.vis_contents += GLOB.colored_turfs[display_id]
-
-/datum/excited_group/proc/hide_turfs()
-	for(var/thing in turf_list)
-		var/turf/display = thing
-		display.vis_contents -= GLOB.colored_turfs[display_id]
-	display_id = 0
-
-/datum/excited_group/proc/display_turf(turf/thing)
-	if(display_id == 0) //Hasn't been shown before
-		wrapping_id = wrapping_id % GLOB.colored_turfs.len
-		wrapping_id++ //We do this after because lists index at 1
-		display_id = wrapping_id
-	thing.vis_contents += GLOB.colored_turfs[display_id]
-
-////////////////////////SUPERCONDUCTIVITY/////////////////////////////
-
-/**
-ALLLLLLLLLLLLLLLLLLLLRIGHT HERE WE GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
-
-Read the code for more details, but first, a brief concept discussion/area
-
-Our goal here is to "model" heat moving through solid objects, so walls, windows, and sometimes doors.
-We do this by heating up the floor itself with the heat of the gasmix ontop of it, this is what the coeffs are for here, they slow that movement
-Then we go through the process below.
-
-If an active turf is fitting, we add it to processing, conduct with any covered tiles, (read windows and sometimes walls)
-Then we space some of our heat, and think about if we should stop conducting.
-**/
-
-/turf/proc/conductivity_directions()
-	if(archived_cycle < SSair.times_fired)
-		archive()
-	return ALL_CARDINALS
-
-///Returns a set of directions that we should be conducting in, NOTE, atmos_supeconductivity is ACTUALLY inversed, don't worrry about it
-/turf/open/conductivity_directions()
-	if(blocks_air)
-		return ..()
-	for(var/direction in GLOB.cardinals)
-		var/turf/checked_turf = get_step(src, direction)
-		if(!(checked_turf in atmos_adjacent_turfs) && !(atmos_supeconductivity & direction))
-			. |= direction
-
-///These two procs are a bit of a web, I belive in you
-/turf/proc/neighbor_conduct_with_src(turf/open/other)
-	if(!other.blocks_air) //Solid but neighbor is open
-		other.temperature_share_open_to_solid(src)
-	else //Both tiles are solid
-		other.share_temperature_mutual_solid(src, thermal_conductivity)
-	temperature_expose(null, temperature)
-
-/turf/open/neighbor_conduct_with_src(turf/other)
-	if(blocks_air)
-		return ..()
-
-	if(!other.blocks_air) //Both tiles are open
-		var/turf/open/open_other = other
-		open_other.air.temperature_share(air, WINDOW_HEAT_TRANSFER_COEFFICIENT)
-	else //Open but neighbor is solid
-		temperature_share_open_to_solid(other)
-	SSair.add_to_active(src)
-
-/turf/proc/super_conduct()
-	var/conductivity_directions = conductivity_directions()
-
-	if(conductivity_directions)
-		//Conduct with tiles around me
-		for(var/direction in GLOB.cardinals)
-			if(!(conductivity_directions & direction))
-				continue
-			var/turf/neighbor = get_step(src, direction)
-
-			if(!neighbor.thermal_conductivity)
-				continue
-
-			if(neighbor.archived_cycle < SSair.times_fired)
-				neighbor.archive()
-
-			neighbor.neighbor_conduct_with_src(src)
-
-			neighbor.consider_superconductivity()
-
-	radiate_to_spess()
-
-	finish_superconduction()
-
-/turf/proc/finish_superconduction(temp = temperature)
-	//Make sure still hot enough to continue conducting heat
-	if(temp < MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION)
-		SSair.active_super_conductivity -= src
-		return FALSE
-
-/turf/open/finish_superconduction()
-	//Conduct with air on my tile if I have it
-	if(!blocks_air)
-		temperature = air.temperature_share(null, thermal_conductivity, temperature, heat_capacity)
-	..((blocks_air ? temperature : air.temperature))
-
-///Should we attempt to superconduct?
-/turf/proc/consider_superconductivity(starting)
-	if(!thermal_conductivity)
-		return FALSE
-
-	SSair.active_super_conductivity |= src
-	return TRUE
-
-/turf/open/consider_superconductivity(starting)
-	if(air.temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION))
-		return FALSE
-	if(air.getHeatCapacity() < M_CELL_WITH_RATIO) // Was: MOLES_CELLSTANDARD*0.1*0.05 Since there are no variables here we can make this a constant.
-		return FALSE
-	return ..()
-
-/turf/closed/consider_superconductivity(starting)
-	if(temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION))
-		return FALSE
-	return ..()
-
-/turf/proc/radiate_to_spess() //Radiate excess tile heat to space
-	if(temperature <= T0C) //Considering 0 degC as te break even point for radiation in and out
-		return
-	var/delta_temperature = (temperature_archived - TCMB) //hardcoded space temperature
-	if(heat_capacity <= 0 || abs(delta_temperature) <= MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		return
-	var/heat = thermal_conductivity * delta_temperature * \
-		(heat_capacity * HEAT_CAPACITY_VACUUM / (heat_capacity + HEAT_CAPACITY_VACUUM))
-	temperature -= heat/heat_capacity
-
-/turf/open/proc/temperature_share_open_to_solid(turf/sharer)
-	sharer.temperature = air.temperature_share(null, sharer.thermal_conductivity, sharer.temperature, sharer.heat_capacity)
-
-/turf/proc/share_temperature_mutual_solid(turf/sharer, conduction_coefficient) //This is all just heat sharing, don't get freaked out
-	var/delta_temperature = (temperature_archived - sharer.temperature_archived)
-	if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER && heat_capacity && sharer.heat_capacity)
-		var/heat = conduction_coefficient * delta_temperature * \
-			(heat_capacity * sharer.heat_capacity / (heat_capacity + sharer.heat_capacity)) //The larger the combined capacity the less is shared
-		temperature -= heat / heat_capacity //The higher your own heat cap the less heat you get from this arrangement
-		sharer.temperature += heat / sharer.heat_capacity
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
deleted file mode 100644
index 45ddb2dd398..00000000000
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ /dev/null
@@ -1,726 +0,0 @@
-/*
-What are the archived variables for?
-Calculations are done using the archived variables with the results merged into the regular variables.
-This prevents race conditions that arise based on the order of tile processing.
-*/
-
-#define QUANTIZE(variable) (round((variable), (MOLAR_ACCURACY)))
-GLOBAL_LIST_INIT(meta_gas_info, meta_gas_list()) //see ATMOSPHERICS/gas_types.dm
-GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
-
-/proc/init_gaslist_cache()
-	var/list/gases = list()
-	for(var/id in GLOB.meta_gas_info)
-		var/list/cached_gas = new(3)
-
-		gases[id] = cached_gas
-
-		cached_gas[MOLES] = 0
-		cached_gas[ARCHIVE] = 0
-		cached_gas[GAS_META] = GLOB.meta_gas_info[id]
-	return gases
-
-/datum/gas_mixture
-	var/list/gases
-	var/temperature = 0 //kelvins
-	var/tmp/temperature_archived = 0
-	var/volume = CELL_VOLUME //liters
-	var/last_share = 0
-	/// Tells us what reactions have happened in our gasmix. Assoc list of reaction - moles reacted pair.
-	var/list/reaction_results
-	/// Whether to call garbage_collect() on the sharer during shares, used for immutable mixtures
-	var/gc_share = FALSE
-
-/datum/gas_mixture/New(volume)
-	gases = new
-	if (!isnull(volume))
-		src.volume = volume
-	reaction_results = new
-
-//listmos procs
-//use the macros in performance intensive areas. for their definitions, refer to code/__DEFINES/atmospherics.dm
-
-///assert_gas(gas_id) - used to guarantee that the gas list for this id exists in gas_mixture.gases.
-///Must be used before adding to a gas. May be used before reading from a gas.
-/datum/gas_mixture/proc/assert_gas(gas_id)
-	ASSERT_GAS(gas_id, src)
-
-///assert_gases(args) - shorthand for calling ASSERT_GAS() once for each gas type.
-/datum/gas_mixture/proc/assert_gases(...)
-	for(var/id in args)
-		ASSERT_GAS(id, src)
-
-///add_gas(gas_id) - similar to assert_gas(), but does not check for an existing gas list for this id. This can clobber existing gases.
-///Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas().
-/datum/gas_mixture/proc/add_gas(gas_id)
-	ADD_GAS(gas_id, gases)
-
-///add_gases(args) - shorthand for calling add_gas() once for each gas_type.
-/datum/gas_mixture/proc/add_gases(...)
-	var/cached_gases = gases
-	for(var/id in args)
-		ADD_GAS(id, cached_gases)
-
-///garbage_collect() - removes any gas list which is empty.
-///If called with a list as an argument, only removes gas lists with IDs from that list.
-///Must be used after subtracting from a gas. Must be used after assert_gas()
-///if assert_gas() was called only to read from the gas.
-///By removing empty gases, processing speed is increased.
-/datum/gas_mixture/proc/garbage_collect(list/tocheck)
-	var/list/cached_gases = gases
-	for(var/id in (tocheck || cached_gases))
-		if(QUANTIZE(cached_gases[id][MOLES]) <= 0)
-			cached_gases -= id
-
-//PV = nRT
-
-///joules per kelvin
-/datum/gas_mixture/proc/getHeatCapacity(data = MOLES)
-	var/list/cached_gases = gases
-	. = 0
-	for(var/id in cached_gases)
-		var/gas_data = cached_gases[id]
-		. += gas_data[data] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT]
-
-/// Same as above except vacuums return HEAT_CAPACITY_VACUUM
-/datum/gas_mixture/turf/getHeatCapacity(data = MOLES)
-	var/list/cached_gases = gases
-	. = 0
-	for(var/id in cached_gases)
-		var/gas_data = cached_gases[id]
-		. += gas_data[data] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT]
-	if(!.)
-		. += HEAT_CAPACITY_VACUUM //we want vacuums in turfs to have the same heat capacity as space
-
-/// Calculate moles
-/datum/gas_mixture/proc/get_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
-/datum/gas_mixture/proc/hasGas(gas_id, amount=0)
-	ASSERT_GAS(gas_id, src)
-	var/is_there_gas = amount < gases[gas_id][MOLES]
-	garbage_collect()
-	return is_there_gas
-
-/// Calculate pressure in kilopascals
-/datum/gas_mixture/proc/returnPressure()
-	if(volume) // to prevent division by zero
-		var/cached_gases = gases
-		TOTAL_MOLES(cached_gases, .)
-		. *= R_IDEAL_GAS_EQUATION * temperature / volume
-		return
-	return 0
-
-/// Calculate temperature in kelvins
-/datum/gas_mixture/proc/get_temperature()
-	return temperature
-
-/// Calculate volume in liters
-/datum/gas_mixture/proc/get_volume()
-	return max(0, volume)
-
-/// Gets the gas visuals for everything in this mixture
-/datum/gas_mixture/proc/returnVisuals()
-	var/list/output
-	GAS_OVERLAYS(gases, output)
-	return output
-
-/// Calculate thermal energy in joules
-/datum/gas_mixture/proc/thermal_energy()
-	return THERMAL_ENERGY(src) //see code/__DEFINES/atmospherics.dm; use the define in performance critical areas
-
-///Update archived versions of variables. Returns: 1 in all cases
-/datum/gas_mixture/proc/archive()
-	var/list/cached_gases = gases
-
-	temperature_archived = temperature
-	for(var/id in cached_gases)
-		cached_gases[id][ARCHIVE] = cached_gases[id][MOLES]
-
-	return TRUE
-
-///Merges all air from giver into self. Deletes giver. Returns: 1 if we are mutable, 0 otherwise
-/datum/gas_mixture/proc/merge(datum/gas_mixture/giver)
-	if(!giver)
-		return FALSE
-
-	//heat transfer
-	if(abs(temperature - giver.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		var/self_heat_capacity = getHeatCapacity()
-		var/giver_heat_capacity = giver.getHeatCapacity()
-		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
-		if(combined_heat_capacity)
-			temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
-
-	var/list/cached_gases = gases //accessing datum vars is slower than proc vars
-	var/list/giver_gases = giver.gases
-	//gas transfer
-	for(var/giver_id in giver_gases)
-		ASSERT_GAS(giver_id, src)
-		cached_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES]
-
-	SEND_SIGNAL(src, COMSIG_GASMIX_MERGED)
-	return TRUE
-
-///Proportionally removes amount of gas from the gas_mixture.
-///Returns: gas_mixture with the gases removed
-/datum/gas_mixture/proc/remove(amount)
-	var/sum
-	var/list/cached_gases = gases
-	TOTAL_MOLES(cached_gases, sum)
-	amount = min(amount, sum) //Can not take more air than tile has!
-	if(amount <= 0)
-		return null
-	var/ratio = amount / sum
-	var/datum/gas_mixture/removed = new type
-	var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
-
-	removed.temperature = temperature
-	for(var/id in cached_gases)
-		ADD_GAS(id, removed.gases)
-		removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES] * ratio)
-		cached_gases[id][MOLES] -= removed_gases[id][MOLES]
-	garbage_collect()
-
-	SEND_SIGNAL(src, COMSIG_GASMIX_REMOVED)
-	return removed
-
-///Proportionally removes amount of gas from the gas_mixture.
-///Returns: gas_mixture with the gases removed
-/datum/gas_mixture/proc/removeRatio(ratio)
-	if(ratio <= 0)
-		var/datum/gas_mixture/removed = new(volume)
-		return removed
-	ratio = min(ratio, 1)
-
-	var/list/cached_gases = gases
-	var/datum/gas_mixture/removed = new type
-	var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
-
-	removed.temperature = temperature
-	for(var/id in cached_gases)
-		ADD_GAS(id, removed.gases)
-		removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES] * ratio)
-		cached_gases[id][MOLES] -= removed_gases[id][MOLES]
-
-	garbage_collect()
-
-	SEND_SIGNAL(src, COMSIG_GASMIX_REMOVED)
-	return removed
-
-///Removes an amount of a specific gas from the gas_mixture.
-///Returns: gas_mixture with the gas removed
-/datum/gas_mixture/proc/remove_specific(gas_id, amount)
-	var/list/cached_gases = gases
-	amount = min(amount, cached_gases[gas_id][MOLES])
-	if(amount <= 0)
-		return null
-	var/datum/gas_mixture/removed = new type
-	var/list/removed_gases = removed.gases
-	removed.temperature = temperature
-	ADD_GAS(gas_id, removed.gases)
-	removed_gases[gas_id][MOLES] = amount
-	cached_gases[gas_id][MOLES] -= amount
-
-	garbage_collect(list(gas_id))
-	return removed
-
-/datum/gas_mixture/proc/remove_specific_ratio(gas_id, ratio)
-	if(ratio <= 0)
-		return null
-	ratio = min(ratio, 1)
-
-	var/list/cached_gases = gases
-	var/datum/gas_mixture/removed = new type
-	var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
-
-	removed.temperature = temperature
-	ADD_GAS(gas_id, removed.gases)
-	removed_gases[gas_id][MOLES] = QUANTIZE(cached_gases[gas_id][MOLES] * ratio)
-	cached_gases[gas_id][MOLES] -= removed_gases[gas_id][MOLES]
-
-	garbage_collect(list(gas_id))
-
-	return removed
-
-///Distributes the contents of two mixes equally between themselves
-//Returns: bool indicating whether gases moved between the two mixes
-/datum/gas_mixture/proc/equalize(datum/gas_mixture/other)
-	. = FALSE
-	if(abs(get_temperature() - other.get_temperature()) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
-		. = TRUE
-		var/self_heat_cap = getHeatCapacity()
-		var/other_heat_cap = other.getHeatCapacity()
-		var/new_temp = (temperature * self_heat_cap + other.temperature * other_heat_cap) / (self_heat_cap + other_heat_cap)
-		temperature = new_temp
-		other.temperature = new_temp
-
-	var/min_p_delta = 0.1
-	var/total_volume = volume + other.volume
-	var/list/gas_list = gases | other.gases
-	for(var/gas_id in gas_list)
-		assert_gas(gas_id)
-		other.assert_gas(gas_id)
-		//math is under the assumption temperatures are equal
-		if(abs(gases[gas_id][MOLES] / volume - other.gases[gas_id][MOLES] / other.volume) > min_p_delta / (R_IDEAL_GAS_EQUATION * temperature))
-			. = TRUE
-			var/total_moles = gases[gas_id][MOLES] + other.gases[gas_id][MOLES]
-			gases[gas_id][MOLES] = total_moles * (volume/total_volume)
-			other.gases[gas_id][MOLES] = total_moles * (other.volume/total_volume)
-	garbage_collect()
-	other.garbage_collect()
-
-///Creates new, identical gas mixture
-///Returns: duplicate gas mixture
-/datum/gas_mixture/proc/copy()
-	var/list/cached_gases = gases
-	var/datum/gas_mixture/copy = new type
-	var/list/copy_gases = copy.gases
-
-	copy.temperature = temperature
-	for(var/id in cached_gases)
-		ADD_GAS(id, copy.gases)
-		copy_gases[id][MOLES] = cached_gases[id][MOLES]
-
-	return copy
-
-///Copies variables from sample, moles multiplicated by partial
-///Returns: 1 if we are mutable, 0 otherwise
-/datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample, partial = 1)
-	var/list/cached_gases = gases //accessing datum vars is slower than proc vars
-	var/list/sample_gases = sample.gases
-
-	//remove all gases not in the sample
-	cached_gases &= sample_gases
-
-	temperature = sample.temperature
-	for(var/id in sample_gases)
-		ASSERT_GAS(id,src)
-		cached_gases[id][MOLES] = sample_gases[id][MOLES] * partial
-
-	return 1
-
-///Copies all gas info from the turf into the gas list along with temperature
-///Returns: TRUE if we are mutable, FALSE otherwise
-/datum/gas_mixture/proc/copy_from_turf(turf/model)
-	parse_gas_string(model.initial_gas)
-
-	//acounts for changes in temperature
-	var/turf/model_parent = model.parent_type
-	if(model.temperature != initial(model.temperature) || model.temperature != initial(model_parent.temperature))
-		temperature = model.temperature
-
-	return TRUE
-
-///Copies variables from a particularly formatted string.
-///Returns: 1 if we are mutable, 0 otherwise
-/datum/gas_mixture/proc/parse_gas_string(gas_string)
-	gas_string = SSair.preprocess_gas_string(gas_string)
-
-	var/list/gases = src.gases
-	var/list/gas = params2list(gas_string)
-	if(gas["TEMP"])
-		temperature = text2num(gas["TEMP"])
-		temperature_archived = temperature
-		gas -= "TEMP"
-	else // if we do not have a temp in the new gas mix lets assume room temp.
-		temperature = T20C
-	gases.Cut()
-	for(var/id in gas)
-		var/path = id
-		if(!ispath(path))
-			path = gas_id2path(path) //a lot of these strings can't have embedded expressions (especially for mappers), so support for IDs needs to stick around
-		ADD_GAS(path, gases)
-		gases[path][MOLES] = text2num(gas[id])
-	return 1
-
-/// Performs air sharing calculations between two gas_mixtures
-/// share() is communitive, which means A.share(B) needs to be the same as B.share(A)
-/// If we don't retain this, we will get negative moles. Don't do it
-/// Returns: amount of gas exchanged (+ if sharer received)
-/datum/gas_mixture/proc/share(datum/gas_mixture/sharer, our_coeff, sharer_coeff)
-	var/list/cached_gases = gases
-	var/list/sharer_gases = sharer.gases
-
-	var/list/only_in_sharer = sharer_gases - cached_gases
-	var/list/only_in_cached = cached_gases - sharer_gases
-
-	var/temperature_delta = temperature_archived - sharer.temperature_archived
-	var/abs_temperature_delta = abs(temperature_delta)
-
-	var/old_self_heat_capacity = 0
-	var/old_sharer_heat_capacity = 0
-	if(abs_temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		old_self_heat_capacity = getHeatCapacity()
-		old_sharer_heat_capacity = sharer.getHeatCapacity()
-
-	var/heat_capacity_self_to_sharer = 0 //heat capacity of the moles transferred from us to the sharer
-	var/heat_capacity_sharer_to_self = 0 //heat capacity of the moles transferred from the sharer to us
-
-	var/moved_moles = 0
-	var/abs_moved_moles = 0
-
-	//GAS TRANSFER
-
-	//Prep
-	for(var/id in only_in_sharer) //create gases not in our cache
-		ADD_GAS(id, cached_gases)
-	for(var/id in only_in_cached) //create gases not in the sharing mix
-		ADD_GAS(id, sharer_gases)
-
-	for(var/id in cached_gases) //transfer gases
-		var/gas = cached_gases[id]
-		var/sharergas = sharer_gases[id]
-		var/delta = QUANTIZE(gas[ARCHIVE] - sharergas[ARCHIVE]) //the amount of gas that gets moved between the mixtures
-
-		if(!delta)
-			continue
-
-		// If we have more gas then they do, gas is moving from us to them
-		// This means we want to scale it by our coeff. Vis versa for their case
-		if(delta > 0)
-			delta = delta * our_coeff
-		else
-			delta = delta * sharer_coeff
-
-		if(abs_temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-			var/gas_heat_capacity = delta * gas[GAS_META][META_GAS_SPECIFIC_HEAT]
-			if(delta > 0)
-				heat_capacity_self_to_sharer += gas_heat_capacity
-			else
-				heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative.
-
-		gas[MOLES] -= delta
-		sharergas[MOLES] += delta
-		moved_moles += delta
-		abs_moved_moles += abs(delta)
-
-	last_share = abs_moved_moles
-
-	//THERMAL ENERGY TRANSFER
-	if(abs_temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer
-		var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self
-
-		//transfer of thermal energy (via changed heat capacity) between self and sharer
-		if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY)
-			temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity
-
-		if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY)
-			sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity
-		//thermal energy of the system (self and sharer) is unchanged
-
-			if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY)
-				if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.1) // <10% change in sharer heat capacity
-					temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT)
-
-	if(length(only_in_sharer + only_in_cached)) //if all gases were present in both mixtures, we know that no gases are 0
-		garbage_collect(only_in_cached) //any gases the sharer had, we are guaranteed to have. gases that it didn't have we are not.
-		sharer.garbage_collect(only_in_sharer) //the reverse is equally true
-	else if (initial(sharer.gc_share))
-		sharer.garbage_collect()
-
-	if(temperature_delta > MINIMUM_TEMPERATURE_TO_MOVE || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
-		var/our_moles
-		TOTAL_MOLES(cached_gases,our_moles)
-		var/their_moles
-		TOTAL_MOLES(sharer_gases,their_moles)
-		return (temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles)) * R_IDEAL_GAS_EQUATION / volume
-
-///Performs temperature sharing calculations (via conduction) between two gas_mixtures assuming only 1 boundary length
-///Returns: new temperature of the sharer
-/datum/gas_mixture/proc/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity)
-	//transfer of thermal energy (via conduction) between self and sharer
-	if(sharer)
-		sharer_temperature = sharer.temperature_archived
-	var/temperature_delta = temperature_archived - sharer_temperature
-	if(abs(temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-		var/self_heat_capacity = getHeatCapacity(ARCHIVE)
-		sharer_heat_capacity = sharer_heat_capacity || sharer.getHeatCapacity(ARCHIVE)
-
-		if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
-			var/heat = conduction_coefficient*temperature_delta* \
-				(self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity))
-
-			temperature = max(temperature - heat/self_heat_capacity, TCMB)
-			sharer_temperature = max(sharer_temperature + heat/sharer_heat_capacity, TCMB)
-			if(sharer)
-				sharer.temperature = sharer_temperature
-				if (initial(sharer.gc_share))
-					sharer.garbage_collect()
-	return sharer_temperature
-	//thermal energy of the system (self and sharer) is unchanged
-
-///Compares sample to self to see if within acceptable ranges that group processing may be enabled
-///Returns: a string indicating what check failed, or "" if check passes
-/datum/gas_mixture/proc/compare(datum/gas_mixture/sample)
-	var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars
-	var/list/cached_gases = gases
-
-	for(var/id in cached_gases | sample_gases) // compare gases from either mixture
-		var/gas_moles = cached_gases[id]
-		gas_moles = gas_moles ? gas_moles[MOLES] : 0
-		var/sample_moles = sample_gases[id]
-		sample_moles = sample_moles ? sample_moles[MOLES] : 0
-		var/delta = abs(gas_moles - sample_moles)
-		if(delta > MINIMUM_MOLES_DELTA_TO_MOVE && \
-			delta > gas_moles * MINIMUM_AIR_RATIO_TO_MOVE)
-			return id
-
-	var/our_moles
-	TOTAL_MOLES(cached_gases, our_moles)
-	if(our_moles > MINIMUM_MOLES_DELTA_TO_MOVE) //Don't consider temp if there's not enough mols
-		var/temp = temperature
-		var/sample_temp = sample.temperature
-
-		var/temperature_delta = abs(temp - sample_temp)
-		if(temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
-			return "temp"
-
-	return ""
-
-///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/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 that makes us care more about order of operations, so be careful
-	var/temp = temperature
-	reaction_loop:
-		for(var/datum/gas_reaction/reaction as anything in reactions)
-
-			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 reqs)
-				if (id == "MIN_TEMP" || id == "MAX_TEMP")
-					continue
-				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(.) //If we changed the mix to any degree
-		garbage_collect()
-		SEND_SIGNAL(src, COMSIG_GASMIX_REACTED)
-
-
-/**
- * Takes the amount of the gas you want to PP as an argument
- * So I don't have to do some hacky switches/defines/magic strings
- * eg:
- * Plas_PP = get_partial_pressure(gas_mixture.plasma)
- * O2_PP = get_partial_pressure(gas_mixture.oxygen)
- * getBreathPartialPressure(gas_pp) --> gas_pp/get_moles()*breath_pp = pp
- * getTrueBreathPressure(pp) --> gas_pp = pp/breath_pp*get_moles()
- *
- * 10/20*5 = 2.5
- * 10 = 2.5/5*20
- */
-
-/datum/gas_mixture/proc/getBreathPartialPressure(gas_pressure)
-	return (gas_pressure * R_IDEAL_GAS_EQUATION * temperature) / BREATH_VOLUME
-///inverse
-/datum/gas_mixture/proc/getTrueBreathPressure(partial_pressure)
-	return (partial_pressure * BREATH_VOLUME) / (R_IDEAL_GAS_EQUATION * temperature)
-
-/**
- * Counts how much pressure will there be if we impart MOLAR_ACCURACY amounts of our gas to the output gasmix.
- * We do all of this without actually transferring it so dont worry about it changing the gasmix.
- * Returns: Resulting pressure (number).
- * Args:
- * - output_air (gasmix).
- */
-/datum/gas_mixture/proc/gas_pressure_minimum_transfer(datum/gas_mixture/output_air)
-	var/resulting_energy = output_air.thermal_energy() + (MOLAR_ACCURACY / get_moles() * thermal_energy())
-	var/resulting_capacity = output_air.getHeatCapacity() + (MOLAR_ACCURACY / get_moles() * getHeatCapacity())
-	return (output_air.get_moles() + MOLAR_ACCURACY) * R_IDEAL_GAS_EQUATION * (resulting_energy / resulting_capacity) / output_air.volume
-
-
-/** Returns the amount of gas to be pumped to a specific container.
- * Args:
- * - output_air. The gas mix we want to pump to.
- * - target_pressure. The target pressure we want.
- * - ignore_temperature. Returns a cheaper form of gas calculation, useful if the temperature difference between the two gasmixes is low or nonexistant.
- */
-/datum/gas_mixture/proc/gas_pressure_calculate(datum/gas_mixture/output_air, target_pressure, ignore_temperature = FALSE)
-	if((get_moles() <= 0) || (temperature <= 0))
-		return FALSE
-
-	var/pressure_delta = 0
-	if((output_air.temperature <= 0) || (output_air.get_moles() <= 0))
-		ignore_temperature = TRUE
-		pressure_delta = target_pressure
-	else
-		pressure_delta = target_pressure - output_air.returnPressure()
-
-	if(pressure_delta < 0.01 || gas_pressure_minimum_transfer(output_air) > target_pressure)
-		return FALSE
-
-	if(ignore_temperature)
-		return (pressure_delta*output_air.volume)/(temperature * R_IDEAL_GAS_EQUATION)
-
-	// Lower and upper bound for the moles we must transfer to reach the pressure. The answer is bound to be here somewhere.
-	var/pv = target_pressure * output_air.volume
-	var/rt_low = R_IDEAL_GAS_EQUATION * max(temperature, output_air.temperature) // Low refers to the resulting mole, this number is actually higher.
-	var/rt_high = R_IDEAL_GAS_EQUATION * min(temperature, output_air.temperature)
-	// These works by assuming our gas has extremely high heat capacity
-	// and the resultant gasmix will hit either the highest or lowest temperature possible.
-	var/lower_limit = max((pv / rt_low) - output_air.get_moles(), 0)
-	var/upper_limit = (pv / rt_high) - output_air.get_moles() // In theory this should never go below zero, the pressure_delta check above should account for this.
-
-	/*
-	 * We have PV=nRT as a nice formula, we can rearrange it into nT = PV/R
-	 * But now both n and T can change, since any incoming moles also change our temperature.
-	 * So we need to unify both our n and T, somehow.
-	 *
-	 * We can rewrite T as (our old thermal energy + incoming thermal energy) divided by (our old heat capacity + incoming heat capacity)
-	 * T = (W1 + n/N2 * W2) / (C1 + n/N2 * C2). C being heat capacity, W being work, N being total moles.
-	 *
-	 * In total we now have our equation be: (N1 + n) * (W1 + n/N2 * W2) / (C1 + n/N2 * C2) = PV/R
-	 * Now you can rearrange this and find out that it's a quadratic equation and pretty much solvable with the formula. Will be a bit messy though.
-	 *
-	 * W2/N2n^2 +
-	 * (N1*W2/N2)n + W1n - ((PV/R)*C2/N2)n +
-	 * (-(PV/R)*C1) + N1W1 = 0
-	 *
-	 * We will represent each of these terms with A, B, and C. A for the n^2 part, B for the n^1 part, and C for the n^0 part.
-	 * We then put this into the famous (-b +/- sqrt(b^2-4ac)) / 2a formula.
-	 *
-	 * Oh, and one more thing. By "our" we mean the gasmix in the argument. We are the incoming one here. We are number 2, target is number 1.
-	 * If all this counting fucks up, we revert first to Newton's approximation, then the old simple formula.
-	 */
-
-	// Our thermal energy and moles
-	var/w2 = thermal_energy()
-	var/n2 = get_moles()
-	var/c2 = getHeatCapacity()
-
-	// Target thermal energy and moles
-	var/w1 = output_air.thermal_energy()
-	var/n1 = output_air.get_moles()
-	var/c1 = output_air.getHeatCapacity()
-
-	/// The PV/R part in our equation.
-	var/pvr = pv / R_IDEAL_GAS_EQUATION
-
-	/// x^2 in the quadratic
-	var/a_value = w2/n2
-	/// x^1 in the quadratic
-	var/b_value = ((n1*w2)/n2) + w1 - (pvr*c2/n2)
-	/// x^0 in the quadratic
-	var/c_value = (-1*pvr*c1) + n1 * w1
-
-	. = gas_pressure_quadratic(a_value, b_value, c_value, lower_limit, upper_limit)
-	if(.)
-		return
-	. = gas_pressure_approximate(a_value, b_value, c_value, lower_limit, upper_limit)
-	if(.)
-		return
-	// Inaccurate and will probably explode but whatever.
-	return (pressure_delta*output_air.volume)/(temperature * R_IDEAL_GAS_EQUATION)
-
-/// Actually tries to solve the quadratic equation.
-/// Do mind that the numbers can get very big and might hit BYOND's single point float limit.
-/datum/gas_mixture/proc/gas_pressure_quadratic(a, b, c, lower_limit, upper_limit)
-	var/solution
-	if(!IS_INF_OR_NAN(a) && !IS_INF_OR_NAN(b) && !IS_INF_OR_NAN(c))
-		solution = max(SolveQuadratic(a, b, c))
-		if((solution > lower_limit) && (solution < upper_limit)) //SolveQuadratic can return nulls so be careful here
-			return solution
-	stack_trace("Failed to solve pressure quadratic equation. A: [a]. B: [b]. C:[c]. Current value = [solution]. Expected lower limit: [lower_limit]. Expected upper limit: [upper_limit].")
-	return FALSE
-
-/// Approximation of the quadratic equation using Newton-Raphson's Method.
-/// We use the slope of an approximate value to get closer to the root of a given equation.
-/datum/gas_mixture/proc/gas_pressure_approximate(a, b, c, lower_limit, upper_limit)
-	var/solution
-	if(!IS_INF_OR_NAN(a) && !IS_INF_OR_NAN(b) && !IS_INF_OR_NAN(c))
-		/// We need to start off at a reasonably good estimate. For very big numbers the amount of moles is most likely small so better start with lower_limit.
-		solution = lower_limit
-		for (var/iteration in 1 to ATMOS_PRESSURE_APPROXIMATION_ITERATIONS)
-			var/diff = (a*solution**2 + b*solution + c) / (2*a*solution + b) // f(sol) / f'(sol)
-			solution -= diff // xn+1 = xn - f(sol) / f'(sol)
-			if(abs(diff) < MOLAR_ACCURACY && (solution > lower_limit) && (solution < upper_limit))
-				return solution
-	stack_trace("Newton's Approximation for pressure failed after [ATMOS_PRESSURE_APPROXIMATION_ITERATIONS] iterations. A: [a]. B: [b]. C:[c]. Current value: [solution]. Expected lower limit: [lower_limit]. Expected upper limit: [upper_limit].")
-	return FALSE
-
-/// Pumps gas from src to output_air. Amount depends on target_pressure
-/datum/gas_mixture/proc/pump_gas_to(datum/gas_mixture/output_air, target_pressure, specific_gas = null)
-	var/temperature_delta = abs(temperature - output_air.temperature)
-	var/datum/gas_mixture/removed
-	var/transfer_moles
-
-	if(specific_gas)
-		// This is necessary because the specific heat capacity of a gas might be different from our gasmix.
-		var/datum/gas_mixture/temporary = remove_specific_ratio(specific_gas, 1)
-		transfer_moles = temporary.gas_pressure_calculate(output_air, target_pressure, temperature_delta <= 5)
-		removed = temporary.remove_specific(specific_gas, transfer_moles)
-		merge(temporary)
-	else
-		transfer_moles = gas_pressure_calculate(output_air, target_pressure, temperature_delta <= 5)
-		removed = remove(transfer_moles)
-
-	if(!removed)
-		return FALSE
-
-	output_air.merge(removed)
-	return TRUE
-
-/// Releases gas from src to output air. This means that it can not transfer air to gas mixture with higher pressure.
-/datum/gas_mixture/proc/release_gas_to(datum/gas_mixture/output_air, target_pressure, rate=1)
-	var/output_starting_pressure = output_air.returnPressure()
-	var/input_starting_pressure = returnPressure()
-
-	//Need at least 10 KPa difference to overcome friction in the mechanism
-	if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10))
-		return FALSE
-	//Can not have a pressure delta that would cause output_pressure > input_pressure
-	target_pressure = output_starting_pressure + min(target_pressure - output_starting_pressure, (input_starting_pressure - output_starting_pressure)/2)
-	var/temperature_delta = abs(temperature - output_air.temperature)
-
-	var/transfer_moles = gas_pressure_calculate(output_air, target_pressure, temperature_delta <= 5)
-
-	//Actually transfer the gas
-	var/datum/gas_mixture/removed = remove(transfer_moles * rate)
-
-	if(!removed)
-		return FALSE
-
-	output_air.merge(removed)
-	return TRUE
diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm
deleted file mode 100644
index d1b97d5338c..00000000000
--- a/code/modules/atmospherics/gasmixtures/gas_types.dm
+++ /dev/null
@@ -1,287 +0,0 @@
-GLOBAL_LIST_INIT(hardcoded_gases, list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, /datum/gas/plasma)) //the main four gases, which were at one time hardcoded
-//Now this is what I call history
-GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, /datum/gas/pluoxium))) //unable to react amongst themselves
-
-/proc/meta_gas_list()
-	. = subtypesof(/datum/gas)
-	for(var/gas_path in .)
-		var/list/gas_info = new(8)
-		var/datum/gas/gas = gas_path
-
-		gas_info[META_GAS_SPECIFIC_HEAT] = initial(gas.specific_heat)
-		gas_info[META_GAS_NAME] = initial(gas.name)
-
-		gas_info[META_GAS_MOLES_VISIBLE] = initial(gas.moles_visible)
-		if(initial(gas.moles_visible) != null)
-			gas_info[META_GAS_OVERLAY] = new /list(TOTAL_VISIBLE_STATES)
-			for(var/i in 1 to TOTAL_VISIBLE_STATES)
-				gas_info[META_GAS_OVERLAY][i] = new /obj/effect/overlay/gas(initial(gas.gas_overlay), log(4, (i+0.4*TOTAL_VISIBLE_STATES) / (0.35*TOTAL_VISIBLE_STATES)) * 255)
-
-		gas_info[META_GAS_FUSION_POWER] = initial(gas.fusion_power)
-		gas_info[META_GAS_DANGER] = initial(gas.dangerous)
-		gas_info[META_GAS_ID] = initial(gas.id)
-		gas_info[META_GAS_DESC] = initial(gas.desc)
-		.[gas_path] = gas_info
-
-/proc/gas_id2path(id)
-	var/list/meta_gas = GLOB.meta_gas_info
-	if(id in meta_gas)
-		return id
-	for(var/path in meta_gas)
-		if(meta_gas[path][META_GAS_ID] == id)
-			return path
-	return ""
-
-/*||||||||||||||/----------\||||||||||||||*\
-||||||||||||||||[GAS DATUMS]||||||||||||||||
-||||||||||||||||\__________/||||||||||||||||
-||||These should never be instantiated. ||||
-||||They exist only to make it easier   ||||
-||||to add a new gas. They are accessed ||||
-||||only by meta_gas_list().            ||||
-\*||||||||||||||||||||||||||||||||||||||||*/
-
-/datum/gas
-	var/id = ""
-	var/specific_heat = 0
-	var/name = ""
-	var/gas_overlay = "" //icon_state in icons/effects/atmospherics.dmi
-	var/moles_visible = null
-	var/dangerous = FALSE //currently used by canisters
-	var/fusion_power = 0 //How much the gas accelerates a fusion reaction
-	var/rarity = 0 // relative rarity compared to other gases, used when setting up the reactions list.
-	var/purchaseable = FALSE
-	var/base_value = 0
-	var/desc
-
-/datum/gas/oxygen
-	id = "o2"
-	specific_heat = 20
-	name = "Oxygen"
-	rarity = 900
-	purchaseable = TRUE
-	base_value = 0.2
-	desc = "The gas most life forms need to be able to survive. Also an oxidizer."
-
-/datum/gas/nitrogen
-	id = "n2"
-	specific_heat = 20
-	name = "Nitrogen"
-	rarity = 1000
-	purchaseable = TRUE
-	base_value = 0.1
-	desc = "A very common gas that used to pad artifical atmospheres to habitable pressure."
-
-/datum/gas/carbon_dioxide //what the fuck is this?
-	id = "co2"
-	specific_heat = 30
-	name = "Carbon Dioxide"
-	dangerous = TRUE
-	rarity = 700
-	purchaseable = TRUE
-	base_value = 0.2
-	desc = "What the fuck is carbon dioxide?"
-
-/datum/gas/plasma
-	id = "plasma"
-	specific_heat = 200
-	name = "Plasma"
-	gas_overlay = "plasma"
-	moles_visible = MOLES_GAS_VISIBLE
-	dangerous = TRUE
-	rarity = 800
-	base_value = 2
-	desc = "A flammable gas with many other curious properties. It's research is one of NT's primary objective."
-
-/datum/gas/water_vapor
-	id = "water_vapor"
-	specific_heat = 40
-	name = "Water Vapor"
-	gas_overlay = "water_vapor"
-	moles_visible = MOLES_GAS_VISIBLE
-	fusion_power = 8
-	rarity = 500
-	purchaseable = TRUE
-	base_value = 0.5
-	desc = "Water, in gas form. Makes things slippery."
-
-/datum/gas/hypernoblium
-	id = "nob"
-	specific_heat = 2000
-	name = "Hyper-noblium"
-	gas_overlay = "freon"
-	moles_visible = MOLES_GAS_VISIBLE
-	dangerous = TRUE
-	fusion_power = 10
-	rarity = 50
-	base_value = 5
-	desc = "The most noble gas of them all. High quantities of hyper-noblium actively prevents reactions from occuring."
-
-/datum/gas/nitrous_oxide
-	id = "n2o"
-	specific_heat = 40
-	name = "Nitrous Oxide"
-	gas_overlay = "nitrous_oxide"
-	moles_visible = MOLES_GAS_VISIBLE * 2
-	fusion_power = 10
-	dangerous = TRUE
-	rarity = 600
-	purchaseable = TRUE
-	base_value = 3
-	desc = "Causes drowsiness, euphoria, and eventually unconsciousness."
-
-/datum/gas/nitrium
-	id = "nitrium"
-	specific_heat = 10
-	name = "Nitrium"
-	fusion_power = 7
-	gas_overlay = "nitrium"
-	moles_visible = MOLES_GAS_VISIBLE
-	dangerous = TRUE
-	rarity = 1
-	base_value = 100
-	desc = "An experimental performance enhancing gas. Nitrium can have amplified effects as more of it gets into your bloodstream."
-
-/datum/gas/tritium
-	id = "tritium"
-	specific_heat = 10
-	name = "Tritium"
-	gas_overlay = "tritium"
-	moles_visible = MOLES_GAS_VISIBLE
-	dangerous = TRUE
-	fusion_power = 5
-	rarity = 300
-	base_value = 5
-	desc = "A highly flammable and radioctive gas."
-
-/datum/gas/bz
-	id = "bz"
-	specific_heat = 20
-	name = "BZ"
-	dangerous = TRUE
-	fusion_power = 8
-	rarity = 400
-	purchaseable = TRUE
-	base_value = 2
-	desc = "A powerful hallucinogenic nerve agent able to induce cognitive damage."
-
-/datum/gas/pluoxium
-	id = "pluox"
-	specific_heat = 80
-	name = "Pluoxium"
-	fusion_power = -10
-	rarity = 200
-	base_value = 5
-	desc = "A gas that could supply even more oxygen to the bloodstream when inhaled, without being an oxidizer."
-
-/datum/gas/miasma
-	id = "miasma"
-	specific_heat = 20
-	name = "Miasma"
-	dangerous = TRUE
-	gas_overlay = "miasma"
-	moles_visible = MOLES_GAS_VISIBLE * 60
-	rarity = 250
-	base_value = 2
-	desc = "Not necessarily a gas, miasma refers to biological pollutants found in the atmosphere."
-
-/datum/gas/freon
-	id = "freon"
-	specific_heat = 600
-	name = "Freon"
-	dangerous = TRUE
-	gas_overlay = "freon"
-	moles_visible = MOLES_GAS_VISIBLE *30
-	fusion_power = -5
-	rarity = 10
-	base_value = 15
-	desc = "A coolant gas. Mainly used for it's endothermic reaction with oxygen."
-
-/datum/gas/hydrogen
-	id = "hydrogen"
-	specific_heat = 15
-	name = "Hydrogen"
-	dangerous = TRUE
-	fusion_power = 2
-	rarity = 600
-	base_value = 1
-	desc = "A highly flammable gas."
-
-/datum/gas/healium
-	id = "healium"
-	specific_heat = 10
-	name = "Healium"
-	dangerous = TRUE
-	gas_overlay = "healium"
-	moles_visible = MOLES_GAS_VISIBLE
-	rarity = 300
-	base_value = 19
-	desc = "Causes deep, regenerative sleep."
-
-/datum/gas/proto_nitrate
-	id = "proto_nitrate"
-	specific_heat = 30
-	name = "Proto Nitrate"
-	dangerous = TRUE
-	gas_overlay = "proto_nitrate"
-	moles_visible = MOLES_GAS_VISIBLE
-	rarity = 200
-	base_value = 5
-	desc = "A very volatile gas that reacts differently with various gases."
-
-/datum/gas/zauker
-	id = "zauker"
-	specific_heat = 350
-	name = "Zauker"
-	dangerous = TRUE
-	gas_overlay = "zauker"
-	moles_visible = MOLES_GAS_VISIBLE
-	rarity = 1
-	base_value = 100
-	desc = "A highly toxic gas, it's production is highly regulated on top of being difficult. It also breaks down when in contact with nitrogen."
-
-/datum/gas/halon
-	id = "halon"
-	specific_heat = 175
-	name = "Halon"
-	dangerous = TRUE
-	gas_overlay = "halon"
-	moles_visible = MOLES_GAS_VISIBLE
-	rarity = 300
-	base_value = 9
-	desc = "A potent fire supressant. Removes oxygen from high temperature fires and cools down the area"
-
-/datum/gas/helium
-	id = "helium"
-	specific_heat = 15
-	name = "Helium"
-	fusion_power = 7
-	rarity = 50
-	base_value = 6
-	desc = "A very inert gas produced by the fusion of hydrogen and it's derivatives."
-
-/datum/gas/antinoblium
-	id = "antinoblium"
-	specific_heat = 1
-	name = "Antinoblium"
-	dangerous = TRUE
-	gas_overlay = "antinoblium"
-	moles_visible = MOLES_GAS_VISIBLE
-	fusion_power = 20
-	rarity = 1
-	base_value = 10
-	desc = "We still don't know what it does, but it sells for a lot."
-
-/obj/effect/overlay/gas
-	icon = 'icons/effects/atmospherics.dmi'
-	mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-	anchored = TRUE  // should only appear in vis_contents, but to be safe
-	layer = FLY_LAYER
-	plane = ABOVE_GAME_PLANE
-	appearance_flags = TILE_BOUND
-	vis_flags = NONE
-
-/obj/effect/overlay/gas/New(state, alph)
-	. = ..()
-	icon_state = state
-	alpha = alph
diff --git a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm
deleted file mode 100644
index c1db471f3a3..00000000000
--- a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm
+++ /dev/null
@@ -1,96 +0,0 @@
-//"immutable" gas mixture used for immutable calculations
-//it can be changed, but any changes will ultimately be undone before they can have any effect
-
-/datum/gas_mixture/immutable
-	var/initial_temperature
-	gc_share = TRUE
-
-/datum/gas_mixture/immutable/New()
-	..()
-	garbage_collect()
-
-/datum/gas_mixture/immutable/garbage_collect()
-	temperature = initial_temperature
-	temperature_archived = initial_temperature
-	gases.Cut()
-
-/datum/gas_mixture/immutable/archive()
-	return TRUE //nothing changes, so we do nothing and the archive is successful
-
-/datum/gas_mixture/immutable/merge()
-	return FALSE //we're immutable.
-
-/datum/gas_mixture/immutable/share(datum/gas_mixture/sharer, our_coeff, sharer_coeff)
-	. = ..()
-	sharer.temperature = initial_temperature
-	garbage_collect()
-
-/datum/gas_mixture/immutable/react()
-	return FALSE //we're immutable.
-
-/datum/gas_mixture/immutable/copy()
-	return new type //we're immutable, so we can just return a new instance.
-
-/datum/gas_mixture/immutable/copyFrom()
-	return FALSE //we're immutable.
-
-/datum/gas_mixture/immutable/copy_from_turf()
-	return FALSE //we're immutable.
-
-/datum/gas_mixture/immutable/parse_gas_string()
-	return FALSE //we're immutable.
-
-/datum/gas_mixture/immutable/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity)
-	. = ..()
-	temperature = initial_temperature
-
-//used by space tiles
-/datum/gas_mixture/immutable/space
-	initial_temperature = TCMB
-
-/datum/gas_mixture/immutable/space/getHeatCapacity()
-	return HEAT_CAPACITY_VACUUM
-
-/datum/gas_mixture/immutable/space/remove()
-	return copy() //we're always empty, so we can just return a copy.
-
-/datum/gas_mixture/immutable/space/removeRatio()
-	return copy() //we're always empty, so we can just return a copy.
-
-//planet side stuff
-/datum/gas_mixture/immutable/planetary
-	var/list/initial_gas = list()
-
-/datum/gas_mixture/immutable/planetary/garbage_collect()
-	..()
-	gases.Cut()
-	for(var/id in initial_gas)
-		ADD_GAS(id, gases)
-		gases[id][MOLES] = initial_gas[id][MOLES]
-		gases[id][ARCHIVE] = initial_gas[id][ARCHIVE]
-
-/datum/gas_mixture/immutable/planetary/proc/parse_string_immutable(gas_string) //I know I know, I need this tho
-	gas_string = SSair.preprocess_gas_string(gas_string)
-
-	var/list/mix = initial_gas
-	var/list/gas = params2list(gas_string)
-	if(gas["TEMP"])
-		initial_temperature = text2num(gas["TEMP"])
-		temperature_archived = initial_temperature
-		temperature = initial_temperature
-		gas -= "TEMP"
-	mix.Cut()
-	for(var/id in gas)
-		var/path = id
-		if(!ispath(path))
-			path = gas_id2path(path) //a lot of these strings can't have embedded expressions (especially for mappers), so support for IDs needs to stick around
-		ADD_GAS(path, mix)
-		mix[path][MOLES] = text2num(gas[id])
-		mix[path][ARCHIVE] = mix[path][MOLES]
-
-	for(var/id in mix)
-		ADD_GAS(id, gases)
-		gases[id][MOLES] = mix[id][MOLES]
-		gases[id][ARCHIVE] = mix[id][MOLES]
-
-
diff --git a/code/modules/atmospherics/gasmixtures/reaction_factors.dm b/code/modules/atmospherics/gasmixtures/reaction_factors.dm
deleted file mode 100644
index 2d04de63e3c..00000000000
--- a/code/modules/atmospherics/gasmixtures/reaction_factors.dm
+++ /dev/null
@@ -1,216 +0,0 @@
-/datum/gas_reaction/water_vapor/init_factors()
-	factor = list(
-		/datum/gas/water_vapor = "Condensation will consume [MOLES_GAS_VISIBLE] moles, freezing will not consume any. Both needs a minimum of [MOLES_GAS_VISIBLE] moles to occur.",
-		"Temperature" = "Freezes a turf at [WATER_VAPOR_DEPOSITION_POINT] Kelvins or below, wets it at [WATER_VAPOR_CONDENSATION_POINT] Kelvins or below.",
-		"Location" = "Can only happen on turfs.",
-	)
-
-/datum/gas_reaction/miaster/init_factors()
-	factor = list(
-		/datum/gas/miasma = "Miasma is consumed at 1 reaction rate.",
-		/datum/gas/oxygen = "Oxygen is produced at 1 reaction rate.",
-		"Temperature" = "Higher temperature increases the reaction rate.",
-		"Energy" = "[MIASTER_STERILIZATION_ENERGY] joules of energy is released per rate.",
-	)
-
-/datum/gas_reaction/plasmafire/init_factors()
-	factor = list(
-		/datum/gas/oxygen = "Oxygen consumption is determined by the temperature, ranging from [OXYGEN_BURN_RATIO_BASE] of the reaction rate at [PLASMA_MINIMUM_BURN_TEMPERATURE] Kelvins to [OXYGEN_BURN_RATIO_BASE-1] at [PLASMA_UPPER_TEMPERATURE] Kelvins. Higher oxygen concentration up to [PLASMA_OXYGEN_FULLBURN]x times the plasma increases the reaction rate.",
-		/datum/gas/plasma = "Plasma is consumed at 1 reaction rate. It's relationship with oxygen also determines reaction speed",
-		/datum/gas/tritium = "Tritium is formed at 1 reaction rate if there are 97 times more oxygen than plasma.",
-		/datum/gas/water_vapor = "Water vapor is formed at 0.25 reaction rate if tritium isn't being formed.",
-		/datum/gas/carbon_dioxide = "Carbon Dioxide is formed at 0.75 reaction rate if tritium isn't being formed.",
-		"Temperature" = "Minimum temperature of [PLASMA_MINIMUM_BURN_TEMPERATURE] kelvin to occur. Higher temperature up to [PLASMA_UPPER_TEMPERATURE] increases the oxygen efficiency and also the reaction rate.",
-		"Energy" = "[FIRE_PLASMA_ENERGY_RELEASED] joules of energy is released per reaction rate",
-	)
-
-/datum/gas_reaction/h2fire/init_factors()
-	factor = list(
-		/datum/gas/oxygen = "Oxygen is consumed equal to the amount of hydrogen available on the fast burn. Not consumed on the slow burn. Needs to be more than the hydrogen amount to trigger fast burn. Acts as the reaction rate on slow burn.",
-		/datum/gas/hydrogen = "[(1/HYDROGEN_BURN_H2_FACTOR)*100]% of the hydrogen is always consumed on the fast burn. [(1/HYDROGEN_BURN_OXY_FACTOR)*100]% of the oxygen amount is consumed on the slow burn. Need to be less than the oxygen amount to trigger fast burn. Acts as the reaction rate on fast burn.",
-		/datum/gas/water_vapor = "Water vapor is formed at [1/HYDROGEN_BURN_H2_FACTOR] reaction rate for the fast burn, [1/HYDROGEN_BURN_OXY_FACTOR]% reaction rate for the slow burn.",
-		"Temperature" = "Minimum temperature of [FIRE_MINIMUM_TEMPERATURE_TO_EXIST] kelvin to occur",
-		"Energy" = "[FIRE_HYDROGEN_ENERGY_RELEASED*HYDROGEN_OXYBURN_MULTIPLIER] joules of energy is released per rate for the fast burn, [FIRE_HYDROGEN_ENERGY_RELEASED] joules for the slow burn. Needs [MINIMUM_TRITIUM_OXYBURN_ENERGY] joules to start the fast burn.",
-	)
-
-/datum/gas_reaction/tritfire/init_factors()
-	factor = list(
-		/datum/gas/oxygen = "Oxygen is consumed equal to the amount of tritium available on the fast burn. Not consumed on the slow burn. Need to be more than the tritium amount to trigger fast burn. Acts as the reaction rate on slow burn.",
-		/datum/gas/tritium = "[(1/TRITIUM_BURN_TRIT_FACTOR)*100]% of the tritium is always consumed on the fast burn. [(1/TRITIUM_BURN_OXY_FACTOR)*100]% of the oxygen amount is consumed on the slow burn. Need to be less than the oxygen amount to trigger fast burn. Acts as the reaction rate on fast burn.",
-		/datum/gas/water_vapor = "Water vapor is formed at [1/TRITIUM_BURN_TRIT_FACTOR]% reaction rate for the fast burn, [1/TRITIUM_BURN_OXY_FACTOR]% reaction rate for the slow burn.",
-		"Temperature" = "Minimum temperature of [FIRE_MINIMUM_TEMPERATURE_TO_EXIST] kelvin to occur",
-		"Energy" = "[FIRE_TRITIUM_ENERGY_RELEASED*TRITIUM_OXYBURN_MULTIPLIER] joules of energy is released per rate for the fast burn, [FIRE_TRITIUM_ENERGY_RELEASED] joules for the slow burn. Needs [MINIMUM_TRITIUM_OXYBURN_ENERGY] joules to start the fast burn.",
-		"Radiation" = "This reaction emits radiation proportional to the amount of energy released.",
-	)
-
-/datum/gas_reaction/freonfire/init_factors()
-	factor = list(
-		/datum/gas/oxygen = "Oxygen consumption is determined by the temperature, ranging from [OXYGEN_BURN_RATIO_BASE] of the reaction rate at [FREON_LOWER_TEMPERATURE] Kelvins to [OXYGEN_BURN_RATIO_BASE-1] at [FREON_MAXIMUM_BURN_TEMPERATURE] Kelvins. Higher oxygen concentration up to [FREON_OXYGEN_FULLBURN] times the freon increases the reaction rate.",
-		/datum/gas/freon = "Freon is consumed at 1 reaction rate. It's relationship with oxygen also determines reaction speed",
-		/datum/gas/carbon_dioxide = "Carbon Dioxide is formed at 1 reaction rate.",
-		"Temperature" = "Can only occur between [FREON_LOWER_TEMPERATURE] - [FREON_MAXIMUM_BURN_TEMPERATURE] Kelvin",
-		"Energy" = "[FIRE_FREON_ENERGY_CONSUMED] joules of energy is absorbed per reaction rate",
-		"Hot Ice" = "This reaction has a small chance to produce hot ice when occuring between [HOT_ICE_FORMATION_MINIMUM_TEMPERATURE]-[HOT_ICE_FORMATION_MAXIMUM_TEMPERATURE] kelvins",
-	)
-
-
-/datum/gas_reaction/nitrousformation/init_factors()
-	factor = list(
-		/datum/gas/oxygen = "10 moles of Oxygen needs to be present for the reaction to occur. Oxygen is consumed at 1 reaction rate",
-		/datum/gas/nitrogen = " 20 moles of Nitrogen needs to be present for the reaction to occur. Nitrogen is consumed at 2 reaction rate",
-		/datum/gas/bz = "5 moles of BZ needs to be present for the reaction to occur. Not consumed.",
-		/datum/gas/nitrous_oxide = "Nitrous oxide is produced at 1 reaction rate",
-		"Temperature" = "Can only occur between [N2O_FORMATION_MIN_TEMPERATURE] - [N2O_FORMATION_MAX_TEMPERATURE] Kelvin",
-		"Energy" = "[N2O_FORMATION_ENERGY] joules of energy is released per reaction rate",
-	)
-
-/datum/gas_reaction/nitrous_decomp/init_factors()
-	factor = list(
-		/datum/gas/nitrous_oxide = "Nitrous Oxide is consumed at 1 reaction rate. Minimum of [MINIMUM_MOLE_COUNT * 2] to occur.", //okay this one isn't made into a define yet.
-		/datum/gas/oxygen = "Oxygen is formed at 0.5 reaction rate",
-		/datum/gas/nitrogen = "Nitrogen is formed at 1 reaction rate",
-		"Temperature" = "Higher temperature increases the reaction rate. Can only happen between [N2O_DECOMPOSITION_MIN_TEMPERATURE] - [N2O_DECOMPOSITION_MAX_TEMPERATURE] kelvin.",
-		"Energy" = "[N2O_DECOMPOSITION_ENERGY] joules of energy is released per reaction rate",
-	)
-
-/datum/gas_reaction/bzformation/init_factors()
-	factor = list(
-		/datum/gas/plasma = "Plasma is consumed at 2 reaction rate. If there is more plasma than nitrous oxide reaction rate is slowed down.",
-		/datum/gas/nitrous_oxide = "Nitrous oxide is consumed at 1 reaction rate. If there is less nitrous oxide than plasma the reaction rate is slowed down.",
-		/datum/gas/bz = "BZ is formed at 2.5 reaction rate. A small malus up to half a mole per tick is applied if the reaction rate is constricted by nitrous oxide.",
-		/datum/gas/oxygen = "Oxygen is produced from the BZ malus. This only happens when the reaction rate is being constricted by the amount of nitrous oxide present. I.E. amount of nitrous oxide is less than the reaction rate.", // Less than the reaction rate AND half the plasma, but suppose that's not necessary to mention.
-		"Pressure" = "The lower the pressure the faster the reaction rate goes.",
-		"Energy" = "[FIRE_CARBON_ENERGY_RELEASED] joules of energy is released per reaction rate",
-	)
-
-/datum/gas_reaction/pluox_formation/init_factors()
-	factor = list(
-		/datum/gas/carbon_dioxide = "Carbon dioxide is consumed at 1 reaction rate",
-		/datum/gas/oxygen = "Oxygen is consumed at 0.5 reaction rate",
-		/datum/gas/tritium = "Tritium is consumed at 0.01 reaction rate",
-		/datum/gas/pluoxium = "Pluoxium is produced at 1 reaction rate",
-		/datum/gas/hydrogen = "Hydrogen is produced at 0.01 reaction rate",
-		"Energy" = "[PLUOXIUM_FORMATION_ENERGY] joules of energy is released per reaction rate",
-		"Temperature" = "Can only occur between [PLUOXIUM_FORMATION_MIN_TEMP] - [PLUOXIUM_FORMATION_MAX_TEMP] Kelvin",
-	)
-
-/datum/gas_reaction/nitrium_formation/init_factors()
-	factor = list(
-		/datum/gas/bz = "5 moles of BZ needs to be present for the reaction to occur. BZ is consumed at 0.05 reaction rate.",
-		/datum/gas/tritium = "20 moles of tritium needs to be present for the reaction to occur. Tritium is consumed at 1 reaction rate",
-		/datum/gas/nitrogen = "10 moles of tritium needs to be present for the reaction to occur. Nitrogen is consumed at 1 reaction rate",
-		/datum/gas/nitrium = "Nitrium is produced at 1 reaction rate",
-		"Temperature" = "Can only occur above [NITRIUM_FORMATION_MIN_TEMP] kelvins",
-		"Energy" = "[NITRIUM_FORMATION_ENERGY] joules of energy is absorbed per reaction rate",
-	)
-
-/datum/gas_reaction/nitrium_decomposition/init_factors()
-	factor = list(
-		/datum/gas/oxygen = "[MINIMUM_MOLE_COUNT] moles of oxygen need to be present for the reaction to occur. Not consumed.",
-		/datum/gas/nitrium = "Nitrium is consumed at 1 reaction rate",
-		/datum/gas/hydrogen = "Hydrogen is produced at 1 reaction rate",
-		/datum/gas/nitrogen = "Nitrogen is produced at 1 reaction rate",
-		"Temperature" = " Can only occur below [NITRIUM_DECOMPOSITION_MAX_TEMP]. Higher temperature increases the reaction rate.",
-		"Energy" = "[NITRIUM_DECOMPOSITION_ENERGY] joules of energy is released per reaction rate",
-	)
-
-/datum/gas_reaction/freonformation/init_factors()
-	factor = list(
-		/datum/gas/plasma = "40 moles of plasma needs to be present for the reaction to occur. Plasma is consumed at 1.5 reaction rate.",
-		/datum/gas/carbon_dioxide = "20 moles of carbon dioxide needs to be present for the reaction to occur. Carbon dioxide is consumed at 0.75 reaction rate.",
-		/datum/gas/bz = "20 moles of BZ needs to be present for the reaction to occur. BZ is consumed at 0.25 reaction rate.",
-		/datum/gas/freon = "Freon is produced at 2.5 reaction rate",
-		"Energy" = "[FREON_FORMATION_ENERGY] joules of energy is absorbed per reaction rate",
-		"Temperature" = "Minimum temperature of [FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100] Kelvin to occur",
-	)
-
-/datum/gas_reaction/nobliumformation/init_factors()
-	factor = list(
-		/datum/gas/nitrogen = "10 moles of nitrogen needs to be present for the reaction to occur. Nitrogen is consumed at 10 reaction rate",
-		/datum/gas/tritium = "5 moles of tritium needs to be present for the reaction to occur. Tritium is consumed at 5 reaction rate",
-		/datum/gas/hypernoblium = "Hyper-Noblium is produced at 1 reaction rate",
-		"Energy" = "[NOBLIUM_FORMATION_ENERGY] joules of energy is released per reaction rate.",
-		/datum/gas/bz = "BZ is not consumed in the reaction but will lower the amount of energy released. It also reduces amount of trit consumed by a ratio between trit and bz, greater bz than trit will reduce more.",
-		"Temperature" = "Can only occur between [NOBLIUM_FORMATION_MIN_TEMP] - [NOBLIUM_FORMATION_MAX_TEMP] kelvin",
-	)
-
-/datum/gas_reaction/halon_formation/init_factors()
-	factor = list(
-		/datum/gas/bz = "BZ is consumed at 0.25 reaction rate",
-		/datum/gas/tritium = "Tritium is consumed at 4 reaction rate",
-		/datum/gas/halon = "Halon is produced at 4.25 reaction rate",
-		"Energy" = "[HALON_FORMATION_ENERGY] joules of energy is released per reaction rate",
-		"Temperature" = "Can only occur between [HALON_FORMATION_MIN_TEMPERATURE] - [HALON_FORMATION_MAX_TEMPERATURE] kelvin",
-	)
-
-/datum/gas_reaction/halon_o2removal/init_factors()
-	factor = list(
-		/datum/gas/halon = "Halon is consumed at 1 reaction rate",
-		/datum/gas/oxygen = "Oxygen is consumed at 20 reaction rate",
-		/datum/gas/carbon_dioxide = "Carbon dioxide is produced at 5 reaction rate.",
-		"Energy" = "[HALON_COMBUSTION_ENERGY] joules of energy is absorbed per reaction rate",
-		"Temperature" = "Can only occur above [FIRE_MINIMUM_TEMPERATURE_TO_EXIST] kelvin. Higher temperature increases the reaction rate.",
-	)
-	
-/datum/gas_reaction/healium_formation/init_factors()
-	factor = list(
-		/datum/gas/bz = "BZ is consumed at 0.25 reaction rate",
-		/datum/gas/freon = "Freon is consumed at 2.75 reaction rate",
-		/datum/gas/healium = "Healium is produced at 3 reaction rate",
-		"Temperature" = "Can only occur between [HEALIUM_FORMATION_MIN_TEMP] - [HEALIUM_FORMATION_MAX_TEMP]. Higher temperature increases the reaction rate.",
-		"Energy" = "[HEALIUM_FORMATION_ENERGY] joules of energy is released per reaction rate.",
-	)
-
-/datum/gas_reaction/zauker_formation/init_factors()
-	factor = list(
-		/datum/gas/hypernoblium = "Hyper-Noblium is consumed at 0.01 reaction rate",
-		/datum/gas/nitrium = "Nitrium is consumed at 0.5 reaction rate",
-		/datum/gas/zauker = "Zauker is produced at 0.5 reaction rate",
-		"Temperature" = "Can only occur between [ZAUKER_FORMATION_MIN_TEMPERATURE] - [ZAUKER_FORMATION_MAX_TEMPERATURE] kelvin",
-		"Energy" = "[ZAUKER_FORMATION_ENERGY] joules of energy is absorbed per reaction rate",
-	)
-	
-/datum/gas_reaction/zauker_decomp/init_factors() //Fixed reaction rate
-	factor = list(
-		/datum/gas/zauker = "Zauker is consumed at 1 reaction rate",
-		/datum/gas/nitrogen = "At least [MINIMUM_MOLE_COUNT] moles of Nitrogen needs to be present for this reaction to occur. Nitrogen is produced at 0.7 reaction rate",
-		/datum/gas/oxygen = "Oxygen is produced at 0.3 reaction rate",
-		"Energy" = "[ZAUKER_DECOMPOSITION_ENERGY] joules of energy is released per reaction rate",
-	)
-
-/datum/gas_reaction/proto_nitrate_formation/init_factors()
-	factor = list(
-		/datum/gas/pluoxium = "Pluoxium is consumed at 0.2 reaction rate",
-		/datum/gas/hydrogen = "Hydrogen is consumed at 2 reaction rate",
-		/datum/gas/proto_nitrate = "Proto-Nitrate is produced at 2.2 reaction rate",
-		"Energy" = "[PN_FORMATION_ENERGY] joules of energy is released per reaction rate",
-		"Temperature" = "Can only occur between [PN_FORMATION_MIN_TEMPERATURE] - [PN_FORMATION_MAX_TEMPERATURE] kelvin. Higher temperature increases the reaction rate.",
-	)
-	
-/datum/gas_reaction/proto_nitrate_hydrogen_response/init_factors() // Fixed reaction rate
-	factor = list(
-		/datum/gas/hydrogen = "[PN_HYDROGEN_CONVERSION_THRESHOLD] moles of hydrogen needs to be present for the reaction to occur. Hydrogen is consumed at 1 reaction rate.",
-		/datum/gas/proto_nitrate = "[MINIMUM_MOLE_COUNT] moles of proto-nitrate needs to be present for the reaction to occur. Proto nitrate is produced at 0.5 reaction rate.",
-		"Energy" = "[PN_HYDROGEN_CONVERSION_ENERGY] joules of energy is absorbed per reaction rate",
-	)
-
-/datum/gas_reaction/proto_nitrate_tritium_response/init_factors() // Fixed reaction rate
-	factor = list(
-		/datum/gas/tritium = "Tritium is consumed at 1 reaction rate.",
-		/datum/gas/proto_nitrate = "Proto nitrate is consumed at 0.01 reaction rate.",
-		/datum/gas/hydrogen = "Hydrogen is produced at 1 reaction rate.",
-		"Energy" = "[PN_TRITIUM_CONVERSION_ENERGY] joules of energy is released per reaction rate",
-		"Radiation" = "This reaction emits radiation proportional to the reaction rate.",
-	)
-
-/datum/gas_reaction/proto_nitrate_bz_response/init_factors() // Fixed reaction rate
-	factor = list(
-		/datum/gas/proto_nitrate = "[MINIMUM_MOLE_COUNT] moles of proto-nitrate needs to be present for the reaction to occur",
-		/datum/gas/bz = "BZ is consumed at 1 reaction rate.",
-		/datum/gas/nitrogen = "Nitrogen is produced at 0.4 reaction rate.",
-		/datum/gas/helium = "Helium is produced at 1.6 reaction rate.",
-		/datum/gas/plasma = "Plasma is produced at 0.8 reaction rate.",
-		"Energy" = "[PN_BZASE_ENERGY] joules of energy is released per reaction rate",
-		"Radiation" = "This reaction emits radiation proportional to the reaction rate.",
-		"Hallucinations" = "This reaction can cause various carbon based lifeforms in the vicinity to hallucinate.",
-	)
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
deleted file mode 100644
index 1c960c98452..00000000000
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ /dev/null
@@ -1,1194 +0,0 @@
-//Most other defines used in reactions are located in ..\__DEFINES\reactions.dm
-#define SET_REACTION_RESULTS(amount) air.reaction_results[type] = amount
-
-/proc/init_gas_reactions()
-	var/list/priority_reactions = list()
-
-	//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 reaction
-		var/datum/gas/reaction_key
-		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
-		priority_reactions[reaction_key][reaction.priority_group] += reaction
-
-	//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 list: the minimum or maximum requirements must be non-zero.
-	 * When in doubt, use MINIMUM_MOLE_COUNT.
-	 * Another thing to note is that reactions will not fire if we have any requirements outside of gas id path or MIN_TEMP or MAX_TEMP.
-	 * More complex implementations will require modifications to gas_mixture.react()
-	 */
-	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
-	///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"
-	/// Whether the presence of our reaction should make fires bigger or not.
-	var/expands_hotspot = FALSE
-	/// A short string describing this reaction.
-	var/desc
-	/** REACTION FACTORS
-	 *
-	 * Describe (to a human) factors influencing this reaction in an assoc list format.
-	 * Also include gases formed by the reaction
-	 * Implement various interaction for different keys under subsystem/air/proc/atmos_handbook_init()
-	 *
-	 * E.G.
-	 * factor["Temperature"] = "Minimum temperature of 20 kelvins, maximum temperature of 100 kelvins"
-	 * factor["o2"] = "Minimum oxygen amount of 20 moles, more oxygen increases reaction rate up to 150 moles"
-	 */
-	var/list/factor
-
-/datum/gas_reaction/New()
-	init_reqs()
-	init_factors()
-
-/datum/gas_reaction/proc/init_reqs() // Override this
-	CRASH("Reaction [type] made without specifying requirements.")
-
-/datum/gas_reaction/proc/init_factors()
-
-/datum/gas_reaction/proc/react(datum/gas_mixture/air, atom/location)
-	return NO_REACTION
-
-
-/**
- * Steam Condensation/Deposition:
- *
- * Makes turfs slippery.
- * Can frost things if the gas is cold enough.
- */
-/datum/gas_reaction/water_vapor
-	priority_group = PRIORITY_POST_FORMATION
-	name = "Water Vapor Condensation"
-	id = "vapor"
-	desc = "Water vapor condensation that can make things slippery."
-
-/datum/gas_reaction/water_vapor/init_reqs()
-	requirements = list(
-		/datum/gas/water_vapor = MOLES_GAS_VISIBLE,
-		"MAX_TEMP" = WATER_VAPOR_CONDENSATION_POINT,
-	)
-
-/datum/gas_reaction/water_vapor/react(datum/gas_mixture/air, datum/holder)
-	. = NO_REACTION
-	if(!isturf(holder))
-		return
-
-	var/turf/open/location = holder
-	switch(air.temperature)
-		if(-INFINITY to WATER_VAPOR_DEPOSITION_POINT)
-			if(location?.freeze_turf())
-				SET_REACTION_RESULTS(0)
-			. = REACTING
-		if(WATER_VAPOR_DEPOSITION_POINT to WATER_VAPOR_CONDENSATION_POINT)
-			location.water_vapor_gas_act()
-			air.gases[/datum/gas/water_vapor][MOLES] -= MOLES_GAS_VISIBLE
-			SET_REACTION_RESULTS(MOLES_GAS_VISIBLE)
-			. = REACTING
-
-
-/**
- * Dry Heat Sterilization:
- *
- * Clears out pathogens in the air.
- */
-/datum/gas_reaction/miaster
-	priority_group = PRIORITY_POST_FORMATION
-	name = "Dry Heat Sterilization"
-	id = "sterilization"
-	desc = "Pathogens cannot survive in a hot environment. Miasma decomposes on high temperature."
-
-/datum/gas_reaction/miaster/init_reqs()
-	requirements = list(
-		/datum/gas/miasma = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = MIASTER_STERILIZATION_TEMP,
-	)
-
-/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.get_moles() > MIASTER_STERILIZATION_MAX_HUMIDITY)
-		return NO_REACTION
-
-	//Replace miasma with oxygen
-	var/cleaned_air = min(cached_gases[/datum/gas/miasma][MOLES], MIASTER_STERILIZATION_RATE_BASE + (air.temperature - MIASTER_STERILIZATION_TEMP) / MIASTER_STERILIZATION_RATE_SCALE)
-	cached_gases[/datum/gas/miasma][MOLES] -= cleaned_air
-	ASSERT_GAS(/datum/gas/oxygen, air)
-	cached_gases[/datum/gas/oxygen][MOLES] += cleaned_air
-
-	//Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable
-	air.temperature += cleaned_air * MIASTER_STERILIZATION_ENERGY
-	SET_REACTION_RESULTS(cleaned_air)
-
-	return REACTING
-
-
-// Fire:
-
-/**
- * Plasma combustion:
- *
- * Combustion of oxygen and plasma (mostly treated as hydrocarbons).
- * The reaction rate is dependent on the temperature of the gasmix.
- * May produce either tritium or carbon dioxide and water vapor depending on the fuel/oxydizer ratio of the gasmix.
- */
-/datum/gas_reaction/plasmafire
-	priority_group = PRIORITY_FIRE
-	name = "Plasma Combustion"
-	id = "plasmafire"
-	expands_hotspot = TRUE
-	desc = "Combustion of oxygen and plasma. Able to produce tritium or carbon dioxade and water vapor."
-
-/datum/gas_reaction/plasmafire/init_reqs()
-	requirements = list(
-		/datum/gas/plasma = MINIMUM_MOLE_COUNT,
-		/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = PLASMA_MINIMUM_BURN_TEMPERATURE,
-	)
-
-/datum/gas_reaction/plasmafire/react(datum/gas_mixture/air, datum/holder)
-	// This reaction should proceed faster at higher temperatures.
-	var/temperature = air.temperature
-	var/temperature_scale = 0
-	if(temperature > PLASMA_UPPER_TEMPERATURE)
-		temperature_scale = 1
-	else
-		temperature_scale = (temperature - PLASMA_MINIMUM_BURN_TEMPERATURE) / (PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE)
-		if(temperature_scale <= 0)
-			return NO_REACTION
-
-	var/oxygen_burn_ratio = OXYGEN_BURN_RATIO_BASE - temperature_scale
-	var/plasma_burn_rate = 0
-	var/super_saturation = FALSE // Whether we should make tritium.
-	var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow
-	switch(cached_gases[/datum/gas/oxygen][MOLES] / cached_gases[/datum/gas/plasma][MOLES])
-		if(SUPER_SATURATION_THRESHOLD to INFINITY)
-			plasma_burn_rate = (cached_gases[/datum/gas/plasma][MOLES] / PLASMA_BURN_RATE_DELTA) * temperature_scale
-			super_saturation = TRUE // Begin to form tritium
-		if(PLASMA_OXYGEN_FULLBURN to SUPER_SATURATION_THRESHOLD)
-			plasma_burn_rate = (cached_gases[/datum/gas/plasma][MOLES] / PLASMA_BURN_RATE_DELTA) * temperature_scale
-		else
-			plasma_burn_rate = ((cached_gases[/datum/gas/oxygen][MOLES] / PLASMA_OXYGEN_FULLBURN) / PLASMA_BURN_RATE_DELTA) * temperature_scale
-
-	if(plasma_burn_rate < MINIMUM_HEAT_CAPACITY)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	plasma_burn_rate = min(plasma_burn_rate, cached_gases[/datum/gas/plasma][MOLES], cached_gases[/datum/gas/oxygen][MOLES] *  INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly
-	cached_gases[/datum/gas/plasma][MOLES] = QUANTIZE(cached_gases[/datum/gas/plasma][MOLES] - plasma_burn_rate)
-	cached_gases[/datum/gas/oxygen][MOLES] = QUANTIZE(cached_gases[/datum/gas/oxygen][MOLES] - (plasma_burn_rate * oxygen_burn_ratio))
-	if (super_saturation)
-		ASSERT_GAS(/datum/gas/tritium, air)
-		cached_gases[/datum/gas/tritium][MOLES] += plasma_burn_rate
-	else
-		ASSERT_GAS(/datum/gas/carbon_dioxide, air)
-		ASSERT_GAS(/datum/gas/water_vapor, air)
-		cached_gases[/datum/gas/carbon_dioxide][MOLES] += plasma_burn_rate * 0.75
-		cached_gases[/datum/gas/water_vapor][MOLES] += plasma_burn_rate * 0.25
-
-	SET_REACTION_RESULTS((plasma_burn_rate) * (1 + oxygen_burn_ratio))
-	var/energy_released = FIRE_PLASMA_ENERGY_RELEASED * plasma_burn_rate
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
-
-	// Let the floor know a fire is happening
-	var/turf/open/location = holder
-	if(istype(location))
-		temperature = air.temperature
-		if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
-			location.hotspot_expose(temperature, CELL_VOLUME)
-
-	return REACTING
-
-
-/**
- * Hydrogen combustion:
- *
- * Combustion of oxygen and hydrogen.
- * Highly exothermic.
- * Creates hotspots.
- */
-/datum/gas_reaction/h2fire
-	priority_group = PRIORITY_FIRE
-	name = "Hydrogen Combustion"
-	id = "h2fire"
-	expands_hotspot = TRUE
-	desc = "Combustion of hydrogen with oxygen. Can be extremely fast and energetic if a few conditions are fulfilled."
-
-/datum/gas_reaction/h2fire/init_reqs()
-	requirements = list(
-		/datum/gas/hydrogen = MINIMUM_MOLE_COUNT,
-		/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = HYDROGEN_MINIMUM_BURN_TEMPERATURE,
-	)
-
-/datum/gas_reaction/h2fire/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow
-	var/old_heat_capacity = air.getHeatCapacity()
-	var/temperature = air.temperature
-
-	var/burned_fuel
-	var/fire_scale
-	if(cached_gases[/datum/gas/oxygen][MOLES] < cached_gases[/datum/gas/hydrogen][MOLES] || MINIMUM_HYDROGEN_OXYBURN_ENERGY > (temperature * old_heat_capacity))
-		burned_fuel = cached_gases[/datum/gas/oxygen][MOLES] / HYDROGEN_BURN_OXY_FACTOR // const must be at least one
-		fire_scale = 1
-
-		cached_gases[/datum/gas/hydrogen][MOLES] -= burned_fuel
-		ASSERT_GAS(/datum/gas/water_vapor, air)
-		cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel / HYDROGEN_BURN_OXY_FACTOR
-	else
-		burned_fuel = cached_gases[/datum/gas/hydrogen][MOLES]
-		fire_scale = HYDROGEN_OXYBURN_MULTIPLIER
-
-		cached_gases[/datum/gas/hydrogen][MOLES] -= burned_fuel / HYDROGEN_BURN_H2_FACTOR
-		cached_gases[/datum/gas/oxygen][MOLES] -= burned_fuel
-		ASSERT_GAS(/datum/gas/water_vapor, air)
-		cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel / HYDROGEN_BURN_H2_FACTOR
-
-	SET_REACTION_RESULTS(burned_fuel * fire_scale) // This is actually a lie. We use 10x less moles here but make 10x more energy.
-
-	var/energy_released = FIRE_HYDROGEN_ENERGY_RELEASED * burned_fuel * fire_scale
-	if(energy_released > 0)
-		var/new_heat_capacity = air.getHeatCapacity()
-		if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-			air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
-
-	//let the floor know a fire is happening
-	var/turf/open/location = holder
-	if(istype(location))
-		temperature = air.temperature
-		if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
-			location.hotspot_expose(temperature, CELL_VOLUME)
-
-	return burned_fuel ? REACTING : NO_REACTION
-
-
-/**
- * Tritium combustion:
- *
- * Combustion of oxygen and tritium (treated as hydrogen).
- * Highly exothermic.
- * Creates hotspots.
- * Creates radiation.
- */
-/datum/gas_reaction/tritfire
-	priority_group = PRIORITY_FIRE
-	name = "Tritium Combustion"
-	id = "tritfire"
-	expands_hotspot = TRUE
-	desc = "Combustion of tritium with oxygen. Can be extremely fast and energetic if a few conditions are fulfilled."
-
-/datum/gas_reaction/tritfire/init_reqs()
-	requirements = list(
-		/datum/gas/tritium = MINIMUM_MOLE_COUNT,
-		/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = TRITIUM_MINIMUM_BURN_TEMPERATURE,
-	)
-
-/datum/gas_reaction/tritfire/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow
-	var/old_heat_capacity = air.getHeatCapacity()
-	var/temperature = air.temperature
-
-	var/burned_fuel
-	var/effect_scale
-	if(cached_gases[/datum/gas/oxygen][MOLES] < cached_gases[/datum/gas/tritium][MOLES] || MINIMUM_TRITIUM_OXYBURN_ENERGY > (temperature * old_heat_capacity))
-		burned_fuel = cached_gases[/datum/gas/oxygen][MOLES] / TRITIUM_BURN_OXY_FACTOR // const must be at least one
-		effect_scale = 1
-
-		cached_gases[/datum/gas/tritium][MOLES] -= burned_fuel
-		ASSERT_GAS(/datum/gas/water_vapor, air)
-		cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel / TRITIUM_BURN_OXY_FACTOR
-	else
-		burned_fuel = cached_gases[/datum/gas/tritium][MOLES]
-		effect_scale = TRITIUM_OXYBURN_MULTIPLIER
-
-		cached_gases[/datum/gas/tritium][MOLES] -= burned_fuel / TRITIUM_BURN_TRIT_FACTOR
-		cached_gases[/datum/gas/oxygen][MOLES] -= burned_fuel
-		ASSERT_GAS(/datum/gas/water_vapor, air)
-		cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel / TRITIUM_BURN_TRIT_FACTOR
-
-
-	SET_REACTION_RESULTS(burned_fuel * effect_scale)
-
-	var/turf/open/location
-	if(istype(holder, /datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet.
-		var/datum/pipeline/pipenet = holder
-		location = pick(pipenet.members)
-	else if(isatom(holder))
-		location = holder
-
-	var/energy_released = FIRE_TRITIUM_ENERGY_RELEASED * burned_fuel * effect_scale
-	if(location && burned_fuel > TRITIUM_RADIATION_MINIMUM_MOLES && energy_released > TRITIUM_RADIATION_RELEASE_THRESHOLD * (air.volume / CELL_VOLUME) ** ATMOS_RADIATION_VOLUME_EXP && prob(10))
-		radiation_pulse(location, max_range = min(TRITIUM_MINIMUM_RADIATION_RANGE + sqrt(burned_fuel * effect_scale / TRITIUM_OXYBURN_MULTIPLIER) / TRITIUM_RADIATION_RANGE_DIVISOR, 20), threshold = TRITIUM_RADIATION_THRESHOLD_BASE * INVERSE(TRITIUM_RADIATION_THRESHOLD_BASE + (burned_fuel * effect_scale / TRITIUM_OXYBURN_MULTIPLIER)), chance = 100 * (1 - 0.5 ** (energy_released / TRITIUM_RADIATION_CHANCE_ENERGY_THRESHOLD_BASE)))
-
-	if(energy_released > 0)
-		var/new_heat_capacity = air.getHeatCapacity()
-		if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-			air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
-
-	//let the floor know a fire is happening
-	if(istype(location))
-		temperature = air.temperature
-		if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
-			location.hotspot_expose(temperature, CELL_VOLUME)
-
-	return burned_fuel ? REACTING : NO_REACTION
-
-
-
-/**
- * Freon combustion:
- *
- * Combustion of oxygen and freon.
- * Endothermic.
- */
-/datum/gas_reaction/freonfire
-	priority_group = PRIORITY_FIRE
-	name = "Freon Combustion"
-	id = "freonfire"
-	expands_hotspot = TRUE
-	desc = "Reaction between oxygen and freon that consumes a huge amount of energy and can cool things significantly. Also able to produce hot ice."
-
-/datum/gas_reaction/freonfire/init_reqs()
-	requirements = list(
-		/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
-		/datum/gas/freon = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = FREON_TERMINAL_TEMPERATURE,
-		"MAX_TEMP" = FREON_MAXIMUM_BURN_TEMPERATURE,
-	)
-
-/datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder)
-	if(!isturf(holder))
-		return NO_REACTION
-
-	var/temperature = air.temperature
-	var/temperature_scale
-	if(temperature < FREON_TERMINAL_TEMPERATURE) //stop the reaction when too cold
-		temperature_scale = 0
-	else if(temperature < FREON_LOWER_TEMPERATURE)
-		temperature_scale = 0.5
-	else
-		temperature_scale = (FREON_MAXIMUM_BURN_TEMPERATURE - temperature) / (FREON_MAXIMUM_BURN_TEMPERATURE - FREON_TERMINAL_TEMPERATURE) //calculate the scale based on the temperature
-	if (temperature_scale <= 0)
-		return NO_REACTION
-
-	var/oxygen_burn_ratio = OXYGEN_BURN_RATIO_BASE - temperature_scale
-	var/freon_burn_rate
-	var/list/cached_gases = air.gases
-	if(cached_gases[/datum/gas/oxygen][MOLES] < cached_gases[/datum/gas/freon][MOLES] * FREON_OXYGEN_FULLBURN)
-		freon_burn_rate = (cached_gases[/datum/gas/freon][MOLES] / FREON_BURN_RATE_DELTA) * temperature_scale
-	else
-		freon_burn_rate = ((cached_gases[/datum/gas/oxygen][MOLES] / FREON_OXYGEN_FULLBURN) / FREON_BURN_RATE_DELTA) * temperature_scale
-
-	if (freon_burn_rate < MINIMUM_HEAT_CAPACITY)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	freon_burn_rate = min(freon_burn_rate, cached_gases[/datum/gas/freon][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly
-	cached_gases[/datum/gas/freon][MOLES] = QUANTIZE(cached_gases[/datum/gas/freon][MOLES] - freon_burn_rate)
-	cached_gases[/datum/gas/oxygen][MOLES] = QUANTIZE(cached_gases[/datum/gas/oxygen][MOLES] - (freon_burn_rate * oxygen_burn_ratio))
-	ASSERT_GAS(/datum/gas/carbon_dioxide, air)
-	cached_gases[/datum/gas/carbon_dioxide][MOLES] += freon_burn_rate
-
-	if(temperature < HOT_ICE_FORMATION_MAXIMUM_TEMPERATURE && temperature > HOT_ICE_FORMATION_MINIMUM_TEMPERATURE && prob(HOT_ICE_FORMATION_PROB))
-		new /obj/item/stack/sheet/hot_ice(holder)
-
-	SET_REACTION_RESULTS(freon_burn_rate * (1 + oxygen_burn_ratio))
-	var/energy_consumed = FIRE_FREON_ENERGY_CONSUMED * freon_burn_rate
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max((temperature * old_heat_capacity - energy_consumed) / new_heat_capacity, TCMB)
-
-	var/turf/open/location = holder
-	if(istype(location))
-		temperature = air.temperature
-		if(temperature < FREON_MAXIMUM_BURN_TEMPERATURE)
-			location.hotspot_expose(temperature, CELL_VOLUME)
-
-	return REACTING
-
-
-// N2O
-
-/**
- * Nitrous oxide Formation:
- *
- * Formation of N2O.
- * Endothermic.
- * Requires BZ as a catalyst.
- */
-/datum/gas_reaction/nitrousformation //formation of n2o, exothermic, requires bz as catalyst
-	priority_group = PRIORITY_FORMATION
-	name = "Nitrous Oxide Formation"
-	id = "nitrousformation"
-	desc = "Production of nitrous oxide with BZ as a catalyst."
-
-/datum/gas_reaction/nitrousformation/init_reqs()
-	requirements = list(
-		/datum/gas/oxygen = 10,
-		/datum/gas/nitrogen = 20,
-		/datum/gas/bz = 5,
-		"MIN_TEMP" = N2O_FORMATION_MIN_TEMPERATURE,
-		"MAX_TEMP" = N2O_FORMATION_MAX_TEMPERATURE,
-	)
-
-/datum/gas_reaction/nitrousformation/react(datum/gas_mixture/air)
-	var/list/cached_gases = air.gases
-	var/heat_efficency = min(cached_gases[/datum/gas/oxygen][MOLES], cached_gases[/datum/gas/nitrogen][MOLES] * INVERSE(2))
-	if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency * 2 < 0))
-		return NO_REACTION // Shouldn't produce gas from nothing.
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency
-	cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficency * 2
-	ASSERT_GAS(/datum/gas/nitrous_oxide, air)
-	cached_gases[/datum/gas/nitrous_oxide][MOLES] += heat_efficency
-
-	SET_REACTION_RESULTS(heat_efficency)
-	var/energy_released = heat_efficency * N2O_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB) // The air cools down when reacting.
-	return REACTING
-
-
-/**
- * Nitrous Oxide Decomposition
- *
- * Decomposition of N2O.
- * Exothermic.
- */
-/datum/gas_reaction/nitrous_decomp
-	priority_group = PRIORITY_POST_FORMATION
-	name = "Nitrous Oxide Decomposition"
-	id = "nitrous_decomp"
-	desc = "Decomposition of nitrous oxide under high temperature."
-
-/datum/gas_reaction/nitrous_decomp/init_reqs()
-	requirements = list(
-		/datum/gas/nitrous_oxide = MINIMUM_MOLE_COUNT * 2,
-		"MIN_TEMP" = N2O_DECOMPOSITION_MIN_TEMPERATURE,
-		"MAX_TEMP" = N2O_DECOMPOSITION_MAX_TEMPERATURE,
-	)
-
-/datum/gas_reaction/nitrous_decomp/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow
-	var/temperature = air.temperature
-	var/burned_fuel = (cached_gases[/datum/gas/nitrous_oxide][MOLES] / N2O_DECOMPOSITION_RATE_DIVISOR) * ((temperature - N2O_DECOMPOSITION_MIN_SCALE_TEMP) * (temperature - N2O_DECOMPOSITION_MAX_SCALE_TEMP) / (N2O_DECOMPOSITION_SCALE_DIVISOR))
-	if(burned_fuel <= 0)
-		return NO_REACTION
-	if(cached_gases[/datum/gas/nitrous_oxide][MOLES] - burned_fuel < 0)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	cached_gases[/datum/gas/nitrous_oxide][MOLES] -= burned_fuel
-	ASSERT_GAS(/datum/gas/nitrogen, air)
-	cached_gases[/datum/gas/nitrogen][MOLES] += burned_fuel
-	ASSERT_GAS(/datum/gas/oxygen, air)
-	cached_gases[/datum/gas/oxygen][MOLES] += burned_fuel / 2
-
-	SET_REACTION_RESULTS(burned_fuel)
-	var/energy_released = N2O_DECOMPOSITION_ENERGY * burned_fuel
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
-	return REACTING
-
-
-// BZ
-
-/**
- * BZ Formation
- *
- * Formation of BZ by combining plasma and nitrous oxide at low pressures.
- * Exothermic.
- */
-/datum/gas_reaction/bzformation
-	priority_group = PRIORITY_FORMATION
-	name = "BZ Gas Formation"
-	id = "bzformation"
-	desc = "Production of BZ using plasma and nitrous oxide."
-
-/datum/gas_reaction/bzformation/init_reqs()
-	requirements = list(
-		/datum/gas/nitrous_oxide = 10,
-		/datum/gas/plasma = 10,
-		"MAX_TEMP" = BZ_FORMATION_MAX_TEMPERATURE,
-	)
-
-/datum/gas_reaction/bzformation/react(datum/gas_mixture/air)
-	var/list/cached_gases = air.gases
-	var/pressure = air.returnPressure()
-	// This slows down in relation to pressure, very quickly. Please don't expect it to be anything more then a snail
-
-	// Bigger is better for these two values.
-	var/pressure_efficiency = (0.1 * ONE_ATMOSPHERE) / pressure // More pressure = more bad
-	var/ratio_efficiency = min(cached_gases[/datum/gas/nitrous_oxide][MOLES] / cached_gases[/datum/gas/plasma][MOLES], 1) // Malus to production if more plasma than n2o.
-
-	var/reaction_efficency = min(pressure_efficiency * ratio_efficiency, cached_gases[/datum/gas/nitrous_oxide][MOLES], cached_gases[/datum/gas/plasma][MOLES] * INVERSE(2))
-
-	if ((cached_gases[/datum/gas/nitrous_oxide][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2 * reaction_efficency) < 0) || reaction_efficency <= 0) //Shouldn't produce gas from nothing.
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/bz, air)
-	if (reaction_efficency == cached_gases[/datum/gas/nitrous_oxide][MOLES])
-		ASSERT_GAS(/datum/gas/oxygen, air)
-		cached_gases[/datum/gas/bz][MOLES] += (reaction_efficency * 2.5) - min(pressure, 0.5)
-		cached_gases[/datum/gas/oxygen][MOLES] += min(pressure, 0.5)
-	else
-		cached_gases[/datum/gas/bz][MOLES] += reaction_efficency * 2.5
-
-	cached_gases[/datum/gas/nitrous_oxide][MOLES] -= reaction_efficency
-	cached_gases[/datum/gas/plasma][MOLES] -= 2 * reaction_efficency
-
-	SET_REACTION_RESULTS(reaction_efficency)
-	var/energy_released = 2 * reaction_efficency * FIRE_CARBON_ENERGY_RELEASED
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
-	return REACTING
-
-
-// Pluoxium
-
-/**
- * Pluoxium Formation:
- *
- * Consumes a tiny amount of tritium to convert CO2 and oxygen to pluoxium.
- * Exothermic.
- */
-/datum/gas_reaction/pluox_formation
-	priority_group = PRIORITY_FORMATION
-	name = "Pluoxium Formation"
-	id = "pluox_formation"
-	desc = "Alternate production for pluoxium which uses tritium."
-
-/datum/gas_reaction/pluox_formation/init_reqs()
-	requirements = list(
-		/datum/gas/carbon_dioxide = MINIMUM_MOLE_COUNT,
-		/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
-		/datum/gas/tritium = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = PLUOXIUM_FORMATION_MIN_TEMP,
-		"MAX_TEMP" = PLUOXIUM_FORMATION_MAX_TEMP,
-	)
-
-/datum/gas_reaction/pluox_formation/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/produced_amount = min(PLUOXIUM_FORMATION_MAX_RATE, cached_gases[/datum/gas/carbon_dioxide][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(0.5), cached_gases[/datum/gas/tritium][MOLES] * INVERSE(0.01))
-	if (produced_amount <= 0 || cached_gases[/datum/gas/carbon_dioxide][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/oxygen][MOLES] - produced_amount * 0.5 < 0 || cached_gases[/datum/gas/tritium][MOLES] - produced_amount * 0.01 < 0)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	cached_gases[/datum/gas/carbon_dioxide][MOLES] -= produced_amount
-	cached_gases[/datum/gas/oxygen][MOLES] -= produced_amount * 0.5
-	cached_gases[/datum/gas/tritium][MOLES] -= produced_amount * 0.01
-	ASSERT_GAS(/datum/gas/pluoxium, air)
-	cached_gases[/datum/gas/pluoxium][MOLES] += produced_amount
-	ASSERT_GAS(/datum/gas/hydrogen, air)
-	cached_gases[/datum/gas/hydrogen][MOLES] += produced_amount * 0.01
-
-	SET_REACTION_RESULTS(produced_amount)
-	var/energy_released = produced_amount * PLUOXIUM_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
-	return REACTING
-
-
-// Nitrium
-
-/**
- * Nitrium Formation:
- *
- * The formation of nitrium.
- * Endothermic.
- * Requires BZ.
- */
-/datum/gas_reaction/nitrium_formation
-	priority_group = PRIORITY_FORMATION
-	name = "Nitrium Formation"
-	id = "nitrium_formation"
-	desc = "Production of nitrium from BZ, tritium, and nitrogen."
-
-/datum/gas_reaction/nitrium_formation/init_reqs()
-	requirements = list(
-		/datum/gas/tritium = 20,
-		/datum/gas/nitrogen = 10,
-		/datum/gas/bz = 5,
-		"MIN_TEMP" = NITRIUM_FORMATION_MIN_TEMP,
-	)
-
-/datum/gas_reaction/nitrium_formation/react(datum/gas_mixture/air)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-	var/heat_efficency = min(temperature / NITRIUM_FORMATION_TEMP_DIVISOR, cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/nitrogen][MOLES], cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.05))
-
-	if( heat_efficency <= 0 || (cached_gases[/datum/gas/tritium][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
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/nitrium, air)
-	cached_gases[/datum/gas/tritium][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 nitrium production and not make it too common and/or easy
-	cached_gases[/datum/gas/nitrium][MOLES] += heat_efficency
-
-	SET_REACTION_RESULTS(heat_efficency)
-	var/energy_used = heat_efficency * NITRIUM_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity), TCMB) //the air cools down when reacting
-	return REACTING
-
-
-/**
- * Nitrium Decomposition:
- *
- * The decomposition of nitrium.
- * Exothermic.
- * Requires oxygen as catalyst.
- */
-/datum/gas_reaction/nitrium_decomposition
-	priority_group = PRIORITY_PRE_FORMATION
-	name = "Nitrium Decomposition"
-	id = "nitrium_decomp"
-	desc = "Decomposition of nitrium when exposed to oxygen under normal temperatures."
-
-/datum/gas_reaction/nitrium_decomposition/init_reqs()
-	requirements = list(
-		/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
-		/datum/gas/nitrium = MINIMUM_MOLE_COUNT,
-		"MAX_TEMP" = NITRIUM_DECOMPOSITION_MAX_TEMP,
-	)
-
-/datum/gas_reaction/nitrium_decomposition/react(datum/gas_mixture/air)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-
-	//This reaction is agressively slow. like, a tenth of a mole per fire slow. Keep that in mind
-	var/heat_efficency = min(temperature / NITRIUM_DECOMPOSITION_TEMP_DIVISOR, cached_gases[/datum/gas/nitrium][MOLES])
-
-	if (heat_efficency <= 0 || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing.
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	air.assert_gases(/datum/gas/nitrogen, /datum/gas/hydrogen)
-	cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficency
-	cached_gases[/datum/gas/hydrogen][MOLES] += heat_efficency
-	cached_gases[/datum/gas/nitrogen][MOLES] += heat_efficency
-
-	SET_REACTION_RESULTS(heat_efficency)
-	var/energy_released = heat_efficency * NITRIUM_DECOMPOSITION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB) //the air heats up when reacting
-	return REACTING
-
-
-/**
- * Freon formation:
- *
- * The formation of freon.
- * Endothermic.
- */
-/datum/gas_reaction/freonformation
-	priority_group = PRIORITY_FORMATION
-	name = "Freon Formation"
-	id = "freonformation"
-	desc = "Production of freon using plasma, carbon dioxide, and BZ under high temperature."
-
-/datum/gas_reaction/freonformation/init_reqs() //minimum requirements for freon formation
-	requirements = list(
-		/datum/gas/plasma = 40,
-		/datum/gas/carbon_dioxide = 20,
-		/datum/gas/bz = 20,
-		"MIN_TEMP" = FREON_FORMATION_MIN_TEMPERATURE,
-	)
-
-/datum/gas_reaction/freonformation/react(datum/gas_mixture/air)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-	var/heat_efficency = min(temperature / FREON_FORMATION_TEMP_DIVISOR, cached_gases[/datum/gas/plasma][MOLES] * INVERSE(1.5), cached_gases[/datum/gas/carbon_dioxide][MOLES] * INVERSE(0.75), cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.25))
-	if (heat_efficency <= 0 || (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
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/freon, air)
-	cached_gases[/datum/gas/plasma][MOLES] -= heat_efficency * 1.5 // 6
-	cached_gases[/datum/gas/carbon_dioxide][MOLES] -= heat_efficency * 0.75 //  3
-	cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25 // 1
-	cached_gases[/datum/gas/freon][MOLES] += heat_efficency * 2.5 // 10
-
-	SET_REACTION_RESULTS(heat_efficency * 2.5)
-	var/energy_used = heat_efficency * FREON_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity - energy_used)/new_heat_capacity), TCMB)
-	return REACTING
-
-
-/**
- * Hyper-Noblium Formation:
- *
- * Extremely exothermic.
- * Requires very low temperatures.
- * Due to its high mass, hyper-noblium uses large amounts of nitrogen and tritium.
- * BZ can be used as a catalyst to make it less exothermic.
- */
-/datum/gas_reaction/nobliumformation
-	priority_group = PRIORITY_FORMATION
-	name = "Hyper-Noblium Condensation"
-	id = "nobformation"
-	desc = "Production of hyper-noblium from nitrogen and tritium under very low temperatures. Extremely energetic."
-
-/datum/gas_reaction/nobliumformation/init_reqs()
-	requirements = list(
-		/datum/gas/nitrogen = 10,
-		/datum/gas/tritium = 5,
-		"MIN_TEMP" = NOBLIUM_FORMATION_MIN_TEMP,
-		"MAX_TEMP" = NOBLIUM_FORMATION_MAX_TEMP,
-	)
-
-/datum/gas_reaction/nobliumformation/react(datum/gas_mixture/air)
-	var/list/cached_gases = air.gases
-	var/nob_formed = min((cached_gases[/datum/gas/nitrogen][MOLES] + cached_gases[/datum/gas/tritium][MOLES]) * 0.01, cached_gases[/datum/gas/tritium][MOLES] * INVERSE(5), cached_gases[/datum/gas/nitrogen][MOLES] * INVERSE(10))
-
-	if (nob_formed <= 0 || (cached_gases[/datum/gas/tritium][MOLES] - 5 * nob_formed < 0) || (cached_gases[/datum/gas/nitrogen][MOLES] - 10 * nob_formed < 0))
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	air.assert_gases(/datum/gas/hypernoblium, /datum/gas/bz)
-	var/reduction_factor = clamp(cached_gases[/datum/gas/tritium][MOLES]/(cached_gases[/datum/gas/tritium][MOLES] + cached_gases[/datum/gas/bz][MOLES]), 0.001 , 1) //reduces trit consumption in presence of bz upward to 0.1% reduction
-	cached_gases[/datum/gas/tritium][MOLES] -= 5 * nob_formed * reduction_factor
-	cached_gases[/datum/gas/nitrogen][MOLES] -= 10 * nob_formed
-	cached_gases[/datum/gas/hypernoblium][MOLES] += nob_formed // I'm not going to nitpick, but N20H10 feels like it should be an explosive more than anything.
-	SET_REACTION_RESULTS(nob_formed)
-	var/energy_released = nob_formed * (NOBLIUM_FORMATION_ENERGY / (max(cached_gases[/datum/gas/bz][MOLES], 1)))
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
-	return REACTING
-
-
-// Halon
-
-/**
- * Halon Formation:
- *
- * Exothermic
- */
-/datum/gas_reaction/halon_formation
-	priority_group = PRIORITY_FORMATION
-	name = "Halon Formation"
-	id = "halon_formation"
-	desc = "Production of halon from BZ and tritium."
-
-/datum/gas_reaction/halon_formation/init_reqs()
-	requirements = list(
-		/datum/gas/bz = MINIMUM_MOLE_COUNT,
-		/datum/gas/tritium = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = HALON_FORMATION_MIN_TEMPERATURE,
-		"MAX_TEMP" = HALON_FORMATION_MAX_TEMPERATURE,
-	)
-
-/datum/gas_reaction/halon_formation/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-	var/heat_efficency = min(temperature * 0.01, cached_gases[/datum/gas/tritium][MOLES] * INVERSE(4), cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.25))
-	if (heat_efficency <= 0 || (cached_gases[/datum/gas/tritium][MOLES] - heat_efficency * 4 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing.
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/halon, air)
-	cached_gases[/datum/gas/tritium][MOLES] -= heat_efficency * 4
-	cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25
-	cached_gases[/datum/gas/halon][MOLES] += heat_efficency * 4.25
-
-	SET_REACTION_RESULTS(heat_efficency * 4.25)
-	var/energy_released = heat_efficency * HALON_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
-	return REACTING
-
-
-/**
- * Halon Combustion:
- *
- * Consumes a large amount of oxygen relative to the amount of halon consumed.
- * Produces carbon dioxide.
- * Endothermic.
- */
-/datum/gas_reaction/halon_o2removal
-	priority_group = PRIORITY_PRE_FORMATION
-	name = "Halon Oxygen Absorption"
-	id = "halon_o2removal"
-	desc = "Halon interaction with oxygen that can be used to snuff fires out."
-
-/datum/gas_reaction/halon_o2removal/init_reqs()
-	requirements = list(
-		/datum/gas/halon = MINIMUM_MOLE_COUNT,
-		/datum/gas/oxygen = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST,
-	)
-
-/datum/gas_reaction/halon_o2removal/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-
-	var/heat_efficency = min(temperature / ( FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 10), cached_gases[/datum/gas/halon][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(20))
-	if (heat_efficency <= 0 || (cached_gases[/datum/gas/halon][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency * 20 < 0)) //Shouldn't produce gas from nothing.
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/carbon_dioxide, air)
-	cached_gases[/datum/gas/halon][MOLES] -= heat_efficency
-	cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency * 20
-	cached_gases[/datum/gas/carbon_dioxide][MOLES] += heat_efficency * 5
-
-	SET_REACTION_RESULTS(heat_efficency * 5)
-	var/energy_used = heat_efficency * HALON_COMBUSTION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity), TCMB)
-	return REACTING
-
-
-// Healium
-
-/**
- * Healium Formation:
- *
- * Exothermic
- */
-/datum/gas_reaction/healium_formation
-	priority_group = PRIORITY_FORMATION
-	name = "Healium Formation"
-	id = "healium_formation"
-	desc = "Production of healium using BZ and freon."
-
-/datum/gas_reaction/healium_formation/init_reqs()
-	requirements = list(
-		/datum/gas/bz = MINIMUM_MOLE_COUNT,
-		/datum/gas/freon = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = HEALIUM_FORMATION_MIN_TEMP,
-		"MAX_TEMP" = HEALIUM_FORMATION_MAX_TEMP,
-	)
-
-/datum/gas_reaction/healium_formation/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-	var/heat_efficency = min(temperature * 0.3, cached_gases[/datum/gas/freon][MOLES] * INVERSE(2.75), cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.25))
-	if (heat_efficency <= 0 || (cached_gases[/datum/gas/freon][MOLES] - heat_efficency * 2.75 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing.
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/healium, air)
-	cached_gases[/datum/gas/freon][MOLES] -= heat_efficency * 2.75
-	cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25
-	cached_gases[/datum/gas/healium][MOLES] += heat_efficency * 3
-
-	SET_REACTION_RESULTS(heat_efficency * 3)
-	var/energy_released = heat_efficency * HEALIUM_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
-	return REACTING
-
-/**
- * Zauker Formation:
- *
- * Exothermic.
- * Requires Hypernoblium.
- */
-/datum/gas_reaction/zauker_formation
-	priority_group = PRIORITY_FORMATION
-	name = "Zauker Formation"
-	id = "zauker_formation"
-	desc = "Production of zauker using hyper-noblium and nitrium under very high temperatures."
-
-/datum/gas_reaction/zauker_formation/init_reqs()
-	requirements = list(
-		/datum/gas/hypernoblium = MINIMUM_MOLE_COUNT,
-		/datum/gas/nitrium = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = ZAUKER_FORMATION_MIN_TEMPERATURE,
-		"MAX_TEMP" = ZAUKER_FORMATION_MAX_TEMPERATURE,
-	)
-
-/datum/gas_reaction/zauker_formation/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-
-	var/heat_efficency = min(temperature * ZAUKER_FORMATION_TEMPERATURE_SCALE, cached_gases[/datum/gas/hypernoblium][MOLES] * INVERSE(0.01), cached_gases[/datum/gas/nitrium][MOLES] * INVERSE(0.5))
-	if (heat_efficency <= 0 || (cached_gases[/datum/gas/hypernoblium][MOLES] - heat_efficency * 0.01 < 0 ) || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficency * 0.5 < 0)) //Shouldn't produce gas from nothing.
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/zauker, air)
-	cached_gases[/datum/gas/hypernoblium][MOLES] -= heat_efficency * 0.01
-	cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficency * 0.5
-	cached_gases[/datum/gas/zauker][MOLES] += heat_efficency * 0.5
-
-	SET_REACTION_RESULTS(heat_efficency * 0.5)
-	var/energy_used = heat_efficency * ZAUKER_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity), TCMB)
-	return REACTING
-
-
-/**
- * Zauker Decomposition:
- *
- * Occurs in the presence of nitrogen to prevent zauker floods.
- * Exothermic.
- */
-/datum/gas_reaction/zauker_decomp
-	priority_group = PRIORITY_POST_FORMATION
-	name = "Zauker Decomposition"
-	id = "zauker_decomp"
-	desc = "Decomposition of zauker when exposed to nitrogen."
-
-/datum/gas_reaction/zauker_decomp/init_reqs()
-	requirements = list(
-		/datum/gas/nitrogen = MINIMUM_MOLE_COUNT,
-		/datum/gas/zauker = MINIMUM_MOLE_COUNT,
-	)
-
-/datum/gas_reaction/zauker_decomp/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow
-	var/burned_fuel = min(ZAUKER_DECOMPOSITION_MAX_RATE, cached_gases[/datum/gas/nitrogen][MOLES], cached_gases[/datum/gas/zauker][MOLES])
-	if (burned_fuel <= 0 || cached_gases[/datum/gas/zauker][MOLES] - burned_fuel < 0)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	cached_gases[/datum/gas/zauker][MOLES] -= burned_fuel
-	ASSERT_GAS(/datum/gas/oxygen, air)
-	cached_gases[/datum/gas/oxygen][MOLES] += burned_fuel * 0.3
-	ASSERT_GAS(/datum/gas/nitrogen, air)
-	cached_gases[/datum/gas/nitrogen][MOLES] += burned_fuel * 0.7
-
-	SET_REACTION_RESULTS(burned_fuel)
-	var/energy_released = ZAUKER_DECOMPOSITION_ENERGY * burned_fuel
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
-	return REACTING
-
-
-// Proto-Nitrate
-
-/**
- * Proto-Nitrate formation:
- *
- * Exothermic.
- */
-/datum/gas_reaction/proto_nitrate_formation
-	priority_group = PRIORITY_FORMATION
-	name = "Proto Nitrate Formation"
-	id = "proto_nitrate_formation"
-	desc = "Production of proto-nitrate from pluoxium and hydrogen under high temperatures."
-
-/datum/gas_reaction/proto_nitrate_formation/init_reqs()
-	requirements = list(
-		/datum/gas/pluoxium = MINIMUM_MOLE_COUNT,
-		/datum/gas/hydrogen = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = PN_FORMATION_MIN_TEMPERATURE,
-		"MAX_TEMP" = PN_FORMATION_MAX_TEMPERATURE,
-	)
-
-/datum/gas_reaction/proto_nitrate_formation/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-
-	var/heat_efficency = min(temperature * 0.005, cached_gases[/datum/gas/pluoxium][MOLES] * INVERSE(0.2), cached_gases[/datum/gas/hydrogen][MOLES] * INVERSE(2))
-	if (heat_efficency <= 0 || (cached_gases[/datum/gas/pluoxium][MOLES] - heat_efficency * 0.2 < 0 ) || (cached_gases[/datum/gas/hydrogen][MOLES] - heat_efficency * 2 < 0)) //Shouldn't produce gas from nothing.
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	ASSERT_GAS(/datum/gas/proto_nitrate, air)
-	cached_gases[/datum/gas/hydrogen][MOLES] -= heat_efficency * 2
-	cached_gases[/datum/gas/pluoxium][MOLES] -= heat_efficency * 0.2
-	cached_gases[/datum/gas/proto_nitrate][MOLES] += heat_efficency * 2.2
-
-	SET_REACTION_RESULTS(heat_efficency * 2.2)
-	var/energy_released = heat_efficency * PN_FORMATION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max(((temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB)
-	return REACTING
-
-/**
- * Proto-Nitrate Hydrogen Conversion
- *
- * Converts hydrogen into proto-nitrate.
- * Endothermic.
- */
-/datum/gas_reaction/proto_nitrate_hydrogen_response
-	priority_group = PRIORITY_PRE_FORMATION
-	name = "Proto Nitrate Hydrogen Response"
-	id = "proto_nitrate_hydrogen_response"
-	desc = "Conversion of hydrogen into proto nitrate."
-
-/datum/gas_reaction/proto_nitrate_hydrogen_response/init_reqs()
-	requirements = list(
-		/datum/gas/proto_nitrate = MINIMUM_MOLE_COUNT,
-		/datum/gas/hydrogen = PN_HYDROGEN_CONVERSION_THRESHOLD,
-	)
-
-/datum/gas_reaction/proto_nitrate_hydrogen_response/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/produced_amount = min(PN_HYDROGEN_CONVERSION_MAX_RATE, cached_gases[/datum/gas/hydrogen][MOLES], cached_gases[/datum/gas/proto_nitrate][MOLES])
-	if (produced_amount <= 0 || cached_gases[/datum/gas/hydrogen][MOLES] - produced_amount < 0)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	cached_gases[/datum/gas/hydrogen][MOLES] -= produced_amount
-	cached_gases[/datum/gas/proto_nitrate][MOLES] += produced_amount * 0.5
-
-	SET_REACTION_RESULTS(produced_amount * 0.5)
-	var/energy_used = produced_amount * PN_HYDROGEN_CONVERSION_ENERGY
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max((air.temperature * old_heat_capacity - energy_used) / new_heat_capacity, TCMB)
-	return REACTING
-
-/**
- * Proto-Nitrate Tritium De-irradiation
- *
- * Converts tritium to hydrogen.
- * Releases radiation.
- * Exothermic.
- */
-/datum/gas_reaction/proto_nitrate_tritium_response
-	priority_group = PRIORITY_PRE_FORMATION
-	name = "Proto Nitrate Tritium Response"
-	id = "proto_nitrate_tritium_response"
-	desc = "Conversion of tritium into hydrogen that consumes a small amount of proto-nitrate."
-
-/datum/gas_reaction/proto_nitrate_tritium_response/init_reqs()
-	requirements = list(
-		/datum/gas/proto_nitrate = MINIMUM_MOLE_COUNT,
-		/datum/gas/tritium = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = PN_TRITIUM_CONVERSION_MIN_TEMP,
-		"MAX_TEMP" = PN_TRITIUM_CONVERSION_MAX_TEMP,
-	)
-
-/datum/gas_reaction/proto_nitrate_tritium_response/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-	var/produced_amount = min(air.temperature / 34 * (cached_gases[/datum/gas/tritium][MOLES] * cached_gases[/datum/gas/proto_nitrate][MOLES]) / (cached_gases[/datum/gas/tritium][MOLES] + 10 * cached_gases[/datum/gas/proto_nitrate][MOLES]), cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/proto_nitrate][MOLES] * INVERSE(0.01))
-	if(cached_gases[/datum/gas/tritium][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/proto_nitrate][MOLES] - produced_amount * 0.01 < 0)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	cached_gases[/datum/gas/proto_nitrate][MOLES] -= produced_amount * 0.01
-	cached_gases[/datum/gas/tritium][MOLES] -= produced_amount
-	ASSERT_GAS(/datum/gas/hydrogen, air)
-	cached_gases[/datum/gas/hydrogen][MOLES] += produced_amount
-
-	SET_REACTION_RESULTS(produced_amount)
-	var/turf/open/location
-	var/energy_released = produced_amount * PN_TRITIUM_CONVERSION_ENERGY
-	if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet.
-		var/datum/pipeline/pipenet = holder
-		location = pick(pipenet.members)
-	else if(isatom(holder))
-		location = holder
-	if (location && energy_released > PN_BZASE_RAD_RELEASE_THRESHOLD * (air.volume / CELL_VOLUME) ** ATMOS_RADIATION_VOLUME_EXP)
-		radiation_pulse(location, max_range = min(sqrt(produced_amount) / PN_TRITIUM_RAD_RANGE_DIVISOR, 20), threshold = PN_TRITIUM_RAD_THRESHOLD_BASE * INVERSE(PN_TRITIUM_RAD_THRESHOLD_BASE + produced_amount), chance = 50)
-
-	if(energy_released)
-		var/new_heat_capacity = air.getHeatCapacity()
-		if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-			air.temperature = max((temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
-	return REACTING
-
-/**
- * Proto-Nitrate BZase Action
- *
- * Breaks BZ down into nitrogen, helium, and plasma in the presence of proto-nitrate.
- */
-/datum/gas_reaction/proto_nitrate_bz_response
-	priority_group = PRIORITY_PRE_FORMATION
-	name = "Proto Nitrate BZ Response"
-	id = "proto_nitrate_bz_response"
-	desc = "Breakdown of BZ into nitrogen, helium, and plasma by proto-nitrate under low temperatures."
-
-/datum/gas_reaction/proto_nitrate_bz_response/init_reqs()
-	requirements = list(
-		/datum/gas/proto_nitrate = MINIMUM_MOLE_COUNT,
-		/datum/gas/bz = MINIMUM_MOLE_COUNT,
-		"MIN_TEMP" = PN_BZASE_MIN_TEMP,
-		"MAX_TEMP" = PN_BZASE_MAX_TEMP,
-	)
-
-/datum/gas_reaction/proto_nitrate_bz_response/react(datum/gas_mixture/air, datum/holder)
-	var/list/cached_gases = air.gases
-	var/temperature = air.temperature
-	var/consumed_amount = min(air.temperature / 2240 * cached_gases[/datum/gas/bz][MOLES] * cached_gases[/datum/gas/proto_nitrate][MOLES] / (cached_gases[/datum/gas/bz][MOLES] + cached_gases[/datum/gas/proto_nitrate][MOLES]), cached_gases[/datum/gas/bz][MOLES], cached_gases[/datum/gas/proto_nitrate][MOLES])
-	if (consumed_amount <= 0 || cached_gases[/datum/gas/bz][MOLES] - consumed_amount < 0)
-		return NO_REACTION
-
-	var/old_heat_capacity = air.getHeatCapacity()
-	cached_gases[/datum/gas/bz][MOLES] -= consumed_amount
-	ASSERT_GAS(/datum/gas/nitrogen, air)
-	cached_gases[/datum/gas/nitrogen][MOLES] += consumed_amount * 0.4
-	ASSERT_GAS(/datum/gas/helium, air)
-	cached_gases[/datum/gas/helium][MOLES] += consumed_amount * 1.6
-	ASSERT_GAS(/datum/gas/plasma, air)
-	cached_gases[/datum/gas/plasma][MOLES] += consumed_amount * 0.8
-
-	SET_REACTION_RESULTS(consumed_amount)
-	var/turf/open/location
-	var/energy_released = consumed_amount * PN_BZASE_ENERGY
-	if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet.
-		var/datum/pipeline/pipenet = holder
-		location = pick(pipenet.members)
-	else if(isatom(holder))
-		location = holder
-	if (location && energy_released > PN_TRITIUM_CONVERSION_RAD_RELEASE_THRESHOLD * (air.volume / CELL_VOLUME) ** ATMOS_RADIATION_VOLUME_EXP)
-		radiation_pulse(location, max_range = min(sqrt(consumed_amount) / PN_BZASE_RAD_RANGE_DIVISOR, 20), threshold = PN_BZASE_RAD_THRESHOLD_BASE * INVERSE(PN_BZASE_RAD_THRESHOLD_BASE + consumed_amount), chance = 50)
-		for(var/mob/living/carbon/L in location)
-			L.hallucination += consumed_amount
-
-	var/new_heat_capacity = air.getHeatCapacity()
-	if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
-		air.temperature = max((temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB)
-	return REACTING
-
-#undef SET_REACTION_RESULTS
diff --git a/code/modules/atmospherics/machinery/bluespace_vendor.dm b/code/modules/atmospherics/machinery/bluespace_vendor.dm
deleted file mode 100644
index ad817e8666e..00000000000
--- a/code/modules/atmospherics/machinery/bluespace_vendor.dm
+++ /dev/null
@@ -1,282 +0,0 @@
-/obj/item/wallframe/bluespace_vendor_mount
-	name = "bluespace vendor wall mount"
-	desc = "Used for placing bluespace vendors."
-	icon = 'icons/obj/atmospherics/components/bluespace_gas_selling.dmi'
-	icon_state = "bluespace_vendor_open"
-	result_path = /obj/machinery/bluespace_vendor/built
-	pixel_shift = 30
-
-///Defines for the mode of the vendor
-#define BS_MODE_OFF 1
-#define BS_MODE_IDLE 2
-#define BS_MODE_PUMPING 3
-#define BS_MODE_OPEN 4
-
-/obj/machinery/bluespace_vendor
-	icon = 'icons/obj/atmospherics/components/bluespace_gas_selling.dmi'
-	icon_state = "bluespace_vendor_off"
-	name = "Bluespace Gas Vendor"
-	desc = "Sells gas tanks with custom mixes for all the family!"
-
-	max_integrity = 300
-	armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 80, ACID = 30)
-	layer = OBJ_LAYER
-
-	///The bluespace sender that this vendor is connected to
-	var/obj/machinery/atmospherics/components/unary/bluespace_sender/connected_machine
-	///Amount of usable tanks inside the machine
-	var/empty_tanks = 10
-	///Reference to the current in use tank to be filled
-	var/obj/item/tank/internals/generic/internal_tank
-	///Path of the gas selected from the UI to be pumped inside the tanks
-	var/selected_gas
-	///Is the vendor trying to move gases from the network to the tanks?
-	var/pumping = FALSE
-	///Has the user prepared a tank to be filled with gases?
-	var/inserted_tank = FALSE
-	///Amount of the tank already filled with gas (from 0 to 100)
-	var/tank_filling_amount = 0
-	///Base price of the tank
-	var/tank_cost = 10
-	///Stores the current price of the gases inside the tank
-	var/gas_price = 0
-	///Helper for mappers, will automatically connect to the sender (ensure to only place one sender per map)
-	var/map_spawned = TRUE
-	///Base icon name for updating the appearance
-	var/base_icon = "bluespace_vendor"
-	///Current operating mode of the vendor
-	var/mode = BS_MODE_OFF
-
-//The one that the players make
-/obj/machinery/bluespace_vendor/built
-	map_spawned = FALSE
-	mode = BS_MODE_OPEN
-
-MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/bluespace_vendor, 30)
-
-/obj/machinery/bluespace_vendor/New(loc, ndir, nbuild)
-	. = ..()
-
-	if(nbuild)
-		panel_open = TRUE
-
-	update_appearance()
-
-/obj/machinery/bluespace_vendor/Initialize(mapload)
-	. = ..()
-	AddComponent(/datum/component/payment, tank_cost, SSeconomy.get_dep_account(ACCOUNT_ENG), PAYMENT_ANGRY)
-
-/obj/machinery/bluespace_vendor/LateInitialize()
-	. = ..()
-	if(!map_spawned)
-		return
-	for(var/obj/machinery/atmospherics/components/unary/bluespace_sender/sender in GLOB.machines)
-		register_machine(sender)
-
-/obj/machinery/bluespace_vendor/Destroy()
-	unregister_machine()
-	return ..()
-
-/obj/machinery/bluespace_vendor/update_icon_state()
-	switch(mode)
-		if(BS_MODE_OFF)
-			icon_state = "[base_icon]_off"
-		if(BS_MODE_IDLE)
-			icon_state = "[base_icon]_idle"
-		if(BS_MODE_PUMPING)
-			icon_state = "[base_icon]_pumping"
-		if(BS_MODE_OPEN)
-			icon_state = "[base_icon]_open"
-	return ..()
-
-/obj/machinery/bluespace_vendor/Exited(atom/movable/gone, direction)
-	if(gone == internal_tank)
-		internal_tank = null
-	return ..()
-
-/obj/machinery/bluespace_vendor/process()
-	if(mode == BS_MODE_OPEN)
-		return
-	if(!selected_gas)
-		return
-	var/gas_path = gas_id2path(selected_gas)
-
-	if(!connected_machine.bluespace_network.gases[gas_path])
-		pumping = FALSE
-		selected_gas = null
-		mode = BS_MODE_IDLE
-		update_appearance()
-		return
-
-	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))
-		return
-	if(!istype(multitool.buffer, /obj/machinery/atmospherics/components/unary/bluespace_sender))
-		to_chat(user, span_notice("Wrong machine type in [multitool] buffer..."))
-		return
-	if(connected_machine)
-		to_chat(user, span_notice("Changing [src] bluespace network..."))
-	if(!do_after(user, 0.2 SECONDS, src))
-		return
-	playsound(get_turf(user), 'sound/machines/click.ogg', 10, TRUE)
-	register_machine(multitool.buffer)
-	to_chat(user, span_notice("You link [src] to the console in [multitool]'s buffer."))
-	return TRUE
-
-/obj/machinery/bluespace_vendor/attackby(obj/item/item, mob/living/user)
-	if(!pumping && default_deconstruction_screwdriver(user, "[base_icon]_open", "[base_icon]_off", item))
-		check_mode()
-		return
-	if(default_deconstruction_crowbar(item, FALSE, custom_deconstruct = TRUE))
-		new/obj/item/wallframe/bluespace_vendor_mount(user.loc)
-		qdel(src)
-		return
-
-	if(istype(item, /obj/item/stack/sheet/iron))
-		var/obj/item/stack/sheet/iron/iron = item
-		if (iron.use(1))
-			empty_tanks++
-			return TRUE
-	return ..()
-
-/obj/machinery/bluespace_vendor/examine(mob/user)
-	. = ..()
-	if(empty_tanks > 1)
-		. += span_notice("There are currently [empty_tanks] empty tanks available, more can be made by inserting iron sheets in the machine.")
-	else if(empty_tanks == 1)
-		. += span_notice("There is only one empty tank available, please refill the machine by using iron sheets.")
-	else
-		. += span_notice("There is no available tank, please refill the machine by using iron sheets.")
-
-///Check what is the current operating mode
-/obj/machinery/bluespace_vendor/proc/check_mode()
-	if(panel_open)
-		mode = BS_MODE_OPEN
-	else if(connected_machine)
-		mode = BS_MODE_IDLE
-	else
-		mode = BS_MODE_OFF
-	update_appearance()
-
-///Register the sender as the connected_machine
-/obj/machinery/bluespace_vendor/proc/register_machine(machine)
-	connected_machine = machine
-	LAZYADD(connected_machine.vendors, src)
-	RegisterSignal(connected_machine, COMSIG_PARENT_QDELETING, .proc/unregister_machine)
-	mode = BS_MODE_IDLE
-	update_appearance()
-
-///Unregister the connected_machine (either when qdel this or the sender)
-/obj/machinery/bluespace_vendor/proc/unregister_machine()
-	SIGNAL_HANDLER
-	if(connected_machine)
-		UnregisterSignal(connected_machine, COMSIG_PARENT_QDELETING)
-		LAZYREMOVE(connected_machine.vendors, src)
-		connected_machine = null
-	mode = BS_MODE_OFF
-	update_appearance()
-
-///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/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 = working_mix.removeRatio(1)
-		connected_machine.bluespace_network.merge(remove)
-		return
-	connected_machine.credits_gained += gas_price + tank_cost
-
-	if(internal_tank && Adjacent(user)) //proper capitalysm take money before goods
-		inserted_tank = FALSE
-		user.put_in_hands(internal_tank)
-
-/obj/machinery/bluespace_vendor/ui_interact(mob/user, datum/tgui/ui)
-	if(!connected_machine || mode == BS_MODE_OPEN)
-		return
-	ui = SStgui.try_update_ui(user, src, ui)
-	if(!ui)
-		ui = new(user, src, "BluespaceVendor", name)
-		ui.open()
-
-/obj/machinery/bluespace_vendor/ui_data(mob/user)
-	var/list/data = list()
-	var/list/bluespace_gasdata = list()
-	if(connected_machine.bluespace_network.get_moles())
-		for(var/gas_id in connected_machine.bluespace_network.gases)
-			bluespace_gasdata.Add(list(list(
-			"name" = connected_machine.bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
-			"id" = connected_machine.bluespace_network.gases[gas_id][GAS_META][META_GAS_ID],
-			"amount" = round(connected_machine.bluespace_network.gases[gas_id][MOLES], 0.01),
-			"price" = connected_machine.base_prices[gas_id],
-			)))
-	else
-		for(var/gas_id in connected_machine.bluespace_network.gases)
-			bluespace_gasdata.Add(list(list(
-				"name" = connected_machine.bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
-				"id" = "",
-				"amount" = 0,
-				"price" = 0,
-				)))
-	data["bluespace_network_gases"] = bluespace_gasdata
-	data["pumping"] = pumping
-	data["tank_filling_amount"] = tank_filling_amount
-	data["selected_gas"] = selected_gas
-	data["tank_amount"] = empty_tanks
-	data["inserted_tank"] = inserted_tank
-	var/total_tank_pressure
-	if(internal_tank)
-		var/datum/gas_mixture/working_mix = internal_tank.return_air()
-		total_tank_pressure = working_mix.returnPressure()
-	else
-		total_tank_pressure = 0
-	data["tank_full"] = total_tank_pressure
-	return data
-
-/obj/machinery/bluespace_vendor/ui_act(action, params)
-	. = ..()
-	if(.)
-		return
-
-	if(mode == BS_MODE_OPEN)
-		return
-
-	switch(action)
-		if("start_pumping")
-			if(inserted_tank && !pumping)
-				pumping = TRUE
-				selected_gas = params["gas_id"]
-				mode = BS_MODE_PUMPING
-				update_appearance()
-			. = TRUE
-		if("stop_pumping")
-			if(inserted_tank && pumping)
-				pumping = FALSE
-				selected_gas = null
-				mode = BS_MODE_IDLE
-				update_appearance()
-			. = TRUE
-		if("pumping_rate")
-			tank_filling_amount = clamp(params["rate"], 0, 100)
-			. = TRUE
-		if("tank_prepare")
-			if(empty_tanks && !inserted_tank)
-				inserted_tank = TRUE
-				internal_tank = new(src)
-				empty_tanks = max(empty_tanks - 1, 0)
-			. = TRUE
-		if("tank_expel")
-			if(inserted_tank && !pumping)
-				check_price(usr)
-			. = TRUE
-
-#undef BS_MODE_OFF
-#undef BS_MODE_IDLE
-#undef BS_MODE_PUMPING
-#undef BS_MODE_OPEN
diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
deleted file mode 100644
index b4f9df6f42e..00000000000
--- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
+++ /dev/null
@@ -1,212 +0,0 @@
-#define ELECTROLYZER_MODE_STANDBY "standby"
-#define ELECTROLYZER_MODE_WORKING "working"
-
-/obj/machinery/electrolyzer
-	anchored = FALSE
-	density = TRUE
-	interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN
-	icon = 'icons/obj/atmos.dmi'
-	icon_state = "electrolyzer-off"
-	name = "space electrolyzer"
-	desc = "Thanks to the fast and dynamic response of our electrolyzers, on-site hydrogen production is guaranteed. Warranty void if used by clowns"
-	max_integrity = 250
-	armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 80, ACID = 10)
-	circuit = /obj/item/circuitboard/machine/electrolyzer
-	/// We don't use area power, we always use the cell
-	use_power = NO_POWER_USE
-	///used to check if there is a cell in the machine
-	var/obj/item/stock_parts/cell/cell
-	///check if the machine is on or off
-	var/on = FALSE
-	///check what mode the machine should be (WORKING, STANDBY)
-	var/mode = ELECTROLYZER_MODE_STANDBY
-	///Increase the amount of moles worked on, changed by upgrading the manipulator tier
-	var/working_power = 1
-	///Decrease the amount of power usage, changed by upgrading the capacitor tier
-	var/efficiency = 0.5
-
-/obj/machinery/electrolyzer/get_cell()
-	return cell
-
-/obj/machinery/electrolyzer/Initialize(mapload)
-	. = ..()
-	if(ispath(cell))
-		cell = new cell(src)
-	SSairmachines.start_processing_machine(src)
-	update_appearance()
-
-/obj/machinery/electrolyzer/Destroy()
-	if(cell)
-		QDEL_NULL(cell)
-	return ..()
-
-/obj/machinery/electrolyzer/on_deconstruction()
-	if(cell)
-		LAZYADD(component_parts, cell)
-		cell = null
-	return ..()
-
-/obj/machinery/electrolyzer/examine(mob/user)
-	. = ..()
-	. += "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]."
-
-	if(cell)
-		. += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%."
-	else
-		. += "There is no power cell installed."
-
-/obj/machinery/electrolyzer/update_icon_state()
-	icon_state = "electrolyzer-[on ? "[mode]" : "off"]"
-	return ..()
-
-/obj/machinery/electrolyzer/update_overlays()
-	. = ..()
-	if(panel_open)
-		. += "electrolyzer-open"
-
-/obj/machinery/electrolyzer/process_atmos()
-
-	if(!is_operational && on)
-		on = FALSE
-	if(!on)
-		return PROCESS_KILL
-
-	if((!cell || cell.charge <= 0) && !anchored)
-		on = FALSE
-		update_appearance()
-		return PROCESS_KILL
-
-	var/turf/our_turf = loc
-	if(!istype(our_turf))
-		if(mode != ELECTROLYZER_MODE_STANDBY)
-			mode = ELECTROLYZER_MODE_STANDBY
-			update_appearance()
-		return
-
-	var/new_mode = on ? ELECTROLYZER_MODE_WORKING : ELECTROLYZER_MODE_STANDBY //change the mode to working if the machine is on
-
-	if(mode != new_mode) //check if the mode is set correctly
-		mode = new_mode
-		update_appearance()
-
-	if(mode == ELECTROLYZER_MODE_STANDBY)
-		return
-
-	var/datum/gas_mixture/env = our_turf.return_air() //get air from the turf
-
-	if(!env)
-		return
-
-	call_reactions(env)
-
-	//air_update_turf(FALSE, FALSE)
-
-	if(anchored)
-		return
-
-	cell.use((5 * (3 * working_power) * working_power) / (efficiency + working_power))
-
-/obj/machinery/electrolyzer/proc/call_reactions(datum/gas_mixture/env)
-	for(var/reaction in GLOB.electrolyzer_reactions)
-		var/datum/electrolyzer_reaction/current_reaction = GLOB.electrolyzer_reactions[reaction]
-
-		if(!current_reaction.reaction_check(env))
-			continue
-
-		current_reaction.react(loc, env, working_power)
-
-/obj/machinery/electrolyzer/RefreshParts()
-	. = ..()
-	var/manipulator = 0
-	var/cap = 0
-	for(var/obj/item/stock_parts/manipulator/M in component_parts)
-		manipulator += M.rating
-	for(var/obj/item/stock_parts/capacitor/M in component_parts)
-		cap += M.rating
-
-	working_power = manipulator //used in the amount of moles processed
-
-	efficiency = (cap + 1) * 0.5 //used in the amount of charge in power cell uses
-
-/obj/machinery/electrolyzer/screwdriver_act(mob/living/user, obj/item/tool)
-	tool.play_tool_sound(src, 50)
-	panel_open = !panel_open
-	user.visible_message(span_notice("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src]."), span_notice("You [panel_open ? "open" : "close"] the hatch on \the [src]."))
-	update_appearance()
-	return TRUE
-
-/obj/machinery/electrolyzer/wrench_act(mob/living/user, obj/item/tool)
-	. = ..()
-	default_unfasten_wrench(user, tool)
-	return TOOL_ACT_TOOLTYPE_SUCCESS
-
-/obj/machinery/electrolyzer/crowbar_act(mob/living/user, obj/item/tool)
-	return default_deconstruction_crowbar(tool)
-
-/obj/machinery/electrolyzer/default_unfasten_wrench(mob/user, obj/item/wrench, time)
-	. = ..()
-	if(anchored)
-		update_use_power(ACTIVE_POWER_USE)
-	else
-		update_use_power(NO_POWER_USE)
-
-/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, params)
-	add_fingerprint(user)
-	if(istype(I, /obj/item/stock_parts/cell))
-		if(!panel_open)
-			to_chat(user, span_warning("The hatch must be open to insert a power cell!"))
-			return
-		if(cell)
-			to_chat(user, span_warning("There is already a power cell inside!"))
-			return
-		if(!user.transferItemToLoc(I, src))
-			return
-		cell = I
-		I.add_fingerprint(usr)
-
-		user.visible_message(span_notice("\The [user] inserts a power cell into \the [src]."), span_notice("You insert the power cell into \the [src]."))
-		SStgui.update_uis(src)
-
-		return
-	return ..()
-
-/obj/machinery/electrolyzer/ui_state(mob/user)
-	return GLOB.physical_state
-
-/obj/machinery/electrolyzer/ui_interact(mob/user, datum/tgui/ui)
-	ui = SStgui.try_update_ui(user, src, ui)
-	if(!ui)
-		ui = new(user, src, "Electrolyzer", name)
-		ui.open()
-
-/obj/machinery/electrolyzer/ui_data()
-	var/list/data = list()
-	data["open"] = panel_open
-	data["on"] = on
-	data["hasPowercell"] = !isnull(cell)
-	data["anchored"] = anchored
-	if(cell)
-		data["powerLevel"] = round(cell.percent(), 1)
-	return data
-
-/obj/machinery/electrolyzer/ui_act(action, params)
-	. = ..()
-	if(.)
-		return
-	switch(action)
-		if("power")
-			on = !on
-			mode = ELECTROLYZER_MODE_STANDBY
-			usr.visible_message(span_notice("[usr] switches [on ? "on" : "off"] \the [src]."), span_notice("You switch [on ? "on" : "off"] \the [src]."))
-			update_appearance()
-			if (on)
-				SSair.start_processing_machine(src)
-			. = TRUE
-		if("eject")
-			if(panel_open && cell)
-				cell.forceMove(drop_location())
-				cell = null
-				. = TRUE
-
-#undef ELECTROLYZER_MODE_STANDBY
-#undef ELECTROLYZER_MODE_WORKING
diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm
deleted file mode 100644
index 8098608640c..00000000000
--- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer_reactions.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-GLOBAL_LIST_INIT(electrolyzer_reactions, electrolyzer_reactions_list())
-
-/*
- * Global proc to build the electrolyzer reactions list
- */
-/proc/electrolyzer_reactions_list()
-	var/list/built_reaction_list = list()
-	for(var/reaction_path in subtypesof(/datum/electrolyzer_reaction))
-		var/datum/electrolyzer_reaction/reaction = new reaction_path()
-
-		built_reaction_list[reaction.id] = reaction
-
-	return built_reaction_list
-
-/datum/electrolyzer_reaction
-	var/list/requirements
-	var/name = "reaction"
-	var/id = "r"
-
-/datum/electrolyzer_reaction/proc/react(turf/location, datum/gas_mixture/air_mixture, working_power)
-	return
-
-/datum/electrolyzer_reaction/proc/reaction_check(datum/gas_mixture/air_mixture)
-	var/temp = air_mixture.temperature
-	var/list/cached_gases = air_mixture.gases
-	if((requirements["MIN_TEMP"] && temp < requirements["MIN_TEMP"]) || (requirements["MAX_TEMP"] && temp > requirements["MAX_TEMP"]))
-		return FALSE
-	for(var/id in requirements)
-		if (id == "MIN_TEMP" || id == "MAX_TEMP")
-			continue
-		if(!cached_gases[id] || cached_gases[id][MOLES] < requirements[id])
-			return FALSE
-	return TRUE
-
-/datum/electrolyzer_reaction/h2o_conversion
-	name = "H2O Conversion"
-	id = "h2o_conversion"
-	requirements = list(
-		/datum/gas/water_vapor = MINIMUM_MOLE_COUNT
-	)
-
-/datum/electrolyzer_reaction/h2o_conversion/react(turf/location, datum/gas_mixture/air_mixture, working_power)
-
-	air_mixture.assert_gases(/datum/gas/water_vapor, /datum/gas/oxygen, /datum/gas/hydrogen)
-	var/proportion = min(air_mixture.gases[/datum/gas/water_vapor][MOLES], (2.5 * (working_power ** 2)))
-	air_mixture.gases[/datum/gas/water_vapor][MOLES] -= proportion * 2
-	air_mixture.gases[/datum/gas/oxygen][MOLES] += proportion
-	air_mixture.gases[/datum/gas/hydrogen][MOLES] += proportion * 2
-
-/datum/electrolyzer_reaction/nob_conversion
-	name = "Hypernob conversion"
-	id = "nob_conversion"
-	requirements = list(
-		/datum/gas/hypernoblium = MINIMUM_MOLE_COUNT,
-		"MAX_TEMP" = 150
-	)
-
-/datum/electrolyzer_reaction/nob_conversion/react(turf/location, datum/gas_mixture/air_mixture, working_power)
-
-	air_mixture.assert_gases(/datum/gas/hypernoblium, /datum/gas/antinoblium)
-	var/proportion = min(air_mixture.gases[/datum/gas/hypernoblium][MOLES], (1.5 * (working_power ** 2)))
-	air_mixture.gases[/datum/gas/hypernoblium][MOLES] -= proportion
-	air_mixture.gases[/datum/gas/antinoblium][MOLES] += proportion * 0.5
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm
deleted file mode 100644
index d51fbdbefee..00000000000
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * This section contain the hfr core with all the variables and the Initialize() and Destroy() procs
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core
-	name = "HFR core"
-	desc = "This is the Hypertorus Fusion Reactor core, an advanced piece of technology to finely tune the reaction inside of the machine. It has I/O for cooling gases."
-	icon = 'icons/obj/atmospherics/components/hypertorus.dmi'
-	icon_state = "core_off"
-	circuit = /obj/item/circuitboard/machine/HFR_core
-	use_power = IDLE_POWER_USE
-	idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION
-	///Vars for the state of the icon of the object (open, off, active)
-	icon_state_open = "core_open"
-	icon_state_off = "core_off"
-	icon_state_active = "core_active"
-
-	/**
-	 * Processing checks
-	 */
-
-	///Checks if the user has started the machine
-	var/start_power = FALSE
-	///Checks for the cooling to start
-	var/start_cooling = FALSE
-	///Checks for the fuel to be injected
-	var/start_fuel = FALSE
-	///Checks for the moderators to be injected
-	var/start_moderator = FALSE
-
-	/**
-	 * Hypertorus internal objects and gasmixes
-	 */
-
-	///Stores the informations of the interface machine
-	var/obj/machinery/hypertorus/interface/linked_interface
-	///Stores the information of the moderator input
-	var/obj/machinery/atmospherics/components/unary/hypertorus/moderator_input/linked_moderator
-	///Stores the information of the fuel input
-	var/obj/machinery/atmospherics/components/unary/hypertorus/fuel_input/linked_input
-	///Stores the information of the waste output
-	var/obj/machinery/atmospherics/components/unary/hypertorus/waste_output/linked_output
-	///Stores the information of the corners of the machine
-	var/list/corners = list()
-	///Stores the three inputs/outputs of the HFR, needed for cracking the parts
-	var/list/machine_parts = list()
-	///Stores the information of the fusion gasmix
-	var/datum/gas_mixture/internal_fusion
-	///Stores the information of the moderators gasmix
-	var/datum/gas_mixture/moderator_internal
-	///Set the filtering list of the waste remove
-	var/list/moderator_scrubbing = list(
-		/datum/gas/helium,
-		)
-	///Set the amount of moles per tick should be removed from the moderator by filtering
-	var/moderator_filtering_rate = 100
-	///Stores the current fuel mix that the user has selected
-	var/datum/hfr_fuel/selected_fuel
-
-	/**
-	 * Fusion vars
-	 */
-
-	///E=mc^2 with some addition to allow it gameplaywise
-	var/energy = 0
-	///Temperature of the center of the fusion reaction
-	var/core_temperature = T20C
-	/**Power emitted from the center of the fusion reaction: Internal power = densityH2 * densityTrit(Pi * (2 * rH2 * rTrit)**2) * Energy
-	* density is calculated with moles/volume, rH2 and rTrit are values calculated with moles/(radius of the gas)
-	both of the density can be varied by the power_modifier
-	**/
-	var/internal_power = 0
-	/**The effective power transmission of the fusion reaction, power_output = efficiency * (internal_power - conduction - radiation)
-	* Conduction is the heat value that is transmitted by the molecular interactions and it gets removed from the internal_power lowering the effective output
-	* Radiation is the irradiation released by the fusion reaction, it comprehends all wavelenghts in the spectrum, it lowers the effective output of the reaction
-	**/
-	var/power_output = 0
-	///Instability effects how chaotic the behavior of the reaction is
-	var/instability = 0
-	///Difference between the gases temperature and the internal temperature of the reaction
-	var/delta_temperature = 0
-	///Energy from the reaction lost from the molecule colliding between themselves.
-	var/conduction = 0
-	///The remaining wavelength that actually can do damage to mobs.
-	var/radiation = 0
-	///Efficiency of the reaction, it increases with the amount of plasma
-	var/efficiency = 0
-	///Hotter air is easier to heat up and cool down
-	var/heat_limiter_modifier = 0
-	///How much the reaction can cool itself
-	var/heat_output_max = 0
-	///How much the reaction can heat itself
-	var/heat_output_min = 0
-	///The amount of heat that is finally emitted, based on the power output. Min and max are variables that depends of the modifier
-	var/heat_output = 0
-
-	///Check if the user want to remove the waste gases
-	var/waste_remove = FALSE
-	///User controlled variable to control the flow of the fusion by changing the contact of the material
-	var/heating_conductor = 100
-	///User controlled variable to control the flow of the fusion by changing the volume of the gasmix by controlling the power of the magnetic fields
-	var/magnetic_constrictor = 100
-	///User controlled variable to control the flow of the fusion by changing the instability of the reaction
-	var/current_damper = 0
-	///Stores the current fusion mix power level
-	var/power_level = 0
-	///Stores the iron content produced by the fusion
-	var/iron_content = 0
-	///User controlled variable to control the flow of the fusion by changing the amount of fuel injected
-	var/fuel_injection_rate = 25
-	///User controlled variable to control the flow of the fusion by changing the amount of moderators injected
-	var/moderator_injection_rate = 25
-
-	///Integrity of the machine, if reaches 900 the machine will explode
-	var/critical_threshold_proximity = 0
-	///Store the integrity for calculations
-	var/critical_threshold_proximity_archived = 0
-	///Our "Shit is no longer fucked" message. We send it when critical_threshold_proximity is less then critical_threshold_proximity_archived
-	var/safe_alert = "Main containment field returning to safe operating parameters."
-	///The point at which we should start sending messeges about the critical_threshold_proximity to the engi channels.
-	var/warning_point = 50
-	///The alert we send when we've reached warning_point
-	var/warning_alert = "Danger! Magnetic containment field faltering!"
-	///The point at which we start sending messages to the common channel
-	var/emergency_point = 700
-	///The alert we send when we've reached emergency_point
-	var/emergency_alert = "HYPERTORUS MELTDOWN IMMINENT."
-	///The point at which we melt
-	var/melting_point = 900
-	///Boolean used for logging if we've passed the emergency point
-	var/has_reached_emergency = FALSE
-	///Time in 1/10th of seconds since the last sent warning
-	var/lastwarning = 0
-
-	///Our internal radio
-	var/obj/item/radio/radio
-	///The key our internal radio uses
-	var/radio_key = /obj/item/encryptionkey/headset_eng
-	///The engineering channel
-	var/engineering_channel = "Engineering"
-	///The common channel
-	var/common_channel = null
-
-	///Our soundloop
-	var/datum/looping_sound/hypertorus/soundloop
-	///cooldown tracker for accent sounds
-	var/last_accent_sound = 0
-
-	///These vars store the temperatures to be used in the GUI
-	var/fusion_temperature_archived = 0
-	var/fusion_temperature = 0
-	var/moderator_temperature_archived = 0
-	var/moderator_temperature = 0
-	var/coolant_temperature_archived = 0
-	var/coolant_temperature = 0
-	var/output_temperature_archived = 0
-	var/output_temperature = 0
-	///Time between current and _archived temperatures
-	var/temperature_period = 1
-	///Var used in the meltdown phase
-	var/final_countdown = FALSE
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/Initialize(mapload)
-	. = ..()
-	internal_fusion = new
-	internal_fusion.volume = 5000
-	moderator_internal = new
-	moderator_internal.volume = 10000
-
-	radio = new(src)
-	radio.keyslot = new radio_key
-	radio.set_listening(FALSE)
-	radio.recalculateChannels()
-	investigate_log("has been created.", INVESTIGATE_HYPERTORUS)
-
-	RegisterSignal(src.loc, COMSIG_ATOM_ENTERED, .proc/on_entered)
-
-	for(var/atom/movable/movable_object in src.loc)
-		SEND_SIGNAL(movable_object, COMSIG_MOVABLE_SECLUDED_LOCATION)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
-	SIGNAL_HANDLER
-	SEND_SIGNAL(arrived, COMSIG_MOVABLE_SECLUDED_LOCATION) // to prevent stationloving items (eg. nuke disk) being teleported onto core
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/Destroy()
-	unregister_signals(TRUE)
-	if(internal_fusion)
-		internal_fusion = null
-	if(moderator_internal)
-		moderator_internal = null
-	if(linked_input)
-		QDEL_NULL(linked_input)
-	if(linked_output)
-		QDEL_NULL(linked_output)
-	if(linked_moderator)
-		QDEL_NULL(linked_moderator)
-	if(linked_interface)
-		QDEL_NULL(linked_interface)
-	for(var/obj/machinery/hypertorus/corner/corner in corners)
-		QDEL_NULL(corner)
-	QDEL_NULL(radio)
-	QDEL_NULL(soundloop)
-	machine_parts = null
-	return..()
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_defines.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_defines.dm
deleted file mode 100644
index 8234f02ba0c..00000000000
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_defines.dm
+++ /dev/null
@@ -1,150 +0,0 @@
-///Speed of light, in m/s
-#define LIGHT_SPEED 299792458
-///Calculation between the plank constant and the lambda of the lightwave
-#define PLANCK_LIGHT_CONSTANT 2e-16
-///Radius of the h2 calculated based on the amount of number of atom in a mole (and some addition for balancing issues)
-#define CALCULATED_H2RADIUS 120e-4
-///Radius of the trit calculated based on the amount of number of atom in a mole (and some addition for balancing issues)
-#define CALCULATED_TRITRADIUS 230e-3
-///Power conduction in the void, used to calculate the efficiency of the reaction
-#define VOID_CONDUCTION 1e-2
-///Mole count required (tritium/hydrogen) to start a fusion reaction
-#define FUSION_MOLE_THRESHOLD 25
-///Used to reduce the gas_power to a more useful amount
-#define INSTABILITY_GAS_POWER_FACTOR 0.003
-///Used to calculate the toroidal_size for the instability
-#define TOROID_VOLUME_BREAKEVEN 1000
-///Constant used when calculating the chance of emitting a radioactive particle
-#define PARTICLE_CHANCE_CONSTANT (-20000000)
-///Conduction of heat inside the fusion reactor
-#define METALLIC_VOID_CONDUCTIVITY 0.38
-///Conduction of heat near the external cooling loop
-#define HIGH_EFFICIENCY_CONDUCTIVITY 0.975
-///Sets the minimum amount of power the machine uses
-#define MIN_POWER_USAGE 50000
-///Sets the multiplier for the damage
-#define DAMAGE_CAP_MULTIPLIER 0.005
-///Sets the range of the hallucinations
-#define HALLUCINATION_HFR(P) (min(7, round(abs(P) ** 0.25)))
-///Chance in percentage points per fusion level of iron accumulation when operating at unsafe levels
-#define IRON_CHANCE_PER_FUSION_LEVEL 17
-///Amount of iron accumulated per second whenever we fail our saving throw, using the chance above
-#define IRON_ACCUMULATED_PER_SECOND 0.005
-///Maximum amount of iron that can be healed per second. Calculated to mostly keep up with fusion level 5.
-#define IRON_OXYGEN_HEAL_PER_SECOND (IRON_ACCUMULATED_PER_SECOND * (100 - IRON_CHANCE_PER_FUSION_LEVEL) / 100)
-///Amount of oxygen in moles required to fully remove 100% iron content. Currently about 2409mol. Calculated to consume at most 10mol/s.
-#define OXYGEN_MOLES_CONSUMED_PER_IRON_HEAL (10 / IRON_OXYGEN_HEAL_PER_SECOND)
-
-//If integrity percent remaining is less than these values, the monitor sets off the relevant alarm.
-#define HYPERTORUS_MELTING_PERCENT 5
-#define HYPERTORUS_EMERGENCY_PERCENT 25
-#define HYPERTORUS_DANGER_PERCENT 50
-#define HYPERTORUS_WARNING_PERCENT 100
-
-#define WARNING_TIME_DELAY 60
-///to prevent accent sounds from layering
-#define HYPERTORUS_ACCENT_SOUND_MIN_COOLDOWN 3 SECONDS
-
-#define HYPERTORUS_COUNTDOWN_TIME 30 SECONDS
-
-//
-// Damage source: Too much mass in the fusion mix at high fusion levels
-//
-
-// Currently, this is 2700 moles at 1 Kelvin, linearly scaling down to a maximum of 1800 safe moles at 1e8 degrees kelvin
-// Settings:
-/// Start taking overfull damage at this power level
-#define HYPERTORUS_OVERFULL_MIN_POWER_LEVEL 6
-/// Take 0 damage beneath this much fusion mass at 1 degree Kelvin
-#define HYPERTORUS_OVERFULL_MAX_SAFE_COLD_FUSION_MOLES 2700
-/// Take 0 damage beneath this much fusion mass at FUSION_TEMPERATURE_MAX degrees Kelvin
-#define HYPERTORUS_OVERFULL_MAX_SAFE_HOT_FUSION_MOLES 1800
-// From there, how quickly should things get bad?
-/// Every 200 moles, 1 point of damage per second
-#define HYPERTORUS_OVERFULL_MOLAR_SLOPE (1/200)
-// Derived:
-// Given these settings, derive the rest of the equation.
-// Damage is the dependent variable, fusion_moles and damage_source_temperature are the independent variables
-// So the equation takes the form:
-//   damage = molar_slope * fusion_moles + temperature_slope * damage_source_temperature + constant
-// Derive these constants here for readability
-// Derive the temperature slope from the molar slope
-#define HYPERTORUS_OVERFULL_TEMPERATURE_SLOPE (HYPERTORUS_OVERFULL_MOLAR_SLOPE * (HYPERTORUS_OVERFULL_MAX_SAFE_COLD_FUSION_MOLES - HYPERTORUS_OVERFULL_MAX_SAFE_HOT_FUSION_MOLES) / (FUSION_MAXIMUM_TEMPERATURE - 1))
-// Derive the constant to set damage = 0 at our desired thresholds above
-#define HYPERTORUS_OVERFULL_CONSTANT (-(HYPERTORUS_OVERFULL_MOLAR_SLOPE * HYPERTORUS_OVERFULL_MAX_SAFE_HOT_FUSION_MOLES + HYPERTORUS_OVERFULL_TEMPERATURE_SLOPE * FUSION_MAXIMUM_TEMPERATURE))
-
-//
-// Heal source: Small enough mass in the fusion mix
-//
-
-// Settings:
-/// Start healing when fusion mass is below this threshold
-#define HYPERTORUS_SUBCRITICAL_MOLES 1200
-/// Heal one point per second per this many moles under the threshold
-#define HYPERTORUS_SUBCRITICAL_SCALE 400
-
-//
-// Heal source: Cold enough coolant
-//
-
-// Settings:
-/// Heal up to this many points of damage per second at 1 degree kelvin
-#define HYPERTORUS_COLD_COOLANT_MAX_RESTORE 2.5
-/// Start healing below this temperature
-#define HYPERTORUS_COLD_COOLANT_THRESHOLD (10 ** 5)
-// Derived:
-#define HYPERTORUS_COLD_COOLANT_SCALE (HYPERTORUS_COLD_COOLANT_MAX_RESTORE / log(10, HYPERTORUS_COLD_COOLANT_THRESHOLD))
-
-//
-// Damage source: Iron content
-//
-
-// Settings:
-/// Start taking damage over this threshold, up to a maximum of (1 - HYPERTORUS_MAX_SAFE_IRON) per tick at 100% iron
-#define HYPERTORUS_MAX_SAFE_IRON 0.35
-
-//
-// Damage source: Extreme levels of mass in fusion mix at any power level
-//
-
-// Note: Ignores the damage cap!
-// Settings:
-/// Start taking damage over this threshold
-#define HYPERTORUS_HYPERCRITICAL_MOLES 10000
-/// Take this much damage per mole over the threshold per second
-#define HYPERTORUS_HYPERCRITICAL_SCALE 0.002
-/// Take at most this much damage per second
-#define HYPERTORUS_HYPERCRITICAL_MAX_DAMAGE 20
-
-// If the moderator goes hypercritical, it cracks and starts to spill
-// If our pressure is weak, it can still spill, just weakly and infrequently
-// Even a small amount is still extremely hazardous with fusion temperatures
-#define HYPERTORUS_WEAK_SPILL_RATE 0.0005
-#define HYPERTORUS_WEAK_SPILL_CHANCE 1
-/// Start spilling superhot moderator gas when over this pressure threshold
-#define HYPERTORUS_MEDIUM_SPILL_PRESSURE 10000
-/// How much we should spill initially
-#define HYPERTORUS_MEDIUM_SPILL_INITIAL 0.25
-/// How much of the moderator mix we should spill per second until mended
-#define HYPERTORUS_MEDIUM_SPILL_RATE 0.01
-/// If the moderator gas goes over this threshold, REALLY spill it
-#define HYPERTORUS_STRONG_SPILL_PRESSURE 12000
-/// How much we should spill initially
-#define HYPERTORUS_STRONG_SPILL_INITIAL 0.75
-/// How much of the moderator mix we should spill per second until mended
-#define HYPERTORUS_STRONG_SPILL_RATE 0.05
-
-
-//
-// Explosion flags for use in fuel recipes
-//
-#define HYPERTORUS_FLAG_BASE_EXPLOSION (1<<0)
-#define HYPERTORUS_FLAG_MEDIUM_EXPLOSION (1<<1)
-#define HYPERTORUS_FLAG_DEVASTATING_EXPLOSION (1<<2)
-#define HYPERTORUS_FLAG_RADIATION_PULSE (1<<3)
-#define HYPERTORUS_FLAG_EMP (1<<4)
-#define HYPERTORUS_FLAG_MINIMUM_SPREAD (1<<5)
-#define HYPERTORUS_FLAG_MEDIUM_SPREAD (1<<6)
-#define HYPERTORUS_FLAG_BIG_SPREAD (1<<7)
-#define HYPERTORUS_FLAG_MASSIVE_SPREAD (1<<8)
-#define HYPERTORUS_FLAG_CRITICAL_MELTDOWN (1<<9)
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm
deleted file mode 100644
index c7a9545a7d2..00000000000
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_fuel_datums.dm
+++ /dev/null
@@ -1,140 +0,0 @@
-///Global list of recipes for atmospheric machines to use
-GLOBAL_LIST_INIT(hfr_fuels_list, hfr_fuels_create_list())
-
-/*
- * Global proc to build the gas recipe global list
- */
-/proc/hfr_fuels_create_list()
-	. = list()
-	for(var/fuel_mix_path in subtypesof(/datum/hfr_fuel))
-		var/datum/hfr_fuel/fuel_mix = new fuel_mix_path()
-
-		.[fuel_mix.id] = fuel_mix
-
-/datum/hfr_fuel
-	///Id for the mix
-	var/id = ""
-	///The gases that are going to be used as fuel ("GasX + GasY fuel")
-	var/name = ""
-	///Multiplier for the minimum heat output of the HFR (min 0.01)
-	var/negative_temperature_multiplier = 1
-	///Multiplier for the maximum heat output of the HFR (min 0.01)
-	var/positive_temperature_multiplier = 1
-	///Multiplier for the energy released (min 0.01)
-	var/energy_concentration_multiplier = 1
-	///Multiplier for the fuel consumption (min 0.01)
-	var/fuel_consumption_multiplier = 1
-	///Multiplier for the gas production (min 0.01)
-	var/gas_production_multiplier = 1
-	///Max allowed temperature multiplier, scales the max temperature we can hit, see FUSION_MAXIMUM_TEMPERATURE (Maxed at 1, don't go getting any ideas)
-	var/temperature_change_multiplier = 1
-	///These are the main fuels, only 2 gases that are the ones being consumed by the fusion reaction (eg. H2 and trit)
-	var/requirements = list()
-	///Gases that gets produced directly in the internal gasmix
-	var/primary_products = list()
-	///Gases that gets produced in the moderator gasmix or directly ejected (must be 6 gases), the order indicate at what power level the gases are going to be made (from power level 1 to 6)
-	var/secondary_products = list()
-	///Flags to decide what behaviour the meltdown will have depending on the fuel mix used
-	var/meltdown_flags = HYPERTORUS_FLAG_BASE_EXPLOSION
-
-/datum/hfr_fuel/New()
-	. = ..()
-	temperature_change_multiplier = min(temperature_change_multiplier, 1)
-
-/datum/hfr_fuel/plasma_oxy_fuel
-	id = "plasma_o2_fuel"
-	name = "Plasma + Oxygen fuel"
-	negative_temperature_multiplier = 2.5
-	positive_temperature_multiplier = 0.1
-	energy_concentration_multiplier = 10
-	fuel_consumption_multiplier = 3.3
-	gas_production_multiplier = 1.4
-	temperature_change_multiplier = 0.6
-	requirements = list(/datum/gas/plasma, /datum/gas/oxygen)
-	primary_products = list(/datum/gas/carbon_dioxide, /datum/gas/water_vapor)
-	secondary_products = list(/datum/gas/carbon_dioxide, /datum/gas/water_vapor, /datum/gas/freon, /datum/gas/nitrous_oxide, /datum/gas/pluoxium, /datum/gas/halon)
-	meltdown_flags = HYPERTORUS_FLAG_BASE_EXPLOSION | HYPERTORUS_FLAG_MINIMUM_SPREAD
-
-/datum/hfr_fuel/hydrogen_oxy_fuel
-	id = "h2_o2_fuel"
-	name = "Hydrogen + Oxygen fuel"
-	negative_temperature_multiplier = 2
-	positive_temperature_multiplier = 0.6
-	energy_concentration_multiplier = 3
-	fuel_consumption_multiplier = 1.1
-	gas_production_multiplier = 0.9
-	temperature_change_multiplier = 0.75
-	requirements = list(/datum/gas/hydrogen, /datum/gas/oxygen)
-	primary_products = list(/datum/gas/helium, /datum/gas/nitrogen)
-	secondary_products = list(/datum/gas/helium, /datum/gas/plasma, /datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/bz, /datum/gas/hypernoblium)
-	meltdown_flags = HYPERTORUS_FLAG_BASE_EXPLOSION | HYPERTORUS_FLAG_EMP | HYPERTORUS_FLAG_MEDIUM_SPREAD
-
-/datum/hfr_fuel/tritium_oxy_fuel
-	id = "t2_o2_fuel"
-	name = "Tritium + Oxygen fuel"
-	negative_temperature_multiplier = 2.1
-	positive_temperature_multiplier = 0.5
-	energy_concentration_multiplier = 2
-	fuel_consumption_multiplier = 1.2
-	gas_production_multiplier = 0.8
-	temperature_change_multiplier = 0.8
-	requirements = list(/datum/gas/tritium, /datum/gas/oxygen)
-	primary_products = list(/datum/gas/helium, /datum/gas/pluoxium)
-	secondary_products = list(/datum/gas/helium, /datum/gas/plasma, /datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/bz, /datum/gas/hypernoblium)
-	meltdown_flags = HYPERTORUS_FLAG_BASE_EXPLOSION | HYPERTORUS_FLAG_RADIATION_PULSE | HYPERTORUS_FLAG_MEDIUM_SPREAD
-
-/datum/hfr_fuel/hydrogen_tritium_fuel
-	id = "h2_t2_fuel"
-	name = "Hydrogen + Tritium fuel"
-	negative_temperature_multiplier = 1
-	positive_temperature_multiplier = 1
-	energy_concentration_multiplier = 1
-	fuel_consumption_multiplier = 1
-	gas_production_multiplier = 1
-	temperature_change_multiplier = 0.85
-	requirements = list(/datum/gas/hydrogen, /datum/gas/tritium)
-	primary_products = list(/datum/gas/helium)
-	secondary_products = list(/datum/gas/helium, /datum/gas/plasma, /datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/bz, /datum/gas/hypernoblium)
-	meltdown_flags = HYPERTORUS_FLAG_MEDIUM_EXPLOSION | HYPERTORUS_FLAG_RADIATION_PULSE | HYPERTORUS_FLAG_EMP | HYPERTORUS_FLAG_MEDIUM_SPREAD
-
-/datum/hfr_fuel/hypernob_hydrogen_fuel
-	id = "hypernob_hydrogen_fuel"
-	name = "Hypernoblium + Hydrogen fuel"
-	negative_temperature_multiplier = 0.2
-	positive_temperature_multiplier = 2.2
-	energy_concentration_multiplier = 0.2
-	fuel_consumption_multiplier = 0.55
-	gas_production_multiplier = 1.4
-	temperature_change_multiplier = 0.9
-	requirements = list(/datum/gas/hypernoblium, /datum/gas/hydrogen)
-	primary_products = list(/datum/gas/antinoblium)
-	secondary_products = list(/datum/gas/antinoblium, /datum/gas/helium, /datum/gas/proto_nitrate, /datum/gas/zauker, /datum/gas/healium, /datum/gas/miasma)
-	meltdown_flags = HYPERTORUS_FLAG_DEVASTATING_EXPLOSION | HYPERTORUS_FLAG_RADIATION_PULSE | HYPERTORUS_FLAG_EMP | HYPERTORUS_FLAG_BIG_SPREAD
-
-/datum/hfr_fuel/hypernob_trit_fuel
-	id = "hypernob_trit_fuel"
-	name = "Hypernoblium + Tritium fuel"
-	negative_temperature_multiplier = 0.1
-	positive_temperature_multiplier = 2.5
-	energy_concentration_multiplier = 0.1
-	fuel_consumption_multiplier = 0.45
-	gas_production_multiplier = 1.7
-	temperature_change_multiplier = 0.95
-	requirements = list(/datum/gas/hypernoblium, /datum/gas/tritium)
-	primary_products = list(/datum/gas/antinoblium)
-	secondary_products = list(/datum/gas/antinoblium, /datum/gas/helium, /datum/gas/proto_nitrate, /datum/gas/zauker, /datum/gas/healium, /datum/gas/miasma)
-	meltdown_flags = HYPERTORUS_FLAG_DEVASTATING_EXPLOSION | HYPERTORUS_FLAG_RADIATION_PULSE | HYPERTORUS_FLAG_EMP | HYPERTORUS_FLAG_BIG_SPREAD
-
-/datum/hfr_fuel/hypernob_antinob_fuel
-	id = "hypernob_antinob_fuel"
-	name = "Hypernoblium + Antinoblium fuel"
-	negative_temperature_multiplier = 0.01
-	positive_temperature_multiplier = 3.5
-	energy_concentration_multiplier = 2
-	fuel_consumption_multiplier = 0.01
-	gas_production_multiplier = 3
-	temperature_change_multiplier = 1
-	requirements = list(/datum/gas/hypernoblium, /datum/gas/antinoblium)
-	primary_products = list(/datum/gas/helium)
-	secondary_products = list(/datum/gas/plasma, /datum/gas/oxygen, /datum/gas/nitrogen, /datum/gas/proto_nitrate, /datum/gas/nitrium, /datum/gas/miasma)
-	meltdown_flags = HYPERTORUS_FLAG_DEVASTATING_EXPLOSION | HYPERTORUS_FLAG_RADIATION_PULSE | HYPERTORUS_FLAG_EMP | HYPERTORUS_FLAG_MASSIVE_SPREAD | HYPERTORUS_FLAG_CRITICAL_MELTDOWN
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
deleted file mode 100644
index 6f671aebc7c..00000000000
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm
+++ /dev/null
@@ -1,579 +0,0 @@
-/**
- * Main Fusion processes
- * process() Organizes all other calls, and is the best starting point for top-level logic.
- * fusion_process() handles all the main fusion reaction logic and consequences (lightning, radiation, particles) from an active fusion reaction.
- */
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/process(delta_time)
-	/*
-	 *Pre-checks
-	 */
-	//first check if the machine is active
-	if(!active)
-		return
-
-	//then check if the other machines are still there
-	if(!check_part_connectivity())
-		deactivate()
-		return
-
-	assert_gases()
-
-	// Run the reaction if it is either live or being started
-	if (start_power || power_level)
-		play_ambience()
-		fusion_process(delta_time)
-		// Note that we process damage/healing even if the fusion process aborts.
-		// Running out of fuel won't save you if your moderator and coolant are exploding on their own.
-		check_spill()
-		process_damageheal(delta_time)
-		check_alert()
-	if (start_power)
-		remove_waste(delta_time)
-	update_pipenets()
-
-	check_deconstructable()
-
-/**
- * Called by process()
- * Contains the main fusion calculations and checks, for more informations check the comments along the code.
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/fusion_process(delta_time)
-//fusion: a terrible idea that was fun but broken. Now reworked to be less broken and more interesting. Again (and again, and again). Again! Again but with machine!
-//Fusion Rework Counter: Please increment this if you make a major overhaul to this system again.
-//7 reworks
-
-	if (check_power_use())
-		if (start_cooling)
-			inject_from_side_components(delta_time)
-			process_internal_cooling(delta_time)
-	else
-		// No power forces bad settings
-		magnetic_constrictor = 100
-		heating_conductor = 500
-		current_damper = 0
-		fuel_injection_rate = 20
-		moderator_injection_rate = 50
-		waste_remove = FALSE
-		iron_content += 0.02 * power_level * delta_time
-
-	update_temperature_status(delta_time)
-
-	//Store the temperature of the gases after one cicle of the fusion reaction
-	var/archived_heat = internal_fusion.temperature
-	//Store the volume of the fusion reaction multiplied by the force of the magnets that controls how big it will be
-	var/volume = internal_fusion.volume * (magnetic_constrictor * 0.01)
-
-	var/energy_concentration_multiplier = 1
-	var/positive_temperature_multiplier = 1
-	var/negative_temperature_multiplier = 1
-
-	//We scale it down by volume/2 because for fusion conditions, moles roughly = 2*volume, but we want it to be based off something constant between reactions.
-	var/scale_factor = volume * 0.5
-
-	/// Store the fuel gases and the byproduct gas quantities
-	var/list/fuel_list = list()
-	/// Scaled down moles of gases, no less than 0
-	var/list/scaled_fuel_list = list()
-
-	if (selected_fuel)
-		energy_concentration_multiplier = selected_fuel.energy_concentration_multiplier
-		positive_temperature_multiplier = selected_fuel.positive_temperature_multiplier
-		negative_temperature_multiplier = selected_fuel.negative_temperature_multiplier
-
-		for(var/gas_id in selected_fuel.requirements | selected_fuel.primary_products)
-			var/amount = internal_fusion.gases[gas_id][MOLES]
-			fuel_list[gas_id] = amount
-			scaled_fuel_list[gas_id] = max((amount - FUSION_MOLE_THRESHOLD) / scale_factor, 0)
-
-	/// Store the moderators gases quantities
-	var/list/moderator_list = list()
-	/// Scaled down moles of gases, no less than 0
-	var/list/scaled_moderator_list = list()
-	for(var/gas_id in moderator_internal.gases)
-		var/amount = moderator_internal.gases[gas_id][MOLES]
-		moderator_list[gas_id] = amount
-		scaled_moderator_list[gas_id] = max((amount - FUSION_MOLE_THRESHOLD) / scale_factor, 0)
-
-	/*
-	 *FUSION MAIN PROCESS
-	 */
-	//This section is used for the instability calculation for the fusion reaction
-	//The size of the phase space hypertorus
-	var/toroidal_size = (2 * PI) + TORADIANS(arctan((volume - TOROID_VOLUME_BREAKEVEN) / TOROID_VOLUME_BREAKEVEN))
-	//Calculation of the gas power, only for theoretical instability calculations
-	var/gas_power = 0
-	for (var/gas_id in internal_fusion.gases)
-		gas_power += (internal_fusion.gases[gas_id][GAS_META][META_GAS_FUSION_POWER] * internal_fusion.gases[gas_id][MOLES])
-	for (var/gas_id in moderator_internal.gases)
-		gas_power += (moderator_internal.gases[gas_id][GAS_META][META_GAS_FUSION_POWER] * moderator_internal.gases[gas_id][MOLES] * 0.75)
-
-	instability = MODULUS((gas_power * INSTABILITY_GAS_POWER_FACTOR)**2, toroidal_size) + (current_damper * 0.01) - iron_content * 0.05
-	//Effective reaction instability (determines if the energy is used/released)
-	var/internal_instability = 0
-	if(instability * 0.5 < FUSION_INSTABILITY_ENDOTHERMALITY)
-		internal_instability = 1
-	else
-		internal_instability = -1
-
-	/*
-	 *Modifiers
-	 */
-	///Those are the scaled gases that gets consumed and adjust energy
-	// Gases that increase the amount of energy
-	var/energy_modifiers = scaled_moderator_list[/datum/gas/nitrogen] * 0.35 + \
-								scaled_moderator_list[/datum/gas/carbon_dioxide] * 0.55 + \
-								scaled_moderator_list[/datum/gas/nitrous_oxide] * 0.95 + \
-								scaled_moderator_list[/datum/gas/zauker] * 1.55 + \
-								scaled_moderator_list[/datum/gas/antinoblium] * 20
-	// Gases that decrease the amount of energy
-	energy_modifiers -= scaled_moderator_list[/datum/gas/hypernoblium] * 10 + \
-								scaled_moderator_list[/datum/gas/water_vapor] * 0.75 + \
-								scaled_moderator_list[/datum/gas/nitrium] * 0.15 + \
-								scaled_moderator_list[/datum/gas/healium] * 0.45 + \
-								scaled_moderator_list[/datum/gas/freon] * 1.15
-	///Between 0.25 and 100, this value is used to modify the behaviour of the internal energy and the core temperature based on the gases present in the mix
-	var/power_modifier = scaled_moderator_list[/datum/gas/oxygen] * 0.55 + \
-								scaled_moderator_list[/datum/gas/carbon_dioxide] * 0.95 + \
-								scaled_moderator_list[/datum/gas/nitrium] * 1.45 + \
-								scaled_moderator_list[/datum/gas/zauker] * 5.55 + \
-								scaled_moderator_list[/datum/gas/plasma] * 0.05 - \
-								scaled_moderator_list[/datum/gas/nitrous_oxide] * 0.05 - \
-								scaled_moderator_list[/datum/gas/freon] * 0.75
-	///Minimum 0.25, this value is used to modify the behaviour of the energy emission based on the gases present in the mix
-	var/heat_modifier = scaled_moderator_list[/datum/gas/plasma] * 1.25 - \
-								scaled_moderator_list[/datum/gas/nitrogen] * 0.75 - \
-								scaled_moderator_list[/datum/gas/nitrous_oxide] * 1.45 - \
-								scaled_moderator_list[/datum/gas/freon] * 0.95
-	///Between 0.005 and 1000, this value modify the radiation emission of the reaction, higher values increase the emission
-	var/radiation_modifier = scaled_moderator_list[/datum/gas/freon] * 1.15 - \
-									scaled_moderator_list[/datum/gas/nitrogen] * 0.45 - \
-									scaled_moderator_list[/datum/gas/plasma] * 0.95 + \
-									scaled_moderator_list[/datum/gas/bz] * 1.9 + \
-									scaled_moderator_list[/datum/gas/proto_nitrate] * 0.1 + \
-									scaled_moderator_list[/datum/gas/antinoblium] * 10
-
-	if (selected_fuel)
-		// These should probably be static coefficients read from a table rather than things that depend on the current recipe
-		// the same is true for the effects above
-		energy_modifiers += scaled_fuel_list[selected_fuel.requirements[1]] + \
-									scaled_fuel_list[selected_fuel.requirements[2]]
-		energy_modifiers -= scaled_fuel_list[selected_fuel.primary_products[1]]
-
-		power_modifier += scaled_fuel_list[selected_fuel.requirements[2]] * 1.05 - \
-									scaled_fuel_list[selected_fuel.primary_products[1]] * 0.55
-
-		heat_modifier += scaled_fuel_list[selected_fuel.requirements[1]] * 1.15 + \
-									scaled_fuel_list[selected_fuel.primary_products[1]] * 1.05
-
-		radiation_modifier += scaled_fuel_list[selected_fuel.primary_products[1]]
-
-	power_modifier = clamp(power_modifier, 0.25, 100)
-	heat_modifier = clamp(heat_modifier, 0.25, 100)
-	radiation_modifier = clamp(radiation_modifier, 0.005, 1000)
-
-	/*
-	 *Main calculations (energy, internal power, core temperature, delta temperature,
-	 *conduction, radiation, efficiency, power output, heat limiter modifier and heat output)
-	 */
-	internal_power = 0
-	efficiency = VOID_CONDUCTION * 1
-
-	if (selected_fuel)
-		// Power of the gas mixture
-		internal_power = (scaled_fuel_list[selected_fuel.requirements[1]] * power_modifier / 100) * (scaled_fuel_list[selected_fuel.requirements[2]] * power_modifier / 100) * (PI * (2 * (scaled_fuel_list[selected_fuel.requirements[1]] * CALCULATED_H2RADIUS) * (scaled_fuel_list[selected_fuel.requirements[2]] * CALCULATED_TRITRADIUS))**2) * energy
-
-		// Efficiency of the reaction, it increases with the amount of byproduct
-		efficiency = VOID_CONDUCTION * clamp(scaled_fuel_list[selected_fuel.primary_products[1]], 1, 100)
-
-	//Can go either positive or negative depending on the instability and the negative energy modifiers
-	//E=mc^2 with some changes for gameplay purposes
-	energy = (energy_modifiers * LIGHT_SPEED ** 2) * max(internal_fusion.temperature * heat_modifier / 100, 1)
-	energy = energy / energy_concentration_multiplier
-	energy = clamp(energy, 0, 1e35) //ugly way to prevent NaN error
-	//Temperature inside the center of the gas mixture
-	core_temperature = internal_power * power_modifier / 1000
-	core_temperature = max(TCMB, core_temperature)
-	//Difference between the gases temperature and the internal temperature of the reaction
-	delta_temperature = archived_heat - core_temperature
-	//Energy from the reaction lost from the molecule colliding between themselves.
-	conduction = - delta_temperature * (magnetic_constrictor * 0.001)
-	//The remaining wavelength that actually can do damage to mobs.
-	radiation = max(-(PLANCK_LIGHT_CONSTANT / 5e-18) * radiation_modifier * delta_temperature, 0)
-	power_output = efficiency * (internal_power - conduction - radiation)
-	//Hotter air is easier to heat up and cool down
-	heat_limiter_modifier = 10 * (10 ** power_level) * (heating_conductor / 100)
-	//The amount of heat that is finally emitted, based on the power output. Min and max are variables that depends of the modifier
-	heat_output_min = - heat_limiter_modifier * 0.01 * negative_temperature_multiplier
-	heat_output_max = heat_limiter_modifier * positive_temperature_multiplier
-	heat_output = clamp(internal_instability * power_output * heat_modifier / 100, heat_output_min, heat_output_max)
-
-	// Is the fusion process actually going to run?
-	// Note we have to always perform the above calculations to keep the UI updated, so we can't use this to early return.
-	if (!check_fuel())
-		return
-
-	// Phew. Lets calculate what this means in practice.
-	var/fuel_consumption_rate = clamp(fuel_injection_rate * 0.01 * 5 * power_level, 0.05, 30)
-	var/consumption_amount = fuel_consumption_rate * delta_time
-	var/production_amount
-	switch(power_level)
-		if(3,4)
-			production_amount = clamp(heat_output * 5e-4, 0, fuel_consumption_rate) * delta_time
-		else
-			production_amount = clamp(heat_output / 10 ** (power_level+1), 0, fuel_consumption_rate) * delta_time
-
-	// antinob production is special, and uses its own calculations from how stale the fusion mix is (via byproduct ratio and fresh fuel rate)
-	var/dirty_production_rate = scaled_fuel_list[scaled_fuel_list[3]] / fuel_injection_rate
-
-	// Run the effects of our selected fuel recipe
-
-	var/datum/gas_mixture/internal_output = new
-	moderator_fuel_process(delta_time, production_amount, consumption_amount, internal_output, moderator_list, selected_fuel, fuel_list)
-
-	// Run the common effects, committing changes where applicable
-
-	// This is repetition, but is here as a placeholder for what will need to be done to allow concurrently running multiple recipes
-	var/common_production_amount = production_amount * selected_fuel.gas_production_multiplier
-	moderator_common_process(delta_time, common_production_amount, internal_output, moderator_list, dirty_production_rate, heat_output, radiation_modifier)
-
-/**
- * Perform recipe specific actions. Fuel consumption and recipe based gas production happens here.
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/moderator_fuel_process(delta_time, production_amount, consumption_amount, datum/gas_mixture/internal_output, moderator_list, datum/hfr_fuel/fuel, fuel_list)
-	// Adjust fusion consumption/production based on this recipe's characteristics
-	var/fuel_consumption = consumption_amount * 0.85 * selected_fuel.fuel_consumption_multiplier
-	var/scaled_production = production_amount * selected_fuel.gas_production_multiplier
-
-	for(var/gas_id in fuel.requirements)
-		internal_fusion.gases[gas_id][MOLES] -= min(fuel_list[gas_id], fuel_consumption)
-	for(var/gas_id in fuel.primary_products)
-		internal_fusion.gases[gas_id][MOLES] += fuel_consumption * 0.5
-
-	// Each recipe provides a tier list of six output gases.
-	// Which gases are produced depend on what the fusion level is.
-	var/list/tier = fuel.secondary_products
-	switch(power_level)
-		if(1)
-			moderator_internal.gases[tier[1]][MOLES] += scaled_production * 0.95
-			moderator_internal.gases[tier[2]][MOLES] += scaled_production * 0.75
-		if(2)
-			moderator_internal.gases[tier[1]][MOLES] += scaled_production * 1.65
-			moderator_internal.gases[tier[2]][MOLES] += scaled_production
-			if(moderator_list[/datum/gas/plasma] > 50)
-				moderator_internal.gases[tier[3]][MOLES] += scaled_production * 1.15
-		if(3)
-			moderator_internal.gases[tier[2]][MOLES] += scaled_production * 0.5
-			moderator_internal.gases[tier[3]][MOLES] += scaled_production * 0.45
-		if(4)
-			moderator_internal.gases[tier[3]][MOLES] += scaled_production * 1.65
-			moderator_internal.gases[tier[4]][MOLES] += scaled_production * 1.25
-		if(5)
-			moderator_internal.gases[tier[4]][MOLES] += scaled_production * 0.65
-			moderator_internal.gases[tier[5]][MOLES] += scaled_production
-			moderator_internal.gases[tier[6]][MOLES] += scaled_production * 0.75
-		if(6)
-			moderator_internal.gases[tier[5]][MOLES] += scaled_production * 0.35
-			moderator_internal.gases[tier[6]][MOLES] += scaled_production
-
-/**
- * Perform common fusion actions:
- *
- * - Gases that get produced irrespective of recipe
- * - Temperature modifiers, radiation modifiers, and the application of each
- * - Committing staged output, performing filtering, and making !FUN! emissions
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/moderator_common_process(delta_time, scaled_production, datum/gas_mixture/internal_output, moderator_list, dirty_production_rate, heat_output, radiation_modifier)
-	switch(power_level)
-		if(1)
-			if(moderator_list[/datum/gas/plasma] > 100)
-				moderator_internal.gases[/datum/gas/nitrous_oxide] += scaled_production * 0.5
-				moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 0.85)
-			if(moderator_list[/datum/gas/bz] > 150)
-				internal_output.assert_gases(/datum/gas/halon)
-				internal_output.gases[/datum/gas/halon][MOLES] += scaled_production * 0.55
-				moderator_internal.gases[/datum/gas/bz][MOLES] -= min(moderator_internal.gases[/datum/gas/bz][MOLES], scaled_production * 0.95)
-		if(2)
-			if(moderator_list[/datum/gas/plasma] > 50)
-				internal_output.assert_gases(/datum/gas/bz)
-				internal_output.gases[/datum/gas/bz][MOLES] += scaled_production * 1.8
-				moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.75)
-			if(moderator_list[/datum/gas/proto_nitrate] > 20)
-				radiation *= 1.55
-				heat_output *= 1.025
-				internal_output.assert_gases(/datum/gas/nitrium)
-				internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.05
-				moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35)
-		if(3, 4)
-			if(moderator_list[/datum/gas/plasma] > 10)
-				internal_output.assert_gases(/datum/gas/freon, /datum/gas/nitrium)
-				internal_output.gases[/datum/gas/freon][MOLES] += scaled_production * 0.15
-				internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.05
-				moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 0.45)
-			if(moderator_list[/datum/gas/freon] > 50)
-				heat_output *= 0.9
-				radiation *= 0.8
-			if(moderator_list[/datum/gas/proto_nitrate]> 15)
-				internal_output.assert_gases(/datum/gas/nitrium, /datum/gas/halon)
-				internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.25
-				internal_output.gases[/datum/gas/halon][MOLES] += scaled_production * 1.15
-				moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.55)
-				radiation *= 1.95
-				heat_output *= 1.25
-			if(moderator_list[/datum/gas/bz] > 100)
-				internal_output.assert_gases(/datum/gas/healium, /datum/gas/proto_nitrate)
-				internal_output.gases[/datum/gas/proto_nitrate][MOLES] += scaled_production * 1.5
-				internal_output.gases[/datum/gas/healium][MOLES] += scaled_production * 1.5
-				induce_hallucination(50 * power_level, delta_time)
-		if(5)
-			if(moderator_list[/datum/gas/plasma] > 15)
-				internal_output.assert_gases(/datum/gas/freon)
-				internal_output.gases[/datum/gas/freon][MOLES] += scaled_production *0.25
-				moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.45)
-			if(moderator_list[/datum/gas/freon] > 500)
-				heat_output *= 0.5
-				radiation *= 0.2
-			if(moderator_list[/datum/gas/proto_nitrate] > 50)
-				internal_output.assert_gases(/datum/gas/nitrium, /datum/gas/pluoxium)
-				internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 1.95
-				internal_output.gases[/datum/gas/pluoxium][MOLES] += scaled_production
-				moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 1.35)
-				radiation *= 1.95
-				heat_output *= 1.25
-			if(moderator_list[/datum/gas/bz] > 100)
-				internal_output.assert_gases(/datum/gas/healium)
-				internal_output.gases[/datum/gas/healium][MOLES] += scaled_production
-				induce_hallucination(500, delta_time)
-				moderator_internal.gases[/datum/gas/freon][MOLES] += scaled_production * 1.15
-			if(moderator_list[/datum/gas/healium] > 100)
-				if(critical_threshold_proximity > 400)
-					critical_threshold_proximity = max(critical_threshold_proximity - (moderator_list[/datum/gas/healium] / 100 * delta_time ), 0)
-					moderator_internal.gases[/datum/gas/healium][MOLES] -= min(moderator_internal.gases[/datum/gas/healium][MOLES], scaled_production * 20)
-			if(moderator_internal.temperature < 1e7 || (moderator_list[/datum/gas/plasma] > 100 && moderator_list[/datum/gas/bz] > 50))
-				internal_output.assert_gases(/datum/gas/antinoblium)
-				internal_output.gases[/datum/gas/antinoblium][MOLES] += dirty_production_rate * 0.9 / 0.065 * delta_time
-		if(6)
-			if(moderator_list[/datum/gas/plasma] > 30)
-				moderator_internal.gases[/datum/gas/bz][MOLES] += scaled_production * 1.15
-				moderator_internal.gases[/datum/gas/plasma][MOLES] -= min(moderator_internal.gases[/datum/gas/plasma][MOLES], scaled_production * 1.45)
-			if(moderator_list[/datum/gas/proto_nitrate])
-				internal_output.assert_gases(/datum/gas/zauker, /datum/gas/nitrium)
-				internal_output.gases[/datum/gas/zauker][MOLES] += scaled_production * 5.35
-				internal_output.gases[/datum/gas/nitrium][MOLES] += scaled_production * 2.15
-				moderator_internal.gases[/datum/gas/proto_nitrate][MOLES] -= min(moderator_internal.gases[/datum/gas/proto_nitrate][MOLES], scaled_production * 3.35)
-				radiation *= 2
-				heat_output *= 2.25
-			if(moderator_list[/datum/gas/bz])
-				induce_hallucination(900, delta_time, force=TRUE)
-				moderator_internal.gases[/datum/gas/antinoblium][MOLES] += clamp(dirty_production_rate / 0.045, 0, 10) * delta_time
-			if(moderator_list[/datum/gas/healium] > 100)
-				if(critical_threshold_proximity > 400)
-					critical_threshold_proximity = max(critical_threshold_proximity - (moderator_list[/datum/gas/healium] / 100 * delta_time ), 0)
-					moderator_internal.gases[/datum/gas/healium][MOLES] -= min(moderator_internal.gases[/datum/gas/healium][MOLES], scaled_production * 20)
-			internal_fusion.gases[/datum/gas/antinoblium][MOLES] += dirty_production_rate * 0.01 / 0.095 * delta_time
-
-	//Modifies the internal_fusion temperature with the amount of heat output
-	var/temperature_modifier = selected_fuel.temperature_change_multiplier
-	if(internal_fusion.temperature <= FUSION_MAXIMUM_TEMPERATURE * temperature_modifier)
-		internal_fusion.temperature = clamp(internal_fusion.temperature + heat_output,TCMB,FUSION_MAXIMUM_TEMPERATURE * temperature_modifier)
-	else
-		internal_fusion.temperature -= heat_limiter_modifier * 0.01 * delta_time
-
-	//heat up and output what's in the internal_output into the linked_output port
-	if(internal_output.get_moles() > 0)
-		if(moderator_internal.get_moles() > 0)
-			internal_output.temperature = moderator_internal.temperature * HIGH_EFFICIENCY_CONDUCTIVITY
-		else
-			internal_output.temperature = internal_fusion.temperature * METALLIC_VOID_CONDUCTIVITY
-		linked_output.airs[1].merge(internal_output)
-
-	evaporate_moderator(delta_time)
-
-	check_nuclear_particles(moderator_list)
-
-	check_lightning_arcs(moderator_list)
-
-	// Oxygen burns away iron content rapidly
-	if(moderator_list[/datum/gas/oxygen] > 150)
-		if(iron_content > 0)
-			var/max_iron_removable = IRON_OXYGEN_HEAL_PER_SECOND
-			var/iron_removed = min(max_iron_removable * delta_time, iron_content)
-			iron_content -= iron_removed
-			moderator_internal.gases[/datum/gas/oxygen][MOLES] -= iron_removed * OXYGEN_MOLES_CONSUMED_PER_IRON_HEAL
-
-	check_gravity_pulse(delta_time)
-
-	emit_rads()
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/evaporate_moderator(delta_time)
-	// Don't evaporate if the reaction is dead
-	if (!power_level)
-		return
-	// All gases in the moderator slowly burn away over time, whether used for production or not
-	if(moderator_internal.get_moles() > 0)
-		moderator_internal.remove(moderator_internal.get_moles() * (1 - (1 - 0.0005 * power_level) ** delta_time))
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/process_damageheal(delta_time)
-	// Archive current health for damage cap purposes
-	critical_threshold_proximity_archived = critical_threshold_proximity
-
-	// If we're operating at an extreme power level, take increasing damage for the amount of fusion mass over a low threshold
-	if(power_level >= HYPERTORUS_OVERFULL_MIN_POWER_LEVEL)
-		var/overfull_damage_taken = HYPERTORUS_OVERFULL_MOLAR_SLOPE * internal_fusion.get_moles() + HYPERTORUS_OVERFULL_TEMPERATURE_SLOPE * coolant_temperature + HYPERTORUS_OVERFULL_CONSTANT
-		critical_threshold_proximity = max(critical_threshold_proximity + max(overfull_damage_taken * delta_time, 0), 0)
-
-	// If we're running on a thin fusion mix, heal up
-	if(internal_fusion.get_moles() < HYPERTORUS_SUBCRITICAL_MOLES && power_level <= 5)
-		var/subcritical_heal_restore = (internal_fusion.get_moles() - HYPERTORUS_SUBCRITICAL_MOLES) / HYPERTORUS_SUBCRITICAL_SCALE
-		critical_threshold_proximity = max(critical_threshold_proximity + min(subcritical_heal_restore * delta_time, 0), 0)
-
-	// If coolant is sufficiently cold, heal up
-	if(internal_fusion.get_moles() > 0 && (airs[1].get_moles() && coolant_temperature < HYPERTORUS_COLD_COOLANT_THRESHOLD) && power_level <= 4)
-		var/cold_coolant_heal_restore = log(10, max(coolant_temperature, 1) * HYPERTORUS_COLD_COOLANT_SCALE) - (HYPERTORUS_COLD_COOLANT_MAX_RESTORE * 2)
-		critical_threshold_proximity = max(critical_threshold_proximity + min(cold_coolant_heal_restore * delta_time, 0), 0)
-
-	critical_threshold_proximity += max(iron_content - HYPERTORUS_MAX_SAFE_IRON, 0) * delta_time
-
-	// Apply damage cap
-	critical_threshold_proximity = min(critical_threshold_proximity_archived + (delta_time * DAMAGE_CAP_MULTIPLIER * melting_point), critical_threshold_proximity)
-
-	// If we have a preposterous amount of mass in the fusion mix, things get bad extremely fast
-	if(internal_fusion.get_moles() >= HYPERTORUS_HYPERCRITICAL_MOLES)
-		var/hypercritical_damage_taken = max((internal_fusion.get_moles() - HYPERTORUS_HYPERCRITICAL_MOLES) * HYPERTORUS_HYPERCRITICAL_SCALE, 0)
-		critical_threshold_proximity = max(critical_threshold_proximity + min(hypercritical_damage_taken, HYPERTORUS_HYPERCRITICAL_MAX_DAMAGE), 0) * delta_time
-
-	// High power fusion might create other matter other than helium, iron is dangerous inside the machine, damage can be seen
-	if(power_level > 4 && prob(IRON_CHANCE_PER_FUSION_LEVEL * power_level))//at power level 6 is 100%
-		iron_content += IRON_ACCUMULATED_PER_SECOND * delta_time
-	if(iron_content > 0 && power_level <= 4 && prob(25 / (power_level + 1)))
-		iron_content = max(iron_content - 0.01 * delta_time, 0)
-	iron_content = clamp(iron_content, 0, 1)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_nuclear_particles(moderator_list)
-	// New nuclear particle emission sytem.
-	if(power_level < 4)
-		return
-	if(moderator_list[/datum/gas/bz] < (150 / power_level))
-		return
-	var/obj/machinery/hypertorus/corner/picked_corner = pick(corners)
-	picked_corner.loc.fire_nuclear_particle(turn(picked_corner.dir, 180))
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_lightning_arcs(moderator_list)
-	if(power_level < 4)
-		return
-	if(moderator_list[/datum/gas/antinoblium] <= 50 && critical_threshold_proximity <= 500)
-		return
-	var/zap_number = power_level - 2
-
-	if(critical_threshold_proximity > 650 && prob(20))
-		zap_number += 1
-
-	var/cutoff = 1500
-	cutoff = clamp(3000 - (power_level * (internal_fusion.get_moles() * 0.45)), 450, 3000)
-
-	var/zaps_aspect = DEFAULT_ZAP_ICON_STATE
-	var/flags = ZAP_SUPERMATTER_FLAGS
-	switch(power_level)
-		if(5)
-			zaps_aspect = SLIGHTLY_CHARGED_ZAP_ICON_STATE
-			flags |= (ZAP_MOB_DAMAGE)
-		if(6)
-			zaps_aspect = OVER_9000_ZAP_ICON_STATE
-			flags |= (ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE)
-
-	playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10)
-	for(var/i in 1 to zap_number)
-		supermatter_zap(src, 5, power_level * 300, flags, zap_cutoff = cutoff, power_level = src.power_level * 1000, zap_icon = zaps_aspect)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_gravity_pulse(delta_time)
-	if(DT_PROB(100 - critical_threshold_proximity / 15, delta_time))
-		return
-	var/grav_range = round(log(2.5, critical_threshold_proximity))
-	for(var/mob/alive_mob in GLOB.alive_mob_list)
-		if(alive_mob.z != z || get_dist(alive_mob, src) > grav_range || alive_mob.mob_negates_gravity())
-			continue
-		step_towards(alive_mob, loc)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/remove_waste(delta_time)
-	//Gases can be removed from the moderator internal by using the interface.
-	if(!waste_remove)
-		return
-	var/filtering_amount = moderator_scrubbing.len
-	for(var/gas in moderator_internal.gases & moderator_scrubbing)
-		var/datum/gas_mixture/removed = moderator_internal.remove_specific(gas, (moderator_filtering_rate / filtering_amount) * delta_time)
-		if(removed)
-			linked_output.airs[1].merge(removed)
-
-	if (selected_fuel)
-		var/datum/gas_mixture/internal_remove
-		for(var/gas_id in selected_fuel.primary_products)
-			if(internal_fusion.gases[gas_id][MOLES] > 0)
-				internal_remove = internal_fusion.remove_specific(gas_id, internal_fusion.gases[gas_id][MOLES] * (1 - (1 - 0.25) ** delta_time))
-				linked_output.airs[1].merge(internal_remove)
-	internal_fusion.garbage_collect()
-	moderator_internal.garbage_collect()
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/process_internal_cooling(delta_time)
-	if(moderator_internal.get_moles() > 0 && internal_fusion.get_moles() > 0)
-		//Modifies the moderator_internal temperature based on energy conduction and also the fusion by the same amount
-		var/fusion_temperature_delta = internal_fusion.temperature - moderator_internal.temperature
-		var/fusion_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * fusion_temperature_delta * (internal_fusion.getHeatCapacity() * moderator_internal.getHeatCapacity() / (internal_fusion.getHeatCapacity() + moderator_internal.getHeatCapacity()))
-		internal_fusion.temperature = max(internal_fusion.temperature - fusion_heat_amount / internal_fusion.getHeatCapacity(), TCMB)
-		moderator_internal.temperature = max(moderator_internal.temperature + fusion_heat_amount / moderator_internal.getHeatCapacity(), TCMB)
-
-	if(airs[1].get_moles() * 0.05 <= MINIMUM_MOLE_COUNT)
-		return
-	var/datum/gas_mixture/cooling_port = airs[1]
-	var/datum/gas_mixture/cooling_remove = cooling_port.remove(0.05 * cooling_port.get_moles())
-	//Cooling of the moderator gases with the cooling loop in and out the core
-	if(moderator_internal.get_moles() > 0)
-		var/coolant_temperature_delta = cooling_remove.temperature - moderator_internal.temperature
-		var/cooling_heat_amount = (1 - (1 - HIGH_EFFICIENCY_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.getHeatCapacity() * moderator_internal.getHeatCapacity() / (cooling_remove.getHeatCapacity() + moderator_internal.getHeatCapacity()))
-		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.getHeatCapacity(), TCMB)
-		moderator_internal.temperature = max(moderator_internal.temperature + cooling_heat_amount / moderator_internal.getHeatCapacity(), TCMB)
-
-	else if(internal_fusion.get_moles() > 0)
-		var/coolant_temperature_delta = cooling_remove.temperature - internal_fusion.temperature
-		var/cooling_heat_amount = (1 - (1 - METALLIC_VOID_CONDUCTIVITY) ** delta_time) * coolant_temperature_delta * (cooling_remove.getHeatCapacity() * internal_fusion.getHeatCapacity() / (cooling_remove.getHeatCapacity() + internal_fusion.getHeatCapacity()))
-		cooling_remove.temperature = max(cooling_remove.temperature - cooling_heat_amount / cooling_remove.getHeatCapacity(), TCMB)
-		internal_fusion.temperature = max(internal_fusion.temperature + cooling_heat_amount / internal_fusion.getHeatCapacity(), TCMB)
-	cooling_port.merge(cooling_remove)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/inject_from_side_components(delta_time)
-	update_pipenets()
-
-	//Check and stores the gases from the moderator input in the moderator internal gasmix
-	var/datum/gas_mixture/moderator_port = linked_moderator.airs[1]
-	if(start_moderator && moderator_port.get_moles())
-		moderator_internal.merge(moderator_port.remove(moderator_injection_rate * delta_time))
-		linked_moderator.update_parents()
-
-	//Check if the fuels are present and move them inside the fuel internal gasmix
-	if(!start_fuel || !selected_fuel || !check_gas_requirements())
-		return
-
-	var/datum/gas_mixture/fuel_port = linked_input.airs[1]
-	for(var/gas_type in selected_fuel.requirements)
-		internal_fusion.assert_gas(gas_type)
-		internal_fusion.merge(fuel_port.remove_specific(gas_type, fuel_injection_rate * delta_time / length(selected_fuel.requirements)))
-		linked_input.update_parents()
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_deconstructable()
-	if(!active)
-		return
-	if(power_level > 0)
-		fusion_started = TRUE
-		linked_input.fusion_started = TRUE
-		linked_output.fusion_started = TRUE
-		linked_moderator.fusion_started = TRUE
-		linked_interface.fusion_started = TRUE
-		for(var/obj/machinery/hypertorus/corner/corner in corners)
-			corner.fusion_started = TRUE
-	else
-		fusion_started = FALSE
-		linked_input.fusion_started = FALSE
-		linked_output.fusion_started = FALSE
-		linked_moderator.fusion_started = FALSE
-		linked_interface.fusion_started = FALSE
-		for(var/obj/machinery/hypertorus/corner/corner in corners)
-			corner.fusion_started = FALSE
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
deleted file mode 100644
index d7c2bab399c..00000000000
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
+++ /dev/null
@@ -1,518 +0,0 @@
-/**
- * This file contain the eight parts surrounding the main core, those are: fuel input, moderator input, waste output, interface and the corners
- * The file also contain the guicode of the machine
- */
-/obj/machinery/atmospherics/components/unary/hypertorus
-	icon = 'icons/obj/atmospherics/components/hypertorus.dmi'
-	icon_state = "core"
-
-	name = "thermomachine"
-	desc = "Heats or cools gas in connected pipes."
-	anchored = TRUE
-	density = TRUE
-	resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
-	flags_1 = PREVENT_CONTENTS_EXPLOSION_1
-	layer = OBJ_LAYER
-	pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
-	circuit = /obj/item/circuitboard/machine/thermomachine
-	///Vars for the state of the icon of the object (open, off, active)
-	var/icon_state_open
-	var/icon_state_off
-	var/icon_state_active
-	///Check if the machine has been activated
-	var/active = FALSE
-	///Check if fusion has started
-	var/fusion_started = FALSE
-	///Check if the machine is cracked open
-	var/cracked = FALSE
-
-/obj/machinery/atmospherics/components/unary/hypertorus/Initialize(mapload)
-	. = ..()
-	initialize_directions = dir
-
-/obj/machinery/atmospherics/components/unary/hypertorus/examine(mob/user)
-	. = ..()
-	. += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.")
-
-/obj/machinery/atmospherics/components/unary/hypertorus/attackby(obj/item/I, mob/user, params)
-	if(!fusion_started)
-		if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I))
-			return
-	if(default_change_direction_wrench(user, I))
-		return
-	if(default_deconstruction_crowbar(I))
-		return
-	return ..()
-
-/obj/machinery/atmospherics/components/unary/hypertorus/welder_act(mob/living/user, obj/item/tool)
-	if(!cracked)
-		return FALSE
-	if(user.combat_mode)
-		return FALSE
-	balloon_alert(user, "You start repairing the crack...")
-	if(tool.use_tool(src, user, 10 SECONDS, volume=30, amount=5))
-		balloon_alert(user, "You repaired the crack.")
-		cracked = FALSE
-		update_appearance()
-
-/obj/machinery/atmospherics/components/unary/hypertorus/default_change_direction_wrench(mob/user, obj/item/I)
-	. = ..()
-	if(.)
-		set_init_directions()
-		var/obj/machinery/atmospherics/node = nodes[1]
-		if(node)
-			node.disconnect(src)
-			nodes[1] = null
-			if(parents[1])
-				nullify_pipenet(parents[1])
-		atmos_init()
-		node = nodes[1]
-		if(node)
-			node.atmos_init()
-			node.add_member(src)
-		SSair.add_to_rebuild_queue(src)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/update_icon_state()
-	if(panel_open)
-		icon_state = icon_state_open
-		return ..()
-	if(active)
-		icon_state = icon_state_active
-		return ..()
-	icon_state = icon_state_off
-	return ..()
-
-/obj/machinery/atmospherics/components/unary/hypertorus/update_overlays()
-	. = ..()
-	if(!cracked)
-		return
-	var/image/crack = image(icon, icon_state = "crack")
-	crack.dir = dir
-	. += crack
-
-/obj/machinery/atmospherics/components/unary/hypertorus/fuel_input
-	name = "HFR fuel input port"
-	desc = "Input port for the Hypertorus Fusion Reactor, designed to take in only Hydrogen and Tritium in gas forms."
-	icon_state = "fuel_input_off"
-	icon_state_open = "fuel_input_open"
-	icon_state_off = "fuel_input_off"
-	icon_state_active = "fuel_input_active"
-	circuit = /obj/item/circuitboard/machine/HFR_fuel_input
-
-/obj/machinery/atmospherics/components/unary/hypertorus/waste_output
-	name = "HFR waste output port"
-	desc = "Waste port for the Hypertorus Fusion Reactor, designed to output the hot waste gases coming from the core of the machine."
-	icon_state = "waste_output_off"
-	icon_state_open = "waste_output_open"
-	icon_state_off = "waste_output_off"
-	icon_state_active = "waste_output_active"
-	circuit = /obj/item/circuitboard/machine/HFR_waste_output
-
-/obj/machinery/atmospherics/components/unary/hypertorus/moderator_input
-	name = "HFR moderator input port"
-	desc = "Moderator port for the Hypertorus Fusion Reactor, designed to move gases inside the machine to cool and control the flow of the reaction."
-	icon_state = "moderator_input_off"
-	icon_state_open = "moderator_input_open"
-	icon_state_off = "moderator_input_off"
-	icon_state_active = "moderator_input_active"
-	circuit = /obj/item/circuitboard/machine/HFR_moderator_input
-
-/*
-* Interface and corners
-*/
-/obj/machinery/hypertorus
-	name = "hypertorus_core"
-	desc = "hypertorus_core"
-	icon = 'icons/obj/atmospherics/components/hypertorus.dmi'
-	icon_state = "core"
-	move_resist = INFINITY
-	anchored = TRUE
-	density = TRUE
-	resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
-	flags_1 = PREVENT_CONTENTS_EXPLOSION_1
-	power_channel = AREA_USAGE_ENVIRON
-	var/active = FALSE
-	var/icon_state_open
-	var/icon_state_off
-	var/icon_state_active
-	var/fusion_started = FALSE
-
-/obj/machinery/hypertorus/examine(mob/user)
-	. = ..()
-	. += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.")
-
-/obj/machinery/hypertorus/attackby(obj/item/I, mob/user, params)
-	if(!fusion_started)
-		if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I))
-			return
-	if(default_change_direction_wrench(user, I))
-		return
-	if(default_deconstruction_crowbar(I))
-		return
-	return ..()
-
-/obj/machinery/hypertorus/update_icon_state()
-	if(panel_open)
-		icon_state = icon_state_open
-		return ..()
-	if(active)
-		icon_state = icon_state_active
-		return ..()
-	icon_state = icon_state_off
-	return ..()
-
-/obj/machinery/hypertorus/interface
-	name = "HFR interface"
-	desc = "Interface for the HFR to control the flow of the reaction."
-	icon_state = "interface_off"
-	circuit = /obj/item/circuitboard/machine/HFR_interface
-	var/obj/machinery/atmospherics/components/unary/hypertorus/core/connected_core
-	icon_state_off = "interface_off"
-	icon_state_open = "interface_open"
-	icon_state_active = "interface_active"
-
-/obj/machinery/hypertorus/interface/Destroy()
-	if(connected_core)
-		connected_core = null
-	return..()
-
-/obj/machinery/hypertorus/interface/multitool_act(mob/living/user, obj/item/I)
-	. = ..()
-	var/turf/T = get_step(src,turn(dir,180))
-	var/obj/machinery/atmospherics/components/unary/hypertorus/core/centre = locate() in T
-
-	if(!centre || !centre.check_part_connectivity())
-		to_chat(user, span_notice("Check all parts and then try again."))
-		return TRUE
-	new/obj/item/paper/guides/jobs/atmos/hypertorus(loc)
-	connected_core = centre
-
-	connected_core.activate(user)
-	return TRUE
-
-/obj/machinery/hypertorus/interface/ui_interact(mob/user, datum/tgui/ui)
-	if(active)
-		ui = SStgui.try_update_ui(user, src, ui)
-		if(!ui)
-			ui = new(user, src, "Hypertorus", name)
-			ui.open()
-	else
-		to_chat(user, span_notice("Activate the machine first by using a multitool on the interface."))
-
-/obj/machinery/hypertorus/interface/proc/gas_list_to_gasid_list(list/gas_list)
-	var/list/gasid_list = list()
-	for(var/gas_type in gas_list)
-		var/datum/gas/gas = gas_type
-		gasid_list += initial(gas.id)
-	return gasid_list
-
-
-
-/obj/machinery/hypertorus/interface/ui_static_data()
-	var/data = list()
-	data["base_max_temperature"] = FUSION_MAXIMUM_TEMPERATURE
-	data["selectable_fuel"] = list(list("name" = "Nothing", "id" = null))
-	for(var/path in GLOB.hfr_fuels_list)
-		var/datum/hfr_fuel/recipe = GLOB.hfr_fuels_list[path]
-
-		data["selectable_fuel"] += list(list(
-			"name" = recipe.name,
-			"id" = recipe.id,
-			"requirements" = gas_list_to_gasid_list(recipe.requirements),
-			"fusion_byproducts" = gas_list_to_gasid_list(recipe.primary_products),
-			"product_gases" = gas_list_to_gasid_list(recipe.secondary_products),
-			"recipe_cooling_multiplier" = recipe.negative_temperature_multiplier,
-			"recipe_heating_multiplier" = recipe.positive_temperature_multiplier,
-			"energy_loss_multiplier" = recipe.energy_concentration_multiplier,
-			"fuel_consumption_multiplier" = recipe.fuel_consumption_multiplier,
-			"gas_production_multiplier" = recipe.gas_production_multiplier,
-			"temperature_multiplier" = recipe.temperature_change_multiplier,
-		))
-	return data
-
-/obj/machinery/hypertorus/interface/ui_data()
-	var/data = list()
-
-	if(connected_core.selected_fuel)
-		data["selected"] = connected_core.selected_fuel.id
-	else
-		data["selected"] = ""
-
-	//Internal Fusion gases
-	var/list/fusion_gasdata = list()
-	if(connected_core.internal_fusion.get_moles())
-		for(var/gas_type in connected_core.internal_fusion.gases)
-			var/datum/gas/gas = gas_type
-			fusion_gasdata.Add(list(list(
-			"id"= initial(gas.id),
-			"amount" = round(connected_core.internal_fusion.gases[gas][MOLES], 0.01),
-			)))
-	else
-		for(var/gas_type in connected_core.internal_fusion.gases)
-			var/datum/gas/gas = gas_type
-			fusion_gasdata.Add(list(list(
-				"id"= initial(gas.id),
-				"amount" = 0,
-				)))
-	//Moderator gases
-	var/list/moderator_gasdata = list()
-	if(connected_core.moderator_internal.get_moles())
-		for(var/gas_type in connected_core.moderator_internal.gases)
-			var/datum/gas/gas = gas_type
-			moderator_gasdata.Add(list(list(
-			"id"= initial(gas.id),
-			"amount" = round(connected_core.moderator_internal.gases[gas][MOLES], 0.01),
-			)))
-	else
-		for(var/gas_type in connected_core.moderator_internal.gases)
-			var/datum/gas/gas = gas_type
-			moderator_gasdata.Add(list(list(
-				"id"= initial(gas.id),
-				"amount" = 0,
-				)))
-
-	data["fusion_gases"] = fusion_gasdata
-	data["moderator_gases"] = moderator_gasdata
-
-	data["energy_level"] = connected_core.energy
-	data["heat_limiter_modifier"] = connected_core.heat_limiter_modifier
-	data["heat_output_min"] = connected_core.heat_output_min
-	data["heat_output_max"] = connected_core.heat_output_max
-	data["heat_output"] = connected_core.heat_output
-	data["instability"] = connected_core.instability
-
-	data["heating_conductor"] = connected_core.heating_conductor
-	data["magnetic_constrictor"] = connected_core.magnetic_constrictor
-	data["fuel_injection_rate"] = connected_core.fuel_injection_rate
-	data["moderator_injection_rate"] = connected_core.moderator_injection_rate
-	data["current_damper"] = connected_core.current_damper
-
-	data["power_level"] = connected_core.power_level
-	data["apc_energy"] = connected_core.get_area_cell_percent()
-	data["iron_content"] = connected_core.iron_content
-	data["integrity"] = connected_core.get_integrity_percent()
-
-	data["start_power"] = connected_core.start_power
-	data["start_cooling"] = connected_core.start_cooling
-	data["start_fuel"] = connected_core.start_fuel
-	data["start_moderator"] = connected_core.start_moderator
-
-	data["internal_fusion_temperature"] = connected_core.fusion_temperature
-	data["moderator_internal_temperature"] = connected_core.moderator_temperature
-	data["internal_output_temperature"] = connected_core.output_temperature
-	data["internal_coolant_temperature"] = connected_core.coolant_temperature
-
-	data["internal_fusion_temperature_archived"] = connected_core.fusion_temperature_archived
-	data["moderator_internal_temperature_archived"] = connected_core.moderator_temperature_archived
-	data["internal_output_temperature_archived"] = connected_core.output_temperature_archived
-	data["internal_coolant_temperature_archived"] = connected_core.coolant_temperature_archived
-	data["temperature_period"] = connected_core.temperature_period
-
-	data["waste_remove"] = connected_core.waste_remove
-	data["filter_types"] = list()
-	for(var/path in GLOB.meta_gas_info)
-		var/list/gas = GLOB.meta_gas_info[path]
-		data["filter_types"] += list(list("gas_id" = gas[META_GAS_ID], "gas_name" = gas[META_GAS_NAME], "enabled" = (path in connected_core.moderator_scrubbing)))
-
-	data["cooling_volume"] = connected_core.airs[1].volume
-	data["mod_filtering_rate"] = connected_core.moderator_filtering_rate
-
-	return data
-
-/obj/machinery/hypertorus/interface/ui_act(action, params)
-	. = ..()
-	if(.)
-		return
-	switch(action)
-		if("start_power")
-			connected_core.start_power = !connected_core.start_power
-			connected_core.update_use_power(connected_core.start_power ? ACTIVE_POWER_USE : IDLE_POWER_USE)
-			. = TRUE
-		if("start_cooling")
-			connected_core.start_cooling = !connected_core.start_cooling
-			. = TRUE
-		if("start_fuel")
-			connected_core.start_fuel = !connected_core.start_fuel
-			. = TRUE
-		if("start_moderator")
-			connected_core.start_moderator = !connected_core.start_moderator
-			. = TRUE
-		if("heating_conductor")
-			var/heating_conductor = text2num(params["heating_conductor"])
-			if(heating_conductor != null)
-				connected_core.heating_conductor = clamp(heating_conductor, 50, 500)
-				. = TRUE
-		if("magnetic_constrictor")
-			var/magnetic_constrictor = text2num(params["magnetic_constrictor"])
-			if(magnetic_constrictor != null)
-				connected_core.magnetic_constrictor = clamp(magnetic_constrictor, 50, 1000)
-				. = TRUE
-		if("fuel_injection_rate")
-			var/fuel_injection_rate = text2num(params["fuel_injection_rate"])
-			if(fuel_injection_rate != null)
-				connected_core.fuel_injection_rate = clamp(fuel_injection_rate, 0.5, 150)
-				. = TRUE
-		if("moderator_injection_rate")
-			var/moderator_injection_rate = text2num(params["moderator_injection_rate"])
-			if(moderator_injection_rate != null)
-				connected_core.moderator_injection_rate = clamp(moderator_injection_rate, 0.5, 150)
-				. = TRUE
-		if("current_damper")
-			var/current_damper = text2num(params["current_damper"])
-			if(current_damper != null)
-				connected_core.current_damper = clamp(current_damper, 0, 1000)
-				. = TRUE
-		if("waste_remove")
-			connected_core.waste_remove = !connected_core.waste_remove
-			. = TRUE
-		if("filter")
-			connected_core.moderator_scrubbing ^= gas_id2path(params["mode"])
-			. = TRUE
-		if("mod_filtering_rate")
-			var/mod_filtering_rate = text2num(params["mod_filtering_rate"])
-			if(mod_filtering_rate != null)
-				connected_core.moderator_filtering_rate = clamp(mod_filtering_rate, 5, 200)
-				. = TRUE
-		if("fuel")
-			connected_core.selected_fuel = null
-			var/fuel_mix = "nothing"
-			var/datum/hfr_fuel/fuel = null
-			if(params["mode"] != "")
-				fuel = GLOB.hfr_fuels_list[params["mode"]]
-			if(fuel)
-				connected_core.selected_fuel = fuel
-				fuel_mix = fuel.name
-			if(connected_core.internal_fusion.get_moles())
-				connected_core.dump_gases()
-			connected_core.update_parents() //prevent the machine from stopping because of the recipe change and the pipenet not updating
-			connected_core.linked_input.update_parents()
-			connected_core.linked_output.update_parents()
-			connected_core.linked_moderator.update_parents()
-			investigate_log("was set to recipe [fuel_mix ? fuel_mix : "null"] by [key_name(usr)]", INVESTIGATE_ATMOS)
-			. = TRUE
-		if("cooling_volume")
-			var/cooling_volume = text2num(params["cooling_volume"])
-			if(cooling_volume != null)
-				connected_core.airs[1].volume = clamp(cooling_volume, 50, 2000)
-				. = TRUE
-
-/obj/machinery/hypertorus/corner
-	name = "HFR corner"
-	desc = "Structural piece of the machine."
-	icon_state = "corner_off"
-	circuit = /obj/item/circuitboard/machine/HFR_corner
-	icon_state_off = "corner_off"
-	icon_state_open = "corner_open"
-	icon_state_active = "corner_active"
-	dir = SOUTHEAST
-
-/obj/item/paper/guides/jobs/atmos/hypertorus
-	name = "paper- 'Quick guide to safe handling of the HFR'"
-	info = "<B>How to safely(TM) operate the Hypertorus</B><BR>\
-	-Build the machine as it�s shown in the main guide.<BR>\
-	-Make a 50/50 gasmix of tritium and hydrogen totalling around 2000 moles.<BR>\
-	-Start the machine, fill up the cooling loop with plasma/hypernoblium and use space or freezers to cool it.<BR>\
-	-Connect the fuel mix into the fuel injector port, allow only 1000 moles into the machine to ease the kickstart of the reaction<BR>\
-	-Set the Heat conductor to 500 when starting the reaction, reset it to 100 when power level is higher than 1<BR>\
-	-In the event of a meltdown, set the heat conductor to max and set the current damper to max. Set the fuel injection to min. \
-	If the heat output doesn�t go negative, try changing the magnetic costrictors untill heat output goes negative. \
-	Make the cooling stronger, put high heat capacity gases inside the moderator (hypernoblium will help dealing with the problem)<BR><BR>\
-	<B>Warnings:</B><BR>\
-	-You cannot dismantle the machine if the power level is over 0<BR>\
-	-You cannot power of the machine if the power level is over 0<BR>\
-	-You cannot dispose of waste gases if power level is over 5<BR>\
-	-You cannot remove gases from the fusion mix if they are not helium and antinoblium<BR>\
-	-Hypernoblium will decrease the power of the mix by a lot<BR>\
-	-Antinoblium will INCREASE the power of the mix by a lot more<BR>\
-	-High heat capacity gases are harder to heat/cool<BR>\
-	-Low heat capacity gases are easier to heat/cool<BR>\
-	-The machine consumes 50 KW per power level, reaching 350 KW at power level 6 so prepare the SM accordingly<BR>\
-	-In case of a power shortage, the fusion reaction will CONTINUE but the cooling will STOP<BR><BR>\
-	The writer of the quick guide will not be held responsible for misuses and meltdown caused by the use of the guide, \
-	use more advanced guides to understando how the various gases will act as moderators."
-
-/obj/item/hfr_box
-	name = "HFR box"
-	desc = "If you see this, call the police."
-	icon = 'icons/obj/atmospherics/components/hypertorus.dmi'
-	icon_state = "box"
-	///What kind of box are we handling?
-	var/box_type = "impossible"
-	///What's the path of the machine we making
-	var/part_path
-
-/obj/item/hfr_box/corner
-	name = "HFR box corner"
-	desc = "Place this as the corner of your 3x3 multiblock fusion reactor"
-	icon_state = "box_corner"
-	box_type = "corner"
-	part_path = /obj/machinery/hypertorus/corner
-
-/obj/item/hfr_box/body
-	name = "HFR box body"
-	desc = "Place this on the sides of the core box of your 3x3 multiblock fusion reactor"
-	box_type = "body"
-	icon_state = "box_body"
-
-/obj/item/hfr_box/body/fuel_input
-	name = "HFR box fuel input"
-	part_path = /obj/machinery/atmospherics/components/unary/hypertorus/fuel_input
-
-/obj/item/hfr_box/body/moderator_input
-	name = "HFR box moderator input"
-	part_path = /obj/machinery/atmospherics/components/unary/hypertorus/moderator_input
-
-/obj/item/hfr_box/body/waste_output
-	name = "HFR box waste output"
-	part_path = /obj/machinery/atmospherics/components/unary/hypertorus/waste_output
-
-/obj/item/hfr_box/body/interface
-	name = "HFR box interface"
-	part_path = /obj/machinery/hypertorus/interface
-
-/obj/item/hfr_box/core
-	name = "HFR box core"
-	desc = "Activate this with a multitool to deploy the full machine after setting up the other boxes"
-	icon_state = "box_core"
-	box_type = "core"
-	part_path = /obj/machinery/atmospherics/components/unary/hypertorus/core
-
-/obj/item/hfr_box/core/multitool_act(mob/living/user, obj/item/I)
-	. = ..()
-	var/list/parts = list()
-	for(var/obj/item/hfr_box/box in orange(1,src))
-		var/direction = get_dir(src, box)
-		if(box.box_type == "corner")
-			if(ISDIAGONALDIR(direction))
-				box.dir = direction
-				parts |= box
-			continue
-		if(box.box_type == "body")
-			if(direction in GLOB.cardinals)
-				box.dir = direction
-				parts |= box
-			continue
-	if(parts.len == 8)
-		build_reactor(parts)
-	return
-
-/obj/item/hfr_box/core/proc/build_reactor(list/parts)
-	for(var/obj/item/hfr_box/box in parts)
-		if(box.box_type == "corner")
-			var/obj/machinery/hypertorus/corner/corner = new box.part_path(box.loc)
-			corner.dir = box.dir
-			qdel(box)
-			continue
-		if(box.box_type == "body")
-			var/location = get_turf(box)
-			if(box.part_path != /obj/machinery/hypertorus/interface)
-				var/obj/machinery/atmospherics/components/unary/hypertorus/part = new box.part_path(location, TRUE, box.dir)
-				part.dir = box.dir
-			else
-				var/obj/machinery/hypertorus/interface/part = new box.part_path(location)
-				part.dir = box.dir
-			qdel(box)
-			continue
-
-	new/obj/machinery/atmospherics/components/unary/hypertorus/core(loc, TRUE)
-	qdel(src)
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
deleted file mode 100644
index 80174808f65..00000000000
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
+++ /dev/null
@@ -1,619 +0,0 @@
-/**
- * This section contain all procs that helps building, destroy and control the hfr
- */
-
-/**
- * Called by multitool_act() in hfr_parts.dm, by atmos_process() in hfr_main_processes.dm and by fusion_process() in the same file
- * This proc checks the surrounding of the core to ensure that the machine has been build correctly, returns false if there is a missing piece/wrong placed one
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_part_connectivity()
-	. = TRUE
-	if(!anchored || panel_open)
-		return FALSE
-
-	for(var/obj/machinery/hypertorus/object in orange(1,src))
-		if(. == FALSE)
-			break
-
-		if(object.panel_open)
-			. = FALSE
-
-		if(istype(object,/obj/machinery/hypertorus/corner))
-			var/dir = get_dir(src,object)
-			if(dir in GLOB.cardinals)
-				. = FALSE
-			switch(dir)
-				if(SOUTHEAST)
-					if(object.dir != dir)
-						. = FALSE
-				if(SOUTHWEST)
-					if(object.dir != dir)
-						. = FALSE
-				if(NORTHEAST)
-					if(object.dir != dir)
-						. = FALSE
-				if(NORTHWEST)
-					if(object.dir != dir)
-						. = FALSE
-			corners |= object
-			continue
-
-		if(get_step(object,turn(object.dir,180)) != loc)
-			. = FALSE
-
-		if(istype(object,/obj/machinery/hypertorus/interface))
-			if(linked_interface && linked_interface != object)
-				. = FALSE
-			linked_interface = object
-
-	for(var/obj/machinery/atmospherics/components/unary/hypertorus/object in orange(1,src))
-		if(. == FALSE)
-			break
-
-		if(object.panel_open)
-			. = FALSE
-
-		if(get_step(object,turn(object.dir,180)) != loc)
-			. = FALSE
-
-		if(istype(object,/obj/machinery/atmospherics/components/unary/hypertorus/fuel_input))
-			if(linked_input && linked_input != object)
-				. = FALSE
-			linked_input = object
-			machine_parts |= object
-
-		if(istype(object,/obj/machinery/atmospherics/components/unary/hypertorus/waste_output))
-			if(linked_output && linked_output != object)
-				. = FALSE
-			linked_output = object
-			machine_parts |= object
-
-		if(istype(object,/obj/machinery/atmospherics/components/unary/hypertorus/moderator_input))
-			if(linked_moderator && linked_moderator != object)
-				. = FALSE
-			linked_moderator = object
-			machine_parts |= object
-
-	if(!linked_interface || !linked_input || !linked_moderator || !linked_output || corners.len != 4)
-		. = FALSE
-
-/**
- * Called by multitool_act() in hfr_parts.dm
- * It sets the pieces to active, allowing the player to start the main reaction
- * Arguments:
- * * -user: the player doing the action
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/activate(mob/living/user)
-	if(active)
-		to_chat(user, span_notice("You already activated the machine."))
-		return
-	to_chat(user, span_notice("You link all parts toghether."))
-	active = TRUE
-	update_appearance()
-	linked_interface.active = TRUE
-	linked_interface.update_appearance()
-	RegisterSignal(linked_interface, COMSIG_PARENT_QDELETING, .proc/unregister_signals)
-	linked_input.active = TRUE
-	linked_input.update_appearance()
-	RegisterSignal(linked_input, COMSIG_PARENT_QDELETING, .proc/unregister_signals)
-	linked_output.active = TRUE
-	linked_output.update_appearance()
-	RegisterSignal(linked_output, COMSIG_PARENT_QDELETING, .proc/unregister_signals)
-	linked_moderator.active = TRUE
-	linked_moderator.update_appearance()
-	RegisterSignal(linked_moderator, COMSIG_PARENT_QDELETING, .proc/unregister_signals)
-	for(var/obj/machinery/hypertorus/corner/corner in corners)
-		corner.active = TRUE
-		corner.update_appearance()
-		RegisterSignal(corner, COMSIG_PARENT_QDELETING, .proc/unregister_signals)
-	soundloop = new(src, TRUE)
-	soundloop.volume = 5
-
-/**
- * Called when a part gets deleted around the hfr, called on Destroy() of the hfr core in hfr_core.dm
- * Unregister the signals attached to the core from the various machines, if only_signals is false it will also call deactivate()
- * Arguments:
- * * only_signals: default FALSE, if true the proc will not call the deactivate() proc
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/unregister_signals(only_signals = FALSE)
-	SIGNAL_HANDLER
-	if(linked_interface)
-		UnregisterSignal(linked_interface, COMSIG_PARENT_QDELETING)
-	if(linked_input)
-		UnregisterSignal(linked_input, COMSIG_PARENT_QDELETING)
-	if(linked_output)
-		UnregisterSignal(linked_output, COMSIG_PARENT_QDELETING)
-	if(linked_moderator)
-		UnregisterSignal(linked_moderator, COMSIG_PARENT_QDELETING)
-	for(var/obj/machinery/hypertorus/corner/corner in corners)
-		UnregisterSignal(corner, COMSIG_PARENT_QDELETING)
-	if(!only_signals)
-		deactivate()
-
-/**
- * Called by unregister_signals() in this file, called when the main fusion processes check_part_connectivity() returns false
- * Deactivate the various machines by setting the active var to false, updates the machines icon and set the linked machine vars to null
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/deactivate()
-	if(!active)
-		return
-	active = FALSE
-	update_appearance()
-	if(linked_interface)
-		linked_interface.active = FALSE
-		linked_interface.update_appearance()
-		linked_interface = null
-	if(linked_input)
-		linked_input.active = FALSE
-		linked_input.update_appearance()
-		linked_input = null
-	if(linked_output)
-		linked_output.active = FALSE
-		linked_output.update_appearance()
-		linked_output = null
-	if(linked_moderator)
-		linked_moderator.active = FALSE
-		linked_moderator.update_appearance()
-		linked_moderator = null
-	if(corners.len)
-		for(var/obj/machinery/hypertorus/corner/corner in corners)
-			corner.active = FALSE
-			corner.update_appearance()
-		corners = list()
-	QDEL_NULL(soundloop)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/assert_gases()
-	//Assert the gases that will be used/created during the process
-
-	internal_fusion.assert_gas(/datum/gas/antinoblium)
-
-	moderator_internal.assert_gases(arglist(GLOB.meta_gas_info))
-
-	if (!selected_fuel)
-		return
-
-	internal_fusion.assert_gases(arglist(selected_fuel.requirements | selected_fuel.primary_products))
-
-/**
- * Updates all related pipenets from all connected components
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/update_pipenets()
-	update_parents()
-	linked_input.update_parents()
-	linked_output.update_parents()
-	linked_moderator.update_parents()
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/update_temperature_status(delta_time)
-	fusion_temperature_archived = fusion_temperature
-	fusion_temperature = internal_fusion.temperature
-	moderator_temperature_archived = moderator_temperature
-	moderator_temperature = moderator_internal.temperature
-	coolant_temperature_archived = coolant_temperature
-	coolant_temperature = airs[1].temperature
-	output_temperature_archived = output_temperature
-	output_temperature = linked_output.airs[1].temperature
-	temperature_period = delta_time
-
-	//Set the power level of the fusion process
-	switch(fusion_temperature)
-		if(-INFINITY to 500)
-			power_level = 0
-		if(500 to 1e3)
-			power_level = 1
-		if(1e3 to 1e4)
-			power_level = 2
-		if(1e4 to 1e5)
-			power_level = 3
-		if(1e5 to 1e6)
-			power_level = 4
-		if(1e6 to 1e7)
-			power_level = 5
-		else
-			power_level = 6
-
-/**
- * Infrequently plays accent sounds, and adjusts main loop parameters
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/play_ambience()
-	// We play delam/neutral sounds at a rate determined by power and critical_threshold_proximity
-	if(last_accent_sound < world.time && prob(20))
-		var/aggression = min(((critical_threshold_proximity / 800) * ((power_level) / 5)), 1.0) * 100
-		if(critical_threshold_proximity >= 300)
-			playsound(src, SFX_HYPERTORUS_MELTING, max(50, aggression), FALSE, 40, 30, falloff_distance = 10)
-		else
-			playsound(src, SFX_HYPERTORUS_CALM, max(50, aggression), FALSE, 25, 25, falloff_distance = 10)
-		var/next_sound = round((100 - aggression) * 5) + 5
-		last_accent_sound = world.time + max(HYPERTORUS_ACCENT_SOUND_MIN_COOLDOWN, next_sound)
-
-	var/ambient_hum = 1
-	if (check_fuel())
-		ambient_hum = power_level + 1
-	soundloop.volume = clamp(ambient_hum * 8, 0, 50)
-
-/**
- * Called by the main fusion processes in hfr_main_processes.dm
- * Getter for fusion fuel moles
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_fuel()
-	if(!selected_fuel)
-		return FALSE
-	if(!internal_fusion.get_moles())
-		return FALSE
-	for(var/gas_type in selected_fuel.requirements)
-		internal_fusion.assert_gas(gas_type)
-		if(internal_fusion.gases[gas_type][MOLES] < FUSION_MOLE_THRESHOLD)
-			return FALSE
-	return TRUE
-
-/**
- * Called by the main fusion processes in hfr_main_processes.dm
- * Check the power use of the machine, return TRUE if there is enough power in the powernet
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_power_use()
-	if(machine_stat & (NOPOWER|BROKEN))
-		return FALSE
-	if(use_power == ACTIVE_POWER_USE)
-		update_mode_power_usage(ACTIVE_POWER_USE, (power_level + 1) * MIN_POWER_USAGE) //Max around 350 KW
-
-	return TRUE
-
-///Checks if the gases in the input are the ones needed by the recipe
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_gas_requirements()
-	var/datum/gas_mixture/contents = linked_input.airs[1]
-	for(var/gas_type in selected_fuel.requirements)
-		if(!contents.gases[gas_type] || !contents.gases[gas_type][MOLES])
-			return FALSE
-	return TRUE
-
-///Removes the gases from the internal gasmix when the recipe is changed
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/dump_gases()
-	var/datum/gas_mixture/remove = internal_fusion.remove(internal_fusion.get_moles())
-	linked_output.airs[1].merge(remove)
-	internal_fusion.garbage_collect()
-	linked_input.airs[1].garbage_collect()
-
-/**
- * Called by alarm() in this file
- * Check the integrity level and returns the status of the machine
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/get_status()
-	var/integrity = get_integrity_percent()
-	if(integrity < HYPERTORUS_MELTING_PERCENT)
-		return HYPERTORUS_MELTING
-
-	if(integrity < HYPERTORUS_EMERGENCY_PERCENT)
-		return HYPERTORUS_EMERGENCY
-
-	if(integrity < HYPERTORUS_DANGER_PERCENT)
-		return HYPERTORUS_DANGER
-
-	if(integrity < HYPERTORUS_WARNING_PERCENT)
-		return HYPERTORUS_WARNING
-
-	if(power_level > 0)
-		return HYPERTORUS_NOMINAL
-	return HYPERTORUS_INACTIVE
-
-/**
- * Called by check_alert() in this file
- * Play a sound from the machine, the type depends on the status of the hfr
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/alarm()
-	switch(get_status())
-		if(HYPERTORUS_MELTING)
-			playsound(src, 'sound/misc/bloblarm.ogg', 100, FALSE, 40, 30, falloff_distance = 10)
-		if(HYPERTORUS_EMERGENCY)
-			playsound(src, 'sound/machines/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10)
-		if(HYPERTORUS_DANGER)
-			playsound(src, 'sound/machines/engine_alert2.ogg', 100, FALSE, 30, 30, falloff_distance = 10)
-		if(HYPERTORUS_WARNING)
-			playsound(src, 'sound/machines/terminal_alert.ogg', 75)
-
-/**
- * Getter for the machine integrity
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/get_integrity_percent()
-	var/integrity = critical_threshold_proximity / melting_point
-	integrity = round(100 - integrity * 100, 0.01)
-	integrity = integrity < 0 ? 0 : integrity
-	return integrity
-
-/**
- * Get how charged the area's APC is
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/get_area_cell_percent()
-	// Make sure to get APC levels from the same area the core draws from
-	// Just in case people build an HFR across boundaries
-	var/area/area = get_area(src)
-	if (!area)
-		return 0
-	var/obj/machinery/power/apc/apc = area.apc
-	if (!apc)
-		return 0
-	var/obj/item/stock_parts/cell/cell = apc.cell
-	if (!cell)
-		return 0
-	return cell.percent()
-
-/**
- * Called by process_atmos() in hfr_main_processes.dm
- * Called after checking the damage of the machine, calls alarm() and countdown()
- * Broadcast messages into engi and common radio
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_alert()
-	if(critical_threshold_proximity < warning_point)
-		return
-	if((REALTIMEOFDAY - lastwarning) / 10 >= WARNING_TIME_DELAY)
-		alarm()
-
-		if(critical_threshold_proximity > emergency_point)
-			radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity_percent()]%", common_channel)
-			lastwarning = REALTIMEOFDAY
-			if(!has_reached_emergency)
-				investigate_log("has reached the emergency point for the first time.", INVESTIGATE_HYPERTORUS)
-				message_admins("[src] has reached the emergency point [ADMIN_JMP(src)].")
-				has_reached_emergency = TRUE
-		else if(critical_threshold_proximity >= critical_threshold_proximity_archived) // The damage is still going up
-			radio.talk_into(src, "[warning_alert] Integrity: [get_integrity_percent()]%", engineering_channel)
-			lastwarning = REALTIMEOFDAY - (WARNING_TIME_DELAY * 5)
-
-		else // Phew, we're safe
-			radio.talk_into(src, "[safe_alert] Integrity: [get_integrity_percent()]%", engineering_channel)
-			lastwarning = REALTIMEOFDAY
-
-	//Melt
-	if(critical_threshold_proximity > melting_point)
-		countdown()
-
-/**
- * Called by check_alert() in this file
- * Called when the damage has reached critical levels, start the countdown before the destruction, calls meltdown()
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/countdown()
-	set waitfor = FALSE
-
-	if(final_countdown) // We're already doing it go away
-		return
-	final_countdown = TRUE
-
-	var/critical = selected_fuel.meltdown_flags & HYPERTORUS_FLAG_CRITICAL_MELTDOWN
-	if(critical)
-		priority_announce("WARNING - The explosion will likely cover a big part of the station and the coming EMP will wipe out most of the electronics. \
-				Get as far away as possible from the reactor or find a way to shut it down.", "Alert")
-	var/speaking = "[emergency_alert] The Hypertorus fusion reactor has reached critical integrity failure. Emergency magnetic dampeners online."
-	radio.talk_into(src, speaking, common_channel, language = get_selected_language())
-	for(var/i in HYPERTORUS_COUNTDOWN_TIME to 0 step -10)
-		if(critical_threshold_proximity < melting_point) // Cutting it a bit close there engineers
-			radio.talk_into(src, "[safe_alert] Failsafe has been disengaged.", common_channel)
-			final_countdown = FALSE
-			return
-		else if((i % 50) != 0 && i > 50) // A message once every 5 seconds until the final 5 seconds which count down individualy
-			sleep(10)
-			continue
-		else if(i > 50)
-			if(i == 10 SECONDS && critical)
-				sound_to_playing_players('sound/machines/hypertorus/HFR_critical_explosion.ogg')
-			speaking = "[DisplayTimeText(i, TRUE)] remain before total integrity failure."
-		else
-			speaking = "[i*0.1]..."
-		radio.talk_into(src, speaking, common_channel)
-		sleep(10)
-
-	meltdown()
-
-/**
- * Called by countdown() in this file
- * Create the explosion + the gas emission before deleting the machine core.
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/meltdown()
-	var/flash_explosion = 0
-	var/light_impact_explosion = 0
-	var/heavy_impact_explosion = 0
-	var/devastating_explosion = 0
-	var/em_pulse = selected_fuel.meltdown_flags & HYPERTORUS_FLAG_EMP
-	var/rad_pulse = selected_fuel.meltdown_flags & HYPERTORUS_FLAG_RADIATION_PULSE
-	var/emp_light_size = 0
-	var/emp_heavy_size = 0
-	var/rad_pulse_size = 0
-	var/gas_spread = 0
-	var/gas_pockets = 0
-	var/critical = selected_fuel.meltdown_flags & HYPERTORUS_FLAG_CRITICAL_MELTDOWN
-
-	if(selected_fuel.meltdown_flags & HYPERTORUS_FLAG_BASE_EXPLOSION)
-		flash_explosion = power_level * 3
-		light_impact_explosion = power_level * 2
-
-	if(selected_fuel.meltdown_flags & HYPERTORUS_FLAG_MEDIUM_EXPLOSION)
-		flash_explosion = power_level * 6
-		light_impact_explosion = power_level * 5
-		heavy_impact_explosion = power_level * 0.5
-
-	if(selected_fuel.meltdown_flags & HYPERTORUS_FLAG_DEVASTATING_EXPLOSION)
-		flash_explosion = power_level * 8
-		light_impact_explosion = power_level * 7
-		heavy_impact_explosion = power_level * 2
-		devastating_explosion = power_level
-
-	if(selected_fuel.meltdown_flags & HYPERTORUS_FLAG_MINIMUM_SPREAD)
-		if(em_pulse)
-			emp_light_size = power_level * 3
-			emp_heavy_size = power_level * 1
-		if(rad_pulse)
-			rad_pulse_size = 2 * power_level + 8
-		gas_pockets = 5
-		gas_spread = power_level * 2
-
-	if(selected_fuel.meltdown_flags & HYPERTORUS_FLAG_MEDIUM_SPREAD)
-		if(em_pulse)
-			emp_light_size = power_level * 5
-			emp_heavy_size = power_level * 3
-		if(rad_pulse)
-			rad_pulse_size = power_level + 24
-		gas_pockets = 7
-		gas_spread = power_level * 4
-
-	if(selected_fuel.meltdown_flags & HYPERTORUS_FLAG_BIG_SPREAD)
-		if(em_pulse)
-			emp_light_size = power_level * 7
-			emp_heavy_size = power_level * 5
-		if(rad_pulse)
-			rad_pulse_size = power_level + 34
-		gas_pockets = 10
-		gas_spread = power_level * 6
-
-	if(selected_fuel.meltdown_flags & HYPERTORUS_FLAG_MASSIVE_SPREAD)
-		if(em_pulse)
-			emp_light_size = power_level * 9
-			emp_heavy_size = power_level * 7
-		if(rad_pulse)
-			rad_pulse_size = power_level + 44
-		gas_pockets = 15
-		gas_spread = power_level * 8
-
-	var/list/around_turfs = circle_range_turfs(src, gas_spread)
-	for(var/turf/turf as anything in around_turfs)
-		if(isclosedturf(turf) || isspaceturf(turf))
-			around_turfs -= turf
-			continue
-	var/datum/gas_mixture/remove_fusion
-	if(internal_fusion.get_moles() > 0)
-		remove_fusion = internal_fusion.removeRatio(0.2)
-		var/datum/gas_mixture/remove
-		for(var/i in 1 to gas_pockets)
-			remove = remove_fusion.removeRatio(1/gas_pockets)
-			var/turf/local = pick(around_turfs)
-			local.assume_air(remove)
-		loc.assume_air(internal_fusion)
-	var/datum/gas_mixture/remove_moderator
-	if(moderator_internal.get_moles() > 0)
-		remove_moderator = moderator_internal.removeRatio(0.2)
-		var/datum/gas_mixture/remove
-		for(var/i in 1 to gas_pockets)
-			remove = remove_moderator.removeRatio(1/gas_pockets)
-			var/turf/local = pick(around_turfs)
-			local.assume_air(remove)
-		loc.assume_air(moderator_internal)
-
-	//Max explosion ranges: devastation = 12, heavy = 24, light = 42
-	explosion(
-		origin = src,
-		devastation_range = critical ? devastating_explosion * 2 : devastating_explosion,
-		heavy_impact_range = critical ?  heavy_impact_explosion * 2 : heavy_impact_explosion,
-		light_impact_range = light_impact_explosion,
-		flash_range = flash_explosion,
-		adminlog = TRUE,
-		ignorecap = TRUE
-		)
-
-	if(rad_pulse)
-		radiation_pulse(
-			source = loc,
-			max_range = rad_pulse_size,
-			threshold = 0.05,
-		)
-
-	if(em_pulse)
-		empulse(
-			epicenter = loc,
-			heavy_range = critical ? emp_heavy_size * 2 : emp_heavy_size,
-			light_range = critical ? emp_light_size * 2 : emp_heavy_size,
-			log = TRUE
-			)
-
-	qdel(src)
-
-/**
- * Induce hallucinations in nearby humans.
- *
- * force will make hallucinations ignore meson protection.
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/induce_hallucination(strength, delta_time, force=FALSE)
-	for(var/mob/living/carbon/human/human in view(src, HALLUCINATION_HFR(heat_output)))
-		if(!force && istype(human.glasses, /obj/item/clothing/glasses/meson))
-			continue
-		var/distance_root = sqrt(1 / max(1, get_dist(human, src)))
-		human.hallucination += strength * distance_root * delta_time
-		human.hallucination = clamp(human.hallucination, 0, 200)
-
-/**
- * Emit radiation
- */
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/emit_rads()
-	radiation_pulse(
-		src,
-		max_range = 6,
-		threshold = 0.3,
-	)
-
-/*
- * HFR cracking related procs
- */
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_cracked_parts()
-	for(var/obj/machinery/atmospherics/components/unary/hypertorus/part in machine_parts)
-		if(part.cracked)
-			return TRUE
-	return FALSE
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/create_crack()
-	var/obj/machinery/atmospherics/components/unary/hypertorus/part = pick(machine_parts)
-	part.cracked = TRUE
-	part.update_appearance()
-	return part
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/spill_gases(obj/origin, datum/gas_mixture/target_mix, ratio)
-	var/datum/gas_mixture/remove_mixture = target_mix.removeRatio(ratio)
-	var/turf/origin_turf = origin.loc
-	if(!origin_turf)
-		return
-	origin_turf.assume_air(remove_mixture)
-
-/obj/machinery/atmospherics/components/unary/hypertorus/core/proc/check_spill(delta_time)
-	var/obj/machinery/atmospherics/components/unary/hypertorus/cracked_part = check_cracked_parts()
-	if (cracked_part)
-		// We have an existing crack
-		var/leak_rate
-		if (moderator_internal.returnPressure() < HYPERTORUS_MEDIUM_SPILL_PRESSURE)
-			// Not high pressure, but can still leak
-			if (!prob(HYPERTORUS_WEAK_SPILL_CHANCE))
-				return
-			leak_rate = HYPERTORUS_WEAK_SPILL_RATE
-		else if (moderator_internal.returnPressure() < HYPERTORUS_STRONG_SPILL_PRESSURE)
-			// Lots of gas in here, out we go
-			leak_rate = HYPERTORUS_MEDIUM_SPILL_RATE
-		else
-			// Gotta go fast
-			leak_rate = HYPERTORUS_STRONG_SPILL_RATE
-		spill_gases(cracked_part, moderator_internal, ratio = 1 - (1 - leak_rate) ** delta_time)
-		return
-
-	if (moderator_internal.get_moles() < HYPERTORUS_HYPERCRITICAL_MOLES)
-		return
-	cracked_part = create_crack()
-	// See if we do anything in the initial rupture
-	if (moderator_internal.returnPressure() < HYPERTORUS_MEDIUM_SPILL_PRESSURE)
-		return
-	if (moderator_internal.returnPressure() < HYPERTORUS_STRONG_SPILL_PRESSURE)
-		// Medium explosion on initial rupture
-		explosion(
-			origin = cracked_part,
-			devastation_range = 0,
-			heavy_impact_range = 0,
-			light_impact_range = 1,
-			flame_range = 3,
-			flash_range = 3
-			)
-		spill_gases(cracked_part, moderator_internal, ratio = HYPERTORUS_MEDIUM_SPILL_INITIAL)
-		return
-	// Enough pressure for a strong explosion. Oh dear, oh dear.
-	explosion(
-		origin = cracked_part,
-		devastation_range = 0,
-		heavy_impact_range = 1,
-		light_impact_range = 3,
-		flame_range = 5,
-		flash_range = 5
-		)
-	spill_gases(cracked_part, moderator_internal, ratio = HYPERTORUS_STRONG_SPILL_INITIAL)
-	return
-
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
deleted file mode 100644
index 11521031303..00000000000
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
+++ /dev/null
@@ -1,183 +0,0 @@
-///Global list of recipes for atmospheric machines to use
-GLOBAL_LIST_INIT(gas_recipe_meta, gas_recipes_list())
-
-/*
- * Global proc to build the gas recipe global list
- */
-/proc/gas_recipes_list()
-	. = list()
-	for(var/recipe_path in subtypesof(/datum/gas_recipe))
-		var/datum/gas_recipe/recipe = new recipe_path()
-
-		.[recipe.id] = recipe
-
-/datum/gas_recipe
-	///Id of the recipe for easy identification in the code
-	var/id = ""
-	///What machine the recipe is for
-	var/machine_type = ""
-	///Displayed name of the recipe
-	var/name = ""
-	///Minimum temperature for the recipe
-	var/min_temp = TCMB
-	///Maximum temperature for the recipe
-	var/max_temp = INFINITY
-	/**
-	 * Amount of thermal energy released/consumed by the reaction.
-	 * Positive numbers make the reaction release energy (exothermic) while negative numbers make the reaction consume energy (endothermic).
-	 */
-	var/energy_release = 0
-	var/dangerous = FALSE
-	///Gas required for the recipe to work
-	var/list/requirements
-	///Products made from the recipe
-	var/list/products
-
-/datum/gas_recipe/crystallizer
-	machine_type = "Crystallizer"
-
-/datum/gas_recipe/crystallizer/hypern_crystalium
-	id = "hyper_crystalium"
-	name = "Hypernoblium Crystal"
-	min_temp = 3
-	max_temp = 250
-	energy_release = -250000
-	requirements = list(/datum/gas/oxygen = 2000, /datum/gas/hypernoblium = 175)
-	products = list(/obj/item/hypernoblium_crystal = 1)
-
-/datum/gas_recipe/crystallizer/metallic_hydrogen
-	id = "metal_h"
-	name = "Metallic hydrogen"
-	min_temp = 50000
-	max_temp = 150000
-	energy_release = -2500000
-	requirements = list(/datum/gas/hydrogen = 300, /datum/gas/bz = 50)
-	products = list(/obj/item/stack/sheet/mineral/metal_hydrogen = 1)
-
-/datum/gas_recipe/crystallizer/healium_grenade
-	id = "healium_g"
-	name = "Healium crystal"
-	min_temp = 200
-	max_temp = 400
-	energy_release = -2000000
-	requirements = list(/datum/gas/healium = 100, /datum/gas/oxygen = 120, /datum/gas/plasma = 50)
-	products = list(/obj/item/grenade/gas_crystal/healium_crystal = 1)
-
-/datum/gas_recipe/crystallizer/proto_nitrate_grenade
-	id = "proto_nitrate_g"
-	name = "Proto nitrate crystal"
-	min_temp = 200
-	max_temp = 400
-	energy_release = 1500000
-	requirements = list(/datum/gas/proto_nitrate = 100, /datum/gas/nitrogen = 80, /datum/gas/oxygen = 80)
-	products = list(/obj/item/grenade/gas_crystal/proto_nitrate_crystal = 1)
-
-/datum/gas_recipe/crystallizer/hot_ice
-	id = "hot_ice"
-	name = "Hot ice"
-	min_temp = 15
-	max_temp = 35
-	energy_release = -3000000
-	requirements = list(/datum/gas/freon = 60, /datum/gas/plasma = 160, /datum/gas/oxygen = 80)
-	products = list(/obj/item/stack/sheet/hot_ice = 1)
-
-/datum/gas_recipe/crystallizer/ammonia_crystal
-	id = "ammonia_crystal"
-	name = "Ammonia crystal"
-	min_temp = 200
-	max_temp = 240
-	energy_release = 950000
-	requirements = list(/datum/gas/hydrogen = 50, /datum/gas/nitrogen = 40)
-	products = list(/obj/item/stack/ammonia_crystals = 2)
-
-/datum/gas_recipe/crystallizer/shard
-	id = "crystal_shard"
-	name = "Supermatter crystal shard"
-	min_temp = TCMB
-	max_temp = 5
-	energy_release = 150000000
-	dangerous = TRUE
-	requirements = list(/datum/gas/hypernoblium = 250, /datum/gas/antinoblium = 250, /datum/gas/bz = 200, /datum/gas/plasma = 5000, /datum/gas/oxygen = 4500)
-	products = list(/obj/machinery/power/supermatter_crystal/shard = 1)
-
-/datum/gas_recipe/crystallizer/n2o_crystal
-	id = "n2o_crystal"
-	name = "Nitrous oxide crystal"
-	min_temp = 50
-	max_temp = 350
-	energy_release = 3500000
-	requirements = list(/datum/gas/nitrous_oxide = 150, /datum/gas/bz = 30)
-	products = list(/obj/item/grenade/gas_crystal/nitrous_oxide_crystal = 1)
-
-/datum/gas_recipe/crystallizer/diamond
-	id = "diamond"
-	name = "Diamond"
-	min_temp = 10000
-	max_temp = 30000
-	energy_release = 9500000
-	requirements = list(/datum/gas/carbon_dioxide = 1500)
-	products = list(/obj/item/stack/sheet/mineral/diamond = 1)
-
-/datum/gas_recipe/crystallizer/plasma_sheet
-	id = "plasma_sheet"
-	name = "Plasma sheet"
-	min_temp = 10
-	max_temp = 20
-	energy_release = 3500000
-	requirements = list(/datum/gas/plasma = 450)
-	products = list(/obj/item/stack/sheet/mineral/plasma = 1)
-
-/datum/gas_recipe/crystallizer/crystal_cell
-	id = "crystal_cell"
-	name = "Crystal Cell"
-	min_temp = 50
-	max_temp = 90
-	energy_release = -800000
-	requirements = list(/datum/gas/plasma = 800, /datum/gas/helium = 100, /datum/gas/bz = 50)
-	products = list(/obj/item/stock_parts/cell/crystal_cell = 1)
-
-/datum/gas_recipe/crystallizer/zaukerite
-	id = "zaukerite"
-	name = "Zaukerite sheet"
-	min_temp = 5
-	max_temp = 20
-	energy_release = 2900000
-	requirements = list(/datum/gas/antinoblium = 5, /datum/gas/zauker = 20, /datum/gas/bz = 7.5)
-	products = list(/obj/item/stack/sheet/mineral/zaukerite = 2)
-
-/datum/gas_recipe/crystallizer/fuel_pellet
-	id = "fuel_basic"
-	name = "standard fuel pellet"
-	energy_release = -6000000
-	requirements = list(/datum/gas/oxygen = 50, /datum/gas/plasma = 100)
-	products = list(/obj/item/fuel_pellet = 1)
-
-/datum/gas_recipe/crystallizer/fuel_pellet_advanced
-	id = "fuel_advanced"
-	name = "advanced fuel pellet"
-	energy_release = -6000000
-	requirements = list(/datum/gas/tritium = 100, /datum/gas/hydrogen = 100)
-	products = list(/obj/item/fuel_pellet/advanced = 1)
-
-/datum/gas_recipe/crystallizer/fuel_pellet_exotic
-	id = "fuel_exotic"
-	name = "exotic fuel pellet"
-	energy_release = -6000000
-	requirements = list(/datum/gas/hypernoblium = 100, /datum/gas/nitrium = 100)
-	products = list(/obj/item/fuel_pellet/exotic = 1)
-
-/datum/gas_recipe/crystallizer/crystal_foam
-	id = "crystal_foam"
-	name = "Crystal foam grenade"
-	energy_release = 140000
-	requirements = list(/datum/gas/carbon_dioxide = 150, /datum/gas/nitrous_oxide = 100, /datum/gas/water_vapor = 25)
-	products = list(/obj/item/grenade/gas_crystal/crystal_foam = 1)
-
-/datum/gas_recipe/crystallizer/crystallized_nitrium
-	id = "crystallized_nitrium"
-	name = "Nitrium crystal"
-	min_temp = 10
-	max_temp = 25
-	energy_release = -45000
-	requirements = list(/datum/gas/nitrium = 150, /datum/gas/oxygen = 70, /datum/gas/bz = 50)
-	products = list(/obj/item/nitrium_crystal = 1)
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
deleted file mode 100644
index cbd6b1d06e0..00000000000
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
+++ /dev/null
@@ -1,338 +0,0 @@
-#define MIN_PROGRESS_AMOUNT 3
-#define MIN_DEVIATION_RATE 0.90
-#define MAX_DEVIATION_RATE 1.1
-#define HIGH_CONDUCTIVITY_RATIO 0.95
-
-/obj/machinery/atmospherics/components/binary/crystallizer
-	icon = 'icons/obj/atmospherics/components/machines.dmi'
-	icon_state = "crystallizer-off"
-	name = "crystallizer"
-	desc = "Used to crystallize or solidify gases."
-	layer = ABOVE_MOB_LAYER
-	plane = GAME_PLANE_UPPER
-	density = TRUE
-	max_integrity = 300
-	armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 80, ACID = 30)
-	circuit = /obj/item/circuitboard/machine/crystallizer
-	pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
-	vent_movement = NONE
-
-	///Base icon state for the machine to be used in update_icon()
-	var/base_icon = "crystallizer"
-	///Internal Gas mix used for processing the gases that have been put in
-	var/datum/gas_mixture/internal
-	///Var that controls how much gas gets injected in moles per tick
-	var/gas_input = 0
-	///Saves the progress during the processing of the items
-	var/progress_bar = 0
-	///Stores the amount of lost quality
-	var/quality_loss = 0
-	///Stores the recipe selected by the user in the GUI
-	var/datum/gas_recipe/selected_recipe = null
-	///Stores the total amount of moles needed for the current recipe
-	var/total_recipe_moles = 0
-
-/obj/machinery/atmospherics/components/binary/crystallizer/Initialize(mapload)
-	. = ..()
-	internal = new
-
-/obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, params)
-	if(!on)
-		if(default_deconstruction_screwdriver(user, "[base_icon]-open", "[base_icon]-off", I))
-			return
-	if(default_change_direction_wrench(user, I))
-		return
-	if(default_deconstruction_crowbar(I))
-		return
-	return ..()
-
-/obj/machinery/atmospherics/components/binary/crystallizer/default_change_direction_wrench(mob/user, obj/item/I)
-	. = ..()
-	if(!.)
-		return FALSE
-	set_init_directions()
-	var/obj/machinery/atmospherics/node1 = nodes[1]
-	var/obj/machinery/atmospherics/node2 = nodes[2]
-	if(node1)
-		if(src in node1.nodes) //Only if it's actually connected. On-pipe version would is one-sided.
-			node1.disconnect(src)
-		nodes[1] = null
-	if(node2)
-		if(src in node2.nodes) //Only if it's actually connected. On-pipe version would is one-sided.
-			node2.disconnect(src)
-		nodes[2] = null
-
-	if(parents[1])
-		nullify_pipenet(parents[1])
-	if(parents[2])
-		nullify_pipenet(parents[2])
-
-	atmos_init()
-	node1 = nodes[1]
-	if(node1)
-		node1.atmos_init()
-		node1.add_member(src)
-	node2 = nodes[2]
-	if(node2)
-		node2.atmos_init()
-		node2.add_member(src)
-	SSair.add_to_rebuild_queue(src)
-	return TRUE
-
-/obj/machinery/atmospherics/components/binary/crystallizer/update_overlays()
-	. = ..()
-	cut_overlays()
-	var/mutable_appearance/pipe_appearance1 = mutable_appearance('icons/obj/atmospherics/pipes/pipe_underlays.dmi', "intact_[dir]_[piping_layer]", layer = GAS_SCRUBBER_LAYER)
-	pipe_appearance1.color = COLOR_LIME
-	var/mutable_appearance/pipe_appearance2 = mutable_appearance('icons/obj/atmospherics/pipes/pipe_underlays.dmi', "intact_[turn(dir, 180)]_[piping_layer]", layer = GAS_SCRUBBER_LAYER)
-	pipe_appearance2.color = COLOR_MOSTLY_PURE_RED
-	. += pipe_appearance1
-	. += pipe_appearance2
-
-/obj/machinery/atmospherics/components/binary/crystallizer/update_icon_state()
-	. = ..()
-	if(panel_open)
-		icon_state = "[base_icon]-open"
-	else if(on && is_operational)
-		icon_state = "[base_icon]-on"
-	else
-		icon_state = "[base_icon]-off"
-
-/obj/machinery/atmospherics/components/binary/crystallizer/attackby_secondary(mob/user)
-	if(!can_interact(user))
-		return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-	on = !on
-	investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
-	update_icon()
-
-///Checks if the reaction temperature is inside the range of temperature + a little deviation
-/obj/machinery/atmospherics/components/binary/crystallizer/proc/check_temp_requirements()
-	if(internal.temperature >= selected_recipe.min_temp * MIN_DEVIATION_RATE && internal.temperature <= selected_recipe.max_temp * MAX_DEVIATION_RATE)
-		return TRUE
-	return FALSE
-
-///Injects the gases from the input inside the internal gasmix, the amount is dependant on the gas_input var
-/obj/machinery/atmospherics/components/binary/crystallizer/proc/inject_gases()
-	var/datum/gas_mixture/contents = airs[2]
-	for(var/gas_type in selected_recipe.requirements)
-		if(!contents.gases[gas_type] || !contents.gases[gas_type][MOLES])
-			continue
-		if(internal.gases[gas_type] && internal.gases[gas_type][MOLES] >= selected_recipe.requirements[gas_type] * 2)
-			continue
-		internal.merge(contents.remove_specific(gas_type, contents.gases[gas_type][MOLES] * gas_input))
-
-///Checks if the gases required are all inside
-/obj/machinery/atmospherics/components/binary/crystallizer/proc/internal_check()
-	var/gas_check = 0
-	for(var/gas_type in selected_recipe.requirements)
-		if(!internal.gases[gas_type] || !internal.gases[gas_type][MOLES])
-			return FALSE
-		if(internal.gases[gas_type][MOLES] >= selected_recipe.requirements[gas_type])
-			gas_check++
-	if(gas_check == selected_recipe.requirements.len)
-		return TRUE
-	return FALSE
-
-///Calculation for the heat of the various gas mixes and controls the quality of the item
-/obj/machinery/atmospherics/components/binary/crystallizer/proc/heat_calculations()
-	var/progress_amount_to_quality = MIN_PROGRESS_AMOUNT * 4.5 / (round(log(10, total_recipe_moles * 0.1), 0.01))
-	if((internal.temperature >= (selected_recipe.min_temp * MIN_DEVIATION_RATE) && internal.temperature <= selected_recipe.min_temp) || \
-		(internal.temperature >= selected_recipe.max_temp && internal.temperature <= (selected_recipe.max_temp * MAX_DEVIATION_RATE)))
-		quality_loss = min(quality_loss + progress_amount_to_quality, 100)
-
-	var/median_temperature = (selected_recipe.max_temp + selected_recipe.min_temp) / 2
-	if(internal.temperature >= (median_temperature * MIN_DEVIATION_RATE) && internal.temperature <= (median_temperature * MAX_DEVIATION_RATE))
-		quality_loss = max(quality_loss - progress_amount_to_quality, -85)
-
-	internal.temperature = max(internal.temperature + (selected_recipe.energy_release / internal.getHeatCapacity()), TCMB)
-	update_parents()
-
-///Conduction between the internal gasmix and the moderating (cooling/heating) gasmix.
-/obj/machinery/atmospherics/components/binary/crystallizer/proc/heat_conduction()
-	var/datum/gas_mixture/cooling_port = airs[1]
-	if(cooling_port.get_moles() > MINIMUM_MOLE_COUNT)
-		if(internal.get_moles() > 0)
-			var/coolant_temperature_delta = cooling_port.temperature - internal.temperature
-			var/cooling_heat_capacity = cooling_port.getHeatCapacity()
-			var/internal_heat_capacity = internal.getHeatCapacity()
-			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()
-
-///Calculate the total moles needed for the recipe
-/obj/machinery/atmospherics/components/binary/crystallizer/proc/moles_calculations()
-	var/amounts = 0
-	for(var/gas_type in selected_recipe.requirements)
-		amounts += selected_recipe.requirements[gas_type]
-	total_recipe_moles = amounts
-
-///Removes the gases from the internal gasmix when the recipe is changed
-/obj/machinery/atmospherics/components/binary/crystallizer/proc/dump_gases()
-	var/datum/gas_mixture/remove = internal.remove(internal.get_moles())
-	airs[2].merge(remove)
-	internal.garbage_collect()
-
-/obj/machinery/atmospherics/components/binary/crystallizer/process_atmos()
-	if(!on || !is_operational || selected_recipe == null)
-		return
-
-	inject_gases()
-
-	if(!internal.get_moles())
-		return
-
-	heat_conduction()
-
-	if(internal_check())
-		if(check_temp_requirements())
-			heat_calculations()
-			progress_bar = min(progress_bar + (MIN_PROGRESS_AMOUNT * 5 / (round(log(10, total_recipe_moles * 0.1), 0.01))), 100)
-		else
-			quality_loss = min(quality_loss + 0.5, 100)
-			progress_bar = max(progress_bar - 1, 0)
-	if(progress_bar != 100)
-		update_parents()
-		return
-	progress_bar = 0
-
-	for(var/gas_type in selected_recipe.requirements)
-		var/required_gas_moles = selected_recipe.requirements[gas_type]
-		var/amount_consumed = required_gas_moles + (required_gas_moles * (quality_loss * 0.01))
-		if(internal.gases[gas_type][MOLES] < amount_consumed)
-			quality_loss = min(quality_loss + 10, 100)
-		internal.remove_specific(gas_type, amount_consumed)
-
-	var/total_quality = clamp(50 - quality_loss, 0, 100)
-	var/quality_control
-	switch(total_quality)
-		if(100)
-			quality_control = "Masterwork"
-		if(95 to 99)
-			quality_control = "Supreme"
-		if(75 to 94)
-			quality_control = "Good"
-		if(65 to 74)
-			quality_control = "Decent"
-		if(55 to 64)
-			quality_control = "Average"
-		if(35 to 54)
-			quality_control = "Ok"
-		if(15 to 34)
-			quality_control = "Poor"
-		if(5 to 14)
-			quality_control = "Ugly"
-		if(1 to 4)
-			quality_control = "Cracked"
-		if(0)
-			quality_control = "Oh God why"
-
-	for(var/path in selected_recipe.products)
-		var/amount_produced = selected_recipe.products[path]
-		for(var/i in 1 to amount_produced)
-			var/obj/creation = new path(get_step(src, SOUTH))
-			creation.name = "[quality_control] [creation.name]"
-			if(selected_recipe.dangerous)
-				investigate_log("has been created in the crystallizer.", INVESTIGATE_ENGINE)
-				message_admins("[src] has been created in the crystallizer [ADMIN_JMP(src)].")
-
-
-	quality_loss = 0
-	update_parents()
-
-/obj/machinery/atmospherics/components/binary/crystallizer/ui_interact(mob/user, datum/tgui/ui)
-	ui = SStgui.try_update_ui(user, src, ui)
-	if(!ui)
-		ui = new(user, src, "Crystallizer", name)
-		ui.open()
-
-/obj/machinery/atmospherics/components/binary/crystallizer/ui_static_data()
-	var/data = list()
-	data["selected_recipes"] = list(list("name" = "Nothing", "id" = ""))
-	for(var/path in GLOB.gas_recipe_meta)
-		var/datum/gas_recipe/recipe = GLOB.gas_recipe_meta[path]
-		if(recipe.machine_type != "Crystallizer")
-			continue
-		data["selected_recipes"] += list(list("name" = recipe.name, "id" = recipe.id))
-	return data
-
-/obj/machinery/atmospherics/components/binary/crystallizer/ui_data()
-	var/data = list()
-	data["on"] = on
-
-	if(selected_recipe)
-		data["selected"] = selected_recipe.id
-	else
-		data["selected"] = ""
-
-	var/list/internal_gas_data = list()
-	if(internal.get_moles())
-		for(var/gasid in internal.gases)
-			internal_gas_data.Add(list(list(
-			"name"= internal.gases[gasid][GAS_META][META_GAS_NAME],
-			"amount" = round(internal.gases[gasid][MOLES], 0.01),
-			)))
-	else
-		for(var/gasid in internal.gases)
-			internal_gas_data.Add(list(list(
-				"name"= internal.gases[gasid][GAS_META][META_GAS_NAME],
-				"amount" = 0,
-				)))
-	data["internal_gas_data"] = internal_gas_data
-
-	var/list/requirements
-	if(!selected_recipe)
-		requirements = list("Select a recipe to see the requirements")
-	else
-		requirements = list("To create [selected_recipe.name] you will need:")
-		for(var/gas_type in selected_recipe.requirements)
-			var/datum/gas/gas_required = gas_type
-			var/amount_consumed = selected_recipe.requirements[gas_type]
-			requirements += "-[amount_consumed] moles of [initial(gas_required.name)]"
-		requirements += "In a temperature range between [selected_recipe.min_temp] K and [selected_recipe.max_temp] K"
-		requirements += "The crystallization reaction will be [selected_recipe.energy_release ? (selected_recipe.energy_release > 0 ? "exothermic" : "endothermic") : "thermally neutral"]"
-	data["requirements"] = requirements.Join("\n")
-
-	var/temperature
-	if(internal.get_moles())
-		temperature = internal.temperature
-	else
-		temperature = 0
-	data["internal_temperature"] = temperature
-	data["progress_bar"] = progress_bar
-	data["gas_input"] = gas_input
-	return data
-
-/obj/machinery/atmospherics/components/binary/crystallizer/ui_act(action, params)
-	. = ..()
-	if(.)
-		return
-	switch(action)
-		if("power")
-			on = !on
-			investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
-			. = TRUE
-		if("recipe")
-			selected_recipe = null
-			var/recipe_name = "nothing"
-			var/datum/gas_recipe/recipe = GLOB.gas_recipe_meta[params["mode"]]
-			if(internal.get_moles())
-				dump_gases()
-			quality_loss = 0
-			progress_bar = 0
-			if(recipe && recipe.id != "")
-				selected_recipe = recipe
-				recipe_name = recipe.name
-				update_parents() //prevent the machine from stopping because of the recipe change and the pipenet not updating
-				moles_calculations()
-			investigate_log("was set to recipe [recipe_name ? recipe_name : "null"] by [key_name(usr)]", INVESTIGATE_ATMOS)
-			. = TRUE
-		if("gas_input")
-			var/_gas_input = params["gas_input"]
-			gas_input = clamp(_gas_input, 0, 250)
-	update_icon()
-
-#undef MIN_PROGRESS_AMOUNT
-#undef MIN_DEVIATION_RATE
-#undef MAX_DEVIATION_RATE
-#undef HIGH_CONDUCTIVITY_RATIO
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm
deleted file mode 100644
index b5ec772c258..00000000000
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/obj/item/hypernoblium_crystal
-	name = "Hypernoblium Crystal"
-	desc = "Crystalized oxygen and hypernoblium stored in a bottle to pressureproof your clothes."
-	icon = 'icons/obj/chemical.dmi'
-	icon_state = "potblue"
-	var/uses = 2
-
-/obj/item/hypernoblium_crystal/afterattack(obj/item/clothing/worn_item, mob/user, proximity)
-	. = ..()
-	if(!proximity)
-		return
-	if(!istype(worn_item))
-		to_chat(user, span_warning("The crystal can only be used on clothing!"))
-		return
-	if(istype(worn_item, /obj/item/clothing/suit/space))
-		to_chat(user, span_warning("The [worn_item] is already pressure-resistant!"))
-		return
-	if(worn_item.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && worn_item.clothing_flags & STOPSPRESSUREDAMAGE)
-		to_chat(user, span_warning("[worn_item] is already pressure-resistant!"))
-		return
-	to_chat(user, span_notice("You see how the [worn_item] changes color, it's now pressure proof."))
-	worn_item.name = "pressure-resistant [worn_item.name]"
-	worn_item.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
-	worn_item.add_atom_colour("#00fff7", FIXED_COLOUR_PRIORITY)
-	worn_item.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
-	worn_item.cold_protection = worn_item.body_parts_covered
-	worn_item.clothing_flags |= STOPSPRESSUREDAMAGE
-	uses--
-	if(!uses)
-		qdel(src)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
deleted file mode 100644
index 2860ed39e97..00000000000
--- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
+++ /dev/null
@@ -1,178 +0,0 @@
-/obj/machinery/atmospherics/components/unary/bluespace_sender
-	icon = 'icons/obj/atmospherics/components/bluespace_gas_selling.dmi'
-	icon_state = "bluespace_sender_off"
-	name = "Bluespace Gas Sender"
-	desc = "Sends gases to the bluespace network to be shared with the connected vendors, who knows what's beyond!"
-
-	density = TRUE
-	max_integrity = 300
-	armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, FIRE = 80, ACID = 30)
-	layer = OBJ_LAYER
-	circuit = /obj/item/circuitboard/machine/bluespace_sender
-	pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
-
-	///Base icon name for updating the appearance
-	var/base_icon = "bluespace_sender"
-	///Gas mixture containing the inserted gases and that is connected to the vendors
-	var/datum/gas_mixture/bluespace_network
-	///Rate of gas transfer inside the network (from 0 to 1)
-	var/gas_transfer_rate = 0.5
-	///A base price for each and every gases, in case you don't want to change them
-	var/list/base_prices = list()
-	///List storing all the vendors connected to the machine
-	var/list/vendors
-	///Amount of credits gained from each vendor
-	var/credits_gained = 0
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/Initialize(mapload)
-	. = ..()
-	initialize_directions = dir
-	bluespace_network = new
-	for(var/gas_id in GLOB.meta_gas_info)
-		bluespace_network.assert_gas(gas_id)
-	for(var/gas_id in GLOB.meta_gas_info)
-		var/datum/gas/gas = gas_id
-		base_prices[gas_id] = initial(gas.base_value)
-
-	update_appearance()
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/Destroy()
-	if(bluespace_network.get_moles())
-		var/turf/local_turf = get_turf(src)
-		local_turf.assume_air(bluespace_network)
-	return ..()
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/update_icon_state()
-	if(panel_open)
-		icon_state = "[base_icon]_open"
-		return ..()
-	if(on && is_operational)
-		icon_state = "[base_icon]_on"
-		return ..()
-	icon_state = "[base_icon]_off"
-	return ..()
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/update_overlays()
-	. = ..()
-	. += get_pipe_image(icon, "pipe", dir, , piping_layer)
-	if(showpipe)
-		. += get_pipe_image(icon, "pipe", initialize_directions)
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/process_atmos()
-	if(!is_operational || !on || !nodes[1])  //if it has no power or its switched off, dont process atmos
-		return
-
-	var/datum/gas_mixture/content = airs[1]
-	var/datum/gas_mixture/remove = content.removeRatio(gas_transfer_rate)
-	bluespace_network.merge(remove)
-	bluespace_network.temperature = T20C
-	update_parents()
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/attackby(obj/item/item, mob/user, params)
-	if(!on)
-		if(default_deconstruction_screwdriver(user, "[base_icon]_open", "[base_icon]_off", item))
-			update_appearance()
-			return
-	if(default_change_direction_wrench(user, item))
-		return
-	if(item.tool_behaviour == TOOL_CROWBAR && panel_open && bluespace_network.get_moles() > 0)
-		say("WARNING - Bluespace network can contain hazardous gases, deconstruct with caution!")
-		if(!do_after(user, 3 SECONDS, src))
-			return
-	if(default_deconstruction_crowbar(item))
-		return
-	return ..()
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/default_change_direction_wrench(mob/user, obj/item/item)
-	if(!..())
-		return FALSE
-	set_init_directions()
-	var/obj/machinery/atmospherics/node = nodes[1]
-	if(node)
-		if(src in node.nodes) //Only if it's actually connected. On-pipe version would is one-sided.
-			node.disconnect(src)
-		nodes[1] = null
-	if(parents[1])
-		nullify_pipenet(parents[1])
-
-	atmos_init()
-	node = nodes[1]
-	if(node)
-		node.atmos_init()
-		node.add_member(src)
-	SSair.add_to_rebuild_queue(src)
-	return TRUE
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/multitool_act(mob/living/user, obj/item/item)
-	var/obj/item/multitool/multitool = item
-	multitool.buffer = src
-	to_chat(user, span_notice("You store linkage information in [item]'s buffer."))
-	return TRUE
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/ui_interact(mob/user, datum/tgui/ui)
-	ui = SStgui.try_update_ui(user, src, ui)
-	if(!ui)
-		ui = new(user, src, "BluespaceSender", name)
-		ui.open()
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/ui_data(mob/user)
-	var/list/data = list()
-	data["on"] = on
-	data["gas_transfer_rate"] = gas_transfer_rate
-	var/list/bluespace_gasdata = list()
-	if(bluespace_network.get_moles())
-		for(var/gas_id in bluespace_network.gases)
-			bluespace_gasdata.Add(list(list(
-			"name" = bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
-			"id" = bluespace_network.gases[gas_id][GAS_META][META_GAS_ID],
-			"amount" = round(bluespace_network.gases[gas_id][MOLES], 0.01),
-			"price" = base_prices[gas_id],
-			)))
-	else
-		for(var/gas_id in bluespace_network.gases)
-			bluespace_gasdata.Add(list(list(
-				"name" = bluespace_network.gases[gas_id][GAS_META][META_GAS_NAME],
-				"id" = "",
-				"amount" = 0,
-				"price" = 0,
-				)))
-	data["bluespace_network_gases"] = bluespace_gasdata
-	var/list/vendors_list = list()
-	if(vendors)
-		for(var/obj/machinery/bluespace_vendor/vendor in vendors)
-			vendors_list.Add(list(list(
-				"name" = vendor.name,
-				"area" = get_area(vendor),
-			)))
-	data["vendors_list"] = vendors_list
-	data["credits"] = credits_gained
-	return data
-
-/obj/machinery/atmospherics/components/unary/bluespace_sender/ui_act(action, params)
-	. = ..()
-	if(.)
-		return
-
-	switch(action)
-		if("power")
-			on = !on
-			investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
-			update_appearance()
-			. = TRUE
-
-		if("rate")
-			gas_transfer_rate = clamp(params["rate"], 0, 1)
-			. = TRUE
-
-		if("price")
-			var/gas_type = gas_id2path(params["gas_type"])
-			base_prices[gas_type] = clamp(params["gas_price"], 0, 100)
-			. = TRUE
-
-		if("retrieve")
-			if(bluespace_network.get_moles() > 0)
-				var/datum/gas_mixture/remove = bluespace_network.remove(bluespace_network.get_moles())
-				airs[1].merge(remove)
-				update_parents()
-				bluespace_network.garbage_collect()
-			. = TRUE
diff --git a/pariah.dme b/pariah.dme
index 7734791cc2a..e5ab07b66ea 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -2314,17 +2314,8 @@
 #include "code\modules\asset_cache\assets\vv.dm"
 #include "code\modules\asset_cache\transports\asset_transport.dm"
 #include "code\modules\asset_cache\transports\webroot_transport.dm"
-// #include "code\modules\atmospherics\environmental\LINDA_fire.dm"
-// #include "code\modules\atmospherics\environmental\LINDA_system.dm"
-// #include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm"
-// #include "code\modules\atmospherics\gasmixtures\gas_mixture.dm"
-// #include "code\modules\atmospherics\gasmixtures\gas_types.dm"
-// #include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm"
-// #include "code\modules\atmospherics\gasmixtures\reaction_factors.dm"
-// #include "code\modules\atmospherics\gasmixtures\reactions.dm"
 #include "code\modules\atmospherics\machinery\airalarm.dm"
 #include "code\modules\atmospherics\machinery\atmosmachinery.dm"
-//#include "code\modules\atmospherics\machinery\bluespace_vendor.dm"
 #include "code\modules\atmospherics\machinery\datum_pipeline.dm"
 #include "code\modules\atmospherics\machinery\components\components_base.dm"
 #include "code\modules\atmospherics\machinery\components\tank.dm"
@@ -2338,22 +2329,10 @@
 #include "code\modules\atmospherics\machinery\components\binary_devices\temperature_pump.dm"
 #include "code\modules\atmospherics\machinery\components\binary_devices\valve.dm"
 #include "code\modules\atmospherics\machinery\components\binary_devices\volume_pump.dm"
-// #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer.dm"
-// #include "code\modules\atmospherics\machinery\components\electrolyzer\electrolyzer_reactions.dm"
 #include "code\modules\atmospherics\rust\fusion_reactions.dm"
-// #include "code\modules\atmospherics\machinery\components\fusion\hfr_core.dm"
-// #include "code\modules\atmospherics\machinery\components\fusion\hfr_defines.dm"
-// #include "code\modules\atmospherics\machinery\components\fusion\hfr_fuel_datums.dm"
-// #include "code\modules\atmospherics\machinery\components\fusion\hfr_main_processes.dm"
-// #include "code\modules\atmospherics\machinery\components\fusion\hfr_parts.dm"
-// #include "code\modules\atmospherics\machinery\components\fusion\hfr_procs.dm"
-// #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\atmos_machines_recipes.dm"
-// #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer.dm"
-// #include "code\modules\atmospherics\machinery\components\gas_recipe_machines\crystallizer_items.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\mixer.dm"
 #include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_devices.dm"
-//#include "code\modules\atmospherics\machinery\components\unary_devices\bluespace_sender.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\cryo.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\heat_exchanger.dm"
 #include "code\modules\atmospherics\machinery\components\unary_devices\outlet_injector.dm"

From 910a7ba589dc7890c49ef249c163981daea6a7eb Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 10 Jul 2022 16:06:18 -0400
Subject: [PATCH 191/200] Fixes nitrodioxide label

---
 tgui/packages/tgui/constants.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index 52e38bfbcee..865914471e3 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -184,7 +184,7 @@ const GASES = [
   {
     'id': 'nitrodioxide',
     'name': 'Nitrogen Dioxide',
-    'label': 'Nitrodioxide',
+    'label': 'NO₂',
     'color': 'brown',
   },
   {

From be7c2421cae1239832cdfa0ec5b96e8335557b2a Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sun, 10 Jul 2022 16:23:03 -0400
Subject: [PATCH 192/200] fixes methyl bromide label

---
 tgui/packages/tgui/constants.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js
index 865914471e3..5c396609495 100644
--- a/tgui/packages/tgui/constants.js
+++ b/tgui/packages/tgui/constants.js
@@ -262,7 +262,7 @@ const GASES = [
   {
     'id': 'methyl_bromide',
     'name': 'Methyl Bromide',
-    'label': 'NO₂',
+    'label': 'CH₃Br',
     'color': 'maroon',
   },
   {

From 9a8bdc77eb7272027217d9e2e5423847a5afca16 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 11 Jul 2022 17:27:34 -0400
Subject: [PATCH 193/200] micro opts

---
 code/modules/atmospherics/ZAS/Zone.dm | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 1afeb1bfa09..fde1148f652 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -151,7 +151,7 @@ Class Procs:
 		return //Short circuit for explosions where rebuild is called many times over.
 	invalidate()
 
-	for(var/turf/T in contents)
+	for(var/turf/T as anything in contents)
 		if(!T.simulated)
 			continue
 		T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
@@ -173,7 +173,7 @@ Class Procs:
 /zone/proc/tick()
 
 	// Update fires.
-	if(air.temperature >= PHORON_FLASHPOINT && !(src in SSzas.active_fire_zones) && air.check_combustability() && contents.len)
+	if(!(src in SSzas.active_fire_zones) && length(contents) && air.temperature >= PHORON_FLASHPOINT && air.check_combustability())
 		var/turf/T = pick(contents)
 		if(istype(T))
 			T.create_fire(zas_settings.fire_firelevel_multiplier)
@@ -187,7 +187,7 @@ Class Procs:
 		graphic_remove.len = 0
 
 	// Update connected edges.
-	for(var/connection_edge/E in edges)
+	for(var/connection_edge/E as anything in edges)
 		if(E.sleeping)
 			E.recheck()
 
@@ -210,7 +210,7 @@ Class Procs:
 	// Update atom temperature.
 	if(abs(air.temperature - last_air_temperature) >= ATOM_TEMPERATURE_EQUILIBRIUM_THRESHOLD)
 		last_air_temperature = air.temperature
-		for(var/turf/T in contents)
+		for(var/turf/T as anything in contents)
 			if(!T.simulated)
 				continue
 			for(var/atom/movable/checking as anything in T.contents)

From d870552af46b45fd1d3df23939477277c39ea399 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 11 Jul 2022 19:09:32 -0400
Subject: [PATCH 194/200] Tramstation should no longer freeze the server

---
 code/game/turfs/turf.dm               | 2 +-
 code/modules/atmospherics/ZAS/Zone.dm | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index d334b7e30d1..6908167f780 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -199,7 +199,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
 			zone.remove_turf(src)
 
 		else //Just rebuild the fucker
-			zone.rebuild()
+			INVOKE_ASYNC(zone.rebuild()) //rebuild() contains CHECK_TICK
 	///NO MORE ZAS THINGS
 
 	..()
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index fde1148f652..829aa0d3cae 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -161,6 +161,8 @@ Class Procs:
 		T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
 		SSzas.mark_for_update(T)
 
+		CHECK_TICK
+
 ///Assumes a given gas mixture, dividing it amongst the zone.
 /zone/proc/add_tile_air(datum/gas_mixture/tile_air)
 	air.group_multiplier = 1

From 17d6472eb8a00818b98434cee2c2d2805f8a252b Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 11 Jul 2022 19:31:16 -0400
Subject: [PATCH 195/200] Removes minimum zone size

---
 code/__DEFINES/atmospherics/ZAS.dm          | 5 +----
 code/controllers/subsystem/zas.dm           | 2 +-
 code/modules/atmospherics/ZAS/Diagnostic.dm | 2 --
 3 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index d7940b12d21..7967f950210 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -12,12 +12,9 @@
 #define AIR_ALLOWED (0<<0)
 ///Neither air nor zones can interact with this turf under the given conditions
 #define AIR_BLOCKED (1<<0)
-///Air can pass through or into this turf, but zones may not merge with it. Will not block zone merges, if either zone is below ZONE_MIN_SIZE
+///Air can pass through or into this turf, but zones may not merge with it. Will not block zone merges
 #define ZONE_BLOCKED (1<<1)
 
-///Zones with less than this many turfs will always merge, even if the connection is not direct, tons of micro zones are expensive!
-#define ZONE_MIN_SIZE 14
-
 ///Air can always pass
 #define CANPASS_ALWAYS 1
 ///Air can only pass if density is FALSE
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index ddcd8c2293f..2478670c799 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -405,7 +405,7 @@ SUBSYSTEM_DEF(zas)
 	var/space = !B.simulated
 
 	if(!space)
-		if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0)))
+		if((direct && (times_fired == 0 || equivalent_pressure(A.zone,B.zone))))
 			merge(A.zone,B.zone)
 			return TRUE
 
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index ca0d4543ebe..be9b666190b 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -10,8 +10,6 @@
 			for(var/g in mix.gas)
 				to_chat(mob, span_admin("ZASDBG_GAS: [g]: [mix.gas[g]]\n"))
 
-			if((T.zone && (length(T.zone.contents) > ZONE_MIN_SIZE)))
-				to_chat(mob, span_notice("This turf's zone is below the minimum size, and will merge over zone blockers."))
 	else
 		if(zone_debug_images)
 			for(var/zone in  zone_debug_images)

From 73d311e17c1758c40d936e61be5b3d3d5bf33777 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 11 Jul 2022 19:41:01 -0400
Subject: [PATCH 196/200] Linterinos

---
 code/game/turfs/turf.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 6908167f780..dfef5f92329 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -199,7 +199,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
 			zone.remove_turf(src)
 
 		else //Just rebuild the fucker
-			INVOKE_ASYNC(zone.rebuild()) //rebuild() contains CHECK_TICK
+			INVOKE_ASYNC(zone, .proc/rebuild) //rebuild() contains CHECK_TICK
 	///NO MORE ZAS THINGS
 
 	..()

From 86ab91d3766923b0c5c526d9269d0e3ac33d1c76 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Mon, 11 Jul 2022 19:48:07 -0400
Subject: [PATCH 197/200] linterinos for real

---
 code/game/turfs/turf.dm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index dfef5f92329..d0f9c0a1a2b 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -199,7 +199,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
 			zone.remove_turf(src)
 
 		else //Just rebuild the fucker
-			INVOKE_ASYNC(zone, .proc/rebuild) //rebuild() contains CHECK_TICK
+			INVOKE_ASYNC(zone, /zone.proc/rebuild) //rebuild() contains CHECK_TICK
 	///NO MORE ZAS THINGS
 
 	..()

From 0aa24699f31c33adfdb4f71871f76bcfe852250f Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Tue, 12 Jul 2022 17:39:10 -0400
Subject: [PATCH 198/200] Reverts zone size change, makes other tweaks

---
 code/__DEFINES/atmospherics/Connections.dm    |  6 ++
 code/__DEFINES/atmospherics/ZAS.dm            |  3 +
 code/controllers/subsystem/zas.dm             |  2 +-
 code/modules/atmospherics/ZAS/Connection.dm   |  3 +
 .../atmospherics/ZAS/ConnectionGroup.dm       | 61 ++++++++++---------
 code/modules/atmospherics/ZAS/Diagnostic.dm   |  2 +
 .../atmospherics/ZAS/XGM/xgm_gas_mixture.dm   |  3 +-
 code/modules/atmospherics/ZAS/Zone.dm         |  6 +-
 pariah.dme                                    |  1 +
 9 files changed, 52 insertions(+), 35 deletions(-)
 create mode 100644 code/__DEFINES/atmospherics/Connections.dm

diff --git a/code/__DEFINES/atmospherics/Connections.dm b/code/__DEFINES/atmospherics/Connections.dm
new file mode 100644
index 00000000000..9b32c1668dd
--- /dev/null
+++ b/code/__DEFINES/atmospherics/Connections.dm
@@ -0,0 +1,6 @@
+
+#define WOOSH \
+	if(REALTIMEOFDAY > last_woosh + 2 SECONDS){ \
+		playsound(pick(connecting_turfs),abs(differential) > zas_settings.airflow_heavy_pressure ? 'modular_pariah/master_files/sound/effects/space_wind_big.ogg' : 'modular_pariah/master_files/sound/effects/space_wind.ogg',100,TRUE,null,pressure_affected = FALSE); \
+		last_woosh = REALTIMEOFDAY;\
+	} \
diff --git a/code/__DEFINES/atmospherics/ZAS.dm b/code/__DEFINES/atmospherics/ZAS.dm
index 7967f950210..0c69a6dcdf9 100644
--- a/code/__DEFINES/atmospherics/ZAS.dm
+++ b/code/__DEFINES/atmospherics/ZAS.dm
@@ -15,6 +15,9 @@
 ///Air can pass through or into this turf, but zones may not merge with it. Will not block zone merges
 #define ZONE_BLOCKED (1<<1)
 
+///Zones with less than this many turfs will always merge, even if the connection is not direct. This MUST be ATLEAST 2, or doorways will BREAK.
+#define ZONE_MIN_SIZE 5
+
 ///Air can always pass
 #define CANPASS_ALWAYS 1
 ///Air can only pass if density is FALSE
diff --git a/code/controllers/subsystem/zas.dm b/code/controllers/subsystem/zas.dm
index 2478670c799..cf60600402c 100644
--- a/code/controllers/subsystem/zas.dm
+++ b/code/controllers/subsystem/zas.dm
@@ -405,7 +405,7 @@ SUBSYSTEM_DEF(zas)
 	var/space = !B.simulated
 
 	if(!space)
-		if((direct && (times_fired == 0 || equivalent_pressure(A.zone,B.zone))))
+		if(min(length(A.zone.contents), length(B.zone.contents)) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0)))
 			merge(A.zone,B.zone)
 			return TRUE
 
diff --git a/code/modules/atmospherics/ZAS/Connection.dm b/code/modules/atmospherics/ZAS/Connection.dm
index 80c20b582a9..2aa037d09c7 100644
--- a/code/modules/atmospherics/ZAS/Connection.dm
+++ b/code/modules/atmospherics/ZAS/Connection.dm
@@ -235,3 +235,6 @@ Class Procs:
 	if(verbose)
 		zas_log("Connection is valid.")
 	#endif
+
+/connection_edge/proc/queue_spacewind()
+	return
diff --git a/code/modules/atmospherics/ZAS/ConnectionGroup.dm b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
index 2517abe2bec..b5908e65387 100644
--- a/code/modules/atmospherics/ZAS/ConnectionGroup.dm
+++ b/code/modules/atmospherics/ZAS/ConnectionGroup.dm
@@ -66,6 +66,9 @@ Class Procs:
 	var/sleeping = 1
 	var/coefficient = 0
 
+	///The last time the "woosh" airflow sound played, world.time
+	var/last_woosh
+
 	#ifdef ZASDBG
 	///Set this to TRUE during testing to get verbose debug information.
 	var/tmp/verbose = FALSE
@@ -153,8 +156,6 @@ Class Procs:
 
 /connection_edge/zone
 	var/zone/B
-	///The last time the "woosh" airflow sound played, world.time
-	var/last_woosh
 
 /connection_edge/zone/New(zone/A, zone/B)
 
@@ -191,30 +192,7 @@ Class Procs:
 
 	var/equiv = A.air.shareRatio(B.air, coefficient)
 
-	var/differential = A.air.returnPressure() - B.air.returnPressure()
-	if(abs(differential) >= zas_settings.airflow_lightest_pressure)
-		var/list/attracted
-		var/list/repelled
-		if(differential > 0)
-			attracted = A.movables()
-			repelled = B.movables()
-		else
-			attracted = B.movables()
-			repelled = A.movables()
-
-		if(REALTIMEOFDAY > last_woosh + 2 SECONDS)
-			playsound(
-				pick(connecting_turfs),
-				abs(differential) > zas_settings.airflow_heavy_pressure ? 'modular_pariah/master_files/sound/effects/space_wind_big.ogg' : 'modular_pariah/master_files/sound/effects/space_wind.ogg',
-				100,
-				TRUE,
-				null,
-				pressure_affected = FALSE
-			)
-			last_woosh = REALTIMEOFDAY
-
-		flow(attracted, abs(differential), 0)
-		flow(repelled, abs(differential), 1)
+	queue_spacewind()
 
 	if(equiv)
 		if(direct)
@@ -233,6 +211,23 @@ Class Procs:
 	// Edges with only one side being vacuum need processing no matter how close.
 		SSzas.mark_edge_active(src)
 
+/connection_edge/zone/queue_spacewind()
+	var/differential = A.air.returnPressure() - B.air.returnPressure()
+	if(abs(differential) >= zas_settings.airflow_lightest_pressure)
+		var/list/attracted
+		var/list/repelled
+		if(differential > 0)
+			attracted = A.movables()
+			repelled = B.movables()
+		else
+			attracted = B.movables()
+			repelled = A.movables()
+
+		WOOSH
+
+		flow(attracted, abs(differential), 0)
+		flow(repelled, abs(differential), 1)
+
 ///Helper proc to get connections for a zone.
 /connection_edge/zone/proc/get_connected_zone(zone/from)
 	if(A == from)
@@ -279,10 +274,7 @@ Class Procs:
 
 	var/equiv = A.air.shareSpace(air)
 
-	var/differential = A.air.returnPressure() - air.returnPressure()
-	if(abs(differential) >= zas_settings.airflow_lightest_pressure)
-		var/list/attracted = A.movables()
-		flow(attracted, abs(differential), differential < 0)
+	queue_spacewind()
 
 	if(equiv)
 		A.air.copyFrom(air)
@@ -297,6 +289,15 @@ Class Procs:
 	if(!A.air.compare(air, vacuum_exception = 1))
 		SSzas.mark_edge_active(src)
 
+/connection_edge/unsimulated/queue_spacewind()
+	var/differential = A.air.returnPressure() - air.returnPressure()
+	if(abs(differential) >= zas_settings.airflow_lightest_pressure)
+		var/list/attracted = A.movables()
+
+		WOOSH
+
+		flow(attracted, abs(differential), differential < 0)
+
 /proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
 	//This implements a simplistic version of the Stefan-Boltzmann law.
 	var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5
diff --git a/code/modules/atmospherics/ZAS/Diagnostic.dm b/code/modules/atmospherics/ZAS/Diagnostic.dm
index be9b666190b..ca0d4543ebe 100644
--- a/code/modules/atmospherics/ZAS/Diagnostic.dm
+++ b/code/modules/atmospherics/ZAS/Diagnostic.dm
@@ -10,6 +10,8 @@
 			for(var/g in mix.gas)
 				to_chat(mob, span_admin("ZASDBG_GAS: [g]: [mix.gas[g]]\n"))
 
+			if((T.zone && (length(T.zone.contents) > ZONE_MIN_SIZE)))
+				to_chat(mob, span_notice("This turf's zone is below the minimum size, and will merge over zone blockers."))
 	else
 		if(zone_debug_images)
 			for(var/zone in  zone_debug_images)
diff --git a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
index c9f5b3c6bbc..4ababf6b6e6 100644
--- a/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
+++ b/code/modules/atmospherics/ZAS/XGM/xgm_gas_mixture.dm
@@ -434,7 +434,8 @@
 	var/ratio = sharing_lookup_table[6]
 
 	var/size = max(1, group_multiplier)
-	if(isnull(share_size)) share_size = max(1, other.group_multiplier)
+	if(isnull(share_size))
+		share_size = max(1, other.group_multiplier)
 
 	var/full_heat_capacity = getHeatCapacity()
 	var/s_full_heat_capacity = other.getHeatCapacity()
diff --git a/code/modules/atmospherics/ZAS/Zone.dm b/code/modules/atmospherics/ZAS/Zone.dm
index 829aa0d3cae..b0711f66969 100644
--- a/code/modules/atmospherics/ZAS/Zone.dm
+++ b/code/modules/atmospherics/ZAS/Zone.dm
@@ -175,14 +175,14 @@ Class Procs:
 /zone/proc/tick()
 
 	// Update fires.
-	if(!(src in SSzas.active_fire_zones) && length(contents) && air.temperature >= PHORON_FLASHPOINT && air.check_combustability())
+	if(air.temperature >= PHORON_FLASHPOINT && !length(fire_tiles) && length(contents) && !(src in SSzas.active_fire_zones) && air.check_combustability())
 		var/turf/T = pick(contents)
-		if(istype(T))
+		if(T.simulated)
 			T.create_fire(zas_settings.fire_firelevel_multiplier)
 
 	// Update gas overlays.
 	if(air.checkTileGraphic(graphic_add, graphic_remove))
-		for(var/turf/T in contents)
+		for(var/turf/T as anything in contents)
 			if(T.simulated)
 				T.update_graphic(graphic_add, graphic_remove)
 		graphic_add.len = 0
diff --git a/pariah.dme b/pariah.dme
index e5ab07b66ea..3d727be9c61 100644
--- a/pariah.dme
+++ b/pariah.dme
@@ -199,6 +199,7 @@
 #include "code\__DEFINES\atmospherics\atmos_mapping_helpers.dm"
 #include "code\__DEFINES\atmospherics\atmos_mob_interaction.dm"
 #include "code\__DEFINES\atmospherics\atmos_piping.dm"
+#include "code\__DEFINES\atmospherics\Connections.dm"
 #include "code\__DEFINES\atmospherics\reactor.dm"
 #include "code\__DEFINES\atmospherics\temperature.dm"
 #include "code\__DEFINES\atmospherics\XGM.dm"

From 5cb1ba1e830514021eda26c26a28ad8ff6668a45 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Thu, 14 Jul 2022 14:26:02 -0400
Subject: [PATCH 199/200] Tries to fix the phantom rest bug

---
 code/__DEFINES/traits.dm                 |  2 ++
 code/controllers/subsystem/airflow.dm    |  7 +++----
 code/modules/atmospherics/ZAS/Airflow.dm |  2 +-
 code/modules/mob/living/init_signals.dm  | 15 +++++++++++++++
 4 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index c233fdd87a8..f8f63ad6131 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -138,6 +138,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
 /// Doesn't miss attacks
 #define TRAIT_PERFECT_ATTACKER "perfect_attacker"
 #define TRAIT_INCAPACITATED "incapacitated"
+/// The owner is queued in SSairflow.
+#define TRAIT_EXPERIENCING_AIRFLOW "experiencing_airflow"
 /// In some kind of critical condition. Is able to succumb.
 #define TRAIT_CRITICAL_CONDITION "critical-condition"
 #define TRAIT_BLIND "blind"
diff --git a/code/controllers/subsystem/airflow.dm b/code/controllers/subsystem/airflow.dm
index 6a3fb2e3fc0..72fcc03003d 100644
--- a/code/controllers/subsystem/airflow.dm
+++ b/code/controllers/subsystem/airflow.dm
@@ -1,5 +1,6 @@
 #define CLEAR_OBJECT(TARGET) \
 	processing -= TARGET; \
+	REMOVE_TRAIT(TARGET, TRAIT_EXPERIENCING_AIRFLOW, src); \
 	TARGET.airflow_dest = null; \
 	TARGET.airflow_speed = 0; \
 	TARGET.airflow_time = 0; \
@@ -100,10 +101,8 @@ SUBSYSTEM_DEF(airflow)
 		target.dir = olddir
 		target.airborne_acceleration++
 
-		if (ismob(target))
-			var/mob/M = target
-			M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE, zas_settings.airflow_mob_slowdown)
-			addtimer(CALLBACK(M, /mob/proc/remove_movespeed_modifier, /datum/movespeed_modifier/atmos_pressure, TRUE), 3 SECONDS, flags = TIMER_DELETE_ME)
+		ADD_TRAIT(target, TRAIT_EXPERIENCING_AIRFLOW, src)
+
 		if (MC_TICK_CHECK)
 			current.Cut(i)
 			return
diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 6cc76ddb73f..5626c7048b2 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -106,7 +106,7 @@ This entire system is an absolute mess.
 		if(airborne_acceleration > 1)
 			airflow_hit(A)
 			A.airflow_hit_act(src)
-		else if(istype(src, /mob/living/carbon/human))
+		else if(istype(src, /mob/living/carbon/human) && ismovable(A) && !(A:airflow_originally_not_dense))
 			to_chat(src, "<span class='notice'>You are pinned against [A] by airflow!</span>")
 			src:Stun(1 SECONDS) // :)
 		/*
diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm
index fd7c347c20c..66163e1de99 100644
--- a/code/modules/mob/living/init_signals.dm
+++ b/code/modules/mob/living/init_signals.dm
@@ -30,6 +30,9 @@
 	RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_RESTRAINED), .proc/on_restrained_trait_gain)
 	RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_RESTRAINED), .proc/on_restrained_trait_loss)
 
+	RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_EXPERIENCING_AIRFLOW), .proc/on_airflow_trait_gain)
+	RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_EXPERIENCING_AIRFLOW), .proc/on_airflow_trait_loss)
+
 	RegisterSignal(src, list(
 		SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION),
 		SIGNAL_REMOVETRAIT(TRAIT_CRITICAL_CONDITION),
@@ -213,3 +216,15 @@
 /mob/living/proc/on_skittish_trait_loss(datum/source)
 	SIGNAL_HANDLER
 	RemoveElement(/datum/element/skittish)
+
+/// Called when [TRAIT_EXPERIENCING_AIRFLOW] is added to the mob.
+/mob/living/proc/on_airflow_trait_gain(datum/source)
+	SIGNAL_HANDLER
+	add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE, zas_settings.airflow_mob_slowdown)
+
+/// Called when [TRAIT_EXPERIENCING_AIRFLOW] is removed from the mob.
+/mob/living/proc/on_airflow_trait_loss(datum/source)
+	SIGNAL_HANDLER
+	remove_movespeed_modifier(/datum/movespeed_modifier/atmos_pressure, TRUE)
+	if(!resting)
+		get_up(TRUE)

From 42ddbd398f0e2c1f9602a959b05c213f338f1bf8 Mon Sep 17 00:00:00 2001
From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Date: Sat, 16 Jul 2022 21:12:39 -0400
Subject: [PATCH 200/200] airflow fix

---
 code/modules/atmospherics/ZAS/Airflow.dm | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/code/modules/atmospherics/ZAS/Airflow.dm b/code/modules/atmospherics/ZAS/Airflow.dm
index 5626c7048b2..67227f99ec4 100644
--- a/code/modules/atmospherics/ZAS/Airflow.dm
+++ b/code/modules/atmospherics/ZAS/Airflow.dm
@@ -83,7 +83,11 @@ This entire system is an absolute mess.
 	if(anchored)
 		return FALSE
 	if(n < zas_settings.airflow_dense_pressure)
-		return FALSE
+		if(airflow_dest)
+			if(!airflow_originally_not_dense)
+				return FALSE
+		else if(density)
+			return FALSE
 	return ..()
 
 /obj/item/check_airflow_movable(n)