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/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm
index 341e6a05acf4..6905c47febb8 100644
--- a/code/game/machinery/ARES/ARES_interface.dm
+++ b/code/game/machinery/ARES/ARES_interface.dm
@@ -522,5 +522,12 @@
sec_vent.create_gas(VENT_GAS_CN20_XENO, 6, 5 SECONDS)
log_admin("[key_name(user)] released nerve gas from Vent '[sec_vent.vent_tag]' via ARES.")
+ if("security_lockdown")
+ if(!COOLDOWN_FINISHED(datacore, aicore_lockdown))
+ to_chat(user, SPAN_BOLDWARNING("AI Core Lockdown procedures are on cooldown! They will be ready in [COOLDOWN_SECONDSLEFT(datacore, aicore_lockdown)] seconds!"))
+ return FALSE
+ aicore_lockdown(user)
+ return TRUE
+
if(playsound)
playsound(src, "keyboard_alt", 15, 1)
diff --git a/code/game/machinery/ARES/ARES_interface_apollo.dm b/code/game/machinery/ARES/ARES_interface_apollo.dm
index 48fcad588574..37b2fbda0ecb 100644
--- a/code/game/machinery/ARES/ARES_interface_apollo.dm
+++ b/code/game/machinery/ARES/ARES_interface_apollo.dm
@@ -158,29 +158,29 @@
return
var/playsound = TRUE
- var/mob/living/carbon/human/operator = ui.user
+ var/mob/living/carbon/human/user = ui.user
switch (action)
if("go_back")
if(!last_menu)
- return to_chat(operator, SPAN_WARNING("Error, no previous page detected."))
+ return to_chat(user, SPAN_WARNING("Error, no previous page detected."))
var/temp_holder = current_menu
current_menu = last_menu
last_menu = temp_holder
if("login")
- var/obj/item/card/id/idcard = operator.get_active_hand()
+ var/obj/item/card/id/idcard = user.get_active_hand()
if(istype(idcard))
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
- else if(operator.wear_id)
- idcard = operator.wear_id
+ else if(user.wear_id)
+ idcard = user.wear_id
if(istype(idcard))
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else
- to_chat(operator, SPAN_WARNING("You require an ID card to access this terminal!"))
+ to_chat(user, SPAN_WARNING("You require an ID card to access this terminal!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
if(authentication)
@@ -222,23 +222,23 @@
if("new_report")
var/priority_report = FALSE
- var/maint_type = tgui_input_list(operator, "What is the type of maintenance item you wish to report?", "Report Category", GLOB.maintenance_categories, 30 SECONDS)
+ var/maint_type = tgui_input_list(user, "What is the type of maintenance item you wish to report?", "Report Category", GLOB.maintenance_categories, 30 SECONDS)
switch(maint_type)
if("Major Structural Damage", "Fire", "Communications Failure", "Power Generation Failure")
priority_report = TRUE
if(!maint_type)
return FALSE
- var/details = tgui_input_text(operator, "What are the details for this report?", "Ticket Details", encode = FALSE)
+ var/details = tgui_input_text(user, "What are the details for this report?", "Ticket Details", encode = FALSE)
if(!details)
return FALSE
if((authentication >= APOLLO_ACCESS_REPORTER) && !priority_report)
- var/is_priority = tgui_alert(operator, "Is this a priority report?", "Priority designation", list("Yes", "No"))
+ var/is_priority = tgui_alert(user, "Is this a priority report?", "Priority designation", list("Yes", "No"))
if(is_priority == "Yes")
priority_report = TRUE
- var/confirm = alert(operator, "Please confirm the submission of your maintenance report. \n\n Priority: [priority_report ? "Yes" : "No"]\n Category: '[maint_type]'\n Details: '[details]'\n\n Is this correct?", "Confirmation", "Yes", "No")
+ var/confirm = alert(user, "Please confirm the submission of your maintenance report. \n\n Priority: [priority_report ? "Yes" : "No"]\n Category: '[maint_type]'\n Details: '[details]'\n\n Is this correct?", "Confirmation", "Yes", "No")
if(confirm == "Yes")
if(link)
var/datum/ares_ticket/maintenance/maint_ticket = new(last_login, maint_type, details, priority_report)
@@ -247,7 +247,7 @@
ares_apollo_talk("Priority Maintenance Report: [maint_type] - ID [maint_ticket.ticket_id]. Seek and resolve.")
else
send_notifcation()
- log_game("ARES: Maintenance Ticket '\ref[maint_ticket]' created by [key_name(operator)] as [last_login] with Category '[maint_type]' and Details of '[details]'.")
+ log_game("ARES: Maintenance Ticket '\ref[maint_ticket]' created by [key_name(user)] as [last_login] with Category '[maint_type]' and Details of '[details]'.")
return TRUE
return FALSE
@@ -259,14 +259,14 @@
var/assigned = ticket.ticket_assignee
if(assigned)
if(assigned == last_login)
- var/prompt = tgui_alert(operator, "You already claimed this ticket! Do you wish to drop your claim?", "Unclaim ticket", list("Yes", "No"))
+ var/prompt = tgui_alert(user, "You already claimed this ticket! Do you wish to drop your claim?", "Unclaim ticket", list("Yes", "No"))
if(prompt != "Yes")
return FALSE
/// set ticket back to pending
ticket.ticket_assignee = null
ticket.ticket_status = TICKET_PENDING
return claim
- var/choice = tgui_alert(operator, "This ticket has already been claimed by [assigned]! Do you wish to override their claim?", "Claim Override", list("Yes", "No"))
+ var/choice = tgui_alert(user, "This ticket has already been claimed by [assigned]! Do you wish to override their claim?", "Claim Override", list("Yes", "No"))
if(choice != "Yes")
claim = FALSE
if(claim)
@@ -279,9 +279,9 @@
if(!istype(ticket))
return FALSE
if(ticket.ticket_submitter != last_login)
- to_chat(operator, SPAN_WARNING("You cannot cancel a ticket that does not belong to you!"))
+ to_chat(user, SPAN_WARNING("You cannot cancel a ticket that does not belong to you!"))
return FALSE
- to_chat(operator, SPAN_WARNING("[ticket.ticket_type] [ticket.ticket_id] has been cancelled."))
+ to_chat(user, SPAN_WARNING("[ticket.ticket_type] [ticket.ticket_id] has been cancelled."))
ticket.ticket_status = TICKET_CANCELLED
if(ticket.ticket_priority)
ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been cancelled.")
@@ -294,9 +294,9 @@
if(!istype(ticket))
return FALSE
if(ticket.ticket_assignee != last_login && ticket.ticket_assignee) //must be claimed by you or unclaimed.)
- to_chat(operator, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
+ to_chat(user, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
return FALSE
- var/choice = tgui_alert(operator, "What do you wish to mark the ticket as?", "Mark", list(TICKET_COMPLETED, TICKET_REJECTED), 20 SECONDS)
+ var/choice = tgui_alert(user, "What do you wish to mark the ticket as?", "Mark", list(TICKET_COMPLETED, TICKET_REJECTED), 20 SECONDS)
switch(choice)
if(TICKET_COMPLETED)
ticket.ticket_status = TICKET_COMPLETED
@@ -308,39 +308,39 @@
ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been [choice] by [last_login].")
else
send_notifcation()
- to_chat(operator, SPAN_NOTICE("[ticket.ticket_type] [ticket.ticket_id] marked as [choice]."))
+ to_chat(user, SPAN_NOTICE("[ticket.ticket_type] [ticket.ticket_id] marked as [choice]."))
return TRUE
if("new_access")
- var/obj/item/card/id/idcard = operator.get_active_hand()
+ var/obj/item/card/id/idcard = user.get_active_hand()
var/has_id = FALSE
if(istype(idcard))
has_id = TRUE
- else if(operator.wear_id)
- idcard = operator.wear_id
+ else if(user.wear_id)
+ idcard = user.wear_id
if(istype(idcard))
has_id = TRUE
if(!has_id)
- to_chat(operator, SPAN_WARNING("You require an ID card to request an access ticket!"))
+ to_chat(user, SPAN_WARNING("You require an ID card to request an access ticket!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
if(idcard.registered_name != last_login)
- to_chat(operator, SPAN_WARNING("This ID card does not match the active login!"))
+ to_chat(user, SPAN_WARNING("This ID card does not match the active login!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
- var/details = tgui_input_text(operator, "What is the purpose of this access ticket?", "Ticket Details", encode = FALSE)
+ var/details = tgui_input_text(user, "What is the purpose of this access ticket?", "Ticket Details", encode = FALSE)
if(!details)
return FALSE
- var/confirm = alert(operator, "Please confirm the submission of your access ticket request.\n\nHolder: '[last_login]'\nDetails: '[details]'\n\nIs this correct?", "Confirmation", "Yes", "No")
+ var/confirm = alert(user, "Please confirm the submission of your access ticket request.\n\nHolder: '[last_login]'\nDetails: '[details]'\n\nIs this correct?", "Confirmation", "Yes", "No")
if(confirm != "Yes" || !link)
return FALSE
var/datum/ares_ticket/access/access_ticket = new(last_login, details, FALSE, idcard.registered_gid)
link.waiting_ids += idcard
link.tickets_access += access_ticket
- log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(operator)] as [last_login] with Details of '[details]'.")
- message_admins(SPAN_STAFF_IC("[key_name_admin(operator)] created a new ARES Access Ticket."), 1)
+ log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(user)] as [last_login] with Details of '[details]'.")
+ message_admins(SPAN_STAFF_IC("[key_name_admin(user)] created a new ARES Access Ticket."), 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] requesting access for '[details].")
return TRUE
@@ -361,9 +361,9 @@
access_ticket.ticket_status = TICKET_RETURNED
identification.access -= ACCESS_MARINE_AI_TEMP
- identification.modification_log += "Temporary AI Access self-returned by [key_name(operator)]."
+ identification.modification_log += "Temporary AI Access self-returned by [key_name(user)]."
- to_chat(operator, SPAN_NOTICE("Temporary Access Ticket surrendered."))
+ to_chat(user, SPAN_NOTICE("Temporary Access Ticket surrendered."))
playsound(src, 'sound/machines/chime.ogg', 15, 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] surrendered their access.")
@@ -372,7 +372,7 @@
datacore.apollo_login_list += "[last_login] at [worldtime2text()], Surrendered Temporary Access Ticket."
return TRUE
- to_chat(operator, SPAN_WARNING("This ID card does not have an access ticket!"))
+ to_chat(user, SPAN_WARNING("This ID card does not have an access ticket!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
@@ -384,7 +384,7 @@
for(var/obj/item/card/id/identification in link.waiting_ids)
if(identification.registered_gid != access_ticket.user_id_num)
continue
- identification.handle_ares_access(last_login, operator)
+ identification.handle_ares_access(last_login, user)
access_ticket.ticket_status = TICKET_GRANTED
playsound(src, 'sound/machines/chime.ogg', 15, 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] was granted access by [last_login].")
@@ -392,7 +392,7 @@
for(var/obj/item/card/id/identification in link.active_ids)
if(identification.registered_gid != access_ticket.user_id_num)
continue
- identification.handle_ares_access(last_login, operator)
+ identification.handle_ares_access(last_login, user)
access_ticket.ticket_status = TICKET_REVOKED
playsound(src, 'sound/machines/chime.ogg', 15, 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] had access revoked by [last_login].")
@@ -404,10 +404,10 @@
if(!istype(access_ticket))
return FALSE
if(access_ticket.ticket_assignee != last_login && access_ticket.ticket_assignee) //must be claimed by you or unclaimed.)
- to_chat(operator, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
+ to_chat(user, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
return FALSE
access_ticket.ticket_status = TICKET_REJECTED
- to_chat(operator, SPAN_NOTICE("[access_ticket.ticket_type] [access_ticket.ticket_id] marked as rejected."))
+ to_chat(user, SPAN_NOTICE("[access_ticket.ticket_type] [access_ticket.ticket_id] marked as rejected."))
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] was rejected access by [last_login].")
for(var/obj/item/card/id/identification in link.waiting_ids)
if(identification.registered_gid != access_ticket.user_id_num)
@@ -422,36 +422,41 @@
playsound = FALSE
var/obj/structure/pipes/vents/pump/no_boom/gas/sec_vent = locate(params["vent"])
if(!istype(sec_vent) || sec_vent.welded)
- to_chat(operator, SPAN_WARNING("ERROR: Gas release failure."))
+ to_chat(user, SPAN_WARNING("ERROR: Gas release failure."))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
if(!COOLDOWN_FINISHED(sec_vent, vent_trigger_cooldown))
- to_chat(operator, SPAN_WARNING("ERROR: Insufficient gas reserve for this vent."))
+ to_chat(user, SPAN_WARNING("ERROR: Insufficient gas reserve for this vent."))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
- to_chat(operator, SPAN_WARNING("Initiating gas release from [sec_vent.vent_tag]."))
+ to_chat(user, SPAN_WARNING("Initiating gas release from [sec_vent.vent_tag]."))
playsound(src, 'sound/machines/chime.ogg', 15, 1)
COOLDOWN_START(sec_vent, vent_trigger_cooldown, COOLDOWN_ARES_VENT)
ares_apollo_talk("Nerve Gas release imminent from [sec_vent.vent_tag].")
log_ares_security("Nerve Gas Release", "[last_login] released Nerve Gas from Vent '[sec_vent.vent_tag]'.")
sec_vent.create_gas(VENT_GAS_CN20_XENO, 6, 5 SECONDS)
- log_admin("[key_name(operator)] released nerve gas from Vent '[sec_vent.vent_tag]' via ARES.")
+ log_admin("[key_name(user)] released nerve gas from Vent '[sec_vent.vent_tag]' via ARES.")
+
+ if("security_lockdown")
+ if(!COOLDOWN_FINISHED(datacore, aicore_lockdown))
+ to_chat(user, SPAN_BOLDWARNING("AI Core Lockdown procedures are on cooldown! They will be ready in [COOLDOWN_SECONDSLEFT(datacore, aicore_lockdown)] seconds!"))
+ return FALSE
+ aicore_lockdown(user)
+ return TRUE
if(playsound)
playsound(src, "keyboard_alt", 15, 1)
/obj/item/card/id/proc/handle_ares_access(logged_in = MAIN_AI_SYSTEM, mob/user)
- var/operator = key_name(user)
+ var/changer = logged_in
+ if(user)
+ changer = key_name(user)
var/datum/ares_link/link = GLOB.ares_link
- if(logged_in == MAIN_AI_SYSTEM)
- if(!user)
- operator = "[MAIN_AI_SYSTEM] (Automated)"
- else
- operator = "[user.ckey]/([MAIN_AI_SYSTEM])"
+
if(ACCESS_MARINE_AI_TEMP in access)
access -= ACCESS_MARINE_AI_TEMP
link.active_ids -= src
- modification_log += "Temporary AI access revoked by [operator]"
+ log_idmod(src, "Temporary AI access revoked by [logged_in]", changer)
to_chat(user, SPAN_NOTICE("Access revoked from [registered_name]."))
var/mob/living/carbon/human/id_owner = registered_ref?.resolve()
if(id_owner)
@@ -459,7 +464,7 @@
playsound_client(id_owner?.client, 'sound/machines/pda_ping.ogg', src, 25, 0)
else
access += ACCESS_MARINE_AI_TEMP
- modification_log += "Temporary AI access granted by [operator]"
+ log_idmod(src, "Temporary AI access granted by [logged_in]", changer)
to_chat(user, SPAN_NOTICE("Access granted to [registered_name]."))
link.waiting_ids -= src
link.active_ids += src
diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm
index 05f110ec1a0c..8ecb711e9fb7 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_active = FALSE
+
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/ARES/apollo_pda.dm b/code/game/machinery/ARES/apollo_pda.dm
index e447bb6f7ee7..2f18a5ba0522 100644
--- a/code/game/machinery/ARES/apollo_pda.dm
+++ b/code/game/machinery/ARES/apollo_pda.dm
@@ -181,29 +181,29 @@
return
var/playsound = TRUE
- var/mob/living/carbon/human/operator = ui.user
+ var/mob/living/carbon/human/user = ui.user
switch (action)
if("go_back")
if(!last_menu)
- return to_chat(operator, SPAN_WARNING("Error, no previous page detected."))
+ return to_chat(user, SPAN_WARNING("Error, no previous page detected."))
var/temp_holder = current_menu
current_menu = last_menu
last_menu = temp_holder
if("login")
- var/obj/item/card/id/idcard = operator.get_active_hand()
+ var/obj/item/card/id/idcard = user.get_active_hand()
if(istype(idcard))
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
- else if(operator.wear_id)
- idcard = operator.wear_id
+ else if(user.wear_id)
+ idcard = user.wear_id
if(istype(idcard))
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else
- to_chat(operator, SPAN_WARNING("You require an ID card to access this terminal!"))
+ to_chat(user, SPAN_WARNING("You require an ID card to access this terminal!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
if(authentication)
@@ -248,23 +248,23 @@
if("new_report")
var/priority_report = FALSE
- var/maint_type = tgui_input_list(operator, "What is the type of maintenance item you wish to report?", "Report Category", GLOB.maintenance_categories, 30 SECONDS)
+ var/maint_type = tgui_input_list(user, "What is the type of maintenance item you wish to report?", "Report Category", GLOB.maintenance_categories, 30 SECONDS)
switch(maint_type)
if("Major Structural Damage", "Fire", "Communications Failure", "Power Generation Failure")
priority_report = TRUE
if(!maint_type)
return FALSE
- var/details = tgui_input_text(operator, "What are the details for this report?", "Ticket Details", encode = FALSE)
+ var/details = tgui_input_text(user, "What are the details for this report?", "Ticket Details", encode = FALSE)
if(!details)
return FALSE
if((authentication >= APOLLO_ACCESS_REPORTER) && !priority_report)
- var/is_priority = tgui_alert(operator, "Is this a priority report?", "Priority designation", list("Yes", "No"))
+ var/is_priority = tgui_alert(user, "Is this a priority report?", "Priority designation", list("Yes", "No"))
if(is_priority == "Yes")
priority_report = TRUE
- var/confirm = alert(operator, "Please confirm the submission of your maintenance report. \n\n Priority: [priority_report ? "Yes" : "No"]\n Category: '[maint_type]'\n Details: '[details]'\n\n Is this correct?", "Confirmation", "Yes", "No")
+ var/confirm = alert(user, "Please confirm the submission of your maintenance report. \n\n Priority: [priority_report ? "Yes" : "No"]\n Category: '[maint_type]'\n Details: '[details]'\n\n Is this correct?", "Confirmation", "Yes", "No")
if(confirm == "Yes")
if(link)
var/datum/ares_ticket/maintenance/maint_ticket = new(last_login, maint_type, details, priority_report)
@@ -273,7 +273,7 @@
ares_apollo_talk("Priority Maintenance Report: [maint_type] - ID [maint_ticket.ticket_id]. Seek and resolve.")
else
send_notifcation()
- log_game("ARES: Maintenance Ticket '\ref[maint_ticket]' created by [key_name(operator)] as [last_login] with Category '[maint_type]' and Details of '[details]'.")
+ log_game("ARES: Maintenance Ticket '\ref[maint_ticket]' created by [key_name(user)] as [last_login] with Category '[maint_type]' and Details of '[details]'.")
return TRUE
return FALSE
@@ -285,14 +285,14 @@
var/assigned = ticket.ticket_assignee
if(assigned)
if(assigned == last_login)
- var/prompt = tgui_alert(operator, "You already claimed this ticket! Do you wish to drop your claim?", "Unclaim ticket", list("Yes", "No"))
+ var/prompt = tgui_alert(user, "You already claimed this ticket! Do you wish to drop your claim?", "Unclaim ticket", list("Yes", "No"))
if(prompt != "Yes")
return FALSE
/// set ticket back to pending
ticket.ticket_assignee = null
ticket.ticket_status = TICKET_PENDING
return claim
- var/choice = tgui_alert(operator, "This ticket has already been claimed by [assigned]! Do you wish to override their claim?", "Claim Override", list("Yes", "No"))
+ var/choice = tgui_alert(user, "This ticket has already been claimed by [assigned]! Do you wish to override their claim?", "Claim Override", list("Yes", "No"))
if(choice != "Yes")
claim = FALSE
if(claim)
@@ -305,9 +305,9 @@
if(!istype(ticket))
return FALSE
if(ticket.ticket_submitter != last_login)
- to_chat(operator, SPAN_WARNING("You cannot cancel a ticket that does not belong to you!"))
+ to_chat(user, SPAN_WARNING("You cannot cancel a ticket that does not belong to you!"))
return FALSE
- to_chat(operator, SPAN_WARNING("[ticket.ticket_type] [ticket.ticket_id] has been cancelled."))
+ to_chat(user, SPAN_WARNING("[ticket.ticket_type] [ticket.ticket_id] has been cancelled."))
ticket.ticket_status = TICKET_CANCELLED
if(ticket.ticket_priority)
ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been cancelled.")
@@ -320,9 +320,9 @@
if(!istype(ticket))
return FALSE
if(ticket.ticket_assignee != last_login && ticket.ticket_assignee) //must be claimed by you or unclaimed.)
- to_chat(operator, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
+ to_chat(user, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
return FALSE
- var/choice = tgui_alert(operator, "What do you wish to mark the ticket as?", "Mark", list(TICKET_COMPLETED, TICKET_REJECTED), 20 SECONDS)
+ var/choice = tgui_alert(user, "What do you wish to mark the ticket as?", "Mark", list(TICKET_COMPLETED, TICKET_REJECTED), 20 SECONDS)
switch(choice)
if(TICKET_COMPLETED)
ticket.ticket_status = TICKET_COMPLETED
@@ -334,39 +334,39 @@
ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been [choice] by [last_login].")
else
send_notifcation()
- to_chat(operator, SPAN_NOTICE("[ticket.ticket_type] [ticket.ticket_id] marked as [choice]."))
+ to_chat(user, SPAN_NOTICE("[ticket.ticket_type] [ticket.ticket_id] marked as [choice]."))
return TRUE
if("new_access")
- var/obj/item/card/id/idcard = operator.get_active_hand()
+ var/obj/item/card/id/idcard = user.get_active_hand()
var/has_id = FALSE
if(istype(idcard))
has_id = TRUE
- else if(operator.wear_id)
- idcard = operator.wear_id
+ else if(user.wear_id)
+ idcard = user.wear_id
if(istype(idcard))
has_id = TRUE
if(!has_id)
- to_chat(operator, SPAN_WARNING("You require an ID card to request an access ticket!"))
+ to_chat(user, SPAN_WARNING("You require an ID card to request an access ticket!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
if(idcard.registered_name != last_login)
- to_chat(operator, SPAN_WARNING("This ID card does not match the active login!"))
+ to_chat(user, SPAN_WARNING("This ID card does not match the active login!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
- var/details = tgui_input_text(operator, "What is the purpose of this access ticket?", "Ticket Details", encode = FALSE)
+ var/details = tgui_input_text(user, "What is the purpose of this access ticket?", "Ticket Details", encode = FALSE)
if(!details)
return FALSE
- var/confirm = alert(operator, "Please confirm the submission of your access ticket request.\n\nHolder: '[last_login]'\nDetails: '[details]'\n\nIs this correct?", "Confirmation", "Yes", "No")
+ var/confirm = alert(user, "Please confirm the submission of your access ticket request.\n\nHolder: '[last_login]'\nDetails: '[details]'\n\nIs this correct?", "Confirmation", "Yes", "No")
if(confirm != "Yes" || !link)
return FALSE
var/datum/ares_ticket/access/access_ticket = new(last_login, details, FALSE, idcard.registered_gid)
link.waiting_ids += idcard
link.tickets_access += access_ticket
- log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(operator)] as [last_login] with Details of '[details]'.")
- message_admins(SPAN_STAFF_IC("[key_name_admin(operator)] created a new ARES Access Ticket."), 1)
+ log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(user)] as [last_login] with Details of '[details]'.")
+ message_admins(SPAN_STAFF_IC("[key_name_admin(user)] created a new ARES Access Ticket."), 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] requesting access for '[details].")
return TRUE
@@ -387,9 +387,9 @@
access_ticket.ticket_status = TICKET_RETURNED
identification.access -= ACCESS_MARINE_AI_TEMP
- identification.modification_log += "Temporary AI Access self-returned by [key_name(operator)]."
+ identification.modification_log += "Temporary AI Access self-returned by [key_name(user)]."
- to_chat(operator, SPAN_NOTICE("Temporary Access Ticket surrendered."))
+ to_chat(user, SPAN_NOTICE("Temporary Access Ticket surrendered."))
playsound(src, 'sound/machines/chime.ogg', 15, 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] surrendered their access.")
@@ -398,7 +398,7 @@
datacore.apollo_login_list += "[last_login] at [worldtime2text()], Surrendered Temporary Access Ticket."
return TRUE
- to_chat(operator, SPAN_WARNING("This ID card does not have an access ticket!"))
+ to_chat(user, SPAN_WARNING("This ID card does not have an access ticket!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
@@ -410,7 +410,7 @@
for(var/obj/item/card/id/identification in link.waiting_ids)
if(identification.registered_gid != access_ticket.user_id_num)
continue
- identification.handle_ares_access(last_login, operator)
+ identification.handle_ares_access(last_login, user)
access_ticket.ticket_status = TICKET_GRANTED
playsound(src, 'sound/machines/chime.ogg', 15, 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] was granted access by [last_login].")
@@ -418,7 +418,7 @@
for(var/obj/item/card/id/identification in link.active_ids)
if(identification.registered_gid != access_ticket.user_id_num)
continue
- identification.handle_ares_access(last_login, operator)
+ identification.handle_ares_access(last_login, user)
access_ticket.ticket_status = TICKET_REVOKED
playsound(src, 'sound/machines/chime.ogg', 15, 1)
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] had access revoked by [last_login].")
@@ -430,10 +430,10 @@
if(!istype(access_ticket))
return FALSE
if(access_ticket.ticket_assignee != last_login && access_ticket.ticket_assignee) //must be claimed by you or unclaimed.)
- to_chat(operator, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
+ to_chat(user, SPAN_WARNING("You cannot update a ticket that is not assigned to you!"))
return FALSE
access_ticket.ticket_status = TICKET_REJECTED
- to_chat(operator, SPAN_NOTICE("[access_ticket.ticket_type] [access_ticket.ticket_id] marked as rejected."))
+ to_chat(user, SPAN_NOTICE("[access_ticket.ticket_type] [access_ticket.ticket_id] marked as rejected."))
ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] was rejected access by [last_login].")
for(var/obj/item/card/id/identification in link.waiting_ids)
if(identification.registered_gid != access_ticket.user_id_num)
@@ -448,20 +448,27 @@
playsound = FALSE
var/obj/structure/pipes/vents/pump/no_boom/gas/sec_vent = locate(params["vent"])
if(!istype(sec_vent) || sec_vent.welded)
- to_chat(operator, SPAN_WARNING("ERROR: Gas release failure."))
+ to_chat(user, SPAN_WARNING("ERROR: Gas release failure."))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
if(!COOLDOWN_FINISHED(sec_vent, vent_trigger_cooldown))
- to_chat(operator, SPAN_WARNING("ERROR: Insufficient gas reserve for this vent."))
+ to_chat(user, SPAN_WARNING("ERROR: Insufficient gas reserve for this vent."))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE
- to_chat(operator, SPAN_WARNING("Initiating gas release from [sec_vent.vent_tag]."))
+ to_chat(user, SPAN_WARNING("Initiating gas release from [sec_vent.vent_tag]."))
playsound(src, 'sound/machines/chime.ogg', 15, 1)
COOLDOWN_START(sec_vent, vent_trigger_cooldown, COOLDOWN_ARES_VENT)
ares_apollo_talk("Nerve Gas release imminent from [sec_vent.vent_tag].")
log_ares_security("Nerve Gas Release", "[last_login] released Nerve Gas from Vent '[sec_vent.vent_tag]'.")
sec_vent.create_gas(VENT_GAS_CN20_XENO, 6, 5 SECONDS)
- log_admin("[key_name(operator)] released nerve gas from Vent '[sec_vent.vent_tag]' via ARES.")
+ log_admin("[key_name(user)] released nerve gas from Vent '[sec_vent.vent_tag]' via ARES.")
+
+ if("security_lockdown")
+ if(!COOLDOWN_FINISHED(datacore, aicore_lockdown))
+ to_chat(user, SPAN_BOLDWARNING("AI Core Lockdown procedures are on cooldown! They will be ready in [COOLDOWN_SECONDSLEFT(datacore, aicore_lockdown)] seconds!"))
+ return FALSE
+ aicore_lockdown(user)
+ return TRUE
if(playsound)
var/sound = pick('sound/machines/pda_button1.ogg', 'sound/machines/pda_button2.ogg')
diff --git a/code/game/machinery/aicore_lockdown.dm b/code/game/machinery/aicore_lockdown.dm
new file mode 100644
index 000000000000..aaedf0fbfd63
--- /dev/null
+++ b/code/game/machinery/aicore_lockdown.dm
@@ -0,0 +1,118 @@
+/obj/structure/machinery/aicore_lockdown
+ name = "AI Core Lockdown"
+ icon_state = "big_red_button_tablev"
+ unslashable = TRUE
+ unacidable = TRUE
+
+/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(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)
+
+/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))
+
+
+/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 = "Are you sure you want to trigger an AI Core lockdown? This will raise to red alert, and lockdown the AI Core."
+
+ if(GLOB.ares_datacore.ai_lockdown_active == TRUE)
+ prompt = "Are you sure you want to lift the AI Core lockdown? This will lower to blue alert."
+
+ var/choice = tgui_alert(src, prompt, "Choose.", list("Yes", "No"), 20 SECONDS)
+ if(choice != "Yes")
+ return FALSE
+
+ choice = tgui_alert(src, "Do you want to use a custom announcement?", "Choose.", list("Yes", "No"), 20 SECONDS)
+ if(choice == "Yes")
+ var/message = tgui_input_text(src, "Please enter announcement text.", "what?")
+ aicore_lockdown(usr, message, admin = 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 AI core lockdown!"
+ var/ares_log = "[user.name] triggered triggered AI Core Emergency Lockdown."
+ if(message)
+ 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."
+
+ if(GLOB.ares_datacore.ai_lockdown_active)
+ GLOB.ares_datacore.ai_lockdown_active = FALSE
+ if(!message)
+ 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."
+
+ if(GLOB.security_level > SEC_LEVEL_GREEN)
+ set_security_level(SEC_LEVEL_BLUE, TRUE, FALSE)
+ SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AICORE_LIFT)
+ else
+ GLOB.ares_datacore.ai_lockdown_active = TRUE
+ if(!message)
+ message = "ATTENTION! \n\nCORE SECURITY ALERT. \n\nAI CORE UNDER LOCKDOWN."
+ if(GLOB.security_level < SEC_LEVEL_RED)
+ set_security_level(SEC_LEVEL_RED, TRUE, FALSE)
+ SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AICORE_LOCKDOWN)
+
+ COOLDOWN_START(GLOB.ares_datacore, aicore_lockdown, 2 MINUTES)
+ shipwide_ai_announcement(message, MAIN_AI_SYSTEM, 'sound/effects/biohazard.ogg')
+ message_admins(log)
+ log_ares_security("AI Core Lockdown", ares_log)
diff --git a/code/game/machinery/biohazard_lockdown.dm b/code/game/machinery/biohazard_lockdown.dm
index 2e3cbf6de234..fdf7c026185d 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))
@@ -63,8 +63,8 @@ GLOBAL_VAR_INIT(lockdown_state, LOCKDOWN_READY)
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?")
- biohazard_lockdown(usr, whattoannounce, TRUE)
+ var/message = tgui_input_text(src, "Please enter announcement text.", "what?")
+ biohazard_lockdown(usr, message, admin = TRUE)
else
biohazard_lockdown(usr, admin = TRUE)
return TRUE
@@ -83,13 +83,14 @@ 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
- set_security_level(SEC_LEVEL_RED, TRUE, FALSE)
+ GLOB.med_lockdown_state = LOCKDOWN_ACTIVE
+ 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.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."
@@ -97,7 +98,8 @@ GLOBAL_VAR_INIT(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..0a1842134480 100644
--- a/code/game/turfs/floor_types.dm
+++ b/code/game/turfs/floor_types.dm
@@ -325,12 +325,21 @@
/turf/open/floor/almayer/aicore/glowing
icon_state = "ai_floor2"
light_color = "#d69c46"
- light_range = 2
+ light_range = 3
/turf/open/floor/almayer/aicore/glowing/Initialize(mapload, ...)
. = ..()
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/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/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm
index 6e7de1101ae7..ddd4a9dc5d58 100644
--- a/code/modules/paperwork/desk_bell.dm
+++ b/code/modules/paperwork/desk_bell.dm
@@ -93,3 +93,12 @@
flick("desk_bell_activate", src)
times_rang++
return TRUE
+
+/obj/item/desk_bell/ares
+ name = "AI core reception bell"
+
+/obj/item/desk_bell/ares/ring_bell(mob/living/user)
+ if(broken_ringer)
+ return FALSE
+ ares_apollo_talk("Attendence requested at AI Core Reception.")
+ return ..()
diff --git a/colonialmarines.dme b/colonialmarines.dme
index 9392e74febea..cab62dffd2fc 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"
diff --git a/icons/obj/structures/doors/blastdoors_shutters.dmi b/icons/obj/structures/doors/blastdoors_shutters.dmi
index 8c63d0580922..1fe1df44b23a 100644
Binary files a/icons/obj/structures/doors/blastdoors_shutters.dmi and b/icons/obj/structures/doors/blastdoors_shutters.dmi differ
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index 6bc6bfeb4a22..1c2e3e5b68b0 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -14160,6 +14160,15 @@
icon_state = "red"
},
/area/almayer/shipboard/weapon_room)
+"bFg" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "W";
+ layer = 3.3
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"bFj" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -14601,15 +14610,7 @@
name = "\improper ARES Mainframe Shutters";
plane = -7
},
-/obj/structure/machinery/door/poddoor/almayer/blended/aicore/open{
- closed_layer = 3.2;
- id = "ARES Emergency";
- layer = 3.2;
- name = "ARES Emergency Lockdown";
- needs_power = 0;
- open_layer = 1.9;
- plane = -7
- },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -20167,15 +20168,15 @@
/obj/structure/disposalpipe/trunk{
dir = 1
},
-/obj/structure/disposaloutlet{
+/obj/structure/machinery/disposal/delivery{
density = 0;
- desc = "An outlet for the pneumatic delivery system.";
- icon_state = "delivery_outlet";
- name = "take-ins";
- pixel_x = -1;
+ desc = "A pneumatic delivery unit.";
+ icon_state = "delivery_engi";
+ name = "Returns";
pixel_y = 28;
- range = 0
+ pixel_x = 25
},
+/obj/structure/surface/rack,
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"cJK" = (
@@ -22464,7 +22465,9 @@
autoname = 0;
c_tag = "AI - Secondary Processors"
},
-/turf/open/floor/almayer/aicore/glowing/no_build,
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
/area/almayer/command/airoom)
"dzG" = (
/obj/structure/reagent_dispensers/peppertank{
@@ -25241,6 +25244,19 @@
icon_state = "plate"
},
/area/almayer/shipboard/starboard_point_defense)
+"etM" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "NE-out";
+ pixel_y = 1
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"etN" = (
/obj/effect/landmark/yautja_teleport,
/turf/open/floor/plating/plating_catwalk,
@@ -26358,7 +26374,7 @@
/obj/structure/machinery/door_control{
id = "ARES StairsUpper";
name = "ARES Core Access";
- pixel_x = -10;
+ pixel_x = -5;
pixel_y = -24;
req_one_access_txt = "91;92"
},
@@ -26366,20 +26382,14 @@
id = "ARES StairsLock";
name = "ARES Exterior Lockdown";
pixel_y = -24;
- req_one_access_txt = "91;92"
+ req_one_access_txt = "91;92";
+ pixel_x = 6
},
/obj/structure/surface/table/reinforced/almayer_B{
indestructible = 1;
unacidable = 1;
unslashable = 1
},
-/obj/structure/machinery/door_control{
- id = "ARES Emergency";
- name = "ARES Emergency Lockdown";
- pixel_x = 10;
- pixel_y = -24;
- req_one_access_txt = "91;92"
- },
/obj/structure/machinery/computer/cameras/almayer{
dir = 4;
pixel_y = 12
@@ -26769,18 +26779,19 @@
/turf/open/floor/almayer,
/area/almayer/living/offices)
"eXy" = (
-/obj/effect/step_trigger/teleporter_vector{
+/obj/effect/projector{
name = "Almayer_AresDown";
vector_x = 96;
vector_y = -65
},
-/obj/structure/machinery/light{
- dir = 1
- },
/obj/structure/stairs{
- dir = 1
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "ai_floor3";
+ light_range = 3
},
-/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"eXD" = (
/obj/structure/prop/invuln/lattice_prop{
@@ -28784,7 +28795,9 @@
/obj/effect/decal/warning_stripes{
icon_state = "SW-out"
},
-/turf/open/floor/almayer/aicore/glowing/no_build,
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
/area/almayer/command/airoom)
"fKh" = (
/obj/structure/window/framed/almayer,
@@ -28951,15 +28964,6 @@
plane = -7
},
/obj/effect/step_trigger/ares_alert/core,
-/obj/structure/machinery/door/poddoor/almayer/blended/aicore/open{
- closed_layer = 3.2;
- id = "ARES Emergency";
- layer = 3.2;
- name = "ARES Emergency Lockdown";
- needs_power = 0;
- open_layer = 1.9;
- plane = -7
- },
/obj/structure/sign/safety/laser{
pixel_x = 32;
pixel_y = -8
@@ -28968,6 +28972,7 @@
pixel_x = 32;
pixel_y = 6
},
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -31207,6 +31212,9 @@
req_one_access_txt = "91;92";
dir = 1
},
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore{
+ plane = -6
+ },
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -35739,7 +35747,9 @@
/obj/effect/decal/warning_stripes{
icon_state = "SE-out"
},
-/turf/open/floor/almayer/aicore/glowing/no_build,
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
/area/almayer/command/airoom)
"igs" = (
/obj/structure/surface/table/almayer,
@@ -36051,17 +36061,12 @@
name = "\improper ARES Core Shutters";
plane = -7
},
-/obj/structure/machinery/door/poddoor/almayer/blended/open{
- id = "ARES Emergency";
- name = "ARES Emergency Lockdown";
- open_layer = 1.9;
- plane = -7
- },
/obj/structure/disposalpipe/up/almayer{
id = "ares_vault_in";
name = "aicore";
dir = 2
},
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -36683,9 +36688,9 @@
},
/area/almayer/squads/delta)
"izf" = (
-/obj/structure/disposalpipe/down/almayer{
+/obj/structure/disposalpipe/up/almayer{
dir = 4;
- id = "ares_vault_in";
+ id = "ares_vault_out";
name = "aicore"
},
/turf/closed/wall/almayer/aicore/hull,
@@ -38339,15 +38344,14 @@
pixel_x = -2;
pixel_y = 26
},
-/obj/structure/machinery/door_control/brbutton{
- id = "ARES Emergency";
- name = "ARES Emergency Lockdown Override";
- pixel_x = 8;
- pixel_y = 26
- },
/obj/structure/machinery/computer/cameras/almayer/ares{
dir = 4
},
+/obj/structure/machinery/aicore_lockdown{
+ icon_state = "big_red_button_wallv";
+ pixel_x = 8;
+ pixel_y = 26
+ },
/turf/open/floor/wood/ship,
/area/almayer/living/commandbunks)
"jbX" = (
@@ -39300,15 +39304,7 @@
plane = -7
},
/obj/effect/step_trigger/ares_alert/core,
-/obj/structure/machinery/door/poddoor/almayer/blended/aicore/open{
- closed_layer = 3.2;
- id = "ARES Emergency";
- layer = 3.2;
- name = "ARES Emergency Lockdown";
- needs_power = 0;
- open_layer = 1.9;
- plane = -7
- },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -48270,6 +48266,10 @@
/area/almayer/living/port_emb)
"mAe" = (
/obj/structure/window/framed/almayer/aicore/hull/black/hijack_bustable,
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown{
+ plane = -6;
+ dir = 4
+ },
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"mAp" = (
@@ -48607,15 +48607,7 @@
name = "\improper ARES Mainframe Shutters";
plane = -7
},
-/obj/structure/machinery/door/poddoor/almayer/blended/aicore/open{
- closed_layer = 3.2;
- id = "ARES Emergency";
- layer = 3.2;
- name = "ARES Emergency Lockdown";
- needs_power = 0;
- open_layer = 1.9;
- plane = -7
- },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -49291,15 +49283,6 @@
plane = -7
},
/obj/effect/step_trigger/ares_alert/core,
-/obj/structure/machinery/door/poddoor/almayer/blended/aicore/open{
- closed_layer = 3.2;
- id = "ARES Emergency";
- layer = 3.2;
- name = "ARES Emergency Lockdown";
- needs_power = 0;
- open_layer = 1.9;
- plane = -7
- },
/obj/structure/sign/safety/terminal{
pixel_x = -18;
pixel_y = -8
@@ -49308,6 +49291,7 @@
pixel_x = -18;
pixel_y = 6
},
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -50866,9 +50850,9 @@
/turf/open/floor/plating,
/area/almayer/engineering/starboard_atmos)
"npq" = (
-/obj/structure/disposalpipe/up/almayer{
+/obj/structure/disposalpipe/down/almayer{
dir = 8;
- id = "ares_vault_out";
+ id = "ares_vault_in";
name = "aicore"
},
/turf/closed/wall/almayer/aicore/hull,
@@ -51959,16 +51943,18 @@
},
/area/almayer/command/lifeboat)
"nKO" = (
-/obj/structure/machinery/disposal/delivery{
- density = 0;
- desc = "A pneumatic delivery unit.";
- icon_state = "delivery_engi";
- name = "Returns";
- pixel_y = 28
- },
/obj/structure/disposalpipe/trunk{
dir = 1
},
+/obj/structure/disposaloutlet{
+ density = 0;
+ desc = "An outlet for the pneumatic delivery system.";
+ icon_state = "delivery_outlet";
+ name = "take-ins";
+ pixel_x = 7;
+ pixel_y = 28;
+ range = 0
+ },
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"nKP" = (
@@ -52089,6 +52075,19 @@
icon_state = "red"
},
/area/almayer/hallways/upper/port)
+"nNA" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"nNH" = (
/turf/open/floor/almayer{
dir = 1;
@@ -52718,6 +52717,19 @@
},
/turf/open/floor/wood/ship,
/area/almayer/shipboard/brig/cells)
+"nYg" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "NW-out";
+ pixel_y = 1
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"nYi" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/almayer{
@@ -55897,6 +55909,20 @@
icon_state = "silver"
},
/area/almayer/hallways/lower/repair_bay)
+"oYZ" = (
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresDown";
+ vector_x = 96;
+ vector_y = -65
+ },
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "ai_floor3";
+ light_range = 3
+ },
+/area/almayer/command/airoom)
"oZp" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/light,
@@ -64093,6 +64119,15 @@
icon_state = "silver"
},
/area/almayer/hallways/lower/repair_bay)
+"rOz" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"rOC" = (
/obj/structure/machinery/light{
dir = 1
@@ -69482,12 +69517,7 @@
name = "\improper ARES Core Shutters";
plane = -7
},
-/obj/structure/machinery/door/poddoor/almayer/blended/open{
- id = "ARES Emergency";
- name = "ARES Emergency Lockdown";
- open_layer = 1.9;
- plane = -7
- },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -71028,6 +71058,14 @@
icon_state = "test_floor4"
},
/area/almayer/command/cichallway)
+"ujn" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "E"
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"ujz" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply,
@@ -72977,9 +73015,16 @@
unslashable = 1
},
/obj/item/paper_bin/uscm{
- pixel_y = 6
+ pixel_y = 6;
+ pixel_x = -12
+ },
+/obj/item/tool/pen{
+ pixel_x = -14
+ },
+/obj/structure/machinery/aicore_lockdown{
+ pixel_y = 4;
+ pixel_x = 3
},
-/obj/item/tool/pen,
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"uVc" = (
@@ -74300,15 +74345,15 @@
unacidable = 1;
unslashable = 1
},
-/obj/item/desk_bell{
- pixel_y = 14;
- pixel_x = -5;
- anchored = 1
- },
/obj/structure/machinery/computer/working_joe{
layer = 3.3;
dir = 8
},
+/obj/item/desk_bell/ares{
+ pixel_y = 14;
+ pixel_x = -5;
+ anchored = 1
+ },
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"vpI" = (
@@ -75229,7 +75274,9 @@
c_tag = "AI - Primary Processors";
autoname = 0
},
-/turf/open/floor/almayer/aicore/glowing/no_build,
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
/area/almayer/command/airoom)
"vCO" = (
/obj/effect/landmark/start/bridge,
@@ -77454,15 +77501,7 @@
alert_message = "Caution: Movement detected in ARES Core.";
cooldown_duration = 1200
},
-/obj/structure/machinery/door/poddoor/almayer/blended/aicore/open{
- closed_layer = 3.2;
- id = "ARES Emergency";
- layer = 3.2;
- name = "ARES Emergency Lockdown";
- needs_power = 0;
- open_layer = 1.9;
- plane = -7
- },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
@@ -78331,12 +78370,7 @@
/area/almayer/maint/hull/lower/l_m_s)
"wyQ" = (
/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/door_control{
- id = "ARES Emergency";
- indestructible = 1;
- name = "ARES Emergency Lockdown";
- req_one_access_txt = "91;92"
- },
+/obj/structure/machinery/aicore_lockdown,
/turf/open/floor/almayer/no_build{
icon_state = "plating"
},
@@ -121669,10 +121703,10 @@ sgH
qdJ
xIj
mOi
-eXy
vRA
+oYZ
ezq
-ezq
+eXy
tFe
xQV
pax
@@ -140207,7 +140241,7 @@ qQS
bIp
fKe
dDp
-dDp
+bFg
frM
lcg
daz
@@ -140409,9 +140443,9 @@ dIn
rby
bIp
euN
+ujn
sEK
-sEK
-mlb
+etM
lcg
daz
lmz
@@ -140611,10 +140645,10 @@ lnS
uVv
flf
ebN
-cxc
+rOz
kBy
kBy
-gfu
+nNA
fPB
daz
lmz
@@ -142033,9 +142067,9 @@ yaQ
vLz
mFN
kSy
+bFg
dDp
-dDp
-frM
+nYg
lcg
daz
lmz
@@ -142237,7 +142271,7 @@ qQS
mFN
igr
sEK
-sEK
+ujn
mlb
lcg
daz
diff --git a/tgui/packages/tgui/interfaces/AresInterface.jsx b/tgui/packages/tgui/interfaces/AresInterface.jsx
index bcd200d45d74..115a5fd1e74f 100644
--- a/tgui/packages/tgui/interfaces/AresInterface.jsx
+++ b/tgui/packages/tgui/interfaces/AresInterface.jsx
@@ -386,6 +386,20 @@ const MainMenu = (props) => {
onClick={() => act('page_core_sec')}
/>
+
+ act('security_lockdown')}
+ />
+
)}
diff --git a/tgui/packages/tgui/interfaces/WorkingJoe.jsx b/tgui/packages/tgui/interfaces/WorkingJoe.jsx
index 64aa5167d265..cc87399fef5f 100644
--- a/tgui/packages/tgui/interfaces/WorkingJoe.jsx
+++ b/tgui/packages/tgui/interfaces/WorkingJoe.jsx
@@ -259,6 +259,20 @@ const MainMenu = (props) => {
onClick={() => act('page_core_gas')}
/>
+
+ act('security_lockdown')}
+ />
+
)}