Skip to content

Commit

Permalink
Project ARES - Resurrection (#3298)
Browse files Browse the repository at this point in the history
# About the pull request
Overhauls ARES and makes it actually feel like a part of the ship and
not a square box.

Adds individual processors for different ARES systems that interact with
oneanother to produce the same effects as we normally have.
Bioscans require the bioscan processor to be functional, however will
not broadcast if the interface processor is not functioning.
The interface processor handles ARES communications (excluding Apollo)
and is chiefly responsible for logging things to the ARES Console. This
console can be used to review logs of all ARES' messages/announcements,
Bioscans, the Apollo Link logs etc.
<!-- Remove this text and explain what the purpose of your PR is.

Mention if you have tested your changes. If you changed a map, make sure
you used the mapmerge tool.
If this is an Issue Correction, you can type "Fixes Issue #169420" to
link the PR to the corresponding Issue number #169420.

Remember: something that is self-evident to you might not be to others.
Explain your rationale fully, even if you feel it goes without saying.
-->

# Explain why it's good for the game
Adds a little immersion and use for ARES.
# Testing Photographs and Procedure
<details>
<summary>Screenshots & Videos</summary>

Put screenshots and videos here with an empty line between the
screenshots and the `<details>` tags.

</details>


# Changelog
:cl:
add: Added an admin button for an ARES bioscan. Slightly refactored how
Bioscans trigger for marines, relying on an ARES processor.
add: Added individual proccessors for ARES systems. These are WIP and
will eventually have damage and repair interactions.
add: Added an ARES interaction console in the AI Core room, which holds
logs for most ARES functions.
add: Added the ability for ARES console to call ERT or Distress.
add: Added motion triggers in ARES core and shipside comms that send
alerts over Apollo.
add: Added a 1to1 conversation feature between ARES and users of the
interface console.
add: Added preset open versions of blended poddoors.
add: Added a console for directing Working Joes. This is largely WIP for
future PR(s).
add: 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.
fix: door_control buttons now respect being indestructable when
processing explosions.
maptweak: Fixed the M39s overflowing in brig armory due to use of
landmarks.
/:cl:

---------

Co-authored-by: harryob <[email protected]>
  • Loading branch information
realforest2001 and harryob committed Jun 28, 2023
1 parent 86a1e10 commit 9dd2c0d
Show file tree
Hide file tree
Showing 65 changed files with 7,588 additions and 2,076 deletions.
54 changes: 54 additions & 0 deletions code/__DEFINES/ARES.dm
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions code/__DEFINES/__game.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 8 additions & 0 deletions code/__DEFINES/access.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/admin.dm
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ var/global/list/note_categories = list("Admin", "Merit", "Commanding Officer", "
#define CC_MARK(user) "(<a href='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];ccmark=[REF(user)]'>MARK</a>)"
#define CC_REPLY(user) "(<a href='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];CentcommReply=[REF(user)]'>RPLY</a>)"
#define OBSERVER_JMP(observer, atom) atom ? "(<a href='?src=[REF(observer)];jumptocoord=1;X=[atom.x];Y=[atom.y];Z=[atom.z]'>JMP</a>)" : ""
#define ARES_MARK(user) "(<a href='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];AresMark=[REF(user)]'>MARK</a>)"
#define ARES_REPLY(user, ref) "(<a href='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];AresReply=[REF(user)];AresRef=[ref]'>RPLY</a>)"

/atom/proc/Admin_Coordinates_Readable(area_name, admin_jump_ref)
var/turf/T = get_turf(src)
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/camera.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/language.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/mode.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions code/_globalvars/bitfields.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
8 changes: 4 additions & 4 deletions code/datums/emergency_calls/emergency_call.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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!
Expand Down Expand Up @@ -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.")

Expand Down
7 changes: 7 additions & 0 deletions code/datums/paygrades/paygrade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -52,3 +53,9 @@ GLOBAL_LIST_INIT(co_paygrades, list(
"MO5",
"MO4"
))

GLOBAL_LIST_INIT(wy_paygrades, list(
"WYC8",
"WYC9",
"WYC10"
))
30 changes: 27 additions & 3 deletions code/defines/procs/announcement.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -82,14 +90,22 @@
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)

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
Expand Down Expand Up @@ -119,17 +135,25 @@

if(!isnull(signature))
message += "<br><br><i> Signed by, <br> [signature]</i>"
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))
continue
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
Expand Down
14 changes: 11 additions & 3 deletions code/game/area/almayer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down
13 changes: 11 additions & 2 deletions code/game/bioscans.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down
7 changes: 6 additions & 1 deletion code/game/jobs/access.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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)
Expand Down
Loading

0 comments on commit 9dd2c0d

Please sign in to comment.