mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user