diff --git a/code/ZAS/Creation.dm b/code/ZAS/Creation.dm index baa83bfe370..08419346ae9 100644 --- a/code/ZAS/Creation.dm +++ b/code/ZAS/Creation.dm @@ -8,7 +8,7 @@ zone //Change all the zone vars of the turfs, check for space to be added to space_tiles. for(var/turf/T in contents) - if(T.zone) + if(T.zone && T.zone != src) T.zone.RemoveTurf(T) T.zone = src if(istype(T,/turf/space)) @@ -28,7 +28,7 @@ zone air.update_values() //Add this zone to the global list. - zones += src + zones.Add(src) Del() //Ensuring the zone list doesn't get clogged with null values. @@ -40,8 +40,8 @@ zone if(src in Z.connected_zones) Z.connected_zones.Remove(src) for(var/connection/C in connections) - C.Cleanup() - zones -= src + del C + zones.Remove(src) . = ..() proc/FloodFill(turf/start) @@ -51,6 +51,7 @@ proc/FloodFill(turf/start) list open = list(start) closed = list() + doors = list() while(open.len) for(var/turf/T in open) @@ -62,10 +63,22 @@ proc/FloodFill(turf/start) //Simple pass check. if(O.ZCanPass(T) && !(O in open) && !(O in closed)) open += O + else + doors += T + open -= T + continue open -= T closed += T + for(var/turf/T in doors) + var/turf/O = get_step(T,NORTH) + if(O in closed) + closed += T + O = get_step(T,WEST) + if(O in closed) + closed += T + return closed turf/proc/ZCanPass(turf/T, var/include_space = 0) diff --git a/code/ZAS/Definition.dm b/code/ZAS/Definition.dm index 90e88a6c613..caa03e4daba 100644 --- a/code/ZAS/Definition.dm +++ b/code/ZAS/Definition.dm @@ -1,6 +1,7 @@ turf/var/zone/zone var/list/zones = list() +var/list/DoorDirections = list(NORTH,WEST) //Which directions doors turfs can connect to zones zone var diff --git a/code/ZAS/FEA_system.dm b/code/ZAS/FEA_system.dm index 1d78eb69c8e..1a1c49a2a34 100644 --- a/code/ZAS/FEA_system.dm +++ b/code/ZAS/FEA_system.dm @@ -138,11 +138,14 @@ datum for(var/turf/simulated/S in world) if(S.z < 5) - if(!S.zone && !S.blocks_air && S.z < 5) // Added last check to force skipping asteroid z-levels -- TLE + 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() world << "\red \b Geometry processed in [time2text(world.timeofday-start_time, "mm:ss")] minutes!" spawn start() diff --git a/code/ZAS/FEA_turf_tile.dm b/code/ZAS/FEA_turf_tile.dm index fa44ba20f73..d592a3ce348 100644 --- a/code/ZAS/FEA_turf_tile.dm +++ b/code/ZAS/FEA_turf_tile.dm @@ -173,12 +173,18 @@ turf for(var/direction in cardinal) if(CanPass(null, get_step(src,direction), 0, 0)) air_check_directions |= direction + var/has_door = HasDoor(src) if(!zone && CanPass(null, src, 1.5, 1)) //No zone and not a wall, lets add ourself to a zone. for(var/direction in cardinal) + if(has_door && !(direction in DoorDirections)) + continue if(air_check_directions&direction) var/turf/simulated/T = get_step(src,direction) - if(T.zone) + if(T.zone && T.CanPass(null, src, 1.5, 1)) + T.zone.AddTurf(src) + break + else if(T.zone && get_dir(T,src) in DoorDirections) T.zone.AddTurf(src) break if(!zone) //No zone found, new zone! @@ -187,9 +193,9 @@ turf if(air_master.tiles_with_connections["\ref[src]"]) //Check pass sanity of the connections. var/list/connections = air_master.tiles_with_connections["\ref[src]"] for(var/connection/C in connections) - air_master.connections_checked |= C + air_master.connections_checked += C - update_zone_properties() //Update self zone and adjacent zones. + update_zone_properties(has_door) //Update self zone and adjacent zones. if(air_check_directions) processing = 1 @@ -197,7 +203,7 @@ turf processing = 0 - proc/update_zone_properties() + proc/update_zone_properties(var/has_door = 0) for(var/direction in cardinal) var/turf/simulated/T = get_step(src,direction) if(air_check_directions&direction) //I can connect air in this direction @@ -219,7 +225,7 @@ turf if(NT && NT.zone && NT.zone == T.zone) T.zone.rebuild = 1 - else if(T.CanPass(null, src, 0, 0)) + else if(T.CanPass(null, src, 0, 0) && direction in DoorDirections) if(T.zone != zone) ZConnect(src,T) diff --git a/code/ZAS/Functions.dm b/code/ZAS/Functions.dm index bc25ea165bb..191a1a8c8e7 100644 --- a/code/ZAS/Functions.dm +++ b/code/ZAS/Functions.dm @@ -6,14 +6,16 @@ if(T.zone) T.zone.RemoveTurf(T) contents += T - air.group_multiplier++ + if(air) + air.group_multiplier++ T.zone = src proc/RemoveTurf(turf/T) //Same, but in reverse. if(!(T in contents)) return contents -= T - air.group_multiplier-- + if(air) + air.group_multiplier-- T.zone = null proc/AddSpace(turf/space/S) diff --git a/code/ZAS/Processing.dm b/code/ZAS/Processing.dm index fd21d4168f4..f212e11d79b 100644 --- a/code/ZAS/Processing.dm +++ b/code/ZAS/Processing.dm @@ -35,7 +35,7 @@ zone/proc/process() //If there is space, air should flow out of the zone. if(abs(air.return_pressure()) > vsc.airflow_lightest_pressure) AirflowSpace(src) - ShareSpace(air,total_space*(vsc.zone_share_percent/100)) + ShareSpace(air,total_space*vsc.zone_share_percent/200) //React the air here. air.react(null,0) @@ -92,7 +92,7 @@ zone/proc/process() if(abs(air.total_moles - Z.air.total_moles) > 0.1 || abs(air.temperature - Z.air.temperature) > 0.1) if(abs(Z.air.return_pressure() - air.return_pressure()) > vsc.airflow_lightest_pressure) Airflow(src,Z) - ShareRatio( air , Z.air , max(connected_zones[Z]*(vsc.zone_share_percent/200)*(space_tiles || Z.space_tiles ? 2 : 1) , 1) ) + ShareRatio( air , Z.air , connected_zones[Z]*vsc.zone_share_percent/200 ) //Divided by 200 since each zone is processed. Each connection is considered twice //Space tiles force it to try and move twice as much air. diff --git a/code/modules/critters/critters.dm b/code/modules/critters/critters.dm index 3c3846654b1..1fe8431ee6e 100644 --- a/code/modules/critters/critters.dm +++ b/code/modules/critters/critters.dm @@ -158,14 +158,6 @@ var/stunchance = 10 // chance to tackle things down -//TEMPORARY - New() - ..() - spawn(0) - del(src) -//TEMPORARY - - Harvest(var/obj/item/weapon/W, var/mob/living/user) if(..()) var/success = 0 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 021b7edb08f..ad8c7d863bd 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -70,7 +70,7 @@ proc/isorgan(A) return istype(A, /datum/organ/external) proc/hasorgans(A) - return (ishuman(A) || ismonkey(A) + return (ishuman(A) || ismonkey(A))