Or attempts to at least.
This commit is contained in:
mwerezak
2014-06-28 17:42:27 -04:00
parent 06ea5a2f6c
commit 909e8a4e95
3 changed files with 77 additions and 106 deletions

View File

@@ -156,12 +156,14 @@
src.updateUsrDialog()
return
if(href_list["atmos_unlock"])
switch(href_list["atmos_unlock"])
if("0")
current.air_doors_close(1)
if("1")
current.air_doors_open(1)
//commenting this out because it causes compile errors
//I tried fixing it but wasn't sucessful.
//if(href_list["atmos_unlock"])
// switch(href_list["atmos_unlock"])
// if("0")
// current.alarm_area.air_doors_close()
// if("1")
// current.alarm_area.air_doors_open()
if(href_list["atmos_alarm"])
if (current.alarm_area.atmosalert(2))

View File

@@ -71,10 +71,28 @@
/area/proc/atmosalert(danger_level)
// if(type==/area) //No atmos alarms in space
// return 0 //redudant
//Check all the alarms before lowering atmosalm. Raising is perfectly fine.
for (var/area/RA in related)
for (var/obj/machinery/alarm/AA in RA)
if ( !(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted)
danger_level = max(danger_level, AA.danger_level)
if(danger_level != atmosalm)
//updateicon()
//mouse_opacity = 0
if (danger_level==2)
if (danger_level < 1 && atmosalm >= 1)
//closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise
air_doors_open()
if (danger_level < 2 && atmosalm >= 2)
for(var/area/RA in related)
for(var/obj/machinery/camera/C in RA)
C.network.Remove("Atmosphere Alarms")
for(var/mob/living/silicon/aiPlayer in player_list)
aiPlayer.cancelAlarm("Atmosphere", src, src)
for(var/obj/machinery/computer/station_alert/a in machines)
a.cancelAlarm("Atmosphere", src, src)
if (danger_level >= 2 && atmosalm < 2)
var/list/cameras = list()
for(var/area/RA in related)
//updateicon()
@@ -85,18 +103,35 @@
aiPlayer.triggerAlarm("Atmosphere", src, cameras, src)
for(var/obj/machinery/computer/station_alert/a in machines)
a.triggerAlarm("Atmosphere", src, cameras, src)
else if (atmosalm == 2)
for(var/area/RA in related)
for(var/obj/machinery/camera/C in RA)
C.network.Remove("Atmosphere Alarms")
for(var/mob/living/silicon/aiPlayer in player_list)
aiPlayer.cancelAlarm("Atmosphere", src, src)
for(var/obj/machinery/computer/station_alert/a in machines)
a.cancelAlarm("Atmosphere", src, src)
air_doors_close()
atmosalm = danger_level
return 1
return 0
/area/proc/air_doors_close()
if(!src.master.air_doors_activated)
src.master.air_doors_activated = 1
for(var/obj/machinery/door/firedoor/E in src.master.all_doors)
if(!E:blocked)
if(E.operating)
E:nextstate = CLOSED
else if(!E.density)
spawn(0)
E.close()
/area/proc/air_doors_open()
if(src.master.air_doors_activated)
src.master.air_doors_activated = 0
for(var/obj/machinery/door/firedoor/E in src.master.all_doors)
if(!E:blocked)
if(E.operating)
E:nextstate = OPEN
else if(E.density)
spawn(0)
E.open()
/area/proc/firealert()
if(name == "Space") //no fire alarms in space
return

View File

@@ -214,8 +214,7 @@
danger_level = overall_danger_level()
if (old_level != danger_level)
refresh_danger_level()
update_icon()
apply_danger_level(danger_level)
if (old_pressurelevel != pressure_dangerlevel)
if (breach_detected())
@@ -314,7 +313,12 @@
if((stat & (NOPOWER|BROKEN)) || shorted)
icon_state = "alarmp"
return
switch(max(danger_level, alarm_area.atmosalm))
var/icon_level = danger_level
if (alarm_area.atmosalm)
icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow
switch(icon_level)
if (0)
icon_state = "alarm0"
if (1)
@@ -434,16 +438,6 @@
if (alarm_area.atmosalert(new_danger_level))
post_alert(new_danger_level)
for (var/area/A in alarm_area.related)
for (var/obj/machinery/alarm/AA in A)
if ( !(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.danger_level != new_danger_level)
AA.update_icon()
if(danger_level > 1)
air_doors_close(0)
else
air_doors_open(0)
update_icon()
/obj/machinery/alarm/proc/post_alert(alert_level)
@@ -466,71 +460,6 @@
frequency.post_signal(src, alert_signal)
/obj/machinery/alarm/proc/refresh_danger_level()
var/level = 0
for (var/area/A in alarm_area.related)
for (var/obj/machinery/alarm/AA in A)
if ( !(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted)
if (AA.danger_level > level)
level = AA.danger_level
apply_danger_level(level)
/obj/machinery/alarm/proc/air_doors_close(manual)
var/area/A = get_area(src)
if(!A.master.air_doors_activated)
A.master.air_doors_activated = 1
for(var/obj/machinery/door/E in A.master.all_doors)
if(istype(E,/obj/machinery/door/firedoor))
if(!E:blocked)
if(E.operating)
E:nextstate = CLOSED
else if(!E.density)
spawn(0)
E.close()
continue
/* if(istype(E, /obj/machinery/door/airlock))
if((!E:arePowerSystemsOn()) || (E.stat & NOPOWER) || E:air_locked) continue
if(!E.density)
spawn(0)
E.close()
spawn(10)
if(E.density)
E:air_locked = E.req_access
E:req_access = list(ACCESS_ENGINE, ACCESS_ATMOSPHERICS)
E.update_icon()
else if(E.operating)
spawn(10)
E.close()
if(E.density)
E:air_locked = E.req_access
E:req_access = list(ACCESS_ENGINE, ACCESS_ATMOSPHERICS)
E.update_icon()
else if(!E:locked) //Don't lock already bolted doors.
E:air_locked = E.req_access
E:req_access = list(ACCESS_ENGINE, ACCESS_ATMOSPHERICS)
E.update_icon()*/
/obj/machinery/alarm/proc/air_doors_open(manual)
var/area/A = get_area(loc)
if(A.master.air_doors_activated)
A.master.air_doors_activated = 0
for(var/obj/machinery/door/E in A.master.all_doors)
if(istype(E, /obj/machinery/door/firedoor))
if(!E:blocked)
if(E.operating)
E:nextstate = OPEN
else if(E.density)
spawn(0)
E.open()
continue
/* if(istype(E, /obj/machinery/door/airlock))
if((!E:arePowerSystemsOn()) || (E.stat & NOPOWER)) continue
if(!isnull(E:air_locked)) //Don't mess with doors locked for other reasons.
E:req_access = E:air_locked
E:air_locked = null
E.update_icon()*/
///////////
//HACKING//
@@ -785,18 +714,23 @@ Toxins: <span class='dl[phoron_dangerlevel]'>[phoron_percent]</span>%<br>
output += "Temperature: <span class='dl[temperature_dangerlevel]'>[environment.temperature]</span>K ([round(environment.temperature - T0C, 0.1)]C)<br>"
//Overall status
//'Local Status' should report the LOCAL status, damnit.
output += "Local Status: "
switch(max(pressure_dangerlevel,oxygen_dangerlevel,co2_dangerlevel,phoron_dangerlevel,other_dangerlevel,temperature_dangerlevel))
if(2)
output += "<span class='dl2'>DANGER: Internals Required</span>"
output += "<span class='dl2'>DANGER: Internals Required</span><br>"
if(1)
output += "<span class='dl1'>Caution</span>"
output += "<span class='dl1'>Caution</span><br>"
if(0)
output += "<span class='dl0'>Optimal</span><br>"
output += "Area Status: "
if(alarm_area.atmosalm)
output += {"<span class='dl1'>Caution: Atmos alert in area</span>"}
output += "<span class='dl1'>Atmos alert in area</span>"
else if (alarm_area.fire)
output += "<span class='dl1'>Fire alarm in area</span>"
else
output += {"<span class='dl0'>Optimal</span>"}
output += "No alerts"
return output
@@ -828,9 +762,9 @@ Toxins: <span class='dl[phoron_dangerlevel]'>[phoron_percent]</span>%<br>
switch(screen)
if (AALARM_SCREEN_MAIN)
if(alarm_area.atmosalm)
output += "<a href='?src=\ref[src];atmos_reset=1'>Reset - Atmospheric Alarm</a><hr>"
output += "<a href='?src=\ref[src];atmos_reset=1'>Reset - Area Atmospheric Alarm</a><hr>"
else
output += "<a href='?src=\ref[src];atmos_alarm=1'>Activate - Atmospheric Alarm</a><hr>"
output += "<a href='?src=\ref[src];atmos_alarm=1'>Activate - Area Atmospheric Alarm</a><hr>"
output += {"
<a href='?src=\ref[src];screen=[AALARM_SCREEN_SCRUB]'>Scrubbers Control</a><br>
@@ -1093,9 +1027,9 @@ table tr:first-child th:first-child { border: none;}
if(href_list["atmos_unlock"])
switch(href_list["atmos_unlock"])
if("0")
air_doors_close(1)
alarm_area.air_doors_close()
if("1")
air_doors_open(1)
alarm_area.air_doors_open()
if(href_list["atmos_alarm"])
if (alarm_area.atmosalert(2))