Merge pull request #16670 from KillianKirilenko/kk-spacetraffic

Space Traffic Update, Cleanup, & KHI Removal
This commit is contained in:
Heroman3003
2024-12-08 18:41:51 +10:00
committed by GitHub
36 changed files with 3350 additions and 5071 deletions
+2 -2
View File
@@ -51,8 +51,8 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance
//VOREStation Add
/obj/item/technomancer_catalog/universal
name = "universal catalog"
desc = "A catalog to be used with the KHI 'Universal Core', shamelessly \
copied by a Kitsuhana designer from some group of 'technomancers' or another.<br>\
desc = "A catalog to be used with the 'Universal Core', its contents shamelessly \
copied by an unknown designer from some group of 'technomancers' or another.<br>\
The back of the book has " + span_italics("'Export Edition'") + " stamped on it."
budget = 700
max_budget = 700
+1 -1
View File
@@ -357,7 +357,7 @@
/obj/item/technomancer_core/universal
name = "universal core"
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. \
This one is a copy of a 'technomancer' core, shamelessly ripped off by a Kitsuhana pattern designer \
This one is a copy of a 'technomancer' core, shamelessly ripped off by an unknown pattern designer \
for fun, so that he could perform impressive 'magic'. The pack sloshes slightly if you shake it.<br>\
Under the straps, <i>'Export Edition'</i> is printed."
energy = 7000
@@ -5,7 +5,7 @@
/decl/poster/lewd/vore_2
icon_state = "sbsposter2"
name = "AroButt"
desc = "A lewd view of KHI's cutest fops."
desc = "A lewd view of one of the galaxy's cutest fops."
/decl/poster/vore_3
icon_state = "sbsposter3"
name = "Poster This Dog"
@@ -235,8 +235,8 @@
starts_with = list(/obj/item/reagent_containers/pill/healing_nanites = 14)
/obj/item/storage/pill_bottle/sleevingcure
name = "pill bottle (Kitsuhanan Cure)"
desc = "A rare cure provided by KHI that helps counteract negative side effects of using imperfect resleeving machinery."
name = "pill bottle (resleeving sickness cure)"
desc = "A rare cure provided by Vey-Medical that helps counteract negative side effects of using imperfect resleeving machinery."
starts_with = list(/obj/item/reagent_containers/pill/sleevingcure = 7)
/obj/item/storage/pill_bottle/sleevingcure/full
@@ -250,7 +250,7 @@
can_hold = list(/obj/item/reagent_containers/pill)
/obj/item/storage/mrebag/pill/sleevingcure
name = "vacuum-sealed pill (Kitsuhanan Cure)"
name = "vacuum-sealed pill (resleeving sickness cure)"
desc = "A small vacuum-sealed package containing a singular pill. For emergencies only."
starts_with = list(/obj/item/reagent_containers/pill/sleevingcure)
+408 -64
View File
@@ -1,21 +1,41 @@
//Cactus, Speedbird, Dynasty, oh my
//Also, massive additions/refactors by Killian, because the original incarnation was full of holes
//minimum and maximum message delays, typically tracked in seconds
#define MIN_MSG_DELAY 3
#define MAX_MSG_DELAY 6
var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
/datum/lore/atc_controller
var/delay_max = 25 MINUTES //How long between ATC traffic, max. Default is 25 mins.
var/delay_min = 40 MINUTES //How long between ATC traffic, min. Default is 40 mins.
var/backoff_delay = 5 MINUTES //How long to back off if we can't talk and want to. Default is 5 mins.
var/next_message //When the next message should happen in world.time
var/delay_min = 45 MINUTES //How long between ATC traffic, minimum
var/delay_max = 90 MINUTES //Ditto, maximum
//Shorter delays means more traffic, which gives the impression of a busier system, but also means a lot more radio noise
var/backoff_delay = 5 MINUTES //How long to back off if we can't talk and want to. Default is 5 mins.
var/initial_delay = 15 MINUTES //How long to wait before sending the first message of the shift.
var/next_message = 45 MINUTES //When the next message should happen in world.time
var/force_chatter_type //Force a specific type of messages
var/squelched = 0 //If ATC is squelched currently
var/squelched = 0 //If ATC is squelched currently
//define a block of frequencies so we can have them be static instead of being random for each call
var/ertchannel
var/medchannel
var/engchannel
var/secchannel
var/sdfchannel
/datum/lore/atc_controller/New()
spawn(10 SECONDS) //Lots of lag at the start of a shift.
msg("New shift beginning, resuming traffic control.")
next_message = world.time + rand(delay_min,delay_max)
process()
//generate our static event frequencies for the shift. alternately they can be completely fixed, up in the core block
ertchannel = "[rand(700,749)].[rand(1,9)]"
medchannel = "[rand(750,799)].[rand(1,9)]"
engchannel = "[rand(800,849)].[rand(1,9)]"
secchannel = "[rand(850,899)].[rand(1,9)]"
sdfchannel = "[rand(900,999)].[rand(1,9)]"
spawn(5 SECONDS) //Lots of lag at the start of a shift. Yes, the following lines *have* to be indented or they're not delayed by the spawn properly.
msg("New shift beginning, resuming traffic control. This shift's Colony Frequencies are as follows: Emergency Responders: [ertchannel]. Medical: [medchannel]. Engineering: [engchannel]. Security: [secchannel]. System Defense: [sdfchannel].")
next_message = world.time + initial_delay
process()
/datum/lore/atc_controller/process()
if(world.time >= next_message)
@@ -30,7 +50,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
/datum/lore/atc_controller/proc/msg(var/message,var/sender)
ASSERT(message)
global_announcer.autosay("[message]", sender ? sender : "[using_map.station_short] Space Control")
global_announcer.autosay("[message]", sender ? sender : "[using_map.dock_name] Control")
/datum/lore/atc_controller/proc/reroute_traffic(var/yes = 1)
if(yes)
@@ -43,87 +63,411 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
squelched = 0
/datum/lore/atc_controller/proc/shift_ending(var/evac = 0)
msg("Automated Tram departing [using_map.station_name] for [using_map.dock_name] on routine transfer route.","NT Automated Tram") //VOREStation Edit - Tram, tho.
sleep(5 SECONDS)
msg("Automated Tram, cleared to complete routine transfer from [using_map.station_name] to [using_map.dock_name].") //VOREStation Edit - Tram, tho.
msg("[using_map.shuttle_name], this is [using_map.dock_name] Control, you are cleared to complete routine transfer from [using_map.station_name] to [using_map.dock_name].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.shuttle_name] departing [using_map.dock_name] for [using_map.station_name] on routine transfer route. Estimated time to arrival: ten minutes.","[using_map.shuttle_name]")
/datum/lore/atc_controller/proc/random_convo()
/datum/lore/atc_controller/proc/random_convo(var/force_chatter_type)
var/one = pick(loremaster.organizations) //These will pick an index, not an instance
var/two = pick(loremaster.organizations)
var/datum/lore/organization/source = loremaster.organizations[one] //Resolve to the instances
var/datum/lore/organization/dest = loremaster.organizations[two]
var/datum/lore/organization/secondary = loremaster.organizations[two] //repurposed for new fun stuff
//Let's get some mission parameters
var/owner = source.short_name //Use the short name
//Let's get some mission parameters, pick our first ship
var/name = source.name //get the name
var/owner = source.short_name //Use the short name
var/prefix = pick(source.ship_prefixes) //Pick a random prefix
var/firstid = "[rand(0,9)][rand(0,9)][rand(0,9)][rand(0,9)]"
var/mission = source.ship_prefixes[prefix] //The value of the prefix is the mission type that prefix does
var/shipname = pick(source.ship_names) //Pick a random ship name to go with it
var/destname = pick(dest.destination_names) //Pick a random holding from the destination
var/shipname = pick(source.ship_names) //Pick a random ship name
var/destname = pick(source.destination_names) //destination is where?
var/slogan = pick(source.slogans) //god help you all
var/org_type = source.org_type //which group do we belong to?
var/combined_name = "[owner] [prefix] [shipname]"
var/alt_atc_names = list("[using_map.station_short] TraCon","[using_map.station_short] Control","[using_map.station_short] STC","[using_map.station_short] Airspace")
var/wrong_atc_names = list("Sol Command","New Reykjavik StarCon", "[using_map.dock_name]")
var/mission_noun = list("flight","mission","route")
var/request_verb = list("requesting","calling for","asking for")
//pick our second ship
//var/secondname = secondary.name //not used atm, commented out to suppress errors
var/secondowner = secondary.short_name
var/secondprefix = pick(secondary.ship_prefixes) //Pick a random prefix
var/secondid = "[rand(0,9)][rand(0,9)][rand(0,9)][rand(0,9)]"
var/secondshipname = pick(secondary.ship_names) //Pick a random ship name
var/org_type2 = secondary.org_type
//DEBUG BLOCK
//to_world("DEBUG OUTPUT 1: [name], [owner], [prefix], [firstid], [mission], [shipname], [org_type], [destname]")
//to_world("DEBUG OUTPUT 2: [secondowner], [secondprefix], [secondid], [secondshipname], [org_type2]")
//to_world("DEBUG OUTPUT 3: Chose [chatter_type]")
//DEBUG BLOCK ENDS
var/combined_first_name = "[prefix] [firstid] |[shipname]|" //formal traffic control identifier for use in messages
var/short_first_name = "[prefix] |[shipname]|" //special variant for certain events
var/comm_first_name = "[owner] [shipname]" //corpname + shipname for speaker identity in log
var/combined_second_name = "[secondprefix] [secondid] |[secondshipname]|"
var/comm_second_name = "[secondowner] [secondshipname]"
//var/short_second_name = "[secondprefix] |[secondshipname]|" //not actually used for now
var/mission_noun = pick(source.flight_types) //pull from a list of owner-specific flight ops, to allow an extra dash of flavor
if(source.complex_tasks) //if our source has the complex_tasks flag, regenerate with a two-stage assignment
mission_noun = "[pick(source.task_types)] [pick(source.flight_types)]"
//First response is 'yes', second is 'no'
var/requests = list("[using_map.station_short] transit clearance" = list("permission for transit granted", "permission for transit denied, contact regional on 953.5"),
"planetary flight rules" = list("authorizing planetary flight rules", "denying planetary flight rules right now due to traffic"),
"special flight rules" = list("authorizing special flight rules", "denying special flight rules, not allowed for your traffic class"),
"current solar weather info" = list("sending you the relevant information via tightbeam", "cannot fulfill your request at the moment"),
"nearby traffic info" = list("sending you current traffic info", "no available info in your area"),
"remote telemetry data" = list("sending telemetry now", "no uplink from your ship, recheck your uplink and ask again"),
"refueling information" = list("sending refueling information now", "no fuel for your ship class in this sector"),
"a current system time sync" = list("sending time sync ping to you now", "your ship isn't compatible with our time sync, set time manually"),
"current system starcharts" = list("transmitting current starcharts", "your request is queued, overloaded right now"),
"permission to engage FTL" = list("permission to engage FTL granted, good day", "permission denied, wait for current traffic to pass"),
"permission to transit system" = list("permission to transit granted, good day", "permission denied, wait for current traffic to pass"),
"permission to depart system" = list("permission to depart granted, good day", "permission denied, wait for current traffic to pass"),
"permission to enter system" = list("good day, permission to enter granted", "permission denied, wait for current traffic to pass"),
)
var/requests = list(
"special flight rules" = list("authorizing special flight rules", "denying special flight rules, not allowed for your traffic class"),
"current solar weather info" = list("sending you the relevant information via tightbeam", "your request has been queued, stand by"),
"sector aerospace priority" = list("affirmative, sector aerospace priority is yours", "negative, another vessel in your sector has priority right now"),
"system traffic info" = list("sending you current traffic info", "request queued, please hold"),
"refueling information" = list("sending refueling information now", "depots currently experiencing fuel shortages, advise you move on"),
"a current system time sync" = list("sending time sync ping to you now", "your ship isn't compatible with our time sync, set time manually"),
"current system starcharts" = list("transmitting current starcharts", "your request is queued, overloaded right now")
)
//Random chance things for variety
var/chatter_type = "normal"
if(force_chatter_type)
chatter_type = force_chatter_type
else if((org_type == "government" || org_type == "neutral" || org_type == "military" || org_type == "corporate" || org_type == "system defense" || org_type == "spacer") && org_type2 == "pirate") //this is ugly but when I tried to do it with !='s it fired for pirate-v-pirate, still not sure why. might as well stick it up here so it takes priority over other combos.
chatter_type = "distress"
else if(org_type == "corporate") //corporate-specific subset for the slogan event. despite the relatively high weight it was still quite rare in tests.
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",180;"dockingrequestgeneric",30;"undockingrequest","normal",30;"undockingdenied",50;"slogan",25;"civvieleaks",25;"report_to_dock")
else if((org_type == "government" || org_type == "neutral" || org_type == "military"))
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",180;"dockingrequestgeneric",30;"undockingrequest","normal",30;"undockingdenied",25;"civvieleaks",25;"report_to_dock")
else if(org_type == "spacer")
chatter_type = pick(5;"emerg",15;"policescan",15;"traveladvisory",5;"pathwarning",150;"dockingrequestgeneric",30;"undockingrequest","normal",10;"undockingdenied",25;"civvieleaks",25;"report_to_dock")
//the following filters *always* fire their 'unique' event when they're tripped, simply because the conditions behind them are quite rare to begin with
else if(org_type == "smuggler" && org_type2 != "system defense") //just straight up funnel smugglers into always being caught, otherwise we get them asking for traffic info and stuff
chatter_type = "policeflee"
else if(org_type == "smuggler" && org_type2 == "system defense") //ditto, if an SDF ship catches them
chatter_type = "policeshipflee"
else if((org_type == "smuggler" || org_type == "pirate") && (org_type2 == "system defense" || org_type2 == "military")) //if we roll this combo instead, time for the SDF or Mercs to do their fucking jobs
chatter_type = "policeshipcombat"
else if((org_type == "smuggler" || org_type == "pirate") && org_type2 != "system defense") //but if we roll THIS combo, time to alert the SDF to get off their asses
chatter_type = "hostiledetected"
//SDF-specific events that need to filter based on the second party (basically just the following SDF-unique list with the soft-result ship scan thrown in)
else if(org_type == "system defense" && (org_type2 == "government" || org_type2 == "neutral" || org_type2 == "military" || org_type2 == "corporate" || org_type2 == "spacer")) //let's see if we can narrow this down, I didn't see many ship-to-ship scans
chatter_type = pick(75;"policeshipscan","sdfpatrolupdate",75;"sdfendingpatrol",180;"dockingrequestgeneric",20;"undockingrequest",75;"sdfbeginpatrol",50;"normal",10;"civvieleaks",70;"sdfchatter")
//SDF-specific events that don't require the secondary at all, in the event that we manage to roll SDF + hostile/smuggler or something
else if(org_type == "system defense")
chatter_type = pick("sdfpatrolupdate",60;"sdfendingpatrol",120;"dockingrequestgeneric",20;"undockingrequest",80;"sdfbeginpatrol","normal","sdfchatter")
//if we somehow don't match any of the other existing filters once we've run through all of them
else
chatter_type = pick(2;"emerg",5;"wrong_freq","normal") //Be nice to have wrong_lang...
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",90;"dockingrequestgeneric",30;"undockingrequest",30;"undockingdenied","normal",25;"civvieleaks")
//I probably should do some kind of pass here to work through all the possible combinations of major factors and see if the filtering list needs reordering or modifying, but I really can't be arsed
var/yes = prob(90) //Chance for them to say yes vs no
var/request = pick(requests)
var/callname = pick(alt_atc_names)
var/callname = "[using_map.dock_name] Control"
var/response = requests[request][yes ? 1 : 2] //1 is yes, 2 is no
var/number = rand(1,42)
var/zone = pick("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")
//fallbacks in case someone sets the dock_type on the map datum to null- it defaults to "station" normally
var/landing_zone = "LZ [zone]"
var/landing_type = "landing zone"
var/landing_move = "landing request"
var/landing_short = "land"
switch(using_map.dock_type)
if("surface") //formal installations with proper facilities
landing_zone = "landing pad [number]"
landing_type = "landing pad"
landing_move = "landing request"
landing_short = "land"
callname = "[using_map.dock_name] Tower"
if("frontier") //for frontier bases - landing spots are literally just open ground, maybe concrete at best
landing_zone = "LZ [zone]"
landing_type = "landing zone"
landing_move = "landing request"
landing_short = "land"
callname = "[using_map.dock_name] Tower"
if("station") //standard station pattern
landing_zone = "docking bay [number]"
landing_type = "docking bay"
landing_move = "docking request"
landing_short = "dock"
callname = "[using_map.dock_name] Control"
var/full_request
var/full_response
var/full_closure
// what you're about to witness is what feels like an extremely kludgy rework of the system, but it's more 'flexible' and allows events that aren't just ship-stc-ship
// something more elegant could probably be done, but it won't be done by somebody as half-competent as me
switch(chatter_type)
if("wrong_freq")
callname = pick(wrong_atc_names)
full_request = "[callname], this is [combined_name] on a [mission] [pick(mission_noun)] to [destname], [pick(request_verb)] [request]."
full_response = "[combined_name], this is [using_map.station_short] TraCon, wrong frequency. Switch to [rand(700,999)].[rand(1,9)]."
full_closure = "[using_map.station_short] TraCon, understood, apologies."
if("wrong_lang")
//Can't implement this until autosay has language support
//mayday call
if("emerg")
var/problem = pick("hull breaches on multiple decks","unknown life forms on board","a drive about to go critical","asteroids impacting the hull","a total loss of engine power","people trying to board the ship")
full_request = "This is [combined_name] declaring an emergency! We have [problem]!"
full_response = "[combined_name], this is [using_map.station_short] TraCon, copy. Switch to emergency responder channel [rand(700,999)].[rand(1,9)]."
full_closure = "[using_map.station_short] TraCon, okay, switching now."
else
full_request = "[callname], this is [combined_name] on a [mission] [pick(mission_noun)] to [destname], [pick(request_verb)] [request]."
full_response = "[combined_name], this is [using_map.station_short] TraCon, [response]." //Station TraCon always calls themselves TraCon
full_closure = "[using_map.station_short] TraCon, [yes ? "thank you" : "understood"], good day." //They always copy what TraCon called themselves in the end when they realize they said it wrong
var/problem = pick("We have hull breaches on multiple decks","We have unknown hostile life forms on board","Our primary drive is failing","We have [pick("asteroids","space debris")] impacting the hull","We're experiencing a total loss of engine power","We have hostile ships closing fast","There's smoke [pick("in the cockpit","on the bridge")]","We have unidentified boarders","Our reaction control system is malfunctioning and we're losing stability","Our life support [pick("is failing","has failed")]")
msg("+[pick("Mayday, mayday, mayday!","Mayday, mayday!","Mayday! Mayday!")]+ [combined_first_name], declaring an emergency! [problem]!","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Switch to emergency responder channel [ertchannel].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[callname], [combined_first_name] switching now.","[comm_first_name]")
//Control scan event: soft outcome
if("policescan")
var/confirm = pick("Understood","Roger that","Affirmative","Very well","Copy that")
var/complain = pick("I hope this doesn't take too long.","Can we hurry this up?","Make it quick.","This better not take too long.","Is this really necessary?","I'm sure you'll find everything to be in order, Control.")
var/completed = pick("You're free to proceed.","Everything looks fine, carry on.","You're clear, move along.","Apologies for the delay, you're clear.","Switch to channel [sdfchannel] and await further instruction.")
msg("[combined_first_name], [callname], your [pick("ship","vessel","starship")] has been flagged for routine inspection. Hold position and prepare to be scanned.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[confirm] [callname], holding position.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Your compliance is appreciated, [combined_first_name]. Scan commencing.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*2 SECONDS)
msg(complain,"[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*3 SECONDS)
msg("[combined_first_name], [callname]. Scan complete. [completed]")
//Control scan event: hard outcome
if("policeflee")
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, Control.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!","Ah f- |ditch the containers!| +Now!+","Unless you have something a little +bigger+ in your torpedo tubes, we're |not| turning around!")
msg("Unknown [pick("ship","vessel","starship")], [callname], identify yourself and submit to a full inspection. Flying without an active transponder is a violation of interstellar shipping regulations.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[uhoh]","Unknown Vessel")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.starsys_name] Defense Control to all local assets: vector to interdict and detain [prefix], temporary callsign |[shipname]|. Control out.","[using_map.starsys_name] Defense Control")
//SDF scan event: soft outcome
if("policeshipscan")
var/confirm = pick("Understood","Roger that","Affirmative")
var/complain = pick("I hope this doesn't take too long.","Can we hurry this up?","Make it quick.","This better not take too long.","Is this really necessary?","I'm sure you'll find everything to be in order, officer.")
var/completed = pick("You're free to proceed.","Everything looks fine, carry on.","You're clear. Move along.","Apologies for the delay, you're clear.","Switch to channel [sdfchannel] and await further instruction.")
msg("[combined_second_name], [combined_first_name], your [pick("ship","vessel","starship")] has been flagged for routine inspection. Hold position and prepare to be scanned.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[confirm] [combined_first_name], holding position.","[comm_second_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Your compliance is appreciated, [combined_second_name]. Scan commencing.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*2 SECONDS)
msg(complain,"[comm_second_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*3 SECONDS)
msg("[combined_second_name], [combined_first_name]. Scan complete. [completed]","[comm_first_name]")
//SDF scan event: hard outcome
if("policeshipflee")
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, |[shipname]|.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!","Ah f- |ditch the containers!| +Now!+","Unless you have something a little +bigger+ in your torpedo tubes, we're |not| turning around!")
msg("Unknown [pick("ship","vessel","starship")], [combined_second_name], identify yourself and submit to a full inspection. Flying without an active transponder is a violation of interstellar shipping regulations.","[comm_second_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[uhoh]","Unknown Vessel")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.starsys_name] Defense Control, [combined_second_name]. We have a [prefix] here, please advise.","[comm_second_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Defense Control copies, [combined_second_name], reinforcements are en route. Switch further communications to encrypted band [sdfchannel].","[using_map.starsys_name] Defense Control")
//SDF scan event: engage primary in combat! fairly rare since it needs a pirate/vox + SDF roll
if("policeshipcombat")
var/battlestatus = pick("requesting reinforcements.","we need backup! Now!","holding steady.","we're holding our own for now.","we have them on the run.","they're trying to make a run for it!","we have them right where we want them.","we're badly outgunned!","we have them outgunned.","we're outnumbered here!","we have them outnumbered.","this'll be a cakewalk.",10;"notify their next of kin.")
msg("[using_map.starsys_name] Defense Control, [combined_second_name], engaging [combined_first_name] [pick("near route","in sector")] [rand(1,100)], [battlestatus]","[comm_second_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.starsys_name] Defense Control copies, [combined_second_name]. Keep us updated.","[using_map.starsys_name] Defense Control")
//SDF event: patrol update
if("sdfpatrolupdate")
var/statusupdate = pick("nothing unusual so far","nothing of note","everything looks clear so far","ran off some [pick("pirates","scavengers")] near route [pick(1,100)], [pick("no","minor")] damage sustained, continuing patrol","situation normal, no suspicious activity yet","minor incident on route [pick(1,100)]","Code 7-X [pick("on route","in sector")] [pick(1,100)], situation is under control","seeing a lot of traffic on route [pick(1,100)]","caught a couple of smugglers [pick("on route","in sector")] [pick(1,100)]","sustained some damage in a skirmish just now, we're heading back for repairs")
msg("[using_map.starsys_name] Defense Control, [combined_first_name] reporting in, [statusupdate], over.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.starsys_name] Defense Control copies, [combined_first_name]. Keep us updated, out.","[using_map.starsys_name] Defense Control")
//SDF event: end patrol
if("sdfendingpatrol")
var/appreciation = pick("Copy","Understood","Affirmative","10-4","Roger that")
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
msg("[callname], [combined_first_name], returning from our system patrol route, requesting permission to [landing_short].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[appreciation], [callname]. [dockingplan]","[comm_first_name]")
//SDF event: general chatter
if("sdfchatter")
var/chain = pick("codecheck","commscheck")
switch(chain)
if("codecheck")
msg("Check. Check. |Check|. Uhhh... check? Wait. Wait! Hold on. Yeah, okay, I gotta call this one in.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[callname], confirm auth-code... [rand(1,9)][rand(1,9)][rand(1,9)]-[pick("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")]?","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("One moment...")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*2 SECONDS)
msg("Yeah, that code checks out [combined_first_name].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("|(sigh)| Copy that Control. You! Move along!","[comm_first_name]")
if("commscheck")
msg("Control this is [combined_first_name], we're getting some interference in our area. [pick("How's our line?","Do you read?","How copy, over?")]","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Control reads you loud and clear [combined_first_name].","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[pick("Copy that","Thanks,","Roger that")] Control. [combined_first_name] out.","[comm_first_name]")
//Civil event: leaky chatter
if("civvieleaks")
var/commleak = pick("thatsmywife","missingkit","pipeleaks","weirdsmell","weirdsmell2","scug","teppi")
switch(commleak)
if("thatsmywife")
msg("-so then I says to him, |that's no [pick("space carp","space shark","vox","garbage scow","freight liner","cargo hauler","superlifter")], that's my +wife!+| And he-","[comm_first_name]")
if("missingkit")
msg("-did you get the kit from down on deck [rand(1,4)]? I need th-","[comm_first_name]")
if("pipeleaks")
msg("I swear if these pipes keep leaking I'm going to-","[comm_first_name]")
if("weirdsmell")
msg("-and where the hell is that smell coming fr-","[comm_first_name]")
if("weirdsmell2")
msg("-hat in the [pick("three","five","seven","nine")] hells did you |eat| [pick("ensign","crewman")]? This compartment reeks of-","[comm_first_name]")
if("scug")
msg("-and if that weird cat of yours keeps crawling into the pipes we-","[comm_first_name]")
if("teppi")
msg("-at are we supposed to do with this damn cow?","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("I don't think it's a cow, sir, it looks more like a-","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], your internal comms are leaking[pick("."," again.",", again.",". |Again|.")]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Sorry Control, won't happen again.","[comm_first_name]")
//DefCon event: hostile found
if("hostiledetected")
var/orders = pick("Engage on sight","Engage with caution","Engage with extreme prejudice","Engage at will","Search and destroy","Bring them in alive, if possible","Interdict and detain","Keep your eyes peeled","Bring them in, dead or alive","Stay alert")
msg("This is [using_map.starsys_name] Defense Control to all SDF assets. Priority update follows.","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Be on the lookout for [short_first_name], last sighted [pick("near route","in sector","near sector")] [rand(1,100)]. [orders]. DefCon, out.","[using_map.starsys_name] Defense Control")
//Ship event: distress call, under attack
if("distress")
var/state = pick(66;"calm",34;"panic")
switch(state)
if("calm")
msg("[using_map.starsys_name] Defense Control, [combined_first_name].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [using_map.starsys_name] Defense Control.","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Another vessel in our area is moving [pick("aggressively","suspiciously","erratically","unpredictably","with clear hostile intent")], please advise? Forwarding sensor data now.","[comm_first_name]","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [using_map.starsys_name] Defense Control copies. Sensor data matches logged profile for [secondprefix] |[secondshipname]|. SDF units are en route to your location.","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[pick("Appreciated","Copy that","Understood")], Control. Switching to [sdfchannel] to coordinate.","[comm_first_name]")
if("panic")
msg("+Mayday, mayday, mayday!+ This is [combined_first_name] declaring an emergency! We are under attack! Requesting immediate assistance!","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [using_map.starsys_name] Defense Control. SDF is en route, contact on [sdfchannel].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[pick("Copy that","Understood")] [using_map.starsys_name] Defense Control, switching now!","[comm_first_name]")
//Control event: travel advisory
if("traveladvisory")
var/flightwarning = pick("Solar flare activity is spiking and expected to cause issues along main flight lanes [rand(1,33)], [rand(34,67)], and [rand(68,100)]","Pirate activity is on the rise, stay close to System Defense vessels","We're seeing a rise in illegal salvage operations, please report any unusual activity to the nearest SDF vessel via channel [sdfchannel]","A quarantined [pick("fleet","convoy")] is passing through the system along route [rand(1,100)], please observe minimum safe distance","A prison [pick("fleet","convoy")] is passing through the system along route [rand(1,100)], please observe minimum safe distance","Traffic volume is higher than normal, expect processing delays","Anomalous bluespace activity detected [pick("along route [rand(1,100)]","in sector [rand(1,100)]")], exercise caution","Smugglers have been particularly active lately, expect increased security scans","Depots are currently experiencing a fuel shortage, expect delays and higher rates","Asteroid mining has displaced debris dangerously close to main flight lanes on route [rand(1,100)], watch for potential impactors","A [pick("fuel tanker","cargo liner","passenger liner","freighter","transport ship","mining barge","salvage trawler")] has collided with [pick("a fuel tanker","a cargo liner","a passenger liner","a freighter","a transport ship","a mining barge","a salvage trawler","a meteoroid","a cluster of space debris","an asteroid","an ice-rich comet")] near route [rand(1,100)], watch for debris and do not impede emergency service vessels","A [pick("fuel tanker","cargo liner","passenger liner","freighter","transport ship","mining barge","salvage trawler")] on route [rand(1,100)] has experienced total engine failure. Emergency response teams are en route, please observe minimum safe distances and do not impede emergency service vessels","Transit routes have been recalculated to adjust for planetary drift. Please synch your astronav computers as soon as possible to avoid delays and difficulties","[pick("Bounty hunters","System Defense officers","Mercenaries")] are currently searching for a wanted fugitive, report any sightings of suspicious activity to System Defense via channel [sdfchannel]",10;"It's space [pick("carp","shark")] breeding season. [pick("Stars","Skies","Gods","God","Goddess","Fates")] have mercy on you all","We're reading [pick("void","drive","sensor")] echoes that are consistent with illegal cloaking devices, be alert for suspicious activity in your sector")
msg("[callname], all vessels in the [using_map.starsys_name] system. Priority travel advisory follows.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[flightwarning]. Control out.")
//Control event: warning to a specific vessel
if("pathwarning")
var/navhazard = pick("a pocket of intense radiation","a pocket of unstable gas","a debris field","a secure installation","an active combat zone","a quarantined ship","a quarantined installation","a quarantined sector","a live-fire SDF training exercise","an ongoing Search & Rescue operation","a hazardous derelict","an intense electrical storm","an intense ion storm","a shoal of space carp","a pack of space sharks","an asteroid infested with gnat hives","a protected space ray habitat","a region with anomalous bluespace activity","a rogue comet")
var/confirm = pick("Understood","Roger that","Affirmative","Our bad","Thanks for the heads up")
msg("[combined_first_name], [callname]. Your [pick("ship","vessel","starship")] is approaching [navhazard], observe minimum safe distance and adjust your heading appropriately.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[confirm] [callname], adjusting course.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Your compliance is appreciated, [combined_first_name].")
//Control event: personnel report to dock
if("report_to_dock")
var/situation_type = pick("medical","security","engineering","animal control","hazmat")
msg("This is [using_map.dock_name] Tower. Would a free [situation_type] team please report to [landing_zone] immediately. This is not a drill.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*10 SECONDS)
msg("Repeat, any free [situation_type] team, report to [landing_zone] immediately. This is +not+ a drill.")
//Ship event: docking request (generic)
if("dockingrequestgeneric")
var/request_type = pick(100;"generic",50;"delayed",80;"supply",30;"repair",30;"medical",30;"security")
var/appreciation = pick("Much appreciated","Many thanks","Understood","Perfect, thank you","Excellent, thanks","Great","Copy that")
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
switch(request_type)
if("generic")
msg("[callname], [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_short].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
if("delayed")
var/reason = pick(
"we don't have any free [landing_type]s right now, please [pick("stand by for a couple of minutes","hold for a few minutes")]",
"you're too far away, please close to ten thousand meters","we're seeing heavy traffic around the [landing_type]s right now, please [pick("stand by for a couple of minutes","hold for a few minutes")]","ground crews are currently clearing up [pick("loose containers","a fuel spill")] to free up one of our [landing_type]s, please [pick("stand by for a couple of minutes","hold for a few minutes")]","another vessel has aerospace priority right now, please [pick("stand by for a couple of minutes","hold for a few minutes")]")
msg("[callname], [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_short].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Request denied, [reason] and resubmit your request.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Understood, [callname].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*60 SECONDS)
msg("[callname], [combined_first_name], resubmitting [landing_move].","[comm_first_name]")
sleep (5 SECONDS)
msg("[combined_first_name], [callname]. Everything appears to be in order now, permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
if("supply")
var/preintensifier = pick(75;"getting ",75;"running ","",15;"like, ") //whitespace hack, sometimes they'll add a preintensifier, but not always
var/intensifier = pick("very","pretty","critically","extremely","dangerously","desperately","kinda","a little","a bit","rather","sorta")
var/low_thing = pick("ammunition","munitions","clean water","food","spare parts","medical supplies","reaction mass","gas","hydrogen fuel","phoron fuel","fuel",10;"tea",10;"coffee",10;"soda",10;"pizza",10;"beer",10;"booze",10;"vodka",10;"snacks") //low chance of a less serious shortage
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
msg("[callname], [combined_first_name]. We're [preintensifier][intensifier] low on [low_thing]. Requesting permission to [landing_short] for resupply.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
if("repair")
var/damagestate = pick("We've experienced some hull damage","We're suffering minor system malfunctions","We're having some [pick("weird","strange","odd","unusual")] technical issues","We're overdue maintenance","We have several minor space debris impacts","We've got some battle damage here","Our reactor output is fluctuating","We're hearing some weird noises from the [pick("engines","pipes","ducting","HVAC")]","We just got caught in a solar flare","We had a close call with an asteroid","We have a [pick("minor","mild","major","serious")] [pick("fuel","water","oxygen","gas")] leak","We have depressurized compartments","We have a hull breach","One of our [pick("hydraulic","pneumatic")] systems has depressurized","Our [pick("life support","water recycling system","navcomp","shield generator","reaction control system","auto-repair system","repair drone controller","artificial gravity generator","environmental control system","master control system")] is [pick("failing","acting up","on the fritz","shorting out","glitching out","freaking out","malfunctioning")]")
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
msg("[callname], [combined_first_name]. [damagestate]. Requesting permission to [landing_short] for repairs and maintenance.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Repair crews are standing by, contact them on channel [engchannel].")
if("medical")
var/species = pick("human","humanoid","unathi","lizard","tajaran","feline","skrell","akula","promethean","sergal","synthetic","robotic","teshari","avian","vulpkanin","canine","vox","zorren","hybrid","mixed-species","vox","grey","alien",5;"catslug")
var/medicalstate = pick("multiple casualties","several cases of radiation sickness","an unknown virus","an unknown infection","a critically injured VIP","sick refugees","multiple cases of food poisoning","injured [pick("","[species] ")]passengers","sick [pick("","[species] ")]passengers","injured engineers","wounded marines","a delicate situation","a pregnant passenger","injured [pick("","[species] ")]castaways","recovered escape pods","unknown escape pods")
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
msg("[callname], [combined_first_name]. We have [medicalstate] on board. Requesting permission to [landing_short] for medical assistance.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Medtechs are standing by, contact them on channel [medchannel].")
if("security")
var/species = pick("human","humanoid","unathi","lizard","tajaran","feline","skrell","akula","promethean","sergal","synthetic","robotic","teshari","avian","vulpkanin","canine","vox","zorren","hybrid","mixed-species","vox","grey","alien",5;"catslug")
var/securitystate = pick("several [species] convicts","a captured pirate","a wanted criminal","[species] stowaways","incompetent [species] shipjackers","a delicate situation","a disorderly passenger","disorderly [species] passengers","ex-mutineers","stolen goods","[pick("a container","containers")] full of [pick("confiscated contraband","stolen goods")]",5;"a very lost shadekin",10;"some kinda big wooly critter",15;"a buncha lost-looking uh... cat... slug... |things?|",10;"a raging case of [pick("spiders","crabs","geese","gnats","sharks","carp")]") //gotta have a little something to lighten the mood now and then
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","Perfect, thank you")
msg("[callname], [combined_first_name]. We have [securitystate] on board and require security assistance. Requesting permission to [landing_short].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Security teams are standing by, contact them on channel [secchannel].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[appreciation], [callname]. [dockingplan]","[comm_first_name]")
//Ship event: undocking request
if("undockingrequest")
var/request_type = pick(150;"generic",50;"delayed")
var/takeoff = pick("depart","launch")
var/safetravels = pick("Fly safe out there","Good luck","Safe travels","See you next week","Godspeed","Stars guide you")
var/thanks = pick("Appreciated","Thanks","Don't worry about us","We'll be fine","You too","So long")
msg("[callname], [combined_first_name], requesting permission to [takeoff] from [landing_zone].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
switch(request_type)
if("generic")
msg("[combined_first_name], [callname]. Permission granted. Docking clamps released. [safetravels].")
if("delayed")
var/denialreason = pick("Docking clamp malfunction, please hold","Fuel lines have not been secured","Ground crew are still on the pad","Loose containers are on the pad","Exhaust deflectors are not yet in position, please hold","There's heavy traffic right now, it's not safe for your vessel to launch","Another vessel has aerospace priority at this moment","Port officials are still aboard")
msg("Negative [combined_first_name], request denied. [denialreason]. Try again in a few minutes.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*60 SECONDS)
msg("[callname], [combined_first_name], re-requesting permission to depart from [landing_zone].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Everything appears to be in order now, permission granted. Docking clamps released. [safetravels].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[thanks], [callname]. This is [combined_first_name] setting course for [destname], out.","[comm_first_name]")
//SDF event: starting patrol
if("sdfbeginpatrol")
var/safetravels = pick("Fly safe out there","Good luck","Good hunting","Safe travels","Godspeed","Stars guide you")
var/thanks = pick("Appreciated","Thanks","Don't worry about us","We'll be fine","You too")
var/takeoff = pick("depart","launch","take off","dust off")
msg("[callname], [combined_first_name], requesting permission to [takeoff] from [landing_zone] to begin system patrol.","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname]. Permission granted. Docking clamps released. [safetravels].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[thanks], [callname]. This is [combined_first_name] beginning system patrol, out.","[comm_first_name]")
//Ship event: undocking request (denied)
if("undockingdenied")
var/takeoff = pick("depart","launch")
var/denialreason = pick("Security is requesting a full cargo inspection","Your ship has been impounded for multiple [pick("security","safety")] violations","Your ship is currently under quarantine lockdown","We have reason to believe there's an issue with your papers","Security personnel are currently searching for a fugitive and have ordered all outbound ships remain grounded until further notice")
msg("[callname], [combined_first_name], requesting permission to [takeoff] from [landing_zone].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Negative [combined_first_name], request denied. [denialreason].")
if("slogan")
msg("The following is a sponsored message from [name].","Facility PA")
sleep(5 SECONDS)
msg("[slogan]","Facility PA")
else //time for generic message
msg("[callname], [combined_first_name] on [mission] [pick(mission_noun)] to [destname], requesting [request].","[comm_first_name]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [callname], [response].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[callname], [yes ? "thank you" : "understood"], out.","[comm_first_name]")
return //oops, forgot to restore this
/* //OLD BLOCK, for reference
//Ship sends request to ATC
msg(full_request,"[prefix] [shipname]")
sleep(5 SECONDS)
msg(full_request,"[comm_first_name]"
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
//ATC sends response to ship
msg(full_response)
sleep(5 SECONDS)
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
//Ship sends response to ATC
msg(full_closure,"[prefix] [shipname]")
return
msg(full_closure,"[comm_first_name]")
return
*/
#undef MIN_MSG_DELAY
#undef MAX_MSG_DELAY
File diff suppressed because it is too large Load Diff
-839
View File
@@ -1,839 +0,0 @@
//Datums for different companies that can be used by busy_space, VR edition
// Some of these intentionally copy from busy_space/organizations.dm, which is disabled in our server.
//////////////////////////////////////////////////////////////////////////////////
//Datums for different companies that can be used by busy_space
/datum/lore/organization
var/name = "" // Organization's name
var/short_name = "" // Organization's shortname (NanoTrasen for "NanoTrasen Incorporated")
var/acronym = "" // Organization's acronym, e.g. 'NT' for NanoTrasen'.
var/desc = "" // One or two paragraph description of the organization, but only current stuff. Currently unused.
var/history = "" // Historical discription of the organization's origins Currently unused.
var/work = "" // Short description of their work, eg "an arms manufacturer"
var/headquarters = "" // Location of the organization's HQ. Currently unused.
var/motto = "" // A motto/jingle/whatever, if they have one. Currently unused.
var/list/ship_prefixes = list() //Some might have more than one! Like NanoTrasen. Value is the mission they perform, e.g. ("ABC" = "mission desc")
var/list/ship_names = list( //Names of spaceships. This is a mostly generic list that all the other organizations inherit from if they don't have anything better.
"Kestrel",
"Beacon",
"Signal",
"Freedom",
"Glory",
"Axiom",
"Eternal",
"Harmony",
"Light",
"Discovery",
"Endeavour",
"Explorer",
"Swift",
"Dragonfly",
"Ascendant",
"Tenacious",
"Pioneer",
"Hawk",
"Haste",
"Radiant",
"Luminous"
)
var/list/destination_names = list() //Names of static holdings that the organization's ships visit regularly.
var/autogenerate_destination_names = TRUE
/datum/lore/organization/New()
..()
if(autogenerate_destination_names) // Lets pad out the destination names.
var/i = rand(6, 10)
var/list/star_names = list(
"Sol", "Alpha Centauri", "Sirius", "Vega", "Regulus", "Vir", "Algol", "Aldebaran", "Vilous", "Sanctum", "Qerr'Vallis", "Kataigal", "Antares",
"Delta Doradus", "Menkar", "Geminga", "Elnath", "Gienah", "Mu Leporis", "Nyx", "Tau Ceti", "Virgo-Erigone", "Uueoa-Esa", "Vazzend", "Kastra-71",
"Wazn", "Alphard", "Phact", "Altair", "El", "Eutopia", "Qerr'valis", "Qerrna-Lakirr", "Rarkajar", "the Almach Rim")
var/list/destination_types = list("dockyard", "station", "vessel", "waystation", "telecommunications satellite", "spaceport", "distress beacon", "anomaly", "colony", "outpost")
while(i)
destination_names.Add("a [pick(destination_types)] in [pick(star_names)]")
i--
//////////////////////////////////////////////////////////////////////////////////
// TSCs
/datum/lore/organization/tsc/nanotrasen
name = "NanoTrasen Incorporated"
short_name = "NanoTrasen"
acronym = "NT"
desc = "NanoTrasen is one of the foremost research and development companies in Commonwealth space. \
Originally focused on consumer products, their swift move into the field of Phoron has lead to \
them being the foremost experts on the substance and its uses. In the modern day, NanoTrasen prides \
itself on being an early adopter to as many new technologies as possible, often offering the newest \
products to their employees. In an effort to combat complaints about being 'guinea pigs', Nanotrasen \
also offers one of the most comprehensive medical plans in Commonwealth space, up to and including cloning \
and therapy.\
<br><br>\
NT's most well known products are its phoron based creations, especially those used in Cryotherapy. \
It also boasts an prosthetic line, which is provided to its employees as needed, and is used as an incentive \
for newly tested posibrains to remain with the company."
history = "" // To be written someday.
work = "research giant"
headquarters = "Luna"
motto = ""
ship_prefixes = list("NSV" = "exploration", "NTV" = "hauling", "NDV" = "patrol", "NRV" = "emergency response")
//Scientist or Greek mythology naming scheme
ship_names = list(
"Bardeen",
"Einstein",
"Feynman",
"Sagan",
"Tyson",
"Galilei",
"Jans",
"Fhriede",
"Franklin",
"Tesla",
"Curie",
"Darwin",
"Newton",
"Pasteur",
"Bell",
"Mendel",
"Kepler",
"Edision",
"Cavendish",
"Nye",
"Hawking",
"Aristotle",
"Von Braun",
"Kaku",
"Oppenheimer"
)
// Note that the current station being used will be pruned from this list upon being instantiated
destination_names = list(
"NSS Exodus in Nyx",
"NCS Northern Star in Vir",
"NAB Smythside Central Headquarters in Sol",
"NAS Zeus orbiting Virgo-Prime",
"NIB Posideon in Alpha Centauri",
"NTB Anur on Virgo-Prime",
"the colony at Virgo-3B",
"the phoron refinery in Vilous",
"a dockyard orbiting Virgo-Prime",
"an asteroid orbiting Virgo 3",
)
/datum/lore/organization/tsc/nanotrasen/New()
..()
spawn(1) // BYOND shenanigans means using_map is not initialized yet. Wait a tick.
// Get rid of the current map from the list, so ships flying in don't say they're coming to the current map.
var/string_to_test = "[using_map.station_name] in [using_map.starsys_name]"
if(string_to_test in destination_names)
destination_names.Remove(string_to_test)
/datum/lore/organization/tsc/hephaestus
name = "Hephaestus Industries"
short_name = "Hephaestus"
acronym = "HI"
desc = "Hephaestus Industries is the largest supplier of arms, ammunition, and small millitary vehicles in Sol space. \
Hephaestus products have a reputation for reliability, and the corporation itself has a noted tendency to stay removed \
from corporate politics. They enforce their neutrality with the help of a fairly large asset-protection contingent which \
prevents any contracting polities from using their own materiel against them. The Terran Commonwealth and the Salthan Fyrds are of Hephastus’ largest \
bulk contractors owing to the above factors."
history = ""
work = "arms manufacturer"
headquarters = ""
motto = ""
ship_prefixes = list("HTV" = "freight", "HTV" = "munitions resupply")
//War God/Soldier Theme
ship_names = list(
"Ares",
"Athena",
"Grant",
"Custer",
"Puller",
"Nike",
"Bellona",
"Leonides",
"Bast",
"Jackson",
"Lee",
"Annan",
"Chi Yu",
"Shiva",
"Tyr"
)
destination_names = list(
"a SolCom dockyard on Luna",
"a Fleet outpost in the Almach Rim",
"a Fleet outpost on the Moghes border"
)
/datum/lore/organization/tsc/vey_med
name = "Vey-Medical"
short_name = "Vey-Med"
acronym = "VM"
desc = "Vey-Med is one of the newer TSCs on the block and is notable for being largely owned and opperated by Skrell and Elysians. \
Despite the suspicion and prejudice leveled at them for their origin, Vey-Med has obtained market dominance in \
the sale of medical equipment-- from surgical tools to large medical devices to the Oddyseus trauma response mecha \
and everything in between. Their equipment tends to be top-of-the-line, most obviously shown by their incredibly \
human-like FBP designs. Vey’s rise to stardom came from their introduction of ressurective cloning, although in \
recent years they’ve been forced to diversify as their patents expired and NanoTrasen-made medications became \
essential in bulk cloning."
history = ""
work = "medical equipment supplier"
headquarters = ""
motto = ""
ship_prefixes = list("VTV" = "transportation", "VMV" = "medical resupply")
// Diona names
ship_names = list(
"Wind That Stirs The Waves",
"Sustained Note Of Metal",
"Bright Flash Reflecting Off Glass",
"Veil Of Mist Concealing The Rock",
"Thin Threads Intertwined",
"Clouds Drifting Amid Storm",
"Loud Note And Breaking",
"Endless Vistas Expanding Before The Void",
"Fire Blown Out By Wind",
"Star That Fades From View",
"Eyes Which Turn Inwards",
"Joy Without Which The World Would Come Undone",
"A Thousand Thousand Planets Dangling From Branches"
)
destination_names = list(
"a research facility in Samsara",
"a SDTF near Ue-Orsi",
"a sapientarian mission in the Almach Rim"
)
/datum/lore/organization/tsc/zeng_hu
name = "Zeng-Hu pharmaceuticals"
short_name = "Zeng-Hu"
acronym = "ZH"
desc = "Zeng-Hu is an old TSC, based in the Sol system. Until the discovery of Phoron, Zeng-Hu maintained a stranglehold \
on the market for medications, and many household names are patentted by Zeng-Hu-- Bicaridyne, Dylovene, Tricordrizine, \
and Dexalin all came from a Zeng-Hu medical laboratory. Zeng-Hu’s fortunes have been in decline as Nanotrasen’s development of \
mass cloning medication cuts into their R&D and Vey-Med’s superior medical equipment effectively decimated their own equipment \
interests. The three-way rivalry between these companies for dominance in the medical field is well-known and a matter of \
constant economic speculation."
history = ""
work = "pharmaceuticals company"
headquarters = ""
motto = ""
ship_prefixes = list("ZTV" = "transportation", "ZMV" = "medical resupply")
destination_names = list()
/datum/lore/organization/tsc/ward_takahashi
name = "Ward-Takahashi General Manufacturing Conglomerate"
short_name = "Ward-Takahashi"
acronym = "WT"
desc = "Ward-Takahashi focuses on the sale of small consumer electronics, with its computers, communicators, \
and even mid-class automobiles a fixture of many households. Less famously, Ward-Takahashi also supplies most \
of the AI cores on which vital control systems are mounted, and it is this branch of their industry that has \
led to their tertiary interest in the development and sale of high-grade AI systems. Ward-Takahashi’s economies \
of scale frequently steal market share from Nanotrasen’s high-price products, leading to a bitter rivalry in the \
consumer electronics market."
history = ""
work = "electronics manufacturer"
headquarters = ""
motto = ""
ship_prefixes = list("WTV" = "freight")
ship_names = list(
"Comet",
"Aurora",
"Supernova",
"Nebula",
"Galaxy",
"Starburst",
"Constellation",
"Pulsar",
"Quark",
"Void",
"Asteroid"
)
destination_names = list()
/datum/lore/organization/tsc/bishop
name = "Bishop Cybernetics"
short_name = "Bishop"
acronym = "BC"
desc = "Bishop's focus is on high-class, stylish cybernetics. A favorite among transhumanists (and a byte noire for \
bioconservatives), Bishop manufactures not only prostheses but also brain augmentation, synthetic organ replacements, \
and odds and ends like implanted wrist-watches. Their business model tends towards smaller, boutique operations, giving \
it a reputation for high price and luxury, with Bishop cyberware often rivalling Vey-Med’s for cost. Bishop’s reputation \
for catering towards the interests of human augmentation enthusiasts instead of positronics have earned it ire from the \
Positronic Rights Group and puts it in ideological (but not economic) comptetition with Morpheus Cyberkinetics."
history = ""
work = "cybernetics and augmentation manufacturer"
headquarters = ""
motto = ""
ship_prefixes = list("BTV" = "transportation")
destination_names = list()
/datum/lore/organization/tsc/morpheus
name = "Morpheus Cyberkinetics"
short_name = "Morpheus"
acronym = "MC"
desc = "The only large corporation run by positronic intelligences, Morpheus caters almost exclusively to their sensibilities \
and needs. A product of the synthetic colony of Shelf, Morpheus eschews traditional advertising to keep their prices low and \
relied on word of mouth among positronics to reach their current economic dominance. Morpheus in exchange lobbies heavily for \
positronic rights, sponsors positronics through their Jans-Fhriede test, and tends to other positronic concerns to earn them \
the good-will of the positronics, and the ire of those who wish to exploit them."
history = ""
work = "cybernetics manufacturer"
headquarters = ""
motto = ""
ship_prefixes = list("MTV" = "freight")
// Culture names, because Anewbe told me so.
ship_names = list(
"Nervous Energy",
"Prosthetic Conscience",
"Revisionist",
"Trade Surplus",
"Flexible Demeanour",
"Just Read The Instructions",
"Limiting Factor",
"Cargo Cult",
"Gunboat Diplomat",
"A Ship With A View",
"Cantankerous",
"I Thought He Was With You",
"Never Talk To Strangers",
"Sacrificial Victim",
"Unwitting Accomplice",
"Witting Accomplice",
"Bad For Business",
"Just Testing",
"Size Isn't Everything",
"Yawning Angel",
"Liveware Problem",
"Very Little Gravitas Indeed",
"Zero Gravitas",
"Gravitas Free Zone",
"Absolutely No You-Know-What",
"Existence Is Pain",
"I'm Walking Here",
"Screw Loose",
"Of Course I Still Love You",
"Limiting Factor",
"So Much For Subtley",
"Unfortunate Conflict Of Evidence",
"Prime Mover",
"It's One Of Ours",
"Thank You And Goodnight",
"Boo!",
"Reasonable Excuse",
"Honest Mistake",
"Appeal To Reason",
"My First Ship II",
"Hidden Income",
"Anything Legal Considered",
"New Toy",
"Me, I'm Always Counting",
"Just Five More Minutes",
"Are You Feeling It",
"Great White Snark",
"No Shirt No Shoes",
"Callsign",
"Three Ships in a Trenchcoat",
"Not Wearing Pants",
"Ridiculous Naming Convention",
"God Dammit Morpheus",
"It Seemed Like a Good Idea",
"Legs All the Way Up",
"Purchase Necessary",
"Some Assembly Required",
"Buy One Get None Free",
"BRB",
"SHIP NAME HERE",
"Questionable Ethics",
"Accept Most Substitutes",
"I Blame the Government",
"Garbled Gibberish",
"Thinking Emoji",
"Is This Thing On?",
"Make My Day",
"No Vox Here",
"Savings and Values",
"Secret Name",
"Can't Find My Keys",
"Look Over There!",
"Made You Look!",
"Take Nothing Seriously",
"It Comes In Lime, Too",
"Loot Me",
"Nothing To Declare",
"Sneaking Suspicion",
"Bass Ackwards",
"Good Things Come to Those Who Freight",
"Redundant Morality",
"Synthetic Goodwill",
"Your Ad Here",
"What Are We Plotting?",
"Set Phasers To Stun",
"Preemptive Defensive Strike",
"This Ship Is Spiders",
"Legitimate Trade Vessel",
"Please Don't Explode II"
)
destination_names = list(
"a trade outpost in Shelf"
)
/datum/lore/organization/tsc/xion
name = "Xion Manufacturing Group"
short_name = "Xion"
desc = "Xion, quietly, controls most of the market for industrial equipment on the frontier. Their portfolio includes mining exosuits, \
factory equipment, rugged positronic chassis, and other pieces of equipment vital to the function of the economy. Xion \
keeps its control of the market by leasing, not selling, their equipment, and through infamous and bloody patent protection \
lawsuits. Xion are noted to be a favorite contractor for Rim engineers, owing to their low cost and rugged design."
history = ""
work = "industrial equipment manufacturer"
headquarters = ""
motto = ""
ship_prefixes = list("XTV" = "hauling")
destination_names = list()
/datum/lore/organization/tsc/mbt
name = "Major Bill's Transportation"
short_name = "Major Bill's"
desc = "The most popular courier service and starliner, Major Bill's is an unassuming corporation whose greatest asset \
is their low cost and brand recognition. Major Bill's is known, perhaps unfavorably, for its mascot, Major Bill, \
a cartoonish military figure that spouts quotable slogans. Their motto is \"With Major Bill's, you won't pay major bills!\", \
an earworm much of the galaxy longs to forget."
history = ""
work = "courier and passenger transit"
headquarters = "Mars, Sol"
motto = "With Major Bill's, you won't pay major bills!"
ship_prefixes = list("TTV" = "transport", "TTV" = "luxury transit")
destination_names = list()
/datum/lore/organization/tsc/independent
name = "Free Traders"
short_name = "Free Trader"
desc = "Though less common now than they were in the decades before the Sol Economic Organization took power, independent traders remain an important part of the galactic economy, owing in no small part to protective tarrifs established by the Free Trade Union in the late twenty-forth century."
history = ""
work = "trade and transit"
headquarters = "N/A"
motto = "N/A"
ship_prefixes = list("IEV" = "prospecting", "IEC" = "prospecting", "IFV" = "bulk freight", "ITV" = "passenger transport", "ITC" = "just-in-time delivery")
destination_names = list()
/datum/lore/organization/gov/solgov
name = "Commonwealth of Sol-Procyon"
short_name = "SolCom"
acronym = "CWS"
desc = "The Commonwealth of Sol-Procyon is the evolution of the many nation states of Earth and the outlying colonies \
having spread amongst the stars. While not quite the hegemon of all Humanity, a narrow majority of them follow \
the flag of the Commonwealth. The constant tug and pull of government versus corporation, democracy and power \
troubles this federation of deeply entrenched human colonies much like it did in the 21st century. Some things \
never change. However, they are economically and culturally quite dominant, although not everyone likes that fact."
history = ""
work = "rump state of humanity's colonies"
headquarters = "Paris, Earth"
motto = ""
autogenerate_destination_names = TRUE
ship_prefixes = list("CWS-T" = "transportation", "CWS-D" = "diplomatic", "CWS-F" = "freight")
destination_names = list(
"Mercury",
"Venus",
"Earth",
"Luna",
"Mars",
"Titan",
"Europa",
"the SolCom embassy in Virgo-Erigone",
"the SolCom embassy in Vilous"
)// autogen will add a lot of other places as well.
/* // Waiting for Joan to do their thing.
/datum/lore/organization/gov/federation
name = "United Federation of Planets"
short_name = "Federation"
desc = "The United Federation is a federation of planets that have agreed to exist semi-autonomously \
under a single central hybrid government, sharing the ideals of liberty, equality, and rights \
for all. It is one of the larger known interstellar powers in known space and is seen as being \
the fastest building power. The core planet of Gaia is known for having a proud military culture \
that, ironically, tends to stomp out any idea of warmongering from their cadets due to their \
scarred history and the Federation's ideals."
history = "Before the United Federation, there was a simple alliance with no name between core planet \
members. The United Federation itself found its roots in the aftermath of the Bloody \
Valentine Civil War, a racially motivated war that occurred in 2550 during the last year of \
the Federation Alliance of Gaia between the Genetically Modified and so-called Naturalists. \
Neutral nations in Gaia's political sphere, encouraged by alien observers, formed the United \
Federation when the indiscriminate loss of life became intolerable. 2555 saw the official \
signing of the Federation Charter between the core planet members."
work = "governing body"
headquarters = ""
motto = ""
//Star Trek ship names!
ship_prefixes = list("SCV" = "military", "STV" = "trading", "SDV" = "diplomatic")
ship_names = list("Kestrel",
"Beacon",
"Signal",
"Flying Freedom",
"Los Canas",
"Ixiom",
"Falken",
"Marigold",
"White Valley",
"Eternal",
"Arkbird",
"Akira",
"Kongou",
"Maki",
"Kagero",
"Nishiki",
"Icarus",
"Yuudachi",
"Tiki",
"Lucina",
"Tenryu",
"Spirit of Koni",
"Lady of Onoilph")
destination_names = list("Ruins of Chani City on Quarri III",
"Ruins of Kreely City on Ocan II",
"Ruins of Mishi City on Lucida IV",
"Ruins of Posloo City on Pi Cephei Prime",
"Molten Plains of Anarakis VII",
"Living City of Shani",
"Floating City of Nuni Vanni",
"Crystalline City of Delve Tile",
"New Iapetus Colony",
"Onul Colony",
"Ahemait Colony",
"New Amasia Colony",
"New Vesta Colony",
"Amaus Research Facility on Azaleh III",
"Living City of Na'me L'Tauri",
"Living City of Fithpa",
"Resource Mines of Lyra III",
"Resource Mines of Chi Cerberi III",
"Ceani Military Outpost on Rily VII",
"Naro Industrial Complex on Scheddi III",
"Mari Industrial Complex on Furlou Prime",
"Runni Crystal Mines of Keid V")
*/
/datum/lore/organization/mil/usdf
name = "United Sol Defense Force"
short_name = "" // This is blank on purpose. Otherwise they call the ships "USDF USDF Name"
desc = "The USDF is the dedicated military force of the Commonwealth of Sol-Procyon, originally formed by a council of the Supranations. It is a \
considerable tool of military power projection, and is able to effectively police a vast amount of space within the Orion Spur. \
However, regions beyond that are too far for the USDF to be a major player."
history = ""
work = "peacekeeping and piracy suppression"
headquarters = "Paris, Earth"
motto = "pax in terra et astra" // Peace on Earth and Stars
ship_prefixes = list("USDF" = "military", "USDF" = "anti-piracy", "USDF" = "escort", "USDF" = "humanitarian", "USDF" = "peacekeeping", "USDF" = "search-and-rescue", "USDF" = "war game") // It's all USDF but let's mix up what missions they do.
ship_names = list("Aegis Fate",
"Ain't No Sunshine",
"All Under Heaven",
"Allegiance",
"Andraste",
"Anjou",
"Barracuda",
"Bastion",
"Buenos Aires",
"Bum Rush",
"Callisto",
"Charon",
"Colorado",
"Commonwealth",
"Corsair",
"DeGaulle",
"Devestator",
"Dust of Snow",
"Euphrates",
"Fair Weather",
"Finite Hearts",
"Forward Unto Dawn",
"Gettysburg",
"Glamorgan",
"Grafton",
"Great Wall",
"Hammerhead",
"Herakles",
"Hoenir",
"In Amber Clad",
"Iwo Jima",
"Jolly Roger",
"Jormungandr",
"Leonidas",
"Meriwether Lewis",
"Mona Lisa",
"Olympus",
"Paris",
"Pony Express",
"Providence",
"Prydwen",
"Purpose",
"Ready or Not",
"Redoubtable",
"Rising Sun",
"Saratoga",
"Savannah",
"Shanxi",
"Song of the East",
"Stalwart Dawn",
"Strident",
"Tannenberg",
"Tokugawa",
"Totem Lake",
"Tripping Light",
"Two for Flinching")
destination_names = list("San Francisco on Earth",
"Gateway One above Luna",
"SolCom Headquarters on Earth",
"Olympus City on Mars",
"Hermes Naval Shipyard above Mars",
"Cairo Station above Earth",
"a rendezvous point in the Cyprus Arm",
"a settlement on Titan",
"a settlement on Europa",
"Aleph Grande on Ganymede",
"a colony in Proxima II",
"a settlement on Ceti IV-B",
"a colony ship around Ceti IV-B",
"a naval station above Ceti IV-B",
"a classified location in SolCom territory",
"a classified location in uncharted space",
"an emergency nav bouy",
"the USDF Naval Academy on Earth",
"Fort Rain on Tal")
/datum/lore/organization/gov/kitsuhana
name = "Kitsuhana Heavy Industries"
short_name = "Kitsuhana"
desc = "A large post-scarcity amalgamation of races, Kitsuhana is no longer a company but rather a loose association of 'members' \
who only share the KHI name and their ideals in common. Kitsuhana accepts interviews to join their ranks, and though they have no \
formal structure with regards to government or law, the concept of 'consent' drives most of the large decision making. Kitsuhanans \
pride themselves on their ability to avoid consequence, essentially preferring to live care-free lives. Their post-scarcity allows \
them to rebuild, regrow, and replenish almost any lost asset or resource nearly instantly. It leads to many of the Kitsuhana \
'members' treating everything with frivolity and lends them a care-free demeanor."
history = "Originally a heavy industrial equipment and space mining company. During a forced evacuation of their homeworld, \
they were they only organization with enough ship capacity to relocate any significant portion of the population, starting with \
their own employees. After the resulting slowship travel to nearby starsystems, most of the population decided to keep the moniker \
of the company name. Over the years, Kitsuhana developed into a post-scarcity anarchy where virtually nothing has consequences and \
Kitsuhana 'members' can live their lives as they see fit, often in isolation."
work = "utopian anarchy"
headquarters = "Kitsuhana Prime"
motto = "Do what you want. We know we will."
//Culture ship names!
ship_prefixes = list("KHI" = "personal") //Everybody's out for themselves, yanno.
ship_names = list("Nervous Energy",
"Prosthetic Conscience",
"Revisionist",
"Trade Surplus",
"Flexible Demeanour",
"Just Read The Instructions",
"Limiting Factor",
"Cargo Cult",
"Gunboat Diplomat",
"A Ship With A View",
"Cantankerous",
"I Thought He Was With You",
"Never Talk To Strangers",
"Sacrificial Victim",
"Unwitting Accomplice",
"Bad For Business",
"Just Testing",
"Size Isn't Everything",
"Yawning Angel",
"Liveware Problem",
"Very Little Gravitas Indeed",
"Zero Gravitas",
"Gravitas Free Zone",
"Absolutely No You-Know-What")
destination_names = list("Kitsuhana Prime",
"Kitsuhana Beta",
"Kitsuhana Gamma",
"the Kitsuhana Forge",
"a Kitsuhanan's home",
"a Kitsuhana ringworld in Pleis Ceti V",
"a Kitsuhana ringworld in Lund VI",
"a Kitsuhana ringworld in Dais IX",
"a Kitsuhana ringworld in Leibert II-b")
/datum/lore/organization/gov/ares
name = "Ares Confederation"
short_name = "ArCon"
desc = "A loose coalition of socialist and communist movements on the fringes of the human diaspora \
the Ares Confederation is a government-in-exile from the original uprisings of Mars to stop \
the government of corporations and capitalist interests over Humanity. While they failed twice \
they have made their own home far beyond the reach of an effective military response by the \
Commonwealth. They have become renowned engineers and terraforming experts, mostly due to necessity."
history = ""
work = "idealist socialist government"
headquarters = "Paraiso a Àstrea"
motto = "Liberty to the Stars!"
ship_prefixes = list("UFHV" = "military", "FFHV" = "shady")
ship_names = list("Bulwark of the Free",
"Charged Negotiation",
"Corporation Breaker",
"Cheeki Breeki",
"Dawnstar",
"Fiery Justice",
"Fist of Ares",
"Freedom",
"Marx Was Right",
"Endstage Capitalism",
"Neoluddism Is The Answer Guys",
"Anarchocapitalism Is A Joke",
"One Of Ours, Captain!",
"Is This Thing On?",
"Front Toward Enemy",
"Path of Prosperity",
"Freedom Cry",
"Rebel Yell",
"We Will Return To Mars",
"According To Our Abilities",
"Posadism Gang",
"Accelerationism Doesn't Work In A Vaccuum",
"Don't Shoot, We're Unarmed I Think",
"The Big Stick For Speaking Softly",
"Bull Moose",
"Engels Needs Some Love Too",
"The Icepick",
"Gauntlet",
"Gellaume",
"Hero of the Revolution",
"Jerome",
"Laughing Maniac",
"Liberty",
"Mahama",
"Memory of Fallen",
"Miko",
"Mostly Harmless",
"None Of Your Business",
"Not Insured",
"People's Fist",
"Petrov",
"Prehensile Ethics",
"Pride of Liberty",
"Rodrick",
"She Is One Of Ours Sir",
"Star of Tiamat",
"Torch of Freedom",
"Torch")
destination_names = list("Drydocks of the Ares Confederation",
"a classified location",
"a Homestead on Paraiso a Àstrea",
"a contested sector of ArCon space",
"one of our free colonies",
"the Gateway 98-C at Ares",
"Sars Mara on Ares",
"Listening Post Maryland-Sigma",
"an emergency nav bouy",
"New Berlin on Nov-Ferrum",
"a settlement needing our help",
"Forward Base Sigma-Alpha in ArCon space")
/datum/lore/organization/gov/elysian
name = "The Elysian Colonies"
short_name = "Demi-Monde"
acronym = "ECS"
desc = "The Elysian Colonies, located spinwards from the Commonwealth, are a disunited bunch of \
vanity states, utopia projects and personal autocracies, whose only unifying characteristic is \
a general disregard of 'normal' social conventions of Humanity as well as their inherent desire \
to keep to their ways, in which cases they do sometimes unite to fight off an outside threat. \
The Elysian Colonies are one of the few places where true slavery is not only accepted, but sadly also \
rather commonplace if you go to the wrong worlds. Not that they don't internally have at least a dozen would-be liberators."
history = ""
work = "fracturous vanity colonies"
headquarters = ""
motto = ""
ship_prefixes = list("ECS" = "military", "ECS" = "Transport", "ECS" = "Special Transport", "ECS" = "Diplomat") //The Special Transport is SLAAAAVES.
ship_names = list("Bring Me Wine!",
"I Can't Believe You",
"More Wives Your Grace?",
"Daddy Bought Me This",
"What Do You Mean It's Unethical",
"Libertine Ideals",
"The True Free",
"Unbound",
"No Man Shackled",
"All Men Shackled",
"All Women Shackled",
"All Hermaphrodites Shackled",
"You Know We Just Shackle Anyone",
"Nobody Deserves Shackles",
"Debt Slavery Is Ethical",
"Fashioned After Tradition",
"Sic Vic Pacem",
"Cultivate This",
"We Demand Self-Governance",
"A Thousand Cultures",
"There Is a Character Limit?",
"Slave Galley I",
"The Unconquered CCXXII"
)
destination_names = list("Cygnus",
"The Ultra Dome of Brutal Kill Death",
"Sanctum",
"Infernum",
"The Most Esteemed Estates of Fred Fredson, Heir of the Fred Throne and All its illustrious Fredpendencies",
"Priory Melana",
"The Clone Pits of Meridiem Five",
"Forward Base Mara Alpha",
"a very tasty looking distress call",
"a liberation intervention",
"a nav bouy within Cygnus Space",
"a Elysian only refuel outpost",
"to a killer party the Fredperor is holding right now")
/datum/lore/organization/gov/fyrds
name = "Unitary Alliance of Salthan Fyrds"
short_name = "Fyrds"
acronym = "SMS"
desc = "Born out of neglect, the Salthan Fyrds are cast-off colonies of the Commonwealth after giving up on \
pacifying the wartorn region and fighting off the stray Unathi Raiders after the Hegemony War. \
In the end they self-organized into military pacts and have formed a militaristic society, in which \
every person, be it organic or robot, is a soldier for the continued cause in serving as aegis against \
another Unathi Incursion. They are very no-nonsense."
history = ""
work = "human stratocracy"
headquarters = "The Pact,Myria"
motto = ""
ship_prefixes = list("SMS" = "Military") // The Salthans don't do anything else.
ship_names = list("Yi Sun-sin",
"Horatio Nelson",
"Scipio Africanus",
"Hannibal Barca",
"Hamilcar Barca",
"Caesar",
"Belisarius",
"Aggripa",
"Pericles",
"Alexander",
"Napoleon Bonaparte",
"Charles XI",
"Blas de Lezo",
"Ivan Sirko",
"Frederick the Great",
"William of Normandy",
"Shaka Zulu",
"Patton",
"MacArthur",
"Rommel")
destination_names = list("Base Alpha-Romero",
"Base Zeta-Xray",
"Base Epsilon-Epsilon",
"Base Xray-Beta",
"Base Gamma-Delta",
"Base Yotta-Epsilon")
-466
View File
@@ -1,466 +0,0 @@
//Cactus, Speedbird, Dynasty, oh my
//Also, massive additions/refactors by Killian, because the original incarnation was full of holes
//minimum and maximum message delays, typically tracked in seconds
#define MIN_MSG_DELAY 3
#define MAX_MSG_DELAY 6
var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
/datum/lore/atc_controller
var/delay_min = 45 MINUTES //How long between ATC traffic, minimum
var/delay_max = 90 MINUTES //Ditto, maximum
//Shorter delays means more traffic, which gives the impression of a busier system, but also means a lot more radio noise
var/backoff_delay = 5 MINUTES //How long to back off if we can't talk and want to. Default is 5 mins.
var/initial_delay = 15 MINUTES //How long to wait before sending the first message of the shift.
var/next_message = 45 MINUTES //When the next message should happen in world.time - Making it default to min value
var/force_chatter_type //Force a specific type of messages
var/squelched = 0 //If ATC is squelched currently
//define a block of frequencies so we can have them be static instead of being random for each call
var/ertchannel
var/medchannel
var/engchannel
var/secchannel
var/sdfchannel
/datum/lore/atc_controller/New()
//generate our static event frequencies for the shift. alternately they can be completely fixed, up in the core block
ertchannel = "[rand(700,749)].[rand(1,9)]"
medchannel = "[rand(750,799)].[rand(1,9)]"
engchannel = "[rand(800,849)].[rand(1,9)]"
secchannel = "[rand(850,899)].[rand(1,9)]"
sdfchannel = "[rand(900,999)].[rand(1,9)]"
spawn(450 SECONDS) //Lots of lag at the start of a shift. Yes, the following lines *have* to be indented or they're not delayed by the spawn properly.
msg("New shift beginning, resuming traffic control. This shift's Colony Frequencies are as follows: Emergency Responders: [ertchannel]. Medical: [medchannel]. Engineering: [engchannel]. Security: [secchannel]. System Defense: [sdfchannel].")
next_message = world.time + initial_delay
process()
/datum/lore/atc_controller/process()
if(world.time >= next_message)
if(squelched)
next_message = world.time + backoff_delay
else
next_message = world.time + rand(delay_min,delay_max)
random_convo()
spawn(1 MINUTE) //We don't really need high-accuracy here.
process()
/datum/lore/atc_controller/proc/msg(var/message,var/sender)
ASSERT(message)
global_announcer.autosay("[message]", sender ? sender : "[using_map.dock_name] Control")
/datum/lore/atc_controller/proc/reroute_traffic(var/yes = 1)
if(yes)
if(!squelched)
msg("Rerouting traffic away from [using_map.station_name].")
squelched = 1
else
if(squelched)
msg("Resuming normal traffic routing around [using_map.station_name].")
squelched = 0
/datum/lore/atc_controller/proc/shift_ending(var/evac = 0)
msg("[using_map.shuttle_name], this is [using_map.dock_name] Control, you are cleared to complete routine transfer from [using_map.station_name] to [using_map.dock_name].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.shuttle_name] departing [using_map.dock_name] for [using_map.station_name] on routine transfer route. Estimated time to arrival: ten minutes.","[using_map.shuttle_name]")
/datum/lore/atc_controller/proc/random_convo()
var/one = pick(loremaster.organizations) //These will pick an index, not an instance
var/two = pick(loremaster.organizations)
var/datum/lore/organization/source = loremaster.organizations[one] //Resolve to the instances
var/datum/lore/organization/secondary = loremaster.organizations[two] //repurposed for new fun stuff
//Let's get some mission parameters, pick our first ship
var/name = source.name //get the name
var/owner = source.short_name //Use the short name
var/prefix = pick(source.ship_prefixes) //Pick a random prefix
var/mission = source.ship_prefixes[prefix] //The value of the prefix is the mission type that prefix does
var/shipname = pick(source.ship_names) //Pick a random ship name
var/destname = pick(source.destination_names) //destination is where?
var/slogan = pick(source.slogans) //god help you all
var/org_type = source.org_type //which group do we belong to?
//pick our second ship
//var/secondname = secondary.name //not used atm, commented out to suppress errors
var/secondowner = secondary.short_name
var/secondprefix = pick(secondary.ship_prefixes) //Pick a random prefix
var/secondshipname = pick(secondary.ship_names) //Pick a random ship name
var/org_type2 = secondary.org_type
var/combined_first_name = "[owner][prefix] |[shipname]|"
var/combined_second_name = "[secondowner][secondprefix] |[secondshipname]|"
var/alt_atc_names = list("[using_map.dock_name] Traffic Control","[using_map.dock_name] TraCon","[using_map.dock_name] System Control","[using_map.dock_name] Star Control","[using_map.dock_name] SysCon","[using_map.dock_name] Tower","[using_map.dock_name] Control","[using_map.dock_name] STC","[using_map.dock_name] StarCon")
var/mission_noun = pick(source.flight_types) //pull from a list of owner-specific flight ops, to allow an extra dash of flavor
if(source.complex_tasks) //if our source has the complex_tasks flag, regenerate with a two-stage assignment
mission_noun = "[pick(source.task_types)] [pick(source.flight_types)]"
//First response is 'yes', second is 'no'
var/requests = list(
"special flight rules" = list("authorizing special flight rules", "denying special flight rules, not allowed for your traffic class"),
"current solar weather info" = list("sending you the relevant information via tightbeam", "your request has been queued, stand by"),
"sector aerospace priority" = list("affirmative, sector aerospace priority is yours", "negative, another vessel in your sector has priority right now"),
"system traffic info" = list("sending you current traffic info", "request queued, please hold"),
"refueling information" = list("sending refueling information now", "depots currently experiencing fuel shortages, advise you move on"),
"a current system time sync" = list("sending time sync ping to you now", "your ship isn't compatible with our time sync, set time manually"),
"current system starcharts" = list("transmitting current starcharts", "your request is queued, overloaded right now")
)
//Random chance things for variety
var/chatter_type = "normal"
if(force_chatter_type)
chatter_type = force_chatter_type
else if((org_type == "government" || org_type == "neutral" || org_type == "military" || org_type == "corporate" || org_type == "system defense" || org_type == "spacer") && org_type2 == "pirate") //this is ugly but when I tried to do it with !='s it fired for pirate-v-pirate, still not sure why. might as well stick it up here so it takes priority over other combos.
chatter_type = "distress"
else if(org_type == "corporate") //corporate-specific subset for the slogan event. despite the relatively high weight it was still quite rare in tests.
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",180;"dockingrequestgeneric",30;"undockingrequest","normal",30;"undockingdenied",50;"slogan",25;"civvieleaks",25;"report_to_dock")
else if((org_type == "government" || org_type == "neutral" || org_type == "military"))
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",180;"dockingrequestgeneric",30;"undockingrequest","normal",30;"undockingdenied",25;"civvieleaks",25;"report_to_dock")
else if(org_type == "spacer")
chatter_type = pick(5;"emerg",15;"policescan",15;"traveladvisory",5;"pathwarning",150;"dockingrequestgeneric",30;"undockingrequest","normal",10;"undockingdenied",25;"civvieleaks",25;"report_to_dock")
//the following filters *always* fire their 'unique' event when they're tripped, simply because the conditions behind them are quite rare to begin with
else if(org_type == "smuggler" && org_type2 != "system defense") //just straight up funnel smugglers into always being caught, otherwise we get them asking for traffic info and stuff
chatter_type = "policeflee"
else if(org_type == "smuggler" && org_type2 == "system defense") //ditto, if an SDF ship catches them
chatter_type = "policeshipflee"
else if((org_type == "smuggler" || org_type == "pirate") && org_type2 == "system defense") //if we roll this combo instead, time for the SDF to do their fucking job
chatter_type = "policeshipcombat"
else if((org_type == "smuggler" || org_type == "pirate") && org_type2 != "system defense") //but if we roll THIS combo, time to alert the SDF to get off their asses
chatter_type = "hostiledetected"
//SDF-specific events that need to filter based on the second party (basically just the following SDF-unique list with the soft-result ship scan thrown in)
else if(org_type == "system defense" && (org_type2 == "government" || org_type2 == "neutral" || org_type2 == "military" || org_type2 == "corporate" || org_type2 == "spacer")) //let's see if we can narrow this down, I didn't see many ship-to-ship scans
chatter_type = pick(75;"policeshipscan","sdfpatrolupdate",75;"sdfendingpatrol",180;"dockingrequestgeneric",20;"undockingrequest",75;"sdfbeginpatrol",50;"normal",10;"civvieleaks")
//SDF-specific events that don't require the secondary at all, in the event that we manage to roll SDF + hostile/smuggler or something
else if(org_type == "system defense")
chatter_type = pick("sdfpatrolupdate",60;"sdfendingpatrol",120;"dockingrequestgeneric",20;"undockingrequest",80;"sdfbeginpatrol","normal","sdfchatter")
//if we somehow don't match any of the other existing filters once we've run through all of them
else
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",90;"dockingrequestgeneric",30;"undockingrequest",30;"undockingdenied","normal",25;"civvieleaks")
//I probably should do some kind of pass here to work through all the possible combinations of major factors and see if the filtering list needs reordering or modifying, but I really can't be arsed
//DEBUG BLOCK
//to_world("DEBUG OUTPUT 1: [name], [owner], [prefix], [mission], [shipname], [org_type], [destname]")
//to_world("DEBUG OUTPUT 2: [secondowner], [secondprefix], [secondshipname], [org_type2]")
//to_world("DEBUG OUTPUT 3: Chose [chatter_type]")
//DEBUG BLOCK ENDS
var/yes = prob(90) //Chance for them to say yes vs no
var/request = pick(requests)
var/callname = pick(alt_atc_names)
var/response = requests[request][yes ? 1 : 2] //1 is yes, 2 is no
var/number = rand(1,42)
var/zone = pick("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")
//fallbacks in case someone sets the dock_type on the map datum to null- it defaults to "station" normally
var/landing_zone = "LZ [zone]"
var/landing_type = "landing zone"
var/landing_move = "landing request"
var/landing_short = "land"
switch(using_map.dock_type)
if("surface") //formal installations with proper facilities
landing_zone = "landing pad [number]"
landing_type = "landing pad"
landing_move = "landing request"
landing_short = "land"
if("frontier") //for frontier bases - landing spots are literally just open ground, maybe concrete at best
landing_zone = "LZ [zone]"
landing_type = "landing zone"
landing_move = "landing request"
landing_short = "land"
if("station") //standard station pattern
landing_zone = "docking bay [number]"
landing_type = "docking bay"
landing_move = "docking request"
landing_short = "dock"
// what you're about to witness is what feels like an extremely kludgy rework of the system, but it's more 'flexible' and allows events that aren't just ship-stc-ship
// something more elegant could probably be done, but it won't be done by somebody as half-competent as me
switch(chatter_type)
//mayday call
if("emerg")
var/problem = pick("We have hull breaches on multiple decks","We have unknown hostile life forms on board","Our primary drive is failing","We have [pick("asteroids","space debris")] impacting the hull","We're experiencing a total loss of engine power","We have hostile ships closing fast","There's smoke [pick("in the cockpit","on the bridge")]","We have unidentified boarders","Our reaction control system is malfunctioning and we're losing stability","Our life support [pick("is failing","has failed")]")
msg("+Mayday, mayday, mayday!+ This is [combined_first_name] declaring an emergency! [problem]!","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control, copy. Switch to emergency responder channel [ertchannel].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Understood [using_map.dock_name] Control, switching now.","[prefix] [shipname]")
//Control scan event: soft outcome
if("policescan")
var/confirm = pick("Understood","Roger that","Affirmative","Very well","Copy that")
var/complain = pick("I hope this doesn't take too long.","Can we hurry this up?","Make it quick.","This better not take too long.","Is this really necessary?","I'm sure you'll find everything to be in order, Control.")
var/completed = pick("You're free to proceed.","Everything looks fine, carry on.","You're clear, move along.","Apologies for the delay, you're clear.","Switch to channel [sdfchannel] and await further instruction.")
msg("[combined_first_name], this is [using_map.dock_name] Control, your [pick("ship","vessel","starship")] has been flagged for routine inspection. Hold position and prepare to be scanned.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[confirm] [using_map.dock_name] Control, holding position.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Your compliance is appreciated, [combined_first_name]. Scan commencing.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*2 SECONDS)
msg(complain,"[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*3 SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Scan complete. [completed]")
//Control scan event: hard outcome
if("policeflee")
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, Control.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!","Ah f- |ditch the containers!| +Now!+","Unless you have something a little +bigger+ in your torpedo tubes, we're |not| turning around!")
msg("Unknown [pick("ship","vessel","starship")], this is [using_map.dock_name] Control, identify yourself and submit to a full inspection. Flying without an active transponder is a violation of interstellar shipping regulations.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[uhoh]","[shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("This is [using_map.starsys_name] Defense Control to all local assets: vector to interdict and detain [combined_first_name]. Control out.","[using_map.starsys_name] Defense Control")
//SDF scan event: soft outcome
if("policeshipscan")
var/confirm = pick("Understood","Roger that","Affirmative")
var/complain = pick("I hope this doesn't take too long.","Can we hurry this up?","Make it quick.","This better not take too long.","Is this really necessary?","I'm sure you'll find everything to be in order, officer.")
var/completed = pick("You're free to proceed.","Everything looks fine, carry on.","You're clear. Move along.","Apologies for the delay, you're clear.","Switch to channel [sdfchannel] and await further instruction.")
msg("[combined_second_name], this is [combined_first_name], your [pick("ship","vessel","starship")] has been flagged for routine inspection. Hold position and prepare to be scanned.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[confirm] [combined_first_name], holding position.","[secondprefix] [secondshipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Your compliance is appreciated, [combined_second_name]. Scan commencing.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*2 SECONDS)
msg(complain,"[secondprefix] [secondshipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*3 SECONDS)
msg("[combined_second_name], this is [combined_first_name]. Scan complete. [completed]","[prefix] [shipname]")
//SDF scan event: hard outcome
if("policeshipflee")
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, |[shipname]|.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!","Ah f- |ditch the containers!| +Now!+","Unless you have something a little +bigger+ in your torpedo tubes, we're |not| turning around!")
msg("Unknown [pick("ship","vessel","starship")], this is [combined_second_name], identify yourself and submit to a full inspection. Flying without an active transponder is a violation of interstellar shipping regulations.","[secondprefix] [secondshipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[uhoh]","[shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.starsys_name] Defense Control, this is [combined_second_name]. We have a situation here, please advise.","[secondprefix] [secondshipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Defense Control copies, [combined_second_name], reinforcements are en route. Switch further communications to encrypted band [sdfchannel].","[using_map.starsys_name] Defense Control")
//SDF scan event: engage primary in combat! fairly rare since it needs a pirate/vox + SDF roll
if("policeshipcombat")
var/battlestatus = pick("requesting reinforcements.","we need backup! Now!","holding steady.","we're holding our own for now.","we have them on the run.","they're trying to make a run for it!","we have them right where we want them.","we're badly outgunned!","we have them outgunned.","we're outnumbered here!","we have them outnumbered.","this'll be a cakewalk.",10;"notify their next of kin.")
msg("[using_map.starsys_name] Defense Control, this is [combined_second_name], engaging [combined_first_name] [pick("near route","in sector")] [rand(1,100)], [battlestatus]","[secondprefix] [secondshipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.starsys_name] Defense Control copies, [combined_second_name]. Keep us updated.","[using_map.starsys_name] Defense Control")
//SDF event: patrol update
if("sdfpatrolupdate")
var/statusupdate = pick("nothing unusual so far","nothing of note","everything looks clear so far","ran off some [pick("pirates","marauders")] near route [pick(1,100)], [pick("no","minor")] damage sustained, continuing patrol","situation normal, no suspicious activity yet","minor incident on route [pick(1,100)]","Code 7-X [pick("on route","in sector")] [pick(1,100)], situation is under control","seeing a lot of traffic on route [pick(1,100)]","caught a couple of smugglers [pick("on route","in sector")] [pick(1,100)]","sustained some damage in a skirmish just now, we're heading back for repairs")
msg("[using_map.starsys_name] Defense Control, this is [combined_first_name] reporting in, [statusupdate], over.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.starsys_name] Defense Control copies, [combined_first_name]. Keep us updated, out.","[using_map.starsys_name] Defense Control")
//SDF event: end patrol
if("sdfendingpatrol")
var/appreciation = pick("Copy","Understood","Affirmative","10-4","Roger that")
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
msg("[callname], this is [combined_first_name], returning from our system patrol route, requesting permission to [landing_short].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
//SDF event: general chatter
if("sdfchatter")
var/chain = pick("codecheck","commscheck")
switch(chain)
if("codecheck")
msg("Check. Check. |Check|. Uhhh... check? Wait. Wait! Hold on. Yeah, okay, I gotta call this one in.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.dock_name] Control, confirm auth-code... [rand(1,9)][rand(1,9)][rand(1,9)]-[pick("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")]?","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("One moment...")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*2 SECONDS)
msg("Yeah, that code checks out [combined_first_name].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("|(sigh)| Copy that Control. You! Move along!","[prefix] [shipname]")
if("commscheck")
msg("Control this is [combined_first_name], we're getting some interference in our area. [pick("How's our line?","Do you read?","How copy, over?")]","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Control reads you loud and clear [combined_first_name].","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[pick("Copy that","Thanks,","Roger that")] Control. [combined_first_name] out.","[prefix] [shipname]")
//Civil event: leaky chatter
if("civvieleaks")
var/commleak = pick("thatsmywife","missingkit","pipeleaks","weirdsmell","weirdsmell2","scug","teppi")
switch(commleak)
if("thatsmywife")
msg("-so then I says to him, |that's no [pick("space carp","space shark","vox","garbage scow","freight liner","cargo hauler","superlifter")], that's my +wife!+| And he-","[prefix] [shipname]")
if("missingkit")
msg("-did you get the kit from down on deck [rand(1,4)]? I need th-","[prefix] [shipname]")
if("pipeleaks")
msg("I swear if these pipes keep leaking I'm going to-","[prefix] [shipname]")
if("weirdsmell")
msg("-and where the hell is that smell coming fr-","[prefix] [shipname]")
if("weirdsmell2")
msg("-hat in the [pick("three","five","seven","nine")] hells did you |eat| [pick("ensign","crewman")]? This compartment reeks of-","[prefix] [shipname]")
if("scug")
msg("-and if that weird cat of yours keeps crawling into the pipes we-","[prefix] [shipname]")
if("teppi")
msg("-at are we supposed to do with this damn cow?","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("I don't think it's a cow, sir, it looks more like a-","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], your internal comms are leaking[pick("."," again.",", again.",". |Again|.")]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Sorry Control, won't happen again.","[prefix] [shipname]")
//DefCon event: hostile found
if("hostiledetected")
var/orders = pick("Engage on sight","Engage with caution","Engage with extreme prejudice","Engage at will","Search and destroy","Bring them in alive, if possible","Interdict and detain","Keep your eyes peeled","Bring them in, dead or alive","Stay alert")
msg("This is [using_map.starsys_name] Defense Control to all SDF assets. Priority update follows.","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Be on the lookout for [combined_first_name], last sighted [pick("near route","in sector","near sector")] [rand(1,100)]. [orders]. DefCon, out.","[using_map.starsys_name] Defense Control")
//Ship event: distress call, under attack
if("distress")
var/state = pick(66;"calm",34;"panic")
switch(state)
if("calm")
msg("[using_map.starsys_name] Defense Control, this is [combined_first_name].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("We read you. Go ahead, [combined_first_name].","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Another vessel in our area is moving [pick("aggressively","suspiciously","erratically","unpredictably","with clear hostile intent")], please advise? Forwarding sensor data now.","[prefix] [shipname]","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], [using_map.starsys_name] Defense Control copies. Sensor data matches logged profile for [combined_second_name]. SDF units are en route to your location.","[using_map.starsys_name] Defense Control")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[pick("Appreciated","Copy that","Understood")], Control. Switching to [sdfchannel] to coordinate.","[prefix] [shipname]")
if("panic")
msg("+Mayday, mayday, mayday!+ This is [combined_first_name] declaring an emergency! We are under attack by [combined_second_name]! Requesting immediate assistance!","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.starsys_name] Defense Control, copy. SDF is en route, contact on [sdfchannel].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[pick("Copy that","Understood")] [using_map.starsys_name] Defense Control, switching now!","[prefix] [shipname]")
//Control event: travel advisory
if("traveladvisory")
var/flightwarning = pick("Solar flare activity is spiking and expected to cause issues along main flight lanes [rand(1,33)], [rand(34,67)], and [rand(68,100)]","Pirate activity is on the rise, stay close to System Defense vessels","We're seeing a rise in illegal salvage operations, please report any unusual activity to the nearest SDF vessel via channel [sdfchannel]","Vox Marauder activity is higher than usual, report any unusual activity to the nearest System Defense vessel","A quarantined [pick("fleet","convoy")] is passing through the system along route [rand(1,100)], please observe minimum safe distance","A prison [pick("fleet","convoy")] is passing through the system along route [rand(1,100)], please observe minimum safe distance","Traffic volume is higher than normal, expect processing delays","Anomalous bluespace activity detected [pick("along route [rand(1,100)]","in sector [rand(1,100)]")], exercise caution","Smugglers have been particularly active lately, expect increased security scans","Depots are currently experiencing a fuel shortage, expect delays and higher rates","Asteroid mining has displaced debris dangerously close to main flight lanes on route [rand(1,100)], watch for potential impactors","[pick("Pirate","Vox Marauder")] and System Defense forces are currently engaged in skirmishes throughout the system, please steer clear of any active combat zones","A [pick("fuel tanker","cargo liner","passenger liner","freighter","transport ship","mining barge","salvage trawler")] has collided with [pick("a fuel tanker","a cargo liner","a passenger liner","a freighter","a transport ship","a mining barge","a salvage trawler","a meteoroid","a cluster of space debris","an asteroid","an ice-rich comet")] near route [rand(1,100)], watch for debris and do not impede emergency service vessels","A [pick("fuel tanker","cargo liner","passenger liner","freighter","transport ship","mining barge","salvage trawler")] on route [rand(1,100)] has experienced total engine failure. Emergency response teams are en route, please observe minimum safe distances and do not impede emergency service vessels","Transit routes have been recalculated to adjust for planetary drift. Please synch your astronav computers as soon as possible to avoid delays and difficulties","[pick("Bounty hunters","System Defense officers","Mercenaries")] are currently searching for a wanted fugitive, report any sightings of suspicious activity to System Defense via channel [sdfchannel]","Mercenary contractors are currently conducting aggressive [pick("piracy","marauder")] suppression operations",10;"It's space [pick("carp","shark")] breeding season. [pick("Stars","Skies","Gods","God","Goddess","Fates")] have mercy on you all")
msg("This is [using_map.dock_name] Control to all vessels in the [using_map.starsys_name] system. Priority travel advisory follows.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[flightwarning]. Control out.")
//Control event: warning to a specific vessel
if("pathwarning")
var/navhazard = pick("a pocket of intense radiation","a pocket of unstable gas","a debris field","a secure installation","an active combat zone","a quarantined ship","a quarantined installation","a quarantined sector","a live-fire SDF training exercise","an ongoing Search & Rescue operation","a hazardous derelict","an intense electrical storm","an intense ion storm","a shoal of space carp","a pack of space sharks","an asteroid infested with gnat hives","a protected space ray habitat","a region with anomalous bluespace activity","a rogue comet")
var/confirm = pick("Understood","Roger that","Affirmative","Our bad","Thanks for the heads up")
var/safetravels = pick("Fly safe out there","Good luck","Safe travels","Godspeed","Stars guide you","Don't let it happen again")
msg("[combined_first_name], this is [using_map.dock_name] Control, your [pick("ship","vessel","starship")] is approaching [navhazard], observe minimum safe distance and adjust your heading appropriately.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[confirm] [using_map.dock_name] Control, adjusting course.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Your compliance is appreciated, [combined_first_name]. [safetravels].")
//Control event: personnel report to dock
if("report_to_dock")
var/situation_type = pick("medical","security","engineering","animal control")
msg("This is [using_map.dock_name] Control. Would a free [situation_type] team please report to [landing_zone] immediately. This is not a drill.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*10 SECONDS)
msg("Repeat, any free [situation_type] team, report to [landing_zone] immediately. This is +not+ a drill.")
//Ship event: docking request (generic)
if("dockingrequestgeneric")
var/request_type = pick(100;"generic",50;"delayed",80;"supply",30;"repair",30;"medical",30;"security")
var/appreciation = pick("Much appreciated","Many thanks","Understood","Perfect, thank you","Excellent, thanks","Great","Copy that")
var/dockingplan = pick("Starting final approach now.","Commencing landing procedures.","Autopilot engaged.","Approach vector locked in.","In the pipe, five by five.")
switch(request_type)
if("generic")
msg("[callname], this is [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_short].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
if("delayed")
var/reason = pick(
"we don't have any free [landing_type]s right now, please [pick("stand by for a couple of minutes","hold for a few minutes")]",
"you're too far away, please close to ten thousand meters","we're seeing heavy traffic around the [landing_type]s right now, please [pick("stand by for a couple of minutes","hold for a few minutes")]","ground crews are currently clearing up [pick("loose containers","a fuel spill")] to free up one of our [landing_type]s, please [pick("stand by for a couple of minutes","hold for a few minutes")]","another vessel has aerospace priority right now, please [pick("stand by for a couple of minutes","hold for a few minutes")]")
msg("[callname], this is [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_short].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Request denied, [reason] and resubmit your request.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Understood, [using_map.dock_name] Control.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*60 SECONDS)
msg("[callname], this is [combined_first_name], resubmitting [landing_move].","[prefix] [shipname]")
sleep (5 SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Everything appears to be in order now, permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
if("supply")
var/preintensifier = pick(75;"getting ",75;"running ","",15;"like, ") //whitespace hack, sometimes they'll add a preintensifier, but not always
var/intensifier = pick("very","pretty","critically","extremely","dangerously","desperately","kinda","a little","a bit","rather","sorta")
var/low_thing = pick("ammunition","munitions","clean water","food","spare parts","medical supplies","reaction mass","gas","hydrogen fuel","phoron fuel","fuel",10;"tea",10;"coffee",10;"soda",10;"pizza",10;"beer",10;"booze",10;"vodka",10;"snacks") //low chance of a less serious shortage
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
msg("[callname], this is [combined_first_name]. We're [preintensifier][intensifier] low on [low_thing]. Requesting permission to [landing_short] for resupply.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in.")
if("repair")
var/damagestate = pick("We've experienced some hull damage","We're suffering minor system malfunctions","We're having some [pick("weird","strange","odd","unusual")] technical issues","We're overdue maintenance","We have several minor space debris impacts","We've got some battle damage here","Our reactor output is fluctuating","We're hearing some weird noises from the [pick("engines","pipes","ducting","HVAC")]","We just got caught in a solar flare","We had a close call with an asteroid","We have a [pick("minor","mild","major","serious")] [pick("fuel","water","oxygen","gas")] leak","We have depressurized compartments","We have a hull breach","One of our [pick("hydraulic","pneumatic")] systems has depressurized","Our [pick("life support","water recycling system","navcomp","shield generator","reaction control system","auto-repair system","repair drone controller","artificial gravity generator","environmental control system","master control system")] is [pick("failing","acting up","on the fritz","shorting out","glitching out","freaking out","malfunctioning")]")
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
msg("[callname], this is [combined_first_name]. [damagestate]. Requesting permission to [landing_short] for repairs and maintenance.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Repair crews are standing by, contact them on channel [engchannel].")
if("medical")
var/species = pick("human","humanoid","unathi","lizard","tajaran","feline","skrell","akula","promethean","sergal","synthetic","robotic","teshari","avian","vulpkanin","canine","vox","zorren","hybrid","mixed-species","vox","grey","alien",5;"catslug")
var/medicalstate = pick("multiple casualties","several cases of radiation sickness","an unknown virus","an unknown infection","a critically injured VIP","sick refugees","multiple cases of food poisoning","injured [pick("","[species] ")]passengers","sick [pick("","[species] ")]passengers","injured engineers","wounded marines","a delicate situation","a pregnant passenger","injured [pick("","[species] ")]castaways","recovered escape pods","unknown escape pods")
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","We owe you one","I owe you one","Perfect, thank you")
msg("[callname], this is [combined_first_name]. We have [medicalstate] on board. Requesting permission to [landing_short] for medical assistance.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Medtechs are standing by, contact them on channel [medchannel].")
if("security")
var/species = pick("human","humanoid","unathi","lizard","tajaran","feline","skrell","akula","promethean","sergal","synthetic","robotic","teshari","avian","vulpkanin","canine","vox","zorren","hybrid","mixed-species","vox","grey","alien",5;"catslug")
var/securitystate = pick("several [species] convicts","a captured pirate","a wanted criminal","[species] stowaways","incompetent [species] shipjackers","a delicate situation","a disorderly passenger","disorderly [species] passengers","ex-mutineers","a captured vox marauder","captured vox marauders","stolen goods","[pick("a container","containers")] full of [pick("confiscated contraband","stolen goods")]",5;"a very lost shadekin",10;"some kinda big wooly critter",15;"a buncha lost-looking uh... cat... slug... |things?|",10;"a raging case of [pick("spiders","crabs","geese","gnats","sharks","carp")]") //gotta have a little something to lighten the mood now and then
appreciation = pick("Much appreciated","Many thanks","Understood","You're a lifesaver","Perfect, thank you")
msg("[callname], this is [combined_first_name]. We have [securitystate] on board and require security assistance. Requesting permission to [landing_short].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted, proceed to [landing_zone]. Follow the green lights on your way in. Security teams are standing by, contact them on channel [secchannel].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[appreciation], [using_map.dock_name] Control. [dockingplan]","[prefix] [shipname]")
//Ship event: undocking request
if("undockingrequest")
var/request_type = pick(150;"generic",50;"delayed")
var/takeoff = pick("depart","launch")
var/safetravels = pick("Fly safe out there","Good luck","Safe travels","See you next week","Godspeed","Stars guide you")
var/thanks = pick("Appreciated","Thanks","Don't worry about us","We'll be fine","You too","So long")
msg("[callname], this is [combined_first_name], requesting permission to [takeoff] from [landing_zone].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
switch(request_type)
if("generic")
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted. Docking clamps released. [safetravels].")
if("delayed")
var/denialreason = pick("Docking clamp malfunction, please hold","Fuel lines have not been secured","Ground crew are still on the pad","Loose containers are on the pad","Exhaust deflectors are not yet in position, please hold","There's heavy traffic right now, it's not safe for your vessel to launch","Another vessel has aerospace priority at this moment","Port officials are still aboard")
msg("Negative [combined_first_name], request denied. [denialreason]. Try again in a few minutes.")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY)*60 SECONDS)
msg("[callname], this is [combined_first_name], re-requesting permission to depart from [landing_zone].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Everything appears to be in order now, permission granted. Docking clamps released. [safetravels].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[thanks], [using_map.dock_name] Control. This is [combined_first_name] setting course for [destname], out.","[prefix] [shipname]")
//SDF event: starting patrol
if("sdfbeginpatrol")
var/safetravels = pick("Fly safe out there","Good luck","Good hunting","Safe travels","Godspeed","Stars guide you")
var/thanks = pick("Appreciated","Thanks","Don't worry about us","We'll be fine","You too")
var/takeoff = pick("depart","launch","take off","dust off")
msg("[callname], this is [combined_first_name], requesting permission to [takeoff] from [landing_zone] to begin system patrol.","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Permission granted. Docking clamps released. [safetravels].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[thanks], [using_map.dock_name] Control. This is [combined_first_name] beginning system patrol, out.","[prefix] [shipname]")
//Ship event: undocking request (denied)
if("undockingdenied")
var/takeoff = pick("depart","launch")
var/denialreason = pick("Security is requesting a full cargo inspection","Your ship has been impounded for multiple [pick("security","safety")] violations","Your ship is currently under quarantine lockdown","We have reason to believe there's an issue with your papers","Security personnel are currently searching for a fugitive and have ordered all outbound ships remain grounded until further notice")
msg("[callname], this is [combined_first_name], requesting permission to [takeoff] from [landing_zone].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("Negative [combined_first_name], request denied. [denialreason].")
if("slogan")
msg("The following is a sponsored message from [name].","Facility PA")
sleep(5 SECONDS)
msg("[slogan]","Facility PA")
else //time for generic message
msg("[callname], this is [combined_first_name] on [mission] [pick(mission_noun)] to [destname], requesting [request].","[prefix] [shipname]")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control, [response].")
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
msg("[using_map.dock_name] Control, [yes ? "thank you" : "understood"], out.","[prefix] [shipname]")
return //oops, forgot to restore this
/* //OLD BLOCK, for reference
//Ship sends request to ATC
msg(full_request,"[prefix] [shipname]"
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
//ATC sends response to ship
msg(full_response)
sleep(rand(MIN_MSG_DELAY,MAX_MSG_DELAY) SECONDS)
//Ship sends response to ATC
msg(full_closure,"[prefix] [shipname]")
return
*/
#undef MIN_MSG_DELAY
#undef MAX_MSG_DELAY
-16
View File
@@ -1,16 +0,0 @@
//I AM THE LOREMASTER, ARE YOU THE GATEKEEPER?
var/datum/lore/loremaster/loremaster = new/datum/lore/loremaster
/datum/lore/loremaster
var/list/organizations = list()
/datum/lore/loremaster/New()
var/list/paths = subtypesof(/datum/lore/organization)
for(var/path in paths)
// Some intermediate paths are not real organizations (ex. /datum/lore/organization/mil). Only do ones with names
var/datum/lore/organization/instance = path
if(initial(instance.name))
instance = new path()
organizations[path] = instance
File diff suppressed because it is too large Load Diff
-1
View File
@@ -290,7 +290,6 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
full set of prosthetic limbs."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/information
// For these we can piggyback off of the lore datums that are already defined and used in some places.
@@ -132,7 +132,3 @@
in the dormant brain via direct electro-uploading. However, this technology is not perfect and small, but \
non-zero error margins exist. Handle with care! Or don't. Stress testing this stuff makes a lucrative market."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/information/organization/khi
name = "Independents - Kitsuhana Heavy Industries"
datum_to_copy = /datum/lore/organization/other/kitsuhana
@@ -33,7 +33,7 @@
..()
var/list/selector_uniforms = list(
"uniform w/ dress"=/obj/item/clothing/under/dress/dress_cap,
"KHI uniform"=/obj/item/clothing/under/rank/khi/cmd,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/cmd,
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
@@ -64,7 +64,7 @@
var/list/selector_uniforms = list(
"uniform w/ dress"=/obj/item/clothing/under/dress/dress_hop,
"HR director"=/obj/item/clothing/under/dress/dress_hr,
"KHI uniform"=/obj/item/clothing/under/rank/khi/cmd,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/cmd,
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
@@ -130,7 +130,7 @@
/datum/gear/uniform/civvie_uniform_selector/New()
..()
var/list/selector_uniforms = list(
"KHI uniform"=/obj/item/clothing/under/rank/khi/civ,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/civ,
"TG&C plain turtleneck"=/obj/item/clothing/under/rank/neo_suspect_turtleneck,
"TG&C plain turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_suspect_turtleskirt,
"TG&C blue turtleneck"=/obj/item/clothing/under/rank/neo_suspect_turtleneck_blue,
@@ -200,7 +200,7 @@
..()
var/list/selector_uniforms = list(
"undersuit, modernized"=/obj/item/clothing/under/rank/security/modern,
"KHI uniform"=/obj/item/clothing/under/rank/khi/sec,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/sec,
"voidsuit underlayer"=/obj/item/clothing/under/undersuit/sec,
"skirt"=/obj/item/clothing/under/rank/security/skirt,
"turtleneck"=/obj/item/clothing/under/rank/security/turtleneck,
@@ -300,7 +300,7 @@
"TG&C blue turtleneck & skirt"=/obj/item/clothing/under/rank/neo_hos_blackblue_skirt,
"TG&C blue parade uniform"=/obj/item/clothing/under/rank/neo_hos_parade_blue,
"TG&C blue parade uniform, feminine"=/obj/item/clothing/under/rank/neo_hos_parade_blue_fem,
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"neocorporate uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
@@ -327,7 +327,7 @@
"skirt"=/obj/item/clothing/under/rank/cargo/skirt,
"jeans"=/obj/item/clothing/under/rank/cargo/jeans,
"jeans, feminine cut"=/obj/item/clothing/under/rank/cargo/jeans/female,
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"neocorporate uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_qm,
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_qm_skirt,
"TG&C casualwear"=/obj/item/clothing/under/rank/neo_qm_jacket,
@@ -359,7 +359,7 @@
"skirt"=/obj/item/clothing/under/rank/cargotech/skirt,
"jeans"=/obj/item/clothing/under/rank/cargotech/jeans,
"jeans, feminine cut"=/obj/item/clothing/under/rank/cargotech/jeans/female,
"KHI uniform"=/obj/item/clothing/under/rank/khi/crg,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/crg,
"TG&C shorts"=/obj/item/clothing/under/rank/neo_cargo_shorts,
"TG&C skirt"=/obj/item/clothing/under/rank/neo_cargo_skirt,
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_cargo,
@@ -405,7 +405,7 @@
..()
var/list/selector_uniforms = list(
"skirt"=/obj/item/clothing/under/rank/chief_engineer/skirt,
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"neocorporate uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
@@ -431,7 +431,7 @@
var/list/selector_uniforms = list(
"skirt"=/obj/item/clothing/under/rank/engineer/skirt,
"turtleneck"=/obj/item/clothing/under/rank/engineer/turtleneck,
"KHI uniform"=/obj/item/clothing/under/rank/khi/eng,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/eng,
"ST: Original Series Ops"=/obj/item/clothing/under/rank/trek/engsec,
"ST: Next Generation Ops"=/obj/item/clothing/under/rank/trek/engsec/next,
"ST: Voyager Ops"=/obj/item/clothing/under/rank/trek/engsec/voy,
@@ -481,7 +481,7 @@
"virologist skirt"=/obj/item/clothing/under/rank/virologist/skirt,
"turtleneck"=/obj/item/clothing/under/rank/medical/turtleneck,
"vey-medical jumpsuit"=/obj/item/clothing/under/corp/veymed,
"KHI uniform"=/obj/item/clothing/under/rank/khi/med,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/med,
"ST: Original Series Med-Sci"=/obj/item/clothing/under/rank/trek/medsci,
"ST: Next Generation Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/next,
"ST: Voyager Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/voy,
@@ -554,7 +554,7 @@
..()
var/list/selector_uniforms = list(
"skirt"=/obj/item/clothing/under/rank/chief_medical_officer/skirt,
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"neocorporate uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
@@ -582,7 +582,7 @@
/datum/gear/uniform/research_director_selector/New()
..()
var/list/selector_uniforms = list(
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"neocorporate uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
@@ -611,7 +611,7 @@
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_science,
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_science_skirt,
"TG&C utility"=/obj/item/clothing/under/rank/neo_util_sci,
"KHI uniform"=/obj/item/clothing/under/rank/khi/sci,
"neocorporate uniform"=/obj/item/clothing/under/rank/khi/sci,
"ST: Original Series Med-Sci"=/obj/item/clothing/under/rank/trek/medsci,
"ST: Next Generation Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/next,
"ST: Voyager Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/voy,
+1 -1
View File
@@ -1,6 +1,6 @@
/obj/machinery/computer/looking_glass
name = "looking glass control"
desc = "Controls the looking glass displays in this room. Provided courtesy of KHI."
desc = "Controls the looking glass displays in this room. Provided courtesy of NT's Advanced Spatial Imaging Division."
icon_keyboard = "tech_key"
icon_screen = "holocontrol"
+1 -1
View File
@@ -29,7 +29,7 @@
/datum/lore/codex/category/auto_org/other
name = "Other Factions"
auto_keywords = list("KHI","SDF","Smuggler","Smugglers","Pirate","Pirates")
auto_keywords = list("SDF","Smuggler","Smugglers","Pirate","Pirates")
desired_type = /datum/lore/organization/other
/datum/lore/codex/category/auto_org/gov
+7 -6
View File
@@ -15,9 +15,10 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable
//Nanotech Implant Foundation
/obj/item/nif
name = "nanite implant framework"
desc = "A somewhat diminished knockoff of a Kitsuhana nano working surface, in a box. Can print new \
desc = "A mass-production model of a nano working surface, in a box. Can print new \
implants inside living hosts on the fly based on software uploads. Must be surgically \
implanted in the head to work. May eventually wear out and break."
implanted in the head to work, and requires periodical maintenance. Warning: this device \
is extremely sensitive to electromagnetic pulse waves."
icon = 'icons/obj/device_alt.dmi'
icon_state = "nif_0"
@@ -625,14 +626,14 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable
starting_software = null
/obj/item/nif/authentic
name = "\improper Kitsuhana NIF"
desc = "An actual Kitsuhana working surface, in a box. From a society slightly less afraid \
of self-replicating nanotechnology. Basically just a high-endurance NIF."
name = "luxury NIF"
desc = "An actual nano working surface, in a box. These are the high-end models, usually only available to big spenders and those with serious contacts. \
Despite the all the marketing speak, they're really just a high-endurance NIF when it comes down to it."
durability = 1000
/obj/item/nif/bioadap
name = "bioadaptive NIF"
desc = "A NIF that goes out of it's way to accomidate strange body types. \
desc = "A NIF that goes out of it's way to accomodate strange body types. \
Will function in species where it normally wouldn't."
durability = 75
bioadap = TRUE
+29
View File
@@ -382,6 +382,35 @@
for(var/i = 0 to 7)
new /obj/item/disk/nifsoft/mining(src)
// Pilot Disk //
/obj/item/disk/nifsoft/pilot
name = "NIFSoft Uploader - Pilot"
desc = "Contains free NIFSofts useful for pilot members.\n\
It has a small label: \n\
\"Portable NIFSoft Installation Media. \n\
Align ocular port with eye socket and depress red plunger.\""
icon = 'icons/obj/nanomods_vr.dmi'
icon_state = "pilot"
stored_organic = /datum/nifsoft/package/pilot
stored_synthetic = /datum/nifsoft/package/pilot_synth
/datum/nifsoft/package/pilot
software = list(/datum/nifsoft/spare_breath)
/datum/nifsoft/package/pilot_synth
software = list(/datum/nifsoft/pressure,/datum/nifsoft/heatsinks)
/obj/item/storage/box/nifsofts_pilot
name = "pilot nifsoft uploaders"
desc = "A box of free nifsofts for pilot employees."
icon = 'icons/obj/boxes_vr.dmi'
icon_state = "nifsoft_kit_pilot"
/obj/item/storage/box/nifsofts_pilot/New()
..()
for(var/i = 0 to 7)
new /obj/item/disk/nifsoft/pilot(src)
// Mass Alteration Disk //
/obj/item/disk/nifsoft/sizechange
name = "NIFSoft Uploader - Mass Alteration"
-28
View File
@@ -1,28 +0,0 @@
// Pilot Disk //
/obj/item/disk/nifsoft/pilot
name = "NIFSoft Uploader - Pilot"
desc = "Contains free NIFSofts useful for pilot members.\n\
It has a small label: \n\
\"Portable NIFSoft Installation Media. \n\
Align ocular port with eye socket and depress red plunger.\""
icon = 'icons/obj/nanomods_vr.dmi'
icon_state = "pilot"
stored_organic = /datum/nifsoft/package/pilot
stored_synthetic = /datum/nifsoft/package/pilot_synth
/datum/nifsoft/package/pilot
software = list(/datum/nifsoft/spare_breath)
/datum/nifsoft/package/pilot_synth
software = list(/datum/nifsoft/pressure,/datum/nifsoft/heatsinks)
/obj/item/storage/box/nifsofts_pilot
name = "pilot nifsoft uploaders"
desc = "A box of free nifsofts for pilot employees."
icon = 'icons/obj/boxes_vr.dmi'
icon_state = "nifsoft_kit_pilot"
/obj/item/storage/box/nifsofts_pilot/New()
..()
for(var/i = 0 to 7)
new /obj/item/disk/nifsoft/pilot(src)
@@ -17,9 +17,3 @@
name = "flechette magazine (small)"
desc = "A magazine containing smaller steel flechettes, intended for a pistol."
icon_state = "caseless-mag-short"
/obj/item/magnetic_ammo/pistol/khi
name = "flechette magazine (small, khi)"
desc = "A magazine containing smaller carbyne flechettes, intended for a pistol."
icon_state = "caseless-mag-short-alt"
remaining = 12
@@ -1,10 +1,9 @@
// The Gun //
/obj/item/gun/projectile/cell_loaded //this one can load both medical and security cells! for ERT/admin use.
name = "multipurpose cell-loaded revolver"
desc = "Variety is the spice of life! This weapon is a hybrid of the KHI-102b 'Nanotech Selectable-Fire Weapon' and the Vey-Med ML-3 'Medigun', dubbed the 'NSFW-ML3M'. \
desc = "Variety is the spice of life! This weapon is a hybrid of the Hephaestus 102b 'Nanotech Selectable-Fire Weapon' and the Vey-Med ML-3 'Medigun', dubbed the 'NSFW-ML3M'. \
It can fire both harmful and healing cells with an internal nanite fabricator and energy weapon cell loader. Up to three combinations of \
energy beams can be configured at once. Ammo not included."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
icon = 'icons/vore/custom_guns_vr.dmi'
icon_state = "nsfw"
@@ -209,7 +208,6 @@
/obj/item/ammo_casing/microbattery
name = "\'NSFW\' microbattery - UNKNOWN"
desc = "A miniature battery for an energy weapon."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
icon = 'icons/obj/ammo_vr.dmi'
icon_state = "nsfw_batt"
slot_flags = SLOT_BELT | SLOT_EARS
@@ -1,7 +1,7 @@
// The Gun //
/obj/item/gun/projectile/cell_loaded/medical
name = "cell-loaded medigun"
desc = "The ML-3 'Medigun', or ML3M for short, is a powerful cell-based ranged healing device based on the KHI-102b NSFW. \
desc = "The ML-3 'Medigun', or ML3M for short, is a powerful cell-based ranged healing device based on the Hephaestus 102b NSFW. \
It uses an internal nanite fabricator, powered and controlled by discrete cells, to deliver a variety of effects at range. Up to six combinations of \
healing beams can be configured at once, depending on cartridge used. Ammo not included."
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
@@ -15,7 +15,7 @@
/obj/item/gun/projectile/cell_loaded/medical/cmo
name = "advanced cell-loaded medigun"
desc = "This is a variation on the ML-3 'Medigun', a powerful cell-based ranged healing device based on the KHI-102b NSFW. \
desc = "This is a variation on the ML-3 'Medigun', a powerful cell-based ranged healing device based on the Hephaestus 102b NSFW. \
It has an extended sight for increased accuracy, and much more comfortable grip. Ammo not included."
icon_state = "ml3m_cmo"
@@ -1,17 +1,16 @@
// The Gun //
/obj/item/gun/projectile/cell_loaded/combat
name = "cell-loaded revolver"
desc = "Variety is the spice of life! The KHI-102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \
desc = "Variety is the spice of life! The Hephaestus 102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \
energy weapon that allows the user to mix and match their own fire modes. Up to four combinations of \
energy beams can be configured at once. Ammo not included."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
description_fluff = "The Kitsuhana 'Nanotech Selectable Fire Weapon' allows one to customize their loadout in the field, or before deploying, to achieve various results in a weapon they are already familiar with wielding."
description_fluff = "The Hephaestus 'Nanotech Selectable Fire Weapon' allows one to customize their loadout in the field, or before deploying, to achieve various results in a weapon they are already familiar with wielding."
allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/combat)
/obj/item/gun/projectile/cell_loaded/combat/prototype
name = "prototype cell-loaded revolver"
desc = "Variety is the spice of life! A prototype based on KHI-102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \
desc = "Variety is the spice of life! A prototype based on Hephaestus 102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \
energy weapon that allows the user to mix and match their own fire modes. Up to two combinations of \
energy beams can be configured at once. Ammo not included."
@@ -29,7 +28,6 @@
icon_state = "nsfw_mag"
max_ammo = 4
x_offset = 4
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
description_info = "This magazine holds NSFW microbatteries to power the NSFW handgun. Up to three can be loaded at once, and each provides four shots of their respective energy type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger."
ammo_type = /obj/item/ammo_casing/microbattery/combat
@@ -44,7 +42,7 @@
// The Pack //
/obj/item/storage/secure/briefcase/nsfw_pack
name = "\improper KHI-102b \'NSFW\' gun kit"
name = "\improper Hephaestus 102b \'NSFW\' gun kit"
desc = "A storage case for a multi-purpose handgun. Variety hour!"
w_class = ITEMSIZE_NORMAL
max_w_class = ITEMSIZE_NORMAL
@@ -58,7 +56,7 @@
new path(src)
/obj/item/storage/secure/briefcase/nsfw_pack_hos
name = "\improper KHI-102b \'NSFW\' gun kit"
name = "\improper Hephaestus 102b \'NSFW\' gun kit"
desc = "A storage case for a multi-purpose handgun. Variety hour!"
w_class = ITEMSIZE_NORMAL
max_w_class = ITEMSIZE_NORMAL
@@ -2,7 +2,6 @@
/obj/item/ammo_casing/microbattery/combat
name = "\'NSFW\' microbattery - UNKNOWN"
desc = "A miniature battery for an energy weapon."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 1, TECH_MAGNET = 2)
/obj/item/ammo_casing/microbattery/combat/lethal
@@ -1,11 +0,0 @@
/obj/item/gun/magnetic/railgun/flechette/pistol/khi
name = "kitsuhana flechette pistol"
desc = "This rail pistol appears to have been 'tampered with', improving it's power storage and efficiency."
cell = /obj/item/cell/hyper
capacitor = /obj/item/stock_parts/capacitor/hyper
projectile_type = /obj/item/projectile/bullet/magnetic/flechette/small/khi
load_type = /obj/item/magnetic_ammo/pistol/khi
loaded = /obj/item/magnetic_ammo/pistol/khi
@@ -33,15 +33,6 @@
armor_penetration = 100
hud_state = "alloy_spike"
/obj/item/projectile/bullet/magnetic/flechette/small/khi
name = "small carbyne flechette"
icon_state = "flechette"
fire_sound = 'sound/weapons/rapidslice.ogg'
damage = 18
armor_penetration = 100
penetrating = 10
hud_state = "alloy_spike"
/obj/item/projectile/bullet/magnetic/flechette/hunting
name = "shredder slug"
armor_penetration = 30
@@ -138,8 +138,8 @@
color = reagents.get_color()
/obj/item/reagent_containers/pill/sleevingcure
name = "Kitsuhanan Cure (1u)"
desc = "A rare cure provided by KHI that helps counteract negative side effects of using imperfect resleeving machinery."
name = "Resleeving Sickness Cure (1u)"
desc = "A rare cure provided by Vey-Med that helps counteract negative side effects of using imperfect resleeving machinery."
icon_state = "pill3"
/obj/item/reagent_containers/pill/sleevingcure/Initialize()
@@ -79,9 +79,9 @@
M.heal_organ_damage(8 * removed * chem_effective, 0)
/datum/reagent/sleevingcure
name = "Kitsuhanan Cure"
name = "Resleeving Sickness Cure"
id = "sleevingcure"
description = "A rare cure provided by KHI that helps counteract negative side effects of using imperfect resleeving machinery."
description = "A rare medication provided by Vey-Med that helps counteract negative side effects of using imperfect resleeving machinery."
taste_description = "chocolate peanut butter"
taste_mult = 2
reagent_state = LIQUID
@@ -98,7 +98,7 @@
/datum/reagent/prussian_blue //We don't have iodine, so prussian blue we go.
name = "Prussian Blue"
id = "prussian_blue"
description = "Prussian Blue is an medication used to temporarily pause the effects of radiation poisoning to allow for treatment. Does not treat radiation sickness on its own."
description = "Prussian Blue is a medication used to temporarily pause the effects of radiation poisoning to allow for treatment. Does not treat radiation sickness on its own."
taste_description = "salt"
reagent_state = SOLID
color = "#003153" //Blue!
+1 -2
View File
@@ -4,8 +4,7 @@
/obj/machinery/computer/transhuman/resleeving
name = "resleeving control console"
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
icon_keyboard = "med_key"
icon_screen = "dna"
light_color = "#315ab4"
+1 -2
View File
@@ -9,8 +9,7 @@
/obj/machinery/computer/transhuman/designer
name = "body design console"
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
icon = 'icons/obj/computer.dmi'
icon_keyboard = "med_key"
icon_screen = "explosive"
+1 -1
View File
@@ -27,7 +27,7 @@
<br>
<h1><a name="Foreword">Foreword: A Licensed Technology</a></h1>
This message must remain attached to all documentation regarding Nanotrasen Resleeving Technology.<br>
All Nanotrasen Resleeving Technology (NRT) is licensed to Nanotrasen by Kitsuhana Heavy Industries. It should only be used in the ways set forth in this guide.
All Nanotrasen Resleeving Technology (NRT) is licensed to Nanotrasen by Vey Medical. It should only be used in the ways set forth in this guide.
Special consideration to the moral and ethical use of this technology should be undertaken before applying it in the field. Make sure you understand the technology fully before using the machinery.<br>
<a href="#Contents">Contents</a>
+6 -8
View File
@@ -7,8 +7,7 @@
/obj/item/implant/backup
name = "backup implant"
desc = "A mindstate backup implant that occasionally stores a copy of one's mind on a central server for backup purposes."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "backup_implant"
known_implant = TRUE
@@ -23,7 +22,7 @@
<b>Implant Specifications:</b><BR>
<b>Name:</b> [using_map.company_name] Employee Backup Implant<BR>
<b>Life:</b> ~8 hours.<BR>
<b>Important Notes:</b> Implant is life-limited due to KHI licensing restrictions. Dissolves into harmless biomaterial after around ~8 hours, the typical work shift.<BR>
<b>Important Notes:</b> Implant is life-limited due to licensing restrictions. Dissolves into harmless biomaterial after around ~8 hours, the typical work shift.<BR>
<HR>
<b>Implant Details:</b><BR>
<b>Function:</b> Contains a small swarm of nanobots that perform neuron scanning to create mind-backups.<BR>
@@ -53,9 +52,8 @@
//New, modern implanter instead of old style implanter.
/obj/item/backup_implanter
name = "backup implanter"
desc = "After discovering that Nanotrasen was just re-using the same implanters over and over again on organics, leading to cross-contamination, Kitsuhana Heavy industries designed this self-cleaning model. Holds four backup implants at a time."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
desc = "After discovering that Nanotrasen was just re-using the same implanters over and over again on organics, leading to cross-contamination, Vey-Medical designed this self-cleaning model. Holds four backup implants at a time."
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
icon = 'icons/obj/device_alt.dmi'
icon_state = "bimplant"
item_state = "syringe_0"
@@ -156,5 +154,5 @@
//Purely for fluff
/obj/item/implant/backup/full
name = "khi backup implant"
desc = "A normal KHI wireless cortical stack with neutrino and QE transmission for constant-stream consciousness upload."
name = "backup implant"
desc = "A normal wireless cortical stack with neutrino and QE transmission for constant-stream consciousness upload."
+3 -6
View File
@@ -6,8 +6,7 @@
/////// Grower Pod ///////
/obj/machinery/clonepod/transhuman
name = "grower pod"
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
circuit = /obj/item/circuitboard/transhuman_clonepod
//A full version of the pod
@@ -204,8 +203,7 @@
/obj/machinery/transhuman/synthprinter
name = "SynthFab 3000"
desc = "A rapid fabricator for synthetic bodies."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
icon = 'icons/obj/machines/synthpod.dmi'
icon_state = "pod_0"
circuit = /obj/item/circuitboard/transhuman_synthprinter
@@ -437,8 +435,7 @@
/obj/machinery/transhuman/resleever
name = "resleeving pod"
desc = "Used to combine mind and body into one unit."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
icon = 'icons/obj/machines/implantchair.dmi'
icon_state = "implantchair"
circuit = /obj/item/circuitboard/transhuman_resleever
+2 -3
View File
@@ -1,8 +1,7 @@
/obj/item/paicard/sleevecard
name = "sleevecard"
desc = "This KHI-upgraded pAI module has enough capacity to run a whole mind of human-level intelligence."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi,
/datum/category_item/catalogue/technology/resleeving)
desc = "This upgraded pAI module has enough capacity to run a whole mind of human-level intelligence."
catalogue_data = list(/datum/category_item/catalogue/technology/resleeving)
origin_tech = list(TECH_DATA = 2)
show_messages = 0
var/emagged = FALSE
@@ -817,22 +817,6 @@
if(H.head == src)
H.update_inv_head()
/obj/item/rig/light/hacker/fluff/aronai
name = "KHI-99-AAR suit module"
suit_type = "nano"
desc = "A thin collapsable spacesuit for synths from Kitsuhana Heavy Industries."
airtight = 1 //Not because it should be airtight but because suit coolers don't work w/o it.
armor = list(melee = 25, bullet = 15, laser = 15, energy = 60, bomb = 30, bio = 70, rad = 100)
air_type = null //No O2 tank, why would it have one?
cell_type = /obj/item/cell/hyper
req_access = list(access_medical)
initial_modules = list(
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/teleporter
)
//Viveret:Keturah
/obj/item/clothing/under/dress/maid
name = "Maid Outfit"
@@ -914,7 +898,6 @@
/obj/item/clothing/under/rank/khi
name = "Delete Me"
desc = "Why did you spawn this one? Dork."
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
sensor_mode = 3
icon = 'icons/inventory/uniform/item_vr.dmi'
@@ -922,44 +905,44 @@
icon_state = "khi_uniform"
/obj/item/clothing/under/rank/khi/cmd //Command version
name = "KHI command suit"
desc = "Kitsuhana Heavy Industries uniform. An extra-comfortable command one, at that. I guess if you DON'T want anarchy for some reason."
name = "sleek command suit"
desc = "A sleek, neocorporate style uniform. An extra-comfortable command one, at that."
icon_state = "khi_uniform_cmd"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/under/rank/khi/sec //Security version
name = "KHI security suit"
desc = "Kitsuhana Heavy Industries uniform. This one has angry red security stripes. Keepin' the peace in style."
name = "sleek security suit"
desc = "A sleek, neocorporate style uniform. This one has angry red security stripes. Keepin' the peace in style."
icon_state = "khi_uniform_sec"
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/under/rank/khi/med //Medical version
name = "KHI medical suit"
desc = "Kitsuhana Heavy Industries uniform. The medical version. Why not just get a new body, anyway?"
name = "sleek medical suit"
desc = "A sleek, neocorporate style uniform. The medical version. Why not just get a new body, anyway?"
icon_state = "khi_uniform_med"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/khi/eng //Engineering version
name = "KHI engineering suit"
desc = "Kitsuhana Heavy Industries uniform. One fit for an engineer, by the looks of it. Building the future, one disaster at a time."
name = "sleek engineering suit"
desc = "A sleek, neocorporate style uniform. One fit for an engineer, by the looks of it."
icon_state = "khi_uniform_eng"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10)
/obj/item/clothing/under/rank/khi/sci //Science version
name = "KHI science suit"
desc = "Kitsuhana Heavy Industries uniform. For performing science in, based on the color! Only SCIENCE can save us now."
name = "sleek science suit"
desc = "A sleek, neocorporate style uniform. For performing science in, based on the color!"
icon_state = "khi_uniform_sci"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/under/rank/khi/crg //Cargo version
name = "KHI cargo suit"
desc = "Kitsuhana Heavy Industries uniform. Looks like it's in supply and cargo division colors. Even post-scarcity societies need things moved and mined sometimes."
name = "sleek cargo suit"
desc = "A sleek, neocorporate style uniform. Looks like it's in supply and cargo division colors. Heavy industry means heavy lifting, after all."
icon_state = "khi_uniform_crg"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/under/rank/khi/civ //Science version
name = "KHI civilian suit"
desc = "Kitsuhana Heavy Industries uniform. Snazzy silver trim marks this is as the general civilian branch. Smells like paperwork and bureaucracy."
name = "sleek civilian suit"
desc = "A sleek, neocorporate style uniform. Snazzy silver trim marks this is as the general civilian branch. Smells like paperwork and bureaucracy."
icon_state = "khi_uniform_civ"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
@@ -573,8 +573,8 @@
update_icon()
/obj/item/paper/khcrystal_manual
name = "KH-LC91-1 manual"
info = {"<h4>KH-LC91-1 Life Crystal</h4>
name = "VM-LC91-1 manual"
info = {"<h4>VM-LC91-1 Life Crystal</h4>
<h5>Usage</h5>
<ol>
<li>Hold new crystal in hand.</li>
@@ -583,8 +583,8 @@
</ol>
<br />
<h5>Purpose</h5>
<p>The Kitsuhana Life Crystal is a small device typically worn around the neck for the purpose of reporting your status to the HAVENS (Kitsuhana's High-AVailability ENgram Storage) system, so that appropriate measures can be taken in the case of your body's demise. The whole device is housed inside a pleasing-to-the-eye elongated diamond.</p>
<p>Upon your body's desmise, the crystal will send a transmission to HAVENS. Depending on your membership level, the appropriate actions can be taken to ensure that you are back up and enjoying existence as soon as possible.</p>
<p>The Vey-Medical Life Crystal is a small device typically worn around the neck for the purpose of reporting your status to the HAVENS (High-AVailability ENgram Storage) system, so that appropriate measures can be taken in the case of your body's demise. The whole device is housed inside a pleasing-to-the-eye elongated diamond.</p>
<p>Upon your body's demise, the crystal will send a transmission to HAVENS. Depending on your membership level, the appropriate actions can be taken to ensure that you are back up and enjoying existence as soon as possible.</p>
<p>Nanotrasen has negotiated a <i>FREE</i> Star membership for you in the HAVENS system, though an upgrade can be obtained depending on your citizenship and reputation level.</p>
@@ -615,7 +615,7 @@
name = "life crystal case"
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "khlifebox"
desc = "This case can only hold the KH-LC91-1 and a manual."
desc = "This case can only hold the VM-LC91-1 and a manual."
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
storage_slots = 2
can_hold = list(/obj/item/paper/khcrystal_manual, /obj/item/clothing/accessory/collar/khcrystal)
+3 -5
View File
@@ -2027,9 +2027,9 @@
#include "code\modules\blob2\overmind\types\shifting_fragments.dm"
#include "code\modules\blob2\overmind\types\synchronous_mesh.dm"
#include "code\modules\blob2\overmind\types\volatile_alluvium.dm"
#include "code\modules\busy_space_vr\air_traffic.dm"
#include "code\modules\busy_space_vr\loremaster.dm"
#include "code\modules\busy_space_vr\organizations.dm"
#include "code\modules\busy_space\air_traffic.dm"
#include "code\modules\busy_space\loremaster.dm"
#include "code\modules\busy_space\organizations.dm"
#include "code\modules\casino\boxes_casino.dm"
#include "code\modules\casino\casino.dm"
#include "code\modules\casino\casino_book.dm"
@@ -3580,7 +3580,6 @@
#include "code\modules\nifsoft\nif_softshop.dm"
#include "code\modules\nifsoft\nif_tgui.dm"
#include "code\modules\nifsoft\nifsoft.dm"
#include "code\modules\nifsoft\nifsoft_vr.dm"
#include "code\modules\nifsoft\software\01_vision.dm"
#include "code\modules\nifsoft\software\05_health.dm"
#include "code\modules\nifsoft\software\06_screens.dm"
@@ -3862,7 +3861,6 @@
#include "code\modules\projectiles\guns\magnetic\magnetic.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic_construction.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic_railgun_vr.dm"
#include "code\modules\projectiles\guns\projectile\altevian_vr.dm"
#include "code\modules\projectiles\guns\projectile\automatic.dm"
#include "code\modules\projectiles\guns\projectile\automatic_vr.dm"