From 5417a34ac2fe6b30143f2833529feda25ed8bd0c Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 31 May 2023 01:35:56 +0100 Subject: [PATCH 01/45] ARES Squashed Apollo 2 Initial framework code. Phase two Fixes/Rebase logging Pre-Datum Links Functioning interface repath Accesses and dmdoc delete log x x x x Why was this editing research x whitespace Don't want this back co level works now x found the duplication. reducing more duplication finally back in business dme fix? tidy and go boom nulls! rebase ob thing actually works now Ares Core remodel x x detailing Access to text Synth access x shhh icons Temp temp UI Phase 1 UI Phase 2 Access tweak 1:1 icon UI Phase 3 - Ready 1:1 disable area fix temp x Changes 1:1 rebase ping toggle Err. Gives the toggle I mentioned. x x --- code/__DEFINES/__game.dm | 1 + code/__DEFINES/admin.dm | 2 + code/datums/paygrades/paygrade.dm | 7 + code/defines/procs/announcement.dm | 15 +- code/game/bioscans.dm | 13 +- code/game/machinery/ARES/ARES.dm | 171 ++++ code/game/machinery/ARES/ARES_procs.dm | 401 ++++++++ code/game/machinery/ARES/_ARES_defines.dm | 73 ++ code/game/objects/structures/signs.dm | 2 +- code/modules/admin/admin_verbs.dm | 11 + code/modules/admin/tabs/event_tab.dm | 55 +- code/modules/admin/topic/topic.dm | 29 +- code/modules/cm_marines/overwatch.dm | 3 + code/modules/mob/language/languages.dm | 2 + .../modules/mob/living/silicon/decoy/decoy.dm | 1 + colonialmarines.dme | 3 + icons/obj/structures/machinery/ares.dmi | Bin 0 -> 3639 bytes maps/map_files/USS_Almayer/USS_Almayer.dmm | 552 ++++++----- .../packages/tgui/interfaces/AresInterface.js | 916 ++++++++++++++++++ 19 files changed, 1968 insertions(+), 289 deletions(-) create mode 100644 code/game/machinery/ARES/ARES.dm create mode 100644 code/game/machinery/ARES/ARES_procs.dm create mode 100644 code/game/machinery/ARES/_ARES_defines.dm create mode 100644 icons/obj/structures/machinery/ares.dmi create mode 100644 tgui/packages/tgui/interfaces/AresInterface.js 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/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/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..db722c4b66a3 100644 --- a/code/defines/procs/announcement.dm +++ b/code/defines/procs/announcement.dm @@ -90,6 +90,10 @@ 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())) + link.log_ares_announcement("[MAIN_AI_SYSTEM] Comms Update", message) + /proc/ai_silent_announcement(message, channel_prefix, bypass_cooldown = FALSE) if(!message) return @@ -119,10 +123,15 @@ if(!isnull(signature)) message += "

Signed by,
[signature]
" + else + 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) + //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 +139,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/bioscans.dm b/code/game/bioscans.dm index 474786e1ffae..9c1450100202 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_bioscan(name, input) + if(forced || (link.p_interface && !link.p_interface.inoperable())) + marine_announcement(input, name, 'sound/AI/bioscan.ogg') /// 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/machinery/ARES/ARES.dm b/code/game/machinery/ARES/ARES.dm new file mode 100644 index 000000000000..db0ac18fb525 --- /dev/null +++ b/code/game/machinery/ARES/ARES.dm @@ -0,0 +1,171 @@ +/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." + +/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 + /// 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 + var/obj/structure/machinery/ares/processor/interface/processor + + /// The chat log of the apollo link. Timestamped. + var/list/apollo_log = list() + /// The current deleted chat log of 1:1 conversations being read. + var/list/deleted_1to1 = list() + + /// Holds all (/datum/ares_record/announcement)s + var/list/announcement_records = list() + /// Holds all (/datum/ares_record/bioscan)s + var/list/bioscan_records = list() + /// Holds all (/datum/ares_record/bombardment)s + var/list/bombardment_records = list() + /// Holds all (/datum/ares_record/deletion)s + var/list/deletion_records = list() + /// Holds all (/datum/ares_record/talk_log)s + var/list/talking_records = list() + + COOLDOWN_DECLARE(ares_distress_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 ..() diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm new file mode 100644 index 000000000000..b0b25254cee5 --- /dev/null +++ b/code/game/machinery/ARES/ARES_procs.dm @@ -0,0 +1,401 @@ +GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) + +/datum/ares_link + var/link_id = MAIN_SHIP_DEFAULT_NAME + 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 + +/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() + ..() + +/proc/log_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 + if(!link.interface || link.interface.inoperable()) + return + else + link.interface.apollo_log.Add("[worldtime2text()]: [speaker], '[message]'") + +/obj/structure/machinery/computer/ares_console/proc/get_ares_access(obj/item/card/id/card) + if(777 in card.access) + return ARES_ACCESS_DEBUG + if(card.assignment == JOB_WORKING_JOE) + return ARES_ACCESS_JOE + if(card.assignment == JOB_CHIEF_ENGINEER) + return ARES_ACCESS_CE + if(card.assignment == 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 + else if(card.paygrade in GLOB.co_paygrades) + return ARES_ACCESS_CO + else if(ACCESS_MARINE_SENIOR in card.access) + return ARES_ACCESS_SENIOR + else if(ACCESS_WY_CORPORATE in card.access) + return ARES_ACCESS_CORPORATE + else if(ACCESS_MARINE_COMMAND in card.access) + return ARES_ACCESS_COMMAND + else + return ARES_ACCESS_BASIC + +/obj/structure/machinery/computer/ares_console/proc/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" + +/datum/ares_link/proc/log_bioscan(title, input) + if(!p_bioscan || p_bioscan.inoperable() || !interface) + return FALSE + interface.bioscan_records.Add(new /datum/ares_record/bioscan(title, input)) + +/datum/ares_link/proc/log_bombardment(mob/living/user, ob_name, coordinates) + interface.bombardment_records.Add(new /datum/ares_record/bombardment(ob_name, "Bombardment fired at [coordinates].", user)) + +/datum/ares_link/proc/log_ares_announcement(title, message) + interface.announcement_records.Add(new /datum/ares_record/announcement(title, message)) + +/obj/structure/machinery/computer/ares_console/proc/message_ares(text, mob/Sender, ref) + var/msg = "[SPAN_NOTICE("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) + +/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]'" + +// ------ 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["access_text"] = "access level [authentication], [auth_to_text(authentication)]." + data["access_level"] = authentication + + data["alert_level"] = security_level + data["evac_status"] = EvacuationAuthority.evac_status + data["distresstime"] = ares_distress_cooldown + data["distresstimelock"] = DISTRESS_TIME_LOCK + data["worldtime"] = world.time + + data["access_log"] = list() + data["access_log"] += access_list + data["apollo_log"] = list() + data["apollo_log"] += apollo_log + + data["deleted_conversation"] = list() + data["deleted_conversation"] += deleted_1to1 + + var/list/logged_announcements = list() + for(var/datum/ares_record/announcement/broadcast as anything in announcement_records) + 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["announcement_records"] = logged_announcements + + var/list/logged_bioscans = list() + for(var/datum/ares_record/bioscan/scan as anything in bioscan_records) + 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["bioscan_records"] = logged_bioscans + + var/list/logged_bombs = list() + for(var/datum/ares_record/bombardment/bomb as anything in bombardment_records) + 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["bombardment_records"] = logged_bombs + + var/list/logged_deletes = list() + for(var/datum/ares_record/deletion/deleted as anything in deletion_records) + 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["deletion_records"] = logged_deletes + + var/list/logged_discussions = list() + for(var/datum/ares_record/deleted_talk/deleted_convo as anything in deletion_records) + 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_convos = list() + var/list/active_convo = list() + var/active_ref + for(var/datum/ares_record/talk_log/log as anything in talking_records) + 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("set_menu") + current_menu = params["new_menu"] + + 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 + idcard = operator.wear_id + if(istype(idcard)) + authentication = get_ares_access(idcard) + last_login = idcard.registered_name + if(authentication) + access_list += "[last_login] at [worldtime2text()], Access Level [authentication] - [auth_to_text(authentication)]." + current_menu = "main" + + if("logout") + last_menu = current_menu + current_menu = "login" + + if("home") + last_menu = current_menu + current_menu = "main" + + if("ares_talk") + last_menu = current_menu + current_menu = "talking" + + if("logs_announce") + last_menu = current_menu + current_menu = "announcements" + + if("logs_bio") + last_menu = current_menu + current_menu = "bioscans" + + if("logs_bomb") + last_menu = current_menu + current_menu = "bombardments" + + if("logs_apollo") + last_menu = current_menu + current_menu = "apollo" + + if("logs_access") + last_menu = current_menu + current_menu = "access_log" + + if("logs_delete") + last_menu = current_menu + current_menu = "delete_log" + + if("logs_talk") + last_menu = current_menu + current_menu = "deleted_talks" + + 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 + announcement_records -= record + if(ARES_RECORD_BIOSCAN) + new_title = "[record.title] at [record.time]" + new_details = record.details + bioscan_records -= record + if(ARES_RECORD_BOMB) + new_title = "[record.title] at [record.time]" + new_details = "[record.details] Launched by [record.user]." + bombardment_records -= record + + new_delete.details = new_details + new_delete.user = last_login + new_delete.title = new_title + + deletion_records += new_delete + + 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].'" + talking_records += 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 + deletion_records += deleted + talking_records -= 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" + + 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.") + . = TRUE + + if("distress") + if(!SSticker.mode) + return FALSE //Not a game mode? + + 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 Central Command.")) + COOLDOWN_START(src, ares_distress_cooldown, COOLDOWN_COMM_REQUEST) + return TRUE diff --git a/code/game/machinery/ARES/_ARES_defines.dm b/code/game/machinery/ARES/_ARES_defines.dm new file mode 100644 index 000000000000..7306be47ce4a --- /dev/null +++ b/code/game/machinery/ARES/_ARES_defines.dm @@ -0,0 +1,73 @@ +/// 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_BIOSCAN "Bioscan Record" +#define ARES_RECORD_BOMB "Orbital Bombardment Record" +#define ARES_RECORD_DELETED "Deleted Record" + +/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/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 + var/conversation = list() +/datum/ares_record/deleted_talk/New() + time = worldtime2text() 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/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 445aa98d349a..342c1d6aa376 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( @@ -573,6 +574,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/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index 0cb77a86599b..c7f772a14c07 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -539,19 +539,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 + else + 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" @@ -564,12 +560,12 @@ if(!input) return FALSE - for(var/obj/structure/machinery/computer/almayer_control/console in machines) - if(console.inoperable()) + for(var/obj/structure/machinery/ares/processor/apollo/processor in machines) + if(processor.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] + 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 in (GLOB.human_mob_list + GLOB.dead_mob_list)) @@ -588,19 +584,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/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]") + 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 + else + 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" @@ -976,6 +967,10 @@ 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 ca6f0f977ade..1e4646a05679 100644 --- a/code/modules/admin/topic/topic.dm +++ b/code/modules/admin/topic/topic.dm @@ -1137,7 +1137,7 @@ if(!check_rights(R_MOD)) return - var/x = text2num(href_list["X"]) + var/x = text2num(href_list[""]) var/y = text2num(href_list["Y"]) var/z = text2num(href_list["Z"]) @@ -1306,7 +1306,7 @@ fax_message = new(generate_templated_fax(0, organization_type, subject, addressed_to, message_body, sent_by, "Editor in Chief", organization_type)) show_browser(usr, "[fax_message.data]", "pressfaxpreview", "size=500x400") var/send_choice = tgui_input_list(usr, "Send this fax?", "Fax Template", list("Send", "Cancel")) - if(send_choice != "Send") + if(send_choice != "Send") return GLOB.fax_contents += fax_message // save a copy @@ -1388,7 +1388,7 @@ fax_message = new(generate_templated_fax(0, "USCM CENTRAL COMMAND", subject,addressed_to, message_body,sent_by, sent_title, "United States Colonial Marine Corps")) show_browser(usr, "[fax_message.data]", "uscmfaxpreview", "size=500x400") var/send_choice = tgui_input_list(usr, "Send this fax?", "Fax Template", list("Send", "Cancel")) - if(send_choice != "Send") + if(send_choice != "Send") return GLOB.fax_contents += fax_message // save a copy @@ -2006,6 +2006,29 @@ player_notes_all(checking.key) + if(href_list["AresReply"]) + var/mob/living/carbon/human/H = locate(href_list["AresReply"]) + + if(!istype(H)) + to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + return + + if((!GLOB.ares_link.interface) || (GLOB.ares_link.interface.inoperable())) + to_chat(usr, "ARES Interface offline.") + return + + var/input = input(src.owner, "Please enter a message from ARES to reply to [key_name(H)].","Outgoing message from ARES", "") + if(!input) + return + + to_chat(src.owner, "You sent [input] to [H] via ARES Interface.") + log_admin("[src.owner] replied to [key_name(H)]'s ARES message with the message [input].") + for(var/client/X in GLOB.admins) + if((R_ADMIN|R_MOD) & X.admin_holder.rights) + to_chat(X, "ADMINS/MODS: [SPAN_RED("[src.owner] replied to [key_name(H)]'s ARES message")] with: [SPAN_BLUE(input)] ") + GLOB.ares_link.interface.response_from_ares(input, href_list["AresRef"]) + + return /datum/admins/proc/accept_ert(mob/approver, mob/ref_person) diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index 0c303b7028e3..1ad914472935 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -859,6 +859,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_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/mob/language/languages.dm b/code/modules/mob/language/languages.dm index 546c2bf7714f..85c5a813ad83 100644 --- a/code/modules/mob/language/languages.dm +++ b/code/modules/mob/language/languages.dm @@ -166,6 +166,8 @@ var/message_body = "broadcasts, \"[message]\"" GLOB.STUI.game.Add("\[[time_stamp()]]APOLLO: [key_name(speaker)] : [message]
") GLOB.STUI.processing |= STUI_LOG_GAME_CHAT + log_say("[key_name(speaker)] : ([name]) [message]") + log_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/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm index abd07e056be7..949d32a4d1fe 100644 --- a/code/modules/mob/living/silicon/decoy/decoy.dm +++ b/code/modules/mob/living/silicon/decoy/decoy.dm @@ -20,6 +20,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/colonialmarines.dme b/colonialmarines.dme index fb138da60d54..079fed1eb128 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -771,6 +771,9 @@ #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_defines.dm" +#include "code\game\machinery\ARES\ARES.dm" +#include "code\game\machinery\ARES\ARES_procs.dm" #include "code\game\machinery\atmoalter\canister.dm" #include "code\game\machinery\atmoalter\meter.dm" #include "code\game\machinery\atmoalter\portable_atmospherics.dm" diff --git a/icons/obj/structures/machinery/ares.dmi b/icons/obj/structures/machinery/ares.dmi new file mode 100644 index 0000000000000000000000000000000000000000..533e574868e6b41049d99dd3fafa9d66f6865900 GIT binary patch literal 3639 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 b7yvB)G8-wZF_6vuNP+B8&eqkIe)#_bsMIww literal 0 HcmV?d00001 diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b30503215b59..a9522af3d959 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -5796,16 +5796,18 @@ }, /area/almayer/engineering/engineering_workshop/hangar) "asD" = ( -/obj/structure/machinery/light{ - dir = 1 - }, /obj/structure/machinery/door_control{ id = "areslockdownexterior"; - name = "ARES Lockdown"; + name = "ARES Chamber Lockdown"; pixel_x = -25; - req_one_access_txt = "19" + req_one_access_txt = "19;200" + }, +/obj/structure/machinery/door_control{ + id = "areslockdowninterior"; + name = "ARES Core Lockdown"; + req_one_access_txt = "1;200"; + pixel_y = 28 }, -/obj/effect/landmark/start/working_joe, /turf/open/floor/almayer{ icon_state = "ai_floors" }, @@ -5814,14 +5816,9 @@ /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/computer/ares_console{ + pixel_y = 24 }, -/mob/living/silicon/decoy/ship_ai, -/obj/structure/blocker/invisible_wall, /turf/open/floor/almayer{ icon_state = "ai_floors" }, @@ -6380,7 +6377,7 @@ /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 4; id = "areslockdownexterior"; - name = "\improper ARES Core Shutters" + name = "\improper ARES Chamber Shutters" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -6405,22 +6402,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" - }, -/area/almayer/command/airoom) +/turf/closed/wall/almayer/reinforced, +/area/almayer/command/securestorage) "aug" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "ai_floors" +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 }, +/obj/structure/window/framed/almayer/hull/hijack_bustable, +/turf/open/floor/plating, /area/almayer/command/airoom) "auh" = ( /obj/structure/machinery/cm_vending/sorted/tech/tool_storage, @@ -7055,16 +7044,15 @@ dir = 4; name = "ship-grade camera" }, -/obj/effect/landmark/start/working_joe, +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/folder/yellow, /turf/open/floor/almayer{ 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/item/folder/yellow, /turf/open/floor/almayer{ icon_state = "ai_floors" }, @@ -7283,9 +7271,9 @@ "awu" = ( /obj/structure/machinery/door_control{ id = "areslockdownexterior"; - name = "ARES Lockdown"; + name = "ARES Chamber Lockdown"; pixel_x = 25; - req_one_access_txt = "19" + req_one_access_txt = "19;200" }, /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -27565,10 +27553,19 @@ }, /area/almayer/hallways/starboard_hallway) "cnp" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/obj/item/folder/yellow, -/obj/structure/machinery/light{ - dir = 4 +/obj/structure/sign/safety/rewire{ + pixel_x = 32; + pixel_y = -7 + }, +/obj/structure/sign/safety/fibre_optics{ + pixel_x = 32; + pixel_y = 7 + }, +/obj/structure/machinery/door_control{ + id = "areslockdownprocessors"; + name = "ARES Mainframe Lockdown"; + req_one_access_txt = "1;200"; + pixel_y = 28 }, /turf/open/floor/almayer{ icon_state = "ai_floors" @@ -30022,14 +30019,15 @@ }, /area/almayer/hull/upper_hull/u_a_p) "dnm" = ( -/obj/structure/machinery/cm_vending/sorted/cargo_guns/intelligence_officer, -/obj/structure/machinery/light{ - dir = 8 +/obj/structure/machinery/ares/cpu, +/obj/structure/sign/safety/laser{ + pixel_x = 8; + pixel_y = 32 }, /turf/open/floor/almayer{ - icon_state = "silverfull" + icon_state = "tcomms" }, -/area/almayer/command/computerlab) +/area/almayer/command/airoom) "dnx" = ( /obj/structure/machinery/portable_atmospherics/hydroponics, /obj/structure/machinery/light, @@ -31861,10 +31859,14 @@ /turf/open/floor/almayer, /area/almayer/hallways/vehiclehangar) "eed" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/effect/landmark/start/working_joe, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "tcomms" }, -/area/almayer/command/computerlab) +/area/almayer/command/airoom) "eei" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/storage/box/cups{ @@ -32424,9 +32426,13 @@ }, /area/almayer/medical/testlab) "ene" = ( +/obj/structure/machinery/cm_vending/clothing/intelligence_officer{ + pixel_x = -32; + density = 0 + }, /turf/open/floor/almayer{ - dir = 4; - icon_state = "silvercorner" + dir = 8; + icon_state = "silver" }, /area/almayer/command/securestorage) "enf" = ( @@ -33392,7 +33398,7 @@ /turf/open/floor/almayer{ icon_state = "silver" }, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "eIA" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -36065,7 +36071,7 @@ dir = 6; icon_state = "silver" }, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "fXz" = ( /obj/structure/machinery/alarm/almayer{ dir = 1 @@ -36414,11 +36420,11 @@ /turf/open/floor/almayer, /area/almayer/squads/delta) "gfE" = ( -/obj/structure/machinery/light{ - dir = 4 +/obj/structure/machinery/firealarm{ + pixel_y = 28 }, /turf/open/floor/almayer{ - icon_state = "tcomms" + icon_state = "ai_floors" }, /area/almayer/command/airoom) "gfS" = ( @@ -36579,7 +36585,9 @@ }, /area/almayer/hull/lower_hull/l_f_s) "gjw" = ( -/obj/structure/blocker/invisible_wall, +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, /turf/open/floor/almayer{ icon_state = "ai_floors" }, @@ -39039,7 +39047,7 @@ dir = 6; icon_state = "silver" }, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "huX" = ( /obj/structure/largecrate/random/barrel/yellow, /obj/structure/machinery/light{ @@ -39064,18 +39072,14 @@ /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 +/obj/structure/machinery/light{ + dir = 8 }, /turf/open/floor/almayer{ - icon_state = "tcomms" + dir = 8; + icon_state = "silver" }, -/area/almayer/command/airoom) +/area/almayer/command/securestorage) "hvH" = ( /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -46435,13 +46439,17 @@ dir = 4; icon_state = "silver" }, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "kXu" = ( +/obj/structure/machinery/cm_vending/gear/intelligence_officer{ + pixel_x = -32; + density = 0 + }, /turf/open/floor/almayer{ dir = 8; icon_state = "silver" }, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "kXw" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -46875,7 +46883,11 @@ /turf/open/floor/wood/ship, /area/almayer/living/basketball) "lin" = ( -/obj/structure/closet/firecloset, +/obj/structure/window/reinforced, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 4; + name = "ship-grade camera" + }, /turf/open/floor/almayer{ icon_state = "tcomms" }, @@ -47019,15 +47031,9 @@ }, /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, +/obj/structure/blocker/invisible_wall, /turf/open/floor/almayer{ - icon_state = "ai_floors" + icon_state = "tcomms" }, /area/almayer/command/airoom) "lmE" = ( @@ -49137,12 +49143,8 @@ }, /area/almayer/engineering/port_atmos) "mlb" = ( -/obj/structure/machinery/status_display{ - pixel_y = 30 - }, -/turf/open/floor/almayer{ - icon_state = "tcomms" - }, +/obj/structure/blocker/invisible_wall, +/turf/closed/wall/almayer/reinforced, /area/almayer/command/airoom) "mlm" = ( /turf/open/floor/almayer{ @@ -50288,8 +50290,19 @@ }, /area/almayer/engineering/laundry) "mOi" = ( -/obj/structure/blocker/invisible_wall, -/turf/closed/wall/almayer, +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + dir = 1; + name = "\improper ARES Mainframe"; + req_access = null; + req_one_access_txt = "1;200" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer{ + id = "areslockdownprocessors"; + name = "\improper ARES Mainframe Shutters" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/almayer/command/airoom) "mOr" = ( /obj/structure/surface/table/almayer, @@ -51282,8 +51295,12 @@ }, /area/almayer/squads/req) "nmV" = ( +/obj/structure/machinery/cm_vending/sorted/cargo_guns/intelligence_officer{ + pixel_x = -32; + density = 0 + }, /turf/open/floor/almayer{ - dir = 1; + dir = 8; icon_state = "silver" }, /area/almayer/command/securestorage) @@ -52813,9 +52830,16 @@ /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/cells) "nYf" = ( -/obj/structure/machinery/cm_vending/clothing/intelligence_officer, +/obj/structure/machinery/cm_vending/clothing/intelligence_officer{ + pixel_x = -32; + density = 0 + }, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/open/floor/almayer{ - icon_state = "silverfull" + dir = 8; + icon_state = "silver" }, /area/almayer/command/securestorage) "nYh" = ( @@ -53064,7 +53088,7 @@ /turf/open/floor/almayer{ icon_state = "silver" }, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "ofs" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -54327,11 +54351,13 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) "oJR" = ( -/obj/structure/closet/toolcloset, -/obj/structure/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/structure/machinery/door_control{ + id = "areslockdowninterior"; + name = "ARES Core Lockdown"; + req_one_access_txt = "1;200"; + pixel_y = -24 }, +/obj/effect/landmark/start/working_joe, /turf/open/floor/almayer{ icon_state = "tcomms" }, @@ -55183,9 +55209,9 @@ /turf/closed/wall/almayer, /area/almayer/lifeboat_pumps/south1) "pgH" = ( -/obj/structure/window/reinforced{ - dir = 4; - health = 80 +/obj/structure/window/reinforced, +/obj/structure/machinery/power/apc/almayer/hardened{ + dir = 4 }, /turf/open/floor/almayer{ icon_state = "tcomms" @@ -56698,7 +56724,7 @@ /turf/open/floor/almayer{ icon_state = "mono" }, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "pUf" = ( /obj/structure/bed/chair{ dir = 4 @@ -56969,14 +56995,7 @@ /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 - }, -/turf/open/floor/almayer{ - icon_state = "tcomms" - }, +/turf/closed/wall/almayer/reinforced, /area/almayer/command/airoom) "pYo" = ( /obj/structure/machinery/chem_simulator, @@ -57430,6 +57449,15 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"qjr" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/machinery/ares/processor/apollo, +/turf/open/floor/almayer{ + icon_state = "tcomms" + }, +/area/almayer/command/airoom) "qjz" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/clipboard, @@ -58485,12 +58513,11 @@ }, /area/almayer/engineering/upper_engineering) "qKz" = ( -/obj/structure/machinery/light/small, +/obj/structure/closet/toolcloset, /turf/open/floor/almayer{ - dir = 4; - icon_state = "silver" + icon_state = "tcomms" }, -/area/almayer/command/securestorage) +/area/almayer/command/airoom) "qKF" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/device/radio/headset/almayer/mt, @@ -60096,11 +60123,11 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/navigation) "rxO" = ( -/obj/structure/machinery/cm_vending/clothing/intelligence_officer, +/obj/structure/machinery/ares/processor/interface, /turf/open/floor/almayer{ - icon_state = "silverfull" + icon_state = "tcomms" }, -/area/almayer/command/computerlab) +/area/almayer/command/airoom) "rxV" = ( /obj/structure/barricade/handrail, /obj/structure/largecrate/supply/generator, @@ -60279,10 +60306,8 @@ }, /area/almayer/hull/upper_hull/u_a_p) "rCw" = ( -/obj/structure/window/reinforced, -/obj/structure/machinery/light{ - dir = 8 - }, +/mob/living/silicon/decoy/ship_ai, +/obj/structure/blocker/invisible_wall, /turf/open/floor/almayer{ icon_state = "tcomms" }, @@ -60430,11 +60455,23 @@ }, /area/almayer/squads/delta) "rEL" = ( -/obj/structure/machinery/cm_vending/gear/intelligence_officer, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/structure/sign/safety/terminal{ + pixel_x = 32; + pixel_y = -8 + }, +/obj/structure/sign/safety/fibre_optics{ + pixel_x = 32; + pixel_y = 7 + }, /turf/open/floor/almayer{ - icon_state = "silverfull" + dir = 8; + icon_state = "cargo_arrow" }, -/area/almayer/command/computerlab) +/area/almayer/hallways/aft_hallway) "rEY" = ( /obj/structure/surface/table/almayer, /obj/item/toy/deck, @@ -60783,15 +60820,7 @@ }, /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/effect/landmark/start/working_joe, +/obj/structure/surface/table/reinforced/almayer_B, /turf/open/floor/almayer{ icon_state = "ai_floors" }, @@ -61420,10 +61449,10 @@ /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 +/obj/structure/machinery/ares/processor/bioscan, +/obj/structure/sign/safety/rewire{ + pixel_y = 32; + pixel_x = 8 }, /turf/open/floor/almayer{ icon_state = "tcomms" @@ -62132,7 +62161,7 @@ dir = 6 }, /turf/open/floor/almayer, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "suT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62722,7 +62751,7 @@ /area/almayer/squads/alpha) "sIf" = ( /obj/structure/machinery/door/window/southleft{ - req_access_txt = "19" + req_one_access_txt = "1;200" }, /turf/open/floor/almayer{ icon_state = "tcomms" @@ -64659,6 +64688,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) +"tBO" = ( +/obj/structure/machinery/camera/autoname/almayer{ + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + icon_state = "tcomms" + }, +/area/almayer/command/airoom) "tCb" = ( /obj/structure/surface/rack, /obj/item/device/radio{ @@ -64746,9 +64783,13 @@ "tFe" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ dir = 1; - name = "\improper ARES Mainframe"; + name = "\improper ARES Core"; req_access = null; - req_one_access_txt = "2;7" + req_one_access_txt = "1;200" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer{ + id = "areslockdowninterior"; + name = "\improper ARES Core Shutters" }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -65728,7 +65769,7 @@ "uaV" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, -/area/almayer/command/computerlab) +/area/almayer/command/securestorage) "uaZ" = ( /obj/structure/sign/safety/storage{ pixel_x = 8; @@ -68372,9 +68413,11 @@ }, /area/almayer/hull/lower_hull/l_m_p) "vhe" = ( -/obj/structure/sign/kiddieplaque{ - pixel_x = -32 +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 }, +/obj/structure/surface/rack, /turf/open/floor/almayer{ icon_state = "ai_floors" }, @@ -69825,9 +69868,10 @@ }, /area/almayer/stair_clone/upper) "vQf" = ( +/obj/structure/machinery/light/small, /turf/open/floor/almayer{ - dir = 1; - icon_state = "silvercorner" + dir = 4; + icon_state = "silver" }, /area/almayer/command/securestorage) "vQq" = ( @@ -71555,9 +71599,13 @@ }, /area/almayer/shipboard/brig/processing) "wCT" = ( -/obj/structure/machinery/power/apc/almayer/hardened{ - dir = 1 +/obj/structure/machinery/door_control{ + id = "areslockdownprocessors"; + name = "ARES Mainframe Lockdown"; + req_one_access_txt = "1;200"; + pixel_y = -24 }, +/obj/structure/closet/firecloset, /turf/open/floor/almayer{ icon_state = "tcomms" }, @@ -72772,7 +72820,7 @@ }, /area/almayer/living/gym) "xbN" = ( -/obj/structure/machinery/telecomms/processor/preset_four, +/obj/effect/landmark/start/working_joe, /turf/open/floor/almayer{ icon_state = "tcomms" }, @@ -74519,7 +74567,7 @@ }, /area/almayer/shipboard/brig/perma) "xQV" = ( -/obj/effect/landmark/start/working_joe, +/obj/structure/bed/chair/office/dark, /turf/open/floor/almayer{ icon_state = "ai_floors" }, @@ -113079,7 +113127,7 @@ arf auG awu azb -azb +rEL auG aDp apK @@ -113274,16 +113322,16 @@ xfm als ani aow -aqU -aqU -aqU -aqU -aqU -aqU -aqU +pYi +pYi +pYi +pYi +pYi +pYi +pYi auc aqU -aqU +pYi aHq aHq aHq @@ -113477,14 +113525,14 @@ ajJ aEX ajt ali -aqU -hvw +pYi +mlb rCw lin oJR -aqU +pYi asD -xQV +asG avK cck aCZ @@ -113680,13 +113728,13 @@ ael isW ajt abg -aqU -wCT +pYi +mlb +lmz sIf -isC -isC +xbN tFe -lmz +asG xQV rNF cck @@ -113883,17 +113931,17 @@ ael abg akU abg -aqU +pYi mlb -kbH +lmz pgH +eed aqU -aqU -aqU -auf -aqU -aqU -gjB +gfE +asG +avM +aug +jVE wDy aGN dxv @@ -114086,17 +114134,17 @@ adO lwm akU nQx -aqU pYi -isC -xbN -aqU -mOi +pYi +pYi +pYi +pYi +pYi asF asG vhe -cck -jVE +pYi +gjB nTs pje pje @@ -114289,15 +114337,15 @@ adO wUz aii abg -aqU +pYi sdl -isC -xbN -aqU -mOi +rxO +kbH +qKz +pYi gjw -aug -avL +asG +avM cck lyE rsO @@ -114492,15 +114540,15 @@ ahG bYe ajt abg -aqU -xbN -gfE -xbN -aqU +pYi +tBO +isC +sIf +isC mOi -gjw -cnp -avM +asG +xQV +rNF cck wmK liJ @@ -114695,16 +114743,16 @@ adO aEp xTt aEp -ioU -ioU -ioU -ioU -ioU -aHq -aHq -aHq -aHq -aHq +pYi +dnm +qjr +kbH +wCT +pYi +cnp +asG +avL +pYi aHq cnH kzk @@ -114898,16 +114946,16 @@ adO uLu anC aiC -ioU -pvK -qPE -xqD -nYf -rEL -dnm -rEL -rxO -aHq +pYi +pYi +pYi +pYi +pYi +pYi +pYi +pYi +pYi +pYi cnE liJ hgB @@ -115102,15 +115150,15 @@ aSz anG aiC ioU -qyZ -wTd -cmK -lFm -kXu -kXu -kXu +pvK +qPE +xqD +nYf kXu +nmV kXu +ene +hvw jHC liJ qmP @@ -115305,12 +115353,12 @@ aiC ajF aiC ioU -mSz -nIG -cSk -ene -aGN -aGN +qyZ +wTd +cmK +lFm +nVB +nVB suy uaV uaV @@ -115508,15 +115556,15 @@ aiC anG aiC ioU -ioU -ioU -ioU -nmV +mSz +nIG +cSk +lFm oeM oeM pUd oeM -eed +viN udZ aGN aGN @@ -115710,16 +115758,16 @@ nph aiC anG aiC -ioU -lPO -vJg -ioU -vQf +auf +auf +auf +auf +lFm oeM oeM -eed +viN oeM -eed +viN vQq eEo aGN @@ -115913,16 +115961,16 @@ adO aiC ajF aiC -ioU -dnS -viN -bAu -nVB +auf +lPO +vJg +auf +lFm eHY oeM -eed +viN oeM -eed +viN iLf aRi aGN @@ -116116,16 +116164,16 @@ pji aiC ajF aiC -ioU -pPM -qKz -ioU -mGu +auf +dnS +viN +bAu +lFm fXx fXx kXf huO -iLO +mGu qLV xNv iLO @@ -116319,10 +116367,10 @@ aFW aSy anH aoB -alL -alL -alL -jvY +auf +pPM +vQf +auf jvY jvY jvY diff --git a/tgui/packages/tgui/interfaces/AresInterface.js b/tgui/packages/tgui/interfaces/AresInterface.js new file mode 100644 index 000000000000..ea75fd848db3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AresInterface.js @@ -0,0 +1,916 @@ +import { useBackend } from '../backend'; +import { Flex, Box, Section, Button } 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, +}; + +export const AresInterface = (props, context) => { + const { data } = useBackend(context); + const { current_menu } = data; + const PageComponent = PAGES[current_menu](); + + return ( + + + + + + ); +}; + +const Login = (props, context) => { + const { act } = useBackend(context); + + return ( + + ARES v3.2 Interface + + WY-DOS Executive + + Version 8.1.1 + Copyright © 2182, Weyland Yutani Corp. + +