mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
Split air alarm and fire alarm files, move new to initialize
This commit is contained in:
@@ -29,6 +29,11 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
|
|||||||
#define MAINT 0x8 // Under maintenance.
|
#define MAINT 0x8 // Under maintenance.
|
||||||
#define EMPED 0x10 // Temporary broken by EMP pulse.
|
#define EMPED 0x10 // Temporary broken by EMP pulse.
|
||||||
|
|
||||||
|
// Remote control states
|
||||||
|
#define RCON_NO 1
|
||||||
|
#define RCON_AUTO 2
|
||||||
|
#define RCON_YES 3
|
||||||
|
|
||||||
// Used by firelocks
|
// Used by firelocks
|
||||||
#define FIREDOOR_OPEN 1
|
#define FIREDOOR_OPEN 1
|
||||||
#define FIREDOOR_CLOSED 2
|
#define FIREDOOR_CLOSED 2
|
||||||
|
|||||||
@@ -1,7 +1,3 @@
|
|||||||
////////////////////////////////////////
|
|
||||||
//CONTAINS: Air Alarms and Fire Alarms//
|
|
||||||
////////////////////////////////////////
|
|
||||||
|
|
||||||
#define AALARM_MODE_SCRUBBING 1
|
#define AALARM_MODE_SCRUBBING 1
|
||||||
#define AALARM_MODE_REPLACEMENT 2 //like scrubbing, but faster.
|
#define AALARM_MODE_REPLACEMENT 2 //like scrubbing, but faster.
|
||||||
#define AALARM_MODE_PANIC 3 //constantly sucks all air
|
#define AALARM_MODE_PANIC 3 //constantly sucks all air
|
||||||
@@ -17,10 +13,6 @@
|
|||||||
|
|
||||||
#define AALARM_REPORT_TIMEOUT 100
|
#define AALARM_REPORT_TIMEOUT 100
|
||||||
|
|
||||||
#define RCON_NO 1
|
|
||||||
#define RCON_AUTO 2
|
|
||||||
#define RCON_YES 3
|
|
||||||
|
|
||||||
#define MAX_TEMPERATURE 90
|
#define MAX_TEMPERATURE 90
|
||||||
#define MIN_TEMPERATURE -40
|
#define MIN_TEMPERATURE -40
|
||||||
|
|
||||||
@@ -98,8 +90,8 @@
|
|||||||
/obj/machinery/alarm/alarms_hidden
|
/obj/machinery/alarm/alarms_hidden
|
||||||
alarms_hidden = TRUE
|
alarms_hidden = TRUE
|
||||||
|
|
||||||
/obj/machinery/alarm/server/New()
|
/obj/machinery/alarm/server/Initialize(mapload)
|
||||||
..()
|
. = ..()
|
||||||
req_access = list(access_rd, access_atmospherics, access_engine_equip)
|
req_access = list(access_rd, access_atmospherics, access_engine_equip)
|
||||||
TLV["oxygen"] = list(-1.0, -1.0,-1.0,-1.0) // Partial pressure, kpa
|
TLV["oxygen"] = list(-1.0, -1.0,-1.0,-1.0) // Partial pressure, kpa
|
||||||
TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
|
TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
|
||||||
@@ -109,6 +101,10 @@
|
|||||||
TLV["temperature"] = list(20, 40, 140, 160) // K
|
TLV["temperature"] = list(20, 40, 140, 160) // K
|
||||||
target_temperature = 90
|
target_temperature = 90
|
||||||
|
|
||||||
|
/obj/machinery/alarm/Initialize(mapload)
|
||||||
|
. = ..()
|
||||||
|
first_run()
|
||||||
|
|
||||||
/obj/machinery/alarm/Destroy()
|
/obj/machinery/alarm/Destroy()
|
||||||
unregister_radio(src, frequency)
|
unregister_radio(src, frequency)
|
||||||
qdel(wires)
|
qdel(wires)
|
||||||
@@ -118,10 +114,6 @@
|
|||||||
elect_master(exclude_self = TRUE)
|
elect_master(exclude_self = TRUE)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/alarm/New()
|
|
||||||
..()
|
|
||||||
first_run()
|
|
||||||
|
|
||||||
/obj/machinery/alarm/proc/first_run()
|
/obj/machinery/alarm/proc/first_run()
|
||||||
alarm_area = get_area(src)
|
alarm_area = get_area(src)
|
||||||
area_uid = alarm_area.uid
|
area_uid = alarm_area.uid
|
||||||
@@ -313,7 +305,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
var/icon_level = danger_level
|
var/icon_level = danger_level
|
||||||
if(alarm_area.atmosalm)
|
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
|
icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow
|
||||||
|
|
||||||
var/new_color = null
|
var/new_color = null
|
||||||
@@ -793,342 +785,3 @@
|
|||||||
..()
|
..()
|
||||||
spawn(rand(0,15))
|
spawn(rand(0,15))
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/alarm/examine(mob/user)
|
|
||||||
..(user)
|
|
||||||
/*
|
|
||||||
AIR ALARM CIRCUIT
|
|
||||||
Just a object used in constructing air alarms
|
|
||||||
|
|
||||||
/obj/item/weapon/airalarm_electronics
|
|
||||||
name = "air alarm electronics"
|
|
||||||
icon = 'icons/obj/doors/door_assembly.dmi'
|
|
||||||
icon_state = "door_electronics"
|
|
||||||
desc = "Looks like a circuit. Probably is."
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
FIRE ALARM
|
|
||||||
*/
|
|
||||||
/obj/machinery/firealarm
|
|
||||||
name = "fire alarm"
|
|
||||||
desc = "<i>\"Pull this in case of emergency\"</i>. Thus, keep pulling it forever."
|
|
||||||
icon = 'icons/obj/monitors.dmi'
|
|
||||||
icon_state = "fire0"
|
|
||||||
plane = TURF_PLANE
|
|
||||||
layer = ABOVE_TURF_LAYER
|
|
||||||
var/detecting = 1.0
|
|
||||||
var/working = 1.0
|
|
||||||
var/time = 10.0
|
|
||||||
var/timing = 0.0
|
|
||||||
var/lockdownbyai = 0
|
|
||||||
anchored = 1.0
|
|
||||||
use_power = 1
|
|
||||||
idle_power_usage = 2
|
|
||||||
active_power_usage = 6
|
|
||||||
power_channel = ENVIRON
|
|
||||||
var/last_process = 0
|
|
||||||
panel_open = 0
|
|
||||||
var/seclevel
|
|
||||||
circuit = /obj/item/weapon/circuitboard/firealarm
|
|
||||||
var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/alarms_hidden
|
|
||||||
alarms_hidden = TRUE
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/update_icon()
|
|
||||||
cut_overlays()
|
|
||||||
|
|
||||||
if(panel_open)
|
|
||||||
set_light(0)
|
|
||||||
return
|
|
||||||
|
|
||||||
if(stat & BROKEN)
|
|
||||||
icon_state = "firex"
|
|
||||||
set_light(0)
|
|
||||||
else if(stat & NOPOWER)
|
|
||||||
icon_state = "firep"
|
|
||||||
set_light(0)
|
|
||||||
else
|
|
||||||
if(!detecting)
|
|
||||||
icon_state = "fire1"
|
|
||||||
set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000")
|
|
||||||
else
|
|
||||||
icon_state = "fire0"
|
|
||||||
switch(seclevel)
|
|
||||||
if("green") set_light(l_range = 2, l_power = 0.25, l_color = "#00ff00")
|
|
||||||
if("yellow") set_light(l_range = 2, l_power = 0.25, l_color = "#ffff00")
|
|
||||||
if("violet") set_light(l_range = 2, l_power = 0.25, l_color = "#9933ff")
|
|
||||||
if("orange") set_light(l_range = 2, l_power = 0.25, l_color = "#ff9900")
|
|
||||||
if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9")
|
|
||||||
if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000")
|
|
||||||
if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633")
|
|
||||||
add_overlay("overlay_[seclevel]")
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume)
|
|
||||||
if(detecting)
|
|
||||||
if(temperature > T0C + 200)
|
|
||||||
alarm() // added check of detector status here
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/attack_ai(mob/user as mob)
|
|
||||||
return attack_hand(user)
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/bullet_act()
|
|
||||||
return alarm()
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/emp_act(severity)
|
|
||||||
if(prob(50 / severity))
|
|
||||||
alarm(rand(30 / severity, 60 / severity))
|
|
||||||
..()
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob)
|
|
||||||
add_fingerprint(user)
|
|
||||||
|
|
||||||
if(alarm_deconstruction_screwdriver(user, W))
|
|
||||||
return
|
|
||||||
if(alarm_deconstruction_wirecutters(user, W))
|
|
||||||
return
|
|
||||||
|
|
||||||
if(panel_open)
|
|
||||||
if(istype(W, /obj/item/device/multitool))
|
|
||||||
detecting = !(detecting)
|
|
||||||
if(detecting)
|
|
||||||
user.visible_message("<span class='notice'>\The [user] has reconnected [src]'s detecting unit!</span>", "<span class='notice'>You have reconnected [src]'s detecting unit.</span>")
|
|
||||||
else
|
|
||||||
user.visible_message("<span class='notice'>\The [user] has disconnected [src]'s detecting unit!</span>", "<span class='notice'>You have disconnected [src]'s detecting unit.</span>")
|
|
||||||
return
|
|
||||||
|
|
||||||
alarm()
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/process()//Note: this processing was mostly phased out due to other code, and only runs when needed
|
|
||||||
if(stat & (NOPOWER|BROKEN))
|
|
||||||
return
|
|
||||||
|
|
||||||
if(timing)
|
|
||||||
if(time > 0)
|
|
||||||
time = time - ((world.timeofday - last_process) / 10)
|
|
||||||
else
|
|
||||||
alarm()
|
|
||||||
time = 0
|
|
||||||
timing = 0
|
|
||||||
STOP_PROCESSING(SSobj, src)
|
|
||||||
updateDialog()
|
|
||||||
last_process = world.timeofday
|
|
||||||
|
|
||||||
if(locate(/obj/fire) in src.loc)
|
|
||||||
alarm()
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/power_change()
|
|
||||||
..()
|
|
||||||
spawn(rand(0,15))
|
|
||||||
update_icon()
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/attack_hand(mob/user as mob)
|
|
||||||
if(user.stat || stat & (NOPOWER | BROKEN))
|
|
||||||
return
|
|
||||||
|
|
||||||
user.set_machine(src)
|
|
||||||
var/area/A = src.loc
|
|
||||||
var/d1
|
|
||||||
var/d2
|
|
||||||
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
|
|
||||||
A = A.loc
|
|
||||||
|
|
||||||
if(A.fire)
|
|
||||||
d1 = text("<A href='?src=\ref[];reset=1'>Reset - Lockdown</A>", src)
|
|
||||||
else
|
|
||||||
d1 = text("<A href='?src=\ref[];alarm=1'>Alarm - Lockdown</A>", src)
|
|
||||||
if(timing)
|
|
||||||
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
|
||||||
else
|
|
||||||
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
|
||||||
var/second = round(time) % 60
|
|
||||||
var/minute = (round(time) - second) / 60
|
|
||||||
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>Fire alarm</B> [d1]\n<HR>The current alert level is: <b>[get_security_level()]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? "[minute]:" : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
|
|
||||||
user << browse(dat, "window=firealarm")
|
|
||||||
onclose(user, "firealarm")
|
|
||||||
else
|
|
||||||
A = A.loc
|
|
||||||
if(A.fire)
|
|
||||||
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("Reset - Lockdown"))
|
|
||||||
else
|
|
||||||
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("Alarm - Lockdown"))
|
|
||||||
if(timing)
|
|
||||||
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
|
||||||
else
|
|
||||||
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
|
||||||
var/second = round(time) % 60
|
|
||||||
var/minute = (round(time) - second) / 60
|
|
||||||
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>[stars("Fire alarm")]</B> [d1]\n<HR><b>The current alert level is: [stars(get_security_level())]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? text("[]:", minute) : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
|
|
||||||
user << browse(dat, "window=firealarm")
|
|
||||||
onclose(user, "firealarm")
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/Topic(href, href_list)
|
|
||||||
..()
|
|
||||||
if(usr.stat || stat & (BROKEN | NOPOWER))
|
|
||||||
return
|
|
||||||
|
|
||||||
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
|
||||||
usr.set_machine(src)
|
|
||||||
if(href_list["reset"])
|
|
||||||
reset()
|
|
||||||
else if(href_list["alarm"])
|
|
||||||
alarm()
|
|
||||||
else if(href_list["time"])
|
|
||||||
timing = text2num(href_list["time"])
|
|
||||||
last_process = world.timeofday
|
|
||||||
START_PROCESSING(SSobj, src)
|
|
||||||
else if(href_list["tp"])
|
|
||||||
var/tp = text2num(href_list["tp"])
|
|
||||||
time += tp
|
|
||||||
time = min(max(round(time), 0), 120)
|
|
||||||
|
|
||||||
updateUsrDialog()
|
|
||||||
|
|
||||||
add_fingerprint(usr)
|
|
||||||
else
|
|
||||||
usr << browse(null, "window=firealarm")
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/proc/reset()
|
|
||||||
if(!(working))
|
|
||||||
return
|
|
||||||
var/area/area = get_area(src)
|
|
||||||
for(var/obj/machinery/firealarm/FA in area)
|
|
||||||
fire_alarm.clearAlarm(src.loc, FA)
|
|
||||||
update_icon()
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/proc/alarm(var/duration = 0)
|
|
||||||
if(!(working))
|
|
||||||
return
|
|
||||||
var/area/area = get_area(src)
|
|
||||||
for(var/obj/machinery/firealarm/FA in area)
|
|
||||||
fire_alarm.triggerAlarm(loc, FA, duration, hidden = alarms_hidden)
|
|
||||||
update_icon()
|
|
||||||
playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/proc/set_security_level(var/newlevel)
|
|
||||||
if(seclevel != newlevel)
|
|
||||||
seclevel = newlevel
|
|
||||||
update_icon()
|
|
||||||
|
|
||||||
/obj/machinery/firealarm/Initialize()
|
|
||||||
. = ..()
|
|
||||||
if(z in using_map.contact_levels)
|
|
||||||
set_security_level(security_level? get_security_level() : "green")
|
|
||||||
|
|
||||||
/*
|
|
||||||
FIRE ALARM CIRCUIT
|
|
||||||
Just a object used in constructing fire alarms
|
|
||||||
|
|
||||||
/obj/item/weapon/firealarm_electronics
|
|
||||||
name = "fire alarm electronics"
|
|
||||||
icon = 'icons/obj/doors/door_assembly.dmi'
|
|
||||||
icon_state = "door_electronics"
|
|
||||||
desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\""
|
|
||||||
w_class = ITEMSIZE_SMALL
|
|
||||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
|
||||||
*/
|
|
||||||
/obj/machinery/partyalarm
|
|
||||||
name = "\improper PARTY BUTTON"
|
|
||||||
desc = "Cuban Pete is in the house!"
|
|
||||||
icon = 'icons/obj/monitors.dmi'
|
|
||||||
icon_state = "fire0"
|
|
||||||
var/detecting = 1.0
|
|
||||||
var/working = 1.0
|
|
||||||
var/time = 10.0
|
|
||||||
var/timing = 0.0
|
|
||||||
var/lockdownbyai = 0
|
|
||||||
anchored = 1.0
|
|
||||||
use_power = 1
|
|
||||||
idle_power_usage = 2
|
|
||||||
active_power_usage = 6
|
|
||||||
|
|
||||||
/obj/machinery/partyalarm/attack_hand(mob/user as mob)
|
|
||||||
if(user.stat || stat & (NOPOWER|BROKEN))
|
|
||||||
return
|
|
||||||
|
|
||||||
user.machine = src
|
|
||||||
var/area/A = get_area(src)
|
|
||||||
ASSERT(isarea(A))
|
|
||||||
var/d1
|
|
||||||
var/d2
|
|
||||||
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
|
|
||||||
|
|
||||||
if(A.party)
|
|
||||||
d1 = text("<A href='?src=\ref[];reset=1'>No Party :(</A>", src)
|
|
||||||
else
|
|
||||||
d1 = text("<A href='?src=\ref[];alarm=1'>PARTY!!!</A>", src)
|
|
||||||
if(timing)
|
|
||||||
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
|
||||||
else
|
|
||||||
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
|
||||||
var/second = time % 60
|
|
||||||
var/minute = (time - second) / 60
|
|
||||||
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>Party Button</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
|
||||||
user << browse(dat, "window=partyalarm")
|
|
||||||
onclose(user, "partyalarm")
|
|
||||||
else
|
|
||||||
if(A.fire)
|
|
||||||
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("No Party :("))
|
|
||||||
else
|
|
||||||
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("PARTY!!!"))
|
|
||||||
if(timing)
|
|
||||||
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
|
||||||
else
|
|
||||||
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
|
||||||
var/second = time % 60
|
|
||||||
var/minute = (time - second) / 60
|
|
||||||
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>[]</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", stars("Party Button"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
|
||||||
user << browse(dat, "window=partyalarm")
|
|
||||||
onclose(user, "partyalarm")
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/partyalarm/proc/reset()
|
|
||||||
if(!(working))
|
|
||||||
return
|
|
||||||
var/area/A = get_area(src)
|
|
||||||
ASSERT(isarea(A))
|
|
||||||
A.partyreset()
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/partyalarm/proc/alarm()
|
|
||||||
if(!(working))
|
|
||||||
return
|
|
||||||
var/area/A = get_area(src)
|
|
||||||
ASSERT(isarea(A))
|
|
||||||
A.partyalert()
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/partyalarm/Topic(href, href_list)
|
|
||||||
..()
|
|
||||||
if(usr.stat || stat & (BROKEN|NOPOWER))
|
|
||||||
return
|
|
||||||
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
|
||||||
usr.machine = src
|
|
||||||
if(href_list["reset"])
|
|
||||||
reset()
|
|
||||||
else if(href_list["alarm"])
|
|
||||||
alarm()
|
|
||||||
else if(href_list["time"])
|
|
||||||
timing = text2num(href_list["time"])
|
|
||||||
else if(href_list["tp"])
|
|
||||||
var/tp = text2num(href_list["tp"])
|
|
||||||
time += tp
|
|
||||||
time = min(max(round(time), 0), 120)
|
|
||||||
updateUsrDialog()
|
|
||||||
|
|
||||||
add_fingerprint(usr)
|
|
||||||
else
|
|
||||||
usr << browse(null, "window=partyalarm")
|
|
||||||
return
|
|
||||||
return
|
|
||||||
324
code/game/machinery/fire_alarm.dm
Normal file
324
code/game/machinery/fire_alarm.dm
Normal file
@@ -0,0 +1,324 @@
|
|||||||
|
/*
|
||||||
|
FIRE ALARM
|
||||||
|
*/
|
||||||
|
/obj/machinery/firealarm
|
||||||
|
name = "fire alarm"
|
||||||
|
desc = "<i>\"Pull this in case of emergency\"</i>. Thus, keep pulling it forever."
|
||||||
|
icon = 'icons/obj/monitors.dmi'
|
||||||
|
icon_state = "fire0"
|
||||||
|
plane = TURF_PLANE
|
||||||
|
layer = ABOVE_TURF_LAYER
|
||||||
|
var/detecting = 1.0
|
||||||
|
var/working = 1.0
|
||||||
|
var/time = 10.0
|
||||||
|
var/timing = 0.0
|
||||||
|
var/lockdownbyai = 0
|
||||||
|
anchored = 1.0
|
||||||
|
use_power = 1
|
||||||
|
idle_power_usage = 2
|
||||||
|
active_power_usage = 6
|
||||||
|
power_channel = ENVIRON
|
||||||
|
var/last_process = 0
|
||||||
|
panel_open = 0
|
||||||
|
var/seclevel
|
||||||
|
circuit = /obj/item/weapon/circuitboard/firealarm
|
||||||
|
var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/alarms_hidden
|
||||||
|
alarms_hidden = TRUE
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/Initialize()
|
||||||
|
. = ..()
|
||||||
|
if(z in using_map.contact_levels)
|
||||||
|
set_security_level(security_level ? get_security_level() : "green")
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/update_icon()
|
||||||
|
cut_overlays()
|
||||||
|
|
||||||
|
if(panel_open)
|
||||||
|
set_light(0)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(stat & BROKEN)
|
||||||
|
icon_state = "firex"
|
||||||
|
set_light(0)
|
||||||
|
else if(stat & NOPOWER)
|
||||||
|
icon_state = "firep"
|
||||||
|
set_light(0)
|
||||||
|
else
|
||||||
|
if(!detecting)
|
||||||
|
icon_state = "fire1"
|
||||||
|
set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000")
|
||||||
|
else
|
||||||
|
icon_state = "fire0"
|
||||||
|
switch(seclevel)
|
||||||
|
if("green") set_light(l_range = 2, l_power = 0.25, l_color = "#00ff00")
|
||||||
|
if("yellow") set_light(l_range = 2, l_power = 0.25, l_color = "#ffff00")
|
||||||
|
if("violet") set_light(l_range = 2, l_power = 0.25, l_color = "#9933ff")
|
||||||
|
if("orange") set_light(l_range = 2, l_power = 0.25, l_color = "#ff9900")
|
||||||
|
if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9")
|
||||||
|
if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000")
|
||||||
|
if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633")
|
||||||
|
add_overlay("overlay_[seclevel]")
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume)
|
||||||
|
if(detecting)
|
||||||
|
if(temperature > T0C + 200)
|
||||||
|
alarm() // added check of detector status here
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/attack_ai(mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/bullet_act()
|
||||||
|
return alarm()
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/emp_act(severity)
|
||||||
|
if(prob(50 / severity))
|
||||||
|
alarm(rand(30 / severity, 60 / severity))
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob)
|
||||||
|
add_fingerprint(user)
|
||||||
|
|
||||||
|
if(alarm_deconstruction_screwdriver(user, W))
|
||||||
|
return
|
||||||
|
if(alarm_deconstruction_wirecutters(user, W))
|
||||||
|
return
|
||||||
|
|
||||||
|
if(panel_open)
|
||||||
|
if(istype(W, /obj/item/device/multitool))
|
||||||
|
detecting = !(detecting)
|
||||||
|
if(detecting)
|
||||||
|
user.visible_message("<span class='notice'>\The [user] has reconnected [src]'s detecting unit!</span>", "<span class='notice'>You have reconnected [src]'s detecting unit.</span>")
|
||||||
|
else
|
||||||
|
user.visible_message("<span class='notice'>\The [user] has disconnected [src]'s detecting unit!</span>", "<span class='notice'>You have disconnected [src]'s detecting unit.</span>")
|
||||||
|
return
|
||||||
|
|
||||||
|
alarm()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/process()//Note: this processing was mostly phased out due to other code, and only runs when needed
|
||||||
|
if(stat & (NOPOWER|BROKEN))
|
||||||
|
return
|
||||||
|
|
||||||
|
if(timing)
|
||||||
|
if(time > 0)
|
||||||
|
time = time - ((world.timeofday - last_process) / 10)
|
||||||
|
else
|
||||||
|
alarm()
|
||||||
|
time = 0
|
||||||
|
timing = 0
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
updateDialog()
|
||||||
|
last_process = world.timeofday
|
||||||
|
|
||||||
|
if(locate(/obj/fire) in src.loc)
|
||||||
|
alarm()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/power_change()
|
||||||
|
..()
|
||||||
|
spawn(rand(0,15))
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/attack_hand(mob/user as mob)
|
||||||
|
if(user.stat || stat & (NOPOWER | BROKEN))
|
||||||
|
return
|
||||||
|
|
||||||
|
user.set_machine(src)
|
||||||
|
var/area/A = src.loc
|
||||||
|
var/d1
|
||||||
|
var/d2
|
||||||
|
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
|
||||||
|
A = A.loc
|
||||||
|
|
||||||
|
if(A.fire)
|
||||||
|
d1 = text("<A href='?src=\ref[];reset=1'>Reset - Lockdown</A>", src)
|
||||||
|
else
|
||||||
|
d1 = text("<A href='?src=\ref[];alarm=1'>Alarm - Lockdown</A>", src)
|
||||||
|
if(timing)
|
||||||
|
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
||||||
|
else
|
||||||
|
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
||||||
|
var/second = round(time) % 60
|
||||||
|
var/minute = (round(time) - second) / 60
|
||||||
|
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>Fire alarm</B> [d1]\n<HR>The current alert level is: <b>[get_security_level()]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? "[minute]:" : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
|
||||||
|
user << browse(dat, "window=firealarm")
|
||||||
|
onclose(user, "firealarm")
|
||||||
|
else
|
||||||
|
A = A.loc
|
||||||
|
if(A.fire)
|
||||||
|
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("Reset - Lockdown"))
|
||||||
|
else
|
||||||
|
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("Alarm - Lockdown"))
|
||||||
|
if(timing)
|
||||||
|
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
||||||
|
else
|
||||||
|
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
||||||
|
var/second = round(time) % 60
|
||||||
|
var/minute = (round(time) - second) / 60
|
||||||
|
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>[stars("Fire alarm")]</B> [d1]\n<HR><b>The current alert level is: [stars(get_security_level())]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? text("[]:", minute) : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
|
||||||
|
user << browse(dat, "window=firealarm")
|
||||||
|
onclose(user, "firealarm")
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/Topic(href, href_list)
|
||||||
|
..()
|
||||||
|
if(usr.stat || stat & (BROKEN | NOPOWER))
|
||||||
|
return
|
||||||
|
|
||||||
|
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||||
|
usr.set_machine(src)
|
||||||
|
if(href_list["reset"])
|
||||||
|
reset()
|
||||||
|
else if(href_list["alarm"])
|
||||||
|
alarm()
|
||||||
|
else if(href_list["time"])
|
||||||
|
timing = text2num(href_list["time"])
|
||||||
|
last_process = world.timeofday
|
||||||
|
START_PROCESSING(SSobj, src)
|
||||||
|
else if(href_list["tp"])
|
||||||
|
var/tp = text2num(href_list["tp"])
|
||||||
|
time += tp
|
||||||
|
time = min(max(round(time), 0), 120)
|
||||||
|
|
||||||
|
updateUsrDialog()
|
||||||
|
|
||||||
|
add_fingerprint(usr)
|
||||||
|
else
|
||||||
|
usr << browse(null, "window=firealarm")
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/proc/reset()
|
||||||
|
if(!(working))
|
||||||
|
return
|
||||||
|
var/area/area = get_area(src)
|
||||||
|
for(var/obj/machinery/firealarm/FA in area)
|
||||||
|
fire_alarm.clearAlarm(src.loc, FA)
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/proc/alarm(var/duration = 0)
|
||||||
|
if(!(working))
|
||||||
|
return
|
||||||
|
var/area/area = get_area(src)
|
||||||
|
for(var/obj/machinery/firealarm/FA in area)
|
||||||
|
fire_alarm.triggerAlarm(loc, FA, duration, hidden = alarms_hidden)
|
||||||
|
update_icon()
|
||||||
|
playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/firealarm/proc/set_security_level(var/newlevel)
|
||||||
|
if(seclevel != newlevel)
|
||||||
|
seclevel = newlevel
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/*
|
||||||
|
FIRE ALARM CIRCUIT
|
||||||
|
Just a object used in constructing fire alarms
|
||||||
|
|
||||||
|
/obj/item/weapon/firealarm_electronics
|
||||||
|
name = "fire alarm electronics"
|
||||||
|
icon = 'icons/obj/doors/door_assembly.dmi'
|
||||||
|
icon_state = "door_electronics"
|
||||||
|
desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\""
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||||
|
*/
|
||||||
|
/obj/machinery/partyalarm
|
||||||
|
name = "\improper PARTY BUTTON"
|
||||||
|
desc = "Cuban Pete is in the house!"
|
||||||
|
icon = 'icons/obj/monitors.dmi'
|
||||||
|
icon_state = "fire0"
|
||||||
|
var/detecting = 1.0
|
||||||
|
var/working = 1.0
|
||||||
|
var/time = 10.0
|
||||||
|
var/timing = 0.0
|
||||||
|
var/lockdownbyai = 0
|
||||||
|
anchored = 1.0
|
||||||
|
use_power = 1
|
||||||
|
idle_power_usage = 2
|
||||||
|
active_power_usage = 6
|
||||||
|
|
||||||
|
/obj/machinery/partyalarm/attack_hand(mob/user as mob)
|
||||||
|
if(user.stat || stat & (NOPOWER|BROKEN))
|
||||||
|
return
|
||||||
|
|
||||||
|
user.machine = src
|
||||||
|
var/area/A = get_area(src)
|
||||||
|
ASSERT(isarea(A))
|
||||||
|
var/d1
|
||||||
|
var/d2
|
||||||
|
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
|
||||||
|
|
||||||
|
if(A.party)
|
||||||
|
d1 = text("<A href='?src=\ref[];reset=1'>No Party :(</A>", src)
|
||||||
|
else
|
||||||
|
d1 = text("<A href='?src=\ref[];alarm=1'>PARTY!!!</A>", src)
|
||||||
|
if(timing)
|
||||||
|
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
||||||
|
else
|
||||||
|
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
||||||
|
var/second = time % 60
|
||||||
|
var/minute = (time - second) / 60
|
||||||
|
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>Party Button</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
||||||
|
user << browse(dat, "window=partyalarm")
|
||||||
|
onclose(user, "partyalarm")
|
||||||
|
else
|
||||||
|
if(A.fire)
|
||||||
|
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("No Party :("))
|
||||||
|
else
|
||||||
|
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("PARTY!!!"))
|
||||||
|
if(timing)
|
||||||
|
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
||||||
|
else
|
||||||
|
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
||||||
|
var/second = time % 60
|
||||||
|
var/minute = (time - second) / 60
|
||||||
|
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>[]</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", stars("Party Button"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
|
||||||
|
user << browse(dat, "window=partyalarm")
|
||||||
|
onclose(user, "partyalarm")
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/partyalarm/proc/reset()
|
||||||
|
if(!(working))
|
||||||
|
return
|
||||||
|
var/area/A = get_area(src)
|
||||||
|
ASSERT(isarea(A))
|
||||||
|
A.partyreset()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/partyalarm/proc/alarm()
|
||||||
|
if(!(working))
|
||||||
|
return
|
||||||
|
var/area/A = get_area(src)
|
||||||
|
ASSERT(isarea(A))
|
||||||
|
A.partyalert()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/partyalarm/Topic(href, href_list)
|
||||||
|
..()
|
||||||
|
if(usr.stat || stat & (BROKEN|NOPOWER))
|
||||||
|
return
|
||||||
|
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
||||||
|
usr.machine = src
|
||||||
|
if(href_list["reset"])
|
||||||
|
reset()
|
||||||
|
else if(href_list["alarm"])
|
||||||
|
alarm()
|
||||||
|
else if(href_list["time"])
|
||||||
|
timing = text2num(href_list["time"])
|
||||||
|
else if(href_list["tp"])
|
||||||
|
var/tp = text2num(href_list["tp"])
|
||||||
|
time += tp
|
||||||
|
time = min(max(round(time), 0), 120)
|
||||||
|
updateUsrDialog()
|
||||||
|
|
||||||
|
add_fingerprint(usr)
|
||||||
|
else
|
||||||
|
usr << browse(null, "window=partyalarm")
|
||||||
|
return
|
||||||
|
return
|
||||||
@@ -735,8 +735,8 @@
|
|||||||
#include "code\game\machinery\adv_med.dm"
|
#include "code\game\machinery\adv_med.dm"
|
||||||
#include "code\game\machinery\adv_med_vr.dm"
|
#include "code\game\machinery\adv_med_vr.dm"
|
||||||
#include "code\game\machinery\ai_slipper.dm"
|
#include "code\game\machinery\ai_slipper.dm"
|
||||||
|
#include "code\game\machinery\air_alarm.dm"
|
||||||
#include "code\game\machinery\airconditioner_vr.dm"
|
#include "code\game\machinery\airconditioner_vr.dm"
|
||||||
#include "code\game\machinery\alarm.dm"
|
|
||||||
#include "code\game\machinery\atmo_control.dm"
|
#include "code\game\machinery\atmo_control.dm"
|
||||||
#include "code\game\machinery\autolathe.dm"
|
#include "code\game\machinery\autolathe.dm"
|
||||||
#include "code\game\machinery\Beacon.dm"
|
#include "code\game\machinery\Beacon.dm"
|
||||||
@@ -755,6 +755,7 @@
|
|||||||
#include "code\game\machinery\doorbell_vr.dm"
|
#include "code\game\machinery\doorbell_vr.dm"
|
||||||
#include "code\game\machinery\doppler_array.dm"
|
#include "code\game\machinery\doppler_array.dm"
|
||||||
#include "code\game\machinery\exonet_node.dm"
|
#include "code\game\machinery\exonet_node.dm"
|
||||||
|
#include "code\game\machinery\fire_alarm.dm"
|
||||||
#include "code\game\machinery\flasher.dm"
|
#include "code\game\machinery\flasher.dm"
|
||||||
#include "code\game\machinery\floodlight.dm"
|
#include "code\game\machinery\floodlight.dm"
|
||||||
#include "code\game\machinery\floor_light.dm"
|
#include "code\game\machinery\floor_light.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user