From b7ae191b451eb46031dc9bd20951c2c3420c4925 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 16 Apr 2024 17:43:47 +0100 Subject: [PATCH 1/2] AI Core Lockdown prep --- code/__DEFINES/dcs/signals/signals_global.dm | 3 + code/game/machinery/aicore_lockdown.dm | 112 +++++++++++++++++++ code/game/machinery/biohazard_lockdown.dm | 10 +- code/modules/admin/admin_verbs.dm | 1 + colonialmarines.dme | 1 + 5 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 code/game/machinery/aicore_lockdown.dm diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index f975a67824ef..306f37deb8cb 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -69,6 +69,9 @@ /// From /proc/biohazard_lockdown() #define COMSIG_GLOB_RESEARCH_LOCKDOWN "!research_lockdown_closed" #define COMSIG_GLOB_RESEARCH_LIFT "!research_lockdown_opened" +/// From /proc/aicore_lockdown() +#define COMSIG_GLOB_AICORE_LOCKDOWN "!aicore_lockdown_closed" +#define COMSIG_GLOB_AICORE_LIFT "!aicore_lockdown_opened" /// From /obj/structure/machinery/power/reactor/proc/set_overloading() : (set_overloading) #define COMSIG_GLOB_GENERATOR_SET_OVERLOADING "!generator_set_overloading" diff --git a/code/game/machinery/aicore_lockdown.dm b/code/game/machinery/aicore_lockdown.dm new file mode 100644 index 000000000000..d4edee5f86cc --- /dev/null +++ b/code/game/machinery/aicore_lockdown.dm @@ -0,0 +1,112 @@ +#define LOCKDOWN_READY 0 +#define LOCKDOWN_ACTIVE 1 +GLOBAL_VAR_INIT(ai_lockdown_state, LOCKDOWN_READY) + +/obj/structure/machinery/aicore_lockdown + name = "Emergency Containment Breach" + icon_state = "big_red_button_tablev" + unslashable = TRUE + unacidable = TRUE + COOLDOWN_DECLARE(containment_lockdown) + +/obj/structure/machinery/aicore_lockdown/ex_act(severity) + return FALSE + +/obj/structure/machinery/aicore_lockdown/attack_remote(mob/user as mob) + return FALSE + +/obj/structure/machinery/aicore_lockdown/attack_alien(mob/user as mob) + return FALSE + +/obj/structure/machinery/aicore_lockdown/attackby(obj/item/attacking_item, mob/user) + return attack_hand(user) + +/obj/structure/machinery/aicore_lockdown/attack_hand(mob/living/user) + if(isxeno(user)) + return FALSE + if(!allowed(user)) + to_chat(user, SPAN_DANGER("Access Denied")) + flick(initial(icon_state) + "-denied", src) + return FALSE + + if(!COOLDOWN_FINISHED(src, containment_lockdown)) + to_chat(user, SPAN_BOLDWARNING("AI Core Lockdown procedures are on cooldown! They will be ready in [COOLDOWN_SECONDSLEFT(src, containment_lockdown)] seconds!")) + return FALSE + + add_fingerprint(user) + aicore_lockdown(user) + COOLDOWN_START(src, containment_lockdown, 5 MINUTES) + +/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown + name = "ARES Emergency Lockdown Shutter" + density = FALSE + +/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore + icon_state = "aidoor1" + base_icon_state = "aidoor" + +/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/Initialize() + . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LOCKDOWN, PROC_REF(close)) + RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LIFT, PROC_REF(open)) + +/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/white + icon_state = "w_almayer_pdoor1" + base_icon_state = "w_almayer_pdoor" + +/client/proc/admin_aicore_alert() + set name = "AI Core Lockdown" + set category = "Admin.Ship" + + if(!admin_holder ||!check_rights(R_EVENT)) + return FALSE + + var/prompt = tgui_alert(src, "Are you sure you want to trigger an AI Core lockdown alert? This will force red alert, and lockdown the AI Core.", "Choose.", list("Yes", "No"), 20 SECONDS) + if(prompt != "Yes") + return FALSE + + prompt = tgui_alert(src, "Do you want to use a custom announcement?", "Choose.", list("Yes", "No"), 20 SECONDS) + if(prompt == "Yes") + var/whattoannounce = tgui_input_text(src, "Please enter announcement text.", "what?") + aicore_lockdown(usr, whattoannounce, TRUE) + else + aicore_lockdown(usr, admin = TRUE) + return TRUE + +/proc/aicore_lockdown(mob/user, message, admin = FALSE) + if(IsAdminAdvancedProcCall()) + return PROC_BLOCKED + + var/log = "[key_name(user)] triggered research AI core lockdown!" + var/ares_log = "[user.name] triggered triggered AI Core Emergency Lockdown." + if(!message) + message = "ATTENTION! \n\nCORE SECURITY ALERT. \n\nAI CORE UNDER LOCKDOWN." + else + log = "[key_name(user)] triggered AI core emergency lockdown! (Using a custom announcement)." + if(admin) + log += " (Admin Triggered)." + ares_log = "[MAIN_AI_SYSTEM] triggered AI Core Emergency Lockdown." + + switch(GLOB.ai_lockdown_state) + if(LOCKDOWN_READY) + GLOB.ai_lockdown_state = LOCKDOWN_ACTIVE + set_security_level(SEC_LEVEL_RED, TRUE, FALSE) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AICORE_LOCKDOWN) + if(LOCKDOWN_ACTIVE) + GLOB.ai_lockdown_state = LOCKDOWN_READY + message = "ATTENTION! \n\nAI CORE EMERGENCY LOCKDOWN LIFTED." + log = "[key_name(user)] lifted AI core lockdown!" + ares_log = "[user.name] lifted AI Core Emergency Lockdown." + if(admin) + log += " (Admin Triggered)." + ares_log = "[MAIN_AI_SYSTEM] lifted AI Core Emergency Lockdown." + + set_security_level(SEC_LEVEL_BLUE, TRUE, FALSE) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AICORE_LIFT) + + shipwide_ai_announcement(message, MAIN_AI_SYSTEM, 'sound/effects/biohazard.ogg') + message_admins(log) + log_ares_security("AI Core Lockdown", ares_log) + +#undef LOCKDOWN_READY +#undef LOCKDOWN_ACTIVE diff --git a/code/game/machinery/biohazard_lockdown.dm b/code/game/machinery/biohazard_lockdown.dm index 2e3cbf6de234..90d620f1fcf3 100644 --- a/code/game/machinery/biohazard_lockdown.dm +++ b/code/game/machinery/biohazard_lockdown.dm @@ -1,6 +1,6 @@ #define LOCKDOWN_READY 0 #define LOCKDOWN_ACTIVE 1 -GLOBAL_VAR_INIT(lockdown_state, LOCKDOWN_READY) +GLOBAL_VAR_INIT(med_lockdown_state, LOCKDOWN_READY) /obj/structure/machinery/biohazard_lockdown name = "Emergency Containment Breach" @@ -51,7 +51,7 @@ GLOBAL_VAR_INIT(lockdown_state, LOCKDOWN_READY) base_icon_state = "w_almayer_pdoor" /client/proc/admin_biohazard_alert() - set name = "Containment Breach Alert" + set name = "Research Containment Lockdown" set category = "Admin.Ship" if(!admin_holder ||!check_rights(R_EVENT)) @@ -83,13 +83,13 @@ GLOBAL_VAR_INIT(lockdown_state, LOCKDOWN_READY) log += " (Admin Triggered)." ares_log = "[MAIN_AI_SYSTEM] triggered Medical Research Biohazard Containment Lockdown." - switch(GLOB.lockdown_state) + switch(GLOB.med_lockdown_state) if(LOCKDOWN_READY) - GLOB.lockdown_state = LOCKDOWN_ACTIVE + GLOB.med_lockdown_state = LOCKDOWN_ACTIVE set_security_level(SEC_LEVEL_RED, TRUE, FALSE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_RESEARCH_LOCKDOWN) if(LOCKDOWN_ACTIVE) - GLOB.lockdown_state = LOCKDOWN_READY + GLOB.med_lockdown_state = LOCKDOWN_READY message = "ATTENTION! \n\nBIOHAZARD CONTAINMENT LOCKDOWN LIFTED." log = "[key_name(user)] lifted research bio lockdown!" ares_log = "[user.name] lifted Medical Research Biohazard Containment Lockdown." diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 626758fc2a5a..da95fc090da8 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -138,6 +138,7 @@ GLOBAL_LIST_INIT(admin_verbs_minor_event, list( /client/proc/adminpanelweapons, /client/proc/admin_general_quarters, /client/proc/admin_biohazard_alert, + /client/proc/admin_aicore_alert, /client/proc/toggle_hardcore_perma, /client/proc/toggle_bypass_joe_restriction, /client/proc/toggle_joe_respawns, diff --git a/colonialmarines.dme b/colonialmarines.dme index 0d39f12cdbc6..e77b171280c7 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -822,6 +822,7 @@ #include "code\game\jobs\job\special\provost.dm" #include "code\game\jobs\job\special\uaac.dm" #include "code\game\jobs\job\special\uscm.dm" +#include "code\game\machinery\aicore_lockdown.dm" #include "code\game\machinery\air_alarm.dm" #include "code\game\machinery\air_sensor.dm" #include "code\game\machinery\autolathe.dm" From b426996506dbe267d79fed4d62aaf32f6055afc8 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 20 Apr 2024 16:14:38 +0100 Subject: [PATCH 2/2] function --- code/__DEFINES/ARES.dm | 4 + code/game/machinery/ARES/ARES_procs.dm | 4 + code/game/machinery/aicore_lockdown.dm | 47 +-- code/game/machinery/biohazard_lockdown.dm | 6 +- code/game/turfs/floor_types.dm | 9 + .../structures/doors/blastdoors_shutters.dmi | Bin 13021 -> 14340 bytes maps/map_files/USS_Almayer/USS_Almayer.dmm | 286 ++++++++++-------- 7 files changed, 205 insertions(+), 151 deletions(-) diff --git a/code/__DEFINES/ARES.dm b/code/__DEFINES/ARES.dm index 55aa68f97309..be9609476356 100644 --- a/code/__DEFINES/ARES.dm +++ b/code/__DEFINES/ARES.dm @@ -82,3 +82,7 @@ /// Time until someone can respawn as Working Joe #define JOE_JOIN_DEAD_TIME (15 MINUTES) + +/// Lockdown defines +#define ARES_LOCKDOWN_READY 0 +#define ARES_LOCKDOWN_ACTIVE 1 diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm index 05f110ec1a0c..55d076889e49 100644 --- a/code/game/machinery/ARES/ARES_procs.dm +++ b/code/game/machinery/ARES/ARES_procs.dm @@ -106,9 +106,13 @@ GLOBAL_LIST_INIT(maintenance_categories, list( /// Is nuke request usable or not? var/nuke_available = TRUE + /// Status of the AI Core Lockdown + var/ai_lockdown_state = ARES_LOCKDOWN_READY + COOLDOWN_DECLARE(ares_distress_cooldown) COOLDOWN_DECLARE(ares_nuclear_cooldown) COOLDOWN_DECLARE(ares_quarters_cooldown) + COOLDOWN_DECLARE(aicore_lockdown) // ------ ARES Logging Procs ------ // /proc/ares_is_active() diff --git a/code/game/machinery/aicore_lockdown.dm b/code/game/machinery/aicore_lockdown.dm index d4edee5f86cc..bf58a45ff7d9 100644 --- a/code/game/machinery/aicore_lockdown.dm +++ b/code/game/machinery/aicore_lockdown.dm @@ -1,13 +1,8 @@ -#define LOCKDOWN_READY 0 -#define LOCKDOWN_ACTIVE 1 -GLOBAL_VAR_INIT(ai_lockdown_state, LOCKDOWN_READY) - /obj/structure/machinery/aicore_lockdown - name = "Emergency Containment Breach" + name = "AI Core Lockdown" icon_state = "big_red_button_tablev" unslashable = TRUE unacidable = TRUE - COOLDOWN_DECLARE(containment_lockdown) /obj/structure/machinery/aicore_lockdown/ex_act(severity) return FALSE @@ -29,30 +24,37 @@ GLOBAL_VAR_INIT(ai_lockdown_state, LOCKDOWN_READY) flick(initial(icon_state) + "-denied", src) return FALSE - if(!COOLDOWN_FINISHED(src, containment_lockdown)) - to_chat(user, SPAN_BOLDWARNING("AI Core Lockdown procedures are on cooldown! They will be ready in [COOLDOWN_SECONDSLEFT(src, containment_lockdown)] seconds!")) + if(!COOLDOWN_FINISHED(GLOB.ares_datacore, aicore_lockdown)) + to_chat(user, SPAN_BOLDWARNING("AI Core Lockdown procedures are on cooldown! They will be ready in [COOLDOWN_SECONDSLEFT(GLOB.ares_datacore, aicore_lockdown)] seconds!")) return FALSE add_fingerprint(user) aicore_lockdown(user) - COOLDOWN_START(src, containment_lockdown, 5 MINUTES) + COOLDOWN_START(GLOB.ares_datacore, aicore_lockdown, 2 MINUTES) /obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown name = "ARES Emergency Lockdown Shutter" density = FALSE + open_layer = 1.9 + plane = FLOOR_PLANE /obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore icon_state = "aidoor1" base_icon_state = "aidoor" +/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore/white + icon_state = "w_aidoor1" + base_icon_state = "w_aidoor" + +/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/white + icon_state = "w_almayer_pdoor1" + base_icon_state = "w_almayer_pdoor" + /obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/Initialize() . = ..() RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LOCKDOWN, PROC_REF(close)) RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LIFT, PROC_REF(open)) -/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/white - icon_state = "w_almayer_pdoor1" - base_icon_state = "w_almayer_pdoor" /client/proc/admin_aicore_alert() set name = "AI Core Lockdown" @@ -77,7 +79,7 @@ GLOBAL_VAR_INIT(ai_lockdown_state, LOCKDOWN_READY) if(IsAdminAdvancedProcCall()) return PROC_BLOCKED - var/log = "[key_name(user)] triggered research AI core lockdown!" + var/log = "[key_name(user)] triggered AI core lockdown!" var/ares_log = "[user.name] triggered triggered AI Core Emergency Lockdown." if(!message) message = "ATTENTION! \n\nCORE SECURITY ALERT. \n\nAI CORE UNDER LOCKDOWN." @@ -87,13 +89,14 @@ GLOBAL_VAR_INIT(ai_lockdown_state, LOCKDOWN_READY) log += " (Admin Triggered)." ares_log = "[MAIN_AI_SYSTEM] triggered AI Core Emergency Lockdown." - switch(GLOB.ai_lockdown_state) - if(LOCKDOWN_READY) - GLOB.ai_lockdown_state = LOCKDOWN_ACTIVE - set_security_level(SEC_LEVEL_RED, TRUE, FALSE) + switch(GLOB.ares_datacore.ai_lockdown_state) + if(ARES_LOCKDOWN_READY) + GLOB.ares_datacore.ai_lockdown_state = ARES_LOCKDOWN_ACTIVE + if(GLOB.security_level < SEC_LEVEL_RED) + set_security_level(SEC_LEVEL_RED, TRUE, FALSE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AICORE_LOCKDOWN) - if(LOCKDOWN_ACTIVE) - GLOB.ai_lockdown_state = LOCKDOWN_READY + if(ARES_LOCKDOWN_ACTIVE) + GLOB.ares_datacore.ai_lockdown_state = ARES_LOCKDOWN_READY message = "ATTENTION! \n\nAI CORE EMERGENCY LOCKDOWN LIFTED." log = "[key_name(user)] lifted AI core lockdown!" ares_log = "[user.name] lifted AI Core Emergency Lockdown." @@ -101,12 +104,10 @@ GLOBAL_VAR_INIT(ai_lockdown_state, LOCKDOWN_READY) log += " (Admin Triggered)." ares_log = "[MAIN_AI_SYSTEM] lifted AI Core Emergency Lockdown." - set_security_level(SEC_LEVEL_BLUE, TRUE, FALSE) + if(GLOB.security_level > SEC_LEVEL_GREEN) + set_security_level(SEC_LEVEL_BLUE, TRUE, FALSE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AICORE_LIFT) shipwide_ai_announcement(message, MAIN_AI_SYSTEM, 'sound/effects/biohazard.ogg') message_admins(log) log_ares_security("AI Core Lockdown", ares_log) - -#undef LOCKDOWN_READY -#undef LOCKDOWN_ACTIVE diff --git a/code/game/machinery/biohazard_lockdown.dm b/code/game/machinery/biohazard_lockdown.dm index 90d620f1fcf3..8474dbd5df2a 100644 --- a/code/game/machinery/biohazard_lockdown.dm +++ b/code/game/machinery/biohazard_lockdown.dm @@ -86,7 +86,8 @@ GLOBAL_VAR_INIT(med_lockdown_state, LOCKDOWN_READY) switch(GLOB.med_lockdown_state) if(LOCKDOWN_READY) GLOB.med_lockdown_state = LOCKDOWN_ACTIVE - set_security_level(SEC_LEVEL_RED, TRUE, FALSE) + if(GLOB.security_level < SEC_LEVEL_RED) + set_security_level(SEC_LEVEL_RED, TRUE, FALSE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_RESEARCH_LOCKDOWN) if(LOCKDOWN_ACTIVE) GLOB.med_lockdown_state = LOCKDOWN_READY @@ -97,7 +98,8 @@ GLOBAL_VAR_INIT(med_lockdown_state, LOCKDOWN_READY) log += " (Admin Triggered)." ares_log = "[MAIN_AI_SYSTEM] lifted Medical Research Biohazard Containment Lockdown." - set_security_level(SEC_LEVEL_BLUE, TRUE, FALSE) + if(GLOB.security_level > SEC_LEVEL_GREEN) + set_security_level(SEC_LEVEL_BLUE, TRUE, FALSE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_RESEARCH_LIFT) shipwide_ai_announcement(message, MAIN_AI_SYSTEM, 'sound/effects/biohazard.ogg') diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm index 8a8698d0c047..10cf69d232bb 100644 --- a/code/game/turfs/floor_types.dm +++ b/code/game/turfs/floor_types.dm @@ -331,6 +331,15 @@ . = ..() set_light_on(TRUE) + RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LOCKDOWN, PROC_REF(start_emergency_light_on)) + RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LIFT, PROC_REF(start_emergency_light_off)) + +/turf/open/floor/almayer/aicore/glowing/proc/start_emergency_light_on() + set_light(l_color = "#c70f0f") + +/turf/open/floor/almayer/aicore/glowing/proc/start_emergency_light_off() + set_light(l_color = "#d69c46") + /turf/open/floor/almayer/aicore/no_build allow_construction = FALSE hull_floor = TRUE diff --git a/icons/obj/structures/doors/blastdoors_shutters.dmi b/icons/obj/structures/doors/blastdoors_shutters.dmi index 8c63d0580922a59a7aa55ba77b7e9a6aa74f2d2b..1fe1df44b23a6dc76cbc8e8216d2e7dbb976b25f 100644 GIT binary patch literal 14340 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