diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm
index be96a2e32b85..5f4b805ca555 100644
--- a/code/__DEFINES/access.dm
+++ b/code/__DEFINES/access.dm
@@ -169,6 +169,8 @@ most of them are tied into map-placed objects. This should be reworked in the fu
#define ACCESS_LIST_MARINE_ALL "Almayer (ALL)"
///Used by the Wey-Yu - USCM Liaison
#define ACCESS_LIST_MARINE_LIAISON "Wey-Yu (Liaison)"
+///Used by the Wey-Yu AIST aboard Almayer
+#define ACCESS_LIST_MARINE_LIAISON_AIST "Wey-Yu (AIST)"
///The accesses granted to emergency responders.
#define ACCESS_LIST_EMERGENCY_RESPONSE "Almayer (ERT)"
diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm
index f869357efd1b..29845db09c84 100644
--- a/code/__DEFINES/job.dm
+++ b/code/__DEFINES/job.dm
@@ -122,6 +122,7 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_GENERAL "USCM General"
#define JOB_ACMC "Assistant Commandant of the Marine Corps"
#define JOB_CMC "Commandant of the Marine Corps"
+#define JOB_AI_TECH "AI Service Technician"
// Used to add a timelock to a job. Will be passed onto derivatives
#define AddTimelock(Path, timelockList) \
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index b195328264cd..36b9cc01a38c 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -282,6 +282,9 @@
#define COOLDOWN_COMM_CENTRAL 30 SECONDS
#define COOLDOWN_COMM_DESTRUCT 5 MINUTES
+#define FORCE_SCAN_LOCK 25 MINUTES
+#define COOLDOWN_FORCE_SCAN 15 MINUTES
+
///Cooldown for pred recharge
#define COOLDOWN_BRACER_CHARGE 3 MINUTES
diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm
index fea9ebeebb2c..b676a6a11d66 100644
--- a/code/__DEFINES/mode.dm
+++ b/code/__DEFINES/mode.dm
@@ -116,6 +116,7 @@
#define ROLE_WHITELISTED 16
#define ROLE_NO_ACCOUNT 32
#define ROLE_CUSTOM_SPAWN 64
+#define ROLE_HIDDEN 128
//=================================================
//Role defines, specifically lists of roles for job bans, crew manifests and the like.
@@ -127,7 +128,7 @@ GLOBAL_LIST_INIT(ROLES_CIC, list(JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO))
GLOBAL_LIST_INIT(ROLES_AUXIL_SUPPORT, list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT))
GLOBAL_LIST_INIT(ROLES_MISC, list(JOB_SYNTH, JOB_WORKING_JOE, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_MESS_SERGEANT, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH))
GLOBAL_LIST_INIT(ROLES_POLICE, list(JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE))
-GLOBAL_LIST_INIT(ROLES_ENGINEERING, list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH))
+GLOBAL_LIST_INIT(ROLES_ENGINEERING, list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_AI_TECH))
GLOBAL_LIST_INIT(ROLES_REQUISITION, list(JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION))
GLOBAL_LIST_INIT(ROLES_MEDICAL, list(JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR))
GLOBAL_LIST_INIT(ROLES_MARINES, list(JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE))
diff --git a/code/datums/factions/uscm.dm b/code/datums/factions/uscm.dm
index a19faba32d81..5a6a51be49f7 100644
--- a/code/datums/factions/uscm.dm
+++ b/code/datums/factions/uscm.dm
@@ -143,6 +143,8 @@
if(JOB_PROVOST_MARSHAL, JOB_PROVOST_CMARSHAL, JOB_PROVOST_SMARSHAL)
marine_rk = "pvm"
border_rk = "command"
+ if(JOB_AI_TECH)
+ marine_rk = "aist"
// TIS
if(JOB_TIS_IO)
marine_rk = "tisio"
diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm
index b75baccd7353..f0df908407e8 100644
--- a/code/game/area/almayer.dm
+++ b/code/game/area/almayer.dm
@@ -79,6 +79,16 @@
is_resin_allowed = FALSE
resin_construction_allowed = FALSE
+/area/almayer/command/aist_office
+ name = "\improper AIST Office"
+ icon_state = "airoom"
+ fake_zlevel = 1 // upperdeck
+ soundscape_playlist = list()
+ flags_area = AREA_NOTUNNEL|AREA_UNWEEDABLE
+ can_build_special = FALSE
+ is_resin_allowed = FALSE
+ resin_construction_allowed = FALSE
+
/area/almayer/command/securestorage
name = "\improper Upper Deck Secure Storage"
icon_state = "corporatespace"
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 0d10b06d5fef..861ae8b6cdcf 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -168,6 +168,19 @@
ACCESS_MARINE_MEDBAY,
) + get_access(ACCESS_LIST_COLONIAL_ALL)
+ if(ACCESS_LIST_MARINE_LIAISON_AIST)
+ return list(
+ ACCESS_WY_GENERAL,
+ ACCESS_WY_COLONIAL,
+ ACCESS_WY_EXEC,
+ ACCESS_MARINE_COMMAND,
+ ACCESS_MARINE_MEDBAY,
+ ACCESS_MARINE_ENGINEERING,
+ ACCESS_MARINE_SYNTH,
+ ACCESS_MARINE_AI,
+ ACCESS_ARES_DEBUG,
+ ) + get_access(ACCESS_LIST_COLONIAL_ALL)
+
if(ACCESS_LIST_COLONIAL_ALL)
return list(
ACCESS_CIVILIAN_PUBLIC,
diff --git a/code/game/jobs/job/special/uscm.dm b/code/game/jobs/job/special/uscm.dm
index 2308c5af2961..d17cf9c49f5d 100644
--- a/code/game/jobs/job/special/uscm.dm
+++ b/code/game/jobs/job/special/uscm.dm
@@ -12,3 +12,43 @@
title = JOB_RIOT
/datum/job/special/uscm/riot/chief
title = JOB_RIOT_CHIEF
+
+#define USCM_TECH "USCM"
+#define WY_TECH "Wey-Yu"
+
+/datum/job/special/uscm/ai_tech
+ title = JOB_AI_TECH
+ selection_class = "job_ce"
+ supervisors = "the acting commanding officer"
+ total_positions = 1
+ spawn_positions = 1
+ flags_startup_parameters = ROLE_WHITELISTED
+ gear_preset = /datum/equipment_preset/uscm_event/ai_tech
+
+ // job option
+ job_options = list(USCM_TECH = "USCM", WY_TECH = "WY")
+ var/corporate = FALSE
+
+//check the job option. and change the gear preset
+/datum/job/special/uscm/ai_tech/handle_job_options(option)
+ if(option != USCM_TECH)
+ corporate = TRUE
+ gear_preset = /datum/equipment_preset/uscm_event/ai_tech/corporate
+ else
+ corporate = FALSE
+ gear_preset = /datum/equipment_preset/uscm_event/ai_tech
+
+/datum/job/special/uscm/ai_tech/check_whitelist_status(mob/user)
+ if(check_rights(R_PERMISSIONS, show_msg = FALSE))
+ return TRUE
+ return FALSE
+
+/datum/job/special/uscm/ai_tech/generate_entry_message()
+ supervisors = "Weyland Yutani"
+ entry_message_body = "You are a [corporate ? FACTION_WY : FACTION_MARINE] AI Service Technician temporarily assigned to the [MAIN_SHIP_NAME]. Your goal is to ensure the onboard AI, [MAIN_AI_SYSTEM], is operating effectively. Your job involves heavy roleplay and requires you to behave like [corporate ? "a senior corporate representative, remaining in character at all times.
As a Weyland Yutani Technician you have access to the Corporate Office aboard the USS Almayer. Although you should cooperate with the onboard Liaison, you are not their subordinate nor they yours. You should help The Company interests where applicable but do not abuse your access to the AI Systems." : "an officer and to stay in character at all times. You are required to adhere to and obey Marine Law. Failure to do so may result in punitive action against you. Godspeed."]"
+ return ..()
+
+/obj/effect/landmark/start/aist
+ name = JOB_AI_TECH
+ icon_state = "aist_spawn"
+ job = /datum/job/special/uscm/ai_tech
diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm
index 04547d079664..519579e844d1 100644
--- a/code/game/machinery/ARES/ARES_interface.dm
+++ b/code/game/machinery/ARES/ARES_interface.dm
@@ -503,6 +503,24 @@
COOLDOWN_START(datacore, ares_nuclear_cooldown, COOLDOWN_COMM_DESTRUCT)
return TRUE
+ if("bioscan")
+ if(!SSticker.mode)
+ return FALSE //Not a game mode?
+ if(world.time < FORCE_SCAN_LOCK)
+ to_chat(operator, SPAN_WARNING("Bio sensors are not yet ready to initiate a scan!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(!(COOLDOWN_FINISHED(datacore, ares_bioscan_cooldown)) || (world.time < (GLOB.last_human_bioscan + COOLDOWN_FORCE_SCAN)))
+ to_chat(operator, SPAN_WARNING("It is too soon since the last scan, wait for the sensor array to reset!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+
+ GLOB.bioscan_data.ares_bioscan(FALSE, 2)
+ COOLDOWN_START(datacore, ares_bioscan_cooldown, COOLDOWN_FORCE_SCAN)
+ playsound(src, 'sound/machines/terminal_processing.ogg', 15, 1)
+ message_admins("BIOSCAN: [key_name(operator)] triggered a Marine bioscan via ARES AIST.")
+ return TRUE
+
if("trigger_vent")
playsound = FALSE
var/obj/structure/pipes/vents/pump/no_boom/gas/sec_vent = locate(params["vent"])
diff --git a/code/game/machinery/ARES/ARES_interface_admin.dm b/code/game/machinery/ARES/ARES_interface_admin.dm
index 758ba9fbb5e7..71e25955b1ed 100644
--- a/code/game/machinery/ARES/ARES_interface_admin.dm
+++ b/code/game/machinery/ARES/ARES_interface_admin.dm
@@ -50,8 +50,10 @@
return FALSE
var/list/data = list()
+ data["is_pda"] = FALSE
+
data["admin_login"] = "[admin_interface.logged_in], [user.client.admin_holder?.rank]"
- data["admin_access_log"] = list(admin_interface.access_list)
+ data["admin_access_log"] = admin_interface.access_list
data["current_menu"] = admin_interface.current_menu
data["last_page"] = admin_interface.last_menu
diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm
index ef1b836a3d4b..e57c6649c2ba 100644
--- a/code/game/machinery/ARES/ARES_procs.dm
+++ b/code/game/machinery/ARES/ARES_procs.dm
@@ -113,6 +113,7 @@ GLOBAL_LIST_INIT(maintenance_categories, list(
COOLDOWN_DECLARE(ares_nuclear_cooldown)
COOLDOWN_DECLARE(ares_quarters_cooldown)
COOLDOWN_DECLARE(aicore_lockdown)
+ COOLDOWN_DECLARE(ares_bioscan_cooldown)
// ------ ARES Logging Procs ------ //
/proc/ares_is_active()
diff --git a/code/game/machinery/ARES/ARES_records.dm b/code/game/machinery/ARES/ARES_records.dm
index 5bfe50dce068..9516c676777b 100644
--- a/code/game/machinery/ARES/ARES_records.dm
+++ b/code/game/machinery/ARES/ARES_records.dm
@@ -49,6 +49,15 @@
src.details = details
src.user = user
+/datum/ares_record/flight
+ record_name = ARES_RECORD_FLIGHT
+
+/datum/ares_record/flight/New(details, user)
+ time = worldtime2text()
+ src.title = "Flight Log"
+ src.details = details
+ src.user = user
+
/datum/ares_record/bombardment
record_name = ARES_RECORD_BOMB
diff --git a/code/game/machinery/ARES/debug_pda.dm b/code/game/machinery/ARES/debug_pda.dm
new file mode 100644
index 000000000000..90816d8423ba
--- /dev/null
+++ b/code/game/machinery/ARES/debug_pda.dm
@@ -0,0 +1,741 @@
+/obj/item/device/ai_tech_pda
+ icon = 'icons/obj/items/synth/ait_pda.dmi'
+ name = "T411 AIDT"
+ desc = "Artifical Intelligence Diagnostic Tablet model T411. Built to withstand a nuclear bomb."
+ icon_state = "karnak_off"
+ unacidable = TRUE
+ indestructible = TRUE
+ req_access = list(ACCESS_ARES_DEBUG)
+
+ /// The ID used to link all devices.
+ var/datum/ares_link/link
+ /// The datacore storing all the information.
+ var/datum/ares_datacore/datacore
+
+ var/current_menu = "login"
+ var/last_menu = "off"
+
+ var/authentication = APOLLO_ACCESS_LOGOUT
+ /// The last person to login.
+ var/logged_in
+ /// A record of who logged in and when.
+ var/list/access_list = list()
+ var/list/deleted_1to1 = list()
+
+/obj/item/device/ai_tech_pda/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ if(link && !override)
+ return FALSE
+ if(new_link)
+ new_link.ticket_computers += src
+ link = new_link
+ new_link.linked_systems += src
+ if(!datacore)
+ datacore = GLOB.ares_datacore
+ return TRUE
+
+/obj/item/device/ai_tech_pda/Initialize(mapload, ...)
+ link_systems(override = FALSE)
+ . = ..()
+
+/obj/item/device/ai_tech_pda/proc/delink()
+ if(link)
+ link.ticket_computers -= src
+ link.linked_systems -= src
+ link = null
+ datacore = null
+
+/obj/item/device/ai_tech_pda/Destroy()
+ delink()
+ return ..()
+
+/obj/item/device/ai_tech_pda/update_icon()
+ . = ..()
+ if(last_menu == "off")
+ icon_state = "karnak_off"
+ else if(current_menu == "login")
+ icon_state = "karnak_login_anim"
+ else
+ icon_state = "karnak_on_anim"
+
+/obj/item/device/ai_tech_pda/attack_self(mob/living/carbon/human/user)
+ if(..() || !allowed(user))
+ to_chat(user, SPAN_WARNING("Access Denied!"))
+ return FALSE
+
+ if((last_menu == "off") && (current_menu == "login"))
+ last_menu = "main"
+ update_icon()
+
+ tgui_interact(user)
+ return TRUE
+
+/obj/item/device/ai_tech_pda/tgui_interact(mob/user, datum/tgui/ui)
+ if(!link.interface || !datacore)
+ to_chat(user, SPAN_WARNING("ARES DATA LINK FAILED"))
+ return FALSE
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "AresAdmin", name)
+ ui.open()
+
+/obj/item/device/ai_tech_pda/ui_data(mob/user)
+ if(!link.interface)
+ to_chat(user, SPAN_WARNING("ARES ADMIN DATA LINK FAILED"))
+ return FALSE
+ var/list/data = list()
+
+ data["is_pda"] = TRUE
+
+ data["admin_login"] = "[logged_in], AI Service Technician"
+ data["admin_access_log"] = access_list
+
+ data["current_menu"] = current_menu
+ data["last_page"] = last_menu
+
+ data["logged_in"] = link.interface.last_login
+ data["sudo"] = link.interface.sudo_holder ? TRUE : FALSE
+
+ data["access_text"] = "[link.interface.sudo_holder ? "(SUDO)," : ""] access level [link.interface.authentication], [link.interface.ares_auth_to_text(link.interface.authentication)]."
+ data["access_level"] = link.interface.authentication
+
+ data["alert_level"] = GLOB.security_level
+ data["evac_status"] = SShijack.evac_status
+ data["worldtime"] = world.time
+
+ data["access_log"] = datacore.interface_access_list
+ data["apollo_log"] = datacore.apollo_log
+
+ data["deleted_conversation"] = deleted_1to1
+
+ data["distresstime"] = datacore.ares_distress_cooldown
+ data["distresstimelock"] = DISTRESS_TIME_LOCK
+ data["mission_failed"] = SSticker.mode.is_in_endgame
+ data["nuketimelock"] = NUCLEAR_TIME_LOCK
+ data["nuke_available"] = datacore.nuke_available
+
+ var/list/logged_announcements = list()
+ for(var/datum/ares_record/announcement/broadcast as anything in datacore.records_announcement)
+ var/list/current_broadcast = list()
+ current_broadcast["time"] = broadcast.time
+ current_broadcast["title"] = broadcast.title
+ current_broadcast["details"] = broadcast.details
+ current_broadcast["ref"] = "\ref[broadcast]"
+ logged_announcements += list(current_broadcast)
+ data["records_announcement"] = logged_announcements
+
+ var/list/logged_alerts = list()
+ for(var/datum/ares_record/security/security_alert as anything in datacore.records_security)
+ var/list/current_alert = list()
+ current_alert["time"] = security_alert.time
+ current_alert["title"] = security_alert.title
+ current_alert["details"] = security_alert.details
+ current_alert["ref"] = "\ref[security_alert]"
+ logged_alerts += list(current_alert)
+ data["records_security"] = logged_alerts
+
+ var/list/logged_flights = list()
+ for(var/datum/ares_record/flight/flight_log as anything in datacore.records_flight)
+ var/list/current_flight = list()
+ current_flight["time"] = flight_log.time
+ current_flight["title"] = flight_log.title
+ current_flight["details"] = flight_log.details
+ current_flight["user"] = flight_log.user
+ current_flight["ref"] = "\ref[flight_log]"
+ logged_flights += list(current_flight)
+ data["records_flight"] = logged_flights
+
+ var/list/logged_bioscans = list()
+ for(var/datum/ares_record/bioscan/scan as anything in datacore.records_bioscan)
+ var/list/current_scan = list()
+ current_scan["time"] = scan.time
+ current_scan["title"] = scan.title
+ current_scan["details"] = scan.details
+ current_scan["ref"] = "\ref[scan]"
+ logged_bioscans += list(current_scan)
+ data["records_bioscan"] = logged_bioscans
+
+ var/list/logged_bombs = list()
+ for(var/datum/ares_record/bombardment/bomb as anything in datacore.records_bombardment)
+ var/list/current_bomb = list()
+ current_bomb["time"] = bomb.time
+ current_bomb["title"] = bomb.title
+ current_bomb["details"] = bomb.details
+ current_bomb["user"] = bomb.user
+ current_bomb["ref"] = "\ref[bomb]"
+ logged_bombs += list(current_bomb)
+ data["records_bombardment"] = logged_bombs
+
+ var/list/logged_deletes = list()
+ for(var/datum/ares_record/deletion/deleted as anything in datacore.records_deletion)
+ if(!istype(deleted))
+ continue
+ var/list/current_delete = list()
+ current_delete["time"] = deleted.time
+ current_delete["title"] = deleted.title
+ current_delete["details"] = deleted.details
+ current_delete["user"] = deleted.user
+ current_delete["ref"] = "\ref[deleted]"
+ logged_deletes += list(current_delete)
+ data["records_deletion"] = logged_deletes
+
+ var/list/logged_discussions = list()
+ for(var/datum/ares_record/deleted_talk/deleted_convo as anything in datacore.records_deletion)
+ if(!istype(deleted_convo))
+ continue
+ var/list/deleted_disc = list()
+ deleted_disc["time"] = deleted_convo.time
+ deleted_disc["title"] = deleted_convo.title
+ deleted_disc["ref"] = "\ref[deleted_convo]"
+ logged_discussions += list(deleted_disc)
+ data["deleted_discussions"] = logged_discussions
+
+ var/list/logged_orders = list()
+ for(var/datum/ares_record/requisition_log/req_order as anything in datacore.records_asrs)
+ if(!istype(req_order))
+ continue
+ var/list/current_order = list()
+ current_order["time"] = req_order.time
+ current_order["details"] = req_order.details
+ current_order["title"] = req_order.title
+ current_order["user"] = req_order.user
+ current_order["ref"] = "\ref[req_order]"
+ logged_orders += list(current_order)
+ data["records_requisition"] = logged_orders
+
+ var/list/logged_techs = list()
+ for(var/datum/ares_record/tech/tech_unlock as anything in datacore.records_tech)
+ var/list/current_tech = list()
+ current_tech["time"] = tech_unlock.time
+ current_tech["details"] = tech_unlock.details
+ current_tech["user"] = tech_unlock.user
+ current_tech["tier_changer"] = tech_unlock.is_tier
+ current_tech["ref"] = "\ref[tech_unlock]"
+ logged_techs += list(current_tech)
+ data["records_tech"] = logged_techs
+
+ var/list/logged_convos = list()
+ var/list/active_convo = list()
+ var/active_ref
+ for(var/datum/ares_record/talk_log/log as anything in datacore.records_talking)
+ if(!istype(log))
+ continue
+ if(log.user == link.interface.last_login)
+ active_convo = log.conversation
+ active_ref = "\ref[log]"
+
+ var/list/current_convo = list()
+ current_convo["user"] = log.user
+ current_convo["ref"] = "\ref[log]"
+ current_convo["conversation"] = log.conversation
+ logged_convos += list(current_convo)
+
+ data["active_convo"] = active_convo
+ data["active_ref"] = active_ref
+ data["conversations"] = logged_convos
+
+ var/list/logged_maintenance = list()
+ for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance)
+ if(!istype(maint_ticket))
+ continue
+ var/lock_status = TICKET_OPEN
+ switch(maint_ticket.ticket_status)
+ if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED)
+ lock_status = TICKET_CLOSED
+
+ var/list/current_maint = list()
+ current_maint["id"] = maint_ticket.ticket_id
+ current_maint["time"] = maint_ticket.ticket_time
+ current_maint["priority_status"] = maint_ticket.ticket_priority
+ current_maint["category"] = maint_ticket.ticket_name
+ current_maint["details"] = maint_ticket.ticket_details
+ current_maint["status"] = maint_ticket.ticket_status
+ current_maint["submitter"] = maint_ticket.ticket_submitter
+ current_maint["assignee"] = maint_ticket.ticket_assignee
+ current_maint["lock_status"] = lock_status
+ current_maint["ref"] = "\ref[maint_ticket]"
+ logged_maintenance += list(current_maint)
+ data["maintenance_tickets"] = logged_maintenance
+
+ var/list/logged_access = list()
+ for(var/datum/ares_ticket/access/access_ticket as anything in link.tickets_access)
+ var/lock_status = TICKET_OPEN
+ switch(access_ticket.ticket_status)
+ if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED)
+ lock_status = TICKET_CLOSED
+
+ var/list/current_ticket = list()
+ current_ticket["id"] = access_ticket.ticket_id
+ current_ticket["time"] = access_ticket.ticket_time
+ current_ticket["priority_status"] = access_ticket.ticket_priority
+ current_ticket["title"] = access_ticket.ticket_name
+ current_ticket["details"] = access_ticket.ticket_details
+ current_ticket["status"] = access_ticket.ticket_status
+ current_ticket["submitter"] = access_ticket.ticket_submitter
+ current_ticket["assignee"] = access_ticket.ticket_assignee
+ current_ticket["lock_status"] = lock_status
+ current_ticket["ref"] = "\ref[access_ticket]"
+ logged_access += list(current_ticket)
+ data["access_tickets"] = logged_access
+
+ data["security_vents"] = link.get_ares_vents()
+
+ return data
+
+/obj/item/device/ai_tech_pda/ui_close(mob/user)
+ . = ..()
+ current_menu = "login"
+ last_menu = "off"
+ if(logged_in)
+ access_list += "[logged_in] logged out at [worldtime2text()]."
+ logged_in = null
+ update_icon()
+
+/obj/item/device/ai_tech_pda/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+ var/mob/living/carbon/human/user = ui.user
+ var/playsound = TRUE
+
+ switch(action)
+ if("go_back")
+ if(!last_menu)
+ 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/card = user.wear_id
+ if(!card || !card.check_biometrics(user))
+ to_chat(user, SPAN_WARNING("You require an authenticated ID card to access this device!"))
+ playsound(src, 'sound/machines/terminal_error.ogg', 15, TRUE)
+ return FALSE
+ logged_in = user.real_name
+ access_list += "[logged_in] at [worldtime2text()]."
+ current_menu = "main"
+
+ if("sudo")
+ var/new_user = tgui_input_text(user, "Enter Sudo Username", "Sudo User", encode = FALSE)
+ if(new_user)
+ if(new_user == link.interface.sudo_holder)
+ link.interface.last_login = link.interface.sudo_holder
+ link.interface.sudo_holder = null
+ return FALSE
+ if(new_user == link.interface.last_login)
+ to_chat(user, SPAN_WARNING("Already remote logged in as this user."))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ link.interface.sudo_holder = link.interface.last_login
+ link.interface.last_login = new_user
+ datacore.interface_access_list += "[link.interface.last_login] at [worldtime2text()], Sudo Access."
+ return TRUE
+ if("sudo_logout")
+ datacore.interface_access_list += "[link.interface.last_login] at [worldtime2text()], Sudo Logout."
+ link.interface.last_login = link.interface.sudo_holder
+ link.interface.sudo_holder = null
+ return
+
+ // -- Page Changers -- //
+ if("logout")
+ current_menu = "login"
+ last_menu = "login"
+ access_list += "[logged_in] logged out at [worldtime2text()]."
+ logged_in = null
+
+ if("home")
+ last_menu = current_menu
+ current_menu = "main"
+ if("page_1to1")
+ last_menu = current_menu
+ current_menu = "talking"
+ if("page_announcements")
+ last_menu = current_menu
+ current_menu = "announcements"
+ if("page_bioscans")
+ last_menu = current_menu
+ current_menu = "bioscans"
+ if("page_bombardments")
+ last_menu = current_menu
+ current_menu = "bombardments"
+ if("page_apollo")
+ last_menu = current_menu
+ current_menu = "apollo"
+ if("page_access")
+ last_menu = current_menu
+ current_menu = "access_log"
+ if("page_admin_list")
+ last_menu = current_menu
+ current_menu = "admin_access_log"
+ if("page_security")
+ last_menu = current_menu
+ current_menu = "security"
+ if("page_requisitions")
+ last_menu = current_menu
+ current_menu = "requisitions"
+ if("page_flight")
+ last_menu = current_menu
+ current_menu = "flight_log"
+ if("page_emergency")
+ last_menu = current_menu
+ current_menu = "emergency"
+ if("page_deleted")
+ last_menu = current_menu
+ current_menu = "delete_log"
+ if("page_deleted_1to1")
+ last_menu = current_menu
+ current_menu = "deleted_talks"
+ if("page_tech")
+ last_menu = current_menu
+ current_menu = "tech_log"
+ if("page_core_sec")
+ last_menu = current_menu
+ current_menu = "core_security"
+ if("page_access_management")
+ last_menu = current_menu
+ current_menu = "access_management"
+ if("page_maint_management")
+ last_menu = current_menu
+ current_menu = "maintenance_management"
+
+ // -- 1:1 Conversation -- //
+ if("new_conversation")
+ if(link.interface.last_login == "No User")
+ return FALSE
+ var/datum/ares_record/talk_log/convo = new(link.interface.last_login)
+ convo.conversation += "[MAIN_AI_SYSTEM] at [worldtime2text()], 'New 1:1 link initiated. Greetings, [link.interface.last_login].'"
+ datacore.records_talking += convo
+
+ if("clear_conversation")
+ var/datum/ares_record/talk_log/conversation = locate(params["active_convo"])
+ if(!istype(conversation))
+ return FALSE
+ var/datum/ares_record/deleted_talk/deleted = new
+ deleted.title = conversation.title
+ deleted.conversation = conversation.conversation
+ deleted.user = MAIN_AI_SYSTEM
+ datacore.records_deletion += deleted
+ datacore.records_talking -= conversation
+
+ if("fake_message_ares")
+ var/message = tgui_input_text(user, "What do you wish to say to ARES?", "ARES Message", encode = FALSE)
+ if(message)
+ link.interface.message_ares(message, user, params["active_convo"], TRUE)
+ if("ares_reply")
+ var/message = tgui_input_text(user, "What do you wish to reply with?", "ARES Response", encode = FALSE)
+ if(message)
+ link.interface.response_from_ares(message, params["active_convo"])
+ var/datum/ares_record/talk_log/conversation = locate(params["active_convo"])
+ var/admin_log = SPAN_STAFF_IC("ADMINS/MODS: [SPAN_RED("[key_name(user)] replied to [conversation.user]'s ARES message")] [SPAN_GREEN("via [src]")] with: [SPAN_BLUE(message)] ")
+ for(var/client/admin in GLOB.admins)
+ if((R_ADMIN|R_MOD) & admin.admin_holder.rights)
+ to_chat(admin, admin_log)
+
+ if("read_record")
+ var/datum/ares_record/deleted_talk/conversation = locate(params["record"])
+ deleted_1to1 = conversation.conversation
+ last_menu = current_menu
+ current_menu = "read_deleted"
+
+ if("claim_ticket")
+ var/datum/ares_ticket/ticket = locate(params["ticket"])
+ if(!istype(ticket))
+ return FALSE
+ var/claim = TRUE
+ var/assigned = ticket.ticket_assignee
+ if(assigned)
+ if(assigned == logged_in)
+ 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(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)
+ ticket.ticket_assignee = logged_in
+ ticket.ticket_status = TICKET_ASSIGNED
+ return claim
+
+ if("auth_access")
+ playsound = FALSE
+ var/datum/ares_ticket/access/access_ticket = locate(params["ticket"])
+ if(!access_ticket)
+ return FALSE
+ for(var/obj/item/card/id/identification in link.waiting_ids)
+ if(!istype(identification))
+ continue
+ if(identification.registered_gid != access_ticket.user_id_num)
+ continue
+ identification.handle_ares_access(logged_in, user)
+ access_ticket.ticket_status = TICKET_GRANTED
+ playsound(src, 'sound/machines/chime.ogg', 15, TRUE)
+ ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: [access_ticket.ticket_submitter] granted core access.")
+ return TRUE
+ for(var/obj/item/card/id/identification in link.active_ids)
+ if(!istype(identification))
+ continue
+ if(identification.registered_gid != access_ticket.user_id_num)
+ continue
+ identification.handle_ares_access(logged_in, user)
+ access_ticket.ticket_status = TICKET_REVOKED
+ playsound(src, 'sound/machines/chime.ogg', 15, TRUE)
+ ares_apollo_talk("Access Ticket [access_ticket.ticket_id]: core access for [access_ticket.ticket_submitter] revoked.")
+ return TRUE
+ return FALSE
+
+ if("reject_access")
+ var/datum/ares_ticket/access/access_ticket = locate(params["ticket"])
+ if(!istype(access_ticket))
+ return FALSE
+ access_ticket.ticket_status = TICKET_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] rejected.")
+ return TRUE
+
+ if("new_report")
+ var/priority_report = FALSE
+ 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(user, "What are the details for this report?", "Ticket Details", encode = FALSE)
+ if(!details)
+ return FALSE
+
+ if(!priority_report)
+ 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(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")
+ var/datum/ares_ticket/maintenance/maint_ticket = new("[logged_in] (AIST)", maint_type, details, priority_report)
+ link.tickets_maintenance += maint_ticket
+ if(priority_report)
+ ares_apollo_talk("Priority Maintenance Report: [maint_type] - ID [maint_ticket.ticket_id]. Seek and resolve.")
+ log_game("ARES: Maintenance Ticket '\ref[maint_ticket]' created by [key_name(user)] as AI-ST with Category '[maint_type]' and Details of '[details]'.")
+ return TRUE
+ return FALSE
+
+ if("cancel_ticket")
+ var/datum/ares_ticket/ticket = locate(params["ticket"])
+ if(!istype(ticket))
+ return FALSE
+ 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.")
+ return TRUE
+
+ if("mark_ticket")
+ var/datum/ares_ticket/ticket = locate(params["ticket"])
+ if(!istype(ticket))
+ return FALSE
+ var/options_list = list(TICKET_COMPLETED, TICKET_REJECTED)
+ if(ticket.ticket_priority)
+ options_list += TICKET_NON_PRIORITY
+ else
+ options_list += TICKET_PRIORITY
+ var/choice = tgui_alert(user, "What do you wish to mark the ticket as?", "Mark", options_list, 20 SECONDS)
+ switch(choice)
+ if(TICKET_PRIORITY)
+ ticket.ticket_priority = TRUE
+ ares_apollo_talk("[ticket.ticket_type] [ticket.ticket_id] upgraded to Priority.")
+ return TRUE
+ if(TICKET_NON_PRIORITY)
+ ticket.ticket_priority = FALSE
+ ares_apollo_talk("[ticket.ticket_type] [ticket.ticket_id] downgraded from Priority.")
+ return TRUE
+ if(TICKET_COMPLETED)
+ ticket.ticket_status = TICKET_COMPLETED
+ if(TICKET_REJECTED)
+ ticket.ticket_status = TICKET_REJECTED
+ else
+ return FALSE
+ if(ticket.ticket_priority)
+ ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been [choice] by AI-ST [logged_in].")
+ to_chat(user, SPAN_NOTICE("[ticket.ticket_type] [ticket.ticket_id] marked as [choice]."))
+ return TRUE
+
+ if("delete_record")
+ playsound = FALSE
+ var/datum/ares_record/record = locate(params["record"])
+ if(record.record_name == ARES_RECORD_DELETED)
+ return FALSE
+ var/datum/ares_record/deletion/new_delete = new
+ var/new_details = "Error"
+ var/new_title = "Error"
+ switch(record.record_name)
+ if(ARES_RECORD_ANNOUNCE)
+ new_title = "[record.title] at [record.time]"
+ new_details = record.details
+ datacore.records_announcement -= record
+ if(ARES_RECORD_SECURITY, ARES_RECORD_ANTIAIR)
+ new_title = "[record.title] at [record.time]"
+ new_details = record.details
+ datacore.records_security -= record
+ if(ARES_RECORD_BIOSCAN)
+ new_title = "[record.title] at [record.time]"
+ new_details = record.details
+ datacore.records_bioscan -= record
+ if(ARES_RECORD_BOMB)
+ new_title = "[record.title] at [record.time]"
+ new_details = "[record.details] Launched by [record.user]."
+ datacore.records_bombardment -= record
+ if(ARES_RECORD_TECH)
+ new_title = "[record.title] at [record.time]"
+ new_details = record.details
+ datacore.records_tech -= record
+ if(ARES_RECORD_FLIGHT)
+ new_title = "[record.title] at [record.time]"
+ new_details = record.details
+ datacore.records_flight -= record
+
+ new_delete.details = new_details
+ new_delete.user = "[logged_in] (AIST)"
+ new_delete.title = new_title
+
+ datacore.records_deletion += new_delete
+ playsound(src, 'sound/machines/terminal_error.ogg', 15, TRUE)
+
+ if("general_quarters")
+ if(!COOLDOWN_FINISHED(datacore, ares_quarters_cooldown))
+ to_chat(user, SPAN_WARNING("It has not been long enough since the last General Quarters call!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(GLOB.security_level < SEC_LEVEL_RED)
+ set_security_level(SEC_LEVEL_RED, no_sound = TRUE, announce = FALSE)
+ shipwide_ai_announcement("ATTENTION! GENERAL QUARTERS. ALL HANDS, MAN YOUR BATTLESTATIONS.", MAIN_AI_SYSTEM, 'sound/effects/GQfullcall.ogg')
+ log_game("[key_name(user)] has called for general quarters via ARES.")
+ message_admins("[key_name_admin(user)] has called for general quarters via ARES.")
+ log_ares_security("General Quarters", "[logged_in] has called for general quarters via ARES.")
+ COOLDOWN_START(datacore, ares_quarters_cooldown, 10 MINUTES)
+ . = TRUE
+
+ if("evacuation_start")
+ if(GLOB.security_level < SEC_LEVEL_RED)
+ to_chat(user, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures."))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+
+ if(SShijack.evac_admin_denied)
+ to_chat(user, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods."))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+
+ if(!SShijack.initiate_evacuation())
+ to_chat(user, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+
+ log_game("[key_name(user)] has called for an emergency evacuation via ARES.")
+ message_admins("[key_name_admin(user)] has called for an emergency evacuation via ARES.")
+ log_ares_security("Initiate Evacuation", "[logged_in] has called for an emergency evacuation via ARES.")
+ . = TRUE
+
+ if("distress")
+ if(!SSticker.mode)
+ return FALSE //Not a game mode?
+ if(world.time < DISTRESS_TIME_LOCK)
+ to_chat(user, SPAN_WARNING("You have been here for less than six minutes... what could you possibly have done!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(!COOLDOWN_FINISHED(datacore, ares_distress_cooldown))
+ to_chat(user, SPAN_WARNING("The distress launcher is cooling down!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(GLOB.security_level == SEC_LEVEL_DELTA)
+ to_chat(user, SPAN_WARNING("The ship is already undergoing self destruct procedures!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(GLOB.security_level < SEC_LEVEL_RED)
+ to_chat(user, SPAN_WARNING("The ship must be under red alert to launch a distress beacon!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+
+ for(var/client/admin in GLOB.admins)
+ if((R_ADMIN|R_MOD) & admin.admin_holder.rights)
+ playsound_client(admin,'sound/effects/sos-morse-code.ogg',10)
+ SSticker.mode.request_ert(user, TRUE)
+ to_chat(user, SPAN_NOTICE("A distress beacon request has been sent to USCM High Command."))
+ COOLDOWN_START(datacore, ares_distress_cooldown, COOLDOWN_COMM_REQUEST)
+ return TRUE
+
+ if("nuclearbomb")
+ if(!SSticker.mode)
+ return FALSE //Not a game mode?
+ if(world.time < NUCLEAR_TIME_LOCK)
+ to_chat(user, SPAN_WARNING("It is too soon to request Nuclear Ordnance!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(!COOLDOWN_FINISHED(datacore, ares_nuclear_cooldown))
+ to_chat(user, SPAN_WARNING("The ordnance request frequency is garbled, wait for reset!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(GLOB.security_level == SEC_LEVEL_DELTA || SSticker.mode.is_in_endgame)
+ to_chat(user, SPAN_WARNING("The mission has failed catastrophically, what do you want a nuke for?!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ var/reason = tgui_input_text(user, "Please enter reason nuclear ordnance is required.", "Reason for Nuclear Ordnance")
+ if(!reason)
+ return FALSE
+ for(var/client/admin in GLOB.admins)
+ if((R_ADMIN|R_MOD) & admin.admin_holder.rights)
+ playsound_client(admin,'sound/effects/sos-morse-code.ogg',10)
+ message_admins("[key_name(user)] has requested use of Nuclear Ordnance (via ARES)! Reason: [reason] [CC_MARK(user)] (APPROVE) (DENY) [ADMIN_JMP_USER(user)] [CC_REPLY(user)]")
+ to_chat(user, SPAN_NOTICE("A nuclear ordnance request has been sent to USCM High Command for the following reason: [reason]"))
+ log_ares_security("Nuclear Ordnance Request", "[logged_in] has sent a request for nuclear ordnance for the following reason: [reason]")
+ if(ares_can_interface())
+ ai_silent_announcement("[logged_in] has sent a request for nuclear ordnance to USCM High Command.", ".V")
+ ai_silent_announcement("Reason given: [reason].", ".V")
+ COOLDOWN_START(datacore, ares_nuclear_cooldown, COOLDOWN_COMM_DESTRUCT)
+ return TRUE
+
+ if("bioscan")
+ if(!SSticker.mode)
+ return FALSE //Not a game mode?
+ if(world.time < FORCE_SCAN_LOCK)
+ to_chat(user, SPAN_WARNING("Bio sensors are not yet ready to initiate a scan!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(!(COOLDOWN_FINISHED(datacore, ares_bioscan_cooldown)) || (world.time < (GLOB.last_human_bioscan + COOLDOWN_FORCE_SCAN)))
+ to_chat(user, SPAN_WARNING("It is too soon since the last scan, wait for the sensor array to reset!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+
+ GLOB.bioscan_data.ares_bioscan(FALSE, 2)
+ COOLDOWN_START(datacore, ares_bioscan_cooldown, COOLDOWN_FORCE_SCAN)
+ playsound(src, 'sound/machines/terminal_processing.ogg', 15, 1)
+ message_admins("BIOSCAN: [key_name(user)] triggered a Marine bioscan via ARES AIST.")
+ return TRUE
+
+ if("trigger_vent")
+ 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(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(user, SPAN_WARNING("ERROR: Insufficient gas reserve for this vent."))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ 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", "[MAIN_AI_SYSTEM] released Nerve Gas from Vent '[sec_vent.vent_tag]'.")
+ 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(playsound)
+ var/sound = pick('sound/machines/pda_button1.ogg', 'sound/machines/pda_button2.ogg')
+ playsound(src, sound, 15, TRUE)
diff --git a/code/game/machinery/sentry_holder.dm b/code/game/machinery/sentry_holder.dm
index fe676e9103d2..57b1b44bcd4c 100644
--- a/code/game/machinery/sentry_holder.dm
+++ b/code/game/machinery/sentry_holder.dm
@@ -16,6 +16,7 @@
var/ox = 0
var/oy = 0
var/require_red_alert = FALSE
+ var/base_icon_state = "sentry_system"
/obj/structure/machinery/sentry_holder/Initialize()
. = ..()
@@ -76,7 +77,7 @@
deployment_cooldown = world.time + 50
deployed_turret.turned_on = TRUE
deployed_turret.forceMove(loc)
- icon_state = "sentry_system_deployed"
+ icon_state = "[base_icon_state]_deployed"
for(var/mob/M in deployed_turret.loc)
if(deployed_turret.loc == src.loc)
@@ -103,7 +104,7 @@
deployed_turret.unset_range()
pixel_x = ox
pixel_y = oy
- icon_state = "sentry_system_installed"
+ icon_state = "[base_icon_state]_installed"
/obj/structure/machinery/sentry_holder/Destroy()
QDEL_NULL(deployed_turret)
@@ -115,5 +116,30 @@
turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/colony
/obj/structure/machinery/sentry_holder/almayer
+ icon_state = "floor_sentry_installed"
turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/almayer
+ base_icon_state = "floor_sentry"
require_red_alert = TRUE
+
+/obj/structure/machinery/sentry_holder/almayer/mini
+ turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/almayer/mini
+
+/obj/structure/machinery/sentry_holder/almayer/mini/aicore
+
+/obj/structure/machinery/sentry_holder/almayer/mini/aicore/Initialize()
+ . = ..()
+ RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LOCKDOWN, PROC_REF(auto_deploy))
+ RegisterSignal(SSdcs, COMSIG_GLOB_AICORE_LIFT, PROC_REF(undeploy_sentry))
+
+/obj/structure/machinery/sentry_holder/almayer/mini/aicore/proc/auto_deploy()
+ if(deployed_turret.loc == src) //not deployed
+ if(stat & NOPOWER)
+ //to_chat(user, SPAN_WARNING("[src] is non-functional."))
+ return FALSE
+
+ deploy_sentry()
+ return TRUE
+
+/obj/structure/machinery/sentry_holder/almayer/mini/aicore/attack_hand(mob/user)
+ to_chat(user, SPAN_WARNING("[src] can only be deployed remotely."))
+ return
diff --git a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
index a5d3cbe85b01..3b7d98f41d69 100644
--- a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
+++ b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
@@ -2,7 +2,7 @@
name = "\improper ColMarTech Senior Officer Equipment Rack"
desc = "An automated equipment vendor for Senior Officers."
req_access = list(ACCESS_MARINE_SENIOR)
- vendor_role = list(JOB_CHIEF_POLICE, JOB_CMO, JOB_XO, JOB_CHIEF_ENGINEER, JOB_CHIEF_REQUISITION, JOB_AUXILIARY_OFFICER)
+ vendor_role = list(JOB_CHIEF_POLICE, JOB_CMO, JOB_XO, JOB_CHIEF_ENGINEER, JOB_CHIEF_REQUISITION, JOB_AUXILIARY_OFFICER, JOB_AI_TECH)
/obj/structure/machinery/cm_vending/clothing/senior_officer/get_listed_products(mob/user)
if(!user)
@@ -25,6 +25,10 @@
return GLOB.cm_vending_clothing_military_police_chief
else if(user.job == JOB_AUXILIARY_OFFICER)
return GLOB.cm_vending_clothing_auxiliary_officer
+ else if(user.job == JOB_AI_TECH)
+ if(FACTION_WY in user.faction_group)
+ return GLOB.cm_vending_clothing_aist_wy
+ return GLOB.cm_vending_clothing_aist
return ..()
@@ -496,3 +500,160 @@ GLOBAL_LIST_INIT(cm_vending_clothing_auxiliary_officer, list(
/obj/item/clothing/head/marine/peaked,
/obj/item/clothing/under/marine/dress,
)
+
+
+
+//------------ AI SERVICE TECHNICIAN ---------------
+GLOBAL_LIST_INIT(cm_vending_clothing_aist, list(
+ list("STANDARD EQUIPMENT", 0, null, null, null),
+ list("Marine Formal Uniform", 0, /obj/item/clothing/under/marine/dress, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/yellow, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom/aist, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Toolbelt", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY),
+ list("Welding Goggles", 0, /obj/item/clothing/glasses/welding, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED),
+
+ list("SUIT (CHOOSE 1)", 0, null, null, null),
+ list("Black Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest/black, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED),
+ list("Blue Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest/blue, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Orange Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Yellow Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest/yellow, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+
+ list("HEADWEAR (OPTIONAL)", 0, null, null, null),
+ list("Welding Helmet", 0, /obj/item/clothing/head/welding, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
+ list("BAG (CHOOSE 1)", 0, null, null, null),
+ list("Secure Leather Satchel", 0, /obj/item/storage/backpack/satchel/lockable, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED),
+ list("USCM Satchel", 0, /obj/item/storage/backpack/marine/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Standard Backpack", 0, /obj/item/storage/backpack/marine, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Technician Chestrig", 0, /obj/item/storage/backpack/marine/satchel/tech, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Technician Welder-Satchel", 0, /obj/item/storage/backpack/marine/engineerpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Technician Welderpack", 0, /obj/item/storage/backpack/marine/engineerpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Welding Kit", 0, /obj/item/tool/weldpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+
+ list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
+ list("M2019 Blaster", 0, /obj/effect/essentials_set/m2019, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+ list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+ list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+
+ list("COMBAT EQUIPMENT (COMBAT USE ONLY)", 0, null, null, null),
+ list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
+ list("M2019 Ammo Refil", 15, /obj/effect/essentials_set/pkd_ammo, null, VENDOR_ITEM_REGULAR),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Strap", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Magazine Pouch", 0, /obj/item/storage/pouch/magazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sidearm Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
+ list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+
+ list("Spare Equipment", 0, null, null, null),
+ list("T411 AIDT", 0, /obj/item/device/ai_tech_pda, MARINE_CAN_BUY_MRE, VENDOR_ITEM_REGULAR),
+ list("APOLLO Relay Key", 5, /obj/item/device/encryptionkey/binary, null, VENDOR_ITEM_REGULAR),
+ ))
+
+GLOBAL_LIST_INIT(cm_vending_clothing_aist_wy, list(
+ list("UNIFORM (CHOOSE 1)", 0, null, null, null),
+ list("Blue Suit Pants", 0, /obj/item/clothing/under/liaison_suit/blue, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
+ list("Brown Suit Pants", 0, /obj/item/clothing/under/liaison_suit/brown, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Black Suit Pants", 0, /obj/item/clothing/under/liaison_suit/black, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("White Suit Pants", 0, /obj/item/clothing/under/liaison_suit/corporate_formal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+
+ list("STANDARD EQUIPMENT", 0, null, null, null),
+ list("Headset", 0, /obj/item/device/radio/headset/almayer/mcl/aist, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/yellow, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Polished Boots", 0, /obj/item/clothing/shoes/veteran/pmc, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Toolbelt", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY),
+ list("Welding Goggles", 0, /obj/item/clothing/glasses/welding, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED),
+
+ list("VEST (CHOOSE 1)", 0, null, null, null),
+ list("Orange Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED),
+ list("Black Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest/black, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Blue Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest/blue, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Yellow Hazard Vest", 0, /obj/item/clothing/suit/storage/hazardvest/yellow, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+
+ list("HEADWEAR (OPTIONAL)", 0, null, null, null),
+ list("Welding Helmet", 0, /obj/item/clothing/head/welding, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
+ list("BAG (CHOOSE 1)", 0, null, null, null),
+ list("Secure Leather Satchel", 0, /obj/item/storage/backpack/satchel/lockable, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED),
+ list("USCM Satchel", 0, /obj/item/storage/backpack/marine/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Standard Backpack", 0, /obj/item/storage/backpack/marine, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Technician Chestrig", 0, /obj/item/storage/backpack/marine/satchel/tech, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Technician Welder-Satchel", 0, /obj/item/storage/backpack/marine/engineerpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+ list("Technician Welderpack", 0, /obj/item/storage/backpack/marine/engineerpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
+
+ list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
+ list("M2019 Blaster", 0, /obj/effect/essentials_set/m2019, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+ list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+ list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+
+ list("COMBAT EQUIPMENT (COMBAT USE ONLY)", 0, null, null, null),
+ list("Bulletproof Vest", 0, /obj/item/clothing/suit/armor/bulletproof, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("M10 pattern marine helmet", 0, /obj/item/clothing/head/helmet/marine, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Polished Boots", 0, /obj/item/clothing/shoes/veteran/pmc/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
+ list("M2019 Ammo Refil", 15, /obj/effect/essentials_set/pkd_ammo, null, VENDOR_ITEM_REGULAR),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Strap", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Magazine Pouch", 0, /obj/item/storage/pouch/magazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sidearm Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
+ list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+
+ list("Spare Equipment", 0, null, null, null),
+ list("T411 AIDT", 0, /obj/item/device/ai_tech_pda, MARINE_CAN_BUY_MRE, VENDOR_ITEM_REGULAR),
+ list("APOLLO Relay Key", 5, /obj/item/device/encryptionkey/binary, null, VENDOR_ITEM_REGULAR),
+ ))
+
+/obj/effect/essentials_set/m2019
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
+ icon_state = "lapd_2019"
+ desc = "Properly known as the Pflager Katsumata Series-D Blaster, the M2019 is a relic of a handgun used by detectives and blade runners, having replaced the snub nose .38 detective special in 2019. Fires .44 custom packed sabot magnum rounds. Legally a revolver, the unconventional but robust internal design has made this model incredibly popular amongst collectors and enthusiasts."
+ spawned_gear_list = list(
+ /obj/item/weapon/gun/revolver/m44/custom/pkd_special,
+ /obj/item/ammo_magazine/revolver/pkd,
+ /obj/item/ammo_magazine/revolver/pkd,
+ )
+
+/obj/effect/essentials_set/pkd_ammo
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi'
+ icon_state = "pkd_44"
+ desc = "Flip up the two side latches (three on PKL) and push after aligning with feed lips on blaster. Clip can be re-used."
+ spawned_gear_list = list(
+ /obj/item/ammo_magazine/revolver/pkd,
+ /obj/item/ammo_magazine/revolver/pkd,
+ /obj/item/ammo_magazine/revolver/pkd,
+ )
diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
index a55285369e14..8b27f646953d 100644
--- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm
+++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
@@ -368,6 +368,7 @@ GLOBAL_LIST_INIT(cm_vending_synth_tools, list(
list("Maintenance Jack", 15, /obj/item/maintenance_jack, null, VENDOR_ITEM_REGULAR),
list("Portable Dialysis Machine", 15, /obj/item/tool/portadialysis, null, VENDOR_ITEM_REGULAR),
list("Telescopic Baton", 15, /obj/item/weapon/telebaton, null, VENDOR_ITEM_REGULAR),
+ list("Synthetic Sparker", 15, /obj/item/device/defibrillator/synthetic, null, VENDOR_ITEM_REGULAR),
))
//------------EXPERIMENTAL TOOL KITS---------------
diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm
index bf3b952edcf5..3203e567ec15 100644
--- a/code/game/objects/effects/landmarks/landmarks.dm
+++ b/code/game/objects/effects/landmarks/landmarks.dm
@@ -404,6 +404,9 @@
name = "working joe late join"
job = JOB_WORKING_JOE
+/obj/effect/landmark/late_join/aist
+ name = "AIST late join"
+ job = JOB_AI_TECH
/obj/effect/landmark/late_join/cmo
name = "Chief Medical Officer late join"
diff --git a/code/game/objects/items/devices/defibrillator.dm b/code/game/objects/items/devices/defibrillator.dm
index bbeb2046aff0..2ec5255963b2 100644
--- a/code/game/objects/items/devices/defibrillator.dm
+++ b/code/game/objects/items/devices/defibrillator.dm
@@ -24,6 +24,12 @@
var/defib_cooldown = 0 //Cooldown for toggling the defib
var/shock_cooldown = 0 //cooldown for shocking someone - separate to toggling
+ /// Skill requirements.
+ var/skill_to_check = SKILL_MEDICAL
+ var/skill_level = SKILL_MEDICAL_MEDIC
+ var/skill_to_check_alt = null
+ var/skill_level_alt = 0
+
/mob/living/carbon/human/proc/check_tod()
if(!undefibbable && world.time <= timeofdeath + revive_grace_period)
return TRUE
@@ -79,10 +85,11 @@
return
//Job knowledge requirement
- if (istype(user))
- if(!skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))
- to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
- return
+ if(istype(user))
+ if(!skillcheck(user, skill_to_check, skill_level))
+ if(!skill_to_check_alt || (!skillcheck(user, skill_to_check_alt, skill_level_alt)))
+ to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
+ return
defib_cooldown = world.time + 10 //1 second cooldown every time the defib is toggled
ready = !ready
@@ -125,7 +132,7 @@
if(!ready)
to_chat(user, SPAN_WARNING("Take [src]'s paddles out first."))
return
- if(dcell.charge <= charge_cost)
+ if(dcell.charge < charge_cost)
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src]'s battery is too low! It needs to recharge."))
return
if(H.stat != DEAD)
@@ -146,56 +153,63 @@
return TRUE
-/obj/item/device/defibrillator/attack(mob/living/carbon/human/H, mob/living/carbon/human/user)
+/obj/item/device/defibrillator/proc/can_defib(mob/living/carbon/human/target, mob/living/carbon/human/user)
if(shock_cooldown > world.time) //cooldown is only for shocking, this is so that you can immediately shock when you take the paddles out - stan_albatross
- return
+ return FALSE
shock_cooldown = world.time + 20 //2 second cooldown before you can try shocking again
if(user.action_busy) //Currently deffibing
- return
+ return FALSE
//job knowledge requirement
if(user.skills)
- if(!skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))
- to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
- return
+ if(!skillcheck(user, skill_to_check, skill_level))
+ if(skill_to_check_alt && !skillcheck(user, skill_to_check_alt, skill_level_alt))
+ to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
+ return
- if(!check_revive(H, user))
- return
+ if(!check_revive(target, user))
+ return FALSE
- var/mob/dead/observer/G = H.get_ghost()
+ var/mob/dead/observer/G = target.get_ghost()
if(istype(G) && G.client)
playsound_client(G.client, 'sound/effects/adminhelp_new.ogg')
to_chat(G, SPAN_BOLDNOTICE(FONT_SIZE_LARGE("Someone is trying to revive your body. Return to it if you want to be resurrected! \
(Verbs -> Ghost -> Re-enter corpse, or click here!)")))
- user.visible_message(SPAN_NOTICE("[user] starts setting up the paddles on [H]'s chest"), \
- SPAN_HELPFUL("You start setting up the paddles on [H]'s chest."))
+ user.visible_message(SPAN_NOTICE("[user] starts setting up the paddles on [target]'s chest"), \
+ SPAN_HELPFUL("You start setting up the paddles on [target]'s chest."))
playsound(get_turf(src),'sound/items/defib_charge.ogg', 25, 0) //Do NOT vary this tune, it needs to be precisely 7 seconds
//Taking square root not to make defibs too fast...
- if(!do_after(user, (4 + (3 * user.get_skill_duration_multiplier(SKILL_MEDICAL))) SECONDS, INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_FRIENDLY, H, INTERRUPT_MOVED, BUSY_ICON_MEDICAL))
- user.visible_message(SPAN_WARNING("[user] stops setting up the paddles on [H]'s chest."), \
- SPAN_WARNING("You stop setting up the paddles on [H]'s chest."))
- return
+ if(!do_after(user, (4 + (3 * user.get_skill_duration_multiplier(SKILL_MEDICAL))) SECONDS, INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_FRIENDLY, target, INTERRUPT_MOVED, BUSY_ICON_MEDICAL))
+ user.visible_message(SPAN_WARNING("[user] stops setting up the paddles on [target]'s chest."), \
+ SPAN_WARNING("You stop setting up the paddles on [target]'s chest."))
+ return FALSE
- if(!check_revive(H, user))
- return
+ if(!check_revive(target, user))
+ return FALSE
+
+ return TRUE
+
+/obj/item/device/defibrillator/attack(mob/living/carbon/human/target, mob/living/carbon/human/user)
+ if(!can_defib(target, user))
+ return FALSE
//Do this now, order doesn't matter
sparks.start()
dcell.use(charge_cost)
update_icon()
playsound(get_turf(src), 'sound/items/defib_release.ogg', 25, 1)
- user.visible_message(SPAN_NOTICE("[user] shocks [H] with the paddles."),
- SPAN_HELPFUL("You shock [H] with the paddles."))
- H.visible_message(SPAN_DANGER("[H]'s body convulses a bit."))
+ user.visible_message(SPAN_NOTICE("[user] shocks [target] with the paddles."),
+ SPAN_HELPFUL("You shock [target] with the paddles."))
+ target.visible_message(SPAN_DANGER("[target]'s body convulses a bit."))
shock_cooldown = world.time + 10 //1 second cooldown before you can shock again
- var/datum/internal_organ/heart/heart = H.internal_organs_by_name["heart"]
+ var/datum/internal_organ/heart/heart = target.internal_organs_by_name["heart"]
- if(!H.is_revivable())
+ if(!target.is_revivable())
playsound(get_turf(src), 'sound/items/defib_failed.ogg', 25, 0)
if(heart && heart.organ_status >= ORGAN_BROKEN)
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Defibrillation failed. Patient's heart is too damaged. Immediate surgery is advised."))
@@ -203,40 +217,40 @@
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Defibrillation failed. Patient's general condition does not allow reviving."))
return
- if(!H.client) //Freak case, no client at all. This is a braindead mob (like a colonist)
+ if(!target.client) //Freak case, no client at all. This is a braindead mob (like a colonist)
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: No soul detected, Attempting to revive..."))
- if(isobserver(H.mind?.current) && !H.client) //Let's call up the correct ghost! Also, bodies with clients only, thank you.
- H.mind.transfer_to(H, TRUE)
+ if(isobserver(target.mind?.current) && !target.client) //Let's call up the correct ghost! Also, bodies with clients only, thank you.
+ target.mind.transfer_to(target, TRUE)
//At this point, the defibrillator is ready to work
- H.apply_damage(-damage_heal_threshold, BRUTE)
- H.apply_damage(-damage_heal_threshold, BURN)
- H.apply_damage(-damage_heal_threshold, TOX)
- H.apply_damage(-damage_heal_threshold, CLONE)
- H.apply_damage(-H.getOxyLoss(), OXY)
- H.updatehealth() //Needed for the check to register properly
-
- if(!(H.species?.flags & NO_CHEM_METABOLIZATION))
- for(var/datum/reagent/R in H.reagents.reagent_list)
+ target.apply_damage(-damage_heal_threshold, BRUTE)
+ target.apply_damage(-damage_heal_threshold, BURN)
+ target.apply_damage(-damage_heal_threshold, TOX)
+ target.apply_damage(-damage_heal_threshold, CLONE)
+ target.apply_damage(-target.getOxyLoss(), OXY)
+ target.updatehealth() //Needed for the check to register properly
+
+ if(!(target.species?.flags & NO_CHEM_METABOLIZATION))
+ for(var/datum/reagent/R in target.reagents.reagent_list)
var/datum/chem_property/P = R.get_property(PROPERTY_ELECTROGENETIC)//Adrenaline helps greatly at restarting the heart
if(P)
- P.trigger(H)
- H.reagents.remove_reagent(R.id, 1)
+ P.trigger(target)
+ target.reagents.remove_reagent(R.id, 1)
break
- if(H.health > HEALTH_THRESHOLD_DEAD)
+ if(target.health > HEALTH_THRESHOLD_DEAD)
user.visible_message(SPAN_NOTICE("[icon2html(src, viewers(src))] \The [src] beeps: Defibrillation successful."))
playsound(get_turf(src), 'sound/items/defib_success.ogg', 25, 0)
user.track_life_saved(user.job)
user.life_revives_total++
- H.handle_revive()
+ target.handle_revive()
if(heart)
heart.take_damage(rand(min_heart_damage_dealt, max_heart_damage_dealt), TRUE) // Make death and revival leave lasting consequences
- to_chat(H, SPAN_NOTICE("You suddenly feel a spark and your consciousness returns, dragging you back to the mortal plane."))
- if(H.client?.prefs.toggles_flashing & FLASH_CORPSEREVIVE)
- window_flash(H.client)
+ to_chat(target, SPAN_NOTICE("You suddenly feel a spark and your consciousness returns, dragging you back to the mortal plane."))
+ if(target.client?.prefs.toggles_flashing & FLASH_CORPSEREVIVE)
+ window_flash(target.client)
else
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Defibrillation failed. Vital signs are too weak, repair damage and try again.")) //Freak case
playsound(get_turf(src), 'sound/items/defib_failed.ogg', 25, 0)
@@ -264,3 +278,50 @@
item_state = "defib"
w_class = SIZE_SMALL
charge_cost = 99
+
+
+/obj/item/device/defibrillator/synthetic
+ name = "synthetic sparker"
+ desc = "Functioning similarly to a regular defibrillator, this device is designed to restart a synthetic unit via electric shock."
+ icon = 'icons/obj/items/experimental_tools.dmi'
+ icon_state = "sparker"
+ item_state = "defib"
+ w_class = SIZE_SMALL
+ charge_cost = 300
+ skill_to_check_alt = SKILL_ENGINEER
+ skill_level_alt = SKILL_ENGINEER_ENGI
+
+/obj/item/device/defibrillator/synthetic/update_icon()
+ icon_state = initial(icon_state)
+ overlays.Cut()
+ if(ready)
+ icon_state += "_out"
+
+/obj/item/device/defibrillator/synthetic/check_revive(mob/living/carbon/human/H, mob/living/carbon/human/user)
+ if(!issynth(H))
+ to_chat(user, SPAN_WARNING("You can't use a [src] on a living being!"))
+ return FALSE
+ if(!ready)
+ to_chat(user, SPAN_WARNING("Take [src]'s paddles out first."))
+ return FALSE
+ if(dcell.charge < charge_cost)
+ user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src]'s battery is too low! It needs to recharge."))
+ return FALSE
+ if(H.stat != DEAD)
+ user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Function signs detected. Aborting."))
+ return FALSE
+
+ if(!H.is_revivable())
+ user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Unit's general condition does not allow reactivation."))
+ return FALSE
+
+ if((!MODE_HAS_TOGGLEABLE_FLAG(MODE_STRONG_DEFIBS) && blocked_by_suit) && H.wear_suit && (istype(H.wear_suit, /obj/item/clothing/suit/armor) || istype(H.wear_suit, /obj/item/clothing/suit/storage/marine)) && prob(95))
+ user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Paddles registering >100,000 ohms, Possible cause: Suit or Armor interfering."))
+ return FALSE
+
+ return TRUE
+
+/obj/item/device/defibrillator/synthetic/one_shot
+ desc = "Functioning similarly to a regular defibrillator, this device is designed to restart a synthetic unit via electric shock. This one can only be used once before needing a recharge and is intended for rebooting Working Joes."
+ charge_cost = 1000
+ icon_state = "sparker_once"
diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm
index 58d8cd8d8d5f..02e111a5dfb0 100644
--- a/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -12,6 +12,8 @@
var/abstract = FALSE
/obj/item/device/encryptionkey/binary
+ name = "APOLLO relay key"
+ desc = "An encryption key allowing speech over the APOLLO Link. (Using :+)"
icon_state = "binary_key"
translate_apollo = TRUE
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 00f0ad16220c..92fe68e616c3 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -541,6 +541,11 @@
maximum_keys = 5
initial_keys = list(/obj/item/device/encryptionkey/mcom/cl)
+/obj/item/device/radio/headset/almayer/mcl/aist
+ name = "corporate AI service technician headset"
+ desc = "A standard issue corporate liaison headset, modified for AIST responsibilities. Allows the wearer to listen to, and broadcast over, the APOLLO Link. (Use :+)"
+ initial_keys = list(/obj/item/device/encryptionkey/binary, /obj/item/device/encryptionkey/mcom/cl)
+
/obj/item/device/radio/headset/almayer/reporter
name = "reporter radio headset"
desc = "Used by the combat correspondent to get the scoop. Channels are as follows: :v - marine command, :a - alpha squad, :b - bravo squad, :c - charlie squad, :d - delta squad, :n - engineering, :m - medbay, :u - requisitions, :j - JTAC, :t - intel."
@@ -559,6 +564,11 @@
initial_keys = list(/obj/item/device/encryptionkey/cmpcom/cdrcom)
volume = RADIO_VOLUME_CRITICAL
+/obj/item/device/radio/headset/almayer/mcom/cdrcom/aist
+ name = "marine AI service technician headset"
+ desc = "A modified senior command headset issued to USCM AISTs. Allows the wearer to listen to, and broadcast over, the APOLLO Link. (Use :+)"
+ initial_keys = list(/obj/item/device/encryptionkey/binary, /obj/item/device/encryptionkey/cmpcom/cdrcom)
+
/obj/item/device/radio/headset/almayer/mcom/synth
name = "marine synth headset"
desc = "Issued only to USCM synthetics. Channels are as follows: :v - marine command, :p - military police, :a - alpha squad, :b - bravo squad, :c - charlie squad, :d - delta squad, :n - engineering, :m - medbay, :u - requisitions, :j - JTAC, :t - intel"
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index b3a330ca36b0..6c8fbaa5334a 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -272,3 +272,6 @@
new /obj/item/inflatable(src)
new /obj/item/inflatable(src)
new /obj/item/inflatable(src)
+
+/obj/item/storage/briefcase/inflatable/small
+ w_class = SIZE_MEDIUM
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 4b669934d1c1..d6874b7fafaa 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -661,7 +661,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
* * width - Screen' width.
* * height - Screen's height.
*/
-/datum/preferences/proc/SetChoices(mob/user, limit = 20, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750)
+/datum/preferences/proc/SetChoices(mob/user, limit = 20, list/splitJobs = list(JOB_AI_TECH, JOB_WO_CMO), width = 950, height = 750)
if(!GLOB.RoleAuthority)
return
@@ -684,6 +684,8 @@ GLOBAL_LIST_INIT(bgstate_options, list(
if(!job)
debug_log("Missing job for prefs: [role_name]")
continue
+ if(job.flags_startup_parameters & ROLE_HIDDEN)
+ continue
index++
if((index >= limit) || (job.title in splitJobs))
HTML += "
"
@@ -779,7 +781,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
* * width - Screen' width.
* * height - Screen's height.
*/
-/datum/preferences/proc/set_job_slots(mob/user, limit = 20, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750)
+/datum/preferences/proc/set_job_slots(mob/user, limit = 20, list/splitJobs = list(JOB_AI_TECH, JOB_WO_CMO), width = 950, height = 750)
if(!GLOB.RoleAuthority)
return
@@ -802,6 +804,8 @@ GLOBAL_LIST_INIT(bgstate_options, list(
if(!job)
debug_log("Missing job for prefs: [role_name]")
continue
+ if(job.flags_startup_parameters & ROLE_HIDDEN)
+ continue
index++
if((index >= limit) || (job.title in splitJobs))
HTML += " | "
diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm
index e02bb930d416..34f297d3e186 100644
--- a/code/modules/cm_marines/marines_consoles.dm
+++ b/code/modules/cm_marines/marines_consoles.dm
@@ -920,6 +920,7 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor)
JOB_SURGEON = 42,
JOB_NURSE = 43,
// 50-59: Engineering
+ JOB_AI_TECH = 50,
JOB_CHIEF_ENGINEER = 50,
JOB_ORDNANCE_TECH = 51,
JOB_MAINT_TECH = 52,
diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm
index 954e6adca7ec..8c7da0c10381 100644
--- a/code/modules/defenses/sentry.dm
+++ b/code/modules/defenses/sentry.dm
@@ -527,9 +527,25 @@
selected_categories[SENTRY_CATEGORY_IFF] = FACTION_COLONY
/obj/structure/machinery/defenses/sentry/premade/deployable/almayer
- fire_delay = 4
+ name = "UA-635C Static Gauss Turret"
+ desc = "A fully-automated defence turret with mid-range targeting capabilities. Armed with a modified M32-S Autocannon and an internal belt feed and modified for UA warship use."
+ fire_delay = 0.4 SECONDS
omni_directional = TRUE
+/obj/structure/machinery/defenses/sentry/premade/deployable/almayer/mini
+ name = "UA 512-S mini sentry"
+ desc = "A fully-automated defence turret with mid-range targeting capabilities. Armed with a modified M30 Autocannon and an internal belt feed and modified for UA warship use."
+ defense_type = "Mini"
+ fire_delay = 0.25 SECONDS
+ health = 150
+ health_max = 150
+ damage_mult = 0.6
+ density = FALSE
+ disassemble_time = 0.75 SECONDS
+ handheld_type = /obj/item/defenses/handheld/sentry/mini
+ composite_icon = FALSE
+
+
//the turret inside the shuttle sentry deployment system
/obj/structure/machinery/defenses/sentry/premade/dropship
density = TRUE
diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm
index 9bfa2335e94a..2b5f929a215a 100644
--- a/code/modules/gear_presets/synths.dm
+++ b/code/modules/gear_presets/synths.dm
@@ -606,12 +606,13 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/sling(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/device/working_joe_pda(new_human.back), WEAR_IN_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction(new_human), WEAR_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/spray/cleaner(new_human.back), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/synthetic/one_shot(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/spray/cleaner(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/bucket(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/mop(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/wet_sign(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/box/lights/mixed(new_human.back), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/spray/cleaner(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/bag/trash(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch(new_human), WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/circuitboard/apc(new_human.back), WEAR_IN_ACCESSORY)
@@ -633,11 +634,9 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mt(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/joe(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/inflatable/door(new_human), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/inflatable/door(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/synthetic/one_shot(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/inflatable(new_human), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/inflatable(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/briefcase/inflatable/small(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/maintenance_jack(new_human), WEAR_J_STORE)
diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm
index eb206c8259bf..1489a5b1d877 100644
--- a/code/modules/gear_presets/uscm_event.dm
+++ b/code/modules/gear_presets/uscm_event.dm
@@ -467,3 +467,78 @@
/*****************************************************************************************************/
+/datum/equipment_preset/uscm_event/ai_tech
+ name = "AI Technician (USCM)"
+ flags = EQUIPMENT_PRESET_EXTRA
+ faction = FACTION_MARINE
+ faction_group = list(FACTION_MARINE)
+ assignment = JOB_AI_TECH
+ rank = JOB_AI_TECH
+ paygrade = PAY_SHORT_MO2
+ role_comm_title = "AIST"
+ skills = /datum/skills/CE
+ languages = list(LANGUAGE_ENGLISH, LANGUAGE_RUSSIAN, LANGUAGE_JAPANESE, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_CHINESE)
+ idtype = /obj/item/card/id/silver
+ access = list(
+ ACCESS_MARINE_SENIOR,
+ ACCESS_MARINE_CE,
+ ACCESS_MARINE_ENGINEERING,
+ ACCESS_MARINE_COMMAND,
+ ACCESS_CIVILIAN_ENGINEERING,
+ ACCESS_MARINE_DATABASE,
+ ACCESS_MARINE_MAINT,
+ ACCESS_MARINE_OT,
+ ACCESS_MARINE_SYNTH,
+ ACCESS_MARINE_AI,
+ ACCESS_ARES_DEBUG,
+ )
+
+/datum/equipment_preset/uscm_event/ai_tech/load_vanity(mob/living/carbon/human/new_human)
+ return
+
+/datum/equipment_preset/uscm_event/ai_tech/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/dress(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(new_human), WEAR_HANDS)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster(new_human), WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/m44/custom/pkd_special(new_human.back), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/pkd(new_human.back), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/pkd(new_human.back), WEAR_IN_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/lockable(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest/black(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/flash(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/flashlight(new_human), WEAR_J_STORE)
+
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom/cdrcom/aist(new_human), WEAR_L_EAR)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/sling(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/ai_tech_pda(new_human.back), WEAR_IN_L_STORE)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_R_STORE)
+
+/datum/equipment_preset/uscm_event/ai_tech/corporate
+ name = "AI Technician (Contractor)"
+ faction_group = FACTION_LIST_MARINE_WY
+ paygrade = PAY_SHORT_WYC5
+
+ idtype = /obj/item/card/id/silver/cl
+
+/datum/equipment_preset/uscm_event/ai_tech/corporate/New()
+ . = ..()
+ /// WY version gets less access, but can use the CLs office.
+ access = get_access(ACCESS_LIST_MARINE_LIAISON_AIST)
+
+/datum/equipment_preset/uscm_event/ai_tech/corporate/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/blue(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcl/aist(new_human), WEAR_L_EAR)
+
+
+ ..()
diff --git a/colonialmarines.dme b/colonialmarines.dme
index 11902f619cad..5b4be362fbd8 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -887,6 +887,7 @@
#include "code\game\machinery\ARES\ARES_procs.dm"
#include "code\game\machinery\ARES\ARES_records.dm"
#include "code\game\machinery\ARES\ARES_step_triggers.dm"
+#include "code\game\machinery\ARES\debug_pda.dm"
#include "code\game\machinery\atmoalter\canister.dm"
#include "code\game\machinery\atmoalter\meter.dm"
#include "code\game\machinery\atmoalter\portable_atmospherics.dm"
diff --git a/icons/landmarks.dmi b/icons/landmarks.dmi
index 08b23758beaa..54ab20593c62 100644
Binary files a/icons/landmarks.dmi and b/icons/landmarks.dmi differ
diff --git a/icons/mob/hud/marine_hud.dmi b/icons/mob/hud/marine_hud.dmi
index 8eefce871099..8b69f5408a63 100644
Binary files a/icons/mob/hud/marine_hud.dmi and b/icons/mob/hud/marine_hud.dmi differ
diff --git a/icons/mob/hud/sec_hud.dmi b/icons/mob/hud/sec_hud.dmi
index 9cc3e66c3e0b..c33950cb867a 100644
Binary files a/icons/mob/hud/sec_hud.dmi and b/icons/mob/hud/sec_hud.dmi differ
diff --git a/icons/obj/items/experimental_tools.dmi b/icons/obj/items/experimental_tools.dmi
index d490d78c7ffa..d630484f5058 100644
Binary files a/icons/obj/items/experimental_tools.dmi and b/icons/obj/items/experimental_tools.dmi differ
diff --git a/icons/obj/items/synth/ait_pda.dmi b/icons/obj/items/synth/ait_pda.dmi
new file mode 100644
index 000000000000..3242473c2d3a
Binary files /dev/null and b/icons/obj/items/synth/ait_pda.dmi differ
diff --git a/icons/obj/structures/props/almayer_props.dmi b/icons/obj/structures/props/almayer_props.dmi
index e928213f8f30..c2a6b52c5304 100644
Binary files a/icons/obj/structures/props/almayer_props.dmi and b/icons/obj/structures/props/almayer_props.dmi differ
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index 4d84eb26487f..6640691f2ebc 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -1469,19 +1469,6 @@
icon_state = "redfull"
},
/area/almayer/shipboard/starboard_missiles)
-"aih" = (
-/obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor{
- dir = 2;
- name = "\improper Officer's Cafeteria"
- },
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/living/cafeteria_officer)
"aij" = (
/obj/structure/machinery/camera/autoname/almayer{
dir = 8;
@@ -1495,14 +1482,6 @@
icon_state = "silver"
},
/area/almayer/living/cafeteria_officer)
-"ain" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 9
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/living/cafeteria_officer)
"aiq" = (
/turf/open/floor/almayer,
/area/almayer/living/cafeteria_officer)
@@ -2675,28 +2654,6 @@
},
/turf/open/floor/almayer,
/area/almayer/engineering/upper_engineering)
-"aqg" = (
-/obj/structure/pipes/standard/simple/hidden/supply,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/engineering/upper_engineering)
-"aqh" = (
-/obj/structure/flora/pottedplant{
- icon_state = "pottedplant_21"
- },
-/obj/structure/sign/safety/distribution_pipes{
- pixel_x = 32
- },
-/turf/open/floor/almayer{
- dir = 4;
- icon_state = "orange"
- },
-/area/almayer/engineering/upper_engineering)
"aqm" = (
/obj/item/bedsheet/brown,
/obj/structure/bed,
@@ -2986,20 +2943,6 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering)
-"ars" = (
-/obj/item/device/radio/intercom{
- freerange = 1;
- name = "General Listening Channel";
- pixel_y = 28
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "orange"
- },
-/area/almayer/engineering/upper_engineering)
"ary" = (
/obj/effect/decal/warning_stripes{
icon_state = "SE-out"
@@ -4410,13 +4353,6 @@
icon_state = "red"
},
/area/almayer/lifeboat_pumps/north2)
-"aye" = (
-/obj/structure/bed/chair,
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "orange"
- },
-/area/almayer/engineering/upper_engineering)
"ayi" = (
/obj/structure/machinery/recharger,
/obj/structure/surface/table/almayer,
@@ -4835,6 +4771,15 @@
},
/turf/open/floor/almayer,
/area/almayer/command/cichallway)
+"azT" = (
+/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)
"azU" = (
/obj/structure/machinery/camera/autoname/almayer{
dir = 8;
@@ -5174,15 +5119,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/upper_engineering)
-"aBl" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/almayer,
-/area/almayer/engineering/upper_engineering)
"aBm" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -5570,11 +5506,6 @@
icon_state = "orangecorner"
},
/area/almayer/engineering/upper_engineering)
-"aDh" = (
-/turf/open/floor/almayer{
- icon_state = "cargo"
- },
-/area/almayer/engineering/upper_engineering)
"aDi" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/door/window/westright,
@@ -6017,14 +5948,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/command/telecomms)
-"aFl" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/engineering/upper_engineering)
"aFm" = (
/obj/structure/surface/table/almayer,
/obj/item/shard,
@@ -8455,6 +8378,15 @@
icon_state = "kitchen"
},
/area/almayer/living/captain_mess)
+"aSy" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/upper_engineering)
"aSA" = (
/obj/structure/machinery/camera/autoname/almayer{
dir = 4;
@@ -10491,6 +10423,14 @@
icon_state = "plate"
},
/area/almayer/hallways/hangar)
+"bfN" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SW-out"
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"bfO" = (
/obj/structure/pipes/vents/pump/on,
/turf/open/floor/almayer,
@@ -11909,6 +11849,26 @@
icon_state = "mono"
},
/area/almayer/lifeboat_pumps/south1)
+"bpx" = (
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES Interior";
+ name = "\improper ARES Inner Chamber Shutters";
+ plane = -7
+ },
+/obj/effect/step_trigger/ares_alert/core,
+/obj/structure/sign/safety/laser{
+ pixel_x = 32;
+ pixel_y = -8
+ },
+/obj/structure/sign/safety/rewire{
+ 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"
+ },
+/area/almayer/command/airoom)
"bpz" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply,
@@ -12131,6 +12091,18 @@
/obj/structure/pipes/vents/scrubber,
/turf/open/floor/almayer,
/area/almayer/living/offices)
+"brc" = (
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 10
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 4
+ },
+/area/almayer/command/aist_office)
"brf" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/structure/machinery/computer/cameras/almayer_network/vehicle{
@@ -12610,6 +12582,18 @@
icon_state = "green"
},
/area/almayer/living/offices)
+"buH" = (
+/obj/effect/step_trigger/ares_alert/mainframe,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES Mainframe Left";
+ name = "\improper ARES Mainframe Shutters";
+ plane = -7
+ },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"buM" = (
/obj/structure/machinery/cm_vending/clothing/smartgun/bravo,
/turf/open/floor/almayer{
@@ -13427,6 +13411,12 @@
icon_state = "blue"
},
/area/almayer/hallways/upper/midship_hallway)
+"bBL" = (
+/obj/structure/machinery/light,
+/turf/open/floor/almayer{
+ icon_state = "orange"
+ },
+/area/almayer/hallways/upper/midship_hallway)
"bBN" = (
/obj/structure/machinery/light,
/turf/open/floor/plating/plating_catwalk,
@@ -14090,15 +14080,6 @@
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
@@ -14533,18 +14514,6 @@
icon_state = "plate"
},
/area/almayer/hallways/hangar)
-"bIp" = (
-/obj/effect/step_trigger/ares_alert/mainframe,
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES Mainframe Left";
- name = "\improper ARES Mainframe Shutters";
- plane = -7
- },
-/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
-/turf/open/floor/almayer/no_build{
- icon_state = "test_floor4"
- },
-/area/almayer/command/airoom)
"bIs" = (
/obj/structure/largecrate/supply/supplies/mre,
/obj/structure/machinery/light/small{
@@ -16812,6 +16781,36 @@
icon_state = "test_floor4"
},
/area/almayer/living/chapel)
+"bWu" = (
+/obj/structure/machinery/door_control{
+ id = "ARES StairsUpper";
+ name = "ARES Core Access";
+ pixel_x = -5;
+ pixel_y = -24;
+ req_one_access_txt = "91;92"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES StairsLock";
+ name = "ARES Exterior Lockdown";
+ pixel_y = -24;
+ 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/computer/cameras/almayer{
+ dir = 4;
+ pixel_y = 12
+ },
+/obj/structure/machinery/computer/cameras/almayer/ares{
+ dir = 4;
+ pixel_y = -1
+ },
+/turf/open/floor/almayer/aicore/no_build,
+/area/almayer/command/airoom)
"bWJ" = (
/obj/structure/machinery/shower{
dir = 4
@@ -17700,6 +17699,12 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/charlie)
+"cfB" = (
+/obj/structure/machinery/sentry_holder/almayer/mini/aicore,
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"cfE" = (
/turf/open/floor/almayer{
dir = 8;
@@ -19521,6 +19526,17 @@
},
/turf/open/floor/almayer,
/area/almayer/shipboard/brig/cells)
+"czu" = (
+/obj/structure/stairs,
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = 3;
+ vector_y = 1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_plates"
+ },
+/area/almayer/command/aist_office)
"czN" = (
/obj/item/device/radio/intercom{
freerange = 1;
@@ -19666,6 +19682,16 @@
},
/turf/open/floor/almayer,
/area/almayer/living/chapel)
+"cCh" = (
+/obj/structure/pipes/standard/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/engineering/upper_engineering)
"cCD" = (
/obj/structure/platform{
dir = 8;
@@ -20086,21 +20112,6 @@
/obj/structure/sign/prop2,
/turf/closed/wall/almayer,
/area/almayer/shipboard/sea_office)
-"cJI" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/structure/machinery/disposal/delivery{
- density = 0;
- desc = "A pneumatic delivery unit.";
- icon_state = "delivery_engi";
- name = "Returns";
- pixel_y = 28;
- pixel_x = 25
- },
-/obj/structure/surface/rack,
-/turf/open/floor/almayer/aicore/no_build,
-/area/almayer/command/airoom)
"cJK" = (
/obj/effect/decal/warning_stripes{
icon_state = "E";
@@ -21345,18 +21356,6 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall/almayer,
/area/almayer/engineering/lower/workshop/hangar)
-"ddO" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/hallways/upper/aft_hallway)
"deg" = (
/obj/structure/platform_decoration{
dir = 1
@@ -21384,6 +21383,16 @@
"deH" = (
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/warden_office)
+"deM" = (
+/obj/structure/machinery/cm_vending/clothing/senior_officer{
+ req_one_access_txt = "1;92";
+ req_access = null
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 5
+ },
+/area/almayer/command/aist_office)
"deT" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -21472,14 +21481,6 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/chief_mp_office)
-"dgI" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/turf/open/floor/prison{
- icon_state = "kitchen"
- },
-/area/almayer/living/cafeteria_officer)
"dha" = (
/turf/open/floor/almayer{
icon_state = "plate"
@@ -22384,24 +22385,14 @@
"dzp" = (
/turf/open/floor/almayer,
/area/almayer/command/corporateliaison)
-"dzt" = (
-/obj/effect/decal/warning_stripes{
- icon_state = "N";
- pixel_y = 1
- },
-/obj/effect/decal/warning_stripes{
- icon_state = "S";
- layer = 3.3
- },
-/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
- autoname = 0;
- c_tag = "AI - Secondary Processors"
+"dzF" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
},
-/turf/open/floor/almayer/aicore/no_build{
- icon_state = "ai_floor2"
+/turf/open/floor/almayer{
+ icon_state = "mono"
},
-/area/almayer/command/airoom)
+/area/almayer/hallways/upper/starboard)
"dzG" = (
/obj/structure/reagent_dispensers/peppertank{
pixel_y = 26
@@ -22840,16 +22831,6 @@
icon_state = "plate"
},
/area/almayer/hallways/lower/vehiclehangar)
-"dFN" = (
-/obj/structure/pipes/standard/manifold/hidden/supply{
- dir = 8
- },
-/obj/structure/disposalpipe/junction{
- dir = 2;
- icon_state = "pipe-j2"
- },
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/engineering/upper_engineering)
"dFR" = (
/turf/open/floor/almayer{
dir = 9;
@@ -23036,6 +23017,12 @@
icon_state = "plate"
},
/area/almayer/maint/hull/upper/p_bow)
+"dJC" = (
+/obj/structure/machinery/sentry_holder/almayer/mini/aicore,
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"dJG" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 9
@@ -23390,6 +23377,14 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/lower/starboard_midship_hallway)
+"dRf" = (
+/obj/structure/disposalpipe/up/almayer{
+ dir = 4;
+ id = "ares_vault_out";
+ name = "aicore"
+ },
+/turf/closed/wall/almayer/aicore/hull,
+/area/almayer/command/airoom)
"dRh" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -24500,13 +24495,6 @@
/obj/structure/window/framed/almayer,
/turf/open/floor/plating,
/area/almayer/living/grunt_rnr)
-"ejx" = (
-/obj/structure/pipes/standard/simple/hidden/supply,
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "silver"
- },
-/area/almayer/hallways/upper/midship_hallway)
"ejV" = (
/obj/structure/closet,
/obj/item/device/flashlight/pen,
@@ -24692,12 +24680,6 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/medical_science)
-"emL" = (
-/obj/structure/machinery/light,
-/turf/open/floor/almayer{
- icon_state = "orange"
- },
-/area/almayer/hallways/upper/midship_hallway)
"ene" = (
/turf/open/floor/almayer{
dir = 4;
@@ -25148,13 +25130,18 @@
},
/area/almayer/shipboard/starboard_point_defense)
"etM" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
/obj/effect/decal/warning_stripes{
icon_state = "S";
layer = 3.3
},
-/obj/effect/decal/warning_stripes{
- icon_state = "NE-out";
- pixel_y = 1
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 4;
+ c_tag = "AI - Primary Processors";
+ autoname = 0
},
/turf/open/floor/almayer/aicore/no_build{
icon_state = "ai_floor2"
@@ -25549,6 +25536,17 @@
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer,
/area/almayer/living/briefing)
+"eBo" = (
+/obj/structure/stairs{
+ icon_state = "ramptop"
+ },
+/obj/effect/projector{
+ name = "Almayer_AresUp";
+ vector_x = -3;
+ vector_y = -1
+ },
+/turf/open/floor/almayer/aicore/no_build,
+/area/almayer/command/airoom)
"eBx" = (
/obj/structure/closet/emcloset/legacy,
/turf/open/floor/almayer{
@@ -25695,15 +25693,6 @@
},
/turf/open/floor/almayer,
/area/almayer/living/bridgebunks)
-"eDT" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "orange"
- },
-/area/almayer/engineering/upper_engineering)
"eEc" = (
/obj/structure/machinery/light,
/obj/effect/decal/warning_stripes{
@@ -25740,6 +25729,14 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/lower/starboard_midship_hallway)
+"eFi" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 5
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"eFj" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/manifold/hidden/supply{
@@ -26103,6 +26100,12 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_m_s)
+"eLI" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 6
+ },
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/hallways/upper/starboard)
"eLX" = (
/obj/structure/bed/chair{
dir = 4
@@ -26271,36 +26274,6 @@
icon_state = "cargo"
},
/area/almayer/engineering/lower/workshop/hangar)
-"eQj" = (
-/obj/structure/machinery/door_control{
- id = "ARES StairsUpper";
- name = "ARES Core Access";
- pixel_x = -5;
- pixel_y = -24;
- req_one_access_txt = "91;92"
- },
-/obj/structure/machinery/door_control{
- id = "ARES StairsLock";
- name = "ARES Exterior Lockdown";
- pixel_y = -24;
- 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/computer/cameras/almayer{
- dir = 4;
- pixel_y = 12
- },
-/obj/structure/machinery/computer/cameras/almayer/ares{
- dir = 4;
- pixel_y = -1
- },
-/turf/open/floor/almayer/aicore/no_build,
-/area/almayer/command/airoom)
"eQm" = (
/obj/structure/machinery/power/apc/almayer{
dir = 1
@@ -26679,21 +26652,6 @@
/obj/structure/pipes/vents/pump,
/turf/open/floor/almayer,
/area/almayer/living/offices)
-"eXy" = (
-/obj/effect/projector{
- name = "Almayer_AresDown";
- vector_x = 96;
- vector_y = -65
- },
-/obj/structure/stairs{
- dir = 1;
- icon_state = "ramptop"
- },
-/turf/open/floor/almayer/aicore/glowing/no_build{
- icon_state = "ai_floor3";
- light_range = 3
- },
-/area/almayer/command/airoom)
"eXD" = (
/obj/structure/prop/invuln/lattice_prop{
dir = 1;
@@ -26705,6 +26663,13 @@
icon_state = "plate"
},
/area/almayer/maint/hull/lower/l_m_s)
+"eYb" = (
+/obj/structure/window/framed/almayer,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/almayer/living/cafeteria_officer)
"eYj" = (
/obj/structure/machinery/light{
dir = 8
@@ -26744,6 +26709,14 @@
icon_state = "plating"
},
/area/almayer/squads/req)
+"eYs" = (
+/obj/structure/disposalpipe/down/almayer{
+ dir = 8;
+ id = "ares_vault_in";
+ name = "aicore"
+ },
+/turf/closed/wall/almayer/aicore/hull,
+/area/almayer/command/airoom)
"eYu" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/structure/machinery/computer/squad_changer{
@@ -26831,6 +26804,19 @@
icon_state = "plating"
},
/area/almayer/engineering/lower/engine_core)
+"eZs" = (
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
+/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass{
+ name = "\improper Engineering Reception"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/pipes/standard/simple/hidden/supply,
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/engineering/upper_engineering)
"eZC" = (
/turf/open/floor/almayer{
icon_state = "plate"
@@ -27166,6 +27152,19 @@
icon_state = "green"
},
/area/almayer/living/grunt_rnr)
+"feB" = (
+/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)
"feD" = (
/obj/structure/flora/pottedplant{
icon_state = "pottedplant_22";
@@ -27208,6 +27207,19 @@
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/perma)
+"ffi" = (
+/obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor{
+ dir = 2;
+ name = "\improper Officer's Cafeteria"
+ },
+/obj/structure/machinery/door/firedoor/border_only/almayer,
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/living/cafeteria_officer)
"ffq" = (
/obj/structure/surface/table/almayer,
/obj/item/clothing/head/hardhat{
@@ -27339,6 +27351,21 @@
/obj/item/storage/toolbox/mechanical,
/turf/open/floor/almayer,
/area/almayer/engineering/upper_engineering)
+"fht" = (
+/obj/effect/projector{
+ name = "Almayer_AresDown";
+ vector_x = 96;
+ vector_y = -65
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "ai_floor3";
+ light_range = 3
+ },
+/area/almayer/command/airoom)
"fhH" = (
/obj/structure/machinery/light,
/turf/open/floor/almayer{
@@ -27540,6 +27567,25 @@
/obj/structure/blocker/fuelpump,
/turf/open/floor/almayer,
/area/almayer/lifeboat_pumps/north1)
+"fnt" = (
+/obj/structure/surface/table/reinforced/almayer_B{
+ indestructible = 1;
+ unacidable = 1;
+ unslashable = 1
+ },
+/obj/item/paper_bin/uscm{
+ pixel_y = 6;
+ pixel_x = -12
+ },
+/obj/item/tool/pen{
+ pixel_x = -14
+ },
+/obj/structure/machinery/aicore_lockdown{
+ pixel_y = 4;
+ pixel_x = 3
+ },
+/turf/open/floor/almayer/aicore/no_build,
+/area/almayer/command/airoom)
"fnv" = (
/obj/structure/machinery/light{
dir = 4
@@ -27878,17 +27924,6 @@
icon_state = "red"
},
/area/almayer/shipboard/starboard_missiles)
-"frM" = (
-/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/glowing/no_build,
-/area/almayer/command/airoom)
"fsf" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -28692,14 +28727,6 @@
icon_state = "green"
},
/area/almayer/shipboard/brig/cells)
-"fKe" = (
-/obj/effect/decal/warning_stripes{
- icon_state = "SW-out"
- },
-/turf/open/floor/almayer/aicore/no_build{
- icon_state = "ai_floor2"
- },
-/area/almayer/command/airoom)
"fKh" = (
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/poddoor/shutters/almayer/cl/quarter/window,
@@ -28858,26 +28885,14 @@
icon_state = "bluefull"
},
/area/almayer/living/briefing)
-"fMt" = (
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES Interior";
- name = "\improper ARES Inner Chamber Shutters";
- plane = -7
- },
-/obj/effect/step_trigger/ares_alert/core,
-/obj/structure/sign/safety/laser{
- pixel_x = 32;
- pixel_y = -8
- },
-/obj/structure/sign/safety/rewire{
- 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"
+"fMz" = (
+/obj/item/bedsheet/yellow,
+/obj/structure/bed,
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 1
},
-/area/almayer/command/airoom)
+/area/almayer/command/aist_office)
"fME" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 10
@@ -29523,6 +29538,13 @@
icon_state = "silver"
},
/area/almayer/command/cichallway)
+"gaW" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/aicore_lockdown,
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"gba" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/structure/machinery/faxmachine/uscm/command{
@@ -30126,6 +30148,12 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering/port)
+"gmR" = (
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 10
+ },
+/area/almayer/command/aist_office)
"gnu" = (
/obj/structure/surface/table/almayer,
/obj/item/facepaint/green,
@@ -31098,21 +31126,6 @@
icon_state = "plate"
},
/area/almayer/living/bridgebunks)
-"gDh" = (
-/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
- access_modified = 1;
- name = "\improper Security Vault";
- req_access = null;
- 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"
- },
-/area/almayer/command/airoom)
"gDk" = (
/obj/structure/sign/safety/stairs{
pixel_x = -15
@@ -31287,6 +31300,14 @@
icon_state = "mono"
},
/area/almayer/medical/medical_science)
+"gGC" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SE-out"
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"gGI" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/light{
@@ -31828,6 +31849,12 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering/starboard)
+"gPo" = (
+/obj/structure/flora/pottedplant/random,
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver"
+ },
+/area/almayer/command/aist_office)
"gPA" = (
/obj/structure/disposalpipe/segment{
dir = 2;
@@ -31998,23 +32025,6 @@
icon_state = "plate"
},
/area/almayer/hallways/lower/port_umbilical)
-"gTH" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/computer/skills{
- dir = 4;
- pixel_y = 18
- },
-/obj/structure/machinery/computer/secure_data{
- dir = 4
- },
-/obj/structure/machinery/computer/med_data/laptop{
- dir = 4;
- pixel_y = -18
- },
-/turf/open/floor/almayer/aicore/glowing/no_build{
- icon_state = "ai_floor3"
- },
-/area/almayer/command/airoom)
"gTK" = (
/obj/effect/decal/warning_stripes{
icon_state = "SW-out"
@@ -32912,6 +32922,21 @@
icon_state = "greencorner"
},
/area/almayer/hallways/lower/starboard_midship_hallway)
+"hiX" = (
+/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)
"hji" = (
/obj/structure/bed/chair{
dir = 4
@@ -35397,18 +35422,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/upper_engineering/port)
-"iav" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 9
- },
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
-/turf/open/floor/almayer{
- icon_state = "orangecorner"
- },
-/area/almayer/engineering/upper_engineering)
"iaF" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 4
@@ -35649,14 +35662,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_m_s)
-"igr" = (
-/obj/effect/decal/warning_stripes{
- icon_state = "SE-out"
- },
-/turf/open/floor/almayer/aicore/no_build{
- icon_state = "ai_floor2"
- },
-/area/almayer/command/airoom)
"igs" = (
/obj/structure/surface/table/almayer,
/obj/item/fuel_cell,
@@ -35690,6 +35695,12 @@
/obj/structure/closet/emcloset,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/upper/p_bow)
+"ihe" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"iho" = (
/obj/structure/machinery/door/airlock/almayer/maint{
dir = 1
@@ -35953,23 +35964,6 @@
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer,
/area/almayer/living/offices/flight)
-"imS" = (
-/obj/effect/step_trigger/clone_cleaner,
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES StairsUpper";
- name = "\improper ARES Core Shutters";
- 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"
- },
-/area/almayer/command/airoom)
"inh" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 8
@@ -36003,6 +35997,12 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/medical_science)
+"ioh" = (
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 6
+ },
+/area/almayer/command/aist_office)
"ios" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/item/paper_bin/uscm{
@@ -36373,6 +36373,22 @@
},
/turf/open/floor/plating,
/area/almayer/maint/lower/constr)
+"ivd" = (
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES AIST";
+ name = "\improper Privacy Shutters"
+ },
+/obj/structure/machinery/door/airlock/almayer/generic/glass{
+ name = "\improper AIST Office";
+ dir = 1;
+ req_one_access_txt = "90;91;92";
+ masterkey_resist = 1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_plates"
+ },
+/area/almayer/command/aist_office)
"ivf" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/item/device/camera,
@@ -36586,14 +36602,6 @@
icon_state = "blue"
},
/area/almayer/squads/delta)
-"izf" = (
-/obj/structure/disposalpipe/up/almayer{
- dir = 4;
- id = "ares_vault_out";
- name = "aicore"
- },
-/turf/closed/wall/almayer/aicore/hull,
-/area/almayer/command/airoom)
"izk" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -36603,6 +36611,33 @@
icon_state = "plate"
},
/area/almayer/living/offices)
+"izE" = (
+/obj/structure/surface/table/woodentable/fancy,
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/obj/structure/machinery/door_control/brbutton{
+ id = "Brig Lockdown Shutters";
+ name = "Brig Lockdown";
+ pixel_x = -12;
+ pixel_y = 26
+ },
+/obj/structure/machinery/door_control/brbutton{
+ id = "ARES StairsLock";
+ name = "ARES Exterior Lockdown Override";
+ pixel_x = -2;
+ 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)
"izG" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply,
@@ -37030,11 +37065,6 @@
icon_state = "plate"
},
/area/almayer/maint/upper/u_a_s)
-"iJs" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/pipes/standard/simple/hidden/supply,
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/engineering/upper_engineering)
"iJB" = (
/obj/structure/sign/safety/galley{
pixel_x = 8;
@@ -38000,6 +38030,14 @@
icon_state = "sterile_green_corner"
},
/area/almayer/medical/lower_medical_lobby)
+"iYc" = (
+/obj/structure/machinery/power/apc/almayer{
+ dir = 8
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/maint/hull/lower/l_a_s)
"iYe" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 10
@@ -38231,33 +38269,6 @@
icon_state = "sterile_green"
},
/area/almayer/medical/containment)
-"jbN" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/structure/machinery/light{
- dir = 8
- },
-/obj/structure/machinery/door_control/brbutton{
- id = "Brig Lockdown Shutters";
- name = "Brig Lockdown";
- pixel_x = -12;
- pixel_y = 26
- },
-/obj/structure/machinery/door_control/brbutton{
- id = "ARES StairsLock";
- name = "ARES Exterior Lockdown Override";
- pixel_x = -2;
- 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" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 4
@@ -38288,6 +38299,24 @@
icon_state = "plate"
},
/area/almayer/maint/hull/upper/u_a_p)
+"jcJ" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 8;
+ autoname = 0;
+ c_tag = "AI - Secondary Processors"
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"jcP" = (
/turf/open/floor/almayer{
icon_state = "plating_striped"
@@ -38326,6 +38355,15 @@
/obj/structure/largecrate/random/case/small,
/turf/open/floor/plating,
/area/almayer/maint/lower/constr)
+"jdw" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer,
+/area/almayer/engineering/upper_engineering)
"jdC" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer,
@@ -38761,6 +38799,18 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/lower/vehiclehangar)
+"jjR" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/turf/open/floor/almayer{
+ icon_state = "orangecorner"
+ },
+/area/almayer/engineering/upper_engineering)
"jjS" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -39201,18 +39251,6 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/lower/starboard_midship_hallway)
-"jqP" = (
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES Interior";
- name = "\improper ARES Inner Chamber Shutters";
- plane = -7
- },
-/obj/effect/step_trigger/ares_alert/core,
-/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
-/turf/open/floor/almayer/no_build{
- icon_state = "test_floor4"
- },
-/area/almayer/command/airoom)
"jqY" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -39783,6 +39821,18 @@
icon_state = "test_floor4"
},
/area/almayer/engineering/upper_engineering/port)
+"jBc" = (
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES Interior";
+ name = "\improper ARES Inner Chamber Shutters";
+ plane = -7
+ },
+/obj/effect/step_trigger/ares_alert/core,
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"jBy" = (
/obj/structure/machinery/light{
dir = 4
@@ -40111,13 +40161,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/medical/morgue)
-"jIs" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/pipes/standard/manifold/hidden/supply,
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/hallways/upper/midship_hallway)
"jIC" = (
/obj/structure/machinery/computer/working_joe{
dir = 4;
@@ -40139,6 +40182,21 @@
/obj/structure/machinery/faxmachine/uscm/brig/chief,
/turf/open/floor/wood/ship,
/area/almayer/shipboard/brig/chief_mp_office)
+"jIU" = (
+/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
+ access_modified = 1;
+ name = "\improper Security Vault";
+ req_access = null;
+ 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"
+ },
+/area/almayer/command/airoom)
"jIV" = (
/obj/structure/stairs/perspective{
icon_state = "p_stair_full"
@@ -40592,6 +40650,16 @@
icon_state = "cargo"
},
/area/almayer/engineering/upper_engineering/starboard)
+"jRP" = (
+/obj/structure/pipes/standard/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 2;
+ icon_state = "pipe-y"
+ },
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/hallways/upper/aft_hallway)
"jRS" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -41222,6 +41290,24 @@
allow_construction = 0
},
/area/almayer/hallways/upper/fore_hallway)
+"kbr" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/item/folder/white{
+ pixel_x = -12
+ },
+/obj/item/paper_bin/uscm{
+ pixel_y = 6
+ },
+/obj/item/tool/pen/fountain{
+ pixel_y = 3
+ },
+/obj/item/tool/pen/fountain{
+ pixel_y = 9
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver"
+ },
+/area/almayer/command/aist_office)
"kbv" = (
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/upper/starboard)
@@ -41337,6 +41423,22 @@
"kcN" = (
/turf/closed/wall/almayer/reinforced/temphull,
/area/almayer/living/commandbunks)
+"kdb" = (
+/obj/structure/filingcabinet{
+ density = 0;
+ pixel_x = 8;
+ pixel_y = 18
+ },
+/obj/structure/filingcabinet{
+ density = 0;
+ pixel_x = -8;
+ pixel_y = 18
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 9
+ },
+/area/almayer/command/aist_office)
"kde" = (
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/general_equipment)
@@ -42486,6 +42588,11 @@
"kyw" = (
/turf/closed/wall/almayer/outer,
/area/almayer/maint/hull/lower/l_m_s)
+"kyK" = (
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"kyN" = (
/obj/structure/disposalpipe/segment,
/obj/structure/sign/safety/distribution_pipes{
@@ -42696,6 +42803,15 @@
icon_state = "cargo"
},
/area/almayer/living/tankerbunks)
+"kCb" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/turf/open/floor/almayer,
+/area/almayer/engineering/upper_engineering)
"kCd" = (
/obj/structure/machinery/gear{
id = "vehicle_elevator_gears"
@@ -42776,6 +42892,17 @@
icon_state = "dark_sterile"
},
/area/almayer/medical/containment)
+"kCK" = (
+/obj/structure/stairs,
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = -3;
+ vector_y = -1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "ai_floor3"
+ },
+/area/almayer/command/airoom)
"kCY" = (
/obj/structure/machinery/sleep_console{
dir = 8
@@ -42809,16 +42936,6 @@
icon_state = "dark_sterile"
},
/area/almayer/medical/containment)
-"kDH" = (
-/obj/structure/pipes/standard/manifold/hidden/supply{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/engineering/upper_engineering)
"kDK" = (
/obj/structure/pipes/vents/scrubber,
/turf/open/floor/wood/ship,
@@ -42987,6 +43104,12 @@
icon_state = "emerald"
},
/area/almayer/squads/charlie)
+"kGL" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"kGQ" = (
/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
dir = 4
@@ -43343,14 +43466,6 @@
},
/turf/open/floor/wood/ship,
/area/almayer/living/basketball)
-"kNV" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/turf/open/floor/almayer{
- icon_state = "mono"
- },
-/area/almayer/hallways/upper/starboard)
"kNX" = (
/obj/structure/bed/chair/comfy/charlie{
dir = 1
@@ -43928,6 +44043,18 @@
icon_state = "silver"
},
/area/almayer/command/computerlab)
+"kXv" = (
+/obj/structure/bed/chair/office/dark{
+ dir = 4
+ },
+/obj/structure/machinery/computer/working_joe{
+ dir = 8;
+ pixel_x = 29
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"kXw" = (
/turf/open/floor/almayer{
dir = 1;
@@ -44106,19 +44233,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/cic_hallway)
-"laQ" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
-/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass{
- name = "\improper Engineering Reception"
- },
-/obj/structure/disposalpipe/segment,
-/obj/structure/pipes/standard/simple/hidden/supply,
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/engineering/upper_engineering)
"laU" = (
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/firedoor/border_only/almayer{
@@ -44882,6 +44996,13 @@
icon_state = "plate"
},
/area/almayer/engineering/upper_engineering/port)
+"lop" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/pipes/standard/manifold/hidden/supply,
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/hallways/upper/midship_hallway)
"lou" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -45332,6 +45453,15 @@
},
/turf/open/floor/wood/ship,
/area/almayer/living/basketball)
+"lwD" = (
+/obj/structure/stairs,
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = -3;
+ vector_y = -1
+ },
+/turf/open/floor/almayer/aicore/no_build,
+/area/almayer/command/airoom)
"lwG" = (
/obj/structure/machinery/suit_storage_unit/compression_suit/uscm,
/turf/open/floor/almayer{
@@ -45553,6 +45683,11 @@
},
/turf/open/floor/carpet,
/area/almayer/command/cichallway)
+"lAH" = (
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver"
+ },
+/area/almayer/command/aist_office)
"lAQ" = (
/obj/structure/machinery/cm_vending/gear/tl{
density = 0;
@@ -45669,6 +45804,15 @@
},
/turf/open/floor/almayer,
/area/almayer/command/lifeboat)
+"lDs" = (
+/obj/structure/machinery/status_display{
+ pixel_y = 30
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 1
+ },
+/area/almayer/command/aist_office)
"lDA" = (
/obj/structure/sign/safety/bulkhead_door{
pixel_x = 8;
@@ -46118,15 +46262,6 @@
icon_state = "orangecorner"
},
/area/almayer/hallways/upper/midship_hallway)
-"lLA" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
-/obj/structure/pipes/standard/simple/hidden/supply,
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/hallways/upper/midship_hallway)
"lLC" = (
/obj/structure/surface/table/almayer,
/turf/open/floor/almayer,
@@ -46352,6 +46487,23 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/cic_hallway)
+"lPG" = (
+/obj/structure/surface/table/reinforced/almayer_B{
+ indestructible = 1;
+ unacidable = 1;
+ unslashable = 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)
"lPO" = (
/obj/structure/surface/rack,
/turf/open/floor/almayer{
@@ -47625,15 +47777,6 @@
icon_state = "test_floor4"
},
/area/almayer/hallways/lower/starboard_umbilical)
-"mpZ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/turf/open/floor/almayer,
-/area/almayer/engineering/upper_engineering)
"mqb" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 8
@@ -47727,6 +47870,9 @@
icon_state = "green"
},
/area/almayer/squads/req)
+"mrS" = (
+/turf/closed/wall/almayer/aicore/white/hull,
+/area/almayer/command/aist_office)
"msg" = (
/obj/structure/machinery/light,
/obj/structure/sign/safety/waterhazard{
@@ -47875,16 +48021,6 @@
},
/turf/open/floor/almayer,
/area/almayer/lifeboat_pumps/north1)
-"mux" = (
-/obj/structure/machinery/camera/autoname/almayer{
- dir = 8;
- name = "ship-grade camera"
- },
-/turf/open/floor/almayer{
- dir = 4;
- icon_state = "orange"
- },
-/area/almayer/engineering/upper_engineering)
"muy" = (
/obj/effect/landmark/start/marine/engineer/alpha,
/obj/effect/landmark/late_join/alpha,
@@ -48034,6 +48170,21 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/stern)
+"myj" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/structure/machinery/disposal/delivery{
+ density = 0;
+ desc = "A pneumatic delivery unit.";
+ icon_state = "delivery_engi";
+ name = "Returns";
+ pixel_y = 28;
+ pixel_x = 25
+ },
+/obj/structure/surface/rack,
+/turf/open/floor/almayer/aicore/no_build,
+/area/almayer/command/airoom)
"myl" = (
/obj/structure/machinery/power/apc/almayer/hardened{
cell_type = /obj/item/cell/hyper;
@@ -48182,14 +48333,6 @@
icon_state = "blue"
},
/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" = (
/obj/structure/surface/table/almayer,
/obj/effect/spawner/random/tool,
@@ -48309,6 +48452,29 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/processing)
+"mBA" = (
+/obj/structure/surface/table/reinforced/almayer_B{
+ climbable = 0;
+ indestructible = 1;
+ unacidable = 1;
+ unslashable = 1
+ },
+/obj/structure/machinery/computer/cameras/almayer/ares{
+ pixel_x = -4;
+ pixel_y = 6
+ },
+/obj/structure/machinery/computer/cameras/almayer{
+ pixel_y = 6;
+ pixel_x = 28
+ },
+/obj/structure/machinery/computer/view_objectives{
+ pixel_x = 12;
+ pixel_y = 6
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"mBJ" = (
/obj/structure/stairs{
icon_state = "ramptop"
@@ -48330,6 +48496,23 @@
icon_state = "plate"
},
/area/almayer/maint/upper/u_a_p)
+"mCn" = (
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES StairsUpper";
+ name = "\improper ARES Core Shutters";
+ 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"
+ },
+/area/almayer/command/airoom)
"mCo" = (
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/firedoor/border_only/almayer{
@@ -48518,18 +48701,6 @@
allow_construction = 0
},
/area/almayer/hallways/lower/starboard_midship_hallway)
-"mFN" = (
-/obj/effect/step_trigger/ares_alert/mainframe,
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES Mainframe Right";
- name = "\improper ARES Mainframe Shutters";
- plane = -7
- },
-/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
-/turf/open/floor/almayer/no_build{
- icon_state = "test_floor4"
- },
-/area/almayer/command/airoom)
"mFO" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -48746,6 +48917,16 @@
icon_state = "blue"
},
/area/almayer/hallways/upper/midship_hallway)
+"mIV" = (
+/obj/structure/pipes/standard/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 2;
+ icon_state = "pipe-j2"
+ },
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/engineering/upper_engineering)
"mJa" = (
/obj/structure/closet/crate/trashcart,
/obj/item/trash/boonie,
@@ -49175,6 +49356,13 @@
allow_construction = 0
},
/area/almayer/hallways/lower/port_fore_hallway)
+"mQB" = (
+/obj/structure/pipes/standard/manifold/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/almayer,
+/area/almayer/hallways/upper/aft_hallway)
"mQC" = (
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/port_atmos)
@@ -49188,26 +49376,6 @@
icon_state = "test_floor4"
},
/area/almayer/maint/hull/lower/l_m_s)
-"mRn" = (
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES Interior";
- name = "\improper ARES Inner Chamber Shutters";
- plane = -7
- },
-/obj/effect/step_trigger/ares_alert/core,
-/obj/structure/sign/safety/terminal{
- pixel_x = -18;
- pixel_y = -8
- },
-/obj/structure/sign/safety/fibre_optics{
- 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"
- },
-/area/almayer/command/airoom)
"mRq" = (
/obj/structure/surface/table/almayer,
/obj/effect/decal/cleanable/dirt,
@@ -50183,6 +50351,11 @@
icon_state = "plate"
},
/area/almayer/command/corporateliaison)
+"ngZ" = (
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"nhi" = (
/obj/structure/bed/chair/comfy,
/obj/structure/window/reinforced/ultra,
@@ -50500,6 +50673,15 @@
light_range = 3
},
/area/almayer/command/airoom)
+"nkU" = (
+/obj/structure/machinery/light{
+ unacidable = 1;
+ unslashable = 1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver"
+ },
+/area/almayer/command/aist_office)
"nkX" = (
/obj/structure/surface/table/almayer,
/obj/structure/sign/safety/terminal{
@@ -50761,14 +50943,6 @@
},
/turf/open/floor/plating,
/area/almayer/engineering/starboard_atmos)
-"npq" = (
-/obj/structure/disposalpipe/down/almayer{
- dir = 8;
- id = "ares_vault_in";
- name = "aicore"
- },
-/turf/closed/wall/almayer/aicore/hull,
-/area/almayer/command/airoom)
"npt" = (
/obj/effect/decal/warning_stripes{
icon_state = "SE-out";
@@ -50807,6 +50981,18 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/lobby)
+"npW" = (
+/obj/effect/step_trigger/ares_alert/mainframe,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES Mainframe Right";
+ name = "\improper ARES Mainframe Shutters";
+ plane = -7
+ },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"nqe" = (
/obj/effect/decal/warning_stripes{
icon_state = "E";
@@ -51854,21 +52040,16 @@
icon_state = "red"
},
/area/almayer/command/lifeboat)
-"nKO" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
+"nKK" = (
+/obj/structure/machinery/camera/autoname/almayer{
+ dir = 8;
+ name = "ship-grade camera"
},
-/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{
+ dir = 4;
+ icon_state = "orange"
},
-/turf/open/floor/almayer/aicore/no_build,
-/area/almayer/command/airoom)
+/area/almayer/engineering/upper_engineering)
"nKP" = (
/obj/effect/decal/warning_stripes{
icon_state = "W"
@@ -51987,19 +52168,6 @@
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;
@@ -52629,19 +52797,6 @@
},
/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{
@@ -52752,6 +52907,14 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/upper_medical)
+"oas" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/turf/open/floor/prison{
+ icon_state = "kitchen"
+ },
+/area/almayer/living/cafeteria_officer)
"oaw" = (
/obj/structure/closet/firecloset,
/obj/item/clothing/mask/gas,
@@ -53048,6 +53211,12 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering/port)
+"ofJ" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 9
+ },
+/turf/open/floor/almayer,
+/area/almayer/engineering/upper_engineering)
"ofK" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -53145,6 +53314,18 @@
icon_state = "mono"
},
/area/almayer/lifeboat_pumps/north1)
+"ohC" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/obj/structure/machinery/door/airlock/almayer/generic{
+ name = "\improper AIST Office";
+ dir = 1;
+ req_one_access_txt = "31;92";
+ masterkey_resist = 1
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"ohE" = (
/obj/structure/machinery/landinglight/ds1/delayone{
dir = 4
@@ -54649,6 +54830,15 @@
/obj/effect/step_trigger/clone_cleaner,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/upper/fore_hallway)
+"oFD" = (
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
+/obj/structure/pipes/standard/simple/hidden/supply,
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/hallways/upper/midship_hallway)
"oFV" = (
/obj/structure/sign/poster{
pixel_x = -32;
@@ -55199,17 +55389,6 @@
icon_state = "plate"
},
/area/almayer/command/lifeboat)
-"oOW" = (
-/obj/structure/pipes/standard/simple/hidden/supply,
-/obj/structure/disposalpipe/junction{
- dir = 2;
- icon_state = "pipe-j2"
- },
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "orange"
- },
-/area/almayer/engineering/upper_engineering)
"oOZ" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -55338,12 +55517,33 @@
icon_state = "silver"
},
/area/almayer/living/auxiliary_officer_office)
+"oRb" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"oRk" = (
/turf/open/floor/almayer{
dir = 4;
icon_state = "red"
},
/area/almayer/shipboard/brig/processing)
+"oRl" = (
+/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)
"oRm" = (
/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{
name = "\improper Port Viewing Room"
@@ -55449,6 +55649,18 @@
icon_state = "plate"
},
/area/almayer/maint/hull/upper/u_m_s)
+"oSI" = (
+/obj/structure/flora/pottedplant{
+ icon_state = "pottedplant_21"
+ },
+/obj/structure/sign/safety/distribution_pipes{
+ pixel_x = 32
+ },
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/upper_engineering)
"oSL" = (
/obj/structure/window/reinforced{
dir = 8
@@ -55815,20 +56027,6 @@
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,
@@ -56162,6 +56360,26 @@
"pep" = (
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/upper/u_f_p)
+"peL" = (
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES Interior";
+ name = "\improper ARES Inner Chamber Shutters";
+ plane = -7
+ },
+/obj/effect/step_trigger/ares_alert/core,
+/obj/structure/sign/safety/terminal{
+ pixel_x = -18;
+ pixel_y = -8
+ },
+/obj/structure/sign/safety/fibre_optics{
+ 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"
+ },
+/area/almayer/command/airoom)
"peM" = (
/obj/structure/closet/firecloset,
/turf/open/floor/almayer{
@@ -56486,6 +56704,19 @@
icon_state = "ai_floor3"
},
/area/almayer/command/airoom)
+"plc" = (
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/door_control{
+ id = "ARES AIST";
+ name = "ARES Core Lockdown";
+ pixel_x = 24;
+ pixel_y = 8;
+ req_one_access_txt = "31;92"
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"pld" = (
/obj/item/book/manual/medical_diagnostics_manual,
/obj/structure/surface/rack,
@@ -56894,6 +57125,21 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/processing)
+"pts" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/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/glowing/no_build,
+/area/almayer/command/airoom)
"ptv" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/structure/platform{
@@ -57179,6 +57425,9 @@
icon_state = "cargo_arrow"
},
/area/almayer/squads/bravo)
+"pym" = (
+/turf/closed/wall/almayer/aicore/white/reinforced,
+/area/almayer/command/aist_office)
"pyx" = (
/obj/structure/machinery/door_display/research_cell{
dir = 4;
@@ -57302,12 +57551,6 @@
"pzW" = (
/turf/closed/wall/almayer/reinforced,
/area/almayer/hallways/lower/vehiclehangar)
-"pzX" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 9
- },
-/turf/open/floor/almayer,
-/area/almayer/engineering/upper_engineering)
"pAm" = (
/turf/open/floor/almayer,
/area/almayer/engineering/lower/engine_core)
@@ -57788,6 +58031,15 @@
icon_state = "blue"
},
/area/almayer/hallways/upper/midship_hallway)
+"pLH" = (
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 4
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 8
+ },
+/area/almayer/command/aist_office)
"pLO" = (
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 4;
@@ -57826,6 +58078,17 @@
icon_state = "mono"
},
/area/almayer/lifeboat_pumps/north2)
+"pMn" = (
+/obj/structure/stairs,
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = 3;
+ vector_y = 1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"pMp" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/almayer{
@@ -58187,6 +58450,10 @@
icon_state = "silver"
},
/area/almayer/command/computerlab)
+"pTg" = (
+/obj/structure/pipes/standard/manifold/hidden/supply,
+/turf/open/floor/almayer,
+/area/almayer/hallways/upper/aft_hallway)
"pTj" = (
/obj/structure/barricade/handrail{
dir = 8
@@ -58484,6 +58751,14 @@
icon_state = "red"
},
/area/almayer/hallways/lower/starboard_midship_hallway)
+"pYl" = (
+/obj/structure/pipes/standard/manifold/hidden/supply/no_boom{
+ dir = 1
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"pYo" = (
/obj/effect/decal/warning_stripes{
icon_state = "W"
@@ -59109,12 +59384,6 @@
icon_state = "dark_sterile"
},
/area/almayer/medical/lower_medical_lobby)
-"qit" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/item/paper_bin/uscm,
-/obj/item/tool/pen,
-/turf/open/floor/almayer/aicore/no_build,
-/area/almayer/command/airoom)
"qiy" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 1
@@ -59681,6 +59950,22 @@
icon_state = "silver"
},
/area/almayer/command/computerlab)
+"qrz" = (
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES StairsLower";
+ name = "\improper ARES Core Shutters";
+ plane = -7
+ },
+/obj/effect/step_trigger/ares_alert/public{
+ alert_id = "AresStairs";
+ alert_message = "Caution: Movement detected in ARES Core.";
+ cooldown_duration = 1200
+ },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"qsp" = (
/obj/structure/machinery/light/small,
/turf/open/floor/plating/plating_catwalk,
@@ -59693,13 +59978,6 @@
icon_state = "plating_striped"
},
/area/almayer/squads/req)
-"qsG" = (
-/obj/structure/pipes/standard/manifold/hidden/supply,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/almayer,
-/area/almayer/hallways/upper/aft_hallway)
"qsL" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer,
@@ -60576,16 +60854,6 @@
icon_state = "test_floor4"
},
/area/almayer/powered)
-"qHD" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/hallways/upper/aft_hallway)
"qHG" = (
/obj/structure/machinery/light/small{
dir = 1
@@ -60932,16 +61200,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/armory)
-"qMI" = (
-/obj/structure/pipes/standard/manifold/hidden/supply{
- dir = 1
- },
-/obj/structure/disposalpipe/junction{
- dir = 2;
- icon_state = "pipe-y"
- },
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/hallways/upper/aft_hallway)
"qMP" = (
/obj/structure/bed/chair/comfy{
dir = 8
@@ -61223,6 +61481,27 @@
icon_state = "orangefull"
},
/area/almayer/living/briefing)
+"qSH" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/light{
+ unacidable = 1;
+ unslashable = 1
+ },
+/obj/structure/transmitter/rotary{
+ name = "Office Telephone";
+ phone_category = "ARES";
+ phone_color = "blue";
+ phone_id = "AIST Office";
+ pixel_x = 8;
+ pixel_y = 9
+ },
+/obj/structure/machinery/aicore_lockdown{
+ pixel_x = -5
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver"
+ },
+/area/almayer/command/aist_office)
"qSI" = (
/obj/structure/surface/table/almayer,
/obj/item/tank/oxygen/red,
@@ -62571,6 +62850,15 @@
icon_state = "plate"
},
/area/almayer/maint/hull/lower/p_bow)
+"ror" = (
+/obj/structure/bed/chair{
+ dir = 8
+ },
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/upper_engineering)
"rou" = (
/obj/structure/machinery/cryopod/right{
pixel_y = 6
@@ -63157,6 +63445,13 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_m_s)
+"rAt" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/pipes/standard/manifold/hidden/supply{
+ dir = 8
+ },
+/turf/open/floor/almayer,
+/area/almayer/engineering/upper_engineering)
"rAw" = (
/obj/structure/stairs/perspective{
icon_state = "p_stair_full"
@@ -64030,15 +64325,6 @@
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
@@ -64104,6 +64390,14 @@
icon_state = "test_floor4"
},
/area/almayer/engineering/lower)
+"rPV" = (
+/obj/structure/pipes/vents/scrubber/no_boom{
+ dir = 1
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"rQc" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 1
@@ -64349,6 +64643,17 @@
icon_state = "silver"
},
/area/almayer/command/computerlab)
+"rUz" = (
+/obj/structure/pipes/standard/simple/hidden/supply,
+/obj/structure/disposalpipe/junction{
+ dir = 2;
+ icon_state = "pipe-j2"
+ },
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/upper_engineering)
"rUN" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/structure/disposalpipe/segment,
@@ -64407,6 +64712,12 @@
},
/turf/open/floor/plating,
/area/almayer/shipboard/brig/chief_mp_office)
+"rWo" = (
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 4
+ },
+/area/almayer/command/aist_office)
"rWs" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply{
@@ -64423,6 +64734,14 @@
"rWz" = (
/turf/open/floor/plating,
/area/almayer/maint/upper/u_m_s)
+"rWG" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "E"
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "ai_floor2"
+ },
+/area/almayer/command/airoom)
"rWL" = (
/obj/structure/barricade/metal,
/turf/open/floor/almayer{
@@ -64593,6 +64912,12 @@
icon_state = "plate"
},
/area/almayer/maint/upper/u_a_s)
+"rZj" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/item/paper_bin/uscm,
+/obj/item/tool/pen,
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"rZt" = (
/obj/effect/decal/warning_stripes{
icon_state = "W"
@@ -65652,15 +65977,6 @@
icon_state = "plate"
},
/area/almayer/shipboard/brig/perma)
-"sqo" = (
-/obj/structure/bed/chair{
- dir = 8
- },
-/turf/open/floor/almayer{
- dir = 4;
- icon_state = "orange"
- },
-/area/almayer/engineering/upper_engineering)
"sqW" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
/obj/item/seeds/tomatoseed,
@@ -65779,6 +66095,14 @@
allow_construction = 0
},
/area/almayer/stair_clone/upper)
+"sts" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"stu" = (
/obj/structure/machinery/sentry_holder/almayer,
/turf/open/floor/almayer{
@@ -66126,6 +66450,16 @@
icon_state = "plate"
},
/area/almayer/living/pilotbunks)
+"szQ" = (
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/obj/effect/step_trigger/clone_cleaner,
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 1
+ },
+/area/almayer/command/aist_office)
"szU" = (
/obj/structure/toilet{
dir = 8
@@ -66141,13 +66475,6 @@
icon_state = "blue"
},
/area/almayer/squads/delta)
-"sAw" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/pipes/standard/manifold/hidden/supply{
- dir = 8
- },
-/turf/open/floor/almayer,
-/area/almayer/engineering/upper_engineering)
"sAz" = (
/obj/effect/decal/warning_stripes{
icon_state = "W"
@@ -66570,6 +66897,14 @@
/obj/structure/machinery/light/small,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/p_bow)
+"sIz" = (
+/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)
"sIA" = (
/obj/structure/sign/poster{
desc = "This poster features Audrey Rainwater standing in a jacuzzi. She was the July 2182 centerfold in House Bunny Gentleman's Magazine. Don't ask how you know that.";
@@ -67077,6 +67412,14 @@
},
/turf/open/floor/almayer,
/area/almayer/living/briefing)
+"sTz" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 6
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"sTU" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply{
@@ -67136,6 +67479,19 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/cells)
+"sUu" = (
+/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)
"sUE" = (
/obj/structure/surface/table/reinforced/almayer_B,
/turf/open/floor/almayer{
@@ -67503,6 +67859,11 @@
icon_state = "plate"
},
/area/almayer/living/briefing)
+"tag" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/pipes/standard/simple/hidden/supply,
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/engineering/upper_engineering)
"tan" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 10
@@ -67868,6 +68229,13 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/lower/port_midship_hallway)
+"tgE" = (
+/obj/structure/pipes/standard/simple/hidden/supply,
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "silver"
+ },
+/area/almayer/hallways/upper/midship_hallway)
"tgJ" = (
/turf/open/floor/almayer,
/area/almayer/shipboard/brig/warden_office)
@@ -69091,6 +69459,18 @@
icon_state = "cargo_arrow"
},
/area/almayer/shipboard/starboard_missiles)
+"tzb" = (
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES StairsUpper";
+ name = "\improper ARES Core Shutters";
+ plane = -7
+ },
+/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"tzd" = (
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/firedoor/border_only/almayer{
@@ -69337,6 +69717,11 @@
icon_state = "plate"
},
/area/almayer/command/cic)
+"tCX" = (
+/turf/open/floor/almayer{
+ icon_state = "cargo"
+ },
+/area/almayer/engineering/upper_engineering)
"tDZ" = (
/obj/structure/machinery/cryopod{
pixel_y = 6
@@ -69403,18 +69788,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/charlie)
-"tFe" = (
-/obj/effect/step_trigger/clone_cleaner,
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES StairsUpper";
- name = "\improper ARES Core Shutters";
- plane = -7
- },
-/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown,
-/turf/open/floor/almayer/no_build{
- icon_state = "test_floor4"
- },
-/area/almayer/command/airoom)
"tFJ" = (
/obj/structure/largecrate/supply/supplies/mre,
/turf/open/floor/almayer{
@@ -69552,6 +69925,15 @@
icon_state = "orangecorner"
},
/area/almayer/living/briefing)
+"tHy" = (
+/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)
"tHF" = (
/obj/structure/machinery/light,
/turf/open/floor/almayer{
@@ -69694,6 +70076,14 @@
},
/turf/open/floor/almayer,
/area/almayer/squads/charlie_delta_shared)
+"tJG" = (
+/obj/structure/pipes/vents/pump/no_boom{
+ dir = 1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver"
+ },
+/area/almayer/command/aist_office)
"tJR" = (
/obj/structure/machinery/vending/cigarette,
/obj/structure/sign/safety/medical{
@@ -69773,6 +70163,15 @@
icon_state = "green"
},
/area/almayer/living/grunt_rnr)
+"tLf" = (
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 8
+ },
+/area/almayer/command/aist_office)
"tLZ" = (
/turf/open/floor/almayer{
icon_state = "green"
@@ -69849,6 +70248,30 @@
icon_state = "plate"
},
/area/almayer/maint/upper/u_a_s)
+"tOj" = (
+/obj/structure/machinery/cryopod/right{
+ layer = 3.1;
+ pixel_y = 13
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "S"
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "W";
+ pixel_x = -1
+ },
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_cargo"
+ },
+/area/almayer/command/aist_office)
"tOr" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -70298,14 +70721,6 @@
icon_state = "test_floor4"
},
/area/almayer/squads/req)
-"tXn" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/maint/hull/lower/l_a_s)
"tXo" = (
/turf/open/floor/almayer{
icon_state = "redcorner"
@@ -70729,10 +71144,6 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/lockerroom)
-"uez" = (
-/obj/structure/pipes/standard/manifold/hidden/supply,
-/turf/open/floor/almayer,
-/area/almayer/hallways/upper/aft_hallway)
"ueG" = (
/obj/item/bedsheet/orange,
/obj/structure/bed{
@@ -70963,14 +71374,6 @@
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,
@@ -71510,6 +71913,14 @@
icon_state = "test_floor4"
},
/area/almayer/shipboard/brig/starboard_hallway)
+"uuo" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 9
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/living/cafeteria_officer)
"uuu" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -72913,25 +73324,6 @@
},
/turf/open/floor/plating,
/area/almayer/engineering/upper_engineering/port)
-"uUB" = (
-/obj/structure/surface/table/reinforced/almayer_B{
- indestructible = 1;
- unacidable = 1;
- unslashable = 1
- },
-/obj/item/paper_bin/uscm{
- pixel_y = 6;
- pixel_x = -12
- },
-/obj/item/tool/pen{
- pixel_x = -14
- },
-/obj/structure/machinery/aicore_lockdown{
- pixel_y = 4;
- pixel_x = 3
- },
-/turf/open/floor/almayer/aicore/no_build,
-/area/almayer/command/airoom)
"uVc" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 1
@@ -73160,6 +73552,15 @@
icon_state = "orange"
},
/area/almayer/engineering/lower)
+"uYt" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/almayer,
+/area/almayer/engineering/upper_engineering)
"uYM" = (
/obj/structure/machinery/status_display{
pixel_y = -30
@@ -73485,6 +73886,13 @@
icon_state = "green"
},
/area/almayer/living/grunt_rnr)
+"vep" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 1
+ },
+/area/almayer/command/aist_office)
"veq" = (
/obj/structure/largecrate/random/barrel/green,
/turf/open/floor/almayer{
@@ -73635,6 +74043,18 @@
icon_state = "red"
},
/area/almayer/command/lifeboat)
+"vgK" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/sign/safety/terminal{
+ pixel_y = 26;
+ pixel_x = 8;
+ layer = 2.2
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 1
+ },
+/area/almayer/command/aist_office)
"vgO" = (
/turf/closed/wall/almayer/research/containment/wall/east,
/area/almayer/medical/containment/cell)
@@ -74115,12 +74535,6 @@
icon_state = "plate"
},
/area/almayer/living/gym)
-"vnM" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 6
- },
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/hallways/upper/starboard)
"vnY" = (
/turf/open/floor/almayer,
/area/almayer/hallways/lower/repair_bay)
@@ -74250,23 +74664,6 @@
/obj/item/clothing/mask/cigarette/weed,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/upper_engineering/port)
-"vpH" = (
-/obj/structure/surface/table/reinforced/almayer_B{
- indestructible = 1;
- unacidable = 1;
- unslashable = 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" = (
/obj/structure/sign/safety/hvac_old{
pixel_x = 8;
@@ -74525,6 +74922,21 @@
icon_state = "plate"
},
/area/almayer/hallways/hangar)
+"vsO" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/skills{
+ dir = 4;
+ pixel_y = 18
+ },
+/obj/structure/machinery/computer/secure_data{
+ dir = 4
+ },
+/obj/structure/machinery/computer/med_data/laptop{
+ dir = 4;
+ pixel_y = -18
+ },
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"vta" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer{
@@ -75171,24 +75583,6 @@
/obj/structure/largecrate/random/barrel/yellow,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/s_bow)
-"vCH" = (
-/obj/effect/decal/warning_stripes{
- icon_state = "N";
- pixel_y = 1
- },
-/obj/effect/decal/warning_stripes{
- icon_state = "S";
- layer = 3.3
- },
-/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 4;
- c_tag = "AI - Primary Processors";
- autoname = 0
- },
-/turf/open/floor/almayer/aicore/no_build{
- icon_state = "ai_floor2"
- },
-/area/almayer/command/airoom)
"vCO" = (
/obj/effect/landmark/start/bridge,
/turf/open/floor/plating/plating_catwalk,
@@ -75592,6 +75986,12 @@
icon_state = "red"
},
/area/almayer/shipboard/navigation)
+"vJA" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/turf/open/floor/almayer/aicore/no_build{
+ icon_state = "w_ai_floor1"
+ },
+/area/almayer/command/aist_office)
"vJR" = (
/obj/structure/barricade/handrail,
/turf/open/floor/plating/plating_catwalk,
@@ -75723,6 +76123,12 @@
icon_state = "cargo_arrow"
},
/area/almayer/squads/charlie)
+"vLD" = (
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 8
+ },
+/area/almayer/command/aist_office)
"vMb" = (
/obj/item/stool{
pixel_x = -15;
@@ -76577,6 +76983,16 @@
},
/turf/open/floor/almayer,
/area/almayer/engineering/lower)
+"vXs" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/hallways/upper/aft_hallway)
"vXv" = (
/obj/structure/machinery/light{
dir = 1
@@ -76766,6 +77182,20 @@
icon_state = "cargo"
},
/area/almayer/hallways/upper/fore_hallway)
+"wbp" = (
+/obj/item/device/radio/intercom{
+ freerange = 1;
+ name = "General Listening Channel";
+ pixel_y = 28
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/upper_engineering)
"wbu" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/camera/autoname/almayer{
@@ -76800,6 +77230,18 @@
icon_state = "green"
},
/area/almayer/living/grunt_rnr)
+"wbD" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/door/firedoor/border_only/almayer,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/hallways/upper/aft_hallway)
"wbJ" = (
/obj/structure/machinery/door_control/airlock{
id = "n_engi";
@@ -77383,22 +77825,6 @@
icon_state = "bluefull"
},
/area/almayer/command/cichallway)
-"wkM" = (
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- id = "ARES StairsLower";
- name = "\improper ARES Core Shutters";
- plane = -7
- },
-/obj/effect/step_trigger/ares_alert/public{
- alert_id = "AresStairs";
- alert_message = "Caution: Movement detected in ARES Core.";
- cooldown_duration = 1200
- },
-/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore,
-/turf/open/floor/almayer/no_build{
- icon_state = "test_floor4"
- },
-/area/almayer/command/airoom)
"wkX" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 6
@@ -77895,6 +78321,19 @@
icon_state = "plate"
},
/area/almayer/maint/hull/lower/l_a_s)
+"wtp" = (
+/obj/structure/stairs{
+ icon_state = "ramptop"
+ },
+/obj/effect/projector{
+ name = "Almayer_AresUp";
+ vector_x = 3;
+ vector_y = 1
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"wty" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -78261,13 +78700,6 @@
icon_state = "test_floor4"
},
/area/almayer/maint/hull/lower/l_m_s)
-"wyQ" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/aicore_lockdown,
-/turf/open/floor/almayer/no_build{
- icon_state = "plating"
- },
-/area/almayer/command/airoom)
"wzy" = (
/obj/effect/step_trigger/clone_cleaner,
/turf/open/floor/plating/plating_catwalk,
@@ -78290,6 +78722,26 @@
icon_state = "test_floor4"
},
/area/almayer/medical/lower_medical_medbay)
+"wAs" = (
+/obj/structure/stairs{
+ icon_state = "ramptop"
+ },
+/obj/effect/projector{
+ name = "Almayer_AresUp";
+ vector_x = 3;
+ vector_y = 1
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES AIST";
+ name = "ARES Core Lockdown";
+ pixel_x = 24;
+ pixel_y = -8;
+ req_one_access_txt = "31;92"
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_plates"
+ },
+/area/almayer/command/aist_office)
"wAE" = (
/obj/structure/machinery/door/firedoor/border_only/almayer{
dir = 2
@@ -79233,6 +79685,15 @@
icon_state = "bluefull"
},
/area/almayer/command/cichallway)
+"wQr" = (
+/obj/structure/pipes/vents/pump/no_boom/gas{
+ vent_tag = "AIST Office";
+ dir = 8
+ },
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_floor3"
+ },
+/area/almayer/command/aist_office)
"wQu" = (
/obj/effect/projector{
name = "Almayer_Up3";
@@ -79287,6 +79748,20 @@
},
/turf/open/floor/almayer,
/area/almayer/command/lifeboat)
+"wRK" = (
+/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)
"wRN" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
/obj/item/seeds/goldappleseed,
@@ -79616,6 +80091,13 @@
icon_state = "containment_corner_variant_2"
},
/area/almayer/medical/containment/cell)
+"wWo" = (
+/obj/structure/bed/chair,
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/upper_engineering)
"wWq" = (
/obj/structure/surface/table/reinforced/black,
/obj/item/clothing/suit/space/compression/uscm,
@@ -80032,13 +80514,6 @@
icon_state = "test_floor4"
},
/area/almayer/engineering/laundry)
-"xfm" = (
-/obj/structure/window/framed/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
-/turf/open/floor/plating,
-/area/almayer/living/cafeteria_officer)
"xfq" = (
/obj/structure/sign/safety/hvac_old{
pixel_x = 8;
@@ -81298,6 +81773,14 @@
icon_state = "red"
},
/area/almayer/lifeboat_pumps/south1)
+"xAX" = (
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/engineering/upper_engineering)
"xAY" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -82279,6 +82762,16 @@
icon_state = "red"
},
/area/almayer/hallways/lower/starboard_midship_hallway)
+"xSy" = (
+/obj/structure/pipes/standard/simple/hidden/supply,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/engineering/upper_engineering)
"xSz" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/status_display{
@@ -82635,15 +83128,6 @@
icon_state = "mono"
},
/area/almayer/lifeboat_pumps/south1)
-"xYZ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
- dir = 4
- },
-/turf/open/floor/almayer,
-/area/almayer/engineering/upper_engineering)
"xZk" = (
/obj/item/prop/helmetgarb/gunoil{
layer = 4.2;
@@ -82784,6 +83268,17 @@
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
+"yaV" = (
+/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
+ name = "\improper AIST Office";
+ req_access = null;
+ req_one_access_txt = "90;91;92"
+ },
+/obj/effect/step_trigger/clone_cleaner,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"yaX" = (
/obj/structure/machinery/door/poddoor/railing{
dir = 2;
@@ -82836,6 +83331,14 @@
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer,
/area/almayer/hallways/lower/port_umbilical)
+"ybX" = (
+/obj/effect/landmark/late_join/aist,
+/obj/effect/landmark/start/aist,
+/turf/open/floor/almayer/aicore/glowing/no_build{
+ icon_state = "w_ai_silver";
+ dir = 1
+ },
+/area/almayer/command/aist_office)
"ybZ" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/structure/transmitter{
@@ -102289,7 +102792,7 @@ jUV
cmr
agj
agj
-jbN
+izE
mTc
hkX
yfG
@@ -120159,10 +120662,10 @@ sVV
sVV
sVV
sVV
-vnM
-lLA
-ejx
-jIs
+eLI
+oFD
+tgE
+lop
xLw
vOy
woh
@@ -120362,7 +120865,7 @@ xMz
lIY
gxn
aMy
-kNV
+dzF
wNC
wlr
xyp
@@ -120565,7 +121068,7 @@ njn
ael
ael
agQ
-aih
+ffi
ael
hyT
lGh
@@ -120768,7 +121271,7 @@ lzt
ael
afE
agT
-dgI
+oas
ael
ogT
yiu
@@ -120971,7 +121474,7 @@ jFM
ael
afH
agV
-ain
+uuo
ael
cQC
poD
@@ -121175,7 +121678,7 @@ ael
afI
agY
aiq
-xfm
+eYb
xIj
qdJ
iCg
@@ -121378,7 +121881,7 @@ ael
afJ
agY
aiq
-xfm
+eYb
xIj
qdJ
xIj
@@ -121387,7 +121890,7 @@ onU
onU
qwJ
cOV
-imS
+mCn
rxl
xQV
qQS
@@ -121587,10 +122090,10 @@ qdJ
xIj
mOi
vRA
-oYZ
+wRK
ezq
-eXy
-tFe
+fht
+tzb
xQV
pax
tCC
@@ -121793,10 +122296,10 @@ mAs
mAs
flR
uMO
-tFe
+tzb
xVc
xQV
-vpH
+lPG
aqU
gjB
wDy
@@ -121997,9 +122500,9 @@ mOi
mOi
mOi
mOi
-mAe
-mAe
-mAe
+sIz
+sIz
+sIz
aqU
jVE
nTs
@@ -122202,7 +122705,7 @@ tqu
aqU
gpW
ofY
-eQj
+bWu
aqU
lyE
rsO
@@ -122608,7 +123111,7 @@ ryn
mOi
xdA
qQS
-uUB
+fnt
aqU
aHq
cnH
@@ -124425,8 +124928,8 @@ asA
msS
nZf
rho
-jIs
-emL
+lop
+bBL
jvY
jvY
jvY
@@ -125643,7 +126146,7 @@ aep
aep
aep
umI
-ddO
+wbD
umI
jvY
alL
@@ -126252,7 +126755,7 @@ oVo
oVo
cMx
nSw
-qsG
+mQB
qhT
jvY
jvY
@@ -126455,7 +126958,7 @@ fIK
fIK
wuS
tzF
-qsG
+mQB
qhT
alL
urM
@@ -126667,7 +127170,7 @@ arq
arq
arq
aze
-xYZ
+jdw
aDe
arq
arq
@@ -126861,20 +127364,20 @@ oVo
rYU
cMx
nXV
-qMI
+jRP
rUN
-aqg
-oOW
+xSy
+rUz
atn
atn
atn
-sAw
+rAt
anP
aBh
anP
anP
-iJs
-dFN
+tag
+mIV
atn
aOB
aRj
@@ -127067,7 +127570,7 @@ sHI
lOn
acQ
kwd
-eDT
+aSy
amx
amx
amx
@@ -127077,7 +127580,7 @@ amx
amx
amx
amx
-mpZ
+kCb
amx
aoT
kwd
@@ -127270,17 +127773,17 @@ sHI
jao
qhT
alO
-ars
+wbp
amx
amx
aqf
-pzX
+ofJ
amx
amx
amx
amx
amx
-mpZ
+kCb
amx
aOC
alO
@@ -127473,7 +127976,7 @@ kYb
jao
qhT
inw
-eDT
+aSy
amx
amx
amx
@@ -127676,15 +128179,15 @@ sHI
jao
qhT
inw
-eDT
+aSy
amx
auB
-aqh
-sqo
-sqo
-aDh
-aDh
-mux
+oSI
+ror
+ror
+tCX
+tCX
+nKK
aya
aBo
amx
@@ -127888,7 +128391,7 @@ aqY
aBi
aDi
alO
-aye
+wWo
aBo
amx
aBs
@@ -128091,8 +128594,8 @@ amw
anO
aDj
inw
-aye
-mpZ
+wWo
+kCb
amx
aBs
alO
@@ -128294,8 +128797,8 @@ azh
aBk
aoT
inw
-aye
-mpZ
+wWo
+kCb
amx
aBs
alO
@@ -128494,11 +128997,11 @@ aoT
alO
aOG
amA
-kDH
+cCh
aOB
-laQ
+eZs
arr
-iav
+jjR
atc
aOF
alO
@@ -128697,9 +129200,9 @@ aoT
alO
axA
amA
-aBl
+uYt
aoT
-aFl
+xAX
arm
aIU
aMq
@@ -129297,7 +129800,7 @@ whO
whO
bYL
dlT
-qHD
+vXs
qhT
alO
arA
@@ -129906,7 +130409,7 @@ jhx
dnH
gpc
tzF
-uez
+pTg
qhT
wDM
uto
@@ -132641,7 +133144,7 @@ jEM
gCu
jEM
jEM
-tXn
+iYc
jEM
jEM
jEM
@@ -136466,21 +136969,21 @@ aKQ
aaa
aaa
aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
bdH
bdH
bdH
@@ -136668,7 +137171,6 @@ aaa
aKQ
aaa
aaa
-aak
bdH
bdH
bdH
@@ -136684,6 +137186,7 @@ bdH
bdH
bdH
bdH
+aak
bdH
bdH
bdH
@@ -136871,7 +137374,7 @@ aaa
aKQ
aaa
aaa
-aab
+aaa
aaa
bdH
bdH
@@ -136886,7 +137389,7 @@ bdH
bdH
bdH
bdH
-bdH
+aak
bdH
bdH
bdH
@@ -137073,23 +137576,23 @@ aaa
aaa
aKQ
aaa
-bdH
-aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
+iBn
bdH
bdH
bdH
+aak
bdH
aaa
aaa
@@ -137276,23 +137779,23 @@ aaa
aaa
aKQ
aaa
-bdH
-aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+iBn
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+iBn
+iBn
bdH
bdH
bdH
+aak
bdH
aaa
aaa
@@ -137479,23 +137982,23 @@ aaa
aaa
aKQ
aaa
-bdH
-aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+iBn
+mrS
+tOj
+tLf
+gmR
+pym
+kdb
+vLD
+pLH
+gmR
+mrS
+iBn
+iBn
bdH
bdH
bdH
+aak
bdH
aaa
aaa
@@ -137682,23 +138185,23 @@ aaa
aaa
aKQ
aaa
-bdH
-aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+iBn
+mrS
+ybX
+sTz
+ihe
+ohC
+ihe
+rPV
+ngZ
+lAH
+mrS
+iBn
+iBn
bdH
bdH
bdH
+aak
bdH
aaa
aaa
@@ -137885,23 +138388,23 @@ aaa
aaa
aKQ
aaa
-bdH
-aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+iBn
+mrS
+fMz
+oRb
+gPo
+pym
+mBA
+kXv
+cfB
+qSH
+mrS
+iBn
+iBn
bdH
bdH
bdH
+aak
bdH
aaa
aaa
@@ -138088,23 +138591,23 @@ aaa
aaa
aKQ
aaa
-bdH
-aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+iBn
+mrS
+vep
+pYl
+tJG
+pym
+vgK
+vJA
+vJA
+kbr
+mrS
+iBn
+iBn
bdH
bdH
bdH
+aak
bdH
aaa
aaa
@@ -138290,24 +138793,24 @@ aab
aaa
aaa
aKQ
-aaa
-bdH
-aak
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
bdH
+iBn
+mrS
+vep
+sts
+gPo
+pym
+lDs
+ngZ
+ngZ
+lAH
+mrS
+iBn
+iBn
bdH
bdH
bdH
+aak
bdH
aaa
aaa
@@ -138494,22 +138997,22 @@ aaa
aaa
aKQ
bdH
+iBn
+mrS
+deM
+brc
+ihe
+ohC
+ihe
+kGL
+eFi
+nkU
+mrS
+iBn
+iBn
+bdH
+bdH
bdH
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
-aak
aak
bdH
aaa
@@ -138697,19 +139200,19 @@ bdH
bdH
aKQ
bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+szQ
+kyK
+wQr
+lAH
+mrS
+iBn
+iBn
bdH
bdH
bdH
@@ -138899,20 +139402,20 @@ bdH
bdH
bdH
aKQ
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
+lmz
+mrS
+czu
+pMn
+wtp
+wAs
+ivd
+plc
+rWo
+rWo
+ioh
+mrS
+iBn
+iBn
bdH
bdH
bdH
@@ -139103,17 +139606,17 @@ lmz
lmz
lmz
lmz
-iBn
-iBn
-iBn
-iBn
-iBn
-iBn
-iBn
-iBn
-iBn
-iBn
-iBn
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
+mrS
iBn
iBn
bdH
@@ -139305,12 +139808,12 @@ lmz
lmz
lmz
lmz
-lmz
-lmz
-lmz
-lmz
-lmz
-lmz
+daz
+daz
+daz
+daz
+daz
+daz
lmz
lmz
lmz
@@ -139507,13 +140010,13 @@ lmz
lmz
lmz
lmz
-lmz
-lmz
-lmz
-lmz
-lmz
-lmz
-lmz
+daz
+jtj
+eBo
+eBo
+kCK
+lwD
+daz
lmz
lmz
lmz
@@ -139711,10 +140214,10 @@ lmz
lmz
daz
daz
+yaV
daz
-daz
-daz
-daz
+wnh
+wnh
daz
daz
daz
@@ -139916,13 +140419,13 @@ daz
vhe
qQS
cqm
-gTH
-qit
+vsO
+rZj
ebN
qQS
gwn
pfT
-vCH
+etM
dyp
daz
lmz
@@ -140121,11 +140624,11 @@ clw
qQS
sKY
qQS
-bIp
-fKe
+buH
+bfN
dDp
-bFg
-frM
+tHy
+pts
lcg
daz
lmz
@@ -140324,11 +140827,11 @@ eGr
xDC
dIn
rby
-bIp
+buH
euN
-ujn
+rWG
sEK
-etM
+feB
lcg
daz
lmz
@@ -140528,10 +141031,10 @@ lnS
uVv
flf
ebN
-rOz
+azT
kBy
kBy
-nNA
+oRl
fPB
daz
lmz
@@ -140719,7 +141222,7 @@ daz
daz
eKJ
yaZ
-ffE
+dJC
hZj
clw
daz
@@ -140732,7 +141235,7 @@ roH
ebN
daz
daz
-daz
+wnh
wnh
wnh
daz
@@ -140922,18 +141425,18 @@ daz
jYH
ubA
cck
-wyQ
+gaW
fmv
ubA
gMN
-mRn
+peL
dJO
vMt
dkz
aGk
ktQ
teZ
-wkM
+qrz
ege
hWP
bZq
@@ -141129,14 +141632,14 @@ nDy
ffE
ffE
ffE
-jqP
+jBc
cLo
clw
viB
dIi
qLS
erN
-wkM
+qrz
jvB
jtj
swx
@@ -141332,14 +141835,14 @@ ios
awu
ydI
aKs
-fMt
+bpx
mEs
gbm
oBD
lFj
vyE
mTr
-wkM
+qrz
qNc
jdl
dpp
@@ -141531,7 +142034,7 @@ daz
daz
eKJ
yaZ
-ffE
+dJC
hZj
fQD
daz
@@ -141544,7 +142047,7 @@ gXs
ebN
daz
daz
-daz
+wnh
wnh
wnh
daz
@@ -141948,11 +142451,11 @@ jrH
xDC
yaQ
vLz
-mFN
+npW
kSy
-bFg
+tHy
dDp
-nYg
+sUu
lcg
daz
lmz
@@ -142151,10 +142654,10 @@ qRX
qQS
aCd
qQS
-mFN
-igr
+npW
+gGC
sEK
-ujn
+rWG
mlb
lcg
daz
@@ -142358,7 +142861,7 @@ ebN
cxc
kBy
kBy
-dzt
+jcJ
gyN
daz
lmz
@@ -142746,7 +143249,7 @@ bdH
bdH
bdH
bdH
-izf
+dRf
hWM
qQS
hWM
@@ -142950,7 +143453,7 @@ bdH
bdH
bdH
vVk
-cJI
+myj
fVx
hWM
ebN
@@ -143153,10 +143656,10 @@ bdH
bdH
bdH
fhR
-nKO
+hiX
tmV
qQS
-gDh
+jIU
qQS
qQS
bMg
@@ -143355,7 +143858,7 @@ bdH
bdH
bdH
bdH
-npq
+eYs
daz
daz
daz
diff --git a/tgui/packages/tgui/interfaces/AresAdmin.js b/tgui/packages/tgui/interfaces/AresAdmin.js
index dd51b5a1e007..45311e9a2d4b 100644
--- a/tgui/packages/tgui/interfaces/AresAdmin.js
+++ b/tgui/packages/tgui/interfaces/AresAdmin.js
@@ -25,6 +25,16 @@ const PAGES = {
'maintenance_management': () => MaintManagement,
};
+const { data } = useBackend();
+const { is_pda } = data;
+let remotelock = !is_pda;
+let remotetip = 'You cannot do this via remote console.';
+let deletetip = remotetip;
+if (!remotelock) {
+ remotetip = '';
+ deletetip = 'Delete Record';
+}
+
export const AresAdmin = (props, context) => {
const { data } = useBackend(context);
const { current_menu, sudo } = data;
@@ -329,13 +339,14 @@ const MainMenu = (props, context) => {
)}
@@ -343,13 +354,14 @@ const MainMenu = (props, context) => {
)}
@@ -381,17 +393,39 @@ const MainMenu = (props, context) => {
+
+
+ {remotelock && (
+
+
+ Remote Admin
+
+
+
+
+ )}
ARES Actions
@@ -511,8 +545,9 @@ const AnnouncementLogs = (props, context) => {
act('delete_record', { record: record.ref })}
+ disabled={remotelock}
+ tooltip={deletetip}
/>
@@ -608,8 +643,9 @@ const BioscanLogs = (props, context) => {
act('delete_record', { record: record.ref })}
+ disabled={remotelock}
+ tooltip={deletetip}
/>
@@ -709,8 +745,9 @@ const BombardmentLogs = (props, context) => {
act('delete_record', { record: record.ref })}
+ disabled={remotelock}
+ tooltip={deletetip}
/>
@@ -1325,7 +1362,7 @@ const FlightLogs = (props, context) => {
last_page,
current_menu,
records_flight,
- access_level,
+ admin_login,
} = data;
return (
@@ -1401,9 +1438,9 @@ const FlightLogs = (props, context) => {
act('delete_record', { record: record.ref })}
+ disabled={remotelock}
+ tooltip={deletetip}
/>
@@ -1498,8 +1535,9 @@ const Security = (props, context) => {
act('delete_record', { record: record.ref })}
+ disabled={remotelock}
+ tooltip={deletetip}
/>
@@ -1512,8 +1550,80 @@ const Security = (props, context) => {
const Emergency = (props, context) => {
const { data, act } = useBackend(context);
- const { logged_in, access_text, last_page, current_menu, admin_login } = data;
+ const {
+ logged_in,
+ access_text,
+ last_page,
+ current_menu,
+ admin_login,
+ alert_level,
+ worldtime,
+ distresstimelock,
+ distresstime,
+ quarterstime,
+ evac_status,
+ mission_failed,
+ nuketimelock,
+ nuke_available,
+ } = data;
+
+ const minimumEvacTime = worldtime > distresstimelock;
+ const distressCooldown = worldtime < distresstime;
+ const quartersCooldown = worldtime < quarterstime;
+ const canQuarters = !quartersCooldown;
+ let quarters_reason = 'Call for General Quarters.';
+ if (quartersCooldown) {
+ quarters_reason =
+ 'It has not been long enough since the last General Quarters call.';
+ }
+ const canDistress =
+ alert_level === 2 && !distressCooldown && minimumEvacTime && !remotelock;
+ let distress_reason = 'Launch a Distress Beacon.';
+ if (remotelock) {
+ distress_reason = remotetip;
+ } else if (alert_level === 3) {
+ distress_reason = 'Self-destruct in progress. Beacon disabled.';
+ } else if (alert_level !== 2) {
+ distress_reason = 'Ship is not under an active emergency.';
+ } else if (distressCooldown) {
+ distress_reason = 'Beacon is currently on cooldown.';
+ } else if (!minimumEvacTime) {
+ distress_reason = "It's too early to launch a distress beacon.";
+ }
+
+ const canEvac = (evac_status === 0, alert_level >= 2) && !remotelock;
+ let evac_reason = 'Begin evacuation procedures. Authorise Lifeboats.';
+ if (remotelock) {
+ evac_reason = remotetip;
+ } else if (alert_level !== 2) {
+ evac_reason = 'Ship is not under an active emergency.';
+ } else if (evac_status === 1) {
+ evac_reason = 'Evacuation initiating.';
+ } else if (evac_status === 2) {
+ evac_reason = 'Evacuation in progress.';
+ } else if (evac_status === 3) {
+ evac_reason = 'Evacuation complete.';
+ }
+ const minimumNukeTime = worldtime > nuketimelock;
+ const canNuke =
+ (nuke_available, !mission_failed, evac_reason === 0, minimumNukeTime) &&
+ !remotelock;
+ let nuke_reason =
+ 'Request a nuclear device to be authorized by USCM High Command.';
+ if (remotelock) {
+ nuke_reason = remotetip;
+ } else if (!nuke_available) {
+ nuke_reason =
+ 'No nuclear ordnance is available during this operation, or one has already been provided.';
+ } else if (mission_failed) {
+ nuke_reason =
+ 'You have already lost the objective, you cannot use a nuclear device aboard the ship!';
+ } else if (evac_status !== 0) {
+ nuke_reason = 'You cannot use a nuclear device while abandoning the ship!';
+ } else if (!minimumNukeTime) {
+ nuke_reason = 'It is too soon to use a nuclear device. Keep fighting!';
+ }
return (
<>
@@ -1557,7 +1667,6 @@ const Emergency = (props, context) => {
{
p="1rem"
mt="5rem"
bold
- disabled={access_text}
+ onClick={() => act('general_quarters')}
+ disabled={!canQuarters}
+ tooltip={quarters_reason}
/>
{
p="1rem"
mt="5rem"
bold
- disabled={access_text}
+ onClick={() => act('evacuation_start')}
+ disabled={!canEvac}
+ tooltip={evac_reason}
/>
{
p="1rem"
mt="5rem"
bold
- disabled={access_text}
+ onClick={() => act('distress')}
+ disabled={!canDistress}
+ tooltip={distress_reason}
/>
{
p="1rem"
mt="5rem"
bold
- disabled={access_text}
+ onClick={() => act('nuclearbomb')}
+ disabled={!canNuke}
+ tooltip={nuke_reason}
/>
>
@@ -1713,9 +1827,9 @@ const TechLogs = (props, context) => {
act('delete_record', { record: record.ref })}
+ disabled={remotelock}
+ tooltip={deletetip}
/>
diff --git a/tgui/packages/tgui/interfaces/AresInterface.jsx b/tgui/packages/tgui/interfaces/AresInterface.jsx
index 115a5fd1e74f..41d03ca0c95e 100644
--- a/tgui/packages/tgui/interfaces/AresInterface.jsx
+++ b/tgui/packages/tgui/interfaces/AresInterface.jsx
@@ -365,6 +365,18 @@ const MainMenu = (props) => {
/>
)}
+
+
)}
|