Merge pull request #1527 from SkyMarshal/master

Connections no longer are deleted when a door closes, instead persisting until merged or a wall is built there or something. Better runtime detection, and no more searching through world for fires to process.
This commit is contained in:
Mloc
2012-07-26 15:35:38 -07:00
7 changed files with 278 additions and 210 deletions
+216 -152
View File
@@ -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
del src
#undef CONNECTION_DIRECT
#undef CONNECTION_INDIRECT
#undef CONNECTION_CLOSED
+18 -14
View File
@@ -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.
@@ -144,7 +142,7 @@ datum
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.
@@ -168,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()
@@ -185,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
for(var/obj/fire/F in active_hotspots)
var/output = F.process()
if(. && F && !output)
. = 0
+4 -4
View File
@@ -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.
+3
View File
@@ -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)
..()
+2 -2
View File
@@ -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
+30 -36
View File
@@ -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)
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*/
+5 -2
View File
@@ -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 << "<font color='red'><b>ERROR IN ATMOS TICKER. Killing air simulation!</font></b>"
kill_air = 1
air_master.failed_ticks++
if(air_master.failed_ticks > 5)
world << "<font color='red'><b>RUNTIMES IN ATMOS TICKER. Killing air simulation!</font></b>"
kill_air = 1
air_master.failed_ticks = 0
air_master_ready = 1
src.set_debug_state("Tension Master")