Fixes cascade resonance announcement spam, improves logging (#96758)

## About The Pull Request

- Fixes air raid siren/priority announcement being sent each time the
cascade strategy is activated.
- Improves logging for admins, removes code duplication by moving the
log generation into the respective parent procs.

## Why It's Good For The Game

Fixes bug, code improvement

## Changelog

🆑 LT3
fix: Fixed duplicate priority announcements about a possible resonance
cascade
code: Improved supermatter delamination logging
/🆑
This commit is contained in:
LT3
2026-07-04 19:54:45 +02:00
committed by GitHub
parent 9ff1efa70a
commit 72debff5a7
3 changed files with 35 additions and 24 deletions
@@ -9,6 +9,10 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
/// Logic holder for supermatter delaminations, goes off the strategy design pattern.
/// Selected by [/obj/machinery/power/supermatter_crystal/proc/set_delam]
/datum/sm_delam
/// User friendly name for messages and logging
var/name
/// Has a priority announcement been sent since this delam strategy was initialized
var/announcement_triggered = FALSE
/// Whether we are eligible for this delamination or not. TRUE if valid, FALSE if not.
/// [/obj/machinery/power/supermatter_crystal/proc/set_delam]
@@ -38,8 +42,8 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
return FALSE
if (sm.damage >= sm.emergency_point && sm.damage_archived < sm.emergency_point)
sm.investigate_log("has entered the emergency point.", INVESTIGATE_ENGINE)
message_admins("[sm] has entered the emergency point [ADMIN_VERBOSEJMP(sm)].")
sm.investigate_log("has entered the emergency point: Pending [sm.delamination_strategy.name].", INVESTIGATE_ENGINE)
message_admins("[ADMIN_VERBOSEJMP(sm)] has entered the emergency point: Pending [sm.delamination_strategy.name].")
if((REALTIMEOFDAY - sm.lastwarning) < SUPERMATTER_WARNING_DELAY)
return FALSE
@@ -75,15 +79,24 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
SEND_SIGNAL(sm, COMSIG_SUPERMATTER_DELAM_ALARM)
return TRUE
/// Generates an admin message and creates an investigate log.
/datum/sm_delam/proc/log_delamination(obj/machinery/power/supermatter_crystal/sm)
message_admins("[ADMIN_VERBOSEJMP(sm)] triggered a [name].")
sm.investigate_log("triggered a [name].", INVESTIGATE_ENGINE)
/// Called when a supermatter switches its strategy from another one to us.
/// [/obj/machinery/power/supermatter_crystal/proc/set_delam]
/datum/sm_delam/proc/on_select(obj/machinery/power/supermatter_crystal/sm)
return
SHOULD_CALL_PARENT(TRUE)
sm.investigate_log("functional strategy is now [name].", INVESTIGATE_ENGINE)
if(SSticker.HasRoundStarted())
message_admins("[ADMIN_VERBOSEJMP(sm)] functional strategy is now [name].")
/// Called when a supermatter switches its strategy from us to something else.
/// [/obj/machinery/power/supermatter_crystal/proc/set_delam]
/datum/sm_delam/proc/on_deselect(obj/machinery/power/supermatter_crystal/sm)
return
SHOULD_CALL_PARENT(TRUE)
sm.investigate_log("previous strategy was [name].", INVESTIGATE_ENGINE)
/// Added to an examine return value.
/// [/obj/machinery/power/supermatter_crystal/examine]
@@ -1,4 +1,5 @@
/datum/sm_delam/cascade
name = "resonance cascade"
/datum/sm_delam/cascade/can_select(obj/machinery/power/supermatter_crystal/sm)
if(!sm.is_main_engine)
@@ -16,6 +17,9 @@
if(!..())
return FALSE
if(!announcement_triggered)
announce_cascade(sm)
sm.radio.talk_into(
sm,
"DANGER: HYPERSTRUCTURE OSCILLATION FREQUENCY OUT OF BOUNDS.",
@@ -33,27 +37,20 @@
return TRUE
/datum/sm_delam/cascade/on_select(obj/machinery/power/supermatter_crystal/sm)
message_admins("[sm] is heading towards a cascade. [ADMIN_VERBOSEJMP(sm)]")
sm.investigate_log("is heading towards a cascade.", INVESTIGATE_ENGINE)
. = ..()
sm.warp = new(sm)
sm.vis_contents += sm.warp
animate(sm.warp, time = 1, transform = matrix().Scale(0.5,0.5))
animate(time = 9, transform = matrix())
addtimer(CALLBACK(src, PROC_REF(announce_cascade), sm), 2 MINUTES)
/datum/sm_delam/cascade/on_deselect(obj/machinery/power/supermatter_crystal/sm)
message_admins("[sm] will no longer cascade. [ADMIN_VERBOSEJMP(sm)]")
sm.investigate_log("will no longer cascade.", INVESTIGATE_ENGINE)
. = ..()
message_admins("[ADMIN_VERBOSEJMP(sm)] will no longer cascade.")
sm.vis_contents -= sm.warp
QDEL_NULL(sm.warp)
/datum/sm_delam/cascade/delaminate(obj/machinery/power/supermatter_crystal/sm)
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a cascade delam.")
sm.investigate_log("triggered a cascade delam.", INVESTIGATE_ENGINE)
log_delamination(sm)
effect_explosion(sm)
effect_emergency_state()
effect_cascade_demoralize()
@@ -87,9 +84,13 @@
return FALSE
if(!can_select(sm))
return FALSE
if(!sm.should_alert_common())
return FALSE
priority_announce("Attention: Long range anomaly scans indicate abnormal quantities of harmonic flux originating from \
a subject within [station_name()], a resonance collapse may occur.",
"Nanotrasen Star Observation Association", 'sound/announcer/alarm/airraid.ogg')
announcement_triggered = TRUE
return TRUE
/// Signal calls cant sleep, we gotta do this.
@@ -2,6 +2,7 @@
/// When we have too much gas.
/datum/sm_delam/singularity
name = "singularity delamination"
/datum/sm_delam/singularity/can_select(obj/machinery/power/supermatter_crystal/sm)
return (sm.absorbed_gasmix.total_moles() >= MOLE_PENALTY_THRESHOLD)
@@ -17,9 +18,7 @@
return TRUE
/datum/sm_delam/singularity/delaminate(obj/machinery/power/supermatter_crystal/sm)
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a singularity delam.")
sm.investigate_log("triggered a singularity delam.", INVESTIGATE_ENGINE)
log_delamination(sm)
effect_irradiate(sm)
effect_demoralize(sm)
if(sm.is_main_engine)
@@ -63,6 +62,7 @@
/// When we have too much power.
/datum/sm_delam/tesla
name = "tesla delamination"
/datum/sm_delam/tesla/can_select(obj/machinery/power/supermatter_crystal/sm)
return (sm.internal_energy > POWER_PENALTY_THRESHOLD)
@@ -78,9 +78,7 @@
return TRUE
/datum/sm_delam/tesla/delaminate(obj/machinery/power/supermatter_crystal/sm)
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a tesla delam.")
sm.investigate_log("triggered a tesla delam.", INVESTIGATE_ENGINE)
log_delamination(sm)
effect_irradiate(sm)
effect_demoralize(sm)
if(sm.is_main_engine)
@@ -113,14 +111,13 @@
/// Default delam.
/datum/sm_delam/explosive
name = "explosive delamination"
/datum/sm_delam/explosive/can_select(obj/machinery/power/supermatter_crystal/sm)
return TRUE
/datum/sm_delam/explosive/delaminate(obj/machinery/power/supermatter_crystal/sm)
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a normal delam.")
sm.investigate_log("triggered a normal delam.", INVESTIGATE_ENGINE)
log_delamination(sm)
effect_irradiate(sm)
effect_demoralize(sm)
if(sm.is_main_engine)