From 7d5450efd4b20cfac9785c5f7e7902930c5eaee9 Mon Sep 17 00:00:00 2001 From: Lohikar Date: Thu, 29 Dec 2016 19:19:00 -0600 Subject: [PATCH] Fire alarm changes + Lamarr fix (#1342) Fixes some incorrect messages with Lamarr. Fire alarms now use NanoUI and blink red when triggered. Fixes #1339 Fixes #1218 --- baystation12.dme | 1 + code/game/machinery/alarm.dm | 387 +------------------- code/game/machinery/firealarm.dm | 282 ++++++++++++++ code/game/machinery/vending.dm | 2 +- code/game/objects/structures/lamarr_cage.dm | 6 +- html/changelogs/Lohikar-PR1342.yml | 38 ++ nano/templates/firealarm.tmpl | 24 ++ nano/templates/partyalarm.tmpl | 24 ++ 8 files changed, 374 insertions(+), 390 deletions(-) create mode 100644 code/game/machinery/firealarm.dm create mode 100644 html/changelogs/Lohikar-PR1342.yml create mode 100644 nano/templates/firealarm.tmpl create mode 100644 nano/templates/partyalarm.tmpl diff --git a/baystation12.dme b/baystation12.dme index 517d479c851..87530435e11 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -420,6 +420,7 @@ #include "code\game\machinery\deployable.dm" #include "code\game\machinery\door_control.dm" #include "code\game\machinery\doppler_array.dm" +#include "code\game\machinery\firealarm.dm" #include "code\game\machinery\flasher.dm" #include "code\game\machinery\floodlight.dm" #include "code\game\machinery\floor_light.dm" diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index aec01d56e45..435b5972946 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -883,389 +883,4 @@ Just a object used in constructing air alarms w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) -/* -FIRE ALARM -*/ -/obj/machinery/firealarm - name = "fire alarm" - desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." - 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 - power_channel = ENVIRON - var/last_process = 0 - var/wiresexposed = 0 - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/seclevel - -/obj/machinery/firealarm/update_icon() - overlays.Cut() - - if(wiresexposed) - switch(buildstage) - if(2) - icon_state="fire_b2" - if(1) - icon_state="fire_b1" - if(0) - icon_state="fire_b0" - 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(!src.detecting) - icon_state = "fire1" - set_light(l_range = 4, l_power = 2, l_color = COLOR_RED) - else - icon_state = "fire0" - switch(seclevel) - if("green") set_light(l_range = 2, l_power = 0.5, l_color = COLOR_LIME) - if("blue") set_light(l_range = 2, l_power = 0.5, l_color = "#1024A9") - if("red") set_light(l_range = 4, l_power = 2, l_color = COLOR_RED) - if("delta") set_light(l_range = 4, l_power = 2, l_color = "#FF6633") - - src.overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]") - -/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) - if(src.detecting) - if(temperature > T0C+200) - src.alarm() // added check of detector status here - return - -/obj/machinery/firealarm/attack_ai(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/firealarm/bullet_act() - return src.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) - src.add_fingerprint(user) - - if (istype(W, /obj/item/weapon/screwdriver) && buildstage == 2) - wiresexposed = !wiresexposed - update_icon() - return - - if(wiresexposed) - switch(buildstage) - if(2) - if (istype(W, /obj/item/device/multitool)) - src.detecting = !( src.detecting ) - if (src.detecting) - user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") - else - user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") - else if (istype(W, /obj/item/weapon/wirecutters)) - user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - new/obj/item/stack/cable_coil(get_turf(src), 5) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - buildstage = 1 - update_icon() - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You wire \the [src]." - buildstage = 2 - return - else - user << "You need 5 pieces of cable to wire \the [src]." - return - else if(istype(W, /obj/item/weapon/crowbar)) - user << "You pry out the circuit!" - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - spawn(20) - var/obj/item/weapon/firealarm_electronics/circuit = new /obj/item/weapon/firealarm_electronics() - circuit.loc = user.loc - buildstage = 0 - update_icon() - if(0) - if(istype(W, /obj/item/weapon/firealarm_electronics)) - user << "You insert the circuit!" - qdel(W) - buildstage = 1 - update_icon() - - else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" - new /obj/item/frame/fire_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - return - - src.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(src.timing) - if(src.time > 0) - src.time = src.time - ((world.timeofday - last_process)/10) - else - src.alarm() - src.time = 0 - src.timing = 0 - processing_objects.Remove(src) - src.updateDialog() - last_process = world.timeofday - - if(locate(/obj/fire) in 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 - - if (buildstage != 2) - 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("Reset - Lockdown", src) - else - d1 = text("Alarm - Lockdown", src) - if (src.timing) - d2 = text("Stop Time Lock", src) - else - d2 = text("Initiate Time Lock", src) - var/second = round(src.time) % 60 - var/minute = (round(src.time) - second) / 60 - var/dat = "Fire alarm [d1]\n
The current alert level is: [get_security_level()]

\nTimer System: [d2]
\nTime Left: [(minute ? "[minute]:" : null)][second] - - + +\n
" - user << browse(dat, "window=firealarm") - onclose(user, "firealarm") - else - A = A.loc - if (A.fire) - d1 = text("[]", src, stars("Reset - Lockdown")) - else - d1 = text("[]", src, stars("Alarm - Lockdown")) - if (src.timing) - d2 = text("[]", src, stars("Stop Time Lock")) - else - d2 = text("[]", src, stars("Initiate Time Lock")) - var/second = round(src.time) % 60 - var/minute = (round(src.time) - second) / 60 - var/dat = "[stars("Fire alarm")] [d1]\n
The current alert level is: [stars(get_security_level())]

\nTimer System: [d2]
\nTime Left: [(minute ? text("[]:", minute) : null)][second] - - + +\n
" - user << browse(dat, "window=firealarm") - onclose(user, "firealarm") - return - -/obj/machinery/firealarm/Topic(href, href_list) - ..() - if (usr.stat || stat & (BROKEN|NOPOWER)) - return - - if (buildstage != 2) - 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"]) - src.reset() - else if (href_list["alarm"]) - src.alarm() - else if (href_list["time"]) - src.timing = text2num(href_list["time"]) - last_process = world.timeofday - processing_objects.Add(src) - else if (href_list["tp"]) - var/tp = text2num(href_list["tp"]) - src.time += tp - src.time = min(max(round(src.time), 0), 120) - - src.updateUsrDialog() - - src.add_fingerprint(usr) - else - usr << browse(null, "window=firealarm") - return - return - -/obj/machinery/firealarm/proc/reset() - if (!( src.working )) - return - var/area/area = get_area(src) - for(var/obj/machinery/firealarm/FA in area) - fire_alarm.clearAlarm(loc, FA) - update_icon() - return - -/obj/machinery/firealarm/proc/alarm(var/duration = 0) - if (!( src.working)) - return - var/area/area = get_area(src) - for(var/obj/machinery/firealarm/FA in area) - fire_alarm.triggerAlarm(loc, FA, duration) - update_icon() - //playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0) - return - - - -/obj/machinery/firealarm/New(loc, dir, building) - ..() - - if(loc) - src.loc = loc - - if(dir) - src.set_dir(dir) - - if(building) - buildstage = 0 - wiresexposed = 1 - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - -/obj/machinery/firealarm/proc/set_security_level(var/newlevel) - if(seclevel != newlevel) - seclevel = newlevel - update_icon() - -/obj/machinery/firealarm/initialize() - if(z in config.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 = 2.0 - 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("No Party :(", src) - else - d1 = text("PARTY!!!", src) - if (timing) - d2 = text("Stop Time Lock", src) - else - d2 = text("Initiate Time Lock", src) - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("Party Button []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", 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("[]", src, stars("No Party :(")) - else - d1 = text("[]", src, stars("PARTY!!!")) - if (timing) - d2 = text("[]", src, stars("Stop Time Lock")) - else - d2 = text("[]", src, stars("Initiate Time Lock")) - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("[] []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", 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 +// Fire Alarms moved to firealarm.dm \ No newline at end of file diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm new file mode 100644 index 00000000000..7131cbac3cd --- /dev/null +++ b/code/game/machinery/firealarm.dm @@ -0,0 +1,282 @@ +/obj/machinery/firealarm + name = "fire alarm" + desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." + icon = 'icons/obj/monitors.dmi' + icon_state = "fire0" + var/detecting = 1 + var/working = 1 + var/time = 10 + var/timing = 0 + var/lockdownbyai = 0 + anchored = 1 + use_power = 1 + idle_power_usage = 2 + active_power_usage = 6 + power_channel = ENVIRON + var/last_process = 0 + var/wiresexposed = 0 + var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone + var/seclevel + +/obj/machinery/firealarm/update_icon() + overlays.Cut() + + if(wiresexposed) + switch(buildstage) + if(2) + icon_state="fire_b2" + if(1) + icon_state="fire_b1" + if(0) + icon_state="fire_b0" + set_light(0) + return + + if(stat & BROKEN) + icon_state = "firex" + set_light(0) + else if(stat & NOPOWER) + icon_state = "firep" + set_light(0) + else + var/area/A = get_area(src) + if(A.fire) + icon_state = "fire1" + set_light(l_range = 4, l_power = 2, l_color = COLOR_RED) + else + icon_state = "fire0" + switch(seclevel) + if("green") set_light(l_range = 2, l_power = 0.5, l_color = COLOR_LIME) + if("blue") set_light(l_range = 2, l_power = 0.5, l_color = "#1024A9") + if("red") set_light(l_range = 4, l_power = 2, l_color = COLOR_RED) + if("delta") set_light(l_range = 4, l_power = 2, l_color = "#FF6633") + + src.overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]") + +/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) + if(src.detecting) + if(temperature > T0C+200) + src.alarm() // added check of detector status here + return + +/obj/machinery/firealarm/attack_ai(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/firealarm/bullet_act() + return src.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) + src.add_fingerprint(user) + + if (istype(W, /obj/item/weapon/screwdriver) && buildstage == 2) + wiresexposed = !wiresexposed + update_icon() + return + + if(wiresexposed) + switch(buildstage) + if(2) + if (istype(W, /obj/item/device/multitool)) + src.detecting = !( src.detecting ) + if (src.detecting) + user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") + else + user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") + else if (istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + new/obj/item/stack/cable_coil(get_turf(src), 5) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + buildstage = 1 + update_icon() + if(1) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.use(5)) + user << "You wire \the [src]." + buildstage = 2 + return + else + user << "You need 5 pieces of cable to wire \the [src]." + return + else if(istype(W, /obj/item/weapon/crowbar)) + user << "You pry out the circuit!" + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + spawn(20) + var/obj/item/weapon/firealarm_electronics/circuit = new /obj/item/weapon/firealarm_electronics() + circuit.loc = user.loc + buildstage = 0 + update_icon() + if(0) + if(istype(W, /obj/item/weapon/firealarm_electronics)) + user << "You insert the circuit!" + qdel(W) + buildstage = 1 + update_icon() + + else if(istype(W, /obj/item/weapon/wrench)) + user << "You remove the fire alarm assembly from the wall!" + new /obj/item/frame/fire_alarm(get_turf(user)) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + qdel(src) + return + + src.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(src.timing) + if(src.time > 0) + src.time = src.time - ((world.timeofday - last_process)/10) + else + src.alarm() + src.time = 0 + src.timing = 0 + processing_objects.Remove(src) + src.updateDialog() + last_process = world.timeofday + + if(locate(/obj/fire) in loc) + alarm() + + return + +/obj/machinery/firealarm/power_change() + ..() + spawn(rand(0,15)) + update_icon() + +/obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + var/data[0] + data["alertLevel"] = get_security_level() + data["time"] = src.time + var/area/A = get_area(src) + data["active"] = A.fire + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "firealarm.tmpl", "Fire Alarm", 325, 325, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/firealarm/attack_hand(mob/user as mob) + if (buildstage != 2 || stat & (NOPOWER|BROKEN)) + return + + ui_interact(user) + return + +/obj/machinery/firealarm/Topic(href, href_list) + ..() + + if (href_list["state"] == "active") + src.alarm() + else if (href_list["state"] == "inactive") + src.reset() + if (href_list["tmr"] == "set") + time = max(0, input(usr, "Enter time delay", "Fire Alarm Delayed Activation", time) as num) + else if (href_list["tmr"] == "start") + src.timing = 1 + else if (href_list["tmr"] == "stop") + src.timing = 0 + +/obj/machinery/firealarm/proc/reset() + if (!( src.working )) + return + var/area/area = get_area(src) + for(var/obj/machinery/firealarm/FA in area) + fire_alarm.clearAlarm(loc, FA) + update_icon() + return + +/obj/machinery/firealarm/proc/alarm(var/duration = 0) + if (!( src.working)) + return + var/area/area = get_area(src) + for(var/obj/machinery/firealarm/FA in area) + fire_alarm.triggerAlarm(loc, FA, duration) + update_icon() + //playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0) + return + + + +/obj/machinery/firealarm/New(loc, dir, building) + ..() + + if(loc) + src.loc = loc + + if(dir) + src.set_dir(dir) + + if(building) + buildstage = 0 + wiresexposed = 1 + icon_state = "fire_b0" + pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) + pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 + +/obj/machinery/firealarm/proc/set_security_level(var/newlevel) + if(seclevel != newlevel) + seclevel = newlevel + update_icon() + +/obj/machinery/firealarm/initialize() + if(z in config.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 = 2.0 + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + + +/obj/machinery/firealarm/partyalarm + name = "\improper PARTY BUTTON" + desc = "Cuban Pete is in the house!" + +/obj/machinery/firealarm/partyalarm/alarm(var/duration = 0) + if (!( working )) + return + var/area/A = get_area(src) + ASSERT(isarea(A)) + A.partyalert() + return + +/obj/machinery/firealarm/partyalarm/reset() + if (!( working )) + return + var/area/A = get_area(src) + ASSERT(isarea(A)) + A.partyreset() + return + +/obj/machinery/firealarm/partyalarm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + var/data[0] + data["alertLevel"] = get_security_level() + data["time"] = src.time + var/area/A = get_area(src) + data["active"] = A.party + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "partyalarm.tmpl", "PARTY ALARM", 325, 325, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 804b3c703b9..c75dab8920e 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -944,7 +944,7 @@ icon_state = "engivend" icon_deny = "engivend-deny" req_access = list(access_engine_equip) - products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/cell/high = 10) + products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/firealarm_electronics = 10,/obj/item/weapon/cell/high = 10) contraband = list(/obj/item/weapon/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index ade6807dcb3..69d7480583b 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -65,8 +65,8 @@ usr << "You kick the lab cage." for(var/mob/O in oviewers()) if ((O.client && !( O.blinded ))) - O << "[] kicks the lab cage." - + O << "[user] kicks the lab cage." + src.health -= 2 healthcheck() return @@ -182,7 +182,7 @@ var/const/MAX_ACTIVE_TIME = 400 if(stat != CONSCIOUS) return if(!sterile) L.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage - L.visible_message("\[src] leaps at [L]'s face!") + L.visible_message("[src] leaps at [L]'s face!") if(ishuman(L)) diff --git a/html/changelogs/Lohikar-PR1342.yml b/html/changelogs/Lohikar-PR1342.yml new file mode 100644 index 00000000000..fa97ac8d897 --- /dev/null +++ b/html/changelogs/Lohikar-PR1342.yml @@ -0,0 +1,38 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Lohikar + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fire alarms are constructable again." + - rscadd: "Fire alarms now use NanoUI." + - tweak: "Fire alarms now indicate on the alarm sprite when they're activated." diff --git a/nano/templates/firealarm.tmpl b/nano/templates/firealarm.tmpl new file mode 100644 index 00000000000..d8f5be8c98d --- /dev/null +++ b/nano/templates/firealarm.tmpl @@ -0,0 +1,24 @@ +The current alert level is: +{{if data.alertLevel == 'green'}} + Green +{{/if}} +{{if data.alertLevel == 'blue'}} + Blue +{{/if}} +{{if data.alertLevel == 'red'}} + Red +{{/if}} +{{if data.alertLevel == 'delta'}} + DELTA +{{/if}} +
+

State

+{{:helper.link('Normal', '', {'state': 'inactive'}, data.active ? null : 'selected')}} +{{:helper.link('Lockdown', '', {'state': 'active'}, data.active ? 'selected' : null)}} +

Timed Lockdown

+{{:helper.link('Set', '', {'tmr' : 'set'})}} +{{if data.timing}} +{{:helper.link('Stop', '', {'tmr' : 'stop'})}} +{{/if}} +{{if !(data.timing)}}{{:helper.link('Start', '', {'tmr' : 'start'})}}{{/if}}
+{{if data.time}}Time Left: {{:data.time}} seconds.{{/if}} \ No newline at end of file diff --git a/nano/templates/partyalarm.tmpl b/nano/templates/partyalarm.tmpl new file mode 100644 index 00000000000..e3adb80ffdd --- /dev/null +++ b/nano/templates/partyalarm.tmpl @@ -0,0 +1,24 @@ +The current alert level is: +{{if data.alertLevel == 'green'}} + Green +{{/if}} +{{if data.alertLevel == 'blue'}} + Blue +{{/if}} +{{if data.alertLevel == 'red'}} + Red +{{/if}} +{{if data.alertLevel == 'delta'}} + DELTA +{{/if}} +
+

State

+{{:helper.link('No Party :(', '', {'state': 'inactive'}, data.active ? null : 'selected')}} +{{:helper.link('PARTY!!!', '', {'state': 'active'}, data.active ? 'selected' : null)}} +

Timed Lockdown

+{{:helper.link('Set', '', {'tmr' : 'set'})}} +{{if data.timing}} +{{:helper.link('Stop', '', {'tmr' : 'stop'})}} +{{/if}} +{{if !(data.timing)}}{{:helper.link('Start', '', {'tmr' : 'start'})}}{{/if}}
+{{if data.time}}Time Left: {{:data.time}} seconds.{{/if}} \ No newline at end of file