diff --git a/code/__DEFINES/ARES.dm b/code/__DEFINES/ARES.dm
new file mode 100644
index 000000000000..05a42738c499
--- /dev/null
+++ b/code/__DEFINES/ARES.dm
@@ -0,0 +1,54 @@
+/// Generic access for 1:1 conversations with ARES and unrestricted commands.
+#define ARES_ACCESS_BASIC 0
+/// Secure Access, can read ARES Announcements and Bioscans.
+#define ARES_ACCESS_COMMAND 1
+#define ARES_ACCESS_JOE 2
+/// CL, can read Apollo Log and also Delete Announcements.
+#define ARES_ACCESS_CORPORATE 3
+/// Senior Command, can Delete Bioscans.
+#define ARES_ACCESS_SENIOR 4
+/// Synth, CE & Commanding Officer, can read the access log.
+#define ARES_ACCESS_CE 5
+#define ARES_ACCESS_SYNTH 6
+#define ARES_ACCESS_CO 7
+/// High Command, can read the deletion log.
+#define ARES_ACCESS_HIGH 8
+#define ARES_ACCESS_WY_COMMAND 9
+/// Debugging. Allows me to view everything without using a high command rank. Unlikely to stay in a full merge.
+#define ARES_ACCESS_DEBUG 10
+
+#define ARES_RECORD_ANNOUNCE "Announcement Record"
+#define ARES_RECORD_ANTIAIR "AntiAir Control Log"
+#define ARES_RECORD_ASRS "Requisition Record"
+#define ARES_RECORD_BIOSCAN "Bioscan Record"
+#define ARES_RECORD_BOMB "Orbital Bombardment Record"
+#define ARES_RECORD_DELETED "Deleted Record"
+#define ARES_RECORD_SECURITY "Security Update"
+#define ARES_RECORD_MAINTENANCE "Maintenance Ticket"
+#define ARES_RECORD_ACCESS "Access Ticket"
+
+/// Not by ARES logged through marine_announcement()
+#define ARES_LOG_NONE 0
+/// Logged with all announcements
+#define ARES_LOG_MAIN 1
+/// Logged in the security updates
+#define ARES_LOG_SECURITY 2
+
+/// Access levels specifically for Working Joe management console
+#define APOLLO_ACCESS_REQUEST 0
+#define APOLLO_ACCESS_REPORTER 1
+#define APOLLO_ACCESS_TEMP 2
+#define APOLLO_ACCESS_AUTHED 3
+#define APOLLO_ACCESS_JOE 4
+#define APOLLO_ACCESS_DEBUG 5
+
+/// Ticket statuses, both for Access and Maintenance
+#define TICKET_PENDING "pending"
+#define TICKET_ASSIGNED "assigned"
+#define TICKET_REJECTED "rejected"
+#define TICKET_CANCELLED "cancelled"
+#define TICKET_COMPLETED "complete"
+
+/// Cooldowns
+#define COOLDOWN_ARES_SENSOR 60 SECONDS
+#define COOLDOWN_ARES_ACCESS_CONTROL 20 SECONDS
diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm
index 100a45ff6a94..3116d7f19555 100644
--- a/code/__DEFINES/__game.dm
+++ b/code/__DEFINES/__game.dm
@@ -106,6 +106,7 @@ block( \
#define SOUND_REBOOT (1<<5)
#define SOUND_ADMIN_MEME (1<<6)
#define SOUND_ADMIN_ATMOSPHERIC (1<<7)
+#define SOUND_ARES_MESSAGE (1<<8)
//toggles_chat
#define CHAT_OOC (1<<0)
diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm
index 8b9fe898c72c..a40675e0560e 100644
--- a/code/__DEFINES/access.dm
+++ b/code/__DEFINES/access.dm
@@ -43,6 +43,14 @@ most of them are tied into map-placed objects. This should be reworked in the fu
#define ACCESS_MARINE_SYNTH 36
+// AI Core Accesses
+/// Used in temporary passes
+#define ACCESS_MARINE_AI_TEMP 90
+/// Used as dedicated access to ARES Core.
+#define ACCESS_MARINE_AI 91
+/// Used to access Maintenance Protocols on ARES Interface.
+#define ACCESS_ARES_DEBUG 92
+
//Surface access levels
#define ACCESS_CIVILIAN_PUBLIC 100
#define ACCESS_CIVILIAN_LOGISTICS 101
diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index 95b98646c616..9702d51004ad 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -48,6 +48,8 @@ var/global/list/note_categories = list("Admin", "Merit", "Commanding Officer", "
#define CC_MARK(user) "(MARK)"
#define CC_REPLY(user) "(RPLY)"
#define OBSERVER_JMP(observer, atom) atom ? "(JMP)" : ""
+#define ARES_MARK(user) "(MARK)"
+#define ARES_REPLY(user, ref) "(RPLY)"
/atom/proc/Admin_Coordinates_Readable(area_name, admin_jump_ref)
var/turf/T = get_turf(src)
diff --git a/code/__DEFINES/camera.dm b/code/__DEFINES/camera.dm
index 58b1b8acbd84..9d797b964d61 100644
--- a/code/__DEFINES/camera.dm
+++ b/code/__DEFINES/camera.dm
@@ -6,6 +6,7 @@
#define CAMERA_NET_ALAMO "Alamo"
#define CAMERA_NET_NORMANDY "Normandy"
#define CAMERA_NET_COLONY "Colony"
+#define CAMERA_NET_ARES "ARES"
#define CAMERA_NET_MILITARY "Military"
#define CAMERA_NET_OVERWATCH "Overwatch"
diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm
index 8cac90defb26..557f8e6a3f68 100644
--- a/code/__DEFINES/language.dm
+++ b/code/__DEFINES/language.dm
@@ -12,7 +12,7 @@
#define LANGUAGE_XENOMORPH "Xenomorph"
#define LANGUAGE_HIVEMIND "Hivemind"
-#define LANGUAGE_APOLLO "Apollo Link"
+#define LANGUAGE_APOLLO "APOLLO Link"
#define LANGUAGE_TELEPATH "Telepath Implant"
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index b2936248c3ba..bed2ceeced7d 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -44,6 +44,8 @@
#define AREA_ALLOW_XENO_JOIN (1<<2)
/// Flags the area as a containment area
#define AREA_CONTAINMENT (1<<3)
+/// Flags the area as permanently unweedable. Still requires is_resin_allowed = FALSE
+#define AREA_UNWEEDABLE (1<<4)
/// Default number of ticks for do_after
#define DA_DEFAULT_NUM_TICKS 5
diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm
index 1f3c4ad22bf1..ab58df78abcc 100644
--- a/code/__DEFINES/mode.dm
+++ b/code/__DEFINES/mode.dm
@@ -14,6 +14,7 @@
#define EVACUATION_STATUS_IN_PROGRESS 2
#define EVACUATION_STATUS_COMPLETE 3
+#define NUCLEAR_TIME_LOCK 90 MINUTES
#define NUKE_EXPLOSION_INACTIVE 0
#define NUKE_EXPLOSION_ACTIVE 1
#define NUKE_EXPLOSION_IN_PROGRESS 2
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 7d16e437087b..121d1e305e43 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -328,6 +328,7 @@ DEFINE_BITFIELD(flags_area, list(
"AREA_NOTUNNEL" = AREA_NOTUNNEL,
"AREA_ALLOW_XENO_JOIN" = AREA_ALLOW_XENO_JOIN,
"AREA_CONTAINMENT" = AREA_CONTAINMENT,
+ "ARES_UNWEEDABLE" = AREA_UNWEEDABLE,
))
DEFINE_BITFIELD(disabilities, list(
diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm
index c4b1000bb07b..2a305dcc4342 100644
--- a/code/datums/emergency_calls/emergency_call.dm
+++ b/code/datums/emergency_calls/emergency_call.dm
@@ -191,7 +191,7 @@
message_admins("Distress beacon: '[name]' activated [src.hostility? "[SPAN_WARNING("(THEY ARE HOSTILE)")]":"(they are friendly)"]. Looking for candidates.")
if(announce)
- marine_announcement("A distress beacon has been launched from the [MAIN_SHIP_NAME].", "Priority Alert", 'sound/AI/distressbeacon.ogg')
+ marine_announcement("A distress beacon has been launched from the [MAIN_SHIP_NAME].", "Priority Alert", 'sound/AI/distressbeacon.ogg', logging = ARES_LOG_SECURITY)
addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/emergency_call, spawn_candidates), announce, override_spawn_loc, announce_dispatch_message), 30 SECONDS)
@@ -207,7 +207,7 @@
candidates = list()
if(announce)
- marine_announcement("The distress signal has not received a response, the launch tubes are now recalibrating.", "Distress Beacon")
+ marine_announcement("The distress signal has not received a response, the launch tubes are now recalibrating.", "Distress Beacon", logging = ARES_LOG_SECURITY)
return
//We've got enough!
@@ -236,8 +236,8 @@
if(I.current)
to_chat(I.current, SPAN_WARNING("You didn't get selected to join the distress team. Better luck next time!"))
- if(announce_dispatch_message)
- marine_announcement(dispatch_message, "Distress Beacon", 'sound/AI/distressreceived.ogg') //Announcement that the Distress Beacon has been answered, does not hint towards the chosen ERT
+ if(announce)
+ marine_announcement(dispatch_message, "Distress Beacon", 'sound/AI/distressreceived.ogg', logging = ARES_LOG_SECURITY) //Announcement that the Distress Beacon has been answered, does not hint towards the chosen ERT
message_admins("Distress beacon: [src.name] finalized, setting up candidates.")
diff --git a/code/datums/paygrades/paygrade.dm b/code/datums/paygrades/paygrade.dm
index b15071c882b7..bb0a3aa84bfa 100644
--- a/code/datums/paygrades/paygrade.dm
+++ b/code/datums/paygrades/paygrade.dm
@@ -25,6 +25,7 @@ GLOBAL_LIST_INIT_TYPED(paygrades, /datum/paygrade, setup_paygrades())
.[pg_id] = new PG
GLOBAL_LIST_INIT(highcom_paygrades, list(
+ "PvI",
"NO7",
"MO7",
"NO8",
@@ -52,3 +53,9 @@ GLOBAL_LIST_INIT(co_paygrades, list(
"MO5",
"MO4"
))
+
+GLOBAL_LIST_INIT(wy_paygrades, list(
+ "WYC8",
+ "WYC9",
+ "WYC10"
+))
diff --git a/code/defines/procs/announcement.dm b/code/defines/procs/announcement.dm
index 5ee8c573d0e3..323fb526d527 100644
--- a/code/defines/procs/announcement.dm
+++ b/code/defines/procs/announcement.dm
@@ -30,7 +30,7 @@
//general marine announcement
-/proc/marine_announcement(message, title = COMMAND_ANNOUNCE, sound_to_play = sound('sound/misc/notice2.ogg'), faction_to_display = FACTION_MARINE, add_PMCs = TRUE, signature)
+/proc/marine_announcement(message, title = COMMAND_ANNOUNCE, sound_to_play = sound('sound/misc/notice2.ogg'), faction_to_display = FACTION_MARINE, add_PMCs = TRUE, signature, logging = ARES_LOG_MAIN)
var/list/targets = GLOB.human_mob_list + GLOB.dead_mob_list
if(faction_to_display == FACTION_MARINE)
for(var/mob/M in targets)
@@ -45,6 +45,14 @@
if((H.faction != faction_to_display && !add_PMCs) || (H.faction != faction_to_display && add_PMCs && !(H.faction in FACTION_LIST_WY)) && !(faction_to_display in H.faction_group)) //faction checks
targets.Remove(H)
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.interface && !(link.interface.inoperable()))
+ switch(logging)
+ if(ARES_LOG_MAIN)
+ link.log_ares_announcement(title, message)
+ if(ARES_LOG_SECURITY)
+ link.log_ares_security(title, message)
+
else if(faction_to_display == "Everyone (-Yautja)")
for(var/mob/M in targets)
if(isobserver(M)) //observers see everything
@@ -82,7 +90,7 @@
announcement_helper(message, title, targets, sound_to_play)
//AI announcement that uses talking into comms
-/proc/ai_announcement(message, sound_to_play = sound('sound/misc/interference.ogg'))
+/proc/ai_announcement(message, sound_to_play = sound('sound/misc/interference.ogg'), logging = ARES_LOG_MAIN)
for(var/mob/M in (GLOB.human_mob_list + GLOB.dead_mob_list))
if(isobserver(M) || ishuman(M) && is_mainship_level(M.z))
playsound_client(M.client, sound_to_play, M, vol = 45)
@@ -90,6 +98,14 @@
for(var/mob/living/silicon/decoy/ship_ai/AI in ai_mob_list)
INVOKE_ASYNC(AI, TYPE_PROC_REF(/mob/living/silicon/decoy/ship_ai, say), message)
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.interface && !(link.interface.inoperable()))
+ switch(logging)
+ if(ARES_LOG_MAIN)
+ link.log_ares_announcement("[MAIN_AI_SYSTEM] Comms Update", message)
+ if(ARES_LOG_SECURITY)
+ link.log_ares_security("[MAIN_AI_SYSTEM] Security Update", message)
+
/proc/ai_silent_announcement(message, channel_prefix, bypass_cooldown = FALSE)
if(!message)
return
@@ -119,10 +135,14 @@
if(!isnull(signature))
message += "
Signed by,
[signature]"
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.interface && !(link.interface.inoperable()))
+ link.log_ares_announcement(title, message)
announcement_helper(message, title, targets, sound_to_play)
+
//Subtype of AI shipside announcement for "All Hands On Deck" alerts (COs and SEAs joining the game)
-/proc/all_hands_on_deck(message, title = MAIN_AI_SYSTEM, sound_to_play = sound('sound/misc/sound_misc_boatswain.ogg'), signature)
+/proc/all_hands_on_deck(message, title = MAIN_AI_SYSTEM, sound_to_play = sound('sound/misc/sound_misc_boatswain.ogg'))
var/list/targets = GLOB.human_mob_list + GLOB.dead_mob_list
for(var/mob/T in targets)
if(isobserver(T))
@@ -130,6 +150,10 @@
if(!ishuman(T) || isyautja(T) || !is_mainship_level(T.z))
targets.Remove(T)
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.interface && !(link.interface.inoperable()))
+ link.log_ares_announcement("[title] Shipwide Update", message)
+
announcement_helper(message, title, targets, sound_to_play)
//the announcement proc that handles announcing for each mob in targets list
diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm
index a23f84323301..d19cbd3a6dec 100644
--- a/code/game/area/almayer.dm
+++ b/code/game/area/almayer.dm
@@ -77,17 +77,20 @@
fake_zlevel = 1 // upperdeck
soundscape_playlist = SCAPE_PL_ARES
soundscape_interval = 120
- flags_area = AREA_NOTUNNEL
+ flags_area = AREA_NOTUNNEL|AREA_UNWEEDABLE
+ can_build_special = FALSE
+ is_resin_allowed = FALSE
+ resin_construction_allowed = FALSE
/area/almayer/command/securestorage
name = "\improper Secure Storage"
icon_state = "corporatespace"
- fake_zlevel = 1 // upperdeck
+ fake_zlevel = 2 // lowerdeck
/area/almayer/command/computerlab
name = "\improper Computer Lab"
icon_state = "ceroom"
- fake_zlevel = 1 // upperdeck
+ fake_zlevel = 2 // lowerdeck
/area/almayer/command/telecomms
name = "\improper Telecommunications"
@@ -181,6 +184,11 @@
icon_state = "astronavigation"
fake_zlevel = 2 // lowerdeck
+/area/almayer/shipboard/panic
+ name = "\improper Hangar Panic Room"
+ icon_state = "brig"
+ fake_zlevel = 2 // lowerdeck
+
/area/almayer/shipboard/starboard_missiles
name = "\improper Missile Tubes Starboard"
icon_state = "starboardmissile"
diff --git a/code/game/bioscans.dm b/code/game/bioscans.dm
index 474786e1ffae..55422ad3b878 100644
--- a/code/game/bioscans.dm
+++ b/code/game/bioscans.dm
@@ -107,7 +107,12 @@ GLOBAL_DATUM_INIT(bioscan_data, /datum/bioscan_data, new)
/// This will do something after Project ARES.
/datum/bioscan_data/proc/can_ares_bioscan()
- return TRUE
+ var/datum/ares_link/link = GLOB.ares_link
+ if(!istype(link))
+ return FALSE
+ if(link.p_bioscan && !link.p_bioscan.inoperable())
+ return TRUE
+ return FALSE
/// The announcement to all Humans. Slightly off for the planet and elsewhere, accurate for the ship.
/datum/bioscan_data/proc/ares_bioscan(forced = FALSE, variance = 2)
@@ -120,7 +125,11 @@ GLOBAL_DATUM_INIT(bioscan_data, /datum/bioscan_data, new)
var/name = "[MAIN_AI_SYSTEM] Bioscan Status"
var/input = "Bioscan complete.\n\nSensors indicate [xenos_on_ship_uncontained ? "[xenos_on_ship_uncontained]" : "no"] unknown lifeform signature[!xenos_on_ship_uncontained || xenos_on_ship_uncontained > 1 ? "s":""] present on the ship[xenos_on_ship_uncontained && xenos_ship_location ? ", including one in [xenos_ship_location]," : ""] and [fake_xenos_on_planet ? "approximately [fake_xenos_on_planet]" : "no"] signature[!fake_xenos_on_planet || fake_xenos_on_planet > 1 ? "s":""] located elsewhere[fake_xenos_on_planet && xenos_planet_location ? ", including one in [xenos_planet_location]":""]."
- marine_announcement(input, name, 'sound/AI/bioscan.ogg')
+
+ var/datum/ares_link/link = GLOB.ares_link
+ link.log_ares_bioscan(name, input)
+ if(forced || (link.p_interface && !link.p_interface.inoperable()))
+ marine_announcement(input, name, 'sound/AI/bioscan.ogg', logging = ARES_LOG_NONE)
/// The announcement to all Xenos. Slightly off for the human ship, accurate otherwise.
/datum/bioscan_data/proc/qm_bioscan(variance = 2)
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index c4a3070dea2d..55eee2e521bf 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -102,7 +102,11 @@
///Includes restricted accesses
/proc/get_all_marine_access()
- return list(ACCESS_MARINE_CO) + get_main_marine_access()
+ return list(
+ ACCESS_MARINE_CO,
+ ACCESS_MARINE_AI,
+ ACCESS_MARINE_AI_TEMP,
+ ) + get_main_marine_access()
///All Almayer accesses other than the highly restricted ones, such as CO's office.
/proc/get_main_marine_access()
@@ -256,6 +260,7 @@
if(ACCESS_MARINE_SEA) return "SEA's Office"
if(ACCESS_MARINE_KITCHEN) return "Kitchen"
if(ACCESS_MARINE_SYNTH) return "Synthetic Storage"
+ if(ACCESS_MARINE_AI) return "AI Core"
/proc/get_weyland_access_desc(A)
switch(A)
diff --git a/code/game/machinery/ARES/ARES.dm b/code/game/machinery/ARES/ARES.dm
new file mode 100644
index 000000000000..f8a7351d123e
--- /dev/null
+++ b/code/game/machinery/ARES/ARES.dm
@@ -0,0 +1,236 @@
+/obj/structure/machinery/ares
+ name = "ARES Machinery"
+ density = TRUE
+ anchored = TRUE
+ use_power = USE_POWER_IDLE
+ idle_power_usage = 600
+ icon = 'icons/obj/structures/machinery/ares.dmi'
+ unslashable = TRUE
+ unacidable = TRUE
+
+ var/link_id = MAIN_SHIP_DEFAULT_NAME
+ var/datum/ares_link/link
+
+/obj/structure/machinery/ares/ex_act(severity)
+ return
+
+/obj/structure/machinery/ares/Initialize(mapload, ...)
+ link_systems(override = FALSE)
+ . = ..()
+
+/obj/structure/machinery/ares/Destroy()
+ delink()
+ return ..()
+
+/obj/structure/machinery/ares/update_icon()
+ ..()
+ icon_state = initial(icon_state)
+ // Broken
+ if(stat & BROKEN)
+ icon_state += "_broken"
+
+ // Powered
+ else if(stat & NOPOWER)
+ icon_state = initial(icon_state)
+ icon_state += "_off"
+
+/// Handles linking and de-linking the ARES systems.
+/obj/structure/machinery/ares/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ if(!new_link)
+ log_debug("Error: link_systems called without a link datum")
+ if(link && !override)
+ return FALSE
+ if(new_link.link_id == link_id)
+ link = new_link
+ log_debug("[name] linked to Ares Link [link_id]")
+ new_link.linked_systems += src
+ return TRUE
+
+/obj/structure/machinery/ares/proc/delink()
+ log_debug("[name] delinked from Ares Link [link.link_id]")
+ link.linked_systems -= src
+ link = null
+
+/obj/structure/machinery/ares/processor
+ name = "ARES Processor"
+ desc = "An external processor for ARES, used to process vast amounts of information."
+ icon_state = "processor"
+
+/obj/structure/machinery/ares/processor/apollo
+ name = "ARES Processor (APOLLO)"
+ desc = "The external component of ARES' APOLLO processor. Primarily responsible for coordinating Working Joes and Maintenance Drones. It definitely wasn't stolen from Seegson."
+ icon_state = "apollo_processor"
+
+/obj/structure/machinery/ares/processor/apollo/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ ..()
+ new_link.p_apollo = src
+
+/obj/structure/machinery/ares/processor/apollo/delink()
+ if(link && link.p_apollo == src)
+ link.p_apollo = null
+ ..()
+
+/obj/structure/machinery/ares/processor/interface
+ name = "ARES Processor (Interface)"
+ desc = "An external processor for ARES; this one handles core processes for interfacing with the crew, including radio transmissions and broadcasts."
+ icon_state = "int_processor"
+
+/obj/structure/machinery/ares/processor/interface/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ ..()
+ new_link.p_interface = src
+
+/obj/structure/machinery/ares/processor/interface/delink()
+ if(link && link.p_interface == src)
+ link.p_interface = null
+ ..()
+
+/obj/structure/machinery/ares/processor/bioscan
+ name = "ARES Processor (Bioscan)"
+ desc = "The external component of ARES' Bioscan systems. Without this, the USS Almayer would be incapable of running bioscans!"
+ icon_state = "bio_processor"
+
+/obj/structure/machinery/ares/processor/bioscan/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ ..()
+ new_link.p_bioscan = src
+
+/obj/structure/machinery/ares/processor/bioscan/delink()
+ if(link && link.p_bioscan == src)
+ link.p_bioscan = null
+ ..()
+
+/// Central Core
+/obj/structure/machinery/ares/cpu
+ name = "ARES CPU"
+ desc = "This is ARES' central processor. Made of a casing designed to withstand nuclear blasts, the CPU also contains ARES' blackbox recorder."
+ icon_state = "CPU"
+
+/// Memory Substrate,
+/obj/structure/machinery/ares/substrate
+ name = "ARES Substrate"
+ desc = "The memory substrate of ARES, containing complex protocols and information. Limited capabilities can operate on substrate alone, without the main ARES Unit operational."
+ icon_state = "substrate"
+
+// #################### ARES Interface Console #####################
+/obj/structure/machinery/computer/ares_console
+ name = "ARES Interface"
+ desc = "A console built to interface with ARES, allowing for 1:1 communication."
+ icon = 'icons/obj/structures/machinery/ares.dmi'
+ icon_state = "console"
+ exproof = TRUE
+
+ var/current_menu = "login"
+ var/last_menu = ""
+
+ var/authentication = ARES_ACCESS_BASIC
+
+ /// The last person to login.
+ var/last_login
+ /// The person pretending to be last_login
+ var/sudo_holder
+ /// A record of who logged in and when.
+ var/list/access_list = list()
+
+ /// The ID used to link all devices.
+ var/link_id = MAIN_SHIP_DEFAULT_NAME
+ var/datum/ares_link/link
+
+ /// The current deleted chat log of 1:1 conversations being read.
+ var/list/deleted_1to1 = list()
+
+ /// Holds all (/datum/ares_record/announcement)s and (/datum/ares_record/security/security_alert)s
+ var/list/records_announcement = list()
+ /// Holds all (/datum/ares_record/bioscan)s
+ var/list/records_bioscan = list()
+ /// Holds all (/datum/ares_record/bombardment)s
+ var/list/records_bombardment = list()
+ /// Holds all (/datum/ares_record/deletion)s
+ var/list/records_deletion = list()
+ /// Holds all (/datum/ares_record/talk_log)s
+ var/list/records_talking = list()
+ /// Holds all (/datum/ares_record/requisition_log)s
+ var/list/records_asrs = list()
+ /// Holds all (/datum/ares_record/security)s and (/datum/ares_record/antiair)s
+ var/list/records_security = list()
+ /// Is nuke request usable or not? (Nuke request is not currently coded to work.)
+ var/nuke_available = FALSE
+
+
+ COOLDOWN_DECLARE(ares_distress_cooldown)
+ COOLDOWN_DECLARE(ares_nuclear_cooldown)
+
+/obj/structure/machinery/computer/ares_console/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ if(link && !override)
+ return FALSE
+ if(new_link.link_id == link_id)
+ new_link.interface = src
+ link = new_link
+ log_debug("[name] linked to Ares Link [link_id]")
+ new_link.linked_systems += src
+ return TRUE
+
+/obj/structure/machinery/computer/ares_console/Initialize(mapload, ...)
+ link_systems(override = FALSE)
+ . = ..()
+
+/obj/structure/machinery/computer/ares_console/proc/delink()
+ if(link && link.interface == src)
+ link.interface = null
+ link.linked_systems -= src
+ link = null
+
+/obj/structure/machinery/computer/ares_console/Destroy()
+ delink()
+ return ..()
+
+// #################### Working Joe Ticket Console #####################
+/obj/structure/machinery/computer/working_joe
+ name = "APOLLO Maintenance Controller"
+ desc = "A console built to facilitate Working Joes and their operation, allowing for simple allocation of resources."
+ icon = 'icons/obj/structures/machinery/ares.dmi'
+ icon_state = "console"
+ exproof = TRUE
+
+ /// The ID used to link all devices.
+ var/link_id = MAIN_SHIP_DEFAULT_NAME
+ var/datum/ares_link/link
+ var/obj/structure/machinery/ares/processor/interface/processor
+
+ var/current_menu = "login"
+ var/last_menu = ""
+
+ var/authentication = ARES_ACCESS_BASIC
+ /// The last person to login.
+ var/last_login
+ /// A record of who logged in and when.
+ var/list/login_list = list()
+
+
+ /// If this is used to create AI Core access tickets
+ var/ticket_console = FALSE
+ var/obj/item/card/id/authenticator_id
+ var/ticket_authenticated = FALSE
+ var/obj/item/card/id/target_id
+
+/obj/structure/machinery/computer/working_joe/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ if(link && !override)
+ return FALSE
+ if(new_link.link_id == link_id)
+ new_link.ticket_computers += src
+ link = new_link
+ log_debug("[name] linked to Ares Link [link_id]")
+ new_link.linked_systems += src
+ return TRUE
+
+/obj/structure/machinery/computer/working_joe/Initialize(mapload, ...)
+ link_systems(override = FALSE)
+ . = ..()
+
+/obj/structure/machinery/computer/working_joe/proc/delink()
+ if(link)
+ link.ticket_computers -= src
+ link.linked_systems -= src
+ link = null
+
+/obj/structure/machinery/computer/working_joe/Destroy()
+ delink()
+ return ..()
diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm
new file mode 100644
index 000000000000..79c49818595c
--- /dev/null
+++ b/code/game/machinery/ARES/ARES_procs.dm
@@ -0,0 +1,815 @@
+GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new)
+
+/datum/ares_link
+ var/link_id = MAIN_SHIP_DEFAULT_NAME
+ /// All motion triggers for the link
+ var/list/linked_alerts = list()
+ /// All machinery for the link
+ var/list/linked_systems = list()
+ var/obj/structure/machinery/ares/processor/interface/p_interface
+ var/obj/structure/machinery/ares/processor/apollo/p_apollo
+ var/obj/structure/machinery/ares/processor/bioscan/p_bioscan
+ var/obj/structure/machinery/computer/ares_console/interface
+ var/list/obj/structure/machinery/computer/working_joe/ticket_computers = list()
+
+ /// The chat log of the apollo link. Timestamped.
+ var/list/apollo_log = list()
+
+ /// Working Joe stuff
+ var/list/tickets_maintenance = list()
+ var/list/tickets_access = list()
+
+/datum/ares_link/Destroy()
+ for(var/obj/structure/machinery/ares/link in linked_systems)
+ link.delink()
+ for(var/obj/structure/machinery/computer/ares_console/interface in linked_systems)
+ interface.delink()
+ for(var/obj/effect/step_trigger/ares_alert/alert in linked_alerts)
+ alert.delink()
+ ..()
+
+
+// ------ ARES Logging Procs ------ //
+/proc/log_ares_apollo(speaker, message)
+ if(!speaker)
+ speaker = "Unknown"
+ var/datum/ares_link/link = GLOB.ares_link
+ if(!link.p_apollo || link.p_apollo.inoperable())
+ return
+ if(!link.p_interface || link.p_interface.inoperable())
+ return
+ link.apollo_log.Add("[worldtime2text()]: [speaker], '[message]'")
+
+/datum/ares_link/proc/log_ares_bioscan(title, input)
+ if(!p_bioscan || p_bioscan.inoperable() || !interface)
+ return FALSE
+ interface.records_bioscan.Add(new /datum/ares_record/bioscan(title, input))
+
+/datum/ares_link/proc/log_ares_bombardment(mob/living/user, ob_name, coordinates)
+ interface.records_bombardment.Add(new /datum/ares_record/bombardment(ob_name, "Bombardment fired at [coordinates].", user))
+
+/datum/ares_link/proc/log_ares_announcement(title, message)
+ interface.records_announcement.Add(new /datum/ares_record/announcement(title, message))
+
+/datum/ares_link/proc/log_ares_antiair(mob/living/user, details)
+ interface.records_security.Add(new /datum/ares_record/antiair(details, user))
+
+/datum/ares_link/proc/log_ares_requisition(source, details, mob/living/user)
+ interface.records_asrs.Add(new /datum/ares_record/requisition_log(source, details, user))
+
+/datum/ares_link/proc/log_ares_security(title, details)
+ interface.records_security.Add(new /datum/ares_record/security(title, details))
+// ------ End ARES Logging Procs ------ //
+
+// ------ ARES Interface Procs ------ //
+/obj/structure/machinery/computer/proc/get_ares_access(obj/item/card/id/card)
+ if(ACCESS_ARES_DEBUG in card.access)
+ return ARES_ACCESS_DEBUG
+ switch(card.assignment)
+ if(JOB_WORKING_JOE)
+ return ARES_ACCESS_JOE
+ if(JOB_CHIEF_ENGINEER)
+ return ARES_ACCESS_CE
+ if(JOB_SYNTH)
+ return ARES_ACCESS_SYNTH
+ if(card.paygrade in GLOB.wy_paygrades)
+ return ARES_ACCESS_WY_COMMAND
+ if(card.paygrade in GLOB.highcom_paygrades)
+ return ARES_ACCESS_HIGH
+ if(card.paygrade in GLOB.co_paygrades)
+ return ARES_ACCESS_CO
+ if(ACCESS_MARINE_SENIOR in card.access)
+ return ARES_ACCESS_SENIOR
+ if(ACCESS_WY_CORPORATE in card.access)
+ return ARES_ACCESS_CORPORATE
+ if(ACCESS_MARINE_COMMAND in card.access)
+ return ARES_ACCESS_COMMAND
+ else
+ return ARES_ACCESS_BASIC
+
+/obj/structure/machinery/computer/proc/ares_auth_to_text(access_level)
+ switch(access_level)
+ if(ARES_ACCESS_BASIC)//0
+ return "Authorized"
+ if(ARES_ACCESS_COMMAND)//1
+ return "[MAIN_SHIP_NAME] Command"
+ if(ARES_ACCESS_JOE)//2
+ return "Working Joe"
+ if(ARES_ACCESS_CORPORATE)//3
+ return "Weyland-Yutani"
+ if(ARES_ACCESS_SENIOR)//4
+ return "[MAIN_SHIP_NAME] Senior Command"
+ if(ARES_ACCESS_CE)//5
+ return "Chief Engineer"
+ if(ARES_ACCESS_SYNTH)//6
+ return "USCM Synthetic"
+ if(ARES_ACCESS_CO)//7
+ return "[MAIN_SHIP_NAME] Commanding Officer"
+ if(ARES_ACCESS_HIGH)//8
+ return "USCM High Command"
+ if(ARES_ACCESS_WY_COMMAND)//9
+ return "Weyland-Yutani Directorate"
+ if(ARES_ACCESS_DEBUG)//10
+ return "AI Service Technician"
+
+
+/obj/structure/machinery/computer/ares_console/proc/message_ares(text, mob/Sender, ref)
+ var/msg = SPAN_STAFF_IC("ARES: [key_name(Sender, 1)] [ARES_MARK(Sender)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] [ADMIN_JMP_USER(Sender)] [ARES_REPLY(Sender, ref)]: [text]")
+ var/datum/ares_record/talk_log/conversation = locate(ref)
+ conversation.conversation += "[last_login] at [worldtime2text()], '[text]'"
+ for(var/client/admin in GLOB.admins)
+ if((R_ADMIN|R_MOD) & admin.admin_holder.rights)
+ to_chat(admin, msg)
+ if(admin.prefs.toggles_sound & SOUND_ARES_MESSAGE)
+ playsound_client(admin, 'sound/machines/chime.ogg', vol = 25)
+ log_say("[key_name(Sender)] sent '[text]' to ARES 1:1.")
+
+/obj/structure/machinery/computer/ares_console/proc/response_from_ares(text, ref)
+ var/datum/ares_record/talk_log/conversation = locate(ref)
+ conversation.conversation += "[MAIN_AI_SYSTEM] at [worldtime2text()], '[text]'"
+// ------ End ARES Interface Procs ------ //
+
+// ------ ARES Interface UI ------ //
+
+/obj/structure/machinery/computer/ares_console/attack_hand(mob/user as mob)
+ if(..() || !allowed(usr) || inoperable())
+ return FALSE
+
+ tgui_interact(user)
+ return TRUE
+
+/obj/structure/machinery/computer/ares_console/tgui_interact(mob/user, datum/tgui/ui, datum/ui_state/state)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "AresInterface", name)
+ ui.open()
+
+/obj/structure/machinery/computer/ares_console/ui_data(mob/user)
+ var/list/data = list()
+
+ data["current_menu"] = current_menu
+ data["last_page"] = last_menu
+
+ data["logged_in"] = last_login
+ data["sudo"] = sudo_holder ? TRUE : FALSE
+
+ data["access_text"] = "[sudo_holder ? "(SUDO)," : ""] access level [authentication], [ares_auth_to_text(authentication)]."
+ data["access_level"] = authentication
+
+ data["alert_level"] = security_level
+ data["evac_status"] = EvacuationAuthority.evac_status
+ data["worldtime"] = world.time
+
+ data["access_log"] = list()
+ data["access_log"] += access_list
+ data["apollo_log"] = list()
+ data["apollo_log"] += link.apollo_log
+
+ data["deleted_conversation"] = list()
+ data["deleted_conversation"] += deleted_1to1
+
+ data["distresstime"] = ares_distress_cooldown
+ data["distresstimelock"] = DISTRESS_TIME_LOCK
+ data["mission_failed"] = SSticker.mode.is_in_endgame
+ data["nuketimelock"] = NUCLEAR_TIME_LOCK
+ data["nuke_available"] = nuke_available
+
+ var/list/logged_announcements = list()
+ for(var/datum/ares_record/announcement/broadcast as anything in 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 records_announcement)
+ if(!istype(security_alert))
+ continue
+ 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_bioscans = list()
+ for(var/datum/ares_record/bioscan/scan as anything in 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 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 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 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_adjustments = list()
+ for(var/datum/ares_record/antiair/aa_adjustment as anything in records_security)
+ if(!istype(aa_adjustment))
+ continue
+ var/list/current_adjustment = list()
+ current_adjustment["time"] = aa_adjustment.time
+ current_adjustment["details"] = aa_adjustment.details
+ current_adjustment["user"] = aa_adjustment.user
+ current_adjustment["ref"] = "\ref[aa_adjustment]"
+ logged_adjustments += list(current_adjustment)
+ data["aa_adjustments"] = logged_adjustments
+
+ var/list/logged_orders = list()
+ for(var/datum/ares_record/requisition_log/req_order as anything in 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_convos = list()
+ var/list/active_convo = list()
+ var/active_ref
+ for(var/datum/ares_record/talk_log/log as anything in records_talking)
+ if(!istype(log))
+ continue
+ if(log.user == 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
+
+ return data
+
+/obj/structure/machinery/computer/ares_console/ui_static_data(mob/user)
+ var/list/data = list()
+
+ data["link_id"] = link_id
+
+ return data
+
+/obj/structure/machinery/computer/ares_console/ui_status(mob/user, datum/ui_state/state)
+ . = ..()
+ if(!allowed(user))
+ return UI_UPDATE
+ if(inoperable())
+ return UI_DISABLED
+
+/obj/structure/machinery/computer/ares_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+
+ playsound(src, "keyboard_alt", 15, 1)
+
+ switch (action)
+ if("go_back")
+ if(!last_menu)
+ return to_chat(usr, SPAN_WARNING("Error, no previous page detected."))
+ var/temp_holder = current_menu
+ current_menu = last_menu
+ last_menu = temp_holder
+
+ if("login")
+ var/mob/living/carbon/human/operator = usr
+ var/obj/item/card/id/idcard = operator.get_active_hand()
+ if(istype(idcard))
+ authentication = get_ares_access(idcard)
+ last_login = idcard.registered_name
+ else if(operator.wear_id)
+ idcard = operator.wear_id
+ if(istype(idcard))
+ authentication = get_ares_access(idcard)
+ last_login = idcard.registered_name
+ else
+ to_chat(usr, SPAN_WARNING("You require an ID card to access this terminal!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(authentication)
+ access_list += "[last_login] at [worldtime2text()], Access Level [authentication] - [ares_auth_to_text(authentication)]."
+ current_menu = "main"
+
+ if("sudo")
+ var/new_user = tgui_input_text(usr, "Enter Sudo Username", "Sudo User", encode = FALSE)
+ if(new_user)
+ if(new_user == sudo_holder)
+ last_login = sudo_holder
+ sudo_holder = null
+ return FALSE
+ if(new_user == last_login)
+ to_chat(usr, SPAN_WARNING("Already remote logged in as this user."))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ sudo_holder = last_login
+ last_login = new_user
+ access_list += "[last_login] at [worldtime2text()], Sudo Access."
+ return TRUE
+ if("sudo_logout")
+ access_list += "[last_login] at [worldtime2text()], Sudo Logout."
+ last_login = sudo_holder
+ sudo_holder = null
+ return
+ // -- Page Changers -- //
+ if("logout")
+ last_menu = current_menu
+ current_menu = "login"
+ if(sudo_holder)
+ access_list += "[last_login] at [worldtime2text()], Sudo Logout."
+ last_login = sudo_holder
+ sudo_holder = null
+ access_list += "[last_login] logged out at [worldtime2text()]."
+
+ 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_security")
+ last_menu = current_menu
+ current_menu = "security"
+ if("page_requisitions")
+ last_menu = current_menu
+ current_menu = "requisitions"
+ if("page_antiair")
+ last_menu = current_menu
+ current_menu = "antiair"
+ 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"
+
+ // -- Delete Button -- //
+ if("delete_record")
+ 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
+ records_announcement -= record
+ if(ARES_RECORD_BIOSCAN)
+ new_title = "[record.title] at [record.time]"
+ new_details = record.details
+ records_bioscan -= record
+ if(ARES_RECORD_BOMB)
+ new_title = "[record.title] at [record.time]"
+ new_details = "[record.details] Launched by [record.user]."
+ records_bombardment -= record
+
+ new_delete.details = new_details
+ new_delete.user = last_login
+ new_delete.title = new_title
+
+ records_deletion += new_delete
+
+ // -- 1:1 Conversation -- //
+ if("new_conversation")
+ var/datum/ares_record/talk_log/convo = new(last_login)
+ convo.conversation += "[MAIN_AI_SYSTEM] at [worldtime2text()], 'New 1:1 link initiated. Greetings, [last_login].'"
+ 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 = conversation.user
+ records_deletion += deleted
+ records_talking -= conversation
+
+ if("message_ares")
+ var/message = tgui_input_text(usr, "What do you wish to say to ARES?", "ARES Message", encode = FALSE)
+ if(message)
+ message_ares(message, usr, params["active_convo"])
+
+ 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"
+
+ // -- Emergency Buttons -- //
+ if("evacuation_start")
+ if(security_level < SEC_LEVEL_RED)
+ to_chat(usr, 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(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY)
+ to_chat(usr, 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(!EvacuationAuthority.initiate_evacuation())
+ to_chat(usr, 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(usr)] has called for an emergency evacuation via ARES.")
+ message_admins("[key_name_admin(usr)] has called for an emergency evacuation via ARES.")
+ var/datum/ares_link/link = GLOB.ares_link
+ link.log_ares_security("Initiate Evacuation", "[last_login] 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(usr, 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(src, ares_distress_cooldown))
+ to_chat(usr, SPAN_WARNING("The distress launcher is cooling down!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(security_level == SEC_LEVEL_DELTA)
+ to_chat(usr, SPAN_WARNING("The ship is already undergoing self destruct procedures!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ else if(security_level < SEC_LEVEL_RED)
+ to_chat(usr, 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)
+ message_admins("[key_name(usr)] has requested a Distress Beacon (via ARES)! [CC_MARK(usr)] (SEND) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]")
+ to_chat(usr, SPAN_NOTICE("A distress beacon request has been sent to USCM High Command."))
+ COOLDOWN_START(src, 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(usr, SPAN_WARNING("It is too soon to request Nuclear Ordnance!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(!COOLDOWN_FINISHED(src, ares_nuclear_cooldown))
+ to_chat(usr, SPAN_WARNING("The ordnance request frequency is garbled, wait for reset!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(security_level == SEC_LEVEL_DELTA || SSticker.mode.is_in_endgame)
+ to_chat(usr, 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
+
+ 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(usr)] has requested use of Nuclear Ordnance (via ARES)! [CC_MARK(usr)] (APPROVE) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]")
+ to_chat(usr, SPAN_NOTICE("A nuclear ordnance request has been sent to USCM High Command."))
+ COOLDOWN_START(src, ares_nuclear_cooldown, COOLDOWN_COMM_DESTRUCT)
+ return TRUE
+// ------ End ARES Interface UI ------ //
+
+
+/obj/structure/machinery/computer/working_joe/get_ares_access(obj/item/card/id/card)
+ if(ACCESS_ARES_DEBUG in card.access)
+ return APOLLO_ACCESS_DEBUG
+ switch(card.assignment)
+ if(JOB_WORKING_JOE)
+ return APOLLO_ACCESS_JOE
+ if(JOB_CHIEF_ENGINEER, JOB_SYNTH, JOB_CO)
+ return APOLLO_ACCESS_AUTHED
+ if(ACCESS_MARINE_AI in card.access)
+ return APOLLO_ACCESS_AUTHED
+ if(ACCESS_MARINE_AI_TEMP in card.access)
+ return APOLLO_ACCESS_TEMP
+ if((ACCESS_MARINE_COMMAND in card.access ) || (ACCESS_MARINE_ENGINEERING in card.access) || (ACCESS_WY_CORPORATE in card.access))
+ return APOLLO_ACCESS_REPORTER
+ else
+ return APOLLO_ACCESS_REQUEST
+
+/obj/structure/machinery/computer/working_joe/ares_auth_to_text(access_level)
+ switch(access_level)
+ if(APOLLO_ACCESS_REQUEST)//0
+ return "Unauthorized Personnel"
+ if(APOLLO_ACCESS_REPORTER)//1
+ return "Validated Incident Reporter"
+ if(APOLLO_ACCESS_TEMP)//2
+ return "Authorized Visitor"
+ if(APOLLO_ACCESS_AUTHED)//3
+ return "Certified Personnel"
+ if(APOLLO_ACCESS_JOE)//4
+ return "Working Joe"
+ if(APOLLO_ACCESS_DEBUG)//5
+ return "AI Service Technician"
+
+// ------ Maintenance Controller UI ------ //
+/obj/structure/machinery/computer/working_joe/verb/eject_id()
+ set category = "Object"
+ set name = "Eject ID Card"
+ set src in oview(1)
+
+ if(!usr || usr.stat || usr.lying) return
+
+ if(authenticator_id)
+ authenticator_id.loc = get_turf(src)
+ if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human))
+ usr.put_in_hands(authenticator_id)
+ if(operable()) // Powered. Console can response.
+ visible_message("[SPAN_BOLD("[src]")] states, \"AUTH LOGOUT: Session end confirmed.\"")
+ else
+ to_chat(usr, "You remove [authenticator_id] from [src].")
+ ticket_authenticated = FALSE // No card - no access
+ authenticator_id = null
+
+ else if(target_id)
+ target_id.loc = get_turf(src)
+ if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human))
+ usr.put_in_hands(target_id)
+ else
+ to_chat(usr, "You remove [target_id] from [src].")
+ target_id = null
+
+ else
+ to_chat(usr, "There is nothing to remove from the console.")
+ return
+
+/obj/structure/machinery/computer/working_joe/attackby(obj/object, mob/user)
+ if(istype(object, /obj/item/card/id))
+ if(!operable())
+ to_chat(user, SPAN_NOTICE("You try to insert [object] but [src] remains silent."))
+ return
+ var/obj/item/card/id/idcard = object
+ if((ACCESS_MARINE_AI in idcard.access) || (ACCESS_ARES_DEBUG in idcard.access))
+ if(!authenticator_id)
+ if(user.drop_held_item())
+ object.forceMove(src)
+ authenticator_id = object
+ authenticate(authenticator_id)
+ else if(!target_id)
+ if(user.drop_held_item())
+ object.forceMove(src)
+ target_id = object
+ else
+ to_chat(user, "Both slots are full already. Remove a card first.")
+ return
+ else
+ if(!target_id)
+ if(user.drop_held_item())
+ object.forceMove(src)
+ target_id = object
+ else
+ to_chat(user, "Both slots are full already. Remove a card first.")
+ return
+ else
+ ..()
+
+/obj/structure/machinery/computer/working_joe/proc/authenticate(obj/item/card/id/id_card)
+ if(!id_card)
+ visible_message("[SPAN_BOLD("[src]")] states, \"AUTH ERROR: Authenticator card is missing!\"")
+ return FALSE
+
+ if((ACCESS_MARINE_AI in id_card.access) || (ACCESS_ARES_DEBUG in id_card.access))
+ ticket_authenticated = TRUE
+ visible_message("[SPAN_BOLD("[src]")] states, \"AUTH LOGIN: Welcome, [id_card.registered_name]. Access granted.\"")
+ return TRUE
+
+ visible_message("[SPAN_BOLD("[src]")] states, \"AUTH ERROR: Access denied.\"")
+ return FALSE
+
+
+
+
+/obj/structure/machinery/computer/working_joe/attack_hand(mob/user as mob)
+ if(..() || !allowed(usr) || inoperable())
+ return FALSE
+
+ tgui_interact(user)
+ return TRUE
+
+/obj/structure/machinery/computer/working_joe/tgui_interact(mob/user, datum/tgui/ui, datum/ui_state/state)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "WorkingJoe", name)
+ ui.open()
+
+/obj/structure/machinery/computer/working_joe/ui_data(mob/user)
+ var/list/data = list()
+
+ data["ticket_console"] = ticket_console
+ data["current_menu"] = current_menu
+ data["last_page"] = last_menu
+
+ data["logged_in"] = last_login
+
+ data["access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]."
+ data["access_level"] = authentication
+
+ data["alert_level"] = security_level
+ data["worldtime"] = world.time
+
+ data["access_log"] = list()
+ data["access_log"] += login_list
+
+ data["apollo_log"] = list()
+ data["apollo_log"] += link.apollo_log
+
+ data["authenticated"] = ticket_authenticated
+
+
+ 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/list/current_maint = list()
+ current_maint["time"] = maint_ticket.ticket_time
+ current_maint["title"] = 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["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_ticket/access_ticket as anything in link.tickets_access)
+ var/list/current_ticket = list()
+ current_ticket["time"] = access_ticket.ticket_time
+ 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["ref"] = "\ref[access_ticket]"
+ logged_access += list(current_ticket)
+ data["access_tickets"] = logged_access
+
+
+ return data
+
+/obj/structure/machinery/computer/working_joe/ui_static_data(mob/user)
+ var/list/data = list()
+
+ data["link_id"] = link_id
+
+ return data
+
+/obj/structure/machinery/computer/working_joe/ui_status(mob/user, datum/ui_state/state)
+ . = ..()
+ if(!allowed(user))
+ return UI_UPDATE
+ if(inoperable())
+ return UI_DISABLED
+
+/obj/structure/machinery/computer/working_joe/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+
+ var/playsound = TRUE
+ var/mob/living/carbon/human/operator = usr
+
+ switch (action)
+ if("go_back")
+ if(!last_menu)
+ return to_chat(usr, SPAN_WARNING("Error, no previous page detected."))
+ var/temp_holder = current_menu
+ current_menu = last_menu
+ last_menu = temp_holder
+
+ if("login")
+
+ var/obj/item/card/id/idcard = operator.get_active_hand()
+ if(istype(idcard))
+ authentication = get_ares_access(idcard)
+ last_login = idcard.registered_name
+ else if(operator.wear_id)
+ idcard = operator.wear_id
+ if(istype(idcard))
+ authentication = get_ares_access(idcard)
+ last_login = idcard.registered_name
+ else
+ to_chat(usr, SPAN_WARNING("You require an ID card to access this terminal!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(authentication)
+ login_list += "[last_login] at [worldtime2text()], Access Level [authentication] - [ares_auth_to_text(authentication)]."
+ current_menu = "main"
+
+ if("logout")
+ last_menu = current_menu
+ current_menu = "login"
+ login_list += "[last_login] logged out at [worldtime2text()]."
+
+ if("home")
+ last_menu = current_menu
+ current_menu = "main"
+ if("page_logins")
+ last_menu = current_menu
+ current_menu = "login_records"
+ if("page_apollo")
+ last_menu = current_menu
+ current_menu = "apollo"
+ if("page_request")
+ last_menu = current_menu
+ current_menu = "access_requests"
+ if("page_returns")
+ last_menu = current_menu
+ current_menu = "access_returns"
+ if("page_report")
+ last_menu = current_menu
+ current_menu = "maint_reports"
+ if("page_tickets")
+ last_menu = current_menu
+ current_menu = "access_tickets"
+ if("page_maintenance")
+ last_menu = current_menu
+ current_menu = "maint_claim"
+
+ if("new_report")
+ var/name = tgui_input_text(usr, "What is the type of maintenance item you wish to report?\n\nExample:\n 'Broken light in Aft Hallway.'", "Ticket Name", encode = FALSE)
+ if(!name)
+ return FALSE
+ var/details = tgui_input_text(usr, "What are the details for this report?", "Ticket Details", encode = FALSE)
+ if(!details)
+ return FALSE
+ var/confirm = tgui_alert(usr, "Please confirm the submission of your maintenance report. \n\n [name] \n\n [details] \n\n Is this correct?", "Confirmation", list("Yes", "No"))
+ if(confirm == "Yes")
+ if(link)
+ var/datum/ares_ticket/maintenance/maint_ticket = new(last_login, name, details)
+ link.tickets_maintenance += maint_ticket
+ log_game("ARES: Maintenance Ticket created by [key_name(operator)] as [last_login] with Header '[name]' and Details of '[details]'.")
+ return TRUE
+ return FALSE
+
+ if(playsound)
+ playsound(src, "keyboard_alt", 15, 1)
diff --git a/code/game/machinery/ARES/ARES_records.dm b/code/game/machinery/ARES/ARES_records.dm
new file mode 100644
index 000000000000..9cb8574e58f7
--- /dev/null
+++ b/code/game/machinery/ARES/ARES_records.dm
@@ -0,0 +1,99 @@
+/datum/ares_record
+ var/record_name = "ARES Data Core"
+ /// World time in text format.
+ var/time
+ /// The title of the record, usually announcement title.
+ var/title
+ /// The content of the record, announcement text/bioscan info etc.
+ var/details
+ /// The name of the initiator of certain records. Who fired an OB, or who deleted something etc.
+ var/user
+
+/datum/ares_record/New(title, details)
+ time = worldtime2text()
+ src.title = title
+ src.details = details
+
+/datum/ares_record/announcement
+ record_name = ARES_RECORD_ANNOUNCE
+
+/datum/ares_record/bioscan
+ record_name = ARES_RECORD_BIOSCAN
+
+/datum/ares_record/requisition_log
+ record_name = ARES_RECORD_ASRS
+
+/datum/ares_record/requisition_log/New(title, details, user)
+ time = worldtime2text()
+ src.title = title
+ src.details = details
+ src.user = user
+
+/datum/ares_record/security
+ record_name = ARES_RECORD_SECURITY
+
+/datum/ares_record/antiair
+ record_name = ARES_RECORD_ANTIAIR
+
+/datum/ares_record/antiair/New(details, user)
+ time = worldtime2text()
+ src.title = "AntiAir Adjustment"
+ src.details = details
+ src.user = user
+
+/datum/ares_record/bombardment
+ record_name = ARES_RECORD_BOMB
+
+/datum/ares_record/bombardment/New(title, details, user)
+ time = worldtime2text()
+ src.title = title
+ src.details = details
+ src.user = user
+
+/datum/ares_record/deletion
+ record_name = ARES_RECORD_DELETED
+
+/datum/ares_record/deletion/New()
+ time = worldtime2text()
+
+/datum/ares_record/talk_log
+ record_name = "1:1 Data Log"
+ var/conversation = list()
+
+/datum/ares_record/talk_log/New(user)
+ src.user = user
+ src.title = "1:1 Log ([user])"
+
+/datum/ares_record/deleted_talk
+ record_name = ARES_RECORD_DELETED
+ var/conversation = list()
+
+/datum/ares_record/deleted_talk/New()
+ time = worldtime2text()
+
+
+/datum/ares_ticket
+ var/ticket_type = "Root Ticket"
+ var/ticket_status = TICKET_PENDING
+ /// Name of who is handling the ticket. Derived from last login.
+ var/ticket_assignee
+ /// World time in text format.
+ var/ticket_time
+ /// Who submitted the ticket. Derived from last login.
+ var/ticket_submitter
+ /// The name of the ticket.
+ var/ticket_name
+ /// The content of the ticket, usually an explanation of what it is for.
+ var/ticket_details
+
+/datum/ares_ticket/New(user, name, details)
+ ticket_time = worldtime2text()
+ ticket_submitter = user
+ ticket_details = details
+ ticket_name = name
+
+/datum/ares_ticket/maintenance
+ ticket_type = ARES_RECORD_MAINTENANCE
+
+/datum/ares_ticket/access_ticket
+ ticket_type = ARES_RECORD_ACCESS
diff --git a/code/game/machinery/ARES/ARES_step_triggers.dm b/code/game/machinery/ARES/ARES_step_triggers.dm
new file mode 100644
index 000000000000..1562f1badaab
--- /dev/null
+++ b/code/game/machinery/ARES/ARES_step_triggers.dm
@@ -0,0 +1,197 @@
+/obj/effect/step_trigger/ares_alert
+ name = "ARES Apollo Sensor"
+ layer = 5
+ /// Link alerts to ARES Link
+ var/datum/ares_link/link
+ var/link_id = MAIN_SHIP_DEFAULT_NAME
+ /// Alert message to report unless area based.
+ var/alert_message = "ALERT: Unauthorized movement detected in ARES Core!"
+ /// Connect alerts to use same cooldowns
+ var/alert_id
+ /// Set to true if it should report area name and not specific alert.
+ var/area_based = FALSE
+ /// Cooldown duration and next time.
+ var/cooldown_duration = COOLDOWN_ARES_SENSOR
+ COOLDOWN_DECLARE(sensor_cooldown)
+ /// The job on a mob to enter
+ var/list/pass_jobs = list(JOB_WORKING_JOE, JOB_CHIEF_ENGINEER, JOB_CO)
+ /// The accesses on an ID card to enter
+ var/pass_accesses = list(ACCESS_MARINE_AI, ACCESS_ARES_DEBUG)
+
+/obj/effect/step_trigger/ares_alert/Crossed(mob/living/passer)
+ if(!COOLDOWN_FINISHED(src, sensor_cooldown))//Don't want alerts spammed.
+ return FALSE
+ if(!passer)
+ return FALSE
+ if(!(ishuman(passer) || isxeno(passer)))
+ return FALSE
+ if(passer.alpha <= 100)//Can't be seen/detected to trigger alert.
+ return FALSE
+ if(pass_jobs)
+ if(passer.job in pass_jobs)
+ return FALSE
+ if(isxeno(passer) && (JOB_XENOMORPH in pass_jobs))
+ return FALSE
+ if(ishuman(passer))
+ var/mob/living/carbon/human/trespasser = passer
+ if(pass_accesses && (trespasser.wear_id))
+ for(var/tag in pass_accesses)
+ if(tag in trespasser.wear_id.access)
+ return FALSE
+ Trigger(passer)
+ return TRUE
+
+
+/obj/effect/step_trigger/ares_alert/Initialize(mapload, ...)
+ link_systems(override = FALSE)
+ . = ..()
+
+/obj/effect/step_trigger/ares_alert/Destroy()
+ delink()
+ return ..()
+
+/obj/effect/step_trigger/ares_alert/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
+ if(link && !override)
+ return FALSE
+ if(new_link.link_id == link_id)
+ link = new_link
+ new_link.linked_alerts += src
+ return TRUE
+/obj/effect/step_trigger/ares_alert/proc/delink()
+ if(link)
+ link.linked_alerts -= src
+ link = null
+
+
+/obj/effect/step_trigger/ares_alert/Trigger(mob/living/passer)
+ var/broadcast_message = alert_message
+ if(area_based)
+ var/area_name = get_area_name(src, TRUE)
+ broadcast_message = "ALERT: Unauthorized movement detected in [area_name]!"
+
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.p_apollo.inoperable())
+ return FALSE
+
+ to_chat(passer, SPAN_BOLDWARNING("You hear a soft beeping sound as you cross the threshold."))
+ var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO]
+ for(var/mob/living/silicon/decoy/ship_ai/ai in ai_mob_list)
+ apollo.broadcast(ai, broadcast_message)
+ for(var/mob/listener as anything in (GLOB.human_mob_list + GLOB.dead_mob_list))
+ if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam.
+ playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45)
+ COOLDOWN_START(src, sensor_cooldown, cooldown_duration)
+ if(alert_id && link)
+ for(var/obj/effect/step_trigger/ares_alert/sensor in link.linked_alerts)
+ if(sensor.alert_id == src.alert_id)
+ COOLDOWN_START(sensor, sensor_cooldown, cooldown_duration)
+ return TRUE
+
+/obj/effect/step_trigger/ares_alert/public
+ pass_accesses = list(ACCESS_MARINE_AI_TEMP, ACCESS_MARINE_AI, ACCESS_ARES_DEBUG)
+/obj/effect/step_trigger/ares_alert/core
+ alert_id = "AresCore"
+ pass_accesses = list(ACCESS_MARINE_AI_TEMP, ACCESS_MARINE_AI, ACCESS_ARES_DEBUG)
+
+/obj/effect/step_trigger/ares_alert/mainframe
+ alert_id = "AresMainframe"
+ alert_message = "ALERT: Unauthorized movement detected in ARES Mainframe!"
+
+/obj/effect/step_trigger/ares_alert/terminals
+ alert_id = "AresTerminals"
+ alert_message = "ALERT: Unauthorized movement detected in ARES' Operations Center!"
+
+/obj/effect/step_trigger/ares_alert/comms
+ area_based = TRUE
+ alert_id = "TComms"
+ pass_accesses = list(ACCESS_MARINE_CE)
+
+
+/// Trigger will remove ACCESS_MARINE_AI_TEMP unless ACCESS_MARINE_AI is also present.
+/obj/effect/step_trigger/ares_alert/access_control
+ name = "ARES Access Control Sensor"
+ alert_message = "HARDCODED"
+ alert_id = "ARES Access"
+ cooldown_duration = COOLDOWN_ARES_ACCESS_CONTROL
+
+
+/obj/effect/step_trigger/ares_alert/access_control/Crossed(atom/passer as mob|obj)
+ if(isobserver(passer) || isxeno(passer))
+ return FALSE
+ if(!COOLDOWN_FINISHED(src, sensor_cooldown))//Don't want alerts spammed.
+ return FALSE
+ if(!passer)
+ return FALSE
+ if(passer.alpha <= 100)//Can't be seen/detected to trigger alert.
+ return FALSE
+ var/area/pass_area = get_area(get_step(passer, passer.dir))
+ if(istype(pass_area, /area/almayer/command/airoom))//Don't want it to freak out over someone /entering/ the area. Only leaving.
+ return FALSE
+ var/obj/item/card/id/idcard
+ var/check_contents = TRUE
+ if(ishuman(passer))
+ var/mob/living/carbon/human/human_passer = passer
+ idcard = human_passer.wear_id
+ if(istype(idcard))
+ check_contents = FALSE
+ else
+ idcard = null
+
+ if(istype(passer, /obj/item/card/id))
+ idcard = passer
+ check_contents = FALSE
+
+ if(check_contents)
+ idcard = locate(/obj/item/card/id) in passer
+ if(!idcard)
+ for(var/obj/item/holder in passer.contents)
+ idcard = locate(/obj/item/card/id) in holder.contents
+ if(idcard)
+ break
+ if(!istype(idcard) && ismob(passer))
+ Trigger(passer, failure = TRUE)
+ return FALSE
+ if(!(ACCESS_MARINE_AI_TEMP in idcard.access))//No temp access, don't care
+ return FALSE
+ if((ACCESS_MARINE_AI in idcard.access) || (ACCESS_ARES_DEBUG in idcard.access))//Permanent access prevents loss of temporary
+ return FALSE
+ Trigger(passer, idcard)
+ return TRUE
+
+/obj/effect/step_trigger/ares_alert/access_control/Trigger(atom/passer, obj/item/card/id/idcard, failure = FALSE)
+ var/broadcast_message = get_broadcast(passer, idcard, failure)
+
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.p_apollo.inoperable())
+ return FALSE
+
+ to_chat(passer, SPAN_BOLDWARNING("You hear a harsh buzzing sound as you cross the threshold!"))
+ var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO]
+ for(var/mob/living/silicon/decoy/ship_ai/ai in ai_mob_list)
+ apollo.broadcast(ai, broadcast_message)
+ for(var/mob/listener in (GLOB.human_mob_list + GLOB.dead_mob_list))
+ if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam.
+ playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45)
+ if(idcard)
+ idcard.access -= ACCESS_MARINE_AI_TEMP
+ COOLDOWN_START(src, sensor_cooldown, COOLDOWN_ARES_ACCESS_CONTROL)
+ if(alert_id && link)
+ for(var/obj/effect/step_trigger/ares_alert/sensor in link.linked_alerts)
+ if(sensor.alert_id == src.alert_id)
+ COOLDOWN_START(sensor, sensor_cooldown, COOLDOWN_ARES_ACCESS_CONTROL)
+ return TRUE
+
+/obj/effect/step_trigger/ares_alert/access_control/proc/get_broadcast(atom/passer, obj/item/card/id/idcard, failure = FALSE)
+ if(isxeno(passer))
+ return "Unidentified lifeform detected departing AI Chamber."
+ if(ishuman(passer))
+ var/mob/living/carbon/human/human_passer = passer
+ if(failure)
+ return "CAUTION: [human_passer.name] left the AI Chamber without a locatable ID card."
+ return "ALERT: [human_passer.name] left the AI Chamber with a temporary access ticket. Removing access."
+
+ if(idcard)
+ return "ALERT: ID Card assigned to [idcard.registered_name] left the AI Chamber with a temporary access ticket. Removing access."
+
+ log_debug("ARES ERROR 337: Passer: '[passer]', ID: '[idcard]', F Status: '[failure]'")
+ return "Warning: Error 337 - Access Control Anomaly."
diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm
index 1a15d40eba9c..a8735cbc06a8 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -110,6 +110,10 @@
/obj/structure/machinery/camera/autoname/almayer/containment/hidden
network = list(CAMERA_NET_CONTAINMENT_HIDDEN)
+/obj/structure/machinery/camera/autoname/almayer/containment/ares
+ name = "ares core camera"
+ network = list(CAMERA_NET_ALMAYER, CAMERA_NET_ARES)
+
//used by the landing camera dropship equipment. Do not place them right under where the dropship lands.
//Should place them near each corner of your LZs.
/obj/structure/machinery/camera/autoname/lz_camera
diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm
index ec4abc68511b..b2a931224464 100644
--- a/code/game/machinery/computer/almayer_control.dm
+++ b/code/game/machinery/computer/almayer_control.dm
@@ -118,7 +118,7 @@
return FALSE
usr.set_interaction(src)
-
+ var/datum/ares_link/link = GLOB.ares_link
switch(href_list["operation"])
if("main")
state = STATE_DEFAULT
@@ -163,6 +163,7 @@
log_game("[key_name(usr)] has called for an emergency evacuation.")
message_admins("[key_name_admin(usr)] has called for an emergency evacuation.")
+ link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.")
return TRUE
state = STATE_EVACUATION
@@ -182,6 +183,7 @@
log_game("[key_name(usr)] has canceled the emergency evacuation.")
message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.")
+ link.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.")
return TRUE
state = STATE_EVACUATION_CANCEL
diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm
index d7fe2ed83e02..d4feca457f4a 100644
--- a/code/game/machinery/computer/camera_console.dm
+++ b/code/game/machinery/computer/camera_console.dm
@@ -318,6 +318,10 @@
name = "Containment Cameras"
network = list(CAMERA_NET_CONTAINMENT)
+/obj/structure/machinery/computer/cameras/almayer/ares
+ name = "ARES Core Cameras"
+ network = list(CAMERA_NET_ARES)
+
/obj/structure/machinery/computer/cameras/almayer/vehicle
name = "Ship Security Cameras"
network = list(CAMERA_NET_ALMAYER, CAMERA_NET_VEHICLE)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 2a7b5017d1ed..edc39faf3ddc 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -65,6 +65,7 @@
if(..()) return FALSE
usr.set_interaction(src)
+ var/datum/ares_link/link = GLOB.ares_link
switch(href_list["operation"])
if("mapview")
tacmap.tgui_interact(usr)
@@ -148,6 +149,7 @@
log_game("[key_name(usr)] has called for an emergency evacuation.")
message_admins("[key_name_admin(usr)] has called for an emergency evacuation.")
+ link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.")
return TRUE
state = STATE_EVACUATION
@@ -167,6 +169,7 @@
log_game("[key_name(usr)] has canceled the emergency evacuation.")
message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.")
+ link.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.")
return TRUE
state = STATE_EVACUATION_CANCEL
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index 40bdd68b3b34..8be8609d6008 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -52,6 +52,11 @@
/obj/structure/machinery/door_control/attackby(obj/item/W, mob/user as mob)
return src.attack_hand(user)
+/obj/structure/machinery/door_control/ex_act(severity)
+ if(indestructible)
+ return FALSE
+ ..()
+
/obj/structure/machinery/door_control/proc/handle_dropship(ship_id)
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(ship_id)
if (!istype(shuttle))
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 972ce6b7570e..da6137e5e8cb 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -287,10 +287,13 @@
/obj/structure/machinery/door/poddoor/almayer/blended
icon_state = "almayer_pdoor1"
base_icon_state = "almayer_pdoor"
-
+/obj/structure/machinery/door/poddoor/almayer/blended/open
+ density = FALSE
/obj/structure/machinery/door/poddoor/almayer/blended/white
icon_state = "w_almayer_pdoor1"
base_icon_state = "w_almayer_pdoor"
+/obj/structure/machinery/door/poddoor/almayer/blended/white/open
+ density = FALSE
/obj/structure/machinery/door/poddoor/almayer/Initialize()
. = ..()
diff --git a/code/game/machinery/doors/railing.dm b/code/game/machinery/doors/railing.dm
index 145a5d8191dc..8449d5d52256 100644
--- a/code/game/machinery/doors/railing.dm
+++ b/code/game/machinery/doors/railing.dm
@@ -19,7 +19,8 @@
. = ..()
if(dir == SOUTH)
closed_layer = ABOVE_MOB_LAYER
- layer = closed_layer
+ if(density)//Allows preset-open to work
+ layer = closed_layer
SetOpacity(initial(opacity))
@@ -63,3 +64,6 @@
addtimer(VARSET_CALLBACK(src, operating, FALSE), 1.2 SECONDS)
return TRUE
+
+/obj/structure/machinery/door/poddoor/railing/open
+ density = FALSE
diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm
index 2650a3057503..1a4aebe813cc 100644
--- a/code/game/objects/items/devices/cictablet.dm
+++ b/code/game/objects/items/devices/cictablet.dm
@@ -145,6 +145,8 @@
log_game("[key_name(usr)] has called for an emergency evacuation.")
message_admins("[key_name_admin(usr)] has called for an emergency evacuation.")
+ var/datum/ares_link/link = GLOB.ares_link
+ link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.")
. = TRUE
if("distress")
diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm
index 60f29c8b40e4..9323bca2877e 100644
--- a/code/game/objects/structures/misc.dm
+++ b/code/game/objects/structures/misc.dm
@@ -143,7 +143,7 @@
unslashable = TRUE
unacidable = TRUE
health = null
- layer = TURF_LAYER
+ layer = ABOVE_TURF_LAYER//Being on turf layer was causing issues with cameras. This SHOULDN'T cause any problems.
plane = FLOOR_PLANE
density = FALSE
opacity = FALSE
diff --git a/code/game/objects/structures/pipes/pipes.dm b/code/game/objects/structures/pipes/pipes.dm
index aa5f56fb5d8c..9f2b70c70661 100644
--- a/code/game/objects/structures/pipes/pipes.dm
+++ b/code/game/objects/structures/pipes/pipes.dm
@@ -14,6 +14,8 @@
var/ventcrawl_message_busy = FALSE //Prevent spamming
+ /// Whether or not the pipe will explode (when on the Almayer) during hijack
+ var/explodey = TRUE
/// The grenade subtypes that pipes will use when they explode
var/static/list/exploding_types = list(/obj/item/explosive/grenade/high_explosive/bursting_pipe, /obj/item/explosive/grenade/incendiary/bursting_pipe)
@@ -40,7 +42,8 @@
if(!is_mainship_level(z))
return
- GLOB.mainship_pipes += src
+ if(explodey)
+ GLOB.mainship_pipes += src
/obj/structure/pipes/Destroy()
for(var/mob/living/M in src)
diff --git a/code/game/objects/structures/pipes/standard/manifolds.dm b/code/game/objects/structures/pipes/standard/manifolds.dm
index f7bd04ee3fb7..dfbc027455b6 100644
--- a/code/game/objects/structures/pipes/standard/manifolds.dm
+++ b/code/game/objects/structures/pipes/standard/manifolds.dm
@@ -104,6 +104,10 @@
layer = ATMOS_PIPE_SUPPLY_LAYER
color = PIPE_COLOR_BLUE
+/obj/structure/pipes/standard/manifold/hidden/supply/no_boom
+ name = "Reinforced Air supply pipe manifold"
+ explodey = FALSE
+
/obj/structure/pipes/standard/manifold/hidden/yellow
color = PIPE_COLOR_YELLOW
@@ -182,6 +186,10 @@
layer = ATMOS_PIPE_SUPPLY_LAYER
color = PIPE_COLOR_BLUE
+/obj/structure/pipes/standard/manifold/fourway/hidden/supply/no_boom
+ name = "reinforced 4-way air supply pipe manifold"
+ explodey = FALSE
+
/obj/structure/pipes/standard/manifold/fourway/hidden/yellow
color = PIPE_COLOR_YELLOW
diff --git a/code/game/objects/structures/pipes/standard/simple.dm b/code/game/objects/structures/pipes/standard/simple.dm
index 7101bb3dd95f..93a92e51f71b 100644
--- a/code/game/objects/structures/pipes/standard/simple.dm
+++ b/code/game/objects/structures/pipes/standard/simple.dm
@@ -104,6 +104,10 @@
layer = ATMOS_PIPE_SUPPLY_LAYER
color = PIPE_COLOR_BLUE
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom
+ name = "Reinforced Air supply pipe"
+ explodey = FALSE
+
/obj/structure/pipes/standard/simple/hidden/yellow
color = PIPE_COLOR_YELLOW
diff --git a/code/game/objects/structures/pipes/standard/standard_misc.dm b/code/game/objects/structures/pipes/standard/standard_misc.dm
index a50774552b03..dc52da57c750 100644
--- a/code/game/objects/structures/pipes/standard/standard_misc.dm
+++ b/code/game/objects/structures/pipes/standard/standard_misc.dm
@@ -107,6 +107,10 @@
layer = ATMOS_PIPE_SUPPLY_LAYER
color = PIPE_COLOR_BLUE
+/obj/structure/pipes/standard/cap/hidden/supply/no_boom
+ name = "reinforced supply pipe endcap"
+ explodey = FALSE
+
/obj/structure/pipes/standard/tank
icon = 'icons/obj/pipes/tank.dmi'
diff --git a/code/game/objects/structures/pipes/vents/pump_scrubber.dm b/code/game/objects/structures/pipes/vents/pump_scrubber.dm
index d0dd3f8301a7..a4565c610ad5 100644
--- a/code/game/objects/structures/pipes/vents/pump_scrubber.dm
+++ b/code/game/objects/structures/pipes/vents/pump_scrubber.dm
@@ -4,6 +4,10 @@
name = "Air Scrubber"
vent_icon = "scrubber"
+/obj/structure/pipes/vents/scrubber/no_boom
+ name = "Reinforced Air Scrubber"
+ explodey = FALSE
+
/obj/structure/pipes/vents/scrubber/on
icon_state = "on"
@@ -13,6 +17,10 @@
icon_state = "map_vent"
name = "Air Vent"
+/obj/structure/pipes/vents/pump/no_boom
+ name = "Reinforced Air Vent"
+ explodey = FALSE
+
/obj/structure/pipes/vents/pump/on
icon_state = "on"
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index cacb8232fd60..fbd6920875ad 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -70,7 +70,7 @@
/obj/structure/sign/kiddieplaque
name = "AI developers plaque"
- desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\""
+ desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. Beneath the image, someone has scratched the word \"PACKETS\""
icon_state = "kiddieplaque"
/obj/structure/sign/arcturianstopsign
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 7537d47c941f..4186ae8608a9 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -295,6 +295,11 @@
name = "Delta squad chair"
desc = "A simple chair permanently attached to the floor. Covered with a squeaky and way too hard faux-leather, unevenly painted in Delta squad blue. This chair is most likely to be the first to fight and first to die."
+/obj/structure/bed/chair/comfy/ares
+ icon_state = "comfychair_ares"
+ name = "AI core chair"
+ desc = "A functional chair designed for comfortably sitting a single person with intent to facilitate interactions with the ship AI."
+
/obj/structure/bed/chair/office
anchored = FALSE
drag_delay = 1 //Pulling something on wheels is easy
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index dcc854bfa71d..b760340004f5 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -1015,6 +1015,7 @@ var/datum/controller/supply/supply_controller = new()
to_chat(usr, SPAN_DANGER("Current retrieval load has reached maximum capacity."))
return
+ var/datum/ares_link/link = GLOB.ares_link
for(var/i=1, i<=supply_controller.requestlist.len, i++)
var/datum/supply_order/SO = supply_controller.requestlist[i]
if(SO.ordernum == ordernum)
@@ -1030,6 +1031,12 @@ var/datum/controller/supply/supply_controller = new()
temp += "
Back Main Menu"
supply_order.approvedby = usr.name
msg_admin_niche("[usr] confirmed supply order of [supply_pack.name].")
+ var/pack_source = "Cargo Hold"
+ var/pack_name = supply_pack.name
+ if(supply_pack.dollar_cost)
+ pack_source = "Unknown"
+ pack_name = "Unknown"
+ link.log_ares_requisition(pack_source, pack_name, usr)
else
temp = "Not enough money left.
"
temp += "
Back Main Menu"
diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm
index 25682f00df29..4e47fd004f74 100644
--- a/code/game/turfs/floor_types.dm
+++ b/code/game/turfs/floor_types.dm
@@ -272,7 +272,9 @@
/turf/open/floor/almayer/uscm/directional
icon_state = "logo_directional"
-
+/turf/open/floor/almayer/no_build
+ allow_construction = FALSE
+ hull_floor = TRUE
// RESEARCH STUFF
/turf/open/floor/almayer/research/containment/entrance
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index debffa9b25b0..ba5d52a23f97 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -67,6 +67,7 @@ var/list/admin_verbs_default = list(
/datum/admins/proc/subtlemessageall,
/datum/admins/proc/alertall,
/datum/admins/proc/imaginary_friend,
+ /client/proc/toggle_ares_ping,
)
var/list/admin_verbs_admin = list(
@@ -577,6 +578,16 @@ var/list/roundstart_mod_verbs = list(
message_admins("[key_name(usr)] announced a random fact.")
SSticker.mode?.declare_fun_facts()
+/client/proc/toggle_ares_ping()
+ set name = "Toggle ARES notification sound"
+ set category = "Preferences.Logs"
+
+ prefs.toggles_sound ^= SOUND_ARES_MESSAGE
+ if (prefs.toggles_sound & SOUND_ARES_MESSAGE)
+ to_chat(usr, SPAN_BOLDNOTICE("You will now hear a ping for ARES messages."))
+ else
+ to_chat(usr, SPAN_BOLDNOTICE("You will no longer hear a ping for ARES messages."))
+
#undef MAX_WARNS
#undef AUTOBANTIME
diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm
index 11ee49b65e61..c0ffeada9883 100644
--- a/code/modules/admin/tabs/admin_tab.dm
+++ b/code/modules/admin/tabs/admin_tab.dm
@@ -680,10 +680,14 @@
/proc/set_lz_resin_allowed(allowed = TRUE)
if(allowed)
for(var/area/A in all_areas)
+ if(A.flags_area & AREA_UNWEEDABLE)
+ continue
A.is_resin_allowed = TRUE
msg_admin_niche("Areas close to landing zones are now weedable.")
else
for(var/area/A in all_areas)
+ if(A.flags_area & AREA_UNWEEDABLE)
+ continue
A.is_resin_allowed = initial(A.is_resin_allowed)
msg_admin_niche("Areas close to landing zones cannot be weeded now.")
GLOB.resin_lz_allowed = allowed
diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm
index 8fca782ecd63..20d98776c5ab 100644
--- a/code/modules/admin/tabs/event_tab.dm
+++ b/code/modules/admin/tabs/event_tab.dm
@@ -440,7 +440,7 @@
return
var/confirm = tgui_alert(usr, "Are you sure you want to hijack [dropship]?", "Force hijack", list("Yes", "No")) == "Yes"
- if(!confirm)
+ if(!confirm)
return
var/obj/structure/machinery/computer/shuttle/dropship/flight/computer = dropship.getControlConsole()
@@ -535,19 +535,15 @@
if(!input)
return FALSE
- for(var/obj/structure/machinery/computer/almayer_control/C in machines)
- if(!(C.inoperable()))
-// var/obj/item/paper/P = new /obj/item/paper(C.loc)//Don't need a printed copy currently.
-// P.name = "'[MAIN_AI_SYSTEM] Update.'"
-// P.info = input
-// P.update_icon()
- C.messagetitle.Add("[MAIN_AI_SYSTEM] Update")
- C.messagetext.Add(input)
- ai_announcement(input)
- message_admins("[key_name_admin(src)] has created an AI comms report")
- log_admin("AI comms report: [input]")
- else
- to_chat(usr, SPAN_WARNING("[MAIN_AI_SYSTEM] is not responding. It may be offline or destroyed."))
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.p_interface.inoperable())
+ to_chat(usr, SPAN_WARNING("[MAIN_AI_SYSTEM] is not responding. It may be offline or destroyed."))
+ return
+
+ ai_announcement(input)
+ message_admins("[key_name_admin(src)] has created an AI comms report")
+ log_admin("AI comms report: [input]")
+
/client/proc/cmd_admin_create_AI_apollo_report()
set name = "Report: ARES Apollo"
@@ -560,19 +556,19 @@
if(!input)
return FALSE
- for(var/obj/structure/machinery/computer/almayer_control/console in machines)
- if(console.inoperable())
- to_chat(usr, SPAN_WARNING("[MAIN_AI_SYSTEM] is not responding. It may be offline or destroyed."))
- return
- else
- var/datum/language/apollo = GLOB.all_languages[LANGUAGE_APOLLO]
- for(var/mob/living/silicon/decoy/ship_ai/AI in ai_mob_list)
- apollo.broadcast(AI, input)
- for(var/mob/listener in (GLOB.human_mob_list + GLOB.dead_mob_list))
- if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam.
- playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45)
- message_admins("[key_name_admin(src)] has created an AI Apollo report")
- log_admin("AI Apollo report: [input]")
+ var/datum/ares_link/link = GLOB.ares_link
+ if(link.p_apollo.inoperable())
+ to_chat(usr, SPAN_WARNING("[MAIN_AI_SYSTEM] is not responding. It may be offline or destroyed."))
+ return FALSE
+
+ var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO]
+ for(var/mob/living/silicon/decoy/ship_ai/AI in ai_mob_list)
+ apollo.broadcast(AI, input)
+ for(var/mob/listener as anything in (GLOB.human_mob_list + GLOB.dead_mob_list))
+ if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam.
+ playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45)
+ message_admins("[key_name_admin(src)] has created an AI APOLLO report")
+ log_admin("AI APOLLO report: [input]")
/client/proc/cmd_admin_create_AI_shipwide_report()
set name = "Report: ARES Shipwide"
@@ -584,19 +580,14 @@
var/input = input(usr, "This is an announcement type message from the ship's AI. This will be announced to every conscious human on Almayer z-level. Be aware, this will work even if ARES unpowered/destroyed. Check with online staff before you send this.", "What?", "") as message|null
if(!input)
return FALSE
+ for(var/obj/structure/machinery/ares/processor/interface/processor in machines)
+ if(processor.inoperable())
+ to_chat(usr, SPAN_WARNING("[MAIN_AI_SYSTEM] is not responding. It may be offline or destroyed."))
+ return
- for(var/obj/structure/machinery/computer/almayer_control/C in machines)
- if(!(C.inoperable()))
-// var/obj/item/paper/P = new /obj/item/paper(C.loc)//Don't need a printed copy currently.
-// P.name = "'[MAIN_AI_SYSTEM] Update.'"
-// P.info = input
-// P.update_icon()
- C.messagetitle.Add("[MAIN_AI_SYSTEM] Shipwide Update")
- C.messagetext.Add(input)
-
- shipwide_ai_announcement(input)
- message_admins("[key_name_admin(src)] has created an AI shipwide report")
- log_admin("[key_name_admin(src)] AI shipwide report: [input]")
+ shipwide_ai_announcement(input)
+ message_admins("[key_name_admin(src)] has created an AI shipwide report")
+ log_admin("[key_name_admin(src)] AI shipwide report: [input]")
/client/proc/cmd_admin_create_predator_report()
set name = "Report: Yautja AI"
@@ -972,7 +963,11 @@
if("Xeno")
GLOB.bioscan_data.qm_bioscan(variance)
if("Marine")
- GLOB.bioscan_data.ares_bioscan(FALSE, variance)
+ var/force_check = tgui_alert(usr, "Do you wish to force ARES to display the bioscan?", "Display force", list("Yes", "No"), 20 SECONDS)
+ var/force_status = FALSE
+ if(force_check == "Yes")
+ force_status = TRUE
+ GLOB.bioscan_data.ares_bioscan(force_status, variance)
if("Yautja")
GLOB.bioscan_data.yautja_bioscan()
diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm
index 96c9312db7d1..b371db087be6 100644
--- a/code/modules/admin/topic/topic.dm
+++ b/code/modules/admin/topic/topic.dm
@@ -1882,7 +1882,7 @@
if(href_list["ccdeny"]) // CentComm-deny. The distress call is denied, without any further conditions
var/mob/ref_person = locate(href_list["ccdeny"])
- marine_announcement("The distress signal has not received a response, the launch tubes are now recalibrating.", "Distress Beacon")
+ marine_announcement("The distress signal has not received a response, the launch tubes are now recalibrating.", "Distress Beacon", logging = ARES_LOG_SECURITY)
log_game("[key_name_admin(usr)] has denied a distress beacon, requested by [key_name_admin(ref_person)]")
message_admins("[key_name_admin(usr)] has denied a distress beacon, requested by [key_name_admin(ref_person)]", 1)
@@ -1927,7 +1927,7 @@
if(href_list["sddeny"]) // CentComm-deny. The self-destruct is denied, without any further conditions
var/mob/ref_person = locate(href_list["sddeny"])
- marine_announcement("The self-destruct request has not received a response, ARES is now recalculating statistics.", "Self-Destruct System")
+ marine_announcement("The self-destruct request has not received a response, ARES is now recalculating statistics.", "Self-Destruct System", logging = ARES_LOG_SECURITY)
log_game("[key_name_admin(usr)] has denied self-destruct, requested by [key_name_admin(ref_person)]")
message_admins("[key_name_admin(usr)] has denied self-destruct, requested by [key_name_admin(ref_person)]", 1)
@@ -2006,6 +2006,45 @@
player_notes_all(checking.key)
+ if(href_list["AresReply"])
+ var/mob/living/carbon/human/speaker = locate(href_list["AresReply"])
+
+ if(!istype(speaker))
+ to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
+ return FALSE
+
+ if((!GLOB.ares_link.interface) || (GLOB.ares_link.interface.inoperable()))
+ to_chat(usr, "ARES Interface offline.")
+ return FALSE
+
+ var/input = input(src.owner, "Please enter a message from ARES to reply to [key_name(speaker)].","Outgoing message from ARES", "")
+ if(!input)
+ return FALSE
+
+ to_chat(src.owner, "You sent [input] to [speaker] via ARES Interface.")
+ log_admin("[src.owner] replied to [key_name(speaker)]'s ARES message with the message [input].")
+ for(var/client/staff in GLOB.admins)
+ if((R_ADMIN|R_MOD) & staff.admin_holder.rights)
+ to_chat(staff, SPAN_STAFF_IC("ADMINS/MODS: [SPAN_RED("[src.owner] replied to [key_name(speaker)]'s ARES message")] with: [SPAN_BLUE(input)] "))
+ GLOB.ares_link.interface.response_from_ares(input, href_list["AresRef"])
+
+ if(href_list["AresMark"])
+ var/mob/living/carbon/human/speaker = locate(href_list["AresMark"])
+
+ if(!istype(speaker))
+ to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
+ return FALSE
+
+ if((!GLOB.ares_link.interface) || (GLOB.ares_link.interface.inoperable()))
+ to_chat(usr, "ARES Interface offline.")
+ return FALSE
+
+ to_chat(src.owner, "You marked [speaker]'s ARES message for response.")
+ log_admin("[src.owner] marked [key_name(speaker)]'s ARES message. [src.owner] will be responding.")
+ for(var/client/staff in GLOB.admins)
+ if((R_ADMIN|R_MOD) & staff.admin_holder.rights)
+ to_chat(staff, SPAN_STAFF_IC("ADMINS/MODS: [SPAN_RED("[src.owner] marked [key_name(speaker)]'s ARES message for response.")]"))
+
return
/datum/admins/proc/accept_ert(mob/approver, mob/ref_person)
diff --git a/code/modules/cm_marines/anti_air.dm b/code/modules/cm_marines/anti_air.dm
index 22d43456437b..fc67f9a2018d 100644
--- a/code/modules/cm_marines/anti_air.dm
+++ b/code/modules/cm_marines/anti_air.dm
@@ -102,6 +102,7 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon
if(!almayer_aa_cannon)
return
+ var/datum/ares_link/link = GLOB.ares_link
switch(action)
if("protect")
almayer_aa_cannon.protecting_section = params["section_id"]
@@ -109,10 +110,12 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon
almayer_aa_cannon.protecting_section = ""
return
message_admins("[key_name(usr)] has set the AA to [html_encode(almayer_aa_cannon.protecting_section)].")
+ link.log_ares_antiair(usr, "Set AA to cover [html_encode(almayer_aa_cannon.protecting_section)].")
. = TRUE
if("deactivate")
almayer_aa_cannon.protecting_section = ""
message_admins("[key_name(usr)] has deactivated the AA cannon.")
+ link.log_ares_antiair(usr, "Deactivated Anti Air systems.")
. = TRUE
add_fingerprint(usr)
diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm
index 401d8fd9784a..070cf1f6c1cf 100644
--- a/code/modules/cm_marines/overwatch.dm
+++ b/code/modules/cm_marines/overwatch.dm
@@ -866,6 +866,9 @@
message_admins(FONT_SIZE_HUGE("ALERT: [key_name(user)] fired an orbital bombardment in [A.name] for squad '[current_squad]' [ADMIN_JMP(T)]"))
log_attack("[key_name(user)] fired an orbital bombardment in [A.name] for squad '[current_squad]'")
+ /// Project ARES interface log.
+ GLOB.ares_link.log_ares_bombardment(user, ob_name, "X[x_bomb], Y[y_bomb] in [A.name]")
+
busy = FALSE
var/turf/target = locate(T.x + rand(-3, 3), T.y + rand(-3, 3), T.z)
if(target && istype(target))
diff --git a/code/modules/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm
index ec79a2f7f3fd..2db33c10ed46 100644
--- a/code/modules/cm_marines/smartgun_mount.dm
+++ b/code/modules/cm_marines/smartgun_mount.dm
@@ -111,6 +111,11 @@
to_chat(usr, SPAN_WARNING("It's too cramped in here to deploy \a [src]."))
return
var/turf/T = get_turf(usr)
+ if(istype(T, /turf/open))
+ var/turf/open/floor = T
+ if(!floor.allow_construction)
+ to_chat(user, SPAN_WARNING("You cannot install \the [src] here, find a more secure surface!"))
+ return FALSE
var/fail = FALSE
if(T.density)
fail = TRUE
@@ -195,6 +200,11 @@
to_chat(usr, SPAN_WARNING("It's too cramped in here to deploy \a [src]."))
return
var/turf/T = get_turf(user)
+ if(istype(T, /turf/open))
+ var/turf/open/floor = T
+ if(!floor.allow_construction)
+ to_chat(user, SPAN_WARNING("You cannot install \the [src] here, find a more secure surface!"))
+ return FALSE
var/fail = FALSE
if(T.density)
fail = TRUE
@@ -370,6 +380,11 @@
if(fail)
to_chat(user, SPAN_WARNING("You can't install \the [src] here, something is in the way."))
return
+ if(istype(T, /turf/open))
+ var/turf/open/floor = T
+ if(!floor.allow_construction)
+ to_chat(user, SPAN_WARNING("You cannot install \the [src] here, find a more secure surface!"))
+ return FALSE
if(gun_mounted)
to_chat(user, "You're securing the M56D into place...")
@@ -1061,7 +1076,7 @@
if(SSinterior.in_interior(user))
to_chat(usr, SPAN_WARNING("It's too cramped in here to deploy \a [src]."))
return FALSE
- if(OT.density || !isturf(OT))
+ if(OT.density || !isturf(OT) || !OT.allow_construction)
to_chat(user, SPAN_WARNING("You can't set up \the [src] here."))
return FALSE
if(rotate_check.density)
diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm
index ee6db2b10455..f47ae3e4d77b 100644
--- a/code/modules/defenses/defenses.dm
+++ b/code/modules/defenses/defenses.dm
@@ -303,6 +303,10 @@
playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1)
return
else
+ var/turf/open/floor = get_turf(src)
+ if(!floor.allow_construction)
+ to_chat(user, SPAN_WARNING("You cannot secure \the [src] here, find a more secure surface!"))
+ return FALSE
user.visible_message(SPAN_NOTICE("[user] begins securing [src] to the ground."),
SPAN_NOTICE("You begin securing [src] to the ground."))
diff --git a/code/modules/defenses/handheld.dm b/code/modules/defenses/handheld.dm
index e68522871561..233dad313d25 100644
--- a/code/modules/defenses/handheld.dm
+++ b/code/modules/defenses/handheld.dm
@@ -66,7 +66,12 @@
blocked = TRUE
break
- if(istype(T, /turf/closed))
+ if(istype(T, /turf/open))
+ var/turf/open/floor = T
+ if(!floor.allow_construction)
+ to_chat(user, SPAN_WARNING("You cannot deploy \a [src] here, find a more secure surface!"))
+ return FALSE
+ else
blocked = TRUE
if(blocked)
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index 688a55d0f0f6..7aa9eabb3042 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -198,6 +198,7 @@
ACCESS_MARINE_MAINT,
ACCESS_MARINE_OT,
ACCESS_MARINE_SYNTH,
+ ACCESS_MARINE_AI,
)
assignment = JOB_CHIEF_ENGINEER
rank = JOB_CHIEF_ENGINEER
diff --git a/code/modules/mob/language/languages.dm b/code/modules/mob/language/languages.dm
index 546c2bf7714f..e5b693e02b80 100644
--- a/code/modules/mob/language/languages.dm
+++ b/code/modules/mob/language/languages.dm
@@ -147,7 +147,7 @@
/datum/language/apollo
name = LANGUAGE_APOLLO
- desc = "The Apollo Link is an AI subprocessor designed by SEEGSON, allowing for coordination of maintenance drones and Working Joes. WY denies claims the processor was stolen for ARES."
+ desc = "The APOLLO Link is an AI subprocessor designed by SEEGSON, allowing for coordination of maintenance drones and Working Joes. WY denies claims the processor was stolen for ARES."
color = "skrell"
speech_verb = "states"
ask_verb = "queries"
@@ -166,6 +166,8 @@
var/message_body = " "
GLOB.STUI.game.Add("\[[time_stamp()]]APOLLO: [key_name(speaker)] : [message]
")
GLOB.STUI.processing |= STUI_LOG_GAME_CHAT
+ log_say("[speaker.name != "Unknown" ? speaker.name : "([speaker.real_name])"] \[APOLLO\]: [message] (CKEY: [speaker.key]) (JOB: [speaker.job])")
+ log_ares_apollo(speaker.real_name, message)
for (var/mob/dead in GLOB.dead_mob_list)
if(!istype(dead,/mob/new_player) && !istype(dead,/mob/living/brain)) //No meta-evesdropping
dead.show_message("[message_start] [message_body]", SHOW_MESSAGE_VISIBLE)
diff --git a/code/modules/mob/living/carbon/xenomorph/Abilities.dm b/code/modules/mob/living/carbon/xenomorph/Abilities.dm
index dbadadf8ef23..eb5a629760ee 100644
--- a/code/modules/mob/living/carbon/xenomorph/Abilities.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Abilities.dm
@@ -55,6 +55,9 @@
var/area/AR = get_area(T)
if(isnull(AR) || !(AR.is_resin_allowed))
+ if(AR.flags_area & AREA_UNWEEDABLE)
+ to_chat(X, SPAN_XENOWARNING("This area is unsuited to host the hive!"))
+ return
to_chat(X, SPAN_XENOWARNING("It's too early to spread the hive this far."))
return
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
index 692fa31c72e7..921b61a23bc9 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
@@ -47,6 +47,9 @@
var/area/AR = get_area(T)
if(isnull(AR) || !(AR.is_resin_allowed))
+ if(AR.flags_area & AREA_UNWEEDABLE)
+ to_chat(X, SPAN_XENOWARNING("This area is unsuited to host the hive!"))
+ return
to_chat(X, SPAN_XENOWARNING("It's too early to spread the hive this far."))
return
@@ -597,6 +600,9 @@
var/area/AR = get_area(T)
if(isnull(AR) || !(AR.is_resin_allowed))
+ if(AR.flags_area & AREA_UNWEEDABLE)
+ to_chat(X, SPAN_XENOWARNING("This area is unsuited to host the hive!"))
+ return
to_chat(X, SPAN_XENOWARNING("It's too early to spread the hive this far."))
return FALSE
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm
index 944192530b0d..65ea443c133c 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm
@@ -512,6 +512,9 @@
var/area/AR = get_area(T)
if(!AR.is_resin_allowed)
+ if(AR.flags_area & AREA_UNWEEDABLE)
+ to_chat(X, SPAN_XENOWARNING("This area is unsuited to host the hive!"))
+ return
to_chat(X, SPAN_XENOWARNING("It's too early to spread the hive this far."))
return
diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm
index 182d3d965832..fe4b4cca2fb1 100644
--- a/code/modules/mob/living/carbon/xenomorph/death.dm
+++ b/code/modules/mob/living/carbon/xenomorph/death.dm
@@ -117,7 +117,9 @@
// Tell the marines where the last one is.
var/name = "[MAIN_AI_SYSTEM] Bioscan Status"
var/input = "Bioscan complete.\n\nSensors indicate one remaining unknown lifeform signature in [get_area(X)]."
- marine_announcement(input, name, 'sound/AI/bioscan.ogg')
+ var/datum/ares_link/link = GLOB.ares_link
+ link.log_ares_bioscan(name, input)
+ marine_announcement(input, name, 'sound/AI/bioscan.ogg', logging = ARES_LOG_NONE)
// Tell the xeno she is the last one.
if(X.client)
to_chat(X, SPAN_XENOANNOUNCE("Your carapace rattles with dread. You are all that remains of the hive!"))
diff --git a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm
index 4f3852a6a055..3bfb4e355416 100644
--- a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm
+++ b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm
@@ -31,6 +31,9 @@ GLOBAL_VAR_INIT(resin_lz_allowed, FALSE)
var/area/AR = get_area(T)
if(isnull(AR) || !(AR.is_resin_allowed))
+ if(AR.flags_area & AREA_UNWEEDABLE)
+ to_chat(X, SPAN_XENOWARNING("This area is unsuited to host the hive!"))
+ return
to_chat(X, SPAN_XENOWARNING("It's too early to spread the hive this far."))
return FALSE
diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm
index abd07e056be7..b625b19b172d 100644
--- a/code/modules/mob/living/silicon/decoy/decoy.dm
+++ b/code/modules/mob/living/silicon/decoy/decoy.dm
@@ -10,6 +10,8 @@
bound_width = 96
custom_slashed_sound = "alien_claw_metal"
var/obj/item/device/radio/headset/almayer/mcom/ai/ai_headset //The thing it speaks into.
+ maxHealth = 1000
+ health = 1000
/mob/living/silicon/decoy/ship_ai //For the moment, pending better pathing.
var/silent_announcement_cooldown = 0
@@ -20,6 +22,7 @@
desc = "This is the artificial intelligence system for the [MAIN_SHIP_NAME]. Like many other military-grade AI systems, this one was manufactured by Weyland-Yutani."
ai_headset = new(src)
ai_mob_list += src
+ real_name = MAIN_AI_SYSTEM
/mob/living/silicon/decoy/ship_ai/Destroy()
QDEL_NULL(ai_headset)
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index d8f61c11a3e6..be087444c99e 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -16,32 +16,32 @@
switch(level)
if(SEC_LEVEL_GREEN)
if(announce)
- ai_announcement("Attention: Security level lowered to GREEN - all clear.", no_sound ? null : 'sound/AI/code_green.ogg')
+ ai_announcement("Attention: Security level lowered to GREEN - all clear.", no_sound ? null : 'sound/AI/code_green.ogg', ARES_LOG_SECURITY)
security_level = SEC_LEVEL_GREEN
if(SEC_LEVEL_BLUE)
if(security_level < SEC_LEVEL_BLUE)
if(announce)
- ai_announcement("Attention: Security level elevated to BLUE - potentially hostile activity on board.", no_sound ? null : 'sound/AI/code_blue_elevated.ogg')
+ ai_announcement("Attention: Security level elevated to BLUE - potentially hostile activity on board.", no_sound ? null : 'sound/AI/code_blue_elevated.ogg', ARES_LOG_SECURITY)
else
if(announce)
- ai_announcement("Attention: Security level lowered to BLUE - potentially hostile activity on board.", no_sound ? null : 'sound/AI/code_blue_lowered.ogg')
+ ai_announcement("Attention: Security level lowered to BLUE - potentially hostile activity on board.", no_sound ? null : 'sound/AI/code_blue_lowered.ogg', ARES_LOG_SECURITY)
security_level = SEC_LEVEL_BLUE
if(SEC_LEVEL_RED)
if(security_level < SEC_LEVEL_RED)
if(announce)
- ai_announcement("Attention: Security level elevated to RED - there is an immediate threat to the ship.", no_sound ? null : 'sound/AI/code_red_elevated.ogg')
+ ai_announcement("Attention: Security level elevated to RED - there is an immediate threat to the ship.", no_sound ? null : 'sound/AI/code_red_elevated.ogg', ARES_LOG_SECURITY)
else
if(announce)
- ai_announcement("Attention: Security level lowered to RED - there is an immediate threat to the ship.", no_sound ? null : 'sound/AI/code_red_lowered.ogg')
+ ai_announcement("Attention: Security level lowered to RED - there is an immediate threat to the ship.", no_sound ? null : 'sound/AI/code_red_lowered.ogg', ARES_LOG_SECURITY)
security_level = SEC_LEVEL_RED
if(SEC_LEVEL_DELTA)
if(announce)
var/name = "SELF-DESTRUCT SYSTEMS ACTIVE"
var/input = "DANGER, THE EMERGENCY DESTRUCT SYSTEM IS NOW ACTIVATED. PROCEED TO THE SELF-DESTRUCT CHAMBER FOR CONTROL ROD INSERTION."
- marine_announcement(input, name, 'sound/AI/selfdestruct_short.ogg')
+ marine_announcement(input, name, 'sound/AI/selfdestruct_short.ogg', logging = ARES_LOG_SECURITY)
security_level = SEC_LEVEL_DELTA
EvacuationAuthority.enable_self_destruct()
diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm
index 19d9abfd81b4..ea4a7fdbc79d 100644
--- a/code/modules/shuttle/computers/dropship_computer.dm
+++ b/code/modules/shuttle/computers/dropship_computer.dm
@@ -267,7 +267,7 @@
hijack.fire()
GLOB.alt_ctrl_disabled = TRUE
- marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg')
+ marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg', logging = ARES_LOG_SECURITY)
var/mob/living/carbon/xenomorph/xeno = user
var/hivenumber = XENO_HIVE_NORMAL
diff --git a/code/modules/shuttle/dropship_hijack.dm b/code/modules/shuttle/dropship_hijack.dm
index 35009ad42485..ce151c14324c 100644
--- a/code/modules/shuttle/dropship_hijack.dm
+++ b/code/modules/shuttle/dropship_hijack.dm
@@ -123,7 +123,7 @@
if(!offset_target)
offset_target = target // Welp the offsetting failed so...
crash_site.forceMove(offset_target)
- marine_announcement("A hostile aircraft on course for the [target_ship_section] has been successfully deterred.", "IX-50 MGAD System")
+ marine_announcement("A hostile aircraft on course for the [target_ship_section] has been successfully deterred.", "IX-50 MGAD System", logging = ARES_LOG_SECURITY)
target_ship_section = new_target_ship_section
// TODO mobs not alerted
for(var/area/internal_area in shuttle.shuttle_areas)
@@ -149,7 +149,7 @@
shuttle.crashing = TRUE
- marine_announcement("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT." , "EMERGENCY", 'sound/AI/dropship_emergency.ogg')
+ marine_announcement("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT." , "EMERGENCY", 'sound/AI/dropship_emergency.ogg', logging = ARES_LOG_SECURITY)
announce_dchat("The dropship is about to impact [get_area_name(crash_site)]", crash_site)
final_announcement = TRUE
@@ -202,7 +202,6 @@
turfs += get_area_turfs(/area/almayer/medical/hydroponics)
if("Upper deck Aftship")
turfs += get_area_turfs(/area/almayer/engineering/upper_engineering)
- turfs += get_area_turfs(/area/almayer/command/computerlab)
turfs += get_area_turfs(/area/almayer/engineering/laundry)
if("Lower deck Foreship")
turfs += get_area_turfs(/area/almayer/hallways/hangar)
diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm
index 48a6c176293e..17caccde207e 100644
--- a/code/modules/shuttles/marine_ferry.dm
+++ b/code/modules/shuttles/marine_ferry.dm
@@ -414,7 +414,7 @@
// At halftime, we announce whether or not the AA forced the dropship to divert
// The rounding is because transit time is decreased by 10 each loop. Travel time, however, might not be a multiple of 10
if(in_transit_time_left == round(travel_time / 2, 10) && true_crash_target_section != crash_target_section)
- marine_announcement("A hostile aircraft on course for the [true_crash_target_section] has been successfully deterred.", "IX-50 MGAD System")
+ marine_announcement("A hostile aircraft on course for the [true_crash_target_section] has been successfully deterred.", "IX-50 MGAD System", logging = ARES_LOG_SECURITY)
var/area/shuttle_area
for(var/turf/T in turfs_int)
@@ -438,7 +438,7 @@
//This is where things change and shit gets real
- marine_announcement("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT." , "EMERGENCY", 'sound/AI/dropship_emergency.ogg')
+ marine_announcement("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT." , "EMERGENCY", 'sound/AI/dropship_emergency.ogg', logging = ARES_LOG_SECURITY)
for(var/mob/dead/observer/observer as anything in GLOB.observer_list)
to_chat(observer, SPAN_DEADSAY(FONT_SIZE_LARGE("The dropship is about to impact [get_area_name(T_trg)]" + " [OBSERVER_JMP(observer, T_trg)]")))
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index e765851c3b29..ecf1bacf080b 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -291,7 +291,7 @@ GLOBAL_LIST_EMPTY(shuttle_controls)
if(round_statistics)
round_statistics.track_hijack()
- marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg')
+ marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg', logging = ARES_LOG_SECURITY)
shuttle.alerts_allowed--
to_chat(Q, SPAN_DANGER("A loud alarm erupts from [src]! The fleshy hosts must know that you can access it!"))
diff --git a/colonialmarines.dme b/colonialmarines.dme
index 991c23d53bbe..ebd73b3544dd 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -31,6 +31,7 @@
#include "code\__DEFINES\_tick.dm"
#include "code\__DEFINES\access.dm"
#include "code\__DEFINES\admin.dm"
+#include "code\__DEFINES\ARES.dm"
#include "code\__DEFINES\atmospherics.dm"
#include "code\__DEFINES\autolathe.dm"
#include "code\__DEFINES\blood.dm"
@@ -774,6 +775,10 @@
#include "code\game\machinery\teleporter.dm"
#include "code\game\machinery\washing_machine.dm"
#include "code\game\machinery\weather_siren.dm"
+#include "code\game\machinery\ARES\ARES.dm"
+#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\atmoalter\canister.dm"
#include "code\game\machinery\atmoalter\meter.dm"
#include "code\game\machinery\atmoalter\portable_atmospherics.dm"
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 08a5c5fa8ef1..b62860559b16 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/icons/obj/structures/machinery/ares.dmi b/icons/obj/structures/machinery/ares.dmi
new file mode 100644
index 000000000000..77dd304310f6
Binary files /dev/null and b/icons/obj/structures/machinery/ares.dmi differ
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index 7043cc4cccee..63562239f4dc 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -835,6 +835,20 @@
},
/turf/open/floor/wood/ship,
/area/almayer/living/basketball)
+"acJ" = (
+/mob/living/silicon/decoy/ship_ai{
+ pixel_y = -16;
+ layer = 2.98
+ },
+/obj/structure/blocker/invisible_wall,
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"acK" = (
/obj/structure/desertdam/decals/road_edge{
pixel_x = 2
@@ -2448,18 +2462,24 @@
/obj/item/paper_bin/uscm,
/obj/item/tool/pen,
/obj/structure/machinery/door_control{
- id = "bot_uniforms";
- name = "Uniform Vendor Lockdown";
- pixel_x = -8;
- pixel_y = 10;
- req_access_txt = "1"
+ id = "ARES StairsLock";
+ name = "ARES Exterior Lockdown Override";
+ req_one_access_txt = "90;91;92";
+ pixel_y = -24;
+ pixel_x = 8
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Emergency";
+ name = "ARES Emergency Lockdown Override";
+ req_one_access_txt = "91;92";
+ pixel_y = -24
},
/obj/structure/machinery/door_control{
id = "Brig Lockdown Shutters";
- name = "Brig Lockdown";
- pixel_x = 10;
- pixel_y = 10;
- req_access_txt = "1;3"
+ name = "Brig Lockdown Override";
+ req_access_txt = "1;3";
+ pixel_x = -8;
+ pixel_y = -24
},
/turf/open/floor/wood/ship,
/area/almayer/living/commandbunks)
@@ -3308,6 +3328,13 @@
/obj/structure/machinery/light{
dir = 1
},
+/obj/structure/machinery/door_control{
+ id = "bot_uniforms";
+ name = "Uniform Vendor Lockdown";
+ pixel_x = 8;
+ pixel_y = 24;
+ req_access_txt = "31"
+ },
/turf/open/floor/almayer{
dir = 1;
icon_state = "silver"
@@ -5249,7 +5276,7 @@
},
/area/almayer/engineering/engineering_workshop/hangar)
"aqU" = (
-/turf/closed/wall/almayer,
+/turf/closed/wall/almayer/reinforced,
/area/almayer/command/airoom)
"aqV" = (
/obj/structure/machinery/light{
@@ -5785,17 +5812,15 @@
},
/area/almayer/engineering/engineering_workshop/hangar)
"asD" = (
-/obj/structure/machinery/light{
- dir = 1
- },
+/obj/effect/step_trigger/clone_cleaner,
/obj/structure/machinery/door_control{
- id = "areslockdownexterior";
- name = "ARES Lockdown";
- pixel_x = -25;
- req_one_access_txt = "19"
+ id = "ARES StairsUpper";
+ name = "ARES Core Access";
+ req_one_access_txt = "1;200;90;91;92";
+ pixel_y = 24;
+ pixel_x = -24
},
-/obj/effect/landmark/start/working_joe,
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -5803,20 +5828,23 @@
/turf/closed/wall/almayer/reinforced,
/area/almayer/engineering/engineering_workshop/hangar)
"asF" = (
-/obj/structure/machinery/door_control{
- id = "areslockdowninterior";
- name = "ARES Lockdown";
- pixel_x = -25;
- req_one_access_txt = "19"
+/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
+ name = "\improper AI Reception";
+ req_access = null;
+ req_one_access_txt = "91;92"
},
-/mob/living/silicon/decoy/ship_ai,
-/obj/structure/blocker/invisible_wall,
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"asG" = (
-/turf/open/floor/almayer{
+/obj/structure/surface/table/reinforced/almayer_B{
+ climbable = 0;
+ unacidable = 1;
+ unslashable = 1;
+ indestructible = 1
+ },
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -5960,6 +5988,15 @@
},
/turf/open/floor/almayer,
/area/almayer/lifeboat_pumps/north2)
+"asZ" = (
+/obj/structure/machinery/computer/cameras/almayer/ares{
+ dir = 4;
+ pixel_x = -17
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"ata" = (
/obj/structure/machinery/light{
dir = 8
@@ -6366,12 +6403,14 @@
},
/area/almayer/lifeboat_pumps/south1)
"auc" = (
-/obj/structure/machinery/door/poddoor/shutters/almayer{
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/door/poddoor/almayer/open{
dir = 4;
- id = "areslockdownexterior";
- name = "\improper ARES Core Shutters"
+ id = "ARES StairsLock";
+ name = "ARES Exterior Lockdown"
},
-/turf/open/floor/almayer{
+/obj/effect/step_trigger/ares_alert/access_control,
+/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
/area/almayer/command/airoom)
@@ -6394,20 +6433,14 @@
},
/area/almayer/hallways/port_hallway)
"auf" = (
-/obj/structure/machinery/door/poddoor/shutters/almayer{
- dir = 4;
- id = "areslockdowninterior";
- name = "\improper ARES Core Shutters"
- },
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/closed/wall/almayer/white/hull,
/area/almayer/command/airoom)
"aug" = (
/obj/structure/bed/chair/office/dark{
- dir = 1
+ dir = 8
},
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -7043,29 +7076,64 @@
},
/area/almayer/living/starboard_garden)
"avK" = (
-/obj/structure/machinery/camera/autoname/almayer{
- dir = 4;
- name = "ship-grade camera"
- },
-/obj/effect/landmark/start/working_joe,
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"avL" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/computer/station_alert{
- dir = 1
+/obj/structure/machinery/door_control{
+ id = "ARES StairsUpper";
+ name = "ARES Core Access";
+ req_one_access_txt = "91;92";
+ pixel_y = -24;
+ pixel_x = -10
},
-/turf/open/floor/almayer{
+/obj/structure/machinery/door_control{
+ id = "ARES StairsLock";
+ name = "ARES Exterior Lockdown";
+ req_one_access_txt = "91;92";
+ pixel_y = -24
+ },
+/obj/structure/surface/table/reinforced/almayer_B{
+ climbable = 0;
+ unacidable = 1;
+ unslashable = 1;
+ indestructible = 1
+ },
+/obj/structure/transmitter/rotary{
+ phone_color = "blue";
+ phone_id = "AI Reception";
+ phone_category = "ARES";
+ name = "AI Reception Telephone"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Emergency";
+ name = "ARES Emergency Lockdown";
+ req_one_access_txt = "91;92";
+ pixel_y = -24;
+ pixel_x = 10
+ },
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"avM" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/item/paper_bin/uscm,
+/obj/structure/machinery/computer/cameras/almayer/ares{
+ dir = 8;
+ pixel_x = 17;
+ pixel_y = 6
+ },
+/obj/structure/surface/table/reinforced/almayer_B{
+ climbable = 0;
+ unacidable = 1;
+ unslashable = 1;
+ indestructible = 1
+ },
+/obj/item/paper_bin/uscm{
+ pixel_y = 6
+ },
/obj/item/tool/pen,
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -7273,21 +7341,18 @@
},
/area/almayer/command/cic)
"awu" = (
-/obj/structure/machinery/door_control{
- id = "areslockdownexterior";
- name = "ARES Lockdown";
- pixel_x = 25;
- req_one_access_txt = "19"
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
},
/obj/effect/decal/warning_stripes{
- icon_state = "E";
- pixel_x = 1
+ icon_state = "W";
+ pixel_x = -1
},
-/turf/open/floor/almayer{
- dir = 8;
- icon_state = "cargo_arrow"
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
-/area/almayer/hallways/aft_hallway)
+/area/almayer/command/airoom)
"awv" = (
/obj/structure/machinery/computer/telecomms/monitor,
/turf/open/floor/almayer{
@@ -7796,6 +7861,10 @@
/obj/item/storage/belt/medical/full,
/obj/item/storage/belt/medical/full,
/obj/item/storage/belt/medical/full,
+/obj/structure/machinery/computer/working_joe{
+ dir = 8;
+ pixel_x = 17
+ },
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -9088,6 +9157,14 @@
icon_state = "plate"
},
/area/almayer/command/cic)
+"aCd" = (
+/obj/structure/bed/chair/office/dark{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"aCf" = (
/obj/structure/window/framed/almayer/hull/hijack_bustable,
/obj/structure/machinery/door/firedoor/border_only/almayer,
@@ -10904,6 +10981,47 @@
},
/turf/open/floor/almayer,
/area/almayer/command/cichallway)
+"aKs" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "W";
+ pixel_x = -1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Interior";
+ name = "ARES Chamber Lockdown";
+ req_one_access_txt = "1;200;90;91;92";
+ pixel_x = 24;
+ pixel_y = -8;
+ indestructible = 1
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Railing";
+ name = "ARES Chamber Railings";
+ req_one_access_txt = "91;92";
+ pixel_x = 24;
+ needs_power = 0;
+ indestructible = 1
+ },
+/obj/structure/machinery/door/poddoor/railing{
+ dir = 2;
+ id = "ARES Railing";
+ unslashable = 0;
+ unacidable = 0;
+ pixel_y = -1;
+ pixel_x = -1;
+ open_layer = 2.1;
+ closed_layer = 4.1;
+ density = 0;
+ layer = 2.1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"aKu" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -13339,6 +13457,10 @@
},
/area/almayer/hallways/stern_hallway)
"aWb" = (
+/obj/structure/machinery/computer/working_joe{
+ dir = 4;
+ pixel_x = -17
+ },
/turf/open/floor/almayer{
dir = 1;
icon_state = "orangecorner"
@@ -14164,6 +14286,18 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/starboard_hallway)
+"bat" = (
+/obj/structure/machinery/door_control{
+ id = "ARES Mainframe Right";
+ name = "ARES Mainframe Lockdown";
+ req_one_access_txt = "200;91;92";
+ pixel_x = -24;
+ pixel_y = -24
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"baw" = (
/turf/open/floor/almayer,
/area/almayer/lifeboat_pumps/south1)
@@ -20929,6 +21063,26 @@
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/white/open{
+ open_layer = 1.9;
+ id = "ARES Emergency";
+ needs_power = 0;
+ name = "ARES Emergency Lockdown";
+ layer = 3.2;
+ closed_layer = 3.2;
+ plane = -7
+ },
+/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{
@@ -21710,6 +21864,23 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/vehiclehangar)
+"bLv" = (
+/obj/structure/machinery/door_control{
+ id = "ARES StairsLower";
+ name = "ARES Core Lockdown";
+ req_one_access_txt = "19;200;90;91;92";
+ pixel_x = 24;
+ pixel_y = -8
+ },
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 8;
+ pixel_y = 2
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"bLw" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/light{
@@ -23087,6 +23258,35 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/lobby)
+"bRo" = (
+/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_message = "Caution: Movement detected in ARES Core.";
+ cooldown_duration = 1200;
+ alert_id = "AresStairs"
+ },
+/obj/effect/step_trigger/ares_alert/public{
+ alert_message = "Caution: Movement detected in ARES Core.";
+ cooldown_duration = 1200;
+ alert_id = "AresStairs"
+ },
+/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
+ open_layer = 1.9;
+ id = "ARES Emergency";
+ needs_power = 0;
+ name = "ARES Emergency Lockdown";
+ layer = 3.2;
+ closed_layer = 3.2;
+ plane = -7
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"bRr" = (
/obj/structure/machinery/fuelcell_recycler,
/turf/open/floor/almayer{
@@ -23782,6 +23982,13 @@
icon_state = "blue"
},
/area/almayer/squads/delta)
+"bUx" = (
+/obj/effect/landmark/start/working_joe,
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"bUy" = (
/obj/structure/closet/crate/ammo,
/obj/structure/machinery/light/small,
@@ -25542,11 +25749,18 @@
},
/area/almayer/command/cichallway)
"cck" = (
-/obj/structure/window/framed/almayer/hull/hijack_bustable,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
-/turf/open/floor/plating,
/area/almayer/command/airoom)
"ccq" = (
/obj/effect/decal/warning_stripes{
@@ -27187,6 +27401,17 @@
"cls" = (
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/port_point_defense)
+"clw" = (
+/obj/structure/machinery/light{
+ dir = 8;
+ unacidable = 1;
+ unslashable = 1;
+ invisibility = 101
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"cly" = (
/obj/structure/disposalpipe/segment,
/obj/structure/sign/safety/maint{
@@ -27578,12 +27803,10 @@
},
/area/almayer/hallways/starboard_hallway)
"cnp" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/item/folder/yellow,
/obj/structure/machinery/light{
dir = 4
},
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -27923,6 +28146,19 @@
icon_state = "green"
},
/area/almayer/hallways/starboard_hallway)
+"cqm" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/item/folder/white{
+ pixel_y = 6
+ },
+/obj/item/folder/white{
+ pixel_y = 6;
+ pixel_x = 5
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"cqn" = (
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/firedoor/border_only/almayer{
@@ -28212,6 +28448,12 @@
icon_state = "blue"
},
/area/almayer/hallways/aft_hallway)
+"cwS" = (
+/obj/structure/blocker/invisible_wall,
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"cwX" = (
/obj/structure/ladder{
height = 1;
@@ -28219,6 +28461,18 @@
},
/turf/open/floor/plating/almayer,
/area/almayer/living/briefing)
+"cxc" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"cxe" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -28376,6 +28630,24 @@
icon_state = "plate"
},
/area/almayer/hallways/vehiclehangar)
+"cBm" = (
+/obj/effect/projector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"cBs" = (
/obj/structure/bed/chair,
/obj/effect/decal/warning_stripes{
@@ -28826,6 +29098,16 @@
/obj/item/tool/lighter/zippo,
/turf/open/floor/wood/ship,
/area/almayer/shipboard/sea_office)
+"cLo" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/turf/open/floor/almayer/no_build{
+ dir = 2;
+ icon_state = "cargo_arrow"
+ },
+/area/almayer/command/airoom)
"cLp" = (
/obj/structure/machinery/door/firedoor/border_only/almayer{
dir = 2
@@ -29462,6 +29744,9 @@
icon_state = "mono"
},
/area/almayer/lifeboat_pumps/south1)
+"daz" = (
+/turf/closed/wall/almayer/white/hull,
+/area/almayer/command/airoom)
"dbe" = (
/obj/structure/largecrate/random/case/double,
/obj/structure/machinery/camera/autoname/almayer{
@@ -30601,6 +30886,12 @@
icon_state = "plate"
},
/area/almayer/living/briefing)
+"dyp" = (
+/obj/structure/machinery/ares/cpu,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"dyx" = (
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 2;
@@ -30816,6 +31107,15 @@
icon_state = "orange"
},
/area/almayer/engineering/engine_core)
+"dDp" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "W";
+ layer = 3.3
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"dDt" = (
/obj/structure/toilet{
dir = 1
@@ -30954,6 +31254,23 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_p)
+"dGl" = (
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/platform{
+ dir = 8
+ },
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"dGr" = (
/obj/structure/pipes/vents/scrubber{
dir = 8
@@ -31092,6 +31409,12 @@
},
/turf/open/floor/plating,
/area/almayer/living/bridgebunks)
+"dIi" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/open/floor/plating/plating_catwalk{
+ allow_construction = 0
+ },
+/area/almayer/command/airoom)
"dIl" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply{
@@ -31099,6 +31422,14 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/upper_hull/u_f_s)
+"dIn" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 5
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"dII" = (
/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/shared/alpha_bravo,
/obj/effect/decal/warning_stripes{
@@ -31275,6 +31606,23 @@
icon_state = "plate"
},
/area/almayer/hull/upper_hull/u_f_s)
+"dQl" = (
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"dQv" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -31737,6 +32085,9 @@
icon_state = "orange"
},
/area/almayer/engineering/engine_core)
+"ebN" = (
+/turf/closed/wall/almayer/white/reinforced,
+/area/almayer/command/airoom)
"ebO" = (
/obj/structure/machinery/light/small,
/turf/open/floor/almayer{
@@ -32669,6 +33020,17 @@
/obj/effect/landmark/late_join/delta,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/delta)
+"erN" = (
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/obj/structure/pipes/vents/pump/no_boom{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"erS" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/plating/plating_catwalk,
@@ -32798,6 +33160,21 @@
icon_state = "sterile_green_corner"
},
/area/almayer/medical/testlab)
+"euN" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SE-out"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Mainframe Left";
+ name = "ARES Mainframe Lockdown";
+ req_one_access_txt = "200;91;92";
+ pixel_x = 24;
+ pixel_y = 24
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"euO" = (
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/poddoor/shutters/almayer/open{
@@ -33483,6 +33860,20 @@
icon_state = "test_floor5"
},
/area/almayer/squads/req)
+"eKJ" = (
+/obj/structure/machinery/status_display{
+ pixel_y = 30
+ },
+/obj/structure/machinery/light{
+ dir = 4;
+ unacidable = 1;
+ unslashable = 1;
+ invisibility = 101
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"eKK" = (
/obj/structure/sink{
dir = 4;
@@ -34042,6 +34433,14 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/living/port_emb)
+"eYz" = (
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"eYC" = (
/obj/structure/machinery/vending/cigarette,
/turf/open/floor/wood/ship,
@@ -34289,6 +34688,19 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering/starboard)
+"fcX" = (
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/obj/structure/platform_decoration{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"fdj" = (
/obj/structure/surface/table/almayer,
/obj/item/storage/pouch/tools/full,
@@ -34383,6 +34795,11 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/operating_room_two)
+"ffE" = (
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"fgh" = (
/obj/structure/machinery/light/small{
dir = 8
@@ -34585,6 +35002,19 @@
icon_state = "plate"
},
/area/almayer/squads/req)
+"fmv" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"fmB" = (
/obj/structure/bed/chair/comfy{
dir = 8
@@ -34800,6 +35230,19 @@
},
/turf/open/floor/plating/almayer,
/area/almayer/shipboard/brig/armory)
+"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/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"fsd" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -35343,6 +35786,14 @@
icon_state = "test_floor4"
},
/area/almayer/living/grunt_rnr)
+"fEN" = (
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"fER" = (
/obj/structure/machinery/autolathe,
/turf/open/floor/almayer{
@@ -35634,6 +36085,23 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_f_s)
+"fJY" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ dir = 8;
+ icon_state = "cargo_arrow"
+ },
+/area/almayer/command/airoom)
+"fKe" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SW-out"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"fKg" = (
/obj/structure/closet/firecloset,
/turf/open/floor/plating/plating_catwalk,
@@ -35723,6 +36191,47 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/lower_engineering)
+"fMl" = (
+/obj/structure/machinery/door_control{
+ id = "ARES Operations Right";
+ name = "ARES Operations Shutter";
+ req_one_access_txt = "1;200;91;92";
+ pixel_x = 24;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
+"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/machinery/door/poddoor/almayer/blended/white/open{
+ open_layer = 1.9;
+ id = "ARES Emergency";
+ needs_power = 0;
+ name = "ARES Emergency Lockdown";
+ layer = 3.2;
+ closed_layer = 3.2;
+ plane = -7
+ },
+/obj/structure/sign/safety/laser{
+ pixel_x = 32;
+ pixel_y = -8
+ },
+/obj/structure/sign/safety/rewire{
+ pixel_y = 6;
+ pixel_x = 32
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"fMA" = (
/obj/effect/decal/warning_stripes{
icon_state = "NW-out"
@@ -35859,6 +36368,12 @@
icon_state = "plate"
},
/area/almayer/hallways/hangar)
+"fPB" = (
+/obj/structure/machinery/ares/processor/apollo,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"fQk" = (
/obj/structure/largecrate/random,
/turf/open/floor/plating/plating_catwalk,
@@ -36227,6 +36742,50 @@
icon_state = "silver"
},
/area/almayer/command/cichallway)
+"gba" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/faxmachine/uscm/command{
+ department = "AI Core";
+ pixel_y = 8
+ },
+/obj/structure/transmitter/rotary{
+ pixel_x = 8;
+ pixel_y = -8;
+ phone_color = "blue";
+ phone_id = "AI Core";
+ phone_category = "ARES";
+ name = "AI Core Telephone"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
+"gbg" = (
+/obj/structure/sign/safety/terminal{
+ pixel_y = 24;
+ pixel_x = 14
+ },
+/obj/structure/sign/safety/laser{
+ pixel_y = 24
+ },
+/obj/structure/sign/safety/fibre_optics{
+ pixel_x = 14;
+ pixel_y = 38
+ },
+/obj/structure/sign/safety/rewire{
+ pixel_y = 38
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Operations Right";
+ name = "ARES Operations Shutter";
+ req_one_access_txt = "1;200;91;92";
+ pixel_x = -24;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"gbQ" = (
/obj/structure/toilet{
dir = 8
@@ -36432,14 +36991,23 @@
},
/turf/open/floor/almayer,
/area/almayer/squads/delta)
-"gfE" = (
-/obj/structure/machinery/light{
- dir = 4
+"gfu" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
},
-/turf/open/floor/almayer{
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/turf/open/floor/almayer/no_build{
icon_state = "tcomms"
},
/area/almayer/command/airoom)
+"gfE" = (
+/obj/structure/machinery/recharge_station,
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"gfS" = (
/obj/structure/sign/safety/cryo{
pixel_y = -26
@@ -36598,8 +37166,25 @@
},
/area/almayer/hull/lower_hull/l_f_s)
"gjw" = (
-/obj/structure/blocker/invisible_wall,
-/turf/open/floor/almayer{
+/obj/structure/machinery/faxmachine/uscm/command{
+ department = "AI Core";
+ pixel_y = 32;
+ density = 0
+ },
+/obj/structure/surface/rack{
+ pixel_y = 16;
+ density = 0
+ },
+/obj/structure/machinery/computer/working_joe{
+ dir = 8;
+ pixel_x = 17;
+ pixel_y = -6;
+ ticket_console = 1
+ },
+/obj/item/storage/box/ids{
+ pixel_x = -4
+ },
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -37051,6 +37636,12 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_p)
+"gwn" = (
+/obj/structure/machinery/ares/processor/bioscan,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"gwo" = (
/turf/open/floor/almayer{
dir = 4;
@@ -37237,6 +37828,16 @@
icon_state = "orange"
},
/area/almayer/hallways/starboard_hallway)
+"gyN" = (
+/obj/structure/machinery/prop{
+ icon_state = "comm_server";
+ name = "server box";
+ desc = "It's a server box..."
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"gyO" = (
/obj/structure/pipes/vents/pump{
dir = 8
@@ -37322,6 +37923,24 @@
},
/turf/open/floor/almayer,
/area/almayer/hull/upper_hull/u_f_p)
+"gAe" = (
+/obj/structure/filingcabinet{
+ density = 0;
+ pixel_x = -8;
+ pixel_y = 18
+ },
+/obj/structure/filingcabinet{
+ density = 0;
+ pixel_x = 8;
+ pixel_y = 18
+ },
+/obj/item/folder/white,
+/obj/item/folder/white,
+/obj/item/folder/white,
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"gAj" = (
/obj/structure/bed/chair/comfy/charlie{
dir = 1
@@ -37845,6 +38464,39 @@
icon_state = "test_floor4"
},
/area/almayer/hull/upper_hull/u_m_p)
+"gMN" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Interior";
+ name = "ARES Chamber Lockdown";
+ req_one_access_txt = "1;200;90;91;92";
+ pixel_x = -24;
+ pixel_y = -8;
+ indestructible = 1
+ },
+/obj/structure/machinery/door/poddoor/railing{
+ dir = 2;
+ id = "ARES Railing";
+ unslashable = 0;
+ unacidable = 0;
+ pixel_y = -1;
+ pixel_x = -1;
+ open_layer = 2.1;
+ density = 0;
+ closed_layer = 4.1;
+ layer = 2.1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"gMU" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -37879,6 +38531,33 @@
/obj/effect/spawner/random/tool,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_m_p)
+"gOs" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Interior";
+ name = "ARES Chamber Lockdown";
+ req_one_access_txt = "1;200;90;91;92";
+ pixel_x = 24;
+ pixel_y = 8;
+ indestructible = 1
+ },
+/obj/structure/machinery/door/poddoor/railing{
+ id = "ARES Railing";
+ unslashable = 0;
+ unacidable = 0;
+ open_layer = 2.1;
+ density = 0;
+ layer = 2.1;
+ closed_layer = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"gPc" = (
/obj/structure/machinery/power/terminal{
dir = 1
@@ -37888,6 +38567,23 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering/starboard)
+"gPr" = (
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/machinery/light{
+ unacidable = 1;
+ unslashable = 1
+ },
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ dir = 4
+ },
+/area/almayer/command/airoom)
"gPF" = (
/obj/structure/machinery/light,
/turf/open/floor/almayer{
@@ -38014,6 +38710,23 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/main_office)
+"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/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"gUf" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
/turf/open/floor/almayer{
@@ -38061,6 +38774,15 @@
},
/turf/open/floor/almayer,
/area/almayer/living/bridgebunks)
+"gUN" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ dir = 4;
+ icon_state = "cargo_arrow"
+ },
+/area/almayer/command/airoom)
"gUV" = (
/turf/open/floor/almayer{
icon_state = "redcorner"
@@ -38133,6 +38855,20 @@
icon_state = "plate"
},
/area/almayer/engineering/engineering_workshop)
+"gXs" = (
+/obj/effect/step_trigger/ares_alert/terminals,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES Operations Right";
+ name = "\improper ARES Operations Shutters";
+ dir = 4
+ },
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"gXv" = (
/obj/structure/sign/safety/nonpress_0g{
pixel_x = 32
@@ -39107,18 +39843,9 @@
/turf/open/floor/almayer,
/area/almayer/command/cic)
"hvw" = (
-/obj/structure/machinery/r_n_d/server/core{
- unacidable = 1;
- unslashable = 1
- },
-/obj/structure/sign/safety/rewire{
- pixel_x = 8;
- pixel_y = 32
- },
-/turf/open/floor/almayer{
- icon_state = "tcomms"
- },
-/area/almayer/command/airoom)
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/open/floor/plating,
+/area/almayer/powered/agent)
"hvH" = (
/turf/open/floor/wood/ship,
/area/almayer/living/commandbunks)
@@ -39254,6 +39981,17 @@
allow_construction = 0
},
/area/almayer/shipboard/brig/processing)
+"hyE" = (
+/obj/structure/machinery/door/poddoor/almayer/open{
+ dir = 4;
+ id = "ARES StairsLock";
+ name = "ARES Exterior Lockdown"
+ },
+/obj/effect/step_trigger/ares_alert/access_control,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"hyQ" = (
/turf/closed/wall/almayer,
/area/almayer/living/synthcloset)
@@ -40040,6 +40778,33 @@
icon_state = "redcorner"
},
/area/almayer/shipboard/brig/execution)
+"hRW" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/structure/sign/safety/rewire{
+ pixel_y = 38
+ },
+/obj/structure/sign/safety/laser{
+ pixel_y = 24
+ },
+/obj/structure/machinery/computer/crew/alt{
+ pixel_x = -17;
+ dir = 4
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_y = 24;
+ pixel_x = 14
+ },
+/obj/structure/sign/safety/fibre_optics{
+ pixel_x = 14;
+ pixel_y = 38
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"hSk" = (
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/upper_engineering/port)
@@ -40101,6 +40866,18 @@
},
/turf/closed/wall/almayer/outer,
/area/almayer/hull/lower_hull/l_a_p)
+"hTl" = (
+/obj/structure/prop/server_equipment/yutani_server{
+ pixel_y = 16;
+ name = "server tower";
+ desc = "A powerful server tower housing various AI functions.";
+ density = 0
+ },
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"hTt" = (
/obj/structure/machinery/brig_cell/cell_1{
pixel_x = 32;
@@ -40344,6 +41121,15 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/hangar)
+"hZj" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"hZN" = (
/obj/structure/machinery/medical_pod/bodyscanner,
/obj/structure/disposalpipe/segment{
@@ -40564,6 +41350,20 @@
icon_state = "sterile_green_corner"
},
/area/almayer/medical/lower_medical_lobby)
+"ieF" = (
+/obj/effect/projector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/no_build{
+ dir = 4
+ },
+/area/almayer/command/airoom)
"ieH" = (
/obj/structure/sign/safety/storage{
pixel_x = 8;
@@ -40619,6 +41419,14 @@
},
/turf/open/floor/wood/ship,
/area/almayer/command/corporateliason)
+"igr" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SE-out"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"igt" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -41087,8 +41895,17 @@
/turf/open/floor/plating,
/area/almayer/living/port_emb)
"isC" = (
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/effect/projector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"isH" = (
@@ -41134,6 +41951,33 @@
icon_state = "bluecorner"
},
/area/almayer/hallways/aft_hallway)
+"itf" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Interior";
+ name = "ARES Chamber Lockdown";
+ req_one_access_txt = "1;200;90;91;92";
+ pixel_x = -24;
+ pixel_y = 8;
+ indestructible = 1
+ },
+/obj/structure/machinery/door/poddoor/railing{
+ id = "ARES Railing";
+ unslashable = 0;
+ unacidable = 0;
+ open_layer = 2.1;
+ density = 0;
+ layer = 2.1;
+ closed_layer = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"itR" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 1
@@ -41363,6 +42207,18 @@
icon_state = "test_floor4"
},
/area/almayer/shipboard/brig/main_office)
+"iyH" = (
+/obj/structure/surface/table/reinforced/almayer_B{
+ climbable = 0;
+ unacidable = 1;
+ unslashable = 1;
+ indestructible = 1;
+ desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs. This one has a metal rail running above it, preventing something large passing over. Like you."
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"iyQ" = (
/turf/open/floor/almayer{
dir = 5;
@@ -42419,6 +43275,23 @@
icon_state = "red"
},
/area/almayer/command/lifeboat)
+"iZw" = (
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"iZG" = (
/obj/structure/window/framed/almayer/hull,
/obj/structure/machinery/door/firedoor/border_only/almayer,
@@ -42484,6 +43357,16 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/upper_hull/u_a_p)
+"jaH" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/item/paper_bin/uscm{
+ pixel_y = 6
+ },
+/obj/item/tool/pen,
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"jaP" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/cameras/almayer_network{
@@ -43261,6 +44144,26 @@
allow_construction = 0
},
/area/almayer/shipboard/brig/lobby)
+"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/white/open{
+ open_layer = 1.9;
+ id = "ARES Emergency";
+ needs_power = 0;
+ name = "ARES Emergency Lockdown";
+ layer = 3.2;
+ closed_layer = 3.2;
+ plane = -7
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"jre" = (
/obj/structure/closet/secure_closet/cargotech,
/obj/item/clothing/accessory/storage/webbing,
@@ -43296,6 +44199,14 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/hydroponics)
+"jtj" = (
+/obj/structure/machinery/status_display{
+ pixel_y = 30
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"jtJ" = (
/obj/structure/machinery/door_control{
id = "laddernorthwest";
@@ -43385,6 +44296,12 @@
icon_state = "test_floor4"
},
/area/almayer/squads/alpha)
+"jvB" = (
+/obj/effect/step_trigger/clone_cleaner,
+/turf/open/floor/almayer/no_build{
+ dir = 4
+ },
+/area/almayer/command/airoom)
"jvI" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/almayer{
@@ -43588,6 +44505,29 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/lower_medical_lobby)
+"jDV" = (
+/obj/effect/projector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
+ },
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES StairsUpper";
+ name = "ARES Core Access";
+ req_one_access_txt = "19;200;90;91;92";
+ pixel_x = 24
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"jEs" = (
/obj/structure/surface/table/almayer,
/obj/item/tool/screwdriver{
@@ -44077,6 +45017,19 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_m_p)
+"jRz" = (
+/obj/effect/step_trigger/teleporter/random{
+ affect_ghosts = 1;
+ name = "tele_ground1";
+ teleport_x = 180;
+ teleport_x_offset = 200;
+ teleport_y = 50;
+ teleport_y_offset = 80;
+ teleport_z = 1;
+ teleport_z_offset = 1
+ },
+/turf/closed/wall/almayer/outer,
+/area/space)
"jRK" = (
/obj/structure/largecrate/random/case/double,
/turf/open/floor/almayer{
@@ -44365,6 +45318,22 @@
icon_state = "mono"
},
/area/almayer/hallways/vehiclehangar)
+"jYR" = (
+/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
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"jZd" = (
/obj/structure/pipes/vents/pump{
dir = 8;
@@ -44563,9 +45532,19 @@
},
/area/almayer/engineering/upper_engineering)
"kbH" = (
-/obj/structure/window/reinforced,
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
+ },
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"kbV" = (
@@ -44696,6 +45675,9 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/starboard_hallway)
+"kfU" = (
+/turf/open/floor/plating,
+/area/almayer/powered/agent)
"kfX" = (
/obj/effect/decal/warning_stripes{
icon_state = "SE-out";
@@ -44769,6 +45751,22 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering/port)
+"khJ" = (
+/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
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"khS" = (
/obj/structure/machinery/light/small{
dir = 8
@@ -45039,6 +46037,10 @@
icon_state = "plating"
},
/area/almayer/hull/lower_hull/l_a_p)
+"kpc" = (
+/obj/structure/reagent_dispensers/watertank,
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"kpl" = (
/obj/structure/machinery/door_control{
id = "cl_shutters";
@@ -45568,6 +46570,19 @@
icon_state = "red"
},
/area/almayer/hallways/port_hallway)
+"kzT" = (
+/obj/structure/machinery/door_control{
+ id = "ARES StairsLower";
+ name = "ARES Core Lockdown";
+ req_one_access_txt = "19;200;90;91;92";
+ pixel_x = -24;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"kAh" = (
/obj/structure/sign/safety/restrictedarea{
pixel_x = -17
@@ -45600,6 +46615,12 @@
icon_state = "red"
},
/area/almayer/lifeboat_pumps/south2)
+"kBy" = (
+/obj/structure/machinery/ares/processor,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"kBP" = (
/turf/open/floor/almayer{
dir = 9;
@@ -45948,6 +46969,24 @@
icon_state = "test_floor4"
},
/area/almayer/living/grunt_rnr)
+"kKv" = (
+/obj/effect/projector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/platform{
+ dir = 8
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"kKG" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -46293,6 +47332,21 @@
icon_state = "orange"
},
/area/almayer/hallways/hangar)
+"kSy" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SW-out"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Mainframe Right";
+ name = "ARES Mainframe Lockdown";
+ req_one_access_txt = "200;91;92";
+ pixel_x = -24;
+ pixel_y = 24
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"kSJ" = (
/obj/structure/disposalpipe/junction{
dir = 4;
@@ -46501,6 +47555,12 @@
icon_state = "silver"
},
/area/almayer/command/computerlab)
+"kXj" = (
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"kXu" = (
/turf/open/floor/almayer{
dir = 8;
@@ -46701,6 +47761,12 @@
icon_state = "plate"
},
/area/almayer/squads/charlie)
+"lcg" = (
+/obj/structure/machinery/ares/substrate,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"lcy" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -46946,9 +48012,20 @@
/turf/open/floor/wood/ship,
/area/almayer/living/basketball)
"lin" = (
-/obj/structure/closet/firecloset,
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/effect/projector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
+ },
+/obj/structure/platform{
+ dir = 8
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"liJ" = (
@@ -47090,17 +48167,8 @@
},
/area/almayer/medical/medical_science)
"lmz" = (
-/obj/structure/machinery/door_control{
- id = "areslockdowninterior";
- name = "ARES Lockdown";
- pixel_x = 25;
- req_one_access_txt = "19"
- },
-/obj/effect/landmark/start/working_joe,
-/turf/open/floor/almayer{
- icon_state = "ai_floors"
- },
-/area/almayer/command/airoom)
+/turf/closed/wall/almayer/white/hull,
+/area/space)
"lmE" = (
/obj/structure/reagent_dispensers/fueltank/custom,
/turf/open/floor/almayer{
@@ -47149,6 +48217,32 @@
icon_state = "kitchen"
},
/area/almayer/engineering/upper_engineering)
+"lnS" = (
+/obj/structure/sign/safety/rewire{
+ pixel_y = 38
+ },
+/obj/structure/sign/safety/fibre_optics{
+ pixel_x = 14;
+ pixel_y = 38
+ },
+/obj/structure/sign/safety/laser{
+ pixel_y = 24
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_y = 24;
+ pixel_x = 14
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Operations Left";
+ name = "ARES Operations Shutter";
+ req_one_access_txt = "1;200;91;92";
+ pixel_x = 24;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"lok" = (
/obj/structure/machinery/cm_vending/clothing/marine/charlie,
/obj/structure/sign/safety/cryo{
@@ -48927,6 +50021,22 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/main_office)
+"mdW" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/effect/decal/warning_stripes{
+ icon_state = "W";
+ pixel_x = -1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/item/folder/white,
+/obj/item/folder/white,
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"meu" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -49212,10 +50322,15 @@
},
/area/almayer/engineering/port_atmos)
"mlb" = (
-/obj/structure/machinery/status_display{
- pixel_y = 30
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
},
-/turf/open/floor/almayer{
+/obj/effect/decal/warning_stripes{
+ icon_state = "NE-out";
+ pixel_y = 1
+ },
+/turf/open/floor/almayer/no_build{
icon_state = "tcomms"
},
/area/almayer/command/airoom)
@@ -49919,6 +51034,26 @@
icon_state = "plate"
},
/area/almayer/hallways/port_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/white/open{
+ open_layer = 1.9;
+ id = "ARES Emergency";
+ needs_power = 0;
+ name = "ARES Emergency Lockdown";
+ layer = 3.2;
+ closed_layer = 3.2;
+ plane = -7
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"mFO" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -49994,6 +51129,12 @@
},
/turf/open/floor/wood/ship,
/area/almayer/medical/medical_science)
+"mHE" = (
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"mHO" = (
/obj/structure/machinery/light,
/turf/open/floor/almayer,
@@ -50230,6 +51371,10 @@
icon_state = "plate"
},
/area/almayer/living/pilotbunks)
+"mLE" = (
+/obj/effect/landmark/start/working_joe,
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"mLF" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -50363,8 +51508,7 @@
},
/area/almayer/engineering/laundry)
"mOi" = (
-/obj/structure/blocker/invisible_wall,
-/turf/closed/wall/almayer,
+/turf/closed/wall/almayer/outer,
/area/almayer/command/airoom)
"mOr" = (
/obj/structure/surface/table/almayer,
@@ -50479,6 +51623,34 @@
icon_state = "green"
},
/area/almayer/hallways/aft_hallway)
+"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/machinery/door/poddoor/almayer/blended/white/open{
+ open_layer = 1.9;
+ id = "ARES Emergency";
+ needs_power = 0;
+ name = "ARES Emergency Lockdown";
+ layer = 3.2;
+ closed_layer = 3.2;
+ plane = -7
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_y = -8;
+ pixel_x = -18
+ },
+/obj/structure/sign/safety/fibre_optics{
+ pixel_x = -18;
+ pixel_y = 6
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"mRW" = (
/turf/open/floor/almayer/research/containment/corner1,
/area/almayer/medical/containment/cell/cl)
@@ -50606,6 +51778,27 @@
icon_state = "test_floor4"
},
/area/almayer/squads/bravo)
+"mUz" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/cameras/almayer/ares{
+ dir = 8;
+ pixel_x = 17
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
+"mUC" = (
+/obj/structure/machinery/light{
+ dir = 4;
+ unacidable = 1;
+ unslashable = 1;
+ invisibility = 101
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"mUQ" = (
/obj/structure/largecrate/random/barrel/red,
/turf/open/floor/almayer{
@@ -52034,8 +53227,6 @@
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
-/obj/effect/landmark/wo_supplies/guns/common/m39,
-/obj/effect/landmark/wo_supplies/guns/common/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/structure/sign/safety/ammunition{
@@ -52045,6 +53236,8 @@
/obj/structure/sign/safety/hazard{
pixel_y = 32
},
+/obj/item/weapon/gun/smg/m39,
+/obj/item/weapon/gun/smg/m39,
/turf/open/floor/almayer{
icon_state = "redfull"
},
@@ -52377,6 +53570,15 @@
icon_state = "plate"
},
/area/almayer/hull/upper_hull/u_a_p)
+"nJH" = (
+/obj/structure/machinery/computer/cameras/almayer/ares{
+ dir = 8;
+ pixel_x = 17
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"nKq" = (
/obj/structure/machinery/status_display{
pixel_x = 16;
@@ -52461,6 +53663,20 @@
icon_state = "bluefull"
},
/area/almayer/living/briefing)
+"nMq" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/obj/structure/machinery/computer/working_joe{
+ dir = 8;
+ pixel_x = 17
+ },
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "silver"
+ },
+/area/almayer/hallways/aft_hallway)
"nMu" = (
/turf/open/floor/almayer{
dir = 9;
@@ -53064,6 +54280,34 @@
},
/turf/open/floor/carpet,
/area/almayer/living/commandbunks)
+"ocB" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_y = 24;
+ pixel_x = 14
+ },
+/obj/structure/sign/safety/fibre_optics{
+ pixel_x = 14;
+ pixel_y = 38
+ },
+/obj/structure/machinery/computer/working_joe{
+ dir = 8;
+ pixel_x = 17;
+ ticket_console = 1
+ },
+/obj/structure/sign/safety/laser{
+ pixel_y = 24
+ },
+/obj/structure/sign/safety/rewire{
+ pixel_y = 38
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"oda" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/item/device/radio{
@@ -53762,6 +55006,17 @@
icon_state = "plate"
},
/area/almayer/hallways/hangar)
+"osy" = (
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/obj/structure/platform_decoration,
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"osz" = (
/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/pipes/standard/simple/hidden/supply{
@@ -53856,6 +55111,19 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/upper_hull/u_a_s)
+"our" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/item/paper_bin/uscm{
+ pixel_y = 6
+ },
+/obj/item/tool/pen,
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"ouB" = (
/obj/structure/bed/sofa/vert/grey/bot,
/turf/open/floor/almayer,
@@ -54426,13 +55694,26 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/hangar)
"oJR" = (
-/obj/structure/closet/toolcloset,
-/obj/structure/machinery/firealarm{
- dir = 8;
+/obj/effect/projector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
+ },
+/obj/structure/platform{
+ dir = 8
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES StairsUpper";
+ name = "ARES Core Access";
+ req_one_access_txt = "19;200;90;91;92";
pixel_x = -24
},
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"oKb" = (
@@ -54482,6 +55763,24 @@
/obj/effect/landmark/late_join/bravo,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/alpha)
+"oLm" = (
+/obj/structure/machinery/door_control{
+ id = "ARES StairsLower";
+ name = "ARES Core Lockdown";
+ req_one_access_txt = "19;200;90;91;92";
+ pixel_x = -24;
+ pixel_y = 8
+ },
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 4;
+ pixel_y = -8
+ },
+/obj/effect/step_trigger/clone_cleaner,
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"oLv" = (
/obj/structure/sign/safety/medical{
pixel_x = 8;
@@ -54775,6 +56074,16 @@
icon_state = "plate"
},
/area/almayer/living/gym)
+"oRV" = (
+/obj/structure/blocker/invisible_wall,
+/obj/effect/decal/warning_stripes{
+ icon_state = "W";
+ pixel_x = -1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"oRZ" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -55269,6 +56578,12 @@
},
/turf/open/floor/almayer,
/area/almayer/living/briefing)
+"pfT" = (
+/obj/structure/machinery/ares/processor/interface,
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"pgo" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -55282,12 +56597,20 @@
/turf/closed/wall/almayer,
/area/almayer/lifeboat_pumps/south1)
"pgH" = (
-/obj/structure/window/reinforced{
- dir = 4;
- health = 80
+/obj/effect/projector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
},
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/structure/stairs{
+ dir = 1;
+ icon_state = "ramptop"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"pha" = (
@@ -55483,6 +56806,18 @@
icon_state = "plate"
},
/area/almayer/living/briefing)
+"pmV" = (
+/obj/structure/prop/server_equipment/yutani_server/broken{
+ pixel_y = 16;
+ name = "server tower";
+ desc = "A powerful server tower housing various AI functions.";
+ density = 0
+ },
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"pno" = (
/obj/structure/sign/safety/escapepod{
pixel_y = 32
@@ -56454,6 +57789,19 @@
icon_state = "green"
},
/area/almayer/hallways/port_hallway)
+"pJR" = (
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresUp";
+ vector_x = -97;
+ vector_y = 65
+ },
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ dir = 4
+ },
+/area/almayer/command/airoom)
"pJW" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/door/airlock/almayer/maint{
@@ -57080,13 +58428,15 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/charlie)
"pYi" = (
-/obj/structure/machinery/telecomms/processor/preset_four,
-/obj/structure/sign/safety/laser{
- pixel_x = 8;
- pixel_y = 32
+/obj/structure/machinery/light{
+ dir = 4
},
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/structure/pipes/vents/pump/no_boom{
+ dir = 8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
},
/area/almayer/command/airoom)
"pYo" = (
@@ -57529,6 +58879,17 @@
icon_state = "dark_sterile"
},
/area/almayer/medical/lower_medical_lobby)
+"qit" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/obj/item/paper_bin/uscm,
+/obj/item/tool/pen,
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"qiy" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 1
@@ -58068,6 +59429,19 @@
icon_state = "plate"
},
/area/almayer/living/offices)
+"qwJ" = (
+/obj/structure/machinery/door_control{
+ id = "ARES Operations Left";
+ name = "ARES Operations Shutter";
+ req_one_access_txt = "1;200;91;92";
+ pixel_x = -24;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"qxA" = (
/obj/structure/closet/firecloset,
/turf/open/floor/almayer{
@@ -58693,6 +60067,12 @@
icon_state = "blue"
},
/area/almayer/hallways/aft_hallway)
+"qLS" = (
+/obj/structure/pipes/standard/manifold/hidden/supply/no_boom,
+/turf/open/floor/almayer/no_build{
+ dir = 4
+ },
+/area/almayer/command/airoom)
"qLV" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/disk_reader,
@@ -58892,6 +60272,18 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_f_p)
+"qQS" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"qRj" = (
/obj/structure/disposalpipe/segment{
dir = 1;
@@ -59305,6 +60697,18 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_s)
+"rby" = (
+/obj/structure/machinery/door_control{
+ id = "ARES Mainframe Left";
+ name = "ARES Mainframe Lockdown";
+ req_one_access_txt = "200;91;92";
+ pixel_x = 24;
+ pixel_y = -24
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"rbB" = (
/turf/open/floor/almayer{
icon_state = "silvercorner"
@@ -59812,9 +61216,25 @@
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_m_s)
+"rna" = (
+/turf/closed/wall/almayer/white,
+/area/almayer/command/airoom)
"rne" = (
/turf/open/floor/carpet,
/area/almayer/command/corporateliason)
+"rnH" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/structure/machinery/computer/crew/alt{
+ pixel_x = 17;
+ dir = 8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"rnM" = (
/obj/structure/machinery/vending/cigarette,
/turf/open/floor/almayer{
@@ -59854,6 +61274,20 @@
icon_state = "plate"
},
/area/almayer/shipboard/port_point_defense)
+"roH" = (
+/obj/effect/step_trigger/ares_alert/terminals,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES Operations Left";
+ name = "\improper ARES Operations Shutters";
+ dir = 4
+ },
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"roU" = (
/obj/structure/disposalpipe/segment{
dir = 8;
@@ -60387,6 +61821,14 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/main_office)
+"rCi" = (
+/obj/structure/machinery/camera/autoname/almayer/containment/ares{
+ dir = 8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"rCp" = (
/obj/structure/largecrate/random/case/small,
/obj/structure/machinery/light/small{
@@ -60397,12 +61839,19 @@
},
/area/almayer/hull/upper_hull/u_a_p)
"rCw" = (
-/obj/structure/window/reinforced,
-/obj/structure/machinery/light{
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
+ },
+/obj/structure/platform{
dir = 8
},
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"rCK" = (
@@ -60901,16 +62350,11 @@
},
/area/almayer/medical/containment/cell/cl)
"rNF" = (
-/obj/structure/sign/safety/fibre_optics{
- pixel_x = 32;
- pixel_y = 7
- },
-/obj/structure/sign/safety/terminal{
- pixel_x = 32;
- pixel_y = -8
+/obj/structure/machinery/light{
+ unacidable = 1;
+ unslashable = 1
},
-/obj/effect/landmark/start/working_joe,
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -61463,6 +62907,9 @@
icon_state = "test_floor4"
},
/area/almayer/engineering/upper_engineering/notunnel)
+"sbJ" = (
+/turf/closed/wall/almayer/white/hull,
+/area/almayer/powered/agent)
"sbM" = (
/obj/structure/pipes/vents/scrubber{
dir = 4
@@ -61537,15 +62984,29 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_m_p)
-"sdl" = (
-/obj/structure/machinery/telecomms/processor/preset_four,
-/obj/structure/sign/safety/fibre_optics{
- pixel_x = 8;
- pixel_y = 32
+"scS" = (
+/obj/structure/machinery/status_display{
+ pixel_y = 30
},
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/structure/machinery/light{
+ dir = 8;
+ unacidable = 1;
+ unslashable = 1;
+ invisibility = 101
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
+"sdl" = (
+/obj/structure/surface/rack{
+ pixel_y = 16;
+ density = 0
},
+/obj/item/tool/wet_sign,
+/obj/item/tool/wet_sign,
+/obj/item/tool/wet_sign,
+/turf/open/floor/plating,
/area/almayer/command/airoom)
"sdn" = (
/obj/structure/sink{
@@ -61977,6 +63438,10 @@
},
/area/almayer/shipboard/brig/cells)
"soq" = (
+/obj/structure/machinery/computer/working_joe{
+ dir = 4;
+ pixel_x = -17
+ },
/turf/open/floor/almayer{
icon_state = "cargo"
},
@@ -62660,6 +64125,14 @@
icon_state = "orange"
},
/area/almayer/hallways/hangar)
+"sEK" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "E"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "tcomms"
+ },
+/area/almayer/command/airoom)
"sEM" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/item/device/radio/intercom{
@@ -62750,6 +64223,12 @@
/obj/structure/mirror,
/turf/closed/wall/almayer,
/area/almayer/living/gym)
+"sGZ" = (
+/obj/structure/closet/firecloset,
+/turf/open/floor/almayer{
+ icon_state = "silverfull"
+ },
+/area/almayer/command/airoom)
"sHg" = (
/obj/structure/surface/rack,
/obj/item/storage/backpack/marine/satchel{
@@ -62809,11 +64288,16 @@
},
/area/almayer/squads/alpha)
"sIf" = (
-/obj/structure/machinery/door/window/southleft{
- req_access_txt = "19"
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
},
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"sIk" = (
@@ -62911,6 +64395,15 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/morgue)
+"sKY" = (
+/obj/structure/bed/chair/office/dark{
+ dir = 8;
+ layer = 3.25
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"sLo" = (
/obj/structure/stairs/perspective{
dir = 1;
@@ -63223,6 +64716,12 @@
},
/turf/open/floor/almayer,
/area/almayer/living/briefing)
+"sTV" = (
+/obj/structure/machinery/power/apc/almayer/hardened{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"sUg" = (
/obj/structure/surface/table/almayer,
/obj/structure/flora/pottedplant{
@@ -63446,8 +64945,6 @@
/obj/effect/decal/warning_stripes{
icon_state = "N"
},
-/obj/effect/landmark/wo_supplies/guns/common/m39,
-/obj/effect/landmark/wo_supplies/guns/common/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
@@ -63455,6 +64952,8 @@
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
+/obj/item/weapon/gun/smg/m39,
+/obj/item/weapon/gun/smg/m39,
/turf/open/floor/plating/almayer,
/area/almayer/shipboard/brig/armory)
"sYC" = (
@@ -64054,6 +65553,16 @@
},
/turf/open/floor/almayer,
/area/almayer/living/briefing)
+"tmK" = (
+/obj/structure/machinery/door/airlock/almayer/maint{
+ dir = 1;
+ req_one_access_txt = "91;92";
+ req_one_access = null
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"tnb" = (
/obj/structure/bed/chair/comfy/black,
/turf/open/floor/almayer{
@@ -64372,6 +65881,12 @@
icon_state = "orange"
},
/area/almayer/engineering/upper_engineering/port)
+"tte" = (
+/obj/structure/pipes/vents/pump/no_boom{
+ welded = 1
+ },
+/turf/open/floor/plating,
+/area/almayer/powered/agent)
"ttM" = (
/obj/item/device/radio/intercom{
freerange = 1;
@@ -64832,13 +66347,19 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/charlie)
"tFe" = (
-/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
- dir = 1;
- name = "\improper ARES Mainframe";
- req_access = null;
- req_one_access_txt = "2;7"
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/door/poddoor/shutters/almayer{
+ id = "ARES StairsUpper";
+ name = "\improper ARES Core Shutters";
+ plane = -7
},
-/turf/open/floor/almayer{
+/obj/structure/machinery/door/poddoor/almayer/blended/open{
+ id = "ARES Emergency";
+ name = "ARES Emergency Lockdown";
+ open_layer = 1.9;
+ plane = -7
+ },
+/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
},
/area/almayer/command/airoom)
@@ -64983,6 +66504,12 @@
icon_state = "silver"
},
/area/almayer/shipboard/brig/cic_hallway)
+"tHu" = (
+/obj/structure/closet/toolcloset,
+/turf/open/floor/almayer{
+ icon_state = "silverfull"
+ },
+/area/almayer/command/airoom)
"tHv" = (
/turf/open/floor/almayer{
dir = 8;
@@ -65831,6 +67358,15 @@
/obj/item/frame/table,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_a_p)
+"ubA" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"ucp" = (
/obj/structure/window/framed/almayer,
/turf/open/floor/plating,
@@ -67919,6 +69455,14 @@
icon_state = "sterile_green_corner"
},
/area/almayer/medical/containment)
+"uVv" = (
+/obj/structure/pipes/standard/manifold/hidden/supply/no_boom{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"uVA" = (
/turf/open/floor/almayer{
dir = 4;
@@ -68347,6 +69891,11 @@
icon_state = "orange"
},
/area/almayer/squads/bravo)
+"vfB" = (
+/turf/open/floor/almayer/no_build{
+ dir = 4
+ },
+/area/almayer/command/airoom)
"vfJ" = (
/obj/structure/surface/rack,
/obj/item/frame/table,
@@ -68453,10 +70002,13 @@
},
/area/almayer/hull/lower_hull/l_m_p)
"vhe" = (
-/obj/structure/sign/kiddieplaque{
- pixel_x = -32
+/obj/structure/prop/server_equipment/yutani_server{
+ pixel_y = 16;
+ name = "server tower";
+ desc = "A powerful server tower housing various AI functions.";
+ density = 0
},
-/turf/open/floor/almayer{
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -68572,6 +70124,14 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/living/port_emb)
+"viB" = (
+/obj/structure/pipes/standard/manifold/hidden/supply/no_boom{
+ dir = 1
+ },
+/turf/open/floor/plating/plating_catwalk{
+ allow_construction = 0
+ },
+/area/almayer/command/airoom)
"viJ" = (
/obj/structure/machinery/door/airlock/almayer/maint,
/turf/open/floor/almayer{
@@ -69335,6 +70895,18 @@
icon_state = "sterile_green_corner"
},
/area/almayer/medical/containment)
+"vAU" = (
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/obj/structure/pipes/vents/scrubber/no_boom{
+ dir = 4
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 8
+ },
+/area/almayer/command/airoom)
"vBm" = (
/turf/closed/wall/almayer/reinforced,
/area/almayer/shipboard/brig/main_office)
@@ -69523,6 +71095,18 @@
icon_state = "orangefull"
},
/area/almayer/living/briefing)
+"vHa" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/ares_console{
+ pixel_x = 9
+ },
+/obj/structure/machinery/computer/view_objectives{
+ pixel_x = -9
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"vHh" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/item/tool/warning_cone{
@@ -70315,6 +71899,20 @@
},
/turf/open/floor/plating,
/area/almayer/engineering/upper_engineering/port)
+"vXh" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/structure/machinery/computer/working_joe{
+ dir = 4;
+ pixel_x = -17;
+ ticket_console = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"vXQ" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 1
@@ -70945,6 +72543,30 @@
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_message = "Caution: Movement detected in ARES Core.";
+ cooldown_duration = 1200;
+ alert_id = "AresStairs"
+ },
+/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
+ open_layer = 1.9;
+ id = "ARES Emergency";
+ needs_power = 0;
+ name = "ARES Emergency Lockdown";
+ layer = 3.2;
+ closed_layer = 3.2;
+ plane = -7
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "test_floor4"
+ },
+/area/almayer/command/airoom)
"wkX" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 6
@@ -71087,6 +72709,10 @@
icon_state = "cargo"
},
/area/almayer/living/bridgebunks)
+"wnh" = (
+/obj/structure/window/framed/almayer/white/hull,
+/turf/open/floor/plating,
+/area/almayer/command/airoom)
"wnL" = (
/obj/item/stack/tile/carpet{
amount = 12
@@ -71164,6 +72790,14 @@
icon_state = "rasputin3"
},
/area/almayer/powered/agent)
+"wpw" = (
+/obj/structure/bed/chair/comfy/ares{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"wpz" = (
/obj/item/device/radio/intercom{
freerange = 1;
@@ -71567,6 +73201,18 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_m_s)
+"wyQ" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/door_control{
+ id = "ARES Emergency";
+ name = "ARES Emergency Lockdown";
+ req_one_access_txt = "91;92";
+ indestructible = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"wza" = (
/obj/structure/machinery/cm_vending/clothing/vehicle_crew,
/turf/open/floor/almayer{
@@ -71656,11 +73302,19 @@
},
/area/almayer/shipboard/brig/processing)
"wCT" = (
-/obj/structure/machinery/power/apc/almayer/hardened{
+/obj/effect/step_trigger/teleporter_vector{
+ name = "Almayer_AresDown";
+ vector_x = 97;
+ vector_y = -65
+ },
+/obj/structure/machinery/light{
dir = 1
},
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/structure/stairs{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"wDl" = (
@@ -72490,11 +74144,11 @@
/obj/effect/decal/warning_stripes{
icon_state = "N"
},
-/obj/effect/landmark/wo_supplies/guns/common/m39,
-/obj/effect/landmark/wo_supplies/guns/common/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
/obj/item/ammo_magazine/smg/m39,
+/obj/item/weapon/gun/smg/m39,
+/obj/item/weapon/gun/smg/m39,
/turf/open/floor/plating/almayer,
/area/almayer/shipboard/brig/armory)
"wVy" = (
@@ -72876,10 +74530,13 @@
},
/area/almayer/living/gym)
"xbN" = (
-/obj/structure/machinery/telecomms/processor/preset_four,
-/turf/open/floor/almayer{
- icon_state = "tcomms"
+/obj/structure/surface/rack{
+ pixel_y = 16;
+ density = 0
},
+/obj/structure/janitorialcart,
+/obj/item/tool/mop,
+/turf/open/floor/plating,
/area/almayer/command/airoom)
"xcp" = (
/obj/structure/stairs/perspective{
@@ -73680,6 +75337,20 @@
icon_state = "test_floor4"
},
/area/almayer/squads/charlie)
+"xvM" = (
+/obj/structure/machinery/door_control{
+ id = "ARES StairsLower";
+ name = "ARES Core Lockdown";
+ req_one_access_txt = "19;200;90;91;92";
+ pixel_x = 24;
+ pixel_y = 8
+ },
+/obj/effect/step_trigger/clone_cleaner,
+/turf/open/floor/almayer/no_build{
+ icon_state = "silver";
+ dir = 4
+ },
+/area/almayer/command/airoom)
"xvX" = (
/obj/structure/machinery/cm_vending/gear/leader,
/turf/open/floor/almayer{
@@ -74077,6 +75748,12 @@
icon_state = "plate"
},
/area/almayer/hull/upper_hull/u_f_s)
+"xDC" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"xEc" = (
/turf/open/floor/almayer{
dir = 9;
@@ -74623,8 +76300,8 @@
},
/area/almayer/shipboard/brig/perma)
"xQV" = (
-/obj/effect/landmark/start/working_joe,
-/turf/open/floor/almayer{
+/obj/effect/step_trigger/clone_cleaner,
+/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
@@ -74902,6 +76579,19 @@
icon_state = "plate"
},
/area/almayer/command/combat_correspondent)
+"xVc" = (
+/obj/effect/step_trigger/clone_cleaner,
+/obj/structure/machinery/door_control{
+ id = "ARES StairsUpper";
+ name = "ARES Core Access";
+ req_one_access_txt = "1;200;90;91;92";
+ pixel_y = 24;
+ pixel_x = 24
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"xVj" = (
/obj/structure/surface/table/almayer,
/obj/item/tool/weldingtool{
@@ -75123,6 +76813,23 @@
/obj/structure/largecrate/random/case/double,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_m_s)
+"yaQ" = (
+/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
+ dir = 9
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
+"yaZ" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S";
+ layer = 3.3
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"ybb" = (
/obj/structure/surface/table/almayer,
/obj/item/storage/box/ids{
@@ -75246,6 +76953,15 @@
icon_state = "mono"
},
/area/almayer/lifeboat_pumps/north2)
+"ydI" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "W";
+ pixel_x = -1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"ydM" = (
/obj/structure/window{
dir = 8
@@ -75413,6 +77129,17 @@
icon_state = "red"
},
/area/almayer/hallways/starboard_hallway)
+"yit" = (
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/obj/structure/pipes/vents/pump/no_boom{
+ dir = 1
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"yiC" = (
/obj/structure/surface/table/almayer,
/obj/structure/flora/pottedplant{
@@ -113181,10 +114908,10 @@ anf
apK
arf
auG
-awu
azb
azb
-auG
+azb
+nMq
aDp
apK
cbr
@@ -113378,15 +115105,15 @@ xfm
als
ani
aow
-aqU
-aqU
-aqU
-aqU
-aqU
-aqU
-aqU
+mOi
+mOi
+mOi
+mOi
+mOi
+mOi
auc
-aqU
+auc
+hyE
aqU
aHq
aHq
@@ -113581,16 +115308,16 @@ ajJ
aEX
ajt
ali
-aqU
-hvw
+mOi
+rCw
rCw
lin
oJR
-aqU
+tFe
asD
xQV
avK
-cck
+aqU
aCZ
dgg
xRk
@@ -113784,16 +115511,16 @@ ael
isW
ajt
abg
-aqU
+mOi
wCT
sIf
isC
isC
tFe
-lmz
+xQV
xQV
rNF
-cck
+aqU
qjF
oqv
iqd
@@ -113987,15 +115714,15 @@ ael
abg
akU
abg
-aqU
-mlb
+mOi
+kbH
kbH
pgH
-aqU
-aqU
-aqU
-auf
-aqU
+jDV
+tFe
+xVc
+xQV
+eYz
aqU
gjB
wDy
@@ -114190,16 +115917,16 @@ adO
lwm
akU
nQx
-aqU
-pYi
-isC
-xbN
-aqU
+mOi
+mOi
+mOi
+mOi
+mOi
mOi
asF
asG
-vhe
-cck
+iyH
+aqU
jVE
nTs
pje
@@ -114395,14 +116122,14 @@ aii
abg
aqU
sdl
-isC
-xbN
-aqU
-mOi
-gjw
+mLE
+bUx
+mLE
+tmK
+avK
aug
avL
-cck
+aqU
lyE
rsO
aGN
@@ -114599,13 +116326,13 @@ abg
aqU
xbN
gfE
-xbN
+gfE
+kpc
aqU
-mOi
gjw
cnp
avM
-cck
+aqU
wmK
liJ
pTj
@@ -127856,23 +129583,23 @@ aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -128059,23 +129786,23 @@ aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -128262,23 +129989,23 @@ aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -128465,23 +130192,23 @@ aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -128668,23 +130395,23 @@ aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -128871,23 +130598,23 @@ aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -129072,25 +130799,25 @@ aaa
aaa
aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -129275,21 +131002,21 @@ aaa
aaa
aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -129478,21 +131205,21 @@ aaa
aaa
aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -129681,21 +131408,21 @@ aaa
aaa
aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -129884,107 +131611,107 @@ aaa
aaa
aab
aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+bdH
+aad
+aag
+aag
+aag
+wVb
+hlz
+hlz
+bhB
+bJP
+mzO
+bMN
+bMN
+fcI
+bSy
+bSy
+bSy
+dNx
+bMN
+bMN
+tdx
+bYW
+bhB
+vuR
+ydx
+vTK
+aag
+aag
+aag
+ajZ
+aaa
+aaa
+aaa
aaa
aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aaa
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-bdH
-aad
-aag
-aag
-aag
-wVb
-hlz
-hlz
-bhB
-bJP
-mzO
-bMN
-bMN
-fcI
-bSy
-bSy
-bSy
-dNx
-bMN
-bMN
-tdx
-bYW
-bhB
-vuR
-ydx
-vTK
-aag
-aag
-aag
-ajZ
-aaa
-aaa
-aaa
-aaa
-aaa
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-"}
-(269,1,1) = {"
-aaa
-aaa
-aab
+aab
+aaa
+aaa
+"}
+(269,1,1) = {"
+aaa
+aaa
+aab
aaa
aaa
aaa
@@ -130087,21 +131814,21 @@ aaa
aaa
aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -130290,21 +132017,21 @@ aaa
aaa
aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -130489,108 +132216,108 @@ aab
aaa
aaa
aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-bdH
-aad
-aag
-aag
-aag
-wVb
-eFH
-eFH
-bhB
-svd
-bLf
-dCS
-bMM
-bhB
-bQk
-xfi
-bSG
-bhB
-bMM
-dCS
-tLy
-svd
-bhB
-cAH
-cAH
-vTK
-aag
-aag
-aag
-ajZ
-aaa
-aaa
-aaa
-aaa
-aaa
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-bdH
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-"}
-(272,1,1) = {"
+aaa
+aaa
+aab
+aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+bdH
+aad
+aag
+aag
+aag
+wVb
+eFH
+eFH
+bhB
+svd
+bLf
+dCS
+bMM
+bhB
+bQk
+xfi
+bSG
+bhB
+bMM
+dCS
+tLy
+svd
+bhB
+cAH
+cAH
+vTK
+aag
+aag
+aag
+ajZ
+aaa
+aaa
+aaa
+aaa
+aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aaa
+aaa
+aaa
+aaa
+aaa
+aab
+aaa
+aaa
+"}
+(272,1,1) = {"
aaa
aaa
aab
@@ -130684,10 +132411,10 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
+aab
+aab
+aab
+aab
aab
aaa
aaa
@@ -130695,22 +132422,22 @@ aKQ
aaa
aaa
aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aab
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+bdH
aaa
aaa
aaa
@@ -130885,35 +132612,35 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
-aaa
-aaa
-aKQ
-aaa
-aaa
aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aab
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aKQ
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aak
+bdH
aaa
aaa
aaa
@@ -131081,42 +132808,42 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
-aaa
-aaa
-aKQ
-aaa
-aaa
+aab
+aab
+aab
+aab
+aab
+aab
aab
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aKQ
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aak
+bdH
aaa
aaa
aaa
@@ -131284,53 +133011,53 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
aaa
aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aKQ
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -131487,53 +133214,53 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -131690,53 +133417,53 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
aab
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -131893,53 +133620,53 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
aab
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -132096,53 +133823,53 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
aaa
aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -132299,53 +134026,53 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
aaa
aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+daz
+vhe
+fEN
+cqm
+gTH
+qit
+rna
+qQS
+gwn
+pfT
+jYR
+dyp
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -132502,8 +134229,53 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+sbJ
+sbJ
+sbJ
+daz
+jtj
+avK
+avK
+sKY
+avK
+bIp
+fKe
+dDp
+dDp
+frM
+lcg
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -132515,68 +134287,23 @@ aaa
aaa
aaa
aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-wVb
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-vTK
+wVb
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+ovn
+ovn
+ovn
+ovn
+ovn
+ovn
+ovn
+vTK
aaa
aaa
aaa
@@ -132705,662 +134432,53 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-wVb
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-vTK
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
aaa
-aaa
-"}
-(283,1,1) = {"
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-wVb
-bhD
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-bCR
-vTK
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-"}
-(284,1,1) = {"
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-xVk
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-wVb
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-vTK
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-"}
-(285,1,1) = {"
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+daz
+daz
+daz
+daz
+daz
+tte
+hvw
+auf
+pmV
+xDC
+xDC
+dIn
+rby
+bIp
+euN
+sEK
+sEK
+mlb
+lcg
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -133432,7 +134550,7 @@ aab
aaa
aaa
"}
-(286,1,1) = {"
+(283,1,1) = {"
aaa
aaa
aab
@@ -133468,6 +134586,13 @@ aaa
aaa
aaa
aaa
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
aaa
aaa
aaa
@@ -133483,6 +134608,13 @@ aaa
aaa
aaa
aaa
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
aaa
aaa
aaa
@@ -133503,7 +134635,53 @@ aaa
aaa
aaa
aaa
+aab
aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+daz
+daz
+hRW
+asZ
+vXh
+daz
+daz
+kfU
+daz
+rna
+rna
+lnS
+uVv
+yit
+rna
+cxc
+kBy
+kBy
+gfu
+fPB
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -133515,6 +134693,23 @@ aaa
aaa
aaa
aaa
+wVb
+bhD
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+ovn
+ovn
+ovn
+ovn
+ovn
+ovn
+bCR
+vTK
aaa
aaa
aaa
@@ -133530,13 +134725,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -133557,10 +134749,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(284,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -133575,23 +134771,6 @@ aaa
aaa
aaa
aaa
-wVb
-qsF
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-bdo
-ovn
-ovn
-ovn
-ovn
-ovn
-ovn
-aXQ
-vTK
aaa
aaa
aaa
@@ -133610,6 +134789,13 @@ aaa
aaa
aaa
aaa
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
aaa
aaa
aaa
@@ -133625,20 +134811,23 @@ aaa
aaa
aaa
aaa
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
+xVk
aaa
aaa
aaa
aaa
aaa
aaa
-aab
aaa
aaa
-"}
-(287,1,1) = {"
aaa
aaa
-aab
aaa
aaa
aaa
@@ -133649,11 +134838,81 @@ aaa
aaa
aaa
aaa
+aab
aaa
+bdH
+lmz
+lmz
+lmz
+daz
+daz
+scS
+yaZ
+ffE
+hZj
+clw
+daz
+daz
+daz
+sGZ
+rna
+rna
+roH
+ebN
+ebN
+ebN
+daz
+wnh
+wnh
+daz
+daz
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
aaa
+wVb
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+ovn
+ovn
+ovn
+ovn
+ovn
+ovn
+ovn
+vTK
aaa
aaa
aaa
@@ -133693,6 +134952,14 @@ aaa
aaa
aaa
aaa
+aab
+aaa
+aaa
+"}
+(285,1,1) = {"
+aaa
+aaa
+aab
aaa
aaa
aaa
@@ -133733,13 +135000,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -133777,22 +135041,79 @@ aaa
aaa
aaa
aaa
+aab
+aaa
+bdH
+lmz
+lmz
+lmz
+daz
+acJ
+ubA
+cck
+wyQ
+fmv
+ubA
+gMN
+mRn
+itf
+mHE
+vAU
+qwJ
+fJY
+kzT
+wkM
+oLm
+fcX
+kKv
+kKv
+dGl
+dGl
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aaa
+aaa
+aaa
aaa
wVb
bdo
-jbB
bdo
-bne
bdo
-jbB
bdo
-bne
+bdo
+bdo
+bdo
+bdo
+ovn
+ovn
+ovn
ovn
-gXv
ovn
-grX
ovn
-gXv
ovn
vTK
aaa
@@ -133838,7 +135159,7 @@ aab
aaa
aaa
"}
-(288,1,1) = {"
+(286,1,1) = {"
aaa
aaa
aab
@@ -133923,6 +135244,91 @@ aaa
aaa
aaa
aaa
+aab
+aaa
+bdH
+lmz
+lmz
+lmz
+daz
+cwS
+ffE
+vHa
+wpw
+ffE
+ffE
+ffE
+jqP
+cLo
+vfB
+viB
+dIi
+qLS
+vfB
+wkM
+jvB
+jvB
+ieF
+ieF
+pJR
+gPr
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aaa
+aaa
+aaa
+aaa
+wVb
+qsF
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+ovn
+ovn
+ovn
+ovn
+ovn
+ovn
+aXQ
+vTK
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -133936,13 +135342,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -133955,10 +135358,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(287,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -133981,24 +135388,6 @@ aaa
aaa
aaa
aaa
-wVb
-wVb
-wVb
-wVb
-wVb
-wVb
-wVb
-wVb
-wVb
-vTK
-vTK
-vTK
-vTK
-vTK
-vTK
-vTK
-vTK
-aaa
aaa
aaa
aaa
@@ -134037,14 +135426,8 @@ aaa
aaa
aaa
aaa
-aab
-aaa
-aaa
-"}
-(289,1,1) = {"
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134064,11 +135447,81 @@ aaa
aaa
aaa
aaa
+aab
aaa
+bdH
+lmz
+lmz
+lmz
+daz
+oRV
+ydI
+mdW
+jaH
+awu
+ydI
+aKs
+fMt
+gOs
+kXj
+pYi
+fMl
+gUN
+bLv
+bRo
+xvM
+osy
+cBm
+cBm
+iZw
+dQl
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
aaa
+wVb
+bdo
+jbB
+bdo
+bne
+bdo
+jbB
+bdo
+bne
+ovn
+gXv
+ovn
+grX
+ovn
+gXv
+ovn
+vTK
aaa
aaa
aaa
@@ -134108,10 +135561,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(288,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -134139,13 +135596,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134196,11 +135650,81 @@ aaa
aaa
aaa
aaa
+aab
aaa
+bdH
+lmz
+lmz
+lmz
+daz
+daz
+eKJ
+yaZ
+ffE
+hZj
+mUC
+daz
+daz
+daz
+tHu
+rna
+rna
+gXs
+ebN
+ebN
+ebN
+daz
+wnh
+wnh
+daz
+daz
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
aaa
+wVb
+wVb
+wVb
+wVb
+wVb
+wVb
+wVb
+wVb
+wVb
+vTK
+vTK
+vTK
+vTK
+vTK
+vTK
+vTK
+vTK
aaa
aaa
aaa
@@ -134244,7 +135768,7 @@ aab
aaa
aaa
"}
-(290,1,1) = {"
+(289,1,1) = {"
aaa
aaa
aab
@@ -134329,7 +135853,60 @@ aaa
aaa
aaa
aaa
+aab
aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+daz
+daz
+ocB
+nJH
+rnH
+daz
+daz
+sTV
+daz
+rna
+rna
+gbg
+uVv
+erN
+rna
+qQS
+kBy
+kBy
+gfu
+kBy
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -134342,13 +135919,8 @@ aaa
aaa
aaa
aaa
-aab
-aaa
-aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134395,10 +135967,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(290,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -134443,14 +136019,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-"}
-(291,1,1) = {"
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134484,7 +136056,60 @@ aaa
aaa
aaa
aaa
+aab
aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+daz
+daz
+daz
+daz
+daz
+tte
+hvw
+auf
+hTl
+xDC
+xDC
+yaQ
+bat
+mFN
+kSy
+dDp
+dDp
+frM
+lcg
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -134548,7 +136173,8 @@ aaa
aab
aaa
aaa
-aKQ
+"}
+(291,1,1) = {"
aaa
aaa
aab
@@ -134633,61 +136259,60 @@ aaa
aaa
aaa
aaa
+aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aaa
-aaa
-"}
-(292,1,1) = {"
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+sbJ
+sbJ
+sbJ
+daz
+jtj
+avK
+avK
+aCd
+avK
+mFN
+igr
+sEK
+sEK
+mlb
+lcg
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -134751,7 +136376,8 @@ aaa
aab
aaa
aaa
-aKQ
+"}
+(292,1,1) = {"
aaa
aaa
aab
@@ -134836,37 +136462,60 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
aaa
aaa
-"}
-(293,1,1) = {"
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+daz
+gAe
+rCi
+gba
+mUz
+our
+rna
+cxc
+kBy
+kBy
+khJ
+gyN
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
aaa
aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -134927,10 +136576,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(293,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -134951,13 +136604,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -135015,8 +136665,48 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+daz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -135052,14 +136742,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-"}
-(294,1,1) = {"
aaa
aaa
-aab
aaa
aaa
aaa
@@ -135093,10 +136779,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(294,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -135154,13 +136844,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -135181,8 +136868,48 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -135344,48 +137071,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aab
aaa
aaa
-aKQ
-aaa
-aaa
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
+aak
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aaa
aaa
aaa
@@ -135550,37 +137277,37 @@ aab
aab
aab
aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aaa
-aaa
-aKQ
aaa
-aaa
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
-aab
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+lmz
+bdH
+bdH
+bdH
aab
aab
aab
@@ -135752,39 +137479,39 @@ aaa
aaa
aaa
aaa
+aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aKQ
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aab
aaa
aaa
aaa
@@ -135955,39 +137682,39 @@ aaa
aaa
aaa
aaa
+aab
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
aKQ
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+bdH
+aab
aaa
aaa
aaa
@@ -136158,39 +137885,39 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aKQ
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aab
+aab
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+jRz
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aak
+aab
aaa
aaa
aaa
@@ -136390,7 +138117,7 @@ aaa
aaa
aaa
aaa
-aaa
+bdH
aaa
aaa
aaa
diff --git a/tgui/packages/tgui/interfaces/AresInterface.js b/tgui/packages/tgui/interfaces/AresInterface.js
new file mode 100644
index 000000000000..6bf85e96522f
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/AresInterface.js
@@ -0,0 +1,1493 @@
+import { useBackend } from '../backend';
+import { Flex, Box, Section, Button, Stack } from '../components';
+import { Window } from '../layouts';
+
+const PAGES = {
+ 'login': () => Login,
+ 'main': () => MainMenu,
+ 'announcements': () => AnnouncementLogs,
+ 'bioscans': () => BioscanLogs,
+ 'bombardments': () => BombardmentLogs,
+ 'apollo': () => ApolloLog,
+ 'access_log': () => AccessLogs,
+ 'delete_log': () => DeletionLogs,
+ 'talking': () => ARESTalk,
+ 'deleted_talks': () => DeletedTalks,
+ 'read_deleted': () => ReadingTalks,
+ 'security': () => Security,
+ 'requisitions': () => Requisitions,
+ 'antiair': () => AntiAir,
+ 'emergency': () => Emergency,
+};
+
+export const AresInterface = (props, context) => {
+ const { data } = useBackend(context);
+ const { current_menu } = data;
+ const PageComponent = PAGES[current_menu]();
+
+ return (
+
+ {logged_in}, {access_text}
+
+
+ Navigation Menu
+
+ Access Level 0
+ Access Level 1
+ Access Level 2
+ Access Level 4
+ Access Level 5
+ Access Level 8
+ Access Level 10
+
+ {logged_in}, {access_text}
+
+
+ Announcement Logs
+
+ {!!records_announcement.length && (
+
+ {logged_in}, {access_text}
+
+
+ Bioscan Logs
+
+ {!!records_bioscan.length && (
+
+ {logged_in}, {access_text}
+
+
+ Orbital Bombardment Logs
+
+ {!!records_bombardment.length && (
+
+ {logged_in}, {access_text}
+
+
+ Apollo Log
+
+ {apollo_log.map((apollo_message, i) => {
+ return (
+
+ {logged_in}, {access_text}
+
+
+ Access Log
+
+ {access_log.map((login, i) => {
+ return (
+
+ {logged_in}, {access_text}
+
+
+ Deletion Log
+
+ {!!records_deletion.length && (
+
+ {logged_in}, {access_text}
+
+
+ ARES Communication
+
+ {logged_in}, {access_text}
+
+
+ Deletion Log
+ {!!deleted_discussions.length && (
+
+ {logged_in}, {access_text}
+
+
+ Deleted Conversation
+ {deleted_conversation.map((message, i) => {
+ return (
+
+ {logged_in}, {access_text}
+
+
+ ASRS Audit Log
+ {!!records_requisition.length && (
+
+ {logged_in}, {access_text}
+
+
+ AntiAir Control Logs
+ {!!aa_adjustments.length && (
+
+ {logged_in}, {access_text}
+
+
+ Security Updates
+ {!!records_security.length && (
+
+ {logged_in}, {access_text}
+
+
+