diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 2c906a34868..c565e963d60 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -54,11 +54,15 @@
#define ABOVE_BODY_FRONT_LAYER (BODY_FRONT_LAYER-1)
+//SKYRAT EDIT REMOVAL BEGIN - ALERTS (moved to modular defines)
+/*
//Security levels
#define SEC_LEVEL_GREEN 0
#define SEC_LEVEL_BLUE 1
#define SEC_LEVEL_RED 2
#define SEC_LEVEL_DELTA 3
+*/
+//SKYRAT EDIT END
//some arbitrary defines to be used by self-pruning global lists. (see master_controller)
#define PROCESS_KILL 26 //Used to trigger removal from a processing list
diff --git a/code/__DEFINES/~skyrat_defines/security_alerts.dm b/code/__DEFINES/~skyrat_defines/security_alerts.dm
new file mode 100644
index 00000000000..11b5eb3f8b6
--- /dev/null
+++ b/code/__DEFINES/~skyrat_defines/security_alerts.dm
@@ -0,0 +1,8 @@
+//Security levels
+#define SEC_LEVEL_GREEN 0
+#define SEC_LEVEL_BLUE 1
+#define SEC_LEVEL_VIOLET 2
+#define SEC_LEVEL_ORANGE 3
+#define SEC_LEVEL_AMBER 4
+#define SEC_LEVEL_RED 5
+#define SEC_LEVEL_DELTA 6
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index f176b7af423..35edb9abbff 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -309,8 +309,20 @@ SUBSYSTEM_DEF(shuttle)
if(emergency.timeLeft(1) < emergencyCallTime)
return
if(SEC_LEVEL_BLUE)
- if(emergency.timeLeft(1) < emergencyCallTime * 0.5)
+ //if(emergency.timeLeft(1) < emergencyCallTime * 0.5) ORIGINAL
+ if(emergency.timeLeft(1) < emergencyCallTime * 0.6) //SKYRAT EDIT CHANGE - ALERTS
return
+ //SKYRAT EDIT ADDITION BEGIN - ALERTS
+ if(SEC_LEVEL_ORANGE)
+ if(emergency.timeLeft(1) < emergencyCallTime * 0.4)
+ return
+ if(SEC_LEVEL_VIOLET)
+ if(emergency.timeLeft(1) < emergencyCallTime * 0.4)
+ return
+ if(SEC_LEVEL_AMBER)
+ if(emergency.timeLeft(1) < emergencyCallTime * 0.4)
+ return
+ //SKYRAT EDIT ADDITION END
else
if(emergency.timeLeft(1) < emergencyCallTime * 0.25)
return
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index b6e29cc7593..911d6061664 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -100,8 +100,10 @@
tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN)
tmp_alertlevel = SEC_LEVEL_GREEN
- if(tmp_alertlevel > SEC_LEVEL_BLUE)
- tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
+ //if(tmp_alertlevel > SEC_LEVEL_BLUE) //ORIGINAL
+ // tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this //ORIGINAL
+ if(tmp_alertlevel > SEC_LEVEL_AMBER) //SKYRAT EDIT CHANGE - ALERTS
+ tmp_alertlevel = SEC_LEVEL_AMBER //Cannot engage delta with this //SKYRAT EDIT CHANGE - ALERTS
set_security_level(tmp_alertlevel)
if(GLOB.security_level != old_level)
to_chat(usr, "Authorization confirmed. Modifying security level.")
@@ -389,8 +391,10 @@
tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN)
tmp_alertlevel = SEC_LEVEL_GREEN
- if(tmp_alertlevel > SEC_LEVEL_BLUE)
- tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
+ //if(tmp_alertlevel > SEC_LEVEL_BLUE) //ORIGINAL
+ // tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this //ORIGINAL
+ if(tmp_alertlevel > SEC_LEVEL_AMBER) //SKYRAT EDIT CHANGE - ALERTS
+ tmp_alertlevel = SEC_LEVEL_AMBER //Cannot engage delta with this //SKYRAT EDIT CHANGE - ALERTS
set_security_level(tmp_alertlevel)
if(GLOB.security_level != old_level)
//Only notify people if an actual change happened
@@ -551,6 +555,11 @@
if(GLOB.security_level == SEC_LEVEL_DELTA)
dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate."
else
+ //SKYRAT CHANGE ADDITION BEGIN - ALERTS
+ dat += "Amber
"
+ dat += "Orange
"
+ dat += "Violet
"
+ //SKYRAT CHANGE END
dat += "Blue
"
dat += "Green"
if(STATE_CONFIRM_LEVEL)
@@ -692,6 +701,11 @@
if(GLOB.security_level == SEC_LEVEL_DELTA)
dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate."
else
+ //SKYRAT EDIT ADDITION - ALERTS
+ dat += "Amber
"
+ dat += "Orange
"
+ dat += "Violet
"
+ //SKYRAT EDIT END
dat += "Blue
"
dat += "Green"
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 00c0cd2e5a3..7e7c2a150b7 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -15,7 +15,8 @@
/obj/machinery/firealarm
name = "fire alarm"
desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever."
- icon = 'icons/obj/monitors.dmi'
+ //icon = 'icons/obj/monitors.dmi' //ORIGINAL
+ icon = 'modular_skyrat/modules/alerts/icons/obj/monitors.dmi' //SKYRAT EDIT CHANGE
icon_state = "fire0"
max_integrity = 250
integrity_failure = 0.4
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 0526e6fd154..50f7b18dc3f 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -386,6 +386,9 @@
/mob/dead/new_player/proc/LateChoices()
var/list/dat = list("
Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)]
")
+ //SKYRAT EDIT ADDITION BEGIN - ALERTS
+ dat += "Alert Level: [capitalize(num2seclevel(GLOB.security_level))]
"
+ //SKYRAT EDIT END
if(SSshuttle.emergency)
switch(SSshuttle.emergency.mode)
if(SHUTTLE_ESCAPE)
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index fa29dbc1466..120973bc260 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -6,6 +6,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
//config.alert_desc_blue_downto
+//SKYRAT EDIT REMOVAL BEGIN - ALERTS (moved to modular)
+/*
/proc/set_security_level(level)
switch(level)
if("green")
@@ -19,7 +21,6 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
//Will not be announced if you try to set to the same level as it already is
if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level)
- set_security_level_skyrat(level) //SKYRAT EDIT ADDITION - ALERTS
switch(level)
if(SEC_LEVEL_GREEN)
minor_announce(CONFIG_GET(string/alert_green), "Attention! Security level lowered to green:")
@@ -117,3 +118,5 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
return SEC_LEVEL_RED
if("delta")
return SEC_LEVEL_DELTA
+*/
+//SKYRAT EDIT END
diff --git a/config/config.txt b/config/config.txt
index 423a44f3ce4..27a2bf9e555 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -5,6 +5,7 @@ $include dbconfig.txt
$include comms.txt
$include antag_rep.txt
$include resources.txt
+$include skyrat/skyrat_config.txt
# You can use the @ character at the beginning of a config option to lock it from being edited in-game
# Example usage:
diff --git a/config/skyrat/skyrat_config.txt b/config/skyrat/skyrat_config.txt
new file mode 100644
index 00000000000..683b206b584
--- /dev/null
+++ b/config/skyrat/skyrat_config.txt
@@ -0,0 +1,6 @@
+ALERT_AMBER_UPTO A major security emergency has developed. Security staff may have weapons unholstered at all times. Random searches are allowed and advised.
+ALERT_AMBER_DOWNTO A major security emergency is still underway. Non-security personnel are required to obey all relevant instructions from security staff.
+ALERT_ORANGE_UPTO A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff.
+ALERT_ORANGE_DOWNTO A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff.
+ALERT_VIOLET_UPTO A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff.
+ALERT_VIOLET_DOWNTO A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff.
diff --git a/modular_skyrat/modules/alerts/code/config.dm b/modular_skyrat/modules/alerts/code/config.dm
new file mode 100644
index 00000000000..f4fa1207ed6
--- /dev/null
+++ b/modular_skyrat/modules/alerts/code/config.dm
@@ -0,0 +1,17 @@
+/datum/config_entry/string/alert_amber_upto
+ config_entry_value = "A major security emergency has developed. Security staff may have weapons unholstered at all times. Random searches are allowed and advised."
+
+/datum/config_entry/string/alert_amber_downto
+ config_entry_value = "A major security emergency is still underway. Non-security personnel are required to obey all relevant instructions from security staff."
+
+/datum/config_entry/string/alert_orange_upto
+ config_entry_value = "A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff."
+
+/datum/config_entry/string/alert_orange_downto
+ config_entry_value = "A major engineering emergency has developed. Non-engineering personnel are required to evacuate any affected areas and obey relevant instructions from engineering staff."
+
+/datum/config_entry/string/alert_violet_upto
+ config_entry_value = "A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff."
+
+/datum/config_entry/string/alert_violet_downto
+ config_entry_value = "A major medical emergency has developed. Non-medical personnel are required to obey all relevant instructions from medical staff."
diff --git a/modular_skyrat/modules/alerts/code/firealarm.dm b/modular_skyrat/modules/alerts/code/firealarm.dm
new file mode 100644
index 00000000000..e749258dc45
--- /dev/null
+++ b/modular_skyrat/modules/alerts/code/firealarm.dm
@@ -0,0 +1,16 @@
+/obj/machinery/firealarm/examine(mob/user)
+ . = ..()
+ if(GLOB.security_level == SEC_LEVEL_GREEN)
+ . += "The current alert level is green."
+ if(GLOB.security_level == SEC_LEVEL_BLUE)
+ . += "The current alert level is blue."
+ if(GLOB.security_level == SEC_LEVEL_AMBER)
+ . += "The current alert level is amber."
+ if(GLOB.security_level == SEC_LEVEL_ORANGE)
+ . += "The current alert level is orange."
+ if(GLOB.security_level == SEC_LEVEL_VIOLET)
+ . += "The current alert level is violet."
+ if(GLOB.security_level == SEC_LEVEL_RED)
+ . += "The current alert level is red!"
+ if(GLOB.security_level == SEC_LEVEL_DELTA)
+ . += "The current alert level is delta! Evacuate!"
diff --git a/modular_skyrat/modules/alerts/code/set_security_level.dm b/modular_skyrat/modules/alerts/code/set_security_level.dm
index a0d571aff95..0f337fa9b70 100644
--- a/modular_skyrat/modules/alerts/code/set_security_level.dm
+++ b/modular_skyrat/modules/alerts/code/set_security_level.dm
@@ -1,9 +1,185 @@
-/proc/set_security_level_skyrat(level)
+/proc/set_security_level(level)
+ level = seclevel2num(level) || level
+
+ //Will not be announced if you try to set to the same level as it already is
+ if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level)
+ play_security_alert_sound(level)
+ switch(level)
+ if(SEC_LEVEL_GREEN)
+ minor_announce(CONFIG_GET(string/alert_green), "Attention! Alert level lowered to green:")
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ if(GLOB.security_level >= SEC_LEVEL_RED)
+ SSshuttle.emergency.modTimer(4)
+ else
+ SSshuttle.emergency.modTimer(2)
+ GLOB.security_level = SEC_LEVEL_GREEN
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
+ if(SEC_LEVEL_BLUE)
+ if(GLOB.security_level < SEC_LEVEL_BLUE)
+ minor_announce(CONFIG_GET(string/alert_blue_upto), "Attention! Alert level elevated to blue:",1)
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ SSshuttle.emergency.modTimer(0.5)
+ else
+ minor_announce(CONFIG_GET(string/alert_blue_downto), "Attention! Alert level lowered to blue:")
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ SSshuttle.emergency.modTimer(2)
+ GLOB.security_level = SEC_LEVEL_BLUE
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
+ if(SEC_LEVEL_VIOLET)
+ if(GLOB.security_level < SEC_LEVEL_VIOLET)
+ minor_announce(CONFIG_GET(string/alert_violet_upto), "Attention! Alert level set to violet:",1)
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ if(GLOB.security_level == SEC_LEVEL_GREEN)
+ SSshuttle.emergency.modTimer(0.4)
+ else
+ SSshuttle.emergency.modTimer(0.66)
+ else
+ minor_announce(CONFIG_GET(string/alert_violet_downto), "Attention! Alert level set to violet:")
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ SSshuttle.emergency.modTimer(1.6)
+ GLOB.security_level = SEC_LEVEL_VIOLET
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
+ if(SEC_LEVEL_ORANGE)
+ if(GLOB.security_level < SEC_LEVEL_ORANGE)
+ minor_announce(CONFIG_GET(string/alert_orange_upto), "Attention! Alert level set to orange:",1)
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ if(GLOB.security_level == SEC_LEVEL_GREEN)
+ SSshuttle.emergency.modTimer(0.4)
+ else
+ SSshuttle.emergency.modTimer(0.66)
+ else
+ minor_announce(CONFIG_GET(string/alert_orange_downto), "Attention! Alert level set to orange:")
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ SSshuttle.emergency.modTimer(1.6)
+ GLOB.security_level = SEC_LEVEL_ORANGE
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
+ if(SEC_LEVEL_AMBER)
+ if(GLOB.security_level < SEC_LEVEL_AMBER)
+ minor_announce(CONFIG_GET(string/alert_amber_upto), "Attention! Alert level set to amber:",1) //Skyrat change
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ if(GLOB.security_level == SEC_LEVEL_GREEN)
+ SSshuttle.emergency.modTimer(0.4)
+ else
+ SSshuttle.emergency.modTimer(0.66)
+ else
+ minor_announce(CONFIG_GET(string/alert_amber_downto), "Attention! Alert level set to amber:") //Skyrat change
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ SSshuttle.emergency.modTimer(1.6)
+ GLOB.security_level = SEC_LEVEL_AMBER
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
+ if(SEC_LEVEL_RED)
+ if(GLOB.security_level < SEC_LEVEL_RED)
+ minor_announce(CONFIG_GET(string/alert_red_upto), "Attention! Code red!",1)
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ if(GLOB.security_level == SEC_LEVEL_GREEN)
+ SSshuttle.emergency.modTimer(0.25)
+ else
+ SSshuttle.emergency.modTimer(0.5)
+ else
+ minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!")
+ GLOB.security_level = SEC_LEVEL_RED
+
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
+ for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines)
+ pod.locked = FALSE
+ if(SEC_LEVEL_DELTA)
+ minor_announce(CONFIG_GET(string/alert_delta), "Attention! Delta Alert level reached!",1)
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ if(GLOB.security_level == SEC_LEVEL_GREEN)
+ SSshuttle.emergency.modTimer(0.25)
+ else if(GLOB.security_level == SEC_LEVEL_BLUE)
+ SSshuttle.emergency.modTimer(0.5)
+ GLOB.security_level = SEC_LEVEL_DELTA
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
+ for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines)
+ pod.locked = FALSE
+ if(level >= SEC_LEVEL_RED)
+ for(var/obj/machinery/door/D in GLOB.machines)
+ if(D.red_alert_access)
+ D.visible_message("[D] whirrs as it automatically lifts access requirements!")
+ playsound(D, 'sound/machines/boltsup.ogg', 50, TRUE)
+ SSblackbox.record_feedback("tally", "security_level_changes", 1, get_security_level())
+ SSnightshift.check_nightshift()
+ else
+ return
+
+/proc/get_security_level()
+ switch(GLOB.security_level)
+ if(SEC_LEVEL_GREEN)
+ return "green"
+ if(SEC_LEVEL_BLUE)
+ return "blue"
+ if(SEC_LEVEL_VIOLET)
+ return "violet"
+ if(SEC_LEVEL_ORANGE)
+ return "orange"
+ if(SEC_LEVEL_AMBER)
+ return "amber"
+ if(SEC_LEVEL_RED)
+ return "red"
+ if(SEC_LEVEL_DELTA)
+ return "delta"
+
+/proc/num2seclevel(num)
+ switch(num)
+ if(SEC_LEVEL_GREEN)
+ return "green"
+ if(SEC_LEVEL_BLUE)
+ return "blue"
+ if(SEC_LEVEL_VIOLET)
+ return "violet"
+ if(SEC_LEVEL_ORANGE)
+ return "orange"
+ if(SEC_LEVEL_AMBER)
+ return "amber"
+ if(SEC_LEVEL_RED)
+ return "red"
+ if(SEC_LEVEL_DELTA)
+ return "delta"
+
+/proc/seclevel2num(seclevel)
+ switch( lowertext(seclevel) )
+ if("green")
+ return SEC_LEVEL_GREEN
+ if("blue")
+ return SEC_LEVEL_BLUE
+ if("violet")
+ return SEC_LEVEL_VIOLET
+ if("orange")
+ return SEC_LEVEL_ORANGE
+ if("amber")
+ return SEC_LEVEL_AMBER
+ if("red")
+ return SEC_LEVEL_RED
+ if("delta")
+ return SEC_LEVEL_DELTA
+
+/proc/play_security_alert_sound(level)
switch(level)
if(SEC_LEVEL_BLUE)
- alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/voyalert.ogg', volume = 50)
+ alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg', volume = 50)
+ if(SEC_LEVEL_VIOLET)
+ alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/notice1.ogg', volume = 50)
+ if(SEC_LEVEL_ORANGE)
+ alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/notice1.ogg', volume = 50)
+ if(SEC_LEVEL_AMBER)
+ alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/notice1.ogg', volume = 50)
if(SEC_LEVEL_RED)
- alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/tas_red_alert.ogg', volume = 50)
+ alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/redalert1.ogg', volume = 50)
if(SEC_LEVEL_DELTA)
alert_sound_to_playing('modular_skyrat/modules/alerts/sound/misc/deltaklaxon.ogg')
diff --git a/modular_skyrat/modules/alerts/icons/obj/monitors.dmi b/modular_skyrat/modules/alerts/icons/obj/monitors.dmi
new file mode 100644
index 00000000000..507e846e81f
Binary files /dev/null and b/modular_skyrat/modules/alerts/icons/obj/monitors.dmi differ
diff --git a/modular_skyrat/modules/alerts/readme.md b/modular_skyrat/modules/alerts/readme.md
new file mode 100644
index 00000000000..49129824a45
--- /dev/null
+++ b/modular_skyrat/modules/alerts/readme.md
@@ -0,0 +1,29 @@
+## Title: Alerts
+
+MODULE ID: ALERTS
+
+### Description:
+
+Adds new alert levels, and some extra details regarding the alerts
+
+### TG Proc Changes:
+- EDIT: code/controllers/subsystem/shuttle.dm > /datum/controller/subsystem/shuttle/proc/canRecall()
+- EDIT: code/game/machinery/computer/communications.dm > /obj/machinery/computer/communications/Topic(), /obj/machinery/computer/communications/ui_interact()
+- EDIT: code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/LateChoices()
+- MOVED: code/modules/security_levels/security_levels.dm > about the entire file
+
+### Defines:
+
+ ./code/__DEFINES/misc.dm > moved alert defines to: code/__DEFINES/~skyrat_defines/security_alerts.dm
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+Azarak - Porting
+Afya - OG code
diff --git a/modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg b/modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg
new file mode 100644
index 00000000000..f450185e274
Binary files /dev/null and b/modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 8e77046a336..60c2e4691af 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -141,6 +141,7 @@
#include "code\__DEFINES\~skyrat_defines\preferences.dm"
#include "code\__DEFINES\~skyrat_defines\robot_defines.dm"
#include "code\__DEFINES\~skyrat_defines\say.dm"
+#include "code\__DEFINES\~skyrat_defines\security_alerts.dm"
#include "code\__DEFINES\~skyrat_defines\signals.dm"
#include "code\__DEFINES\~skyrat_defines\traits.dm"
#include "code\__HELPERS\_lists.dm"
@@ -3266,6 +3267,8 @@
#include "modular_skyrat\master_files\code\modules\clothing\non_anthro_clothes.dm"
#include "modular_skyrat\master_files\code\modules\power\lighting.dm"
#include "modular_skyrat\modules\admin\code\loud_say.dm"
+#include "modular_skyrat\modules\alerts\code\config.dm"
+#include "modular_skyrat\modules\alerts\code\firealarm.dm"
#include "modular_skyrat\modules\alerts\code\set_security_level.dm"
#include "modular_skyrat\modules\altborgs\code\game\objects\items\robot_items.dm"
#include "modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\inventory.dm"