diff --git a/code/ZAS/Connection.dm b/code/ZAS/Connection.dm
index b95fd160bdc..0f0748bafd8 100644
--- a/code/ZAS/Connection.dm
+++ b/code/ZAS/Connection.dm
@@ -2,6 +2,10 @@
This object is contained within zone/var/connections. It's generated whenever two turfs from different zones are linked.
Indirect connections will not merge the two zones after they reach equilibrium.
*/
+#define CONNECTION_DIRECT 2
+#define CONNECTION_INDIRECT 1
+#define CONNECTION_CLOSED 0
+
connection
var
@@ -16,6 +20,7 @@ connection
indirect = 0 //If the connection is purely indirect, the zones should not join.
last_updated //The tick at which this was last updated.
no_zone_count = 0
+
New(turf/T,turf/O)
A = T
B = O
@@ -30,52 +35,59 @@ connection
zone_B = B.zone
ref_B = "\ref[B]"
- if(!A.connections)
- A.connections = list(src)
+ if(ref_A in air_master.turfs_with_connections)
+ var/list/connections = air_master.turfs_with_connections[ref_A]
+ connections.Add(src)
else
- A.connections += src
+ air_master.turfs_with_connections[ref_A] = list(src)
- if(!B.connections)
- B.connections = list(src)
+ if(ref_B in air_master.turfs_with_connections)
+ var/list/connections = air_master.turfs_with_connections[ref_B]
+ connections.Add(src)
else
- B.connections += src
+ air_master.turfs_with_connections[ref_B] = list(src)
if(!A.zone.connected_zones)
A.zone.connected_zones = list()
if(!B.zone.connected_zones)
B.zone.connected_zones = list()
- if(!(B.zone in A.zone.connected_zones))
+ if(B.zone in A.zone.connected_zones)
+ A.zone.connected_zones[B.zone]++
+ else
A.zone.connected_zones += B.zone
A.zone.connected_zones[B.zone] = 1
- else
- A.zone.connected_zones[B.zone]++
- if(!(A.zone in B.zone.connected_zones))
+ if(A.zone in B.zone.connected_zones)
+ B.zone.connected_zones[A.zone]++
+ else
B.zone.connected_zones += A.zone
B.zone.connected_zones[A.zone] = 1
- else
- B.zone.connected_zones[A.zone]++
if(A.HasDoor(B) || B.HasDoor(A))
indirect = 1
else
world.log << "Attempted to create connection object for non-zone tiles: [T] -> [O]"
del(src)
+
Del()
+ if(ref_B in air_master.turfs_with_connections)
+ var/list/connections = air_master.turfs_with_connections[ref_B]
+ connections.Remove(src)
+
+ if(ref_A in air_master.turfs_with_connections)
+ var/list/connections = air_master.turfs_with_connections[ref_A]
+ connections.Remove(src)
+
if(A)
if(A.zone && A.zone.connections)
A.zone.connections.Remove(src)
if(!A.zone.connections.len)
del A.zone.connections
- if(istype(A))
- A.connections -= src
if(B)
if(B.zone && B.zone.connections)
B.zone.connections.Remove(src)
if(!B.zone.connections.len)
del B.zone.connections
- if(istype(B))
- B.connections -= src
if(zone_A)
if(zone_A && zone_A.connections)
zone_A.connections.Remove(src)
@@ -87,74 +99,75 @@ connection
if(!zone_B.connections.len)
del zone_B.connections
- if(A && A.zone)
- if(B && B.zone)
- if(B.zone in A.zone.connected_zones)
- if(A.zone.connected_zones[B.zone] > 1)
- A.zone.connected_zones[B.zone]--
- else
- A.zone.connected_zones -= B.zone
- if(A.zone.connected_zones && !A.zone.connected_zones.len)
- A.zone.connected_zones = null
- if( zone_B && (!B.zone || zone_B != B.zone) )
- if(zone_B in A.zone.connected_zones)
- if(A.zone.connected_zones[zone_B] > 1)
- A.zone.connected_zones[zone_B]--
- else
- A.zone.connected_zones -= zone_B
- if(A.zone.connected_zones && !A.zone.connected_zones.len)
- A.zone.connected_zones = null
- if(zone_A && (!A.zone || zone_A != A.zone))
- if(B && B.zone)
- if(B.zone in zone_A.connected_zones)
- if(zone_A.connected_zones[B.zone] > 1)
- zone_A.connected_zones[B.zone]--
- else
- zone_A.connected_zones -= B.zone
- if(zone_A.connected_zones && !zone_A.connected_zones.len)
- zone_A.connected_zones = null
- if( zone_B && (!B.zone || zone_B != B.zone) )
- if(zone_B in zone_A.connected_zones)
- if(zone_A.connected_zones[zone_B] > 1)
- zone_A.connected_zones[zone_B]--
- else
- zone_A.connected_zones -= zone_B
- if(zone_A.connected_zones && !zone_A.connected_zones.len)
- zone_A.connected_zones = null
- if(B && B.zone)
+ if(indirect != CONNECTION_CLOSED)
if(A && A.zone)
- if(A.zone in B.zone.connected_zones)
- if(B.zone.connected_zones[A.zone] > 1)
- B.zone.connected_zones[A.zone]--
- else
- B.zone.connected_zones -= A.zone
- if(B.zone.connected_zones && !B.zone.connected_zones.len)
- B.zone.connected_zones = null
- if( zone_A && (!A.zone || zone_A != A.zone) )
- if(zone_A in B.zone.connected_zones)
- if(B.zone.connected_zones[zone_A] > 1)
- B.zone.connected_zones[zone_A]--
- else
- B.zone.connected_zones -= zone_A
- if(B.zone.connected_zones && !B.zone.connected_zones.len)
- B.zone.connected_zones = null
- if(zone_B && (!B.zone || zone_B != B.zone))
- if(A && A.zone)
- if(A.zone in zone_B.connected_zones)
- if(zone_B.connected_zones[A.zone] > 1)
- zone_B.connected_zones[A.zone]--
- else
- zone_B.connected_zones -= A.zone
- if(zone_B.connected_zones && !zone_B.connected_zones.len)
- zone_B.connected_zones = null
- if( zone_A && (!A.zone || zone_A != A.zone) )
- if(zone_A in zone_B.connected_zones)
- if(zone_B.connected_zones[zone_A] > 1)
- zone_B.connected_zones[zone_A]--
- else
- zone_B.connected_zones -= zone_A
- if(zone_B.connected_zones && !zone_B.connected_zones.len)
- zone_B.connected_zones = null
+ if(B && B.zone)
+ if(B.zone in A.zone.connected_zones)
+ if(A.zone.connected_zones[B.zone] > 1)
+ A.zone.connected_zones[B.zone]--
+ else
+ A.zone.connected_zones -= B.zone
+ if(A.zone.connected_zones && !A.zone.connected_zones.len)
+ A.zone.connected_zones = null
+ if( zone_B && (!B.zone || zone_B != B.zone) )
+ if(zone_B in A.zone.connected_zones)
+ if(A.zone.connected_zones[zone_B] > 1)
+ A.zone.connected_zones[zone_B]--
+ else
+ A.zone.connected_zones -= zone_B
+ if(A.zone.connected_zones && !A.zone.connected_zones.len)
+ A.zone.connected_zones = null
+ if(zone_A && (!A.zone || zone_A != A.zone))
+ if(B && B.zone)
+ if(B.zone in zone_A.connected_zones)
+ if(zone_A.connected_zones[B.zone] > 1)
+ zone_A.connected_zones[B.zone]--
+ else
+ zone_A.connected_zones -= B.zone
+ if(zone_A.connected_zones && !zone_A.connected_zones.len)
+ zone_A.connected_zones = null
+ if( zone_B && (!B.zone || zone_B != B.zone) )
+ if(zone_B in zone_A.connected_zones)
+ if(zone_A.connected_zones[zone_B] > 1)
+ zone_A.connected_zones[zone_B]--
+ else
+ zone_A.connected_zones -= zone_B
+ if(zone_A.connected_zones && !zone_A.connected_zones.len)
+ zone_A.connected_zones = null
+ if(B && B.zone)
+ if(A && A.zone)
+ if(A.zone in B.zone.connected_zones)
+ if(B.zone.connected_zones[A.zone] > 1)
+ B.zone.connected_zones[A.zone]--
+ else
+ B.zone.connected_zones -= A.zone
+ if(B.zone.connected_zones && !B.zone.connected_zones.len)
+ B.zone.connected_zones = null
+ if( zone_A && (!A.zone || zone_A != A.zone) )
+ if(zone_A in B.zone.connected_zones)
+ if(B.zone.connected_zones[zone_A] > 1)
+ B.zone.connected_zones[zone_A]--
+ else
+ B.zone.connected_zones -= zone_A
+ if(B.zone.connected_zones && !B.zone.connected_zones.len)
+ B.zone.connected_zones = null
+ if(zone_B && (!B.zone || zone_B != B.zone))
+ if(A && A.zone)
+ if(A.zone in zone_B.connected_zones)
+ if(zone_B.connected_zones[A.zone] > 1)
+ zone_B.connected_zones[A.zone]--
+ else
+ zone_B.connected_zones -= A.zone
+ if(zone_B.connected_zones && !zone_B.connected_zones.len)
+ zone_B.connected_zones = null
+ if( zone_A && (!A.zone || zone_A != A.zone) )
+ if(zone_A in zone_B.connected_zones)
+ if(zone_B.connected_zones[zone_A] > 1)
+ zone_B.connected_zones[zone_A]--
+ else
+ zone_B.connected_zones -= zone_A
+ if(zone_B.connected_zones && !zone_B.connected_zones.len)
+ zone_B.connected_zones = null
. = ..()
proc/Cleanup()
@@ -176,14 +189,55 @@ connection
return 0
return 1
+ proc/UpdateZones() //Changes connection data in the zones if it is required.
+ if(A.ZAirPass(B))
+ var/door_pass = A.CanPass(null,B,1.5,1)
+ if(door_pass || A.CanPass(null,B,0,0))
+ if(indirect == CONNECTION_CLOSED)
+ //ADJUST FOR CAN CONNECT
+ if(!A.zone.connected_zones)
+ A.zone.connected_zones = list()
+ if(B.zone in A.zone.connected_zones)
+ A.zone.connected_zones[B.zone]++
+ else
+ A.zone.connected_zones += B.zone
+ A.zone.connected_zones[B.zone] = 1
+
+ if(!B.zone.connected_zones)
+ B.zone.connected_zones = list()
+ if(A.zone in B.zone.connected_zones)
+ B.zone.connected_zones[A.zone]++
+ else
+ B.zone.connected_zones += A.zone
+ B.zone.connected_zones[A.zone] = 1
+ if(door_pass)
+ indirect = CONNECTION_DIRECT
+ else if(!door_pass)
+ indirect = CONNECTION_INDIRECT
+ else if(indirect > CONNECTION_CLOSED)
+ indirect = CONNECTION_CLOSED
+ //ADJUST FOR CANNOT CONNECT
+ if(A.zone.connected_zones)
+ if(A.zone.connected_zones[B.zone] > 1)
+ A.zone.connected_zones[B.zone]--
+ else
+ A.zone.connected_zones.Remove(B.zone)
+ if(A.zone.connected_zones && !A.zone.connected_zones.len)
+ A.zone.connected_zones = null
+ if(B.zone.connected_zones)
+ if(B.zone.connected_zones[A.zone] > 1)
+ B.zone.connected_zones[A.zone]--
+ else
+ B.zone.connected_zones.Remove(A.zone)
+ if(B.zone.connected_zones && !B.zone.connected_zones.len)
+ B.zone.connected_zones = null
+ else //If I can no longer pass air, better delete
+ del src
+
proc/CheckPassSanity()
Cleanup()
- if(!A.CanPass(null, B, 0, 0))
- del src
- if(A.HasDoor(B) || B.HasDoor(A))
- indirect = 1
- else
- indirect = 0
+ UpdateZones()
+ return 1
proc/Sanitize()
//If the zones change on connected turfs, update it.
@@ -208,13 +262,14 @@ connection
if(!zone_A.connections.len)
del zone_A.connections
- if(zone_A.connected_zones)
- if(zone_A.connected_zones[zone_B] > 1)
- zone_A.connected_zones[zone_B]--
- else
- zone_A.connected_zones.Remove(zone_B)
- if(zone_A.connected_zones && !zone_A.connected_zones.len)
- zone_A.connected_zones = null
+ if(indirect != CONNECTION_CLOSED)
+ if(zone_A.connected_zones)
+ if(zone_A.connected_zones[zone_B] > 1)
+ zone_A.connected_zones[zone_B]--
+ else
+ zone_A.connected_zones.Remove(zone_B)
+ if(zone_A.connected_zones && !zone_A.connected_zones.len)
+ zone_A.connected_zones = null
if(zone_B)
if(zone_B.connections)
@@ -222,36 +277,38 @@ connection
if(!zone_B.connections.len)
del zone_B.connections
- if(zone_B.connected_zones)
- if(zone_B.connected_zones[zone_A] > 1)
- zone_B.connected_zones[zone_A]--
- else
- zone_B.connected_zones.Remove(zone_A)
- if(zone_B.connected_zones && !zone_B.connected_zones.len)
- zone_B.connected_zones = null
+ if(indirect != CONNECTION_CLOSED)
+ if(zone_B.connected_zones)
+ if(zone_B.connected_zones[zone_A] > 1)
+ zone_B.connected_zones[zone_A]--
+ else
+ zone_B.connected_zones.Remove(zone_A)
+ if(zone_B.connected_zones && !zone_B.connected_zones.len)
+ zone_B.connected_zones = null
- if(!A.zone.connections)
- A.zone.connections = list()
- A.zone.connections |= src
- if(!B.zone.connections)
- B.zone.connections = list()
- B.zone.connections |= src
+ if(indirect != CONNECTION_CLOSED)
+ if(!A.zone.connections)
+ A.zone.connections = list()
+ A.zone.connections |= src
+ if(!B.zone.connections)
+ B.zone.connections = list()
+ B.zone.connections |= src
- if(!A.zone.connected_zones)
- A.zone.connected_zones = list()
- if(!(B.zone in A.zone.connected_zones))
- A.zone.connected_zones += B.zone
- A.zone.connected_zones[B.zone] = 1
- else
- A.zone.connected_zones[B.zone]++
+ if(!A.zone.connected_zones)
+ A.zone.connected_zones = list()
+ if(B.zone in A.zone.connected_zones)
+ A.zone.connected_zones[B.zone]++
+ else
+ A.zone.connected_zones += B.zone
+ A.zone.connected_zones[B.zone] = 1
- if(!B.zone.connected_zones)
- B.zone.connected_zones = list()
- if(!(A.zone in B.zone.connected_zones))
- B.zone.connected_zones += A.zone
- B.zone.connected_zones[A.zone] = 1
- else
- B.zone.connected_zones[A.zone]++
+ if(!B.zone.connected_zones)
+ B.zone.connected_zones = list()
+ if(A.zone in B.zone.connected_zones)
+ B.zone.connected_zones[A.zone]++
+ else
+ B.zone.connected_zones += A.zone
+ B.zone.connected_zones[A.zone] = 1
zone_B = B.zone
@@ -269,21 +326,22 @@ connection
A.zone.connections = list()
A.zone.connections |= src
- if(zone_A.connected_zones)
- if(zone_A.connected_zones[zone_B] > 1)
- zone_A.connected_zones[zone_B]--
- else
- zone_A.connected_zones.Remove(zone_B)
- if(zone_A.connected_zones && !zone_A.connected_zones.len)
- zone_A.connected_zones = null
+ if(indirect != CONNECTION_CLOSED)
+ if(zone_A.connected_zones)
+ if(zone_A.connected_zones[zone_B] > 1)
+ zone_A.connected_zones[zone_B]--
+ else
+ zone_A.connected_zones.Remove(zone_B)
+ if(zone_A.connected_zones && !zone_A.connected_zones.len)
+ zone_A.connected_zones = null
- if(!A.zone.connected_zones)
- A.zone.connected_zones = list()
- if(!(zone_B in A.zone.connected_zones))
- A.zone.connected_zones += zone_B
- A.zone.connected_zones[zone_B] = 1
- else
- A.zone.connected_zones[zone_B]++
+ if(!A.zone.connected_zones)
+ A.zone.connected_zones = list()
+ if(!(zone_B in A.zone.connected_zones))
+ A.zone.connected_zones += zone_B
+ A.zone.connected_zones[zone_B] = 1
+ else
+ A.zone.connected_zones[zone_B]++
zone_A = A.zone
@@ -301,23 +359,29 @@ connection
B.zone.connections = list()
B.zone.connections |= src
- if(zone_B.connected_zones)
- if(zone_B.connected_zones[zone_A] > 1)
- zone_B.connected_zones[zone_A]--
- else
- zone_B.connected_zones.Remove(zone_A)
- if(zone_B.connected_zones && !zone_B.connected_zones.len)
- zone_B.connected_zones = null
+ if(indirect != CONNECTION_CLOSED)
+ if(zone_B.connected_zones)
+ if(zone_B.connected_zones[zone_A] > 1)
+ zone_B.connected_zones[zone_A]--
+ else
+ zone_B.connected_zones.Remove(zone_A)
+ if(zone_B.connected_zones && !zone_B.connected_zones.len)
+ zone_B.connected_zones = null
- if(!B.zone.connected_zones)
- B.zone.connected_zones = list()
- if(!(zone_A in B.zone.connected_zones))
- B.zone.connected_zones += zone_A
- B.zone.connected_zones[zone_A] = 1
- else
- B.zone.connected_zones[zone_A]++
+ if(!B.zone.connected_zones)
+ B.zone.connected_zones = list()
+ if(!(zone_A in B.zone.connected_zones))
+ B.zone.connected_zones += zone_A
+ B.zone.connected_zones[zone_A] = 1
+ else
+ B.zone.connected_zones[zone_A]++
zone_B = B.zone
else
- del src
\ No newline at end of file
+ del src
+
+
+#undef CONNECTION_DIRECT
+#undef CONNECTION_INDIRECT
+#undef CONNECTION_CLOSED
\ No newline at end of file
diff --git a/code/ZAS/Creation.dm b/code/ZAS/Creation.dm
index ff20eed6f2a..69a8e1425fe 100644
--- a/code/ZAS/Creation.dm
+++ b/code/ZAS/Creation.dm
@@ -1,5 +1,6 @@
zone
New(turf/start)
+ . = ..()
//Get the turfs that are part of the zone using a floodfill method
if(istype(start,/list))
contents = start
diff --git a/code/ZAS/FEA_system.dm b/code/ZAS/FEA_system.dm
index 4f9bc2aa11f..e2c9d71fbc5 100644
--- a/code/ZAS/FEA_system.dm
+++ b/code/ZAS/FEA_system.dm
@@ -92,16 +92,14 @@ datum
controller
air_system
//Geoemetry lists
-// var/list/turf/simulated/active_singletons = list()
+ var/list/turf/simulated/turfs_with_connections = list()
+ var/list/obj/fire/active_hotspots = list()
//Special functions lists
-// var/list/turf/simulated/active_super_conductivity = list()
-// var/list/turf/simulated/high_pressure_delta = list()
//Geometry updates lists
var/list/turf/simulated/tiles_to_update = list()
var/list/connection/connections_checked = list()
-// var/list/turf/simulated/groups_to_rebuild = list()
var/current_cycle = 0
var/update_delay = 5 //How long between check should it try to process atmos again.
@@ -136,18 +134,15 @@ datum
var/start_time = world.timeofday
for(var/turf/simulated/S in world)
- if(S.z < 5)
- if(!S.zone && !S.blocks_air)
- if(S.CanPass(null, S, 0, 0))
- new/zone(S)
+ if(!S.zone && !S.blocks_air)
+ if(S.CanPass(null, S, 0, 0))
+ new/zone(S)
for(var/turf/simulated/S in world)
- if(S.z < 5)
- S.update_air_properties()
- // S.check_connections()
+ S.update_air_properties()
world << "\red \b Geometry processed in [time2text(world.timeofday-start_time, "mm:ss")] minutes!"
- spawn start()
+// spawn start()
proc/start()
//Purpose: This is kicked off by the master controller, and controls the processing of all atmosphere.
@@ -171,16 +166,19 @@ datum
*/
proc/tick()
+ . = 1 //Set the default return value, for runtime detection.
if(current_cycle >= next_stat_check)
var/zone/z = pick(zones)
- var/log_file = file("[time2text(world.timeofday, "statistics/DD-MM-YYYY.txt")]")
- log_file << "Zone | \The [get_area(pick(z.contents))] | [z.air.oxygen], [z.air.nitrogen], [z.air.carbon_dioxide], [z.air.toxins] | [z.air.temperature] | [z.air.group_multiplier * z.air.volume]"
+ var/log_file = file("[time2text(world.timeofday, "statistics/DD-MM-YYYY-air.txt")]")
+ log_file << "\"\The [get_area(pick(z.contents))]\",[z.air.oxygen],[z.air.nitrogen],[z.air.carbon_dioxide],[z.air.toxins],[z.air.temperature],[z.air.group_multiplier * z.air.volume]"
next_stat_check = current_cycle + (rand(5,7)*60)
if(tiles_to_update.len > 0) //If there are tiles to update, do so.
for(var/turf/simulated/T in tiles_to_update)
- T.update_air_properties()
+ var/output = T.update_air_properties()
+ if(. && T && !output)
+ . = 0 //If a runtime occured, make sure we can sense it.
tiles_to_update = list()
for(var/connection/C in connections_checked)
C.CheckPassSanity()
@@ -188,10 +186,13 @@ datum
for(var/zone/Z in zones)
if(Z.last_update < current_cycle)
- Z.process()
- if(Z) Z.last_update = current_cycle
+ var/output = Z.process()
+ if(Z)
+ Z.last_update = current_cycle
+ if(. && Z && !output)
+ . = 0
- for(var/obj/fire/F)
- F.process()
-
- return 1
\ No newline at end of file
+ for(var/obj/fire/F in active_hotspots)
+ var/output = F.process()
+ if(. && F && !output)
+ . = 0
\ No newline at end of file
diff --git a/code/ZAS/FEA_turf_tile.dm b/code/ZAS/FEA_turf_tile.dm
index 9fc9fa3334e..dc7d4298b09 100644
--- a/code/ZAS/FEA_turf_tile.dm
+++ b/code/ZAS/FEA_turf_tile.dm
@@ -51,7 +51,6 @@ turf
// current_cycle = 0
obj/fire/active_hotspot
- tmp/list/connections
// temperature_archived //USED ONLY FOR SOLIDS
// being_superconductive = 0
@@ -194,12 +193,12 @@ turf
if(!zone) //Still no zone, the floodfill determined it is not part of a larger zone. Force a zone on it.
new/zone(list(src))
- if(connections) //Check pass sanity of the connections.
- for(var/connection/C in connections)
+ if("\ref[src]" in air_master.turfs_with_connections) //Check pass sanity of the connections.
+ for(var/connection/C in air_master.turfs_with_connections["\ref[src]"])
if(!(C in air_master.connections_checked))
air_master.connections_checked += C
- update_zone_properties() //Update self zone and adjacent zones.
+ . = update_zone_properties() //Update self zone and adjacent zones.
if(air_check_directions)
processing = 1
@@ -220,6 +219,7 @@ turf
else
ZConnect(src,T)
+ return 1
// else if(zone && !zone.rebuild)
// for(var/direction2 in cardinal - reverse_direction(direction)) //Check all other directions for air that might be connected.
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index c7adbf2a7f7..c6be0e994d2 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -77,6 +77,7 @@ obj
archived_firelevel = 0
process()
+ . = 1
if(firelevel > vsc.IgnitionLevel)
@@ -167,12 +168,14 @@ obj
firelevel = fl
for(var/mob/living/carbon/human/M in loc)
M.FireBurn(min(max(0.1,firelevel / 20),10)) //Burn the humans!
+ air_master.active_hotspots.Add(src)
Del()
if (istype(loc, /turf/simulated))
ul_SetLuminosity(0)
loc = null
+ air_master.active_hotspots.Remove(src)
..()
diff --git a/code/ZAS/Functions.dm b/code/ZAS/Functions.dm
index 639eb8ef79e..dd21bbb0138 100644
--- a/code/ZAS/Functions.dm
+++ b/code/ZAS/Functions.dm
@@ -130,8 +130,8 @@ proc/ZConnect(turf/simulated/A,turf/simulated/B)
return ZMerge(A.zone,B.zone)
//Ensure the connection isn't already made.
- if(A.connections)
- for(var/connection/C in A.connections)
+ if("\ref[A]" in air_master.turfs_with_connections)
+ for(var/connection/C in air_master.turfs_with_connections["\ref[A]"])
C.Cleanup()
if(C && (C.B == B || C.A == B))
return
diff --git a/code/ZAS/Processing.dm b/code/ZAS/Processing.dm
index d159d57369b..9e069dc62d0 100644
--- a/code/ZAS/Processing.dm
+++ b/code/ZAS/Processing.dm
@@ -1,10 +1,11 @@
#define QUANTIZE(variable) (round(variable,0.0001))
zone/proc/process()
+ . = 1
+
//Deletes zone if empty.
if(!contents.len)
del src
- return 0
- //Does rebuilding stuff. Not sure if used.
+ //Does rebuilding stuff.
if(rebuild)
rebuild = 0
Rebuild() //Shoving this into a proc.
@@ -76,7 +77,7 @@ zone/proc/process()
//Do merging if conditions are met. Specifically, if there's a non-door connection
//to somewhere with space, the zones are merged regardless of equilibrium, to speed
//up spacing in areas with double-plated windows.
- if(C && !C.indirect && C.A.zone && C.B.zone)
+ if(C && C.indirect == 2 && C.A.zone && C.B.zone) //indirect = 2 is a direct connection.
if(C.A.zone.air.compare(C.B.zone.air) || total_space)
ZMerge(C.A.zone,C.B.zone)
@@ -191,23 +192,6 @@ proc/ShareSpace(datum/gas_mixture/A, ratio)
return 1
-
-zone/proc/connected_zones()
- //A legacy proc for getting connected zones.
- . = list()
- for(var/connection/C in connections)
- var/zone/Z
- if(C.A.zone == src)
- Z = C.B.zone
- else
- Z = C.A.zone
-
- if(Z in .)
- .[Z]++
- else
- . += Z
- .[Z] = 1
-
zone/proc/Rebuild()
//Choose a random turf and regenerate the zone from it.
var
@@ -215,11 +199,6 @@ zone/proc/Rebuild()
list/new_contents
problem = 0
- contents.Remove(null) //I can't believe this is needed.
-
- if(!contents.len)
- del src
-
var/list/turfs_to_consider = contents.Copy()
do
if(sample)
@@ -237,9 +216,8 @@ zone/proc/Rebuild()
new_contents = FloodFill(sample)
for(var/turf/space/S in new_contents)
- if(!space_tiles)
- space_tiles = list()
- space_tiles |= S
+ AddSpace(S)
+ new_contents.Remove(S)
if(contents.len != new_contents.len)
problem = 1
@@ -255,20 +233,20 @@ zone/proc/Rebuild()
var/list/turf/simulated/rebuild_turfs = contents - new_contents
var/list/turf/simulated/reconsider_turfs = list()
contents = new_contents
- for(var/turf/T in rebuild_turfs)
- if(istype(T,/turf/space))
- air_master.tiles_to_update |= T
- else if(!T.zone && T.CanPass(null, T, 1.5, 1))
+ for(var/turf/simulated/T in rebuild_turfs)
+ if(!T.zone && T.CanPass(null, T, 1.5, 1))
var/zone/Z = new /zone(T)
Z.air.copy_from(air)
else
reconsider_turfs |= T
- for(var/turf/T in reconsider_turfs)
- if(!T.zone)
+ for(var/turf/simulated/T in reconsider_turfs)
+ if(!T.zone && T.CanPass(null, T, 1.5, 1))
var/zone/Z = new /zone(T)
Z.air.copy_from(air)
+ else if(!T in air_master.tiles_to_update)
+ air_master.tiles_to_update.Add(T)
- for(var/turf/T in contents)
+ for(var/turf/simulated/T in contents)
if(T.zone && T.zone != src)
T.zone.RemoveTurf(T)
T.zone = src
@@ -283,4 +261,20 @@ zone/proc/Rebuild()
for(var/direction in cardinal)
var/turf/simulated/T = get_step(S,direction)
if(istype(T) && T.zone)
- T.zone.AddSpace(S)
\ No newline at end of file
+ T.zone.AddSpace(S)
+/*
+zone/proc/connected_zones()
+ //A legacy proc for getting connected zones.
+ . = list()
+ for(var/connection/C in connections)
+ var/zone/Z
+ if(C.A.zone == src)
+ Z = C.B.zone
+ else
+ Z = C.A.zone
+
+ if(Z in .)
+ .[Z]++
+ else
+ . += Z
+ .[Z] = 1*/
\ No newline at end of file
diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm
index d3bd4ae403a..6bcf23e6e5a 100644
--- a/code/game/gamemodes/newobjective.dm
+++ b/code/game/gamemodes/newobjective.dm
@@ -723,7 +723,7 @@ datum
return 20
- magboots
+ /*magboots
steal_target = /obj/item/clothing/shoes/magboots
explanation_text = "Steal a pair of \"NanoTrasen\" brand magboots."
weight = 20
@@ -745,7 +745,7 @@ datum
if(GetRank(job) == 4)
return 10
else
- return 20
+ return 20*/
blueprints
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 14426d5aaee..84c6655ac5d 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -294,7 +294,7 @@ datum/objective/steal
"a jetpack" = /obj/item/weapon/tank/jetpack,
"a captains jumpsuit" = /obj/item/clothing/under/rank/captain,
"a functional AI" = /obj/item/device/aicard,
- "a pair of magboots" = /obj/item/clothing/shoes/magboots,
+ /*"a pair of magboots" = /obj/item/clothing/shoes/magboots,*/
"the station blueprints" = /obj/item/blueprints,
"a nasa voidsuit" = /obj/item/clothing/suit/space/nasavoid,
"28 moles of plasma (full tank)" = /obj/item/weapon/tank,
diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm
index ab925dc6960..ec4a0cabe34 100644
--- a/code/game/master_controller.dm
+++ b/code/game/master_controller.dm
@@ -176,8 +176,11 @@ datum/controller/game_controller
air_master.current_cycle++
var/success = air_master.tick() //Changed so that a runtime does not crash the ticker.
if(!success) //Runtimed.
- world << "ERROR IN ATMOS TICKER. Killing air simulation!"
- kill_air = 1
+ air_master.failed_ticks++
+ if(air_master.failed_ticks > 5)
+ world << "RUNTIMES IN ATMOS TICKER. Killing air simulation!"
+ kill_air = 1
+ air_master.failed_ticks = 0
air_master_ready = 1
src.set_debug_state("Tension Master")
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index d138c6ece49..5ec9347ae01 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -37,20 +37,20 @@
log_ooc("[src.name]/[src.key] : [msg]")
for (var/client/C)
- if (src.client.holder && (!src.client.stealth || ( C.holder && C.holder.level != 0)))
- if (src.client.holder.rank == "Admin Observer")
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
- else if (src.client.holder.rank == "Retired Admin")
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
- else if (src.client.holder.rank == "Moderator")
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
- else if (src.client.holder.level >= 5)
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ if (C.listen_ooc)
+ if (src.client.holder && (!src.client.stealth || ( C.holder && C.holder.level != 0)))
+ if (src.client.holder.rank == "Admin Observer")
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ else if (src.client.holder.rank == "Retired Admin")
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ else if (src.client.holder.rank == "Moderator")
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ else if (src.client.holder.level >= 5)
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
+ else
+ C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
else
- C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
-
- else if (C.listen_ooc)
- C << "OOC: [src.client.stealth ? src.client.fakekey : src.key]: [msg]"
+ C << "OOC: [src.client.stealth ? src.client.fakekey : src.key]: [msg]"
/*
/mob/verb/goonsay(msg as text)
set name = "Goonsay"
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 119591fa5ed..2be48979c90 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -585,6 +585,7 @@
if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :(
if(prob(20))
src << "\red You feel a searing heat in your lungs!"
+ take_overall_damage(0,2) //burn them a bit.
fire_alert = max(fire_alert, 1)
else
fire_alert = 0
diff --git a/code/setup.dm b/code/setup.dm
index 9060feafac7..9be56d9f79e 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -19,9 +19,9 @@
#define MOLES_PLASMA_VISIBLE 0.5 //Moles in a standard cell after which plasma is visible
-#define SPECIFIC_HEAT_TOXIN 700
-#define SPECIFIC_HEAT_AIR 100
-#define SPECIFIC_HEAT_CDO 150
+#define SPECIFIC_HEAT_TOXIN 200
+#define SPECIFIC_HEAT_AIR 20
+#define SPECIFIC_HEAT_CDO 30
#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
(carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)