From 7293b7ecbd868335e342e311d82dcd4cecb9e18e Mon Sep 17 00:00:00 2001
From: Coolrune206 <71326864+Coolrune206@users.noreply.github.com>
Date: Fri, 14 Apr 2023 00:37:18 +1000
Subject: [PATCH] Allows admins to freeze the SM (#20616)
* allows admins to freeze the SM
* Hal9000 Review
* now works better than deleting frozen mobs!
---
code/modules/admin/verbs/freeze.dm | 15 +++++++++++++++
code/modules/power/supermatter/supermatter.dm | 7 +++++++
2 files changed, 22 insertions(+)
diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm
index 494d0f575e8..76cbe02ae0f 100644
--- a/code/modules/admin/verbs/freeze.dm
+++ b/code/modules/admin/verbs/freeze.dm
@@ -92,3 +92,18 @@ GLOBAL_LIST_EMPTY(frozen_atom_list) // A list of admin-frozen atoms.
else
message_admins("[key_name_admin(admin)] [frozen ? "froze" : "unfroze"] an empty [name]")
log_admin("[key_name(admin)] [frozen ? "froze" : "unfroze"] an empty [name]")
+
+/obj/machinery/atmospherics/supermatter_crystal/admin_Freeze(client/admin)
+ var/obj/effect/overlay/adminoverlay/freeze_overlay = new
+ if(processes)
+ radio.autosay("Alert: Unknown intervention has frozen causality around the crystal. It is not progressing in local timespace.", name, "Engineering", list(z))
+ GLOB.frozen_atom_list += src
+ processes = FALSE
+ add_overlay(freeze_overlay)
+ else
+ radio.autosay("Alert: Unknown intervention has ceased around the crystal. It has returned to the regular flow of time.", name, "Engineering", list(z))
+ GLOB.frozen_atom_list -= src
+ processes = TRUE
+ cut_overlay(freeze_overlay)
+ message_admins("[key_name_admin(admin)] [processes ? "unfroze" : "froze"] a supermatter crystal")
+ log_admin("[key_name(admin)] [processes ? "unfroze" : "froze"] a supermatter crystal")
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 35b58a6e265..81c73c673f6 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -212,6 +212,8 @@
SSair.atmos_machinery -= src
QDEL_NULL(radio)
GLOB.poi_list -= src
+ if(!processes)
+ GLOB.frozen_atom_list -= src
QDEL_NULL(countdown)
QDEL_NULL(soundloop)
return ..()
@@ -290,6 +292,11 @@
SEND_SOUND(M, sound('sound/machines/engine_alert2.ogg')) // then send them the sound file
radio.autosay(speaking, name, null, list(z))
for(var/i in SUPERMATTER_COUNTDOWN_TIME to 0 step -10)
+ if(!processes) // Stop exploding if you're frozen by an admin, damn you
+ cut_overlay(causality_field, TRUE)
+ final_countdown = FALSE
+ damage = explosion_point - 1 // One point below exploding, so it will re-start the countdown once unfrozen
+ return
if(damage < explosion_point) // Cutting it a bit close there engineers
radio.autosay("[safe_alert] Failsafe has been disengaged.", name, null, list(z))
cut_overlay(causality_field, TRUE)