Skip to content

Commit

Permalink
adds briefing, mission ship templates, flavor text.
Browse files Browse the repository at this point in the history
  • Loading branch information
silencer-pl committed Aug 22, 2024
1 parent d401872 commit 620cb47
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 58 deletions.
4 changes: 2 additions & 2 deletions code/game/jobs/job/uacm/intermission.dm
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/datum/job/uacm/basepc
title = JOB_UACM_BASEPC
total_positions = 12
spawn_positions = 12
total_positions = 10
spawn_positions = 10
flags_startup_parameters = ROLE_ADD_TO_DEFAULT
gear_preset = /datum/equipment_preset/uacm/basepc

Expand Down
20 changes: 16 additions & 4 deletions code/modules/admin/mission_control/mission_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -244,16 +244,28 @@
break
var/new_map = tgui_alert(usr, "Do yo wish to destroy everything on the old map?", "REPLACE?", list("Yes","No"), timeout = 0)
if(new_map == null) new_map = "No"
switch(tgui_input_list(usr, "Select Template:","TEMPLATE select",list("Blank","Comms and Ship loading test"),timeout = 0))
switch(tgui_input_list(usr, "Select Template:","TEMPLATE select",list("Blank","Deploy the Amelia", "Deploy the Marie","Tester Targets","Escapees","Pursuers"),timeout = 0))
if(null)
return
if("Blank")
sts_master.clear_map()
if("Comms and Ship loading test")
if("Deploy the Amelia")
if(new_map == "Yes") sts_master.clear_map()
sts_master.add_entity(entity_type = 0, x = 1, y = 1, name = "UAS Marie", type = "OV-PST Rapid Pursuit Interceptor", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UACM", ship_damage = 5, ship_shield = 2, ship_speed = 5, salvos = 2)
sts_master.add_entity(entity_type = 0, x = 50, y = 50, name = "UAS Amelia", type = "OV-PST Rapid Pursuit Interceptor", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UACM", ship_damage = 5, ship_shield = 2, ship_speed = 5, salvos = 2)
sts_master.add_entity(entity_type = 0, x = 3, y = 2, name = "UAS Amelia", type = "OV-PST Rapid Pursuit Interceptor", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UACM", ship_damage = 5, ship_shield = 2, ship_speed = 5, salvos = 2)
return
if("Deploy the Marie")
if(new_map == "Yes") sts_master.clear_map()
sts_master.add_entity(entity_type = 0, x = 4, y = 73, name = "UAS Amelia", type = "OV-PST Rapid Pursuit Interceptor", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UACM", ship_damage = 5, ship_shield = 2, ship_speed = 5, salvos = 2)
return
if("Tester Targets")
sts_master.add_entity(entity_type = 0, x = 7, y = 5, name = "Weapons Test Drone Alpha", type = "OV-PST Prototype Testing Drone", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UACM", ship_damage = 1, ship_shield = 0, ship_speed = 2, salvos = 0)
sts_master.add_entity(entity_type = 0, x = 2, y = 72, name = "Weapons Test Drone Beta", type = "OV-PST Prototype Testing Drone", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UACM", ship_damage = 1, ship_shield = 0, ship_speed = 2, salvos = 0)
if("Escapees")
sts_master.add_entity(entity_type = 0, x = 52, y = 98, name = "TPS Workers Glory", type = "Chelyabinsk Class Heavy Transport", vector_x = 0, vector_y = -3, ship_status = "Operational", ship_faction = "UPP", ship_damage = 10, ship_shield = 0, ship_speed = 3, salvos = 0)
if("Pursuers")
sts_master.add_entity(entity_type = 0, x = 92, y = 98, name = "TPS Devils Bones", type = "Kaifeng Class Frigate", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UPP", ship_damage = 5, ship_shield = 0, ship_speed = 4, salvos = 1)
sts_master.add_entity(entity_type = 0, x = 90, y = 97, name = "TPS Peoples Hammer", type = "Kaifeng Class Frigate", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UPP", ship_damage = 5, ship_shield = 0, ship_speed = 4, salvos = 1)
sts_master.add_entity(entity_type = 0, x = 94, y = 99, name = "TPS Tyrants Ashes", type = "Kaifeng Class Frigate", vector_x = 0, vector_y = 0, ship_status = "Operational", ship_faction = "UPP", ship_damage = 5, ship_shield = 0, ship_speed = 4, salvos = 1)

/datum/admins/proc/link_player_ships()
if(!check_rights(R_ADMIN)) return
Expand Down
38 changes: 24 additions & 14 deletions code/modules/admin/verbs/sectorpatrol.dm
Original file line number Diff line number Diff line change
Expand Up @@ -35,29 +35,39 @@

/client/proc/cmd_start_sequence()
set name = "Start Sequence"
set category = "Admin.SectorPatrol"
set category = "DM.Narration"

if (!admin_holder || !(admin_holder.rights & R_MOD))
to_chat(src, "Only administrators may use this command.")
return

var/puzzlebox_admin_option = tgui_input_list(usr, "Select a Sequence", "Start Sequence", list("None - Leave", "Open Hideaway Podlocks", "Open TOS Outer Podlocks", "Open TOS Inner Podlocks"), 0)
var/puzzlebox_admin_option = tgui_input_list(usr, "Select a Sequence", "Start Sequence", list("None - Leave", "The Interceptor Takes Off"), 0)
if (!puzzlebox_admin_option) return
switch(puzzlebox_admin_option)
if("None - Leave")
return
if("Open Hideaway Podlocks")
for (var/obj/structure/machinery/door/poddoor/almayer/locked/A in world)
if(A.id == "crypt-a")
A.open()
if("Open TOS Outer Podlocks")
for (var/obj/structure/machinery/door/poddoor/almayer/locked/A in world)
if(A.id == "crypt-b")
A.open()
if("Open TOS Inner Podlocks")
for (var/obj/structure/machinery/door/poddoor/almayer/locked/A in world)
if(A.id == "crypt-c")
A.open()
if("The Interceptor Takes Off")
to_chat(world, narrate_body("The ships Twilight Rails kick in and it begins its glide to its destination point. The Interceptor feels quieter than most spaceships you've been on."))
sleep(150)
to_chat(world, narrate_body("As the ship positions itself in its starting point, you start to hear chatter over the comms, it seems obvious that currently, all eyes on the PST are on you."))
sleep(140)
to_chat(world, narrate_body("The ship comes to a halt again and for a few seconds, it seems like its gone inert."))
sleep(130)
to_chat(world, narrate_body("A loud humming starts to fill the ship as everyone on board can smell the familiar smell of burnt ozone, a very common occurrence on the PST."))
sleep(140)
to_chat(world, narrate_body("The Twilight Rails are overcharged and start to expel excess Twilight energy. Normally, this would be a reason to panic. A ship overcharging its hyperspace rails like this risks getting drawn into the Hyperspace field without a vector, never to come back."))
sleep(140)
to_chat(world, narrate_body("The crew of the PST watches as a blue wormhole opens underneath the Interceptor, slowly matching it in size. "))
sleep(140)
to_chat(world, narrate_body("The tear is complete and the ship nosedives into it, resembling a submarine dive. You feel the hair rise at the back of your head as reality seems to distort for a second. "))
sleep(160)
to_chat(world, narrate_body("Suddenly, something pulls on the craft. It feels like it was tethered to something as you feel it accelerate through Hyperspace. You feel like someone is watching you, but the presence does not feel hostile or out of place. "))
sleep(150)
to_chat(world, narrate_body("As the ship continues to make its way through Hyperspace, the presence intensifies. You feel like you've known this presence from somewhere but can't put it into words. "))
sleep(130)
to_chat(world, narrate_body("The feeling passes as the ship breaches the Hyperspace boundary again and conventional drives kick in. It seems like this was too short to be an actual Hyperspace jump... "))
sleep(140)
to_chat(world, narrate_body("Wherever you are, it seems like the jump at least was completed safely. It takes a moment for the ships sensors to come alive..." ))

/client/proc/cmd_save_turfs()

Expand Down
4 changes: 2 additions & 2 deletions code/modules/shuttle/shuttles/sectorpatrol.dm
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,8 @@
height = 6
callTime = 10
ignitionTime = 55
rechargeTime = 0
prearrivalTime = 0
rechargeTime = 10
prearrivalTime = 60
var/starboard_door

/obj/docking_port/mobile/emergency_response/uacm_ship_transit/Initialize(mapload)
Expand Down
131 changes: 107 additions & 24 deletions code/modules/terminal/briefing/briefing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,76 @@
icon_state = "off"
terminal_id = "briefing"
var/terminal_range = 20
terminal_window_size = "500x500"
terminal_line_length = 42
terminal_window_size = "500x630"
terminal_line_length = 38
terminal_line_height = 13
header_name = "RDML. Thomas Boulette"
var/op_info = "PST INTERCEPTOR PROTOTYPING"

/obj/structure/terminal/Initialize(mapload, ...)
. = ..()
icon_state = "off"
update_icon()

/obj/structure/terminal/briefing/kill_window(reset = 1)
for (var/mob/mobs in world)
mobs << browse(null, "window=[terminal_id]")
if(reset == 1) reset_buffer()

/obj/structure/terminal/briefing/WriteHeader()
terminal_header = {"<center><b>[header_name]</b><br>UACM 2ND LOGISTICS<hr>[op_info]</center>"}

/obj/structure/terminal/briefing/terminal_display() // Display loop. HTML encodes (which incidentally should also prevent a lot of HTML shenanigans since it escapes characters) and displays current buffer. Please don't laugh at my placeholder HTML -_- , in normal circumstances should not need edits unless you want to change the style for an individual terminal.
trim_buffer()
var/terminal_output = ("<p>" + jointext((terminal_buffer), "</p><p>") + "/<p>")
var/terminal_output = ("<p>" + jointext((terminal_trimmed_buffer), "</p><p>") + "</p>")
var/terminal_html ={"<!DOCTYPE html>
<html>
<head>
<style>
body {
background-color:black;
}
width: calc(800px - 2em);
}
.box {
border-style: solid;
height: 110px;
}
.text {
padding: 0px 5px;
}
.text_head {
padding: 10px 5px;
}
.box_console {
border-style: solid;
height: 490px;
}
#terminal_text {
font-family: 'Courier New',
cursive, sans-serif;
color: #1bdd4b;
text-align: left;
padding: 0em 1em;
padding: 0em, 1em;
}
</style>
</head>
<body>
<div id="terminal_text">
<div id = "terminal_text">
<div class="box">
<div class="text_head">
<p>
[terminal_header]
</p>
</div>
</div>
<div class="box_console">
<div class="text">
<p>
[terminal_output]
</p>
</div>
</div>
</div>
</body>
"}
for (var/mob/mobs_in_range in view(terminal_range, src))
Expand All @@ -56,25 +92,72 @@
var/obj/structure/machinery/light/marker/admin/marker = new(get_turf(src))
marker.name = "RDML. Thomas Boulette"
marker.langchat_color = "#268323"
emoteas("buzzes audibly then comes to life.")
terminal_buffer += "<br>"
terminal_buffer += "<center><b>UACM 2ND LOGISTICS</b><br>RDML. Thomas Boulette<hr>OPERATION PHOENIX</center>"
terminal_reserved_lines = 4
icon_state = "blank"
update_icon()
emoteas("buzzes audibly then comes to life.", 1)
terminal_display()
marker.talkas("Good morning, Test Crews. Cassandra says you are ready to go to work, which is just as well, because we have work to do.")
marker.talkas("As of right now, the Second Logistics is joining the UAAC-TIS operation codenamed Operation Phoenix.")
marker.talkas("Long story short, with cooperation from our TWE allies, we are scouring a part of Neroid Dark Space and recovering wreckage lost to the dark.")
marker.talkas("Our point of contact for this operation is our own Commander…s Reed-Wilo as it were and their TWE counterpart, Major Asuka Bannister.")
marker.talkas("Some of you read the files that were unclassified for you I hope, so that name should ring a bell.")
terminal_display_line("A derelict USCMC vessel was found during the search. The ship was claimed by the PST for recovery.<br>", 0, 1)
terminal_display_line("Recover all materials from the ship compoments and structure using the PST disassembler array and drones.<br>", 0, 1)
terminal_display_line("Paper and Electronic Intelligence is avaialble. Keep an eye an use according procedures to secure them.<br>", 0, 1)
terminal_display_line("Mission Control has any more additonal information you may need.", 0, 0)
marker.talkas("While we work on the bigger picture and getting you the clearance you need to actively partake in the operation, an opportunity present itself to give you a dry run of an important function you will be fulfilling as Test Crews.")
marker.talkas("Salvage anything that's not intel and isn't bolted down. Deconstruct and salvage anything that is. ")
emoteas("Buzzes loudly and starts to display a UACM logo")
icon_state = "uacm"
update_icon()
marker.talkas("Good afternoon, Test Crews. I hope you are ready to make history.")
marker.talkas("This is the first live crew test of the PSTs own interceptors. Essentially, on paper at least, this is literally why any of you are here, testing these prototypes.")
marker.talkas("However, I can safely tell you this is likely way more than just a simple test.")
icon_state = "list"
emoteas("The buzzing intensifies as the terminal starts to display lists.", 1)
update_icon()
terminal_display_line("OV-PST PURSUIT INTERCEPTOR", 0, 1, 1)
terminal_display_line("- Light weight, rapid interceptor craft.", 0, 1)
terminal_display_line("- Can be safely operated by a crew of two to five men.", 0, 1)
terminal_display_line("- Utilizes the Mission Control OV-PST link.", 0, 0)
marker.talkas("We have two prototypes ready to test. I know that some of you are frequently called to other duties on the station...")
marker.talkas("So, we will make the final decision how many prototypes are crewed and by whom once we get there.")
marker.talkas("Take everything. You should have the tools to completely recycle the whole vessel.")
marker.talkas("Mission Control will handle any details. You can trust her with your life.")
marker.talkas("I hope to finally be able to formally meet you soon. Good luck.")
marker.talkas("Now. There are two systems that you will be expected to write a report on.")
marker.talkas("One, ships hyperspace.")
reset_buffer()
update_icon()
terminal_display_line("TRADITIONAL HYPERSPACE JUMP", 0, 1, 1)
terminal_display_line("- Gather Twilight Paradox Energy on the systems Twilight Boundary.", 0, 1)
terminal_display_line("- Ship AI calculates departure and travel vector.", 0, 1)
terminal_display_line("- Overcharging the ships twilight rails sends the ship into the jump.", 0, 1)
terminal_display_line("- A minuscule error in calculations means missing target by light years.", 0, 0)
marker.talkas("This, to remind you all, is the standard process of a hyperspace jump.")
marker.talkas("Essentially you leave towards the system's edge, glide alongside it to charge your systems.")
marker.talkas("Then push yourself through hyperspace to your target.")
marker.talkas("Because of our station friend, the Interceptor takes a different route...")
reset_buffer()
update_icon()
terminal_display_line("MISSION CONTROL ASSISTED JUMP", 0, 1, 1)
terminal_display_line("- Mission Control establishes the position of target based on star chart information.", 0, 1)
terminal_display_line("- Twilight Paradox energy, pushed from the PST overcharges the ship's engines, causing a Paradox Gap to form under the ship.", 0, 1)
terminal_display_line("- The ship falls into the gap and into Hyperspace. The crew tries not to panic.", 0, 1)
terminal_display_line("- A physical manifestation of Mission Control in their native enviroment pulls the ship to its destination.", 0, 0)
marker.talkas("Now, I know what some of you may be thinking. Overcharging your ships engines is a sure way to kill everyone on board you ship.")
marker.talkas("I can assure you we've sent literally hundreds of tester craft through the field this way.")
marker.talkas("We are hoping that human presence during the jump will let us understand the mechanics of LD or Hyperspace better.")
marker.talkas("But just in case, be ready for the unexpected. Our local 'experts' on unexpected contact with Liquid Data say that at most, it should be auditory hallucinations.")
marker.talkas("They will be listening in once you deploy to help with any issues that may arise.")
marker.talkas("The second system to test is Mission Controls absolute coordinate system.")
reset_buffer()
update_icon()
terminal_display_line("MISSION CONTROL GRID", 0, 1, 1)
terminal_display_line("- Segment the sector into a grid of squares.", 0, 1)
terminal_display_line("- Tracks and relates all information to MC enabled systems using the grid as reference.", 0, 1)
terminal_display_line("- Effectively no two ships and no two missiles can occupy the same MC grid.", 0, 0)
marker.talkas("This means that all your ship navigation, weapons, problems and what have you can now be operated and interpreted by coordinates, and not relative position as we have done until now.")
marker.talkas("Compared to you, other spaceships will be blind as bats. Literally.")
reset_buffer()
update_icon()
terminal_display_line("MISSION CONTROL GRID, CONT.", 0, 1, 1)
terminal_display_line("- All primary firing procedures require absolute coordinates.", 0, 1)
terminal_display_line("- Coordinates are gathered by using ship probes, fired on relative vectors.", 0, 1)
terminal_display_line("- Direct hit with probe gives more information.", 0, 0)
marker.talkas("And this is basically what you need to remember when it comes to operating your ships. We will provide more instruction remotely.")
marker.talkas("This is a test, and we do not expect everything to work perfectly.")
marker.talkas("There are other features that the ships have, but I feel like I'll bore you if I drone on any longer.")
marker.talkas("Decide among yourselves who crews what. For the time being, consider all posts fluid.")
marker.talkas("Thank you and good luck.")
icon_state = "off"
update_icon()
kill_window()
reset_buffer()

19 changes: 14 additions & 5 deletions code/modules/terminal/terminal.dm
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@
terminal_trimmed_buffer.Cut((1+terminal_reserved_lines),(2+terminal_reserved_lines))


/obj/structure/terminal/proc/terminal_display_line(text = null,delay = TERMINAL_STANDARD_SLEEP, cache = 0) // cache = 1 bypasses displaying, this is for briefing terminals that may want to parse multiple lines before displaying
/obj/structure/terminal/proc/terminal_display_line(text = null,delay = TERMINAL_STANDARD_SLEEP, cache = 0, center = 0) // cache = 1 bypasses displaying, this is for briefing terminals that may want to parse multiple lines before displaying
var/line_to_display = text
if(!line_to_display) return "null string passed to display line."
if(length(line_to_display) > terminal_line_length)
Expand All @@ -122,15 +122,24 @@
cut_line = copytext(line_to_display,1,terminal_line_length)
var/last_space = findlasttext(cut_line, " ")
cut_line = copytext(line_to_display,1,last_space)
terminal_trimmed_buffer += (html_encode(cut_line) + "&nbsp")
terminal_buffer += (html_encode(cut_line) + "&nbsp")
if(center == 1)
terminal_trimmed_buffer += ("<center>" + html_encode(cut_line) + "</center> &nbsp")
terminal_buffer += ("<center>" + html_encode(cut_line) + "</center> &nbsp")
else
terminal_trimmed_buffer += (html_encode(cut_line) + "&nbsp")
terminal_buffer += (html_encode(cut_line) + "&nbsp")
if(cache == 0)
if(center == 1) terminal_buffer += "</center>"
terminal_display()
if(delay != 0) sleep(delay)
line_to_display = copytext(line_to_display,last_space,0)
if(length(line_to_display) <= terminal_line_length)
terminal_trimmed_buffer += (html_encode(line_to_display) + "&nbsp")
terminal_buffer += (html_encode(line_to_display) + "&nbsp")
if(center == 1)
terminal_trimmed_buffer += ("<center>" + html_encode(line_to_display) + "</center> &nbsp")
terminal_buffer += ("<center>" + html_encode(line_to_display) + "</center> &nbsp")
else
terminal_trimmed_buffer += (html_encode(line_to_display) + "&nbsp")
terminal_buffer += (html_encode(line_to_display) + "&nbsp")
if(cache == 0)
terminal_display()
if(delay != 0) sleep(delay)
Expand Down
Loading

0 comments on commit 620cb47

Please sign in to comment.