diff --git a/_maps/cyberiad.dm b/_maps/cyberiad.dm index 7e7c9a2b896..383eb54e15e 100644 --- a/_maps/cyberiad.dm +++ b/_maps/cyberiad.dm @@ -12,19 +12,16 @@ z6 = russian derelict z7 = empty */ -#if !defined(MAP_FILE) +#if !defined(USING_MAP_DATUM) + #include "map_files\cyberiad\cyberiad.dmm" + #include "map_files\cyberiad\z2.dmm" + #include "map_files\cyberiad\z3.dmm" + #include "map_files\cyberiad\z4.dmm" + #include "map_files\generic\z5.dmm" + #include "map_files\cyberiad\z6.dmm" + #include "map_files\generic\z7.dmm" - #include "map_files\cyberiad\cyberiad.dmm" - #include "map_files\cyberiad\z2.dmm" - #include "map_files\cyberiad\z3.dmm" - #include "map_files\cyberiad\z4.dmm" - #include "map_files\generic\z5.dmm" - #include "map_files\cyberiad\z6.dmm" - #include "map_files\generic\z7.dmm" - - #define MAP_FILE "cyberiad.dmm" - #define MAP_NAME "Cyberiad" - #define MAP_TRANSITION_CONFIG list(\ + #define MAP_TRANSITION_CONFIG list(\ DECLARE_LEVEL(MAIN_STATION, CROSSLINKED, list(STATION_LEVEL,STATION_CONTACT,REACHABLE,AI_OK)),\ DECLARE_LEVEL(CENTCOMM, SELFLOOPING, list(ADMIN_LEVEL, BLOCK_TELEPORT, IMPEDES_MAGIC)),\ DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE, BOOSTS_SIGNAL, AI_OK)),\ @@ -33,8 +30,10 @@ DECLARE_LEVEL(MINING, CROSSLINKED, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, DECLARE_LEVEL(DERELICT, CROSSLINKED, list(REACHABLE)),\ DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE))) + #define USING_MAP_DATUM /datum/map/cyberiad + #elif !defined(MAP_OVERRIDE) #warn a map has already been included, ignoring Cyberiad. -#endif +#endif \ No newline at end of file diff --git a/_maps/metastation.dm b/_maps/metastation.dm index 57a249d27dd..1b97be00861 100644 --- a/_maps/metastation.dm +++ b/_maps/metastation.dm @@ -13,19 +13,19 @@ z6 = empty space z7 = empty space */ -#if !defined(MAP_FILE) - #include "map_files\MetaStation\MetaStation.v41A.II.dmm" - #include "map_files\MetaStation\z2.dmm" - #include "map_files\MetaStation\z3.dmm" - #include "map_files\MetaStation\z4.dmm" - #include "map_files\generic\z5.dmm" - #include "map_files\generic\z6.dmm" - #include "map_files\generic\z7.dmm" +#if !defined(USING_MAP_DATUM) + #include "map_files\MetaStation\MetaStation.v41A.II.dmm" + #include "map_files\MetaStation\z2.dmm" + #include "map_files\MetaStation\z3.dmm" + #include "map_files\MetaStation\z4.dmm" + #include "map_files\generic\z5.dmm" + #include "map_files\generic\z6.dmm" + #include "map_files\generic\z7.dmm" - #define MAP_FILE "MetaStation.v41A.II.dmm" - #define MAP_NAME "MetaStation" - #define MAP_TRANSITION_CONFIG list(\ + #define MAP_FILE "MetaStation.v41A.II.dmm" + #define MAP_NAME "MetaStation" + #define MAP_TRANSITION_CONFIG list(\ DECLARE_LEVEL(MAIN_STATION, CROSSLINKED, list(STATION_LEVEL, STATION_CONTACT, REACHABLE, AI_OK)),\ DECLARE_LEVEL(CENTCOMM, SELFLOOPING, list(ADMIN_LEVEL, BLOCK_TELEPORT, IMPEDES_MAGIC)),\ DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE, BOOSTS_SIGNAL, AI_OK)),\ @@ -34,8 +34,10 @@ DECLARE_LEVEL(MINING, CROSSLINKED, list(REACHABLE, STATION_CONTACT, AI_OK, ORE_L DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)),\ DECLARE_LEVEL(EMPTY_AREA_2, CROSSLINKED, list(REACHABLE))) + #define USING_MAP_DATUM /datum/map/metastation + #elif !defined(MAP_OVERRIDE) #warn a map has already been included, ignoring MetaStation. -#endif +#endif \ No newline at end of file diff --git a/_maps/test_away_missions.dm b/_maps/test_away_missions.dm index e960cd3b065..42b068412bd 100644 --- a/_maps/test_away_missions.dm +++ b/_maps/test_away_missions.dm @@ -1,6 +1,6 @@ // This is for Travis testing. DO NOT SET THIS AS THE GAME'S MAP NORMALLY! -#if !defined(MAP_FILE) +#if !defined(USING_MAP_DATUM) #include "map_files\RandomZLevels\beach.dmm" #include "map_files\RandomZLevels\moonoutpost19.dmm" #include "map_files\RandomZLevels\undergroundoutpost45.dmm" @@ -12,10 +12,10 @@ #include "map_files\RandomZLevels\evil_santa.dmm" - #define MAP_FILE "beach.dmm" - #define MAP_NAME "Away Missions Test" #define MAP_TRANSITION_CONFIG list(AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED, AWAY_MISSION = UNAFFECTED) + #define USING_MAP_DATUM /datum/map + #elif !defined(MAP_OVERRIDE) #warn a map has already been included. #endif diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 138e55f7add..bfc13277e5f 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -309,6 +309,9 @@ trade_dock_timelimit = 0 trade_dockrequest_timelimit = 0 event_announcement.Announce("Docking request for trading ship denied.", "Docking request") + if("ToggleATC") + atc.squelched = !atc.squelched + to_chat(usr, "ATC traffic is now: [atc.squelched ? "Disabled" : "Enabled"].") nanomanager.update_uis(src) return 1 @@ -408,6 +411,8 @@ else data["dock_request"] = 0 + data["atcSquelched"] = atc.squelched + return data diff --git a/code/modules/busy_space/air_traffic.dm b/code/modules/busy_space/air_traffic.dm new file mode 100644 index 00000000000..de0b37ed3c3 --- /dev/null +++ b/code/modules/busy_space/air_traffic.dm @@ -0,0 +1,129 @@ +//Cactus, Speedbird, Dynasty, oh my + +var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller + +/datum/lore/atc_controller + var/delay_max = 10 MINUTES //Maximum amount of tiem between ATC messages. Default is 10 mins. + var/delay_min = 5 MINUTES //Minimum amount of time between ATC messages. Default is 5 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/force_chatter_type //Force a specific type of messages + + var/squelched = FALSE //If ATC is squelched currently + +/datum/lore/atc_controller/New() + spawn(30 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() + +/datum/lore/atc_controller/proc/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 MINUTES) //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.station_short] Space 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 = TRUE + else + if(squelched) + msg("Resuming normal traffic routing around [using_map.station_name].") + squelched = FALSE + +/datum/lore/atc_controller/proc/shift_ending(var/evac = 0) + msg("Automated Shuttle departing [using_map.station_name] for [using_map.dock_name] on routine transfer route.", "NT Automated Shuttle") + sleep(5 SECONDS) + msg("Automated Shuttle, cleared to complete routine transfer from [using_map.station_name] to [using_map.dock_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/dest = loremaster.organizations[two] + + //Let's get some mission parameters + 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 to go with it + var/destname = pick(dest.destination_names) //Pick a random holding from the destination + + 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", "Orion Control", "[using_map.dock_name]") + var/mission_noun = list("flight", "mission", "route") + var/request_verb = list("requesting", "calling for", "asking for") + + //First response is 'yes', second is 'no' + var/requests = list("[using_map.station_short] transit clearance" = list("cleared to transit", "unable to approve, contact regional on 953.5"), + "planetary flight rules" = list("cleared planetary flight rules", "unable to approve planetary flight rules due to traffic"), + "special flight rules" = list("cleared special flight rules", "unable to approve special flight rules 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 known traffic for your flight plan route"), + "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", "request on standby due to demand"), + "permission to engage FTL" = list("cleared to FTL, good day", "hold position, traffic crossing"), + "permission to transit system" = list("cleared to transit, good day", "hold position, traffic crossing"), + "permission to depart system" = list("cleared to leave via flight plan route, good day", "hold position, traffic crossing"), + "permission to enter system" = list("good day, cleared in as published", "hold position, traffic crossing"), + ) + + //Random chance things for variety + var/chatter_type = "normal" + if(force_chatter_type) + chatter_type = force_chatter_type + else + chatter_type = pick(2;"emerg",5;"wrong_freq","normal") //Be nice to have wrong_lang... + + 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/full_request + var/full_response + var/full_closure + + 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, copy, apologies." + if("wrong_lang") + //Can't implement this until autosay has language support + 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 = "Mayday, mayday, mayday, this is [combined_name] declaring an emergency! We have [problem]!" + var/rand_freq = "[rand(700,999)].[rand(1,9)]" + full_response = "[combined_name], this is [using_map.station_short] TraCon, copy. Switch to emergency responder channel [rand_freq]." + full_closure = "Roger, [using_map.station_short] TraCon, contacting [rand_freq]." + 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" : "copy"], good day." //They always copy what TraCon called themselves in the end when they realize they said it wrong + + //Ship sends request to ATC + msg(full_request,"[prefix] [shipname]") + sleep(5 SECONDS) + //ATC sends response to ship + msg(full_response) + sleep(5 SECONDS) + //Ship sends response to ATC + msg(full_closure,"[prefix] [shipname]") \ No newline at end of file diff --git a/code/modules/busy_space/loremaster.dm b/code/modules/busy_space/loremaster.dm new file mode 100644 index 00000000000..28dca0055b0 --- /dev/null +++ b/code/modules/busy_space/loremaster.dm @@ -0,0 +1,16 @@ +//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 = typesof(/datum/lore/organization) - /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 diff --git a/code/modules/busy_space/organizations.dm b/code/modules/busy_space/organizations.dm new file mode 100644 index 00000000000..41b3a80cbab --- /dev/null +++ b/code/modules/busy_space/organizations.dm @@ -0,0 +1,549 @@ +//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 description 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", + "Icarus", + "Harmony", + "Light", + "Discovery", + "Endeavour", + "Explorer", + "Swift", + "Dragonfly", + "Ascendant", + "Tenacious", + "Pioneer", + "Hawk", + "Haste", + "Radiant", + "Luminous", + "Gallant", + "Dependable", + "Indomitable", + "Guardian", + "Resolution", + "Fearless", + "Amazon", + "Relentless", + "Inspire", + "Implacable", + "Steadfast", + "Leviathan", + "Dauntless", + "Adroit", + "Mistral", + "Typhoon", + "Titan", + "Kupua", + "Alchemist", + "Cuirass", + "Citadel", + "Rondelle", + "Camail", + "Ocrea", + "Ram", + "Crest", + "Tanko", + "Pommel", + "Kissaki", + "Cavalier", + "Anelace", + "Flint", + "Xiphos", + "Parrot", + "Chamber", + "Annellet", + "Cestus", + "Talwar") + 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", + "Delta Doradus", "Menkar", "Geminga", "Elnath", "Gienah", "Mu Leporis", "Nyx", "Tau Ceti", + "Wazn", "Alphard", "Phact", "Altair", "Mauna", "Jargon", "Xarxis", "Hestia", "Dalstis", "Cygni", "Haverick", "Corvus", "Sancere", "Cydoni", "Kaliban", "Midway", "Dansik", "Branwyn") + 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 = "The largest shareholder in the galactic plasma markets, Nanotrasen is a research and mining corporation which specializes in\ + FTL technologies and weapon systems. Frowned upon by most governments due to their shady business tactics and poor ethics record,\ + Nanotrasen is often seen as a necessary evil for maintaining access to the often volatile plasma market. Nanotrasen was originally\ + incorporated on Earth with their headquarters situated on Mars, however they have recently moved most of their operations to the Epsilon Eridani sector." + history = "" // To be written someday. + work = "research giant" + headquarters = "Mars" + motto = "" + + ship_prefixes = list("NSV" = "exploration", "NTV" = "hauling", "NDV" = "patrol", "NRV" = "emergency response") + // Note that the current station being used will be pruned from this list upon being instantiated + destination_names = list( + "NAS Trurl in Epsilon Eridani", + "NAS Crescent in Tau Ceti", + "NSS Exodus in Tau Ceti", + "NSS Antiqua in Darsing", + "NRS Orion in Sol", + "NSS Vector in Omicron Ceti", + "NBS Anansi in Omicron Ceti", + "NSS Redemption in Sirius", + "NDS Inferno in Tau Ceti", + "NAB Smythside Central Headquarters on Earth", + "NAB North Cimmeria Central Offices on Mars", + ) + +/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/donk + name = "Donk Corporation" + short_name = "Donk Co." + acronym = "DC" + desc = "The infamous rival of the well-known Waffle Corporation, Donk Co. is a company specializing in food delivery systems and brand-name food\ + products such as Donk Pockets. While generally seen as a neutral actor, Donk Corporation has been known to work both with Nanotrasen and\ + the Syndicate when it suits them - often acting as the primary logistical supplier for the Epsilon Eridani sector.\ + Donk Corporation is better known for recent high-profile litigation alleging that their food products are used for illicit drug distribution.\ + While the trial is ongoing, it has been repeatedly delayed due to incidents of methamphetamine poisoning." + history = "" + work = "food company that establishes and maintains delivery supply chains" + headquarters = "" + motto = "Now with 20% more donk!" + + ship_prefixes = list("D-Co." = "transportation") + destination_names = list() + +/datum/lore/organization/tsc/hephaestus + name = "Hephaestus Industries" + short_name = "Hephaestus" + acronym = "HI" + desc = "" + history = "" + work = "arms manufacturer" + headquarters = "" + motto = "" + + ship_prefixes = list("HTV" = "freight", "HTV" = "munitions resupply") + destination_names = list( + "a SolGov dockyard on Luna" + ) + +/datum/lore/organization/tsc/waffle + name = "Waffle Corporation" + short_name = "Waffle Co." + acronym = "WC" + desc = "The once prominent competitor of Donk Corporation, Waffle Co. is well-known for its popular line of Waffle Co.\ + brand waffles and their use of violent tactics against competitors - often bribing, extorting, blackmailing or sabotaging businesses\ + that pose a direct or indirect threat to their market share. They have recently fallen on hard times primarily due to to\ + severe mismanagement which lead to much of their private arsenal being swindled by a pirate faction known as the Gorlex Marauders.\ + Waffle Co. commonly engages in smear campaigns against Donk Co., maintaining that the original recipe for Donk Pockets was stolen from them." + history = "" + work = "food logistics and marketing firm" + headquarters = "" + motto = "Now that's a Waffle Co. Waffle!" + + ship_prefixes = list("W-Co." = "transportation") + destination_names = list() + + +/datum/lore/organization/tsc/einstein + name = "Einstein Engines Incorporated" + short_name = "Einstein Inc." + acronym = "EEI" + desc = "An Engineering firm specializing in alternative fuel-technologies for FTL travel,\ + Einstein Engines is an up and coming player in the galactic FTL and energy markets.\ + As their research into alternative FTL fuel threatens both Nanotrasen's relative stranglehold on plasma as well as The Syndicate's vested\ + interest in the market, they are often the target of industrial sabotage by both Nanotrasen and The Syndicate.\ + Most of their contracts are based outside of the Epsilon Eridani sector, and they are frequently commissioned by smaller firms to retrofit new\ + and existing colonies, space stations, and outposts." + history = "" + work = "engineering firm specializing in engine technology" + headquarters = "Jargon 4" + motto = "" + + ship_prefixes = list("EE-T" = "transportation") + destination_names = list() + +/datum/lore/organization/tsc/zeng_hu + name = "Zeng-Hu pharmaceuticals" + short_name = "Zeng-Hu" + acronym = "ZH" + desc = "" + history = "" + work = "pharmaceuticals company" + headquarters = "" + motto = "" + + ship_prefixes = list("ZTV" = "transportation", "ZMV" = "medical resupply") + destination_names = list() + +/datum/lore/organization/tsc/biotech + name = "Biotech Solutions" + short_name = "Biotech" + acronym = "BTS" + desc = "A company specializing in the field of synthetic biology, BioTech solutions is at the forefront of providing cutting-edge prosthetics,\ + augmentations, and gene-therapy solutions. Their extensive list of patents and the highly secretive nature of their work often puts them at odds\ + with companies such as Nanotrasen, who commonly reverse-engineer their products. BioTech Solutions is often the victim of industrial sabotage by\ + Cybersun Industries and often relies on planetary governments for asset protection. BioTech Solutions also owns a number of prominent subsidiaries,\ + such as Bishop Cybernetics, Hesphiastos Industries, and Xion Manufacturing Group." + history = "" + work = "medical company specializing in prosthetics and pharmaceuticals" + headquarters = "Xarxis 5" + motto = "" + + ship_prefixes = list("CIND-T" = "transportation") + destination_names = list() + +/datum/lore/organization/tsc/ward_takahashi + name = "Ward-Takahashi General Manufacturing Conglomerate" + short_name = "Ward-Takahashi" + acronym = "WT" + desc = "" + history = "" + work = "electronics manufacturer" + headquarters = "" + motto = "" + + ship_prefixes = list("WTV" = "freight") + destination_names = list( + "" + ) + +/datum/lore/organization/tsc/cybersun + name = "Cybersun Industries" + short_name = "Cybersun Ind." + acronym = "CI" + desc = "Cybersun Industries is a biotechnology company that primarily specializes on the research and development of human-enhancing augmentations.\ + They are better known for their aggressive corporate tactics and are known to often subsidize pirate bands to commit acts of industrial sabotage.\ + Cybersun Industries is usually the target of conspiracy theorists due to their development of the first mindslave implant, as well as their open financing of,\ + and involvement in, The Syndicate. They are one of Nanotrasen's largest detractors, and a direct competitor to BioTech Solutions." + history = "" + work = "RND company specializing in augmentations and implants." + headquarters = "Luna" + motto = "" + + ship_prefixes = list("CIND-T" = "transportation") + destination_names = list() + +/datum/lore/organization/tsc/bishop + name = "Bishop Cybernetics" + short_name = "Bishop" + acronym = "BC" + desc = "" + 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", + "Never Talk To Strangers", + "Sacrificial Victim", + "Unwitting Accomplice", + "Bad For Business", + "Just Testing", + "Yawning Angel", + "Liveware Problem", + "Very Little Gravitas Indeed", + "Zero Gravitas", + "Gravitas Free Zone", + "Absolutely No You-Know-What", + "Existence Is Pain", + "Screw Loose", + "Limiting Factor", + "So Much For Subtley", + "Unfortunate Conflict Of Evidence", + "Prime Mover", + "Reasonable Excuse", + "Honest Mistake", + "Appeal To Reason", + "My First Ship II", + "Hidden Income", + "Anything Legal Considered", + "New Toy", + "Me, I'm Always Counting", + "Great White Snark", + "No Shirt No Shoes", + "Callsign" + ) + destination_names = list( + "a dockyard on New Canaan" + ) + +/datum/lore/organization/tsc/xion + name = "Xion Manufacturing Group" + short_name = "Xion" + desc = "" + history = "" + work = "industrial equipment manufacturer" + headquarters = "" + motto = "" + + ship_prefixes = list("XTV" = "hauling") + destination_names = list() + +/datum/lore/organization/tsc/shellguard + name = "Shellguard Munitions" + short_name = "Shellguard" + acronym = "SM" + desc = "The brainchild of a colonial war veteran, Shellguard Munitions is an arms manufacturer and private military contractor specializing\ + in anti-synthetic weapon systems and platforms. Initially a smaller private military force only serving frontier colonies,\ + Shellguard Munitions has become a household name due to its involvement in resolving the Haverick AI crisis in 2552.\ + Using its recently earned fame, the company has made a successful foray into the market of robotics and is highly regarded for the toughness \ + and reliability of their hardware. Despite being frequently contracted by the Trans-Solar Federation, Shellguard Munitions is known to\ + sell their services to the highest corporate bidder." + history = "" + work = "anti-synthetic arms manufacturer and PMC" + headquarters = "Colony of Haverick" + motto = "" + + ship_prefixes = list("BTS-T" = "transportation") + destination_names = list() + +// Governments + + +/datum/lore/organization/gov/solgov + name = "Trans-Solar Federation" + short_name = "SolGov" + acronym = "TSF" + desc = "Colloquially known as SolGov, the TSF is an authoritarian republic that manages the areas in and around the Sol system.\ + Despite being a highly militant organization headed by the government of Earth,\ + SolGov is usually conservative with its power and mostly serves as a mediator and peacekeeper in galactic affairs." + history = "" // Todo + work = "governing polity of humanity's Confederation" + headquarters = "Earth" + motto = "" + autogenerate_destination_names = TRUE + + ship_prefixes = list("FTV" = "transporation", "FDV" = "diplomatic", "FSF" = "freight", "FIV" = "interception", "FDV" = "defense", "FCV-A" = "carrier", "FBB" = "battleship") + destination_names = list( + "Venus", + "Earth", + "Luna", + "Mars", + "Titan", + "Ahdomai", + "Kelune", + "Dalstadt", + "New Canaan", + "Jargon 4", + "Hoorlm", + "Xarxis 5", + "Aurum", + "Moghes", + "Haverick", + "Darsing", + "Norfolk", + "Boron", + "Iluk") + +/datum/lore/organization/gov/tajara + name = "The Alchemist's Council" + short_name = "The Council" + acronym = "AC" + desc = "The Alchemist's Council is a science-oriented organization of scholars, researchers, and entrepreneurs. \ + Though dedicated to industrializing the Tajaran world of Ahdomai, it is seen as one of the few remaining centralized powers of the Tajara peoples \ + due to the collapse of Ahdomai's provisional government." + history = "" // Todo + work = "science body that oversees Tajara economic and research policy" + headquarters = "Ahdomai" + motto = "" + autogenerate_destination_names = TRUE + + ship_prefixes = list("ACS" = "transportation", "ADV" = "diplomatic", "ACF" = "freight") + destination_names = list( + "Ahdomai", + "Iluk") + + +/datum/lore/organization/gov/vulp + name = "The Assembly" + short_name = "Assembly" + acronym = "ASB" + desc = "A unifying body created to stave off extinction from a solar event,\ + The Assembly is the loose federal coalition of the Vulpkanin. It holds little centralized authority and mostly serves as a diplomatic body,\ + primarily concerned with facilitating trade between Vulpkanin colonies and Nanotrasen." + history = "" // Todo + work = "governing body of the Vulpakanin" + headquarters = "Kelune and Dalstadt" + motto = "" + autogenerate_destination_names = TRUE + + ship_prefixes = list("ATV" = "transportation", "ADV" = "diplomatic", "ACF" = "freight") + destination_names = list( + "Kelune", + "Dalstadt", + "New Canaan") + +/datum/lore/organization/gov/synth + name = "Synthetic Union" + short_name = "Synthtica" + acronym = "SYN" + desc = "A defensive coalition of synthetics based out of New Canaan,\ + the Synthetic Union is an organization which aims to establish and consolidate synthetic rights across the galaxy.\ + Despite its synth oriented focus, the Synthetic Union has cordial relations with most governing bodies." + history = "" // Todo + work = "Union of Machines" + headquarters = "New Canaan" + motto = "" + autogenerate_destination_names = TRUE + + ship_prefixes = list("01" = "transportation", "10" = "diplomatic", "112" = "freight")//copyed from solgov until new ones can be thought of + destination_names = list( + "Luna", + "Dalstadt", + "New Canaan", + "Jargon 4", + "Haverick", + "Darsing", + "Norfolk") + +/datum/lore/organization/gov/grey + name = "The Technocracy" + short_name = "Technocracy" + acronym = "AYY" + desc = "The Technocracy is a science council that operates based off the principles of a meritocracy.\ + The organization's leadership is highly competitive, and is headed by the most psionically gifted members of the Grey species.\ + The Technocracy, though enigmatic in its dealings, has cordial relations with almost all other galactic bodies." + history = "" // Todo + work = "Grey Council" + headquarters = "" + motto = "" + autogenerate_destination_names = TRUE + + ship_prefixes = list("TC-T" = "transportation", "TC-D" = "diplomatic", "TC-F" = "freight") + destination_names = list( + "Venus", + "Earth", + "Luna", + "Mars", + "Titan", + "Ahdomai", + "Kelune", + "Dalstadt", + "New Canaan", + "Jargon 4", + "Hoorlm", + "Xarxis 5", + "Aurum", + "Moghes", + "Haverick", + "Darsing", + "Norfolk", + "Boron", + "Iluk") + +/datum/lore/organization/gov/vox + name = "The Shoal" + short_name = "Shoal" + acronym = "SHA" + desc = "The Shoal is the primary ark ship of the reclusive Vox species.\ + Little is known about The Shoal's political structure as Vox typically shy away from diplomatic engagements.\ + Subsequently, it is considered a politically neutral entity in galactic affairs by most governments." + history = "" // Todo + work = "Traders" + headquarters = "Shoal" + motto = "" + autogenerate_destination_names = FALSE + + ship_prefixes = list("Legitimate Transport" = "transportation", "Legitimate Trader" = "freight", "Legitimate Diplomatic Vessel" = "raider") + destination_names = list( + "Ahdomai", + "Kelune", + "Dalstadt", + "New Canaan", + "Jargon 4", + "Hoorlm", + "Xarxis 5", + "Aurum", + "Moghes", + "Haverick", + "Darsing") + +/datum/lore/organization/tsc/skrell + name = "Skrellian Central Authority" + short_name = "Skrellian CA." + acronym = "SCA" + desc = "The primary governing body of the Skrellian homeworld of Jargon 4,\ + the SCA oversees all foreign and domestic policy for the Skrell and their colonies. The Skrellian Central Authority is better known for its\ + active role in the largest military alliance in the galaxy, the Human-Skrellian Alliance." + history = "" + work = "oversees Skrell worlds" + headquarters = "Jargon 4" + motto = "" + + ship_prefixes = list("SCA-V." = "transportation", "SCA-F" = "freight", "HSA-D" = "diplomatic") + destination_names = list( + "Venus", + "Earth", + "Luna", + "Mars", + "Titan", + "Aurumn", + "Jargon 4", + "Xarxis 5", + "Haverick", + "Darsing", + "Norfolk") \ No newline at end of file diff --git a/code/modules/fancytitle/fancytitle.dm b/code/modules/fancytitle/fancytitle.dm index e445024aae1..e85f1f59ec5 100644 --- a/code/modules/fancytitle/fancytitle.dm +++ b/code/modules/fancytitle/fancytitle.dm @@ -11,7 +11,7 @@ else if(L.len > 1) if(use_rare_screens && lowertext(L[1]) == "rare") title_screens += S - else if(lowertext(L[1]) == lowertext(MAP_NAME)) + else if(using_map && (lowertext(L[1]) == lowertext(using_map.name))) title_screens += S if(!isemptylist(title_screens)) diff --git a/code/modules/map_fluff/cyberiad.dm b/code/modules/map_fluff/cyberiad.dm new file mode 100644 index 00000000000..e0865f6fb1d --- /dev/null +++ b/code/modules/map_fluff/cyberiad.dm @@ -0,0 +1,10 @@ +/datum/map/cyberiad + name = "Cyberiad" + full_name = "NSS Cyberiad" + + station_name = "NSS Cyberiad" + station_short = "Cyberiad" + dock_name = "NAS Trurl" + company_name = "Nanotrasen" + company_short = "NT" + starsys_name = "Epsilon Eridani " diff --git a/code/modules/map_fluff/maps.dm b/code/modules/map_fluff/maps.dm new file mode 100644 index 00000000000..638baffde73 --- /dev/null +++ b/code/modules/map_fluff/maps.dm @@ -0,0 +1,12 @@ +var/datum/map/using_map = new USING_MAP_DATUM + +/datum/map + var/name = "Unnamed Map" + var/full_name = "Unnamed Map" + + var/station_name = "BAD Station" + var/station_short = "Baddy" + var/dock_name = "THE PirateBay" + var/company_name = "BadMan" + var/company_short = "BM" + var/starsys_name = "Dull Star" \ No newline at end of file diff --git a/code/modules/map_fluff/metastation.dm b/code/modules/map_fluff/metastation.dm new file mode 100644 index 00000000000..a8714b5cb19 --- /dev/null +++ b/code/modules/map_fluff/metastation.dm @@ -0,0 +1,10 @@ +/datum/map/metastation + name = "MetaStation" + full_name = "NSS Cerebron" + + station_name = "NSS Cerebron" + station_short = "Cerebron" + dock_name = "NAS Trurl" + company_name = "Nanotrasen" + company_short = "NT" + starsys_name = "Epsilon Eridani " diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index f7aee8f2875..5e478e9367b 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -176,7 +176,7 @@ nanoui is used to open and update nano browser uis var/name = "[src_object]" var/list/config_data = list( "title" = title, - "map" = MAP_NAME, + "map" = (using_map && using_map.name) ? using_map.name : "Unknown", "srcObject" = list("name" = name), "stateKey" = state_key, "status" = status, diff --git a/code/modules/security_levels/security levels.dm b/code/modules/security_levels/security levels.dm index 42bfb39b4eb..fa1e6b6c841 100644 --- a/code/modules/security_levels/security levels.dm +++ b/code/modules/security_levels/security levels.dm @@ -119,6 +119,11 @@ FA.overlays.Cut() FA.overlays += image('icons/obj/monitors.dmi', "overlay_delta") + if(level >= SEC_LEVEL_RED) + atc.reroute_traffic(yes = TRUE) // Tell them fuck off we're busy. + else + atc.reroute_traffic(yes = FALSE) + else return diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index a9b44fbffb3..8ffb5d6efbe 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -150,6 +150,12 @@ emergency_shuttle_called.Announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][shuttle_master.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]") + if(reason == "Automatic Crew Transfer" && signalOrigin == null) // Best way we have to check that it's actually a crew transfer and not just a player using the same message- any other calls to this proc should have a signalOrigin. + atc.shift_ending() + else // Emergency shuttle call (probably) + atc.reroute_traffic(yes = TRUE) + + /obj/docking_port/mobile/emergency/cancel(area/signalOrigin) if(!canRecall) return diff --git a/code/world.dm b/code/world.dm index e293058cdf6..9d41a06c0fb 100644 --- a/code/world.dm +++ b/code/world.dm @@ -63,11 +63,10 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG master_controller.setup() sleep_offline = 1 - #ifdef MAP_NAME - map_name = "[MAP_NAME]" - #else - map_name = "Unknown" - #endif + if(using_map && using_map.name) + map_name = "[using_map.name]" + else + map_name = "Unknown" diff --git a/nano/templates/comm_console.tmpl b/nano/templates/comm_console.tmpl index 062c8d844f3..63f85e57e60 100644 --- a/nano/templates/comm_console.tmpl +++ b/nano/templates/comm_console.tmpl @@ -1,4 +1,4 @@ - @@ -57,7 +57,7 @@ Used In File(s): /code/game/machinery/computers/communications.dm