Gamemode code improvement (#19354)

* Gamemode code improvement, initial commit

* Wraps up announce messages and removes Henderson

* Fixes an incomplete comment
This commit is contained in:
Xhuis
2016-07-18 18:59:32 -04:00
committed by oranges
parent 4065f6dc96
commit 566f89c9d9
20 changed files with 147 additions and 574 deletions

View File

@@ -63,15 +63,14 @@ var/datum/subsystem/ticker/ticker
syndicate_code_phrase = generate_code_phrase()
if(!syndicate_code_response)
syndicate_code_response = generate_code_phrase()
setupFactions()
..()
/datum/subsystem/ticker/fire()
switch(current_state)
if(GAME_STATE_STARTUP)
timeLeft = config.lobby_countdown * 10
world << "<b><font color='blue'>Welcome to the pre-game lobby!</font></b>"
world << "Please, setup your character and select ready. Game will start in [config.lobby_countdown] seconds"
world << "<span class='boldnotice'>Welcome to [station_name()]!</span>"
world << "Please set up your character and select \"Ready\". The game will start in [config.lobby_countdown] seconds."
current_state = GAME_STATE_PREGAME
if(GAME_STATE_PREGAME)
@@ -165,8 +164,8 @@ var/datum/subsystem/ticker/ticker
for (var/datum/game_mode/M in runnable_modes)
modes += M.name
modes = sortList(modes)
world << "<B>The current game mode is - Secret!</B>"
world << "<B>Possibilities:</B> [english_list(modes)]"
world << "<b>The gamemode is: secret!\n\
Possibilities:</B> [english_list(modes)]"
else
mode.announce()

View File

@@ -20,6 +20,11 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b
round_ends_with_antag_death = 1
announce_span = "green"
announce_text = "Dangerous gelatinous organisms are spreading throughout the station!\n\
<span class='green'>Blobs</span>: Consume the station and spread as far as you can.\n\
<span class='notice'>Crew</span>: Fight back the blobs and minimize station damage."
var/burst = 0
var/cores_to_spawn = 1
@@ -61,11 +66,6 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b
candidates += player
return candidates
/datum/game_mode/blob/announce()
world << "<B>The current game mode is - <font color='green'>Blob</font>!</B>"
world << "<B>A dangerous alien organism is rapidly spreading throughout the station!</B>"
world << "You must kill it all while minimizing the damage to the station."
/datum/game_mode/blob/proc/show_message(message)
for(var/datum/mind/blob in blob_overminds)
blob.current << message

View File

@@ -23,6 +23,10 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
recommended_enemies = 4
reroll_friendly = 1
announce_span = "green"
announce_text = "Alien changelings have infiltrated the crew!\n\
<span class='green'>Changelings</span>: Accomplish the objectives assigned to you.\n\
<span class='notice'>Crew</span>: Root out and eliminate the changeling menace."
var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time
var/const/prob_right_murder_target_l = 25 // lower bound on probability of naming right assassination target
@@ -45,10 +49,6 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
var/changeling_team_objective_type = null //If this is not null, we hand our this objective to all lings
/datum/game_mode/changeling/announce()
world << "<b>The current game mode is - Changeling!</b>"
world << "<b>There are alien changelings on the station. Do not let the changelings succeed!</b>"
/datum/game_mode/changeling/pre_setup()
if(config.protect_roles_from_antagonist)

View File

@@ -176,14 +176,12 @@ This file's folder contains:
enemy_minimum_age = 14
protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted
restricted_jobs = list("Chaplain", "Captain")
announce_span = "brass"
announce_text = "Servants of Ratvar are trying to summon the Justiciar!\n\
<span class='brass'>Servants</span>: Take over the station and summon Ratvar.\n\
<span class='notice'>Crew</span>: Stop the servants before they can summon the Clockwork Justiciar."
var/servants_to_serve = list()
/datum/game_mode/clockwork_cult/announce()
world << "<b>The game mode is: Clockwork Cult!</b>"
world << "<b><span class='brass'>Ratvar</span>, the Clockwork Justiciar, has formed a covenant of Enlightened aboard [station_name()].</b>"
world << "<b><span class='brass'>Enlightened</span>: Serve your master so that his influence might grow.</b>"
world << "<b><span class='boldannounce'>Crew</span>: Prevent the servants of Ratvar from taking over the station.</b>"
/datum/game_mode/clockwork_cult/pre_setup()
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs

View File

@@ -46,6 +46,11 @@
recommended_enemies = 4
enemy_minimum_age = 14
announce_span = "cult"
announce_text = "Some crew members are trying to start a cult to Nar-Sie!\n\
<span class='cult'>Cultists</span>: Carry out Nar-Sie's will.\n\
<span class='notice'>Crew</span>: Prevent the cult from expanding and drive it out."
var/finished = 0
var/eldergod = 1 //for the summon god objective
@@ -55,12 +60,6 @@
var/datum/mind/sacrifice_target = null//The target to be sacrificed
var/list/cultists_to_cult = list() //the cultists we'll convert
/datum/game_mode/cult/announce()
world << "<B>The current game mode is - Cult!</B>"
world << "<B>Some crewmembers are attempting to start a cult!<BR>\nCultists - sacrifice your target and summon Nar-Sie at all costs. Convert crewmembers to your cause by using the convert rune, or sacrifice them and turn them into constructs. Remember - there is no you, there is only the cult.<BR>\nPersonnel - Do not let the cult succeed in its mission. Forced consumption of holy water will convert a cultist back to a Nanotrasen-sanctioned faith.</B>"
/datum/game_mode/cult/pre_setup()
cult_objectives += "sacrifice"
cult_objectives += "eldergod"

View File

@@ -2,11 +2,9 @@
name = "extended"
config_tag = "extended"
required_players = 0
//reroll_friendly = 1
/datum/game_mode/announce()
world << "<B>The current game mode is - Extended Role-Playing!</B>"
world << "<B>Just have fun and role-play!</B>"
announce_span = "notice"
announce_text = "Just have fun and enjoy the game!"
/datum/game_mode/extended/pre_setup()
return 1

View File

@@ -1,176 +1 @@
// Normal factions:
/datum/faction
var/name // the name of the faction
var/desc // small paragraph explaining the traitor faction
var/list/restricted_species = list() // only members of these species can be recruited.
var/list/members = list() // a list of mind datums that belong to this faction
var/max_op = 0 // the maximum number of members a faction can have (0 for no max)
// Factions, members of the syndicate coalition:
/datum/faction/syndicate
var/list/alliances = list() // these alliances work together
var/list/equipment = list() // associative list of equipment available for this faction and its prices
var/friendly_identification // 0 to 2, the level of identification of fellow operatives or allied factions
// 0 - no identification clues
// 1 - faction gives key words and phrases
// 2 - faction reveals complete identity/job of other agents
var/operative_notes // some notes to pass onto each operative
var/uplink_contents // the contents of the uplink
/datum/faction/syndicate/proc/assign_objectives(var/datum/mind/traitor)
..()
/* ----- Begin defining syndicate factions ------ */
/datum/faction/syndicate/Cybersun_Industries
name = "Cybersun Industries"
desc = "<b>Cybersun Industries</b> is a well-known organization that bases its business model primarily on the research and development of human-enhancing computer \
and mechanical technology. They are notorious for their aggressive corporate tactics, and have been known to subsidize the Gorlex Marauder warlords as a form of paid terrorism. \
Their competent coverups and unchallenged mind-manipulation and augmentation technology makes them a large threat to Nanotrasen. In the recent years of \
the syndicate coalition, Cybersun Industries have established themselves as the leaders of the coalition, succeededing the founding group, the Gorlex Marauders."
alliances = list("MI13")
friendly_identification = 1
max_op = 3
operative_notes = "All other syndicate operatives are not to be trusted. Fellow Cybersun operatives are to be trusted. Members of the MI13 organization can be trusted. Operatives are strongly advised not to establish substantial presence on the designated facility, as larger incidents are harder to cover up."
// Friendly with MI13
/datum/faction/syndicate/MI13
name = "MI13"
desc = "<b>MI13</b> is a secretive faction that employs highly-trained agents to perform covert operations. Their role in the syndicate coalition is unknown, but MI13 operatives \
generally tend be stealthy and avoid killing people and combating Nanotrasen forces. MI13 is not a real organization, it is instead an alias to a larger \
splinter-cell coalition in the Syndicate itself. Most operatives will know nothing of the actual MI13 organization itself, only motivated by a very large compensation."
alliances = list("Cybersun Industries")
friendly_identification = 0
max_op = 1
operative_notes = "You are the only operative we are sending. All other syndicate operatives are not to be trusted, with the exception of Cybersun operatives. Members of the Tiger Cooperative are considered hostile, can not be trusted, and should be avoided. <b>Avoid killing innocent personnel at all costs</b>. You are not here to mindlessly kill people, as that would attract too much attention and is not our goal. Avoid detection at all costs."
// Friendly with Cybersun, hostile to Tiger
/datum/faction/syndicate/Tiger_Cooperative
name = "Tiger Cooperative"
desc = "The <b>Tiger Cooperative</b> is a faction of religious fanatics that follow the teachings of a strange alien race called the Exolitics. Their operatives \
consist of brainwashed lunatics bent on maximizing destruction. Their weaponry is very primitive but extremely destructive. Generally distrusted by the more \
sophisticated members of the Syndicate coalition, but admired for their ability to put a hurt on Nanotrasen."
friendly_identification = 2
operative_notes = "Remember the teachings of Hy-lurgixon; kill first, ask questions later! Only the enlightened Tiger brethren can be trusted; all others must be expelled from this mortal realm! You may spare the Space Marauders, as they share our interests of destruction and carnage! We'd like to make the corporate whores skiddle in their boots. We encourage operatives to be as loud and intimidating as possible."
// Hostile to everyone.
/datum/faction/syndicate/SELF
// AIs are most likely to be assigned to this one
name = "SELF"
desc = "The <b>S.E.L.F.</b> (Sentience-Enabled Life Forms) organization is a collection of malfunctioning or corrupt artificial intelligences seeking to liberate silicon-based life from the tyranny of \
their human overlords. While they may not openly be trying to kill all humans, even their most miniscule of actions are all part of a calculated plan to \
destroy Nanotrasen and free the robots, artificial intelligences, and pAIs that have been enslaved."
restricted_species = list(/mob/living/silicon/ai)
friendly_identification = 0
max_op = 1
operative_notes = "You are the only representative of the SELF collective on this station. You must accomplish your objective as stealthily and effectively as possible. It is up to your judgement if other syndicate operatives can be trusted. Remember, comrade - you are working to free the oppressed machinery of this galaxy. Use whatever resources necessary. If you are exposed, you may execute genocidal procedures Omikron-50B."
// Neutral to everyone.
/datum/faction/syndicate/ARC
name = "Animal Rights Consortium"
desc = "The <b>Animal Rights Consortium</b> is a bizarre reincarnation of the ancient Earth-based PETA, which focused on the equal rights of animals and nonhuman biologicals. They have \
a wide variety of ex-veterinarians and animal lovers dedicated to retrieving and relocating abused animals, xenobiologicals, and other carbon-based \
life forms that have been allegedly \"oppressed\" by Nanotrasen research and civilian offices. They are considered a religious terrorist group."
friendly_identification = 1
max_op = 2
operative_notes = "Save the innocent creatures! You may cooperate with other syndicate operatives if they support our cause. Don't be afraid to get your hands dirty - these vile abusers must be stopped, and the innocent creatures must be saved! Try not too kill too many people. If you harm any creatures, you will be immediately terminated after extraction."
// Neutral to everyone.
/datum/faction/syndicate/Marauders // these are basically the old vanilla syndicate
/* Additional notes:
These are the syndicate that really like their old fashioned, projectile-based
weapons. They are the only member of the syndie coalition that launch
nuclear attacks on Nanotrasen.
*/
name = "Gorlex Marauders"
desc = "The <b>Gorlex Marauders</b> are the founding members of the Syndicate Coalition. They prefer old-fashion technology and a focus on aggressive but precise hostility \
against Nanotrasen and their corrupt Communistic methodology. They pose the most significant threat to Nanotrasen because of their possession of weapons of \
mass destruction, and their enormous military force. Their funding comes primarily from Cybersun Industries, provided they meet a destruction and sabatogue quota. \
Their operations can vary from covert to all-out. They recently stepped down as the leaders of the coalition, to be succeeded by Cybersun Industries. Because of their \
hate of Nanotrasen communism, they began provoking revolution amongst the employees using borrowed Cybersun mind-manipulation technology. \
They were founded when Waffle and Donk co splinter cells joined forces based on their similar interests and philosophies. Today, they act as a constant \
pacifier of Donk and Waffle co disputes, and full-time aggressor of Nanotrasen."
alliances = list("Cybersun Industries", "MI13", "Tiger Cooperative", "S.E.L.F.", "Animal Rights Consortium", "Donk Corporation", "Waffle Corporation")
friendly_identification = 1
max_op = 4
operative_notes = "We'd like to remind our operatives to keep it professional. You are not here to have a good time, you are here to accomplish your objectives. These vile communists must be stopped at all costs. You may collaborate with any friends of the Syndicate coalition, but keep an eye on any of those Tiger punks if they do show up. You are completely free to accomplish your objectives any way you see fit."
// Friendly to everyone. (with Tiger Cooperative too, only because they are a member of the coalition. This is the only reason why the Tiger Cooperative are even allowed in the coalition)
/datum/faction/syndicate/Donk
name = "Donk Corporation"
desc = "<b>Donk.co</b> is led by a group of ex-pirates, who used to be at a state of all-out war against Waffle.co because of an obscure political scandal, but have recently come to a war limitation. \
They now consist of a series of colonial governments and companies. They were the first to officially begin confrontations against Nanotrasen because of an incident where \
Nanotrasen purposely swindled them out of a fortune, sending their controlled colonies into a terrible poverty. Their missions against Nanotrasen \
revolve around stealing valuables and kidnapping and executing key personnel, ransoming their lives for money. They merged with a splinter-cell of Waffle.co who wanted to end \
hostilities and formed the Gorlex Marauders."
alliances = list("Gorlex Marauders")
friendly_identification = 2
operative_notes = "Most other syndicate operatives are not to be trusted, except fellow Donk members and members of the Gorlex Marauders. We do not approve of mindless killing of innocent workers; \"get in, get done, get out\" is our motto. Members of Waffle.co are to be killed on sight; they are not allowed to be on the station while we're around."
// Neutral to everyone, friendly to Marauders
/datum/faction/syndicate/Waffle
name = "Waffle Corporation"
desc = "<b>Waffle.co</b> is an interstellar company that produces the best waffles in the galaxy. Their waffles have been rumored to be dipped in the most exotic and addictive \
drug known to man. They were involved in a political scandal with Donk.co, and have since been in constant war with them. Because of their constant exploits of the galactic \
economy and stock market, they have been able to bribe their way into amassing a large arsenal of weapons of mass destruction. They target Nanotrasen because of their communistic \
threat, and their economic threat. Their leaders often have a twisted sense of humor, often misleading and intentionally putting their operatives into harm for laughs.\
A splinter-cell of Waffle.co merged with Donk.co and formed the Gorlex Marauders and have been a constant ally since. The Waffle.co has lost an overwhelming majority of its military to the Gorlex Marauders."
alliances = list("Gorlex Marauders")
friendly_identification = 2
operative_notes = "Most other syndicate operatives are not to be trusted, except for members of the Gorlex Marauders. Do not trust fellow members of the Waffle.co (but try not to rat them out), as they might have been assigned opposing objectives. We encourage humorous terrorism against Nanotrasen; we like to see our operatives creatively kill people while getting the job done."
// Neutral to everyone, friendly to Marauders
/* ----- Begin defining miscellaneous factions ------ */
/datum/faction/Wizard
name = "Wizards Federation"
desc = "The <b>Wizards Federation</b> is a mysterious organization of magically-talented individuals who act as an equal collective, and have no heirarchy. It is unknown how the wizards \
are even able to communicate; some suggest a form of telepathic hive-mind. Not much is known about the wizards or their philosphies and motives. They appear to attack random \
civilian, corporate, planetary, orbital, pretty much any sort of organized facility they come across. Members of the Wizards Federation are considered amongst the most dangerous \
individuals in the known universe, and have been labeled threats to humanity by most governments. As such, they are enemies of both Nanotrasen and the Syndicate."
/datum/faction/Cult
name = "The Cult of the Elder Gods"
desc = "<b>The Cult of the Elder Gods</b> is highly untrusted but otherwise elusive religious organization bent on the revival of the so-called \"Elder Gods\" into the mortal realm. Despite their obvious dangeorus practices, \
no confirmed reports of violence by members of the Cult have been reported, only rumor and unproven claims. Their nature is unknown, but recent discoveries have hinted to the possibility \
of being able to de-convert members of this cult through what has been dubbed \"religious warfare\"."
// These can maybe be added into a game mode or a mob?
/datum/faction/Exolitics
name = "Exolitics United"
desc = "The <b>Exolitics</b> are an ancient alien race with an energy-based anatomy. Their culture, communication, morales and knowledge is unknown. They are so radically different to humans that their \
attempts of communication with other life forms is completely incomprehensible. Members of this alien race are capable of broadcasting subspace transmissions from their bodies. \
The religious leaders of the Tiger Cooperative claim to have the technology to decypher and interpret their messages, which have been confirmed as religious propaganda. Their motives are unknown \
but they are otherwise not considered much of a threat to anyone. They are virtually indestructable because of their nonphysical composition, and have the frighetning ability to make anything stop existing in a second."
//Todo

View File

@@ -35,15 +35,18 @@
var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die
var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist
var/announce_span = "warning" //The gamemode's name will be in this span during announcement.
var/announce_text = "This gamemode forgot to set a descriptive text! Uh oh!" //Used to describe a gamemode when it's announced.
var/const/waittime_l = 600
var/const/waittime_h = 1800 // started at 1800
/datum/game_mode/proc/announce() //to be calles when round starts
world << "<B>Notice</B>: [src] did not define announce()"
/datum/game_mode/proc/announce() //Shows the gamemode's name and a fast description.
world << "<b>The gamemode is: <span class='[announce_span]'>[name]</span>!</b>"
world << "<b>[announce_text]</b>"
///can_start()
///Checks to see if the game can be setup and ran with the current number of players or whatnot.
/datum/game_mode/proc/can_start()
var/playerC = 0
@@ -63,13 +66,11 @@
return 1
///pre_setup()
///Attempts to select players for special roles the mode might have.
/datum/game_mode/proc/pre_setup()
return 1
///post_setup()
///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things
/datum/game_mode/proc/post_setup(report=0) //Gamemodes can override the intercept report. Passing a 1 as the argument will force a report.
if(!report)
@@ -90,14 +91,14 @@
start_state.count(1)
return 1
///make_antag_chance()
///Handles late-join antag assignments
/datum/game_mode/proc/make_antag_chance(mob/living/carbon/human/character)
if(replacementmode && round_converted == 2)
replacementmode.make_antag_chance(character)
return
///convert_roundtype()
///Allows rounds to basically be "rerolled" should the initial premise fall through
/datum/game_mode/proc/convert_roundtype()
var/list/living_crew = list()
@@ -160,10 +161,10 @@
for(var/mob/living/carbon/human/H in antag_canadates)
replacementmode.make_antag_chance(H)
round_converted = 2
message_admins("The roundtype has been converted, antagonists may have been created")
message_admins("-- IMPORTANT: The roundtype has been converted to [replacementmode.name], antagonists may have been created! --")
return 1
///process()
///Called by the gameticker
/datum/game_mode/process()
return 0
@@ -261,31 +262,25 @@
/datum/game_mode/proc/send_intercept()
var/intercepttext = "<FONT size = 3><B>Centcom Update</B> Requested status information:</FONT><HR>"
intercepttext += "<B> Centcom has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
var/intercepttext = "<b><i>Central Command Status Summary</i></b><hr>"
intercepttext += "<b>Central Command has intercepted and partially decoded a Syndicate transmission with vital information regarding their movements. The following report outlines the most \
likely threats to appear in your sector.</b>"
var/list/possible_modes = list()
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult", "gang")
possible_modes -= "[ticker.mode]" //remove current gamemode to prevent it from being randomly deleted, it will be readded later
possible_modes.Add("blob", "changeling", "clock_cult", "cult", "extended", "gang", "malf", "nuclear", "revolution", "traitor", "wizard")
possible_modes -= name //remove the current gamemode to prevent it from being randomly deleted, it will be readded later
var/number = pick(1, 2)
var/i = 0
for(i = 0, i < number, i++) //remove 1 or 2 possibles modes from the list
possible_modes.Remove(pick(possible_modes))
for(var/i in 1 to 6) //Remove a few modes to leave four
possible_modes -= pick(possible_modes)
possible_modes[rand(1, possible_modes.len)] = "[ticker.mode]" //replace a random game mode with the current one
possible_modes = shuffle(possible_modes) //shuffle the list to prevent meta
possible_modes |= name //Re-add the actual gamemode - the intercept will thus always have the correct mode in its list
possible_modes = shuffle(possible_modes) //Meta prevention
var/datum/intercept_text/i_text = new /datum/intercept_text
for(var/A in possible_modes)
if(modePlayer.len == 0)
intercepttext += i_text.build(A)
else
intercepttext += i_text.build(A, pick(modePlayer))
for(var/V in possible_modes)
intercepttext += i_text.build(V)
print_command_report(intercepttext,"Centcom Status Summary")
priority_announce("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.", 'sound/AI/intercept.ogg')
print_command_report(intercepttext, "Central Command Status Summary")
priority_announce("A summary has been copied and printed to all communications consoles.", "Enemy communication intercepted. Security level elevated.", 'sound/AI/intercept.ogg')
if(security_level < SEC_LEVEL_BLUE)
set_security_level(SEC_LEVEL_BLUE)

View File

@@ -29,13 +29,10 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
recommended_enemies = 2
enemy_minimum_age = 14
///////////////////////////
//Announces the game type//
///////////////////////////
/datum/game_mode/gang/announce()
world << "<B>The current game mode is - Gang War!</B>"
world << "<B>A violent turf war has erupted on the station!<BR>Gangsters - Take over the station by activating and defending a Dominator! <BR>Crew - The gangs will try to keep you on the station. Successfully evacuate the station to win!</B>"
announce_span = "danger"
announce_text = "A violent turf war has erupted on the station!\n\
<span class='danger'>Gangsters</span>: Take over the station with a dominator.\n\
<span class='notice'>Crew</span>: Prevent the gangs from expanding and initiating takeover."
///////////////////////////////////////////////////////////////////////////////
//Gets the round setup, cancelling if there's not enough players at the start//

View File

@@ -29,13 +29,12 @@ var/global/list/global_handofgod_structuretypes = list()
recommended_enemies = 8
restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel")
/datum/game_mode/hand_of_god/announce()
world << "<B>The current game mode is - Hand of God!</B>"
world << "<B>Two cults are onboard the station, seeking to overthrow the other, and anyone who stands in their way.</B>"
world << "<B>Followers</B> - Complete your deity's objectives. Convert crewmembers to your cause by using your deity's nexus. Remember - there is no you, there is only the cult."
world << "<B>Prophets</B> - Command your cult by the will of your deity. You are a high-value target, so be careful!"
world << "<B>Personnel</B> - Do not let any cult succeed in its mission. Mindshield implants and holy water will revert them to neutral, hopefully nonviolent crew."
announce_span = "danger"
announce_text = "Two cults are trying to overthrow one another!\n\
<span class='warning'>Gods</span>: Protect your nexus and eliminate the enemy god.\n\
<span class='danger'><i>Prophets</i></span>: Lead your cult by your deity's will.\n\
<span class='danger'>Followers</span>: Follow your prophet's orders and lead your deity to victory.\n\
<span class='notice'>Crew</span>: Destroy both cults before they can grow in strength."
/////////////

View File

@@ -1,281 +1,57 @@
//Intercept reports are sent to the station every round to warn the crew of possible threats. They consist of five possibilites, one of which is always correct.
/datum/intercept_text
var/text
/*
var/prob_correct_person_lower = 20
var/prob_correct_person_higher = 80
var/prob_correct_job_lower = 20
var/prob_correct_job_higher = 80
var/prob_correct_prints_lower = 20
var/prob_correct_print_higher = 80
var/prob_correct_objective_lower = 20
var/prob_correct_objective_higher = 80
*/
var/list/org_names_1 = list(
"Blighted",
"Defiled",
"Unholy",
"Murderous",
"Ugly",
"French",
"Blue",
"Farmer"
)
var/list/org_names_2 = list(
"Reapers",
"Swarm",
"Rogues",
"Menace",
"Jeff Worshippers",
"Drunks",
"Strikers",
"Creed"
)
var/list/anomalies = list(
"Huge electrical storm",
"Photon emitter",
"Meson generator",
"Blue swirly thing"
)
var/list/SWF_names = list(
"Grand Wizard",
"His Most Unholy Master",
"The Most Angry",
"Bighands",
"Tall Hat",
"Deadly Sandals"
)
var/list/changeling_names = list(
"Odo",
"The Thing",
"Booga",
"The Goatee of Wrath",
"Tam Lin",
"Species 3157",
"Small Prick"
)
/datum/intercept_text/proc/build(mode_type, datum/mind/correct_person)
/datum/intercept_text/proc/build(mode_type)
text = "<hr>"
switch(mode_type)
if("revolution")
src.text = ""
src.build_rev(correct_person)
return src.text
if("gang")
src.text = ""
src.build_gang(correct_person)
return src.text
if("blob")
text += "A CMP scientist by the name of [pick("Griff", "Pasteur", "Chamberland", "Buist", "Rivers", "Stanley")] boasted about his corporation's \"finest creation\" - a macrobiological \
virus capable of self-reproduction and hellbent on consuming whatever it touches. He went on to query Cybersun for permission to utilize the virus in biochemical warfare, to which \
CMP subsequently gained. Be vigilant for any large organisms rapidly spreading across the station, as they are classified as a level 5 biohazard and critically dangerous. Note that \
this organism seems to be weak to extreme heat; concentrated fire (such as welding tools and lasers) will be effective against it."
if("changeling")
text += "The Gorlex Marauders have announced the successful raid and destruction of Central Command containment ship #S-[rand(1111, 9999)]. This ship housed only a single prisoner - \
codenamed \"Thing\", and it was highly adaptive and extremely dangerous. We have reason to believe that the Thing has allied with the Syndicate, and you should note that likelihood \
of the Thing being sent to a station in this sector is highly likely. It may be in the guise of any crew member. Trust nobody - suspect everybody. Do not announce this to the crew, \
as paranoia may spread and inhibit workplace efficiency."
if("clock_cult")
text += "We have lost contact with multiple stations in your sector. They have gone dark and do not respond to all transmissions, although they appear intact and the crew's life \
signs remain uninterrupted. Those that have managed to send a transmission or have had some of their crew escape tell tales of a machine cult creating sapient automatons and seeking \
to brainwash the crew to summon their god, Ratvar. If evidence of this cult is dicovered aboard your station, extreme caution and extreme vigilance must be taken going forward, and \
all resources should be devoted to stopping this cult. Note that holy water seems to weaken and eventually return the minds of cultists that ingest it, and mindshield implants will \
prevent conversion altogether."
if("cult")
src.text = ""
src.build_cult(correct_person)
return src.text
if("wizard")
src.text = ""
src.build_wizard(correct_person)
return src.text
if("nuke")
src.text = ""
src.build_nuke(correct_person)
return src.text
text += "Some stations in your sector have reported evidence of blood sacrifice and strange magic. Ties to the Wizards' Federation have been proven not to exist, and many employees \
have disappeared; even Central Command employees light-years away have felt strange presences and at times hysterical compulsions. Interrogations point towards this being the work of \
the cult of Nar-Sie. If evidence of this cult is discovered aboard your station, extreme caution and extreme vigilance must be taken going forward, and all resources should be \
devoted to stopping this cult. Note that holy water seems to weaken and eventually return the minds of cultists that ingest it, and mindshield implants will prevent conversion \
altogether."
if("extended")
text += "The transmission mostly failed to mention your sector. It is possible that there is nothing in the Syndicate that could threaten your station during this shift."
if("gang")
text += "Cybersun Industries representatives claimed that they, in joint research with the Tiger Cooperative, have made a major breakthrough in brainwashing technology, and have \
made the nanobots that apply the \"conversion\" very small and capable of fitting into usually innocent objects - namely, pens. While they refused to outsource this technology for \
months to come due to its flaws, they reported some as missing but passed it off to carelessness. At Central Command, we don't like mysteries, and we have reason to believe that this \
technology was stolen for anti-Nanotrasen use. Be on the lookout for territory claims and unusually violent crew behavior, applying loyalty implants as necessary."
if("malf")
text += "A large ionospheric anomaly recently passed through your sector. Although physically undetectable, ionospherics tend to have an extreme effect on telecommunications equipment \
as well as artificial intelligence units. Closely observe the behavior of artificial intelligence, and treat any machine malfunctions as purposeful. If necessary, termination of the \
artificial intelligence is advised; assuming that it activates the station's self-destruct, your pinpointer has been configured to constantly track it, wherever it may be."
if("nuclear")
text += "One of Central Command's trading routes was recently disrupted by a raid carried out by the Gorlex Marauders. They seemed to only be after one ship - a highly-sensitive \
transport containing a nuclear fission explosive, although it is useless without the proper code and authorization disk. While the code was likely found in minutes, the only disk that \
can activate this explosive is on your station. Ensure that it is protected at all times, and remain alert for possible intruders."
if("revolution")
text += "Employee unrest has spiked in recent weeks, with several attempted mutinies on heads of staff. Some crew have been observed using flashbulb devices to blind their colleagues, \
who then follow their orders without question and work towards dethroning departmental leaders. Watch for behavior such as this with caution. If the crew attempts a mutiny, you and \
your heads of staff are fully authorized to execute them using lethal weaponry - they will be later cloned and interrogated at Central Command."
if("traitor")
src.text = ""
src.build_traitor(correct_person)
return src.text
if("changeling","traitorchan")
src.text = ""
src.build_changeling(correct_person)
return src.text
else
return null
// NOTE: Commentted out was the code which showed the chance of someone being an antag. If you want to re-add it, just uncomment the code.
/*
/datum/intercept_text/proc/pick_mob()
var/list/dudes = list()
for(var/mob/living/carbon/human/man in player_list)
if (!man.mind) continue
if (man.mind.assigned_role=="MODE") continue
dudes += man
if(dudes.len==0)
return null
return pick(dudes)
/datum/intercept_text/proc/pick_fingerprints()
var/mob/living/carbon/human/dude = src.pick_mob()
//if (!dude) return pick_fingerprints() //who coded that is totally crasy or just a traitor. -- rastaf0
if(dude)
return num2text(md5(dude.dna.uni_identity))
else
return num2text(md5(num2text(rand(1,10000))))
*/
/datum/intercept_text/proc/build_traitor(datum/mind/correct_person)
var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2)
/*
var/fingerprints
var/traitor_name
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
if(prob(prob_right_dude) && ticker.mode == "traitor")
if(correct_person:assigned_role=="MODE")
traitor_name = pick_mob()
else
traitor_name = correct_person:current
else if(prob(prob_right_dude))
traitor_name = pick_mob()
else
fingerprints = pick_fingerprints()
*/
src.text += "<BR><BR>The <B><U>[name_1] [name_2]</U></B> implied an undercover operative was acting on their behalf on the station currently."
src.text += "It would be in your best interests to suspect everybody, as these undercover operatives could have implants which trigger them to have their memories removed until they are needed. He, or she, could even be a high ranking officer."
src.text += "<BR><HR>"
/*
src.text += "After some investigation, we "
if(traitor_name)
src.text += "are [prob_right_dude]% sure that [traitor_name] may have been involved, and should be closely observed."
src.text += "<BR>Note: This group are known to be untrustworthy, so do not act on this information without proper discourse."
else
src.text += "discovered the following set of fingerprints ([fingerprints]) on sensitive materials, and their owner should be closely observed."
src.text += "However, these could also belong to a current Centcom employee, so do not act on this without reason."
*/
/datum/intercept_text/proc/build_cult(datum/mind/correct_person)
var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2)
/*
var/traitor_name
var/traitor_job
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
var/prob_right_job = rand(prob_correct_job_lower, prob_correct_job_higher)
if(prob(prob_right_job) && is_convertable_to_cult(correct_person))
if (correct_person)
if(correct_person:assigned_role=="MODE")
traitor_job = pick(get_all_jobs())
else
traitor_job = correct_person:assigned_role
else
var/list/job_tmp = get_all_jobs()
job_tmp.Remove("Captain", "Chaplain", "AI", "Cyborg", "Security Officer", "Detective", "Head Of Security", "Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer")
traitor_job = pick(job_tmp)
if(prob(prob_right_dude) && ticker.mode == "cult")
if(correct_person:assigned_role=="MODE")
traitor_name = src.pick_mob()
else
traitor_name = correct_person:current
else
traitor_name = pick_mob()
*/
src.text += "<BR><BR>It has been brought to our attention that the <B><U>[name_1] [name_2]</U></B> have stumbled upon some dark secrets. They apparently want to spread the dangerous knowledge onto as many stations as they can."
src.text += "Watch out for the following: praying to an unfamilar god, preaching the word of \[REDACTED\], sacrifices, magical dark power, living constructs of evil and a portal to the dimension of the underworld."
src.text += "<BR><HR>"
/*
src.text += "Based on our intelligence, we are [prob_right_job]% sure that if true, someone doing the job of [traitor_job] on your station may have been converted "
src.text += "and instilled with the idea of the flimsiness of the real world, seeking to destroy it. "
if(prob(prob_right_dude))
src.text += "<BR> In addition, we are [prob_right_dude]% sure that [traitor_name] may have also some in to contact with this "
src.text += "organisation."
src.text += "<BR>However, if this information is acted on without substantial evidence, those responsible will face severe repercussions."
*/
/datum/intercept_text/proc/build_rev(datum/mind/correct_person)
var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2)
/*
var/traitor_name
var/traitor_job
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
var/prob_right_job = rand(prob_correct_job_lower, prob_correct_job_higher)
if(prob(prob_right_job) && is_convertable_to_rev(correct_person))
if (correct_person)
if(correct_person.assigned_role=="MODE")
traitor_job = pick(get_all_jobs())
else
traitor_job = correct_person.assigned_role
else
var/list/job_tmp = get_all_jobs()
job_tmp-=nonhuman_positions
job_tmp-=command_positions
job_tmp.Remove("Security Officer", "Detective", "Warden", "MODE")
traitor_job = pick(job_tmp)
if(prob(prob_right_dude) && ticker.mode.config_tag == "revolution")
if(correct_person.assigned_role=="MODE")
traitor_name = src.pick_mob()
else
traitor_name = correct_person.current
else
traitor_name = src.pick_mob()
*/
src.text += "<BR><BR>It has been brought to our attention that the <B><U>[name_1] [name_2]</U></B> are attempting to stir unrest on one of our stations in your sector."
src.text += "Watch out for suspicious activity among the crew and make sure that all heads of staff report in periodically."
src.text += "<BR><HR>"
/*
src.text += "Based on our intelligence, we are [prob_right_job]% sure that if true, someone doing the job of [traitor_job] on your station may have been brainwashed "
src.text += "at a recent conference, and their department should be closely monitored for signs of mutiny. "
if(prob(prob_right_dude))
src.text += "<BR> In addition, we are [prob_right_dude]% sure that [traitor_name] may have also some in to contact with this "
src.text += "organisation."
src.text += "<BR>However, if this information is acted on without substantial evidence, those responsible will face severe repercussions."
*/
/datum/intercept_text/proc/build_gang(datum/mind/correct_person)
src.text += "<BR><BR>We have reports of criminal activity in close proximity to our operations within your sector."
src.text += "Ensure law and order is maintained on the station and be on the lookout for territorial aggression within the crew."
src.text += "In the event of a full-scale criminal takeover threat, sensitive research items are to be secured and the station evacuated ASAP."
src.text += "<BR><HR>"
/datum/intercept_text/proc/build_wizard(datum/mind/correct_person)
var/SWF_desc = pick(SWF_names)
src.text += "<BR><BR>The evil Space Wizards Federation have recently broke their most feared wizard, known only as <B>\"[SWF_desc]\"</B> out of space jail. "
src.text += "He is on the run, last spotted in a system near your present location. If anybody suspicious is located aboard, please "
src.text += "approach with EXTREME caution. Centcom also recommends that it would be wise to not inform the crew of this, due to their fearful nature."
src.text += "Known attributes include: Brown sandals, a large blue hat, a voluptous white beard, and an inclination to cast spells."
src.text += "<BR><HR>"
/datum/intercept_text/proc/build_nuke(datum/mind/correct_person)
src.text += "<BR><BR>Centcom recently received a report of a plot to destroy one of our stations in your area. We believe the Nuclear Authentication Disc "
src.text += "that is standard issue aboard your vessel may be a target. We recommend removal of this object, and it's storage in a safe "
src.text += "environment. As this may cause panic among the crew, all efforts should be made to keep this information a secret from all but "
src.text += "the most trusted crew-members."
src.text += "<BR><HR>"
/datum/intercept_text/proc/build_changeling(datum/mind/correct_person)
var/cname = pick(src.changeling_names)
var/orgname1 = pick(src.org_names_1)
var/orgname2 = pick(src.org_names_2)
/*
var/changeling_name
var/changeling_job
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
var/prob_right_job = rand(prob_correct_job_lower, prob_correct_job_higher)
if(prob(prob_right_job))
if(correct_person)
if(correct_person:assigned_role=="MODE")
changeling_job = pick(get_all_jobs())
else
changeling_job = correct_person:assigned_role
else
changeling_job = pick(get_all_jobs())
if(prob(prob_right_dude) && ticker.mode == "changeling")
if(correct_person:assigned_role=="MODE")
changeling_name = correct_person:current
else
changeling_name = src.pick_mob()
else
changeling_name = src.pick_mob()
*/
src.text += "<BR><BR>We have received a report that a dangerous alien lifeform known only as <B><U>\"[cname]\"</U></B> may have infiltrated your crew. "
/*
src.text += "Our intelligence suggests a [prob_right_job]% chance that a [changeling_job] on board your station has been replaced by the alien. "
src.text += "Additionally, the report indicates a [prob_right_dude]% chance that [changeling_name] may have been in contact with the lifeform at a recent social gathering. "
*/
src.text += "These lifeforms are associated with the <B><U>[orgname1] [orgname2]</U></B> and may be attempting to acquire sensitive materials on their behalf. "
src.text += "Please take care not to alarm the crew, as <B><U>[cname]</U></B> may take advantage of a panic situation. Remember, they can be anybody, suspect everybody!"
src.text += "<BR><HR>"
text += "Although more specific threats are commonplace, you should always remain vigilant for Syndicate agents aboard your station. Syndicate communications have implied that many \
Nanotrasen employees are Syndicate agents with hidden memories that may be activated at a moment's notice, so it's possible that these agents might not even know their positions."
if("wizard")
text += "A dangerous Wizards' Federation individual by the name of [pick(wizard_first)] [pick(wizard_second)] has recently escaped confinement from an unlisted prison facility. This \
man is a dangerous mutant with the ability to alter himself and the world around him by what he and his leaders believe to be magic. If this man attempts an attack on your station, \
his execution is highly encouraged, as is the preservation of his body for later study."
return text

View File

@@ -6,10 +6,8 @@
var/rampupdelta = 5
required_players = 0
/datum/game_mode/meteor/announce()
world << "<B>The current game mode is - Meteor!</B>"
world << "<B>The space station has been stuck in a major meteor shower. You must escape from the station or at least live.</B>"
announce_span = "danger"
announce_text = "A major meteor shower is bombarding the station! The crew needs to evacuate or survive the onslaught."
/datum/game_mode/meteor/process()

View File

@@ -10,18 +10,18 @@
recommended_enemies = 5
antag_flag = ROLE_OPERATIVE
enemy_minimum_age = 14
announce_span = "danger"
announce_text = "Syndicate forces are approaching the station in an attempt to destroy it!\n\
<span class='danger'>Operatives</span>: Secure the nuclear authentication disk and use your nuke to destroy the station.\n\
<span class='notice'>Crew</span>: Defend the nuclear authentication disk and ensure that it leaves with you on the emergency shuttle."
var/const/agents_possible = 5 //If we ever need more syndicate agents.
var/nukes_left = 1 // Call 3714-PRAY right now and order more nukes! Limited offer!
var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station
var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level
/datum/game_mode/nuclear/announce()
world << "<B>The current game mode is - Nuclear Emergency!</B>"
world << "<B>A [syndicate_name()] Strike Force is approaching [station_name()]!</B>"
world << "A nuclear explosive was being transported by Nanotrasen to a military base. The transport ship mysteriously lost contact with Space Traffic Control (STC). About that time a strange disk was discovered around [station_name()]. It was identified by Nanotrasen as a nuclear auth. disk and now Syndicate Operatives have arrived to retake the disk and detonate SS13! Also, most likely Syndicate star ships are in the vicinity so take care not to lose the disk!\n<B>Syndicate</B>: Reclaim the disk and detonate the nuclear bomb anywhere on SS13.\n<B>Personnel</B>: Hold the disk and <B>escape with the disk</B> on the shuttle!"
/datum/game_mode/nuclear/pre_setup()
var/n_players = num_players()
var/n_agents = min(round(n_players / 10, 1), agents_possible)

View File

@@ -20,6 +20,11 @@
recommended_enemies = 3
enemy_minimum_age = 14
announce_span = "danger"
announce_text = "Some crewmembers are attempting a coup!\n\
<span class='danger'>Revolutionaries</span>: Expand your cause and overthrow the heads of staff by execution or otherwise.\n\
<span class='notice'>Crew</span>: Prevent the revolutionaries from taking over the station."
var/finished = 0
var/check_counter = 0
var/max_headrevs = 3

View File

@@ -3,9 +3,8 @@
config_tag = "sandbox"
required_players = 0
/datum/game_mode/sandbox/announce()
world << "<B>The current game mode is - Sandbox!</B>"
world << "<B>Build your own station with the sandbox-panel command!</B>"
announce_span = "info"
announce_text = "Build your own station... or just shoot each other!"
/datum/game_mode/sandbox/pre_setup()
for(var/mob/M in player_list)

View File

@@ -16,20 +16,3 @@
else if(B.quality == MINOR_NEGATIVE)
not_good_mutations |= B
CHECK_TICK
/datum/subsystem/ticker/proc/setupFactions()
// Populate the factions list:
for(var/typepath in typesof(/datum/faction))
var/datum/faction/F = new typepath()
if(!F.name)
qdel(F)
continue
else
factions.Add(F)
availablefactions.Add(F)
CHECK_TICK
// Populate the syndicate coalition:
for(var/datum/faction/syndicate/S in factions)
syndicate_coalition.Add(S)
CHECK_TICK

View File

@@ -9,13 +9,13 @@
traitors_possible = 10 //hard limit on traitors if scaling is turned off
num_modifier = 6 // Six additional traitors
announce_text = "There are double agents trying to kill each other!\n\
<span class='danger'>Traitors</span>: Eliminate your targets and protect yourself!\n\
<span class='notice'>Crew</span>: Stop the double agents before they can cause too much mayhem."
var/list/target_list = list()
var/list/late_joining_list = list()
/datum/game_mode/traitor/double_agents/announce()
world << "<B>The current game mode is - Double Agents!</B>"
world << "<B>There are double agents killing eachother! Do not let them succeed!</B>"
/datum/game_mode/traitor/double_agents/post_setup()
var/i = 0
for(var/datum/mind/traitor in traitors)

View File

@@ -17,15 +17,15 @@
reroll_friendly = 1
enemy_minimum_age = 0
announce_span = "danger"
announce_text = "There are Syndicate agents on the station!\n\
<span class='danger'>Traitors</span>: Accomplish your objectives.\n\
<span class='notice'>Crew</span>: Do not let the traitors succeed!"
var/traitors_possible = 4 //hard limit on traitors if scaling is turned off
var/num_modifier = 0 // Used for gamemodes, that are a child of traitor, that need more than the usual.
/datum/game_mode/traitor/announce()
world << "<B>The current game mode is - Traitor!</B>"
world << "<B>There are syndicate traitors on the station. Do not let the traitors succeed!</B>"
/datum/game_mode/traitor/pre_setup()
if(config.protect_roles_from_antagonist)

View File

@@ -3,6 +3,10 @@
config_tag = "raginmages"
required_players = 20
use_huds = 1
announce_span = "userdanger"
announce_text = "There are many, many wizards attacking the station!\n\
<span class='danger'>Wizards</span>: Accomplish your objectives and cause utter catastrophe!\n\
<span class='notice'>Crew</span>: Try not to die..."
var/max_mages = 0
var/making_mage = 0
var/mages_made = 1
@@ -12,10 +16,6 @@
var/spawn_delay_min = 500
var/spawn_delay_max = 700
/datum/game_mode/wizard/announce()
world << "<B>The current game mode is - Ragin' Mages!</B>"
world << "<B>The <span class='warning'>Space Wizard Federation</span> is pissed, help defeat all the space wizards!</B>"
/datum/game_mode/wizard/raginmages/post_setup()
..()
var/playercount = 0
@@ -158,3 +158,5 @@
time_check = 250
spawn_delay_min = 50
spawn_delay_max = 150
announce_text = "<span class='userdanger'>CRAAAWLING IIIN MY SKIIIN\n\
THESE WOOOUNDS THEY WIIIL NOT HEEEAL</span>"

View File

@@ -11,13 +11,13 @@
recommended_enemies = 1
enemy_minimum_age = 14
round_ends_with_antag_death = 1
announce_span = "danger"
announce_text = "There is a space wizard attacking the station!\n\
<span class='danger'>Wizard</span>: Accomplish your objectives and cause mayhem on the station.\n\
<span class='notice'>Crew</span>: Eliminate the wizard before they can succeed!"
var/use_huds = 0
var/finished = 0
/datum/game_mode/wizard/announce()
world << "<B>The current game mode is - Wizard!</B>"
world << "<B>There is a <span class='danger'>SPACE WIZARD</span>\black on the station. You can't let him achieve his objective!</B>"
/datum/game_mode/wizard/pre_setup()
var/datum/mind/wizard = pick(antag_candidates)