diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 6ffb27a4ee..68a0062316 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -21,14 +21,14 @@ var/panic = 0 //is this scrubber panicked? update_icon() - if(on)//&&node)//seems to be broken + if(on&&node) if(scrubbing) icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" else icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" else icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" - //on = 0 + on = 0 return @@ -155,7 +155,7 @@ volume_rate = 2000 else scrubbing = 1 - volume_rate = 120 + volume_rate = initial(volume_rate) if(signal.data["tag"]) spawn(2) broadcast_status() diff --git a/code/ATMOSPHERICS/init_S_V_A.dm b/code/ATMOSPHERICS/init_S_V_A.dm index f5f98d5655..f5ecd07ce7 100644 --- a/code/ATMOSPHERICS/init_S_V_A.dm +++ b/code/ATMOSPHERICS/init_S_V_A.dm @@ -1,82 +1,92 @@ datum/controller/game_controller proc/find_air_alarms() - + var/list/processed_areas = list() for(var/area/A in world) - var/area/M = A.master //we want to search master area, not only L(number) one + if(A in processed_areas) continue + processed_areas += connect_area_atmos_machinery(A) + return - var/uniq_id = md5(M.name)//hash works like a charm - var/list/alarms = list() - var/list/scrubbers = list() - var/list/vents = list() - var/i = 0 //used in id_tag and name generation - if(M.related && M.related.len)//if has relatives - for(var/area/Rel in M.related)//check all relatives - if(Rel == M) continue //same parent area. - if(Rel.contents && Rel.contents.len) - for(var/obj/O in Rel.contents) - switch(O.type) - if(/obj/machinery/alarm) - alarms += O - if(/obj/machinery/atmospherics/unary/vent_scrubber) - scrubbers += O - if(/obj/machinery/atmospherics/unary/vent_pump) - vents += O - else continue +/proc/connect_area_atmos_machinery(var/area/A) + var/area/M = A.master //we want to search master area, not only L(number) one + + var/uniq_id = md5(M.name)//hash works like a charm + var/list/alarms = list() + var/list/scrubbers = list() + var/list/vents = list() + var/list/processed_areas = list() + var/i = 0 //used in id_tag and name generation + + if(M.related && M.related.len)//if has relatives + for(var/area/Rel in M.related)//check all relatives + if(Rel == M) continue //same parent area. + processed_areas += Rel + if(Rel.contents && Rel.contents.len) + for(var/obj/machinery/O in Rel.contents) + switch(O.type) + if(/obj/machinery/alarm) + alarms += O + if(/obj/machinery/atmospherics/unary/vent_scrubber) + if(O:id_tag) continue + scrubbers += O + if(/obj/machinery/atmospherics/unary/vent_pump) + if(O:id) continue + vents += O + else continue /* - for(var/obj/machinery/alarm/Al in Rel.contents)//find air alarms in area, append to list - alarms += Al - for(var/obj/machinery/atmospherics/unary/vent_scrubber/V in Rel.contents)//find scrubbers in area, append to list - if(V.id_tag) continue//already connected to air alarm - scrubbers += V - for(var/obj/machinery/atmospherics/unary/vent_pump/P in Rel.contents) - if(P.id) continue - vents += P + for(var/obj/machinery/alarm/Al in Rel.contents)//find air alarms in area, append to list + alarms += Al + for(var/obj/machinery/atmospherics/unary/vent_scrubber/V in Rel.contents)//find scrubbers in area, append to list + if(V.id_tag) continue//already connected to air alarm + scrubbers += V + for(var/obj/machinery/atmospherics/unary/vent_pump/P in Rel.contents) + if(P.id) continue + vents += P */ - if(!alarms.len || (!scrubbers.len && !vents.len)) continue + if(!alarms.len || (!scrubbers.len && !vents.len)) return - i = 0 - if(scrubbers.len) //if scrubbers found in area - for(var/obj/machinery/atmospherics/unary/vent_scrubber/Sc in scrubbers)//iterate over found scrubbers - if(Sc.id_tag) continue - var/dist = 127 //max value returned by get_dist - var/obj/machinery/alarm/target_alarm = null - for(var/obj/machinery/alarm/Al in alarms)//iterate over found alarms - var/temp_dist = get_dist(Sc.loc, Al.loc)//if distance between current scrubber and current alarm < previous distance, set this alarm as target to connect to - if(temp_dist