From c7d2cffbc39d851f2a84204754d46e8754652f4b Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 12 Sep 2020 02:08:44 +0200 Subject: [PATCH] Adds NO_ALERT flag to areas, refactors area alerts slightly (#752) Co-authored-by: msgerbs Co-authored-by: Azarak --- code/__DEFINES/flags.dm | 2 + code/_globalvars/bitfields.dm | 1 + code/game/area/Space_Station_13_areas.dm | 2 +- code/game/area/areas.dm | 76 +++++++++---------- code/game/area/areas/mining.dm | 30 ++++---- code/game/area/areas/ruins/_ruins.dm | 2 +- code/game/area/areas/ruins/lavaland.dm | 2 - code/game/area/areas/shuttles.dm | 4 +- code/game/machinery/computer/apc_control.dm | 2 +- .../mission_code/moonoutpost19.dm | 2 - .../mission_code/undergroundoutpost45.dm | 1 - code/modules/power/apc.dm | 12 +-- code/modules/power/singularity/investigate.dm | 4 - tgstation.dme | 1 - 14 files changed, 66 insertions(+), 75 deletions(-) delete mode 100644 code/modules/power/singularity/investigate.dm diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 8e03130f8b3..a664c5cfb2a 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -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 diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 9f3b88b8bc8..e98f2f73f13 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -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( diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index 6ac12c4fe6e..ba0c730a9dc 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -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 diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index d3fe5b6b218..635f80b0a04 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -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 diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index 52de2fb5626..0b26403c752 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -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 diff --git a/code/game/area/areas/ruins/_ruins.dm b/code/game/area/areas/ruins/_ruins.dm index 28f13e2235f..492964daf4c 100644 --- a/code/game/area/areas/ruins/_ruins.dm +++ b/code/game/area/areas/ruins/_ruins.dm @@ -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 diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index c1c1a9ecbce..adc1a6c6292 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -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" diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index baac10d8442..d56abddaf8b 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -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" diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index d496550d898..4907c0b46f9 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -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 diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm index d896717152e..3d7446f3aa5 100644 --- a/code/modules/awaymissions/mission_code/moonoutpost19.dm +++ b/code/modules/awaymissions/mission_code/moonoutpost19.dm @@ -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 diff --git a/code/modules/awaymissions/mission_code/undergroundoutpost45.dm b/code/modules/awaymissions/mission_code/undergroundoutpost45.dm index 41530320243..7ec7d7728f2 100644 --- a/code/modules/awaymissions/mission_code/undergroundoutpost45.dm +++ b/code/modules/awaymissions/mission_code/undergroundoutpost45.dm @@ -36,4 +36,3 @@ power_environ = FALSE power_equip = FALSE power_light = FALSE - poweralm = FALSE diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b6ea91f292b..99944ace869 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -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 diff --git a/code/modules/power/singularity/investigate.dm b/code/modules/power/singularity/investigate.dm deleted file mode 100644 index 5db912b8d6e..00000000000 --- a/code/modules/power/singularity/investigate.dm +++ /dev/null @@ -1,4 +0,0 @@ -/area/engine/engineering/poweralert(state, source) - if (state != poweralm) - investigate_log("has a power alarm!", INVESTIGATE_SINGULO) - ..() diff --git a/tgstation.dme b/tgstation.dme index 2b71a6a29ca..b2f0cf8015e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -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"