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/defenses.dm b/code/__DEFINES/defenses.dm
index 57eb0c86f939..db615c2a0c78 100644
--- a/code/__DEFINES/defenses.dm
+++ b/code/__DEFINES/defenses.dm
@@ -8,7 +8,7 @@
// Defines for barricade upgrades
#define BARRICADE_UPGRADE_BURN "Biohazard Upgrade (+Burn)"
#define BARRICADE_UPGRADE_BRUTE "Reinforced Upgrade (+Brute)"
-#define BARRICADE_UPGRADE_EXPLOSIVE "Explosive Upgrade (+Explosive)"
+#define BARRICADE_UPGRADE_ANTIFF "Composite Upgrade (++Explosive, ++Projectile, ++Fire)"
// Defines for defense stats
#define DEFENSE_FUNCTIONAL 0
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/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm
index ce5e9a743bc5..a25293aebbd3 100644
--- a/code/game/machinery/telecomms/presets.dm
+++ b/code/game/machinery/telecomms/presets.dm
@@ -60,7 +60,7 @@
return TRUE
return FALSE
-/obj/structure/machinery/telecomms/relay/preset/tower/tcomms_startup()
+/obj/structure/machinery/telecomms/relay/preset/tower/update_state()
. = ..()
if(on)
playsound(src, 'sound/machines/tcomms_on.ogg', vol = 80, vary = FALSE, sound_range = 16, falloff = 0.5)
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/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm
index 6905a734b915..eac5f154e26e 100644
--- a/code/game/objects/structures/barricade/barricade.dm
+++ b/code/game/objects/structures/barricade/barricade.dm
@@ -30,6 +30,8 @@
var/brute_multiplier = 1
var/burn_multiplier = 1
var/explosive_multiplier = 1
+ var/brute_projectile_multiplier = 1
+ var/burn_flame_multiplier = 1
var/repair_materials = list()
var/metallic = TRUE
@@ -42,12 +44,12 @@
addtimer(CALLBACK(src, PROC_REF(update_icon)), 0)
starting_maxhealth = maxhealth
-/obj/structure/barricade/initialize_pass_flags(datum/pass_flags_container/PF)
+/obj/structure/barricade/initialize_pass_flags(datum/pass_flags_container/pass_flags)
..()
- if (PF)
- PF.flags_can_pass_all = NONE
- PF.flags_can_pass_front = NONE
- PF.flags_can_pass_behind = PASS_OVER^(PASS_OVER_ACID_SPRAY|PASS_OVER_THROW_MOB)
+ if (pass_flags)
+ pass_flags.flags_can_pass_all = NONE
+ pass_flags.flags_can_pass_front = NONE
+ pass_flags.flags_can_pass_behind = PASS_OVER^(PASS_OVER_ACID_SPRAY|PASS_OVER_THROW_MOB)
flags_can_pass_front_temp = PASS_OVER_THROW_MOB
flags_can_pass_behind_temp = PASS_OVER_THROW_MOB
@@ -95,7 +97,7 @@
overlays += image('icons/obj/structures/barricades.dmi', icon_state = "+burn_upgrade_[damage_state]")
if(BARRICADE_UPGRADE_BRUTE)
overlays += image('icons/obj/structures/barricades.dmi', icon_state = "+brute_upgrade_[damage_state]")
- if(BARRICADE_UPGRADE_EXPLOSIVE)
+ if(BARRICADE_UPGRADE_ANTIFF)
overlays += image('icons/obj/structures/barricades.dmi', icon_state = "+explosive_upgrade_[damage_state]")
if(is_wired)
@@ -106,34 +108,34 @@
..()
-/obj/structure/barricade/hitby(atom/movable/AM)
- if(AM.throwing && is_wired)
- if(iscarbon(AM))
- var/mob/living/carbon/C = AM
- if(C.mob_size <= MOB_SIZE_XENO)
- C.visible_message(SPAN_DANGER("The barbed wire slices into [C]!"),
+/obj/structure/barricade/hitby(atom/movable/atom_movable)
+ if(atom_movable.throwing && is_wired)
+ if(iscarbon(atom_movable))
+ var/mob/living/carbon/living_carbon = atom_movable
+ if(living_carbon.mob_size <= MOB_SIZE_XENO)
+ living_carbon.visible_message(SPAN_DANGER("The barbed wire slices into [living_carbon]!"),
SPAN_DANGER("The barbed wire slices into you!"))
- C.apply_damage(10)
- C.apply_effect(2, WEAKEN) //Leaping into barbed wire is VERY bad
- playsound(C, "bonk", 75, FALSE)
+ living_carbon.apply_damage(10)
+ living_carbon.apply_effect(2, WEAKEN) //Leaping into barbed wire is VERY bad
+ playsound(living_carbon, "bonk", 75, FALSE)
..()
-/obj/structure/barricade/Collided(atom/movable/AM)
+/obj/structure/barricade/Collided(atom/movable/atom_movable)
..()
- if(istype(AM, /mob/living/carbon/xenomorph/crusher))
- var/mob/living/carbon/xenomorph/crusher/C = AM
+ if(istype(atom_movable, /mob/living/carbon/xenomorph/crusher))
+ var/mob/living/carbon/xenomorph/crusher/living_carbon = atom_movable
- if (!C.throwing)
+ if (!living_carbon.throwing)
return
if(crusher_resistant)
- visible_message(SPAN_DANGER("[C] smashes into [src]!"))
+ visible_message(SPAN_DANGER("[living_carbon] smashes into [src]!"))
take_damage(150)
playsound(src, barricade_hitsound, 25, TRUE)
- else if(!C.stat)
- visible_message(SPAN_DANGER("[C] smashes through [src]!"))
+ else if(!living_carbon.stat)
+ visible_message(SPAN_DANGER("[living_carbon] smashes through [src]!"))
deconstruct(FALSE)
playsound(src, barricade_hitsound, 25, TRUE)
@@ -163,8 +165,8 @@
if(closed)
return NO_BLOCKED_MOVEMENT
- var/obj/structure/S = locate(/obj/structure) in get_turf(mover)
- if(S && S.climbable && !(S.flags_atom & ON_BORDER) && climbable && isliving(mover)) //Climbable objects allow you to universally climb over others
+ var/obj/structure/structure = locate(/obj/structure) in get_turf(mover)
+ if(structure && structure.climbable && !(structure.flags_atom & ON_BORDER) && climbable && isliving(mover)) //Climbable objects allow you to universally climb over others
return NO_BLOCKED_MOVEMENT
return ..()
@@ -180,33 +182,33 @@
/obj/structure/barricade/attack_animal(mob/user as mob)
return attack_alien(user)
-/obj/structure/barricade/attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/weapon/zombie_claws))
+/obj/structure/barricade/attackby(obj/item/item, mob/user)
+ if(istype(item, /obj/item/weapon/zombie_claws))
user.visible_message(SPAN_DANGER("The zombie smashed at the [src.barricade_type] barricade!"),
SPAN_DANGER("You smack the [src.barricade_type] barricade!"))
if(barricade_hitsound)
playsound(src, barricade_hitsound, 35, 1)
- hit_barricade(W)
+ hit_barricade(item)
return
- for(var/obj/effect/xenomorph/acid/A in src.loc)
- if(A.acid_t == src)
+ for(var/obj/effect/xenomorph/acid/acid in src.loc)
+ if(acid.acid_t == src)
to_chat(user, "You can't get near that, it's melting!")
return
- if(istype(W, /obj/item/stack/barbed_wire))
- var/obj/item/stack/barbed_wire/B = W
+ if(istype(item, /obj/item/stack/barbed_wire))
+ var/obj/item/stack/barbed_wire/barbed_wire = item
if(can_wire)
- user.visible_message(SPAN_NOTICE("[user] starts setting up [W.name] on [src]."),
- SPAN_NOTICE("You start setting up [W.name] on [src]."))
+ user.visible_message(SPAN_NOTICE("[user] starts setting up [item.name] on [src]."),
+ SPAN_NOTICE("You start setting up [item.name] on [src]."))
if(do_after(user, 20, INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src) && can_wire)
// Make sure there's still enough wire in the stack
- if(!B.use(1))
+ if(!barbed_wire.use(1))
return
playsound(src.loc, 'sound/effects/barbed_wire_movement.ogg', 25, 1)
- user.visible_message(SPAN_NOTICE("[user] sets up [W.name] on [src]."),
- SPAN_NOTICE("You set up [W.name] on [src]."))
+ user.visible_message(SPAN_NOTICE("[user] sets up [item.name] on [src]."),
+ SPAN_NOTICE("You set up [item.name] on [src]."))
maxhealth += 50
update_health(-50)
@@ -218,7 +220,7 @@
update_icon()
return
- if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS))
+ if(HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS))
if(is_wired)
user.visible_message(SPAN_NOTICE("[user] begin removing the barbed wire on [src]."),
SPAN_NOTICE("You begin removing the barbed wire on [src]."))
@@ -240,27 +242,27 @@
new/obj/item/stack/barbed_wire( src.loc )
return
- if(W.force > force_level_absorption)
+ if(item.force > force_level_absorption)
..()
if(barricade_hitsound)
playsound(src, barricade_hitsound, 35, 1)
- hit_barricade(W)
+ hit_barricade(item)
-/obj/structure/barricade/bullet_act(obj/item/projectile/P)
- bullet_ping(P)
+/obj/structure/barricade/bullet_act(obj/item/projectile/bullet)
+ bullet_ping(bullet)
- if(P.ammo.damage_type == BURN)
- P.damage = P.damage * burn_multiplier
+ if(bullet.ammo.damage_type == BURN)
+ bullet.damage = bullet.damage * burn_multiplier
else
- P.damage = P.damage * brute_multiplier
+ bullet.damage = bullet.damage * brute_projectile_multiplier
- if(istype(P.ammo, /datum/ammo/xeno/boiler_gas))
+ if(istype(bullet.ammo, /datum/ammo/xeno/boiler_gas))
take_damage(round(50 * burn_multiplier))
- else if(P.ammo.flags_ammo_behavior & AMMO_ANTISTRUCT)
- take_damage(P.damage * ANTISTRUCT_DMG_MULT_BARRICADES)
+ else if(bullet.ammo.flags_ammo_behavior & AMMO_ANTISTRUCT)
+ take_damage(bullet.damage * ANTISTRUCT_DMG_MULT_BARRICADES)
- take_damage(P.damage)
+ take_damage(bullet.damage)
return TRUE
@@ -282,11 +284,11 @@
/obj/structure/barricade/ex_act(severity, direction, cause_data)
- for(var/obj/structure/barricade/B in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade
- if(B.dir == reverse_direction(dir))
+ for(var/obj/structure/barricade/barricade in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade
+ if(barricade.dir == reverse_direction(dir))
spawn(1)
- if(B)
- B.ex_act(severity, direction)
+ if(barricade)
+ barricade.ex_act(severity, direction)
if(health <= 0)
var/location = get_turf(src)
handle_debris(severity, direction)
@@ -321,15 +323,15 @@
new /datum/effects/acid(src, null, null)
/obj/structure/barricade/flamer_fire_act(dam = BURN_LEVEL_TIER_1)
- take_damage(dam * burn_multiplier)
+ take_damage(dam * burn_flame_multiplier)
-/obj/structure/barricade/proc/hit_barricade(obj/item/I)
- take_damage(I.force * 0.5 * brute_multiplier)
+/obj/structure/barricade/proc/hit_barricade(obj/item/item)
+ take_damage(item.force * 0.5 * brute_multiplier)
/obj/structure/barricade/proc/take_damage(damage)
- for(var/obj/structure/barricade/B in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade
- if(B.dir == reverse_direction(dir))
- B.update_health(damage)
+ for(var/obj/structure/barricade/barricade in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade
+ if(barricade.dir == reverse_direction(dir))
+ barricade.update_health(damage)
update_health(damage)
@@ -357,12 +359,12 @@
if(50 to 75) damage_state = BARRICADE_DMG_SLIGHT
if(75 to INFINITY) damage_state = BARRICADE_DMG_NONE
-/obj/structure/barricade/proc/weld_cade(obj/item/tool/weldingtool/WT, mob/user)
+/obj/structure/barricade/proc/weld_cade(obj/item/tool/weldingtool/welder, mob/user)
if(!metallic)
user.visible_message(SPAN_WARNING("You can't weld \the [src]!"))
return FALSE
- if(!(WT.remove_fuel(2, user)))
+ if(!(welder.remove_fuel(2, user)))
return FALSE
user.visible_message(SPAN_NOTICE("[user] begins repairing damage to [src]."),
@@ -413,20 +415,20 @@
return ..()
-/obj/structure/barricade/proc/try_nailgun_usage(obj/item/W, mob/user)
- if(length(repair_materials) == 0 || health >= maxhealth || !istype(W, /obj/item/weapon/gun/smg/nailgun))
+/obj/structure/barricade/proc/try_nailgun_usage(obj/item/item, mob/user)
+ if(length(repair_materials) == 0 || health >= maxhealth || !istype(item, /obj/item/weapon/gun/smg/nailgun))
return FALSE
- var/obj/item/weapon/gun/smg/nailgun/NG = W
+ var/obj/item/weapon/gun/smg/nailgun/nailgun = item
- if(!NG.in_chamber || !NG.current_mag || NG.current_mag.current_rounds < 3)
+ if(!nailgun.in_chamber || !nailgun.current_mag || nailgun.current_mag.current_rounds < 3)
to_chat(user, SPAN_WARNING("You require at least 4 nails to complete this task!"))
return FALSE
// Check if either hand has a metal stack by checking the weapon offhand
// Presume the material is a sheet until proven otherwise.
var/obj/item/stack/sheet/material = null
- if(user.l_hand == NG)
+ if(user.l_hand == nailgun)
material = user.r_hand
else
material = user.l_hand
@@ -445,8 +447,8 @@
to_chat(user, SPAN_WARNING("You'll need some adequate repair material in your other hand to patch up [src]!"))
return FALSE
- var/soundchannel = playsound(src, NG.repair_sound, 25, 1)
- if(!do_after(user, NG.nailing_speed, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, src))
+ var/soundchannel = playsound(src, nailgun.repair_sound, 25, 1)
+ if(!do_after(user, nailgun.nailing_speed, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, src))
playsound(src, null, channel = soundchannel)
return FALSE
@@ -454,7 +456,7 @@
to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!"))
return FALSE
- if(!NG.in_chamber || !NG.current_mag || NG.current_mag.current_rounds < 3)
+ if(!nailgun.in_chamber || !nailgun.current_mag || nailgun.current_mag.current_rounds < 3)
to_chat(user, SPAN_WARNING("You require at least 4 nails to complete this task!"))
return FALSE
@@ -462,7 +464,7 @@
to_chat(user, SPAN_WARNING("You nail [material] to [src], restoring some of its integrity!"))
update_damage_state()
material.use(1)
- NG.current_mag.current_rounds -= 3
- NG.in_chamber = null
- NG.load_into_chamber()
+ nailgun.current_mag.current_rounds -= 3
+ nailgun.in_chamber = null
+ nailgun.load_into_chamber()
return TRUE
diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/metal.dm
index 40f784b064e4..4056ac9021f8 100644
--- a/code/game/objects/structures/barricade/metal.dm
+++ b/code/game/objects/structures/barricade/metal.dm
@@ -39,12 +39,12 @@
. += SPAN_NOTICE("The cade is protected by a biohazardous upgrade.")
if(BARRICADE_UPGRADE_BRUTE)
. += SPAN_NOTICE("The cade is protected by a reinforced upgrade.")
- if(BARRICADE_UPGRADE_EXPLOSIVE)
- . += SPAN_NOTICE("The cade is protected by an explosive upgrade.")
+ if(BARRICADE_UPGRADE_ANTIFF)
+ . += SPAN_NOTICE("The cade is protected by a composite upgrade.")
-/obj/structure/barricade/metal/attackby(obj/item/W, mob/user)
- if(iswelder(W))
- if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH))
+/obj/structure/barricade/metal/attackby(obj/item/item, mob/user)
+ if(iswelder(item))
+ if(!HAS_TRAIT(item, TRAIT_TOOL_BLOWTORCH))
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
if(user.action_busy)
@@ -52,7 +52,7 @@
if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You're not trained to repair [src]..."))
return
- var/obj/item/tool/weldingtool/WT = W
+ var/obj/item/tool/weldingtool/welder = item
if(damage_state == BARRICADE_DMG_HEAVY)
to_chat(user, SPAN_WARNING("[src] has sustained too much structural damage to be repaired."))
return
@@ -61,10 +61,10 @@
to_chat(user, SPAN_WARNING("[src] doesn't need repairs."))
return
- weld_cade(WT, user)
+ weld_cade(welder, user)
return
- if(try_nailgun_usage(W, user))
+ if(try_nailgun_usage(item, user))
return
for(var/obj/effect/xenomorph/acid/A in src.loc)
@@ -74,7 +74,7 @@
switch(build_state)
if(BARRICADE_BSTATE_SECURED) //Fully constructed step. Use screwdriver to remove the protection panels to reveal the bolts
- if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
+ if(HAS_TRAIT(item, TRAIT_TOOL_SCREWDRIVER))
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to touch [src]..."))
return
@@ -88,16 +88,16 @@
build_state = BARRICADE_BSTATE_UNSECURED
return
- if(istype(W, /obj/item/stack/sheet/metal))
+ if(istype(item, /obj/item/stack/sheet/metal))
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to touch [src]..."))
return
if(upgraded)
to_chat(user, SPAN_NOTICE("This barricade is already upgraded."))
return
- var/obj/item/stack/sheet/metal/M = W
+ var/obj/item/stack/sheet/metal/metal = item
if(user.client?.prefs?.no_radials_preference)
- var/choice = tgui_input_list(user, "Choose an upgrade to apply to the barricade", "Apply Upgrade", list(BARRICADE_UPGRADE_BURN, BARRICADE_UPGRADE_BRUTE, BARRICADE_UPGRADE_EXPLOSIVE))
+ var/choice = tgui_input_list(user, "Choose an upgrade to apply to the barricade", "Apply Upgrade", list(BARRICADE_UPGRADE_BURN, BARRICADE_UPGRADE_BRUTE, BARRICADE_UPGRADE_ANTIFF))
if(!choice)
return
if(!user.Adjacent(src))
@@ -106,33 +106,37 @@
if(upgraded)
to_chat(user, SPAN_NOTICE("This barricade is already upgraded."))
return
- if(M.get_amount() < 2)
+ if(metal.get_amount() < 2)
to_chat(user, SPAN_NOTICE("You lack the required metal."))
return
- if((usr.get_active_hand()) != M)
- to_chat(user, SPAN_WARNING("You must be holding the [M] to upgrade \the [src]!"))
+ if((usr.get_active_hand()) != metal)
+ to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!"))
return
switch(choice)
if(BARRICADE_UPGRADE_BURN)
burn_multiplier = 0.75
+ burn_flame_multiplier = 0.75
upgraded = BARRICADE_UPGRADE_BURN
to_chat(user, SPAN_NOTICE("You applied a biohazardous upgrade."))
if(BARRICADE_UPGRADE_BRUTE)
brute_multiplier = 0.75
+ brute_projectile_multiplier = 0.75
upgraded = BARRICADE_UPGRADE_BRUTE
to_chat(user, SPAN_NOTICE("You applied a reinforced upgrade."))
- if(BARRICADE_UPGRADE_EXPLOSIVE)
- explosive_multiplier = 0.75
- upgraded = BARRICADE_UPGRADE_EXPLOSIVE
- to_chat(user, SPAN_NOTICE("You applied an explosive upgrade."))
+ if(BARRICADE_UPGRADE_ANTIFF)
+ explosive_multiplier = 0.5
+ brute_projectile_multiplier = 0.5
+ burn_flame_multiplier = 0.5
+ upgraded = BARRICADE_UPGRADE_ANTIFF
+ to_chat(user, SPAN_NOTICE("You applied a composite upgrade."))
- M.use(2)
+ metal.use(2)
user.count_niche_stat(STATISTICS_NICHE_UPGRADE_CADES)
update_icon()
return
else
- var/static/list/cade_types = list(BARRICADE_UPGRADE_EXPLOSIVE = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "explosive_obj"), BARRICADE_UPGRADE_BRUTE = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "brute_obj"), BARRICADE_UPGRADE_BURN = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "burn_obj"))
+ var/static/list/cade_types = list(BARRICADE_UPGRADE_ANTIFF = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "explosive_obj"), BARRICADE_UPGRADE_BRUTE = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "brute_obj"), BARRICADE_UPGRADE_BURN = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "burn_obj"))
var/choice = show_radial_menu(user, src, cade_types, require_near = TRUE)
if(!choice)
return
@@ -142,33 +146,37 @@
if(upgraded)
to_chat(user, SPAN_NOTICE("This barricade is already upgraded."))
return
- if(M.get_amount() < 2)
+ if(metal.get_amount() < 2)
to_chat(user, SPAN_NOTICE("You lack the required metal."))
return
- if((usr.get_active_hand()) != M)
- to_chat(user, SPAN_WARNING("You must be holding the [M] to upgrade \the [src]!"))
+ if((usr.get_active_hand()) != metal)
+ to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!"))
return
switch(choice)
if(BARRICADE_UPGRADE_BURN)
burn_multiplier = 0.75
+ burn_flame_multiplier = 0.75
upgraded = BARRICADE_UPGRADE_BURN
to_chat(user, SPAN_NOTICE("You applied a biohazardous upgrade."))
if(BARRICADE_UPGRADE_BRUTE)
brute_multiplier = 0.75
+ brute_projectile_multiplier = 0.75
upgraded = BARRICADE_UPGRADE_BRUTE
to_chat(user, SPAN_NOTICE("You applied a reinforced upgrade."))
- if(BARRICADE_UPGRADE_EXPLOSIVE)
- explosive_multiplier = 0.75
- upgraded = BARRICADE_UPGRADE_EXPLOSIVE
- to_chat(user, SPAN_NOTICE("You applied an explosive upgrade."))
+ if(BARRICADE_UPGRADE_ANTIFF)
+ explosive_multiplier = 0.5
+ brute_projectile_multiplier = 0.5
+ burn_flame_multiplier = 0.5
+ upgraded = BARRICADE_UPGRADE_ANTIFF
+ to_chat(user, SPAN_NOTICE("You applied a composite upgrade."))
- M.use(2)
+ metal.use(2)
user.count_niche_stat(STATISTICS_NICHE_UPGRADE_CADES)
update_icon()
return
- if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL))
+ if(HAS_TRAIT(item, TRAIT_TOOL_MULTITOOL))
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to touch [src]..."))
return
@@ -181,13 +189,15 @@
upgraded = null
explosive_multiplier = initial(explosive_multiplier)
brute_multiplier = initial(brute_multiplier)
+ brute_projectile_multiplier = initial(brute_projectile_multiplier)
burn_multiplier = initial(burn_multiplier)
+ burn_flame_multiplier = initial(burn_flame_multiplier)
new stack_type (loc, 1)
update_icon()
return
if(BARRICADE_BSTATE_UNSECURED) //Protection panel removed step. Screwdriver to put the panel back, wrench to unsecure the anchor bolts
- if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
+ if(HAS_TRAIT(item, TRAIT_TOOL_SCREWDRIVER))
if(user.action_busy)
return
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
@@ -199,7 +209,7 @@
SPAN_NOTICE("You set [src]'s protection panel back."))
build_state = BARRICADE_BSTATE_SECURED
return
- if(HAS_TRAIT(W, TRAIT_TOOL_WRENCH))
+ if(HAS_TRAIT(item, TRAIT_TOOL_WRENCH))
if(user.action_busy)
return
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
@@ -214,7 +224,7 @@
update_icon() //unanchored changes layer
return
if(BARRICADE_BSTATE_MOVABLE) //Anchor bolts loosened step. Apply crowbar to unseat the panel and take apart the whole thing. Apply wrench to resecure anchor bolts
- if(HAS_TRAIT(W, TRAIT_TOOL_WRENCH))
+ if(HAS_TRAIT(item, TRAIT_TOOL_WRENCH))
if(user.action_busy)
return
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
@@ -224,8 +234,8 @@
if(B != src && B.dir == dir)
to_chat(user, SPAN_WARNING("There's already a barricade here."))
return
- var/turf/open/T = loc
- if(!(istype(T) && T.allow_construction))
+ var/turf/open/turf = loc
+ if(!(istype(turf) && turf.allow_construction))
to_chat(user, SPAN_WARNING("[src] must be secured on a proper surface!"))
return
playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1)
@@ -236,7 +246,7 @@
anchored = TRUE
update_icon() //unanchored changes layer
return
- if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR))
+ if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR))
if(user.action_busy)
return
if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED))
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/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index 1c74080a928f..278ffb666bfd 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -221,7 +221,6 @@
/obj/item/explosive/grenade,
/obj/item/device/binoculars,
/obj/item/attachable/bayonet,
- /obj/item/storage/backpack/general_belt,
/obj/item/storage/large_holster/machete,
/obj/item/weapon/baseballbat,
/obj/item/weapon/baseballbat/metal,
@@ -289,7 +288,6 @@
/obj/item/explosive/grenade,
/obj/item/device/binoculars,
/obj/item/attachable/bayonet,
- /obj/item/storage/backpack/general_belt,
/obj/item/storage/large_holster/machete,
/obj/item/weapon/baseballbat,
/obj/item/weapon/baseballbat/metal,
@@ -297,3 +295,7 @@
/obj/item/device/walkman,
)
+/obj/item/clothing/suit/storage/snow_suit/liaison
+ name = "liaison's winter coat"
+ desc = "A Weyland-Yutani winter coat. Only the best comfort for the liaison in a cold environment."
+ icon_state = "snowsuit_liaison"
diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm
index 17b98d9b9326..540c311f9221 100644
--- a/code/modules/clothing/under/marine_uniform.dm
+++ b/code/modules/clothing/under/marine_uniform.dm
@@ -777,12 +777,22 @@
icon_state = "liaison_regular"
worn_state = "liaison_regular"
+/obj/item/clothing/under/liaison_suit/charcoal
+ name = "liaison's charcoal suit"
+ desc = "A stiff, stylish charcoal suit commonly worn by businessmen from the Weyland-Yutani corporation. Expertly crafted to make you look like a prick."
+ icon_state = "liaison_charcoal"
+ worn_state = "liaison_charcoal"
+
/obj/item/clothing/under/liaison_suit/outing
name = "liaison's outfit"
desc = "A casual outfit consisting of a collared shirt and a vest. Looks like something you might wear on the weekends, or on a visit to a derelict colony."
icon_state = "liaison_outing"
worn_state = "liaison_outing"
+/obj/item/clothing/under/liaison_suit/outing/red
+ icon_state = "liaison_outing_red"
+ worn_state = "liaison_outing_red"
+
/obj/item/clothing/under/liaison_suit/formal
name = "liaison's white suit"
desc = "A formal, white suit. Looks like something you'd wear to a funeral, a Weyland-Yutani corporate dinner, or both. Stiff as a board, but makes you feel like rolling out of a Rolls-Royce."
@@ -795,6 +805,12 @@
icon_state = "liaison_suspenders"
worn_state = "liaison_suspenders"
+/obj/item/clothing/under/liaison_suit/blazer
+ name = "liaison's blue blazer"
+ desc = "A stiff but casual blue blazer. Similar can be found in any Weyland-Yutani office. Only the finest wear for the galaxy's most cunning."
+ icon_state = "liaison_blue_blazer"
+ worn_state = "liaison_blue_blazer"
+
/obj/item/clothing/under/marine/reporter
name = "combat correspondent uniform"
desc = "A relaxed and robust uniform fit for any potential reporting needs."
diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm
index 11a0b0de597f..c38e540efb30 100644
--- a/code/modules/cm_aliens/structures/special/pylon_core.dm
+++ b/code/modules/cm_aliens/structures/special/pylon_core.dm
@@ -162,9 +162,14 @@
if(linked_hive.hijack_burrowed_surge && (last_surge_time + surge_cooldown) < world.time)
last_surge_time = world.time
linked_hive.stored_larva++
+ linked_hive.hijack_burrowed_left--
announce_dchat("The hive has gained another burrowed larva! Use the Join As Xeno verb to take it.", src)
if(surge_cooldown > 30 SECONDS) //mostly for sanity purposes
surge_cooldown = surge_cooldown - surge_incremental_reduction //ramps up over time
+ if(linked_hive.hijack_burrowed_left < 1)
+ linked_hive.hijack_burrowed_surge = FALSE
+ xeno_message(SPAN_XENOANNOUNCE("The hive's power wanes. You will no longer gain pooled larva over time."), 3, linked_hive.hivenumber)
+
// Hive core can repair itself over time
if(health < maxhealth && last_healed <= world.time)
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/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm
index 431b03fb31d3..14e990809f4f 100644
--- a/code/modules/cm_marines/orbital_cannon.dm
+++ b/code/modules/cm_marines/orbital_cannon.dm
@@ -484,14 +484,13 @@ var/list/ob_type_fuel_requirements
var/list/turf_list = list()
for(var/turf/T in range(range_num, target))
- if(protected_by_pylon(TURF_PROTECTION_OB, T))
- continue
-
turf_list += T
for(var/i = 1 to total_amount)
for(var/k = 1 to instant_amount)
var/turf/U = pick(turf_list)
+ if(protected_by_pylon(TURF_PROTECTION_OB, U)) //If the turf somehow gained OB protection while the cluster was firing
+ continue
fire_in_a_hole(U)
sleep(delay_between_clusters)
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/survivors.dm b/code/modules/gear_presets/survivors.dm
index 42d5ec0915bb..97b974b8a5ec 100644
--- a/code/modules/gear_presets/survivors.dm
+++ b/code/modules/gear_presets/survivors.dm
@@ -346,6 +346,20 @@
..()
+/datum/equipment_preset/survivor/corporate/solaris
+ name = "Survivor - Solaris Ridge Corporate Liaison"
+ assignment = "Solaris Ridge Corporate Liaison"
+
+/datum/equipment_preset/survivor/corporate/solaris/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/outing/red(new_human), WEAR_BODY)
+ if(new_human.disabilities & NEARSIGHTED)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/prescription(new_human), WEAR_EYES)
+ else
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(new_human), WEAR_EYES)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+
+ ..()
+
// ----- Security Survivor
/datum/equipment_preset/survivor/security
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/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm
index 8413b6d118e6..84dacf4f8bfb 100644
--- a/code/modules/mentor/mentorhelp.dm
+++ b/code/modules/mentor/mentorhelp.dm
@@ -108,28 +108,28 @@
sound_to(recipient, 'sound/effects/mhelp.ogg')
to_chat(recipient, wrap_message(msg, sender))
- for(var/client/C in GLOB.admins)
+ for(var/client/admin_client in GLOB.admins)
var/formatted = msg
var/soundfile
- if(!C || C == recipient)
+ if(!admin_client || admin_client == recipient)
continue
// Initial broadcast
- else if(!staff_only && !recipient && CLIENT_HAS_RIGHTS(C, R_MENTOR))
+ else if(!staff_only && !recipient && CLIENT_HAS_RIGHTS(admin_client, R_MENTOR))
formatted = wrap_message(formatted, sender)
soundfile = 'sound/effects/mhelp.ogg'
- // Staff eavesdrop
- else if(CLIENT_HAS_RIGHTS(C, R_MENTOR) && CLIENT_IS_STAFF(C))
+ // Eavesdrop
+ else if(CLIENT_HAS_RIGHTS(admin_client, R_MENTOR) && (!staff_only || CLIENT_IS_STAFF(admin_client)) && admin_client != sender)
if(include_keys)
formatted = SPAN_MENTORHELP(key_name(sender, TRUE) + " -> " + key_name(recipient, TRUE) + ": ") + msg
else continue
- if(soundfile && with_sound && (C.prefs?.toggles_sound & SOUND_ADMINHELP))
- sound_to(C, soundfile)
- to_chat(C, formatted)
+ if(soundfile && with_sound && (admin_client.prefs?.toggles_sound & SOUND_ADMINHELP))
+ sound_to(admin_client, soundfile)
+ to_chat(admin_client, formatted)
return
// Makes the sender input a message and sends it
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/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm
index 29779480f143..d3c2b725d7ef 100644
--- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm
@@ -22,8 +22,8 @@
affected_mob.status_flags |= XENO_HOST
START_PROCESSING(SSobj, src)
if(iscarbon(affected_mob))
- var/mob/living/carbon/C = affected_mob
- C.med_hud_set_status()
+ var/mob/living/carbon/affected_carbon = affected_mob
+ affected_carbon.med_hud_set_status()
else
return INITIALIZE_HINT_QDEL
@@ -31,8 +31,8 @@
if(affected_mob)
affected_mob.status_flags &= ~(XENO_HOST)
if(iscarbon(affected_mob))
- var/mob/living/carbon/C = affected_mob
- C.med_hud_set_status()
+ var/mob/living/carbon/affected_carbon = affected_mob
+ affected_carbon.med_hud_set_status()
STOP_PROCESSING(SSobj, src)
affected_mob = null
GLOB.player_embryo_list -= src
@@ -48,24 +48,24 @@
affected_mob.status_flags &= ~(XENO_HOST)
STOP_PROCESSING(SSobj, src)
if(iscarbon(affected_mob))
- var/mob/living/carbon/C = affected_mob
- C.med_hud_set_status()
+ var/mob/living/carbon/affected_carbon = affected_mob
+ affected_carbon.med_hud_set_status()
affected_mob = null
return FALSE
if(affected_mob.stat == DEAD)
if(ishuman(affected_mob))
- var/mob/living/carbon/human/H = affected_mob
- if(world.time > H.timeofdeath + H.revive_grace_period) //Can't be defibbed.
- var/mob/living/carbon/xenomorph/larva/L = locate() in affected_mob
- if(L)
- L.chest_burst(affected_mob)
+ var/mob/living/carbon/human/affected_human = affected_mob
+ if(world.time > affected_human.timeofdeath + affected_human.revive_grace_period) //Can't be defibbed.
+ var/mob/living/carbon/xenomorph/larva/larva_embryo = locate() in affected_mob
+ if(larva_embryo)
+ larva_embryo.chest_burst(affected_mob)
qdel(src)
return FALSE
else
- var/mob/living/carbon/xenomorph/larva/L = locate() in affected_mob
- if(L)
- L.chest_burst(affected_mob)
+ var/mob/living/carbon/xenomorph/larva/larva_embryo = locate() in affected_mob
+ if(larva_embryo)
+ larva_embryo.chest_burst(affected_mob)
STOP_PROCESSING(SSobj, src)
return FALSE
@@ -89,12 +89,12 @@
if(stage < 5)
counter += 1 * hive.larva_gestation_multiplier
- if(stage < 5 && counter >= 120)
+ if(stage < 5 && counter >= 90)
counter = 0
stage++
if(iscarbon(affected_mob))
- var/mob/living/carbon/C = affected_mob
- C.med_hud_set_status()
+ var/mob/living/carbon/affected_carbon = affected_mob
+ affected_carbon.med_hud_set_status()
switch(stage)
if(2)
@@ -132,9 +132,9 @@
if(6)
larva_autoburst_countdown--
if(!larva_autoburst_countdown)
- var/mob/living/carbon/xenomorph/larva/L = locate() in affected_mob
- if(L)
- L.chest_burst(affected_mob)
+ var/mob/living/carbon/xenomorph/larva/larva_embryo = locate() in affected_mob
+ if(larva_embryo)
+ larva_embryo.chest_burst(affected_mob)
//We look for a candidate. If found, we spawn the candidate as a larva
//Order of priority is bursted individual (if xeno is enabled), then random candidate, and then it's up for grabs and spawns braindead
@@ -256,36 +256,36 @@
victim.spawn_gibs()
- for(var/mob/living/carbon/xenomorph/larva/L in victim)
- var/datum/hive_status/hive = GLOB.hive_datum[L.hivenumber]
- L.forceMove(get_turf(victim)) //moved to the turf directly so we don't get stuck inside a cryopod or another mob container.
- playsound(L, pick('sound/voice/alien_chestburst.ogg','sound/voice/alien_chestburst2.ogg'), 25)
+ for(var/mob/living/carbon/xenomorph/larva/larva_embryo in victim)
+ var/datum/hive_status/hive = GLOB.hive_datum[larva_embryo.hivenumber]
+ larva_embryo.forceMove(get_turf(victim)) //moved to the turf directly so we don't get stuck inside a cryopod or another mob container.
+ playsound(larva_embryo, pick('sound/voice/alien_chestburst.ogg','sound/voice/alien_chestburst2.ogg'), 25)
- if(L.client)
- L.set_lighting_alpha_from_prefs(L.client)
+ if(larva_embryo.client)
+ larva_embryo.set_lighting_alpha_from_prefs(larva_embryo.client)
- L.attack_log += "\[[time_stamp()]\] chestbursted from [key_name(victim)]"
- victim.attack_log += "\[[time_stamp()]\] Was chestbursted, larva was [key_name(L)]"
+ larva_embryo.attack_log += "\[[time_stamp()]\] chestbursted from [key_name(victim)]"
+ victim.attack_log += "\[[time_stamp()]\] Was chestbursted, larva was [key_name(larva_embryo)]"
if(burstcount)
- step(L, pick(cardinal))
+ step(larva_embryo, pick(cardinal))
if(round_statistics)
round_statistics.total_larva_burst++
burstcount++
- if(!L.ckey && L.burrowable && loc && is_ground_level(loc.z) && (locate(/obj/structure/bed/nest) in loc) && hive.living_xeno_queen && hive.living_xeno_queen.z == loc.z)
- L.visible_message(SPAN_XENODANGER("[L] quickly burrows into the ground."))
- if(round_statistics && !L.statistic_exempt)
+ if(!larva_embryo.ckey && larva_embryo.burrowable && loc && is_ground_level(loc.z) && (locate(/obj/structure/bed/nest) in loc) && hive.living_xeno_queen && hive.living_xeno_queen.z == loc.z)
+ larva_embryo.visible_message(SPAN_XENODANGER("[larva_embryo] quickly burrows into the ground."))
+ if(round_statistics && !larva_embryo.statistic_exempt)
round_statistics.track_new_participant(faction, -1) // keep stats sane
hive.stored_larva++
hive.hive_ui.update_burrowed_larva()
- qdel(L)
+ qdel(larva_embryo)
if(!victim.first_xeno)
- to_chat(L, SPAN_XENOHIGHDANGER("The Queen's will overwhelms your instincts..."))
- to_chat(L, SPAN_XENOHIGHDANGER("\"[hive.hive_orders]\""))
- log_attack("[key_name(victim)] chestbursted, the larva was [key_name(L)].") //this is so that admins are not spammed with los logs
+ to_chat(larva_embryo, SPAN_XENOHIGHDANGER("The Queen's will overwhelms your instincts..."))
+ to_chat(larva_embryo, SPAN_XENOHIGHDANGER("\"[hive.hive_orders]\""))
+ log_attack("[key_name(victim)] chestbursted, the larva was [key_name(larva_embryo)].") //this is so that admins are not spammed with los logs
for(var/obj/item/alien_embryo/AE in victim)
qdel(AE)
@@ -295,31 +295,31 @@
victim.gib(cause)
else
if(ishuman(victim))
- var/mob/living/carbon/human/H = victim
- H.last_damage_data = cause
+ var/mob/living/carbon/human/victim_human = victim
+ victim_human.last_damage_data = cause
var/datum/internal_organ/O
var/i
for(i in list("heart","lungs")) //This removes (and later garbage collects) both organs. No heart means instant death.
- O = H.internal_organs_by_name[i]
- H.internal_organs_by_name -= i
- H.internal_organs -= O
+ O = victim_human.internal_organs_by_name[i]
+ victim_human.internal_organs_by_name -= i
+ victim_human.internal_organs -= O
victim.death(cause) // Certain species were still surviving bursting (predators), DEFINITELY kill them this time.
victim.chestburst = 2
victim.update_burst()
// Squeeze thru dense objects as a larva, as airlocks
-/mob/living/carbon/xenomorph/larva/proc/scuttle(obj/structure/S)
+/mob/living/carbon/xenomorph/larva/proc/scuttle(obj/structure/target)
var/move_dir = get_dir(src, loc)
- for(var/atom/movable/AM in get_turf(S))
- if(AM != S && AM.density && AM.BlockedPassDirs(src, move_dir))
- to_chat(src, SPAN_WARNING("\The [AM] prevents you from squeezing under \the [S]!"))
+ for(var/atom/movable/AM in get_turf(target))
+ if(AM != target && AM.density && AM.BlockedPassDirs(src, move_dir))
+ to_chat(src, SPAN_WARNING("\The [AM] prevents you from squeezing under \the [target]!"))
return
// Is it an airlock?
- if(istype(S, /obj/structure/machinery/door/airlock))
- var/obj/structure/machinery/door/airlock/A = S
- if(A.locked || A.welded) //Can't pass through airlocks that have been bolted down or welded
- to_chat(src, SPAN_WARNING("\The [A] is locked down tight. You can't squeeze underneath!"))
+ if(istype(target, /obj/structure/machinery/door/airlock))
+ var/obj/structure/machinery/door/airlock/selected_airlock = target
+ if(selected_airlock.locked || selected_airlock.welded) //Can't pass through airlocks that have been bolted down or welded
+ to_chat(src, SPAN_WARNING("\The [selected_airlock] is locked down tight. You can't squeeze underneath!"))
return
- visible_message(SPAN_WARNING("\The [src] scuttles underneath \the [S]!"), \
- SPAN_WARNING("You squeeze and scuttle underneath \the [S]."), null, 5)
- forceMove(S.loc)
+ visible_message(SPAN_WARNING("\The [src] scuttles underneath \the [target]!"), \
+ SPAN_WARNING("You squeeze and scuttle underneath \the [target]."), null, 5)
+ forceMove(target.loc)
diff --git a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm
index 212688c8c98f..8b3b1d54f26d 100644
--- a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm
@@ -209,6 +209,11 @@
if(stat == UNCONSCIOUS)
return
+ // Force reset throw now because [/atom/movable/proc/launch_impact] only does that later on
+ // If we DON'T, step()'s move below can collide, rebound, trigger this proc again, into infinite recursion
+ throwing = FALSE
+ rebounding = FALSE
+
if(leaping && can_hug(L, hivenumber))
attach(L)
else if(L.density)
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 20bd029f5c94..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
@@ -472,22 +472,6 @@
user_xeno.hive.banished_ckeys.Remove(banished_name)
return ..()
-/datum/action/xeno_action/activable/secrete_resin/remote/queen/use_ability(atom/A)
- . = ..()
- if(!.)
- return
-
- if(!boosted)
- return
- var/mob/living/carbon/xenomorph/X = owner
- var/datum/hive_status/HS = X.hive
- if(!HS || !HS.hive_location)
- return
- // 5 screen radius
- if(get_dist(A, HS.hive_location) > 35)
- // Apply the normal cooldown if not building near the hive
- apply_cooldown_override(initial(xeno_cooldown))
-
/datum/action/xeno_action/onclick/eye
name = "Enter Eye Form"
action_icon_state = "queen_eye"
@@ -528,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/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
index 9eb8601bb6dc..246e2d2809db 100644
--- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
+++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
@@ -287,6 +287,9 @@
SPAN_DANGER("You nudge your head against [src]."), null, 5, CHAT_TYPE_XENO_FLUFF)
/mob/living/proc/is_xeno_grabbable()
+ if(stat == DEAD)
+ return FALSE
+
return TRUE
/mob/living/carbon/human/is_xeno_grabbable()
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm
index 04b7e04c2da5..4cf0ff113615 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm
@@ -170,3 +170,5 @@
/mob/living/carbon/xenomorph/larva/emote(act, m_type, message, intentional, force_silence)
playsound(loc, "alien_roar_larva", 15)
+/mob/living/carbon/xenomorph/larva/is_xeno_grabbable()
+ return TRUE
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/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
index b5431720e14a..5d3ee0b04ba7 100644
--- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
@@ -285,6 +285,8 @@
var/larva_gestation_multiplier = 1
var/bonus_larva_spawn_chance = 1
var/hijack_burrowed_surge = FALSE //at hijack, start spawning lots of burrowed
+ /// how many burrowed is going to spawn during larva surge
+ var/hijack_burrowed_left = 0
var/ignore_slots = FALSE
var/dynamic_evolution = TRUE
@@ -877,6 +879,8 @@
/datum/hive_status/proc/abandon_on_hijack()
var/area/hijacked_dropship = get_area(living_xeno_queen)
+ var/shipside_humans_weighted_count = 0
+ var/xenos_count = 0
for(var/name_ref in hive_structures)
for(var/obj/effect/alien/resin/special/S in hive_structures[name_ref])
if(get_area(S) == hijacked_dropship)
@@ -885,6 +889,10 @@
qdel(S)
for(var/mob/living/carbon/xenomorph/xeno as anything in totalXenos)
if(get_area(xeno) != hijacked_dropship && xeno.loc && is_ground_level(xeno.loc.z))
+ if(isfacehugger(xeno))
+ to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, you quickly find a hiding place to enter hibernation as you lose touch with the hive mind."))
+ qdel(xeno)
+ continue
if(xeno.hunter_data.hunted && !isqueen(xeno))
to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, seperating you from her hive! You must defend yourself from the headhunter before you can enter hibernation..."))
xeno.set_hive_and_update(XENO_HIVE_FORSAKEN)
@@ -895,6 +903,9 @@
xeno.handle_stomach_contents()
qdel(xeno)
stored_larva++
+ continue
+ if(!isfacehugger(xeno))
+ xenos_count++
for(var/i in GLOB.alive_mob_list)
var/mob/living/potential_host = i
if(!(potential_host.status_flags & XENO_HOST))
@@ -907,7 +918,13 @@
for(var/obj/item/alien_embryo/embryo in potential_host)
embryo.hivenumber = XENO_HIVE_FORSAKEN
potential_host.update_med_icon()
+ for(var/mob/living/carbon/human/current_human as anything in GLOB.alive_human_list)
+ if((isspecieshuman(current_human) || isspeciessynth(current_human)) && current_human.job)
+ var/turf/turf = get_turf(current_human)
+ if(is_mainship_level(turf?.z))
+ shipside_humans_weighted_count += RoleAuthority.calculate_role_weight(current_human.job)
hijack_burrowed_surge = TRUE
+ hijack_burrowed_left = max(n_ceil(shipside_humans_weighted_count * 0.5) - xenos_count, 5)
hivecore_cooldown = FALSE
xeno_message(SPAN_XENOBOLDNOTICE("The weeds have recovered! A new hive core can be built!"),3,hivenumber)
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 e664d0165c78..ce151c14324c 100644
--- a/code/modules/shuttle/dropship_hijack.dm
+++ b/code/modules/shuttle/dropship_hijack.dm
@@ -1,3 +1,5 @@
+#define HIJACK_CRASH_SITE_OFFSET_X -5
+#define HIJACK_CRASH_SITE_OFFSET_Y -11
/datum/dropship_hijack
var/obj/docking_port/mobile/shuttle
@@ -90,9 +92,10 @@
var/obj/docking_port/stationary/marine_dropship/crash_site/target_site = new()
crash_site = target_site
- crash_site.x = target.x - 5
- crash_site.y = target.y - 11
- crash_site.z = target.z
+ var/turf/offset_target = locate(target.x + HIJACK_CRASH_SITE_OFFSET_X, target.y + HIJACK_CRASH_SITE_OFFSET_Y, target.z)
+ if(!offset_target)
+ offset_target = target // Welp the offsetting failed so...
+ target_site.forceMove(offset_target)
target_site.name = "[shuttle] crash site"
target_site.id = "crash_site_[shuttle.id]"
@@ -116,8 +119,11 @@
remaining_crash_sites -= target_ship_section
var/new_target_ship_section = pick(remaining_crash_sites)
var/turf/target = get_crashsite_turf(new_target_ship_section)
- crash_site.Move(target)
- marine_announcement("A hostile aircraft on course for the [target_ship_section] has been successfully deterred.", "IX-50 MGAD System")
+ var/turf/offset_target = locate(target.x + HIJACK_CRASH_SITE_OFFSET_X, target.y + HIJACK_CRASH_SITE_OFFSET_Y, target.z)
+ 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", logging = ARES_LOG_SECURITY)
target_ship_section = new_target_ship_section
// TODO mobs not alerted
for(var/area/internal_area in shuttle.shuttle_areas)
@@ -143,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
@@ -196,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)
@@ -218,3 +223,6 @@
else
CRASH("Crash site [ship_section] unknown.")
return pick(turfs)
+
+#undef HIJACK_CRASH_SITE_OFFSET_X
+#undef HIJACK_CRASH_SITE_OFFSET_Y
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/html/changelogs/AutoChangeLog-pr-3298.yml b/html/changelogs/AutoChangeLog-pr-3298.yml
new file mode 100644
index 000000000000..0a75d2215043
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3298.yml
@@ -0,0 +1,15 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Added an admin button for an ARES bioscan. Slightly refactored how Bioscans trigger for marines, relying on an ARES processor."
+ - rscadd: "Added individual proccessors for ARES systems. These are WIP and will eventually have damage and repair interactions."
+ - rscadd: "Added an ARES interaction console in the AI Core room, which holds logs for most ARES functions."
+ - rscadd: "Added the ability for ARES console to call ERT or Distress."
+ - rscadd: "Added motion triggers in ARES core and shipside comms that send alerts over Apollo."
+ - rscadd: "Added a 1to1 conversation feature between ARES and users of the interface console."
+ - rscadd: "Added preset open versions of blended poddoors."
+ - rscadd: "Added a console for directing Working Joes. This is largely WIP for future PR(s)."
+ - rscadd: "Added subtypes of air pipes that don't explode on hijack, used these in ARES core."
+ - maptweak: "Remodelled ARES Core onto a fake-z, and added the new processors."
+ - bugfix: "door_control buttons now respect being indestructable when processing explosions."
+ - maptweak: "Fixed the M39s overflowing in brig armory due to use of landmarks."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3577.yml b/html/changelogs/AutoChangeLog-pr-3577.yml
deleted file mode 100644
index 759df8eb0357..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3577.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "TeDGamer Drathek"
-delete-after: True
-changes:
- - bugfix: "Boilers from other hives generate proper colored IFFed gas"
- - bugfix: "Fixes some death causes with boiler acid gas (for bombard, shroud, and gibbing), neurotoxin gas/stabs, acid shotgun, and xeno spits"
- - balance: "Neurotoxin stops processing only in dead mobs"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3666.yml b/html/changelogs/AutoChangeLog-pr-3666.yml
new file mode 100644
index 000000000000..d7d8860c237e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3666.yml
@@ -0,0 +1,4 @@
+author: "Morrow"
+delete-after: True
+changes:
+ - balance: "Xenos no longer can pull dead xenos"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3688.yml b/html/changelogs/AutoChangeLog-pr-3688.yml
deleted file mode 100644
index 0fa45242846e..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3688.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - rscadd: "Changed min and max Predator ages from 20 - 10000 to 175 - 3000"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3717.yml b/html/changelogs/AutoChangeLog-pr-3717.yml
new file mode 100644
index 000000000000..6d6327ea63a7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3717.yml
@@ -0,0 +1,4 @@
+author: "Drathek"
+delete-after: True
+changes:
+ - bugfix: "Fixed the crashsite offset for a hijack shuttle that gets deterred by the MGAD System"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3718.yml b/html/changelogs/AutoChangeLog-pr-3718.yml
new file mode 100644
index 000000000000..41f5322a2493
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3718.yml
@@ -0,0 +1,4 @@
+author: "TheGamerdk"
+delete-after: True
+changes:
+ - balance: "Queen boosted building no longer has 2 second cooldown when far from hive"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3722.yml b/html/changelogs/AutoChangeLog-pr-3722.yml
deleted file mode 100644
index f915061d5db7..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3722.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "TheGamerdk"
-delete-after: True
-changes:
- - bugfix: "The game will no longer falsely claim there is no CO"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3723.yml b/html/changelogs/AutoChangeLog-pr-3723.yml
new file mode 100644
index 000000000000..987b7eeec708
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3723.yml
@@ -0,0 +1,4 @@
+author: "TheGamerdk"
+delete-after: True
+changes:
+ - bugfix: "Communications intel objective now actually works"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3730.yml b/html/changelogs/AutoChangeLog-pr-3730.yml
new file mode 100644
index 000000000000..9ae18e6bc788
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3730.yml
@@ -0,0 +1,4 @@
+author: "fira"
+delete-after: True
+changes:
+ - bugfix: "Fixed a MC crash related to NPC huggers rebounding logic."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3731.yml b/html/changelogs/AutoChangeLog-pr-3731.yml
new file mode 100644
index 000000000000..21fd76664d2b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3731.yml
@@ -0,0 +1,4 @@
+author: "blackdragonTOW"
+delete-after: True
+changes:
+ - maptweak: "Added a small light to unlit rooms."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3736.yml b/html/changelogs/AutoChangeLog-pr-3736.yml
new file mode 100644
index 000000000000..c1eba0beabfd
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3736.yml
@@ -0,0 +1,4 @@
+author: "Morrow"
+delete-after: True
+changes:
+ - rscdel: "Removed toxin mags on shivas"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3742.yml b/html/changelogs/AutoChangeLog-pr-3742.yml
new file mode 100644
index 000000000000..7319ac52f8d9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3742.yml
@@ -0,0 +1,6 @@
+author: "SpartanBobby"
+delete-after: True
+changes:
+ - maptweak: "Minor decal changes to LV522"
+ - maptweak: "Buffed sec armory on LV522"
+ - maptweak: "LV522 Breaching charge moved to the PROP APC made UNACIDABLE"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3743.yml b/html/changelogs/AutoChangeLog-pr-3743.yml
new file mode 100644
index 000000000000..084e74fc2c2e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3743.yml
@@ -0,0 +1,4 @@
+author: "Katskan"
+delete-after: True
+changes:
+ - balance: "Removed G8A storage from various snow suits and parkas"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3746.yml b/html/changelogs/AutoChangeLog-pr-3746.yml
new file mode 100644
index 000000000000..48b25b9efb1a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3746.yml
@@ -0,0 +1,4 @@
+author: "IowaPotatoFarmer"
+delete-after: True
+changes:
+ - rscadd: "Solaris Ridge now has a Corporate Liaison survivor."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3748.yml b/html/changelogs/AutoChangeLog-pr-3748.yml
new file mode 100644
index 000000000000..74c02e602003
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3748.yml
@@ -0,0 +1,5 @@
+author: "Diegoflores31"
+delete-after: True
+changes:
+ - balance: "reduced Larva Burst time from 10 minutes to 7.5 minutes"
+ - refactor: "changed 1 letter vars."
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-06.yml b/html/changelogs/archive/2023-06.yml
index df1b3b34b455..71aeb035f4b8 100644
--- a/html/changelogs/archive/2023-06.yml
+++ b/html/changelogs/archive/2023-06.yml
@@ -356,3 +356,30 @@
- bugfix: Fix a possibility of banished larva refunding double the larva
blackdragonTOW:
- spellcheck: multiple typos and grammar changes in the round start tooltips.
+2023-06-27:
+ TeDGamer Drathek:
+ - bugfix: Boilers from other hives generate proper colored IFFed gas
+ - bugfix: Fixes some death causes with boiler acid gas (for bombard, shroud, and
+ gibbing), neurotoxin gas/stabs, acid shotgun, and xeno spits
+ - balance: Neurotoxin stops processing only in dead mobs
+ TheGamerdk:
+ - bugfix: The game will no longer falsely claim there is no CO
+ realforest2001:
+ - rscadd: Changed min and max Predator ages from 20 - 10000 to 175 - 3000
+2023-06-28:
+ Drathek:
+ - admin: Mentors can now eavesdrop on mentor messages, and the responder to a mhelp
+ doesn't get double logging from eavesdropping.
+ Morrow, Thwomper:
+ - rscadd: Added three new uniforms and a snow jacket for the CL.
+ TheGamerdk:
+ - balance: Cluster OBs will now no longer hit turfs that have gotten OB protection
+ after the initial OB was fired.
+ ihatethisengine:
+ - balance: larva surge is limited by marines/xenos ratio
+ - bugfix: xenos no longer get free larva from abandoned facehuggers during hijack
+ - balance: explosive barricade upgrade provides better protection against explosions
+ (25% to 50%)
+ - balance: explosive barricade upgrade provides strong protection against brute-based
+ projectiles (50%)
+ - balance: explosive barricade upgrade provides strong protection against fire (50%)
diff --git a/icons/mob/humans/onmob/suit_0.dmi b/icons/mob/humans/onmob/suit_0.dmi
index 4d63b7abd7f1..5cccc4c2e0e0 100644
Binary files a/icons/mob/humans/onmob/suit_0.dmi and b/icons/mob/humans/onmob/suit_0.dmi differ
diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi
index 4973a59a69c4..cac9869c9034 100644
Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ
diff --git a/icons/obj/items/clothing/suits.dmi b/icons/obj/items/clothing/suits.dmi
index 47d06bc2cc10..cff4b5d48c17 100644
Binary files a/icons/obj/items/clothing/suits.dmi and b/icons/obj/items/clothing/suits.dmi differ
diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi
index 132f193fbf40..254c9e8b67c9 100644
Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ
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/bigredv2.json b/maps/bigredv2.json
index ecb2e1472c57..0a6db01cd498 100644
--- a/maps/bigredv2.json
+++ b/maps/bigredv2.json
@@ -12,6 +12,7 @@
"/datum/equipment_preset/survivor/trucker/solaris",
"/datum/equipment_preset/survivor/security/solaris",
"/datum/equipment_preset/survivor/colonial_marshal/solaris",
+ "/datum/equipment_preset/survivor/corporate/solaris",
"/datum/equipment_preset/survivor/clf",
"/datum/equipment_preset/survivor/civilian"
],
diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
index 2ca8c7083cfa..a431aa368702 100644
--- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
+++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
@@ -8762,8 +8762,6 @@
"cSn" = (
/obj/structure/closet/secure_closet/guncabinet,
/obj/item/weapon/gun/rifle/m41aMK1,
-/obj/item/ammo_magazine/rifle/m41aMK1/toxin,
-/obj/item/ammo_magazine/rifle/m41aMK1/toxin,
/obj/item/ammo_magazine/rifle/m41aMK1,
/obj/item/ammo_magazine/rifle/m41aMK1,
/obj/item/ammo_magazine/rifle/m41aMK1,
@@ -19747,7 +19745,6 @@
pixel_x = -10;
pixel_y = 13
},
-/obj/item/ammo_magazine/rifle/toxin,
/turf/open/asphalt/cement,
/area/shiva/interior/warehouse)
"oYw" = (
@@ -21979,7 +21976,6 @@
/area/shiva/interior/colony/research_hab)
"ril" = (
/obj/structure/closet/secure_closet/freezer/fridge,
-/obj/item/ammo_magazine/rifle/m41aMK1/toxin,
/turf/open/floor/shiva{
icon_state = "multi_tiles"
},
@@ -24859,7 +24855,6 @@
},
/area/shiva/interior/colony/medseceng)
"ukJ" = (
-/obj/item/ammo_magazine/rifle/m41aMK1/toxin,
/turf/open/floor/shiva,
/area/shiva/interior/colony/research_hab)
"ukU" = (
diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
index 01df2b7e136e..34eecc574c9c 100644
--- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
+++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
@@ -998,8 +998,8 @@
/obj/structure/closet/crate/weapon,
/obj/item/weapon/gun/rifle/l42a,
/obj/item/weapon/gun/rifle/l42a,
-/obj/item/ammo_magazine/rifle/l42a,
-/obj/item/ammo_magazine/rifle/l42a,
+/obj/item/weapon/gun/rifle/l42a,
+/obj/item/weapon/gun/rifle/l42a,
/turf/open/floor/prison,
/area/lv522/indoors/a_block/security)
"aIp" = (
@@ -4661,12 +4661,11 @@
/turf/open/floor/corsat,
/area/lv522/atmos/east_reactor/west)
"cKF" = (
-/obj/structure/cargo_container/kelland/left,
/obj/item/explosive/plastic/breaching_charge{
- layer = 5
+ unacidable = 1
},
/turf/open/auto_turf/shale/layer0,
-/area/lv522/outdoors/colony_streets/east_central_street)
+/area/lv522/outdoors/n_rockies)
"cKG" = (
/turf/closed/wall/strata_ice/dirty,
/area/lv522/outdoors/nw_rockies)
@@ -9745,6 +9744,21 @@
icon_state = "plate"
},
/area/lv522/atmos/east_reactor/east)
+"eWF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/storage/firstaid/adv{
+ layer = 3.1;
+ pixel_x = 3;
+ pixel_y = -2
+ },
+/obj/structure/surface/rack,
+/obj/item/storage/firstaid/adv{
+ pixel_y = 14
+ },
+/turf/open/floor/prison{
+ icon_state = "darkredfull2"
+ },
+/area/lv522/indoors/a_block/security)
"eWK" = (
/obj/structure/pipes/standard/manifold/hidden/green{
dir = 4
@@ -10683,6 +10697,12 @@
/obj/item/prop/colony/used_flare,
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorms)
+"fuw" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "W"
+ },
+/turf/open/auto_turf/shale/layer0,
+/area/lv522/outdoors/colony_streets/north_west_street)
"fuQ" = (
/obj/structure/pipes/standard/manifold/hidden/green{
dir = 1
@@ -13641,6 +13661,7 @@
"gLV" = (
/obj/structure/prop/server_equipment/yutani_server/broken{
density = 0;
+ layer = 3.5;
pixel_y = 16
},
/obj/effect/decal/cleanable/dirt,
@@ -13746,10 +13767,9 @@
/area/lv522/atmos/east_reactor)
"gOC" = (
/obj/structure/pipes/vents/pump,
-/obj/structure/surface/rack,
-/obj/item/weapon/shield/riot,
-/obj/item/weapon/classic_baton,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/surface/table/almayer,
+/obj/item/ammo_box/magazine/shotgun/beanbag/empty,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -19773,10 +19793,10 @@
},
/area/lv522/indoors/c_block/cargo)
"jmd" = (
-/obj/item/weapon/shield/riot,
-/obj/item/weapon/classic_baton,
-/obj/structure/surface/rack,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/surface/rack,
+/obj/item/weapon/gun/revolver/cmb,
+/obj/item/ammo_magazine/revolver/cmb,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -20728,13 +20748,13 @@
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/colony_streets/north_west_street)
"jGj" = (
-/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/turf/open/floor/prison{
- icon_state = "darkredfull2"
+/obj/effect/decal/cleanable/dirt,
+/obj/item/maintenance_jack,
+/turf/open/floor/strata{
+ dir = 4;
+ icon_state = "white_cyan1"
},
-/area/lv522/indoors/a_block/security)
+/area/lv522/indoors/a_block/corpo)
"jGm" = (
/obj/structure/barricade/handrail{
dir = 4
@@ -21364,6 +21384,10 @@
},
/turf/closed/wall/mineral/bone_resin,
/area/lv522/oob)
+"jUg" = (
+/obj/item/ammo_box/magazine/l42a/ap/empty,
+/turf/open/floor/prison,
+/area/lv522/indoors/a_block/security)
"jUk" = (
/turf/open/floor/prison{
dir = 10;
@@ -22373,6 +22397,13 @@
/obj/structure/platform_decoration{
dir = 4
},
+/obj/effect/decal/warning_stripes{
+ icon_state = "S"
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -25126,6 +25157,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorms)
+"lsG" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
+/turf/open/auto_turf/shale/layer0,
+/area/lv522/outdoors/colony_streets/north_west_street)
"lsR" = (
/obj/structure/fence{
layer = 2.9
@@ -26235,6 +26273,13 @@
icon_state = "floor_marked"
},
/area/lv522/indoors/lone_buildings/outdoor_bot)
+"lUh" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/turf/open/auto_turf/shale/layer1,
+/area/lv522/outdoors/colony_streets/north_west_street)
"lUi" = (
/obj/structure/bed/chair/comfy{
dir = 1
@@ -27097,6 +27142,12 @@
/obj/structure/platform_decoration{
dir = 8
},
+/obj/effect/decal/warning_stripes{
+ icon_state = "S"
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "W"
+ },
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -27108,6 +27159,13 @@
icon_state = "darkpurplefull2"
},
/area/lv522/indoors/a_block/dorms)
+"mnU" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/ammo_magazine/rifle/l42a/extended{
+ current_rounds = 0
+ },
+/turf/open/floor/prison,
+/area/lv522/indoors/a_block/security/glass)
"mnX" = (
/obj/item/weapon/gun/rifle/m41a{
current_mag = null
@@ -28488,6 +28546,13 @@
/area/lv522/outdoors/colony_streets/south_east_street)
"mUG" = (
/obj/structure/platform_decoration,
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
+/obj/effect/decal/warning_stripes{
+ icon_state = "W"
+ },
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -28507,6 +28572,10 @@
/area/lv522/indoors/a_block/kitchen)
"mVi" = (
/obj/structure/platform,
+/obj/effect/decal/warning_stripes{
+ icon_state = "N";
+ pixel_y = 1
+ },
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -29045,6 +29114,9 @@
/obj/structure/platform{
dir = 4
},
+/obj/effect/decal/warning_stripes{
+ icon_state = "W"
+ },
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -30273,21 +30345,14 @@
/turf/open/asphalt/cement,
/area/lv522/outdoors/colony_streets/north_street)
"nKo" = (
-/obj/structure/surface/table/almayer,
-/obj/structure/machinery/door_control/brbutton/alt{
- id = "Secure_Master_Armoury";
- name = "remote door-control"
- },
-/obj/item/limb/hand/l_hand{
- dir = 1;
- pixel_x = 9;
- pixel_y = 3
+/obj/structure/pipes/standard/simple/hidden/green{
+ dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/prison{
- icon_state = "darkredfull2"
+/obj/item/weapon/gun/rifle/l42a{
+ current_mag = null
},
-/area/lv522/indoors/a_block/security)
+/turf/open/floor/plating/plating_catwalk/prison,
+/area/lv522/indoors/a_block/security/glass)
"nKK" = (
/obj/structure/platform{
dir = 8
@@ -30376,6 +30441,7 @@
"nMt" = (
/obj/structure/surface/table/almayer,
/obj/effect/decal/cleanable/dirt,
+/obj/item/ammo_box/magazine/l42a,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -34987,6 +35053,14 @@
/obj/structure/platform_decoration{
dir = 1
},
+/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/prison{
icon_state = "floor_plate"
},
@@ -36438,6 +36512,13 @@
},
/turf/open/floor/plating,
/area/lv522/outdoors/colony_streets/central_streets)
+"qma" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "NW-out";
+ pixel_y = 1
+ },
+/turf/open/auto_turf/shale/layer1,
+/area/lv522/outdoors/colony_streets/north_west_street)
"qml" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -36686,9 +36767,17 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/a_block/bridges/op_centre)
"qqD" = (
-/obj/item/ammo_box/magazine/shotgun/buckshot/empty,
/obj/structure/surface/table/almayer,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/door_control/brbutton/alt{
+ id = "Sec-Armoury-Lockdown";
+ name = "remote door-control"
+ },
+/obj/item/limb/hand/l_hand{
+ dir = 1;
+ pixel_x = 9;
+ pixel_y = 3
+ },
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -36816,6 +36905,10 @@
/obj/structure/platform{
dir = 8
},
+/obj/effect/decal/warning_stripes{
+ icon_state = "E";
+ pixel_x = 1
+ },
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -37353,6 +37446,14 @@
icon_state = "blue_plate"
},
/area/lv522/indoors/a_block/hallway)
+"qDl" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "NE-out";
+ pixel_x = 1;
+ pixel_y = 1
+ },
+/turf/open/auto_turf/shale/layer0,
+/area/lv522/outdoors/colony_streets/north_west_street)
"qDr" = (
/obj/item/ammo_magazine/rifle/heap{
current_rounds = 0
@@ -39297,6 +39398,12 @@
icon_state = "floor_plate"
},
/area/lv522/indoors/a_block/hallway)
+"rmX" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S"
+ },
+/turf/open/auto_turf/shale/layer0,
+/area/lv522/outdoors/colony_streets/north_west_street)
"rng" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/camera/autoname{
@@ -39624,12 +39731,8 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorms)
"ruj" = (
-/obj/structure/machinery/door_control{
- id = "UD6";
- name = "Cargo Shutter Control"
- },
/turf/closed/shuttle/dropship2/tornado/typhoon{
- icon_state = "53"
+ icon_state = "59"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"rus" = (
@@ -40104,18 +40207,12 @@
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"rDu" = (
-/obj/structure/closet/crate/ammo,
-/obj/item/ammo_magazine/m56d,
-/obj/item/ammo_magazine/m56d,
-/obj/item/device/m56d_gun,
-/obj/structure/barricade/handrail{
- dir = 4
- },
-/obj/structure/barricade/handrail{
- dir = 8
+/obj/structure/machinery/door_control{
+ id = "UD6";
+ name = "Cargo Shutter Control"
},
-/turf/open/shuttle/dropship{
- icon_state = "rasputin15"
+/turf/closed/shuttle/dropship2/tornado/typhoon{
+ icon_state = "53"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"rDz" = (
@@ -41363,6 +41460,9 @@
/obj/structure/machinery/light{
dir = 8
},
+/obj/effect/decal/warning_stripes{
+ icon_state = "W"
+ },
/turf/open/auto_turf/shale/layer0,
/area/lv522/outdoors/colony_streets/north_west_street)
"seA" = (
@@ -44799,6 +44899,9 @@
/obj/structure/platform{
dir = 1
},
+/obj/effect/decal/warning_stripes{
+ icon_state = "S"
+ },
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -47329,6 +47432,13 @@
"uAa" = (
/turf/open/floor/prison,
/area/lv522/outdoors/colony_streets/north_street)
+"uAb" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SE-out";
+ pixel_x = 1
+ },
+/turf/open/auto_turf/shale/layer0,
+/area/lv522/outdoors/colony_streets/north_west_street)
"uAd" = (
/turf/open/floor/corsat{
dir = 1;
@@ -47394,7 +47504,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/security)
"uDs" = (
-/obj/item/clothing/head/beret/sec/hos,
+/obj/item/clothing/head/CMB,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/a_block/security)
@@ -47602,6 +47712,12 @@
icon_state = "blue_plate"
},
/area/lv522/indoors/a_block/hallway)
+"uGd" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "SW-out"
+ },
+/turf/open/auto_turf/shale/layer0,
+/area/lv522/outdoors/colony_streets/north_west_street)
"uGl" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison{
@@ -54463,7 +54579,7 @@
},
/area/lv522/indoors/b_block/hydro)
"xwO" = (
-/obj/structure/cargo_container/watatsumi/leftmid,
+/obj/structure/cargo_container/seegson/left,
/turf/open/floor/prison,
/area/lv522/outdoors/colony_streets/north_west_street)
"xwZ" = (
@@ -54514,7 +54630,7 @@
/turf/open/floor/plating,
/area/lv522/indoors/c_block/mining)
"xxJ" = (
-/obj/structure/cargo_container/watatsumi/rightmid,
+/obj/structure/cargo_container/seegson/mid,
/obj/effect/decal/warning_stripes{
icon_state = "E";
pixel_x = 1
@@ -54530,7 +54646,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/admin)
"xxV" = (
-/obj/structure/cargo_container/watatsumi/right,
+/obj/structure/cargo_container/seegson/right,
/turf/open/asphalt/cement{
icon_state = "cement1"
},
@@ -55007,13 +55123,16 @@
/turf/open/floor/plating,
/area/lv522/indoors/lone_buildings/engineering)
"xKc" = (
-/obj/structure/largecrate/supply/supplies/mre,
/obj/structure/barricade/handrail{
- dir = 4
+ dir = 8
},
/obj/structure/barricade/handrail{
- dir = 8
+ dir = 4
},
+/obj/structure/closet/crate/ammo,
+/obj/item/ammo_magazine/m56d,
+/obj/item/ammo_magazine/m56d,
+/obj/item/device/m56d_gun,
/turf/open/shuttle/dropship{
icon_state = "rasputin15"
},
@@ -55994,9 +56113,8 @@
},
/area/lv522/outdoors/colony_streets/north_west_street)
"ydD" = (
-/obj/item/weapon/shield/riot,
-/obj/item/weapon/classic_baton,
-/obj/structure/surface/rack,
+/obj/structure/surface/table/almayer,
+/obj/item/ammo_box/magazine/shotgun/buckshot/empty,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -64934,11 +65052,11 @@ slO
hJZ
hJZ
hJZ
-hJZ
-hJZ
-hJZ
-hJZ
-hJZ
+uAb
+lsG
+lsG
+lsG
+qDl
clY
vjG
kCJ
@@ -65161,11 +65279,11 @@ slO
hJZ
clY
hJZ
-hJZ
+rmX
xkO
xkO
xkO
-clY
+lUh
clY
clY
oTd
@@ -65388,11 +65506,11 @@ slO
hJZ
clY
clY
-hJZ
+rmX
xkO
sKj
xkO
-clY
+lUh
clY
clY
srQ
@@ -65615,11 +65733,11 @@ eUt
hJZ
hJZ
clY
-hJZ
+rmX
xkO
xWx
xkO
-clY
+lUh
clY
clY
oNQ
@@ -65842,11 +65960,11 @@ eUt
clY
hJZ
hJZ
-hJZ
+uGd
sek
-hJZ
+fuw
sek
-clY
+qma
clY
hJZ
oNQ
@@ -68540,7 +68658,7 @@ cpy
cpy
fgf
cpy
-yim
+cKF
hzA
ihy
yim
@@ -75861,8 +75979,8 @@ kRb
kBk
iJu
uDs
-uDb
-nKo
+jUg
+uVj
sjy
ogK
oud
@@ -76085,10 +76203,10 @@ wdi
sjy
sjy
jmd
-jmd
+eWF
oLW
mbF
-jGj
+jft
xbj
sjy
mNR
@@ -77214,7 +77332,7 @@ sjy
sjy
sjy
lhK
-azl
+nKo
mqH
ybt
sjy
@@ -77442,7 +77560,7 @@ sjy
sjy
lhK
azl
-mqH
+mnU
xhu
sjy
vHU
@@ -78108,7 +78226,7 @@ iPZ
uSv
jyx
uQF
-jyx
+jGj
wwy
jPw
qgr
@@ -79450,7 +79568,7 @@ saC
saC
saC
saC
-cpy
+saC
saC
ien
ien
@@ -79675,9 +79793,9 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
+saC
+saC
+saC
saC
saC
ien
@@ -79901,11 +80019,11 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
-cpy
-cpy
+saC
+saC
+saC
+saC
+saC
saC
ien
rxI
@@ -80127,11 +80245,11 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
-cpy
-cpy
+saC
+saC
+saC
+saC
+saC
saC
ien
ien
@@ -80355,10 +80473,10 @@ saC
saC
saC
saC
-cpy
-cpy
saC
-cpy
+saC
+saC
+saC
saC
saC
ien
@@ -80585,7 +80703,7 @@ saC
saC
saC
saC
-cpy
+saC
saC
ien
ien
@@ -85353,7 +85471,7 @@ saC
saC
saC
saC
-cpy
+saC
saC
saC
saC
@@ -85579,9 +85697,9 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
+saC
+saC
+saC
saC
saC
saC
@@ -85806,11 +85924,11 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
-cpy
-cpy
+saC
+saC
+saC
+saC
+saC
saC
saC
bUN
@@ -86034,11 +86152,11 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
-cpy
-cpy
+saC
+saC
+saC
+saC
+saC
ien
cGd
rtI
@@ -86262,10 +86380,10 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
-cpy
+saC
+saC
+saC
+saC
ien
rhh
rtX
@@ -86489,9 +86607,9 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
+saC
+saC
+saC
ien
ien
ien
@@ -86717,9 +86835,9 @@ saC
saC
saC
saC
-cpy
-cpy
-cpy
+saC
+saC
+saC
ien
qSH
qSH
@@ -86945,8 +87063,8 @@ saC
saC
saC
saC
-cpy
-cpy
+saC
+saC
ien
qSH
qSH
@@ -94500,7 +94618,7 @@ tTD
tTD
tSm
rnB
-cKF
+oXZ
uKR
rnB
rnB
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index a6a5befca4ee..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
@@ -993,6 +1007,9 @@
/obj/structure/closet,
/obj/item/clothing/suit/armor/riot/marine/vintage_riot,
/obj/item/clothing/head/helmet/riot/vintage_riot,
+/obj/structure/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -2445,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)
@@ -3305,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"
@@ -4859,16 +4889,6 @@
icon_state = "orange"
},
/area/almayer/engineering/engineering_workshop/hangar)
-"apQ" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/door/window/southleft{
- desc = "A window, that is also a door. A windoor if you will. This one is stronger.";
- health = 500;
- name = "Reinforced Glass door";
- req_one_access_txt = "2;35"
- },
-/turf/open/floor/almayer,
-/area/almayer/engineering/engineering_workshop/hangar)
"apR" = (
/obj/structure/surface/rack,
/obj/item/storage/box/beakers{
@@ -5256,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{
@@ -5792,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)
@@ -5810,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)
@@ -5967,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
@@ -6373,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)
@@ -6401,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)
@@ -6507,6 +6533,9 @@
pixel_x = 8;
pixel_y = -32
},
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -7047,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)
@@ -7277,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{
@@ -7800,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"
},
@@ -9092,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,
@@ -10908,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
@@ -13343,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"
@@ -14168,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)
@@ -19281,6 +19411,39 @@
icon_state = "test_floor4"
},
/area/almayer/hallways/starboard_hallway)
+"bBi" = (
+/obj/structure/closet/cabinet,
+/obj/item/clothing/under/liaison_suit/formal,
+/obj/item/clothing/under/liaison_suit,
+/obj/item/clothing/under/liaison_suit/outing,
+/obj/item/clothing/under/liaison_suit/suspenders,
+/obj/item/clothing/under/blackskirt{
+ desc = "A stylish skirt, in a business-black and red colour scheme.";
+ name = "liaison's skirt"
+ },
+/obj/item/clothing/under/suit_jacket/charcoal{
+ desc = "A professional black suit and blue tie. A combination popular among government agents and corporate Yes-Men alike.";
+ name = "liaison's black suit"
+ },
+/obj/item/clothing/under/suit_jacket/navy{
+ desc = "A navy suit and red tie, intended for the Almayer's finest. And accountants.";
+ name = "liaison's navy suit"
+ },
+/obj/item/clothing/under/suit_jacket/trainee,
+/obj/item/clothing/under/liaison_suit/charcoal,
+/obj/item/clothing/under/liaison_suit/outing/red,
+/obj/item/clothing/under/liaison_suit/blazer,
+/obj/item/clothing/suit/storage/snow_suit/liaison,
+/obj/item/clothing/gloves/black,
+/obj/item/clothing/gloves/marine/dress,
+/obj/item/clothing/glasses/sunglasses/big,
+/obj/item/clothing/accessory/blue,
+/obj/item/clothing/accessory/red,
+/obj/structure/machinery/status_display{
+ pixel_x = -32
+ },
+/turf/open/floor/wood/ship,
+/area/almayer/command/corporateliason)
"bBl" = (
/obj/structure/machinery/light{
dir = 4
@@ -19906,22 +20069,6 @@
icon_state = "orange"
},
/area/almayer/engineering/lower_engineering)
-"bEk" = (
-/obj/structure/machinery/door/airlock/almayer/marine/requisitions{
- dir = 1;
- name = "\improper Requisitions Storage"
- },
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
-/obj/structure/disposalpipe/up/almayer{
- dir = 4;
- id = "almayerlink_OT1_req"
- },
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/squads/req)
"bEl" = (
/obj/structure/machinery/computer/supply_drop_console/limited,
/turf/closed/wall/almayer,
@@ -20916,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{
@@ -21697,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{
@@ -23074,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{
@@ -23769,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,
@@ -25529,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{
@@ -27174,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{
@@ -27565,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)
@@ -27910,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{
@@ -28199,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;
@@ -28206,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
@@ -28322,6 +28589,9 @@
"cBd" = (
/obj/structure/surface/rack,
/obj/item/reagent_container/food/snacks/wrapped/chunk,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/open/floor/almayer{
icon_state = "cargo"
},
@@ -28360,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{
@@ -28810,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
@@ -29446,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{
@@ -30585,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;
@@ -30800,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
@@ -30938,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
@@ -31076,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{
@@ -31083,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{
@@ -31259,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
@@ -31721,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{
@@ -32653,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,
@@ -32782,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{
@@ -33467,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;
@@ -33609,6 +34016,9 @@
dir = 8
},
/obj/effect/decal/cleanable/blood,
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -34023,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,
@@ -34270,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,
@@ -34364,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
@@ -34566,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
@@ -34781,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"
@@ -35324,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{
@@ -35615,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,
@@ -35704,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"
@@ -35840,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,
@@ -36208,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
@@ -36413,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
@@ -36579,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)
@@ -36628,14 +37232,6 @@
icon_state = "redfull"
},
/area/almayer/hull/lower_hull/l_f_s)
-"gkg" = (
-/obj/structure/disposalpipe/sortjunction{
- dir = 4;
- negdir = 4;
- posdir = 1
- },
-/turf/closed/wall/almayer,
-/area/almayer/squads/req)
"gks" = (
/obj/structure/largecrate/random/secure,
/turf/open/floor/plating,
@@ -37040,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;
@@ -37226,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
@@ -37311,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
@@ -37834,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
@@ -37868,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
@@ -37877,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{
@@ -38003,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{
@@ -38050,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"
@@ -38059,6 +38792,13 @@
/obj/structure/pipes/standard/manifold/hidden/supply,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/lifeboat_pumps/north2)
+"gVA" = (
+/obj/structure/disposalpipe/down/almayer{
+ dir = 8;
+ id = "almayerlink_OT1_req"
+ },
+/turf/open/floor/almayer,
+/area/almayer/lifeboat_pumps/south1)
"gVF" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 1
@@ -38088,6 +38828,12 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_p)
+"gXh" = (
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating/plating_catwalk,
+/area/almayer/hull/upper_hull/u_m_s)
"gXl" = (
/obj/structure/closet/secure_closet/personal/cabinet{
req_access_txt = "5"
@@ -38109,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
@@ -38352,6 +39112,12 @@
icon_state = "plate"
},
/area/almayer/living/cryo_cells)
+"hcC" = (
+/obj/structure/disposalpipe/up/almayer{
+ id = "almayerlink_OT_req"
+ },
+/turf/closed/wall/almayer,
+/area/almayer/engineering/engineering_workshop/hangar)
"hcI" = (
/obj/structure/machinery/cryopod{
pixel_y = 6
@@ -38416,12 +39182,6 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_s)
-"hdV" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/almayer,
-/area/almayer/lifeboat_pumps/south1)
"hee" = (
/turf/open/floor/almayer{
dir = 4;
@@ -39083,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)
@@ -39230,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)
@@ -40016,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)
@@ -40077,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;
@@ -40320,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{
@@ -40540,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;
@@ -40595,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
@@ -41063,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" = (
@@ -41110,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
@@ -41339,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;
@@ -41745,13 +42625,6 @@
icon_state = "silver"
},
/area/almayer/command/cichallway)
-"iJH" = (
-/obj/structure/disposalpipe/down/almayer{
- dir = 4;
- id = "almayerlink_OT_req"
- },
-/turf/open/floor/almayer,
-/area/almayer/lifeboat_pumps/south1)
"iJS" = (
/obj/structure/machinery/cm_vending/gear/tl{
density = 0;
@@ -42064,13 +42937,6 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_m_s)
-"iRh" = (
-/obj/structure/disposalpipe/down/almayer{
- dir = 8;
- id = "almayerlink_OT1_req"
- },
-/turf/open/floor/almayer,
-/area/almayer/lifeboat_pumps/south1)
"iRr" = (
/obj/structure/machinery/light{
dir = 1
@@ -42409,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,
@@ -42474,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{
@@ -43251,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,
@@ -43286,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";
@@ -43375,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{
@@ -43578,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{
@@ -44067,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{
@@ -44196,6 +45159,16 @@
icon_state = "plate"
},
/area/almayer/living/bridgebunks)
+"jUn" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/door/window/southleft{
+ desc = "A window, that is also a door. A windoor if you will. This one is stronger.";
+ health = 500;
+ name = "Reinforced Glass door";
+ req_one_access_txt = "2;35"
+ },
+/turf/open/floor/almayer,
+/area/almayer/engineering/engineering_workshop/hangar)
"jUs" = (
/obj/effect/decal/warning_stripes{
icon_state = "NE-out";
@@ -44345,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;
@@ -44543,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" = (
@@ -44676,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";
@@ -44749,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
@@ -45019,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";
@@ -45548,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
@@ -45580,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;
@@ -45928,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
@@ -46273,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;
@@ -46481,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;
@@ -46681,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
@@ -46791,6 +47877,12 @@
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer,
/area/almayer/shipboard/navigation)
+"ley" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/almayer,
+/area/almayer/lifeboat_pumps/south1)
"leY" = (
/obj/structure/bed/sofa/south/white/left,
/turf/open/floor/almayer{
@@ -46920,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" = (
@@ -47064,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{
@@ -47123,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{
@@ -47972,6 +49092,10 @@
},
/turf/open/floor/almayer,
/area/almayer/squads/alpha_bravo_shared)
+"lEW" = (
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall/almayer,
+/area/almayer/engineering/engineering_workshop/hangar)
"lFb" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -48897,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
@@ -49182,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)
@@ -49889,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
@@ -49964,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,
@@ -50200,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
@@ -50333,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,
@@ -50449,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)
@@ -50576,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{
@@ -50712,6 +51935,14 @@
},
/turf/open/floor/almayer,
/area/almayer/hull/upper_hull/u_f_p)
+"mYv" = (
+/obj/structure/disposalpipe/sortjunction{
+ dir = 4;
+ negdir = 4;
+ posdir = 1
+ },
+/turf/closed/wall/almayer,
+/area/almayer/squads/req)
"mYw" = (
/obj/structure/sign/safety/escapepod{
pixel_x = -17;
@@ -51996,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{
@@ -52007,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"
},
@@ -52339,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;
@@ -52423,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;
@@ -52838,6 +54092,22 @@
"nXP" = (
/turf/closed/wall/almayer/outer,
/area/almayer/hull/lower_hull/l_f_s)
+"nXU" = (
+/obj/structure/machinery/door/airlock/almayer/marine/requisitions{
+ dir = 1;
+ name = "\improper Requisitions Storage"
+ },
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
+/obj/structure/disposalpipe/up/almayer{
+ dir = 4;
+ id = "almayerlink_OT1_req"
+ },
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/squads/req)
"nYc" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -53010,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{
@@ -53708,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{
@@ -53802,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,
@@ -54372,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" = (
@@ -54428,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;
@@ -54721,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
@@ -55215,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
@@ -55228,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" = (
@@ -55429,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
@@ -56400,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{
@@ -57026,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" = (
@@ -57475,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
@@ -58014,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{
@@ -58639,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,
@@ -58838,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;
@@ -59112,6 +60558,13 @@
icon_state = "green"
},
/area/almayer/hallways/port_hallway)
+"qYC" = (
+/obj/structure/disposalpipe/down/almayer{
+ dir = 4;
+ id = "almayerlink_OT_req"
+ },
+/turf/open/floor/almayer,
+/area/almayer/lifeboat_pumps/south1)
"qYG" = (
/turf/open/floor/almayer{
icon_state = "mono"
@@ -59244,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"
@@ -59427,10 +60892,6 @@
icon_state = "test_floor4"
},
/area/almayer/hull/upper_hull/u_m_s)
-"rfi" = (
-/obj/structure/disposalpipe/segment,
-/turf/closed/wall/almayer,
-/area/almayer/engineering/engineering_workshop/hangar)
"rfI" = (
/obj/structure/sign/safety/airlock{
pixel_y = -32
@@ -59755,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{
@@ -59797,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;
@@ -60330,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{
@@ -60340,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" = (
@@ -60844,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)
@@ -61406,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
@@ -61480,16 +62984,30 @@
},
/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{
dir = 4;
@@ -61920,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"
},
@@ -62521,36 +64043,6 @@
icon_state = "silvercorner"
},
/area/almayer/hallways/aft_hallway)
-"sDL" = (
-/obj/structure/closet/cabinet,
-/obj/item/clothing/under/liaison_suit/formal,
-/obj/item/clothing/under/liaison_suit,
-/obj/item/clothing/under/liaison_suit/outing,
-/obj/item/clothing/under/liaison_suit/suspenders,
-/obj/item/clothing/under/blackskirt{
- desc = "A stylish skirt, in a business-black and red colour scheme.";
- name = "liaison's skirt"
- },
-/obj/item/clothing/under/suit_jacket/charcoal{
- desc = "A professional black suit and blue tie. A combination popular among government agents and corporate Yes-Men alike.";
- name = "liaison's black suit"
- },
-/obj/item/clothing/under/suit_jacket/navy{
- desc = "A navy suit and red tie, intended for the Almayer's finest. And accountants.";
- name = "liaison's navy suit"
- },
-/obj/item/clothing/under/suit_jacket/trainee,
-/obj/item/clothing/gloves/black,
-/obj/item/clothing/gloves/marine/dress,
-/obj/item/clothing/glasses/sunglasses/big,
-/obj/item/clothing/accessory/blue,
-/obj/item/clothing/accessory/red,
-/obj/item/clothing/shoes/dress,
-/obj/structure/machinery/status_display{
- pixel_x = -32
- },
-/turf/open/floor/wood/ship,
-/area/almayer/command/corporateliason)
"sDM" = (
/turf/open/floor/almayer{
dir = 9;
@@ -62633,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{
@@ -62723,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{
@@ -62782,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" = (
@@ -62884,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;
@@ -63196,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{
@@ -63419,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,
@@ -63428,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" = (
@@ -64027,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{
@@ -64345,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;
@@ -64805,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)
@@ -64956,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;
@@ -65804,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,
@@ -65814,12 +67377,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/lifeboat_pumps/south2)
-"uda" = (
-/obj/structure/disposalpipe/up/almayer{
- id = "almayerlink_OT_req"
- },
-/turf/closed/wall/almayer,
-/area/almayer/engineering/engineering_workshop/hangar)
"udi" = (
/turf/open/floor/almayer{
icon_state = "red"
@@ -67898,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;
@@ -68326,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,
@@ -68432,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)
@@ -68551,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{
@@ -68840,6 +70421,14 @@
icon_state = "dark_sterile"
},
/area/almayer/engineering/laundry)
+"vqO" = (
+/obj/structure/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/hull/upper_hull/u_a_p)
"vqW" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -69306,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)
@@ -69494,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{
@@ -70286,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
@@ -70916,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
@@ -71058,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
@@ -71135,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;
@@ -71538,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{
@@ -71627,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" = (
@@ -71969,6 +73652,9 @@
desc = "A small coin, bearing the falling falcons insignia.";
name = "falling falcons challenge coin"
},
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -72458,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" = (
@@ -72844,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{
@@ -73648,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{
@@ -74045,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;
@@ -74591,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)
@@ -74870,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{
@@ -75091,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{
@@ -75214,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
@@ -75381,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{
@@ -101491,8 +103250,8 @@ gfW
bUe
cbR
ccr
-uda
-rfi
+hcC
+lEW
aqd
bWM
bWM
@@ -101695,7 +103454,7 @@ iRx
iEb
bHa
apm
-apQ
+jUn
avT
bWM
bWM
@@ -105059,7 +106818,7 @@ yfv
bit
baw
baw
-iJH
+qYC
kwo
trb
aag
@@ -105262,7 +107021,7 @@ abg
ajC
baw
vbB
-hdV
+ley
kwo
trb
aag
@@ -105465,7 +107224,7 @@ avn
aim
baw
dBp
-iRh
+gVA
tQV
tQV
aah
@@ -109116,7 +110875,7 @@ awE
vGk
xCX
vGk
-csz
+hoX
qVM
csz
qVM
@@ -109314,7 +111073,7 @@ fAo
awE
bhM
wQv
-sDL
+bBi
awE
ieH
qVM
@@ -109928,7 +111687,7 @@ awE
csz
iid
csz
-csz
+hoX
qVM
noV
csz
@@ -113149,10 +114908,10 @@ anf
apK
arf
auG
-awu
azb
azb
-auG
+azb
+nMq
aDp
apK
cbr
@@ -113346,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
@@ -113549,16 +115308,16 @@ ajJ
aEX
ajt
ali
-aqU
-hvw
+mOi
+rCw
rCw
lin
oJR
-aqU
+tFe
asD
xQV
avK
-cck
+aqU
aCZ
dgg
xRk
@@ -113752,16 +115511,16 @@ ael
isW
ajt
abg
-aqU
+mOi
wCT
sIf
isC
isC
tFe
-lmz
+xQV
xQV
rNF
-cck
+aqU
qjF
oqv
iqd
@@ -113955,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
@@ -114158,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
@@ -114363,14 +116122,14 @@ aii
abg
aqU
sdl
-isC
-xbN
-aqU
-mOi
-gjw
+mLE
+bUx
+mLE
+tmK
+avK
aug
avL
-cck
+aqU
lyE
rsO
aGN
@@ -114567,13 +116326,13 @@ abg
aqU
xbN
gfE
-xbN
+gfE
+kpc
aqU
-mOi
gjw
cnp
avM
-cck
+aqU
wmK
liJ
pTj
@@ -115354,7 +117113,7 @@ aag
lYA
aao
aap
-aap
+gXh
aao
aap
aap
@@ -116300,7 +118059,7 @@ bNQ
bNQ
bNQ
bNQ
-bEk
+nXU
bKA
jac
bCA
@@ -116503,7 +118262,7 @@ bNP
bmD
bNP
bmD
-gkg
+mYv
doP
jac
isS
@@ -122920,7 +124679,7 @@ vuv
vuv
cxo
cxo
-cxo
+vqO
sXK
tbD
qMu
@@ -127824,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
@@ -128027,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
@@ -128230,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
@@ -128433,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
@@ -128636,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
@@ -128839,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
@@ -129040,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
@@ -129243,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
@@ -129446,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
@@ -129649,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
@@ -129852,21 +131611,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
@@ -130055,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
@@ -130258,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
@@ -130461,21 +132220,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
@@ -130652,10 +132411,10 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
+aab
+aab
+aab
+aab
aab
aaa
aaa
@@ -130663,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
@@ -130853,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
@@ -131049,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
@@ -131252,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
@@ -131455,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
@@ -131658,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
@@ -131861,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
@@ -132064,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
@@ -132267,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
@@ -132470,53 +134229,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
+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
@@ -132673,53 +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
+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
@@ -132876,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
@@ -132888,69 +134693,23 @@ 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
+wVb
+bhD
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+bdo
+ovn
+ovn
+ovn
+ovn
+ovn
+ovn
+bCR
+vTK
aaa
aaa
aaa
@@ -133079,60 +134838,60 @@ 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
+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
@@ -133282,60 +135041,60 @@ 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
+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
@@ -133485,60 +135244,60 @@ 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
+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
@@ -133599,335 +135358,14 @@ aaa
aaa
aaa
aaa
-aab
-aaa
-aaa
-"}
-(287,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
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-wVb
-bdo
-jbB
-bdo
-bne
-bdo
-jbB
-bdo
-bne
-ovn
-gXv
-ovn
-grX
-ovn
-gXv
-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
-"}
-(288,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
+aab
aaa
aaa
+"}
+(287,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -133949,24 +135387,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
@@ -134005,14 +135425,9 @@ aaa
aaa
aaa
aaa
-aab
-aaa
aaa
-"}
-(289,1,1) = {"
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134032,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
@@ -134076,10 +135561,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(288,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -134107,13 +135596,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134164,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
@@ -134212,7 +135768,7 @@ aab
aaa
aaa
"}
-(290,1,1) = {"
+(289,1,1) = {"
aaa
aaa
aab
@@ -134297,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
@@ -134310,13 +135919,8 @@ aaa
aaa
aaa
aaa
-aab
-aaa
-aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134363,10 +135967,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(290,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -134411,14 +136019,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-"}
-(291,1,1) = {"
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134452,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
@@ -134516,7 +136173,8 @@ aaa
aab
aaa
aaa
-aKQ
+"}
+(291,1,1) = {"
aaa
aaa
aab
@@ -134601,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
@@ -134719,7 +136376,8 @@ aaa
aab
aaa
aaa
-aKQ
+"}
+(292,1,1) = {"
aaa
aaa
aab
@@ -134804,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
@@ -134895,10 +136576,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(293,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -134919,13 +136604,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -134983,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
@@ -135020,14 +136742,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-"}
-(294,1,1) = {"
aaa
aaa
-aab
aaa
aaa
aaa
@@ -135061,10 +136779,14 @@ aaa
aaa
aaa
aaa
+aab
aaa
aaa
+"}
+(294,1,1) = {"
aaa
aaa
+aab
aaa
aaa
aaa
@@ -135122,13 +136844,10 @@ aaa
aaa
aaa
aaa
-aab
aaa
aaa
-aKQ
aaa
aaa
-aab
aaa
aaa
aaa
@@ -135149,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
@@ -135312,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
@@ -135518,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
@@ -135720,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
@@ -135923,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
@@ -136126,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
@@ -136358,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}
+
+
+