Adds NO_ALERT flag to areas, refactors area alerts slightly (#752)

Co-authored-by: msgerbs <msgerbs@users.noreply.github.com>
Co-authored-by: Azarak <azarak10@gmail.com>
This commit is contained in:
SkyratBot
2020-09-12 02:08:44 +02:00
committed by GitHub
co-authored by msgerbs Azarak
parent 9e9fe0b362
commit c7d2cffbc3
14 changed files with 66 additions and 75 deletions
+2
View File
@@ -89,6 +89,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define XENOBIOLOGY_COMPATIBLE (1<<10)
/// If Abductors are unable to teleport in with their observation console
#define ABDUCTOR_PROOF (1<<11)
/// If an area should be hidden from power consoles, power/atmosphere alerts, etc.
#define NO_ALERTS (1<<12)
/*
These defines are used specifically with the atom/pass_flags bitmask
+1
View File
@@ -59,6 +59,7 @@ DEFINE_BITFIELD(area_flags, list(
"UNIQUE_AREA" = UNIQUE_AREA,
"VALID_TERRITORY" = VALID_TERRITORY,
"XENOBIOLOGY_COMPATIBLE" = XENOBIOLOGY_COMPATIBLE,
"NO_ALERTS" = NO_ALERTS,
))
DEFINE_BITFIELD(car_traits, list(
+1 -1
View File
@@ -28,7 +28,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
power_light = FALSE
power_equip = FALSE
power_environ = FALSE
area_flags = UNIQUE_AREA
area_flags = UNIQUE_AREA | NO_ALERTS
outdoors = TRUE
ambientsounds = SPACE
flags_1 = CAN_BE_DIRTY_1
+37 -39
View File
@@ -18,7 +18,7 @@
var/fire = null
///Whether there is an atmos alarm in this area
var/atmosalm = FALSE
var/poweralm = TRUE
var/poweralm = FALSE
var/lightswitch = TRUE
/// All beauty in this area combined, only includes indoor area.
@@ -201,32 +201,34 @@ GLOBAL_LIST_EMPTY(teleportlocs)
* Sends to all ai players, alert consoles, drones and alarm monitor programs in the world
*/
/area/proc/poweralert(state, obj/source)
if (area_flags & NO_ALERTS)
return
if (state != poweralm)
poweralm = state
if(istype(source)) //Only report power alarms on the z-level where the source is located.
for (var/item in GLOB.silicon_mobs)
var/mob/living/silicon/aiPlayer = item
if (state == 1)
if (!state)
aiPlayer.cancelAlarm("Power", src, source)
else
aiPlayer.triggerAlarm("Power", src, cameras, source)
for (var/item in GLOB.alert_consoles)
var/obj/machinery/computer/station_alert/a = item
if(state == 1)
if(!state)
a.cancelAlarm("Power", src, source)
else
a.triggerAlarm("Power", src, cameras, source)
for (var/item in GLOB.drones_list)
var/mob/living/simple_animal/drone/D = item
if(state == 1)
if(!state)
D.cancelAlarm("Power", src, source)
else
D.triggerAlarm("Power", src, cameras, source)
for(var/item in GLOB.alarmdisplay)
var/datum/computer_file/program/alarm_monitor/p = item
if(state == 1)
if(!state)
p.cancelAlarm("Power", src, source)
else
p.triggerAlarm("Power", src, cameras, source)
@@ -237,8 +239,10 @@ GLOBAL_LIST_EMPTY(teleportlocs)
* Sends to all ai players, alert consoles, drones and alarm monitor programs in the world
*/
/area/proc/atmosalert(isdangerous, obj/source)
if (area_flags & NO_ALERTS)
return
if(isdangerous != atmosalm)
if(isdangerous==TRUE)
if(isdangerous)
for (var/item in GLOB.silicon_mobs)
var/mob/living/silicon/aiPlayer = item
@@ -300,29 +304,25 @@ GLOBAL_LIST_EMPTY(teleportlocs)
* Also starts the area processing on SSobj
*/
/area/proc/firealert(obj/source)
if(always_unpowered == 1) //no fire alarms in space/asteroid
return
if (!fire)
set_fire_alarm_effect()
ModifyFiredoors(FALSE)
for(var/item in firealarms)
var/obj/machinery/firealarm/F = item
F.update_icon()
for (var/item in GLOB.alert_consoles)
var/obj/machinery/computer/station_alert/a = item
a.triggerAlarm("Fire", src, cameras, source)
for (var/item in GLOB.silicon_mobs)
var/mob/living/silicon/aiPlayer = item
aiPlayer.triggerAlarm("Fire", src, cameras, source)
for (var/item in GLOB.drones_list)
var/mob/living/simple_animal/drone/D = item
D.triggerAlarm("Fire", src, cameras, source)
for(var/item in GLOB.alarmdisplay)
var/datum/computer_file/program/alarm_monitor/p = item
p.triggerAlarm("Fire", src, cameras, source)
if (!(area_flags & NO_ALERTS)) //Check here instead at the start of the proc so that fire alarms can still work locally even in areas that don't send alerts
for (var/item in GLOB.alert_consoles)
var/obj/machinery/computer/station_alert/a = item
a.triggerAlarm("Fire", src, cameras, source)
for (var/item in GLOB.silicon_mobs)
var/mob/living/silicon/aiPlayer = item
aiPlayer.triggerAlarm("Fire", src, cameras, source)
for (var/item in GLOB.drones_list)
var/mob/living/simple_animal/drone/D = item
D.triggerAlarm("Fire", src, cameras, source)
for(var/item in GLOB.alarmdisplay)
var/datum/computer_file/program/alarm_monitor/p = item
p.triggerAlarm("Fire", src, cameras, source)
START_PROCESSING(SSobj, src)
/**
@@ -340,20 +340,19 @@ GLOBAL_LIST_EMPTY(teleportlocs)
for(var/item in firealarms)
var/obj/machinery/firealarm/F = item
F.update_icon()
for (var/item in GLOB.silicon_mobs)
var/mob/living/silicon/aiPlayer = item
aiPlayer.cancelAlarm("Fire", src, source)
for (var/item in GLOB.alert_consoles)
var/obj/machinery/computer/station_alert/a = item
a.cancelAlarm("Fire", src, source)
for (var/item in GLOB.drones_list)
var/mob/living/simple_animal/drone/D = item
D.cancelAlarm("Fire", src, source)
for(var/item in GLOB.alarmdisplay)
var/datum/computer_file/program/alarm_monitor/p = item
p.cancelAlarm("Fire", src, source)
if (!(area_flags & NO_ALERTS)) //Check here instead at the start of the proc so that fire alarms can still work locally even in areas that don't send alerts
for (var/item in GLOB.silicon_mobs)
var/mob/living/silicon/aiPlayer = item
aiPlayer.cancelAlarm("Fire", src, source)
for (var/item in GLOB.alert_consoles)
var/obj/machinery/computer/station_alert/a = item
a.cancelAlarm("Fire", src, source)
for (var/item in GLOB.drones_list)
var/mob/living/simple_animal/drone/D = item
D.cancelAlarm("Fire", src, source)
for(var/item in GLOB.alarmdisplay)
var/datum/computer_file/program/alarm_monitor/p = item
p.cancelAlarm("Fire", src, source)
STOP_PROCESSING(SSobj, src)
/**
@@ -382,9 +381,8 @@ GLOBAL_LIST_EMPTY(teleportlocs)
* Alarm auto resets after 600 ticks
*/
/area/proc/burglaralert(obj/trigger)
if(always_unpowered) //no burglar alarms in space/asteroid
if (area_flags & NO_ALERTS)
return
//Trigger alarm effect
set_fire_alarm_effect()
//Lockdown airlocks
+14 -16
View File
@@ -10,28 +10,26 @@
icon_state = "explored"
always_unpowered = TRUE
requires_power = TRUE
poweralm = FALSE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
outdoors = TRUE
flags_1 = NONE
ambientsounds = MINING
area_flags = VALID_TERRITORY | UNIQUE_AREA
area_flags = VALID_TERRITORY | UNIQUE_AREA | NO_ALERTS
/area/mine/unexplored
name = "Mine"
icon_state = "unexplored"
always_unpowered = TRUE
requires_power = TRUE
poweralm = FALSE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
outdoors = TRUE
flags_1 = NONE
ambientsounds = MINING
area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED | TUNNELS_ALLOWED
area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED | TUNNELS_ALLOWED | NO_ALERTS
/area/mine/lobby
name = "Mining Station"
@@ -98,23 +96,23 @@
name = "Lavaland"
icon_state = "explored"
always_unpowered = TRUE
poweralm = FALSE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
requires_power = TRUE
ambientsounds = MINING
area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED | NO_ALERTS
/area/lavaland/underground
name = "Lavaland Caves"
icon_state = "unexplored"
always_unpowered = TRUE
requires_power = TRUE
poweralm = FALSE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
ambientsounds = MINING
area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED | NO_ALERTS
/area/lavaland/surface/outdoors
@@ -123,15 +121,15 @@
/area/lavaland/surface/outdoors/unexplored //monsters and ruins spawn here
icon_state = "unexplored"
area_flags = VALID_TERRITORY | UNIQUE_AREA | TUNNELS_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED
area_flags = VALID_TERRITORY | UNIQUE_AREA | TUNNELS_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | NO_ALERTS
/area/lavaland/surface/outdoors/unexplored/danger //megafauna will also spawn here
icon_state = "danger"
area_flags = VALID_TERRITORY | UNIQUE_AREA | TUNNELS_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED
area_flags = VALID_TERRITORY | UNIQUE_AREA | TUNNELS_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED | NO_ALERTS
/area/lavaland/surface/outdoors/explored
name = "Lavaland Labor Camp"
area_flags = VALID_TERRITORY | UNIQUE_AREA
area_flags = VALID_TERRITORY | UNIQUE_AREA | NO_ALERTS
@@ -147,12 +145,12 @@
name = "Icemoon"
icon_state = "explored"
always_unpowered = TRUE
poweralm = FALSE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
requires_power = TRUE
ambientsounds = MINING
area_flags = UNIQUE_AREA | FLORA_ALLOWED | NO_ALERTS
/area/icemoon/surface/outdoors // weather happens here
name = "Icemoon Wastes"
@@ -160,37 +158,37 @@
/area/icemoon/surface/outdoors/labor_camp
name = "Icemoon Labor Camp"
area_flags = UNIQUE_AREA
area_flags = UNIQUE_AREA | NO_ALERTS
/area/icemoon/surface/outdoors/unexplored //monsters and ruins spawn here
icon_state = "unexplored"
area_flags = UNIQUE_AREA | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | TUNNELS_ALLOWED
area_flags = UNIQUE_AREA | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | TUNNELS_ALLOWED | NO_ALERTS
/area/icemoon/surface/outdoors/unexplored/rivers // rivers spawn here
icon_state = "danger"
/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters
area_flags = UNIQUE_AREA | FLORA_ALLOWED | TUNNELS_ALLOWED
area_flags = UNIQUE_AREA | FLORA_ALLOWED | TUNNELS_ALLOWED | NO_ALERTS
/area/icemoon/underground
name = "Icemoon Caves"
outdoors = TRUE
always_unpowered = TRUE
requires_power = TRUE
poweralm = FALSE
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
ambientsounds = MINING
area_flags = UNIQUE_AREA | FLORA_ALLOWED | NO_ALERTS
/area/icemoon/underground/unexplored // mobs and megafauna and ruins spawn here
name = "Icemoon Caves"
icon_state = "unexplored"
area_flags = UNIQUE_AREA | TUNNELS_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED
area_flags = UNIQUE_AREA | TUNNELS_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED | NO_ALERTS
/area/icemoon/underground/unexplored/rivers // rivers spawn here
icon_state = "danger"
/area/icemoon/underground/explored // ruins can't spawn here
name = "Icemoon Underground"
area_flags = UNIQUE_AREA
area_flags = UNIQUE_AREA | NO_ALERTS
+1 -1
View File
@@ -4,7 +4,7 @@
name = "\improper Unexplored Location"
icon_state = "away"
has_gravity = STANDARD_GRAVITY
area_flags = HIDDEN_AREA | BLOBS_ALLOWED | UNIQUE_AREA
area_flags = HIDDEN_AREA | BLOBS_ALLOWED | UNIQUE_AREA | NO_ALERTS
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
ambientsounds = RUINS
flags_1 = CAN_BE_DIRTY_1
-2
View File
@@ -96,8 +96,6 @@
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
poweralm = FALSE
//ash walker nest
/area/ruin/unpowered/ash_walkers
icon_state = "red"
+3 -1
View File
@@ -9,7 +9,7 @@
has_gravity = STANDARD_GRAVITY
always_unpowered = FALSE
// Loading the same shuttle map at a different time will produce distinct area instances.
area_flags = NONE
area_flags = NO_ALERTS
icon_state = "shuttle"
flags_1 = CAN_BE_DIRTY_1
area_limited_icon_smoothing = /area/shuttle
@@ -117,6 +117,7 @@
/area/shuttle/mining
name = "Mining Shuttle"
area_flags = NONE //Set this so it doesn't inherit NO_ALERTS
/area/shuttle/mining/large
name = "Mining Shuttle"
@@ -124,6 +125,7 @@
/area/shuttle/labor
name = "Labor Camp Shuttle"
area_flags = NONE //Set this so it doesn't inherit NO_ALERTS
/area/shuttle/supply
name = "Supply Shuttle"
+1 -1
View File
@@ -37,7 +37,7 @@
..()
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.machine_stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.machine_stat && !istype(APC.area, /area/ai_monitored) && !(APC.area.area_flags & NO_ALERTS)
/obj/machinery/computer/apc_control/ui_interact(mob/user, datum/tgui/ui)
operator = user
@@ -23,7 +23,6 @@
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
poweralm = FALSE
ambientsounds = list('sound/ambience/ambimine.ogg')
icon_state = "awaycontent5"
@@ -33,7 +32,6 @@
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
poweralm = FALSE
icon_state = "awaycontent6"
//Papers
@@ -36,4 +36,3 @@
power_environ = FALSE
power_equip = FALSE
power_light = FALSE
poweralm = FALSE
+6 -6
View File
@@ -1245,24 +1245,24 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
area.poweralert(0, src)
area.poweralert(TRUE, src)
else if(cell.percent() < 15 && longtermpower < 0) // <15%, turn off lighting & equipment
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 2)
environ = autoset(environ, 1)
area.poweralert(0, src)
area.poweralert(TRUE, src)
else if(cell.percent() < 30 && longtermpower < 0) // <30%, turn off equipment
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
area.poweralert(0, src)
area.poweralert(TRUE, src)
else // otherwise all can be on
equipment = autoset(equipment, 1)
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
area.poweralert(1, src)
area.poweralert(FALSE, src)
if(cell.percent() > 75)
area.poweralert(1, src)
area.poweralert(FALSE, src)
// now trickle-charge the cell
if(chargemode && charging == APC_CHARGING && operating)
@@ -1304,7 +1304,7 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
area.poweralert(0, src)
area.poweralert(TRUE, src)
// update icon & area power if anything changed
@@ -1,4 +0,0 @@
/area/engine/engineering/poweralert(state, source)
if (state != poweralm)
investigate_log("has a power alarm!", INVESTIGATE_SINGULO)
..()
-1
View File
@@ -2672,7 +2672,6 @@
#include "code\modules\power\singularity\containment_field.dm"
#include "code\modules\power\singularity\emitter.dm"
#include "code\modules\power\singularity\field_generator.dm"
#include "code\modules\power\singularity\investigate.dm"
#include "code\modules\power\singularity\narsie.dm"
#include "code\modules\power\singularity\singularity.dm"
#include "code\modules\power\supermatter\supermatter.dm"