diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 73f7904d7d..b5b7caa37b 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -370,7 +370,7 @@ Example config: var/ct = initial(M.config_tag) if(ct && ct == mode_name) return new T - return new /datum/game_mode/extended() + return new /datum/game_mode/dynamic /datum/controller/configuration/proc/get_runnable_modes() var/list/datum/game_mode/runnable_modes = new diff --git a/code/controllers/configuration/entries/vote.dm b/code/controllers/configuration/entries/vote.dm index 545fd01e3c..6dfbb44508 100644 --- a/code/controllers/configuration/entries/vote.dm +++ b/code/controllers/configuration/entries/vote.dm @@ -1,7 +1,5 @@ /datum/config_entry/flag/allow_vote_restart // allow votes to restart -/datum/config_entry/flag/allow_vote_mode // allow votes to change mode - /datum/config_entry/number/vote_delay // minimum time between voting sessions (deciseconds, 10 minute default) config_entry_value = 6000 min_val = 0 diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index deb57d75d8..66e90ced31 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -68,10 +68,6 @@ SUBSYSTEM_DEF(vote) //get the highest number of votes var/greatest_votes = 0 var/total_votes = 0 - if((mode == "gamemode" || mode == "roundtype") && CONFIG_GET(flag/must_be_readied_to_vote_gamemode)) - for(var/mob/dead/new_player/P in GLOB.player_list) - if(P.ready != PLAYER_READY_TO_PLAY && voted[P.ckey]) - choices[choices[voted[P.ckey]]]-- for(var/option in choices) var/votes = choices[option] total_votes += votes @@ -90,11 +86,6 @@ SUBSYSTEM_DEF(vote) choices["Continue Playing"] += non_voters.len if(choices["Continue Playing"] >= greatest_votes) greatest_votes = choices["Continue Playing"] - else if(mode == "gamemode") - if(GLOB.master_mode in choices) - choices[GLOB.master_mode] += non_voters.len - if(choices[GLOB.master_mode] >= greatest_votes) - greatest_votes = choices[GLOB.master_mode] //get all options with that many votes and return them in a list . = list() if(greatest_votes) @@ -104,11 +95,6 @@ SUBSYSTEM_DEF(vote) return . /datum/controller/subsystem/vote/proc/calculate_condorcet_votes(var/blackbox_text) - // https://en.wikipedia.org/wiki/Schulze_method#Implementation - if((mode == "gamemode" || mode == "dynamic" || mode == "roundtype") && CONFIG_GET(flag/must_be_readied_to_vote_gamemode)) - for(var/mob/dead/new_player/P in GLOB.player_list) - if(P.ready != PLAYER_READY_TO_PLAY && voted[P.ckey]) - voted -= P.ckey var/list/d[][] = new/list(choices.len,choices.len) // the basic vote matrix, how many times a beats b for(var/ckey in voted) var/list/this_vote = voted[ckey] @@ -155,10 +141,6 @@ SUBSYSTEM_DEF(vote) for(var/choice in choices) scores_by_choice += "[choice]" scores_by_choice["[choice]"] = list() - if((mode == "gamemode" || mode == "dynamic" || mode == "roundtype") && CONFIG_GET(flag/must_be_readied_to_vote_gamemode)) - for(var/mob/dead/new_player/P in GLOB.player_list) - if(P.ready != PLAYER_READY_TO_PLAY && voted[P.ckey]) - voted -= P.ckey for(var/ckey in voted) var/list/this_vote = voted[ckey] var/list/pretty_vote = list() @@ -251,7 +233,7 @@ SUBSYSTEM_DEF(vote) if(vote_system == HIGHEST_MEDIAN_VOTING) calculate_highest_median(vote_title_text) // nothing uses this at the moment var/list/winners = vote_system == INSTANT_RUNOFF_VOTING ? get_runoff_results() : get_result() - var/was_roundtype_vote = mode == "roundtype" || mode == "dynamic" + var/was_roundtype_vote = mode == "dynamic" if(winners.len > 0) if(was_roundtype_vote) stored_gamemode_votes = list() @@ -322,38 +304,9 @@ SUBSYSTEM_DEF(vote) var/restart = 0 if(.) switch(mode) - if("roundtype") //CIT CHANGE - adds the roundstart extended/secret vote - if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started. - return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.") - GLOB.master_mode = . - SSticker.save_mode(.) - message_admins("The gamemode has been voted for, and has been changed to: [GLOB.master_mode]") - log_admin("Gamemode has been voted for and switched to: [GLOB.master_mode].") - if(CONFIG_GET(flag/modetier_voting)) - reset() - started_time = 0 - initiate_vote("mode tiers","server", votesystem=SCORE_VOTING, forced=TRUE, vote_time = 30 MINUTES) - to_chat(world,"The vote will end right as the round starts.") - return . if("restart") if(. == "Restart Round") restart = 1 - if("gamemode") - if(GLOB.master_mode != .) - SSticker.save_mode(.) - if(SSticker.HasRoundStarted()) - restart = 1 - else - GLOB.master_mode = . - if("mode tiers") - var/list/raw_score_numbers = list() - for(var/score_name in scores) - sorted_insert(raw_score_numbers,scores[score_name],/proc/cmp_numeric_asc) - stored_modetier_results = scores.Copy() - for(var/score_name in stored_modetier_results) - if(stored_modetier_results[score_name] <= raw_score_numbers[CONFIG_GET(number/dropped_modes)]) - stored_modetier_results -= score_name - stored_modetier_results += "traitor" if("map") var/datum/map_config/VM = config.maplist[.] message_admins("The map has been voted for and will change to: [VM.map_name]") @@ -451,8 +404,6 @@ SUBSYSTEM_DEF(vote) switch(vote_type) if("restart") choices.Add("Restart Round","Continue Playing") - if("gamemode") - choices.Add(config.votable_modes) if("map") var/players = GLOB.clients.len var/list/lastmaps = SSpersistence.saved_maps?.len ? list("[SSmapping.config.map_name]") | SSpersistence.saved_maps : list("[SSmapping.config.map_name]") @@ -469,16 +420,6 @@ SUBSYSTEM_DEF(vote) choices |= M if("transfer") // austation begin -- Crew autotranfer vote choices.Add("Initiate Crew Transfer","Continue Playing") // austation end - if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote - choices.Add("secret", "extended") - if("mode tiers") - var/list/modes_to_add = config.votable_modes - var/list/probabilities = CONFIG_GET(keyed_list/probability) - for(var/tag in modes_to_add) - if(probabilities[tag] <= 0) - modes_to_add -= tag - modes_to_add -= "traitor" // makes it so that traitor is always available - choices.Add(modes_to_add) if("custom") question = stripped_input(usr,"What is the vote for?") if(!question) @@ -636,16 +577,6 @@ SUBSYSTEM_DEF(vote) if(trialmin) . += "\t([avr ? "Allowed" : "Disallowed"])" . += "
  • " - //gamemode - var/avm = CONFIG_GET(flag/allow_vote_mode) - if(trialmin || avm) - . += "GameMode" - else - . += "GameMode (Disallowed)" - if(trialmin) - . += "\t([avm ? "Allowed" : "Disallowed"])" - - . += "
  • " //custom if(trialmin) . += "
  • Custom
  • " @@ -668,15 +599,9 @@ SUBSYSTEM_DEF(vote) if("toggle_restart") if(usr.client.holder) CONFIG_SET(flag/allow_vote_restart, !CONFIG_GET(flag/allow_vote_restart)) - if("toggle_gamemode") - if(usr.client.holder) - CONFIG_SET(flag/allow_vote_mode, !CONFIG_GET(flag/allow_vote_mode)) if("restart") if(CONFIG_GET(flag/allow_vote_restart) || usr.client.holder) initiate_vote("restart",usr.key) - if("gamemode") - if(CONFIG_GET(flag/allow_vote_mode) || usr.client.holder) - initiate_vote("gamemode",usr.key) if("custom") if(usr.client.holder) initiate_vote("custom",usr.key) diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 679d2faf11..3b163ddd65 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -166,7 +166,6 @@ .["mode"] = "hidden" //CIT CHANGE - hides the gamemode in topic() calls to prevent meta'ing the gamemode .["respawn"] = config ? CONFIG_GET(flag/respawns_enabled) : FALSE .["enter"] = GLOB.enter_allowed - .["vote"] = CONFIG_GET(flag/allow_vote_mode) .["ai"] = CONFIG_GET(flag/allow_ai) .["host"] = world.host ? world.host : null .["round_id"] = GLOB.round_id diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index 9f0f041cda..5b34f1e8e8 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -53,7 +53,7 @@ /datum/dynamic_ruleset/latejoin/infiltrator name = "Syndicate Infiltrator" antag_datum = /datum/antagonist/traitor - antag_flag = ROLE_TRAITOR + antag_flag = "traitor late" protected_roles = list("Security Officer", "Warden", "Head of Personnel", "Detective", "Head of Security", "Captain") restricted_roles = list("AI","Cyborg") required_candidates = 1 @@ -72,8 +72,8 @@ name = "Provocateur" persistent = TRUE antag_datum = /datum/antagonist/rev/head - antag_flag = ROLE_REV_HEAD - antag_flag_override = ROLE_REV + antag_flag = "rev head late" + antag_flag_override = "rev late" restricted_roles = list("AI", "Cyborg", "Prisoner", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director") enemy_roles = list("AI", "Cyborg", "Security Officer","Detective","Head of Security", "Captain", "Warden") required_enemies = list(2,2,1,1,1,1,1,0,0,0) @@ -148,7 +148,7 @@ /datum/dynamic_ruleset/latejoin/heretic_smuggler name = "Heretic Smuggler" antag_datum = /datum/antagonist/heretic - antag_flag = ROLE_HERETIC + antag_flag = "heretic late" protected_roles = list("Security Officer", "Warden", "Head of Personnel", "Detective", "Head of Security", "Captain","Prisoner") restricted_roles = list("AI","Cyborg") required_candidates = 1 diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 18a83d1364..c016fad8d8 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -184,7 +184,7 @@ /datum/dynamic_ruleset/midround/autotraitor name = "Syndicate Sleeper Agent" antag_datum = /datum/antagonist/traitor - antag_flag = ROLE_TRAITOR + antag_flag = "traitor mid" protected_roles = list("Prisoner", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") restricted_roles = list("Cyborg", "AI", "Positronic Brain") required_candidates = 1 @@ -298,7 +298,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/wizard name = "Wizard" antag_datum = /datum/antagonist/wizard - antag_flag = ROLE_WIZARD + antag_flag = "wizard mid" enemy_roles = list("Security Officer","Detective","Head of Security", "Captain") required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 @@ -328,7 +328,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/nuclear name = "Nuclear Assault" - antag_flag = ROLE_OPERATIVE + antag_flag = "nukie mid" antag_datum = /datum/antagonist/nukeop enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain") required_enemies = list(3,3,3,3,3,2,1,1,0,0) @@ -388,7 +388,7 @@ /datum/dynamic_ruleset/midround/blob_infection name = "Blob Infection" antag_datum = /datum/antagonist/blob - antag_flag = ROLE_BLOB + antag_flag = "blob mid" protected_roles = list("Prisoner", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") restricted_roles = list("Cyborg", "AI", "Positronic Brain") enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain") diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index a74f9c4eb3..11afacee4e 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -520,6 +520,7 @@ /datum/dynamic_ruleset/roundstart/nuclear/clown_ops name = "Clown Ops" + antag_flag = "clown ops" antag_datum = /datum/antagonist/nukeop/clownop antag_leader_datum = /datum/antagonist/nukeop/leader/clownop requirements = list(101,101,101,101,101,101,101,101,101,101) diff --git a/config/entries/dyanmic.txt b/config/entries/dyanmic.txt deleted file mode 100644 index e08fb7634d..0000000000 --- a/config/entries/dyanmic.txt +++ /dev/null @@ -1,318 +0,0 @@ -## Dynamic storytellers weights: how likely each storyteller is to show up. This is adjusted by voting and recency. -STORYTELLER_WEIGHT CHAOTIC 2 -STORYTELLER_WEIGHT TEAMWORK 4 -STORYTELLER_WEIGHT CONVERSION 0 -STORYTELLER_WEIGHT RANDOM 2 -STORYTELLER_WEIGHT CLASSIC 6 -STORYTELLER_WEIGHT INTRIGUE 6 -STORYTELLER_WEIGHT STORY 6 -STORYTELLER_WEIGHT CALM 6 -STORYTELLER_WEIGHT EXTENDED 0 - -## Dynamic storyteller minimum player coutns: how many players before this storyteller can be rolled. -STORYTELLER_MIN_PLAYERS CHAOTIC 30 -STORYTELLER_MIN_PLAYERS TEAMWORK 30 - -## If this is uncommented, Dynamic won't disable certain storytellers based on recent round threats -#NO_STORYTELLER_THREAT_REMOVAL - -## Injection delays: how long (in minutes) will pass before a midround or latejoin antag is injected. -DYNAMIC_MIDROUND_DELAY_MIN 5 -DYNAMIC_MIDROUND_DELAY_MAX 15 -DYNAMIC_LATEJOIN_DELAY_MIN 10 -DYNAMIC_LATEJOIN_DELAY_MAX 30 - -DYNAMIC_FIRST_MIDROUND_DELAY_MIN 20 -DYNAMIC_FIRST_MIDROUND_DELAY_MAX 30 -DYNAMIC_FIRST_LATEJOIN_DELAY_MIN 2 -DYNAMIC_FIRST_LATEJOIN_DELAY_MAX 30 - -## How many roundstart players required for high population override to take effect. -DYNAMIC_HIGH_POP_LIMIT 80 #80 instead of 55 because fewer robust players - -## Threat requirements for a second roundstart ruleset being drafted -DYNAMIC_SECOND_RULE_REQUIREMENTS 101 101 101 101 100 90 80 70 60 50 -## Threat requirements for a *third* roundstart ruleset being drafted -DYNAMIC_THIRD_RULE_REQUIREMENTS 101 101 101 101 101 100 90 80 70 60 -## As above, but if there's 79+ players -DYNAMIC_SECOND_RULE_HIGH_POP_REQUIREMENT 50 -DYNAMIC_THIRD_RULE_HIGH_POP_REQUIREMENT 60 - -## Pop range per requirement. -## If the value is five the range is: -## 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+ -## If it is six the range is: -## 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+ -## If it is seven the range is: -## 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+ -## Options outside this range can be used, of course. -DYNAMIC_POP_PER_REQUIREMENT 9 # 9 instead of 6 because 1/3 of players are probably not doing much? - -## 1 -> 9, probability for this rule to be picked against other rules. -## Note that requirements must also be met, and some requirements are impossible to meet. -DYNAMIC_WEIGHT TRAITOR 5 -DYNAMIC_WEIGHT MALF_AI 1 -DYNAMIC_WEIGHT TRAITORBRO 4 -DYNAMIC_WEIGHT CHANGELING 1 -DYNAMIC_WEIGHT WIZARD 1 -DYNAMIC_WEIGHT CULT 3 -DYNAMIC_WEIGHT NUCLEAR 3 -DYNAMIC_WEIGHT REVOLUTION 2 -DYNAMIC_WEIGHT BLOODSUCKER 4 -# All below are impossible-by-default -DYNAMIC_WEIGHT EXTENDED 3 -DYNAMIC_WEIGHT CLOCKWORK_CULT 3 -DYNAMIC_WEIGHT CLOWNOPS 3 -DYNAMIC_WEIGHT DEVIL 3 -DYNAMIC_WEIGHT MONKEY 3 -DYNAMIC_WEIGHT METEOR 3 - -## Midround antags -DYNAMIC_WEIGHT MIDROUND_TRAITOR 9 -DYNAMIC_WEIGHT MIDROUND_MALF_AI 5 -DYNAMIC_WEIGHT MIDROUND_WIZARD 4 -DYNAMIC_WEIGHT MIDROUND_NUCLEAR 2 -DYNAMIC_WEIGHT BLOB 2 -DYNAMIC_WEIGHT XENOS 2 -DYNAMIC_WEIGHT NIGHTMARE 3 -DYNAMIC_WEIGHT SENTIENT_DISEASE 4 -DYNAMIC_WEIGHT REVENANT 2 -DYNAMIC_WEIGHT SLAUGHTER_DEMON 1 -DYNAMIC_WEIGHT ABDUCTORS 3 -DYNAMIC_WEIGHT SPACE_NINJA 3 - -## Events -DYNAMIC_WEIGHT SPIDERS 5 -DYNAMIC_WEIGHT VENTCLOG_NORMAL 3 -DYNAMIC_WEIGHT VENTCLOG_THREATENING 3 -DYNAMIC_WEIGHT VENTCLOG_CATASTROPHIC 3 -DYNAMIC_WEIGHT ION_STORM 7 -DYNAMIC_WEIGHT METEOR_WAVE_NORMAL 3 -DYNAMIC_WEIGHT METEOR_WAVE_THREATENING 2 -DYNAMIC_WEIGHT METEOR_WAVE_CATASTROPHIC 1 -DYNAMIC_WEIGHT PIRATES 8 -DYNAMIC_WEIGHT ANOMALY_BLUESPACE 2 -DYNAMIC_WEIGHT ANOMALY_FLUX 2 -DYNAMIC_WEIGHT ANOMALY_GRAVITATIONAL 2 -DYNAMIC_WEIGHT ANOMALY_PYROCLASTIC 2 -DYNAMIC_WEIGHT ANOMALY_VORTEX 2 -DYNAMIC_WEIGHT BRAND_INTELLIGENCE 1 -DYNAMIC_WEIGHT CARP_MIGRATION 7 -DYNAMIC_WEIGHT COMMUNICATIONS_BLACKOUT 2 -DYNAMIC_WEIGHT PROCESSOR_OVERLOAD 2 -DYNAMIC_WEIGHT SPACE_DUST 2 -DYNAMIC_WEIGHT MAJOR_DUST 1 -DYNAMIC_WEIGHT ELECTRICAL_STORM 2 -DYNAMIC_WEIGHT HEART_ATTACK 2 -DYNAMIC_WEIGHT RADIATION_STORM 1 - -## Latejoin antags -DYNAMIC_WEIGHT LATEJOIN_TRAITOR 7 -DYNAMIC_WEIGHT LATEJOIN_REVOLUTION 2 -DYNAMIC_WEIGHT LATEJOIN_BLOODSUCKER 4 -DYNAMIC_WEIGHT LATEJOIN_COLLECTOR 5 - -## Threat cost. This is decreased from the mode's threat when the rule is executed. -DYNAMIC_COST TRAITOR 10 -DYNAMIC_COST MALF_AI 35 -DYNAMIC_COST TRAITORBRO 10 -DYNAMIC_COST CHANGELING 30 -DYNAMIC_COST WIZARD 30 -DYNAMIC_COST CULT 35 -DYNAMIC_COST NUCLEAR 45 -DYNAMIC_COST REVOLUTION 40 -DYNAMIC_cOST BLOODSUCKER 15 -DYNAMIC_COST EXTENDED 0 -DYNAMIC_COST CLOCKWORK_CULT 35 -DYNAMIC_COST CLOWNOPS 40 -DYNAMIC_COST DEVIL 0 -DYNAMIC_COST MONKEY 0 -DYNAMIC_COST METEOR 0 - -## Midround antags -DYNAMIC_COST MIDROUND_TRAITOR 10 -DYNAMIC_COST MIDROUND_MALF_AI 35 -DYNAMIC_COST MIDROUND_WIZARD 20 -DYNAMIC_COST MIDROUND_NUCLEAR 35 -DYNAMIC_COST BLOB 10 -DYNAMIC_COST XENOS 20 -DYNAMIC_COST NIGHTMARE 10 -DYNAMIC_COST SENTIENT_DISEASE 5 -DYNAMIC_COST REVENANT 5 -DYNAMIC_COST SLAUGHTER_DEMON 15 -DYNAMIC_COST ABDUCTORS 10 -DYNAMIC_COST SPACE_NINJA 15 - -## Events -DYNAMIC_COST SPIDERS 10 -DYNAMIC_COST VENTCLOG_NORMAL 2 -DYNAMIC_COST VENTCLOG_THREATENING 5 -DYNAMIC_COST VENTCLOG_CATASTROPHIC 15 -DYNAMIC_COST ION_STORM 3 -DYNAMIC_COST METEOR_WAVE_NORMAL 15 -DYNAMIC_COST METEOR_WAVE_THREATENING 25 -DYNAMIC_COST METEOR_WAVE_CATASTROPHIC 40 -DYNAMIC_COST PIRATES 10 -DYNAMIC_COST ANOMALY_BLUESPACE 3 -DYNAMIC_COST ANOMALY_FLUX 2 -DYNAMIC_COST ANOMALY_GRAVITATIONAL 3 -DYNAMIC_COST ANOMALY_PYROCLASTIC 5 -DYNAMIC_COST ANOMALY_VORTEX 5 -DYNAMIC_COST BRAND_INTELLIGENCE 5 -DYNAMIC_COST CARP_MIGRATION 3 -DYNAMIC_COST COMMUNICATIONS_BLACKOUT 5 -DYNAMIC_COST PROCESSOR_OVERLOAD 5 -DYNAMIC_COST SPACE_DUST 2 -DYNAMIC_COST MAJOR_DUST 4 -DYNAMIC_COST ELECTRICAL_STORM 1 -DYNAMIC_COST HEART_ATTACK 1 -DYNAMIC_COST RADIATION_STORM 3 - -## Latejoin antags -DYNAMIC_COST LATEJOIN_TRAITOR 5 -DYNAMIC_COST LATEJOIN_REVOLUTION 20 -DYNAMIC_COST LATEJOIN_BLOODSUCKER 10 -DYNAMIC_COST LATEJOIN_COLLECTOR 1 - -## Rule will not be generated with threat levels below requirement at a pop value. Pop values are determined by dynamic's pop-per-requirement. -## By default it's 0-8, 9-17, 18-26, 27-35, 36-44, 45-53, 54-60, 61-69, 70-78, 79+. -## This means that 40 30 30 20 20 20 15 15 15 10 will not generate below 40 at 0-8, 30 at 9-17 etc. -DYNAMIC_REQUIREMENTS TRAITOR 50 50 50 50 50 50 50 50 50 50 -DYNAMIC_REQUIREMENTS TRAITORBRO 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS CHANGELING 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS WIZARD 101 101 60 60 50 50 50 50 50 50 -DYNAMIC_REQUIREMENTS CULT 101 101 101 60 50 50 50 50 50 50 -DYNAMIC_REQUIREMENTS NUCLEAR 101 101 101 60 50 50 50 50 50 50 -DYNAMIC_REQUIREMENTS REVOLUTION 101 101 101 60 50 50 50 50 50 50 -DYNAMIC_REQUIREMENTS EXTENDED 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS CLOCKWORK_CULT 101 101 101 70 60 60 50 50 50 50 -DYNAMIC_REQUIREMENTS CLOWNOPS 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS DEVIL 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS MONKEY 101 101 101 101 101 101 101 101 101 101 -DYNAMIC_REQUIREMENTS METEOR 101 101 101 101 101 101 101 101 101 101 - -## Midround antags -DYNAMIC_REQUIREMENTS MIDROUND_TRAITOR 30 25 20 15 15 15 15 15 15 15 -DYNAMIC_REQUIREMENTS MIDROUND_MALF_AI 101 101 70 50 50 50 40 30 30 30 -DYNAMIC_REQUIREMENTS MIDROUND_WIZARD 90 90 60 40 30 30 30 30 30 30 -DYNAMIC_REQUIREMENTS MIDROUND_NUCLEAR 90 90 90 80 70 60 50 40 40 40 -DYNAMIC_REQUIREMENTS BLOB 101 101 101 80 60 50 50 50 50 50 -DYNAMIC_REQUIREMENTS XENOS 101 101 101 70 50 50 50 50 50 50 -DYNAMIC_REQUIREMENTS NIGHTMARE 101 101 101 70 50 40 20 15 15 15 -DYNAMIC_REQUIREMENTS SENTIENT_DISEASE 30 30 20 20 15 10 10 10 10 5 -DYNAMIC_REQUIREMENTS REVENANT 30 30 30 30 20 15 15 15 15 15 -DYNAMIC_REQUIREMENTS SLAUGHTER_DEMON 101 101 101 90 80 70 60 50 50 50 -DYNAMIC_REQUIREMENTS ABDUCTORS 80 80 70 50 40 30 30 20 15 15 -DYNAMIC_REQUIREMENTS SPACE_NINJA 101 101 101 90 80 70 60 50 40 30 - -## Events -DYNAMIC_REQUIREMENTS SPIDERS 70 60 50 50 40 40 40 30 20 15 -DYNAMIC_REQUIREMENTS VENTCLOG 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS ION_STORM 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS METEOR_WAVE 60 50 40 30 30 30 30 30 30 30 -DYNAMIC_REQUIREMENTS PIRATES 70 60 50 50 40 40 40 30 20 15 -DYNAMIC_REQUIREMENTS ANOMALY_BLUESPACE 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS ANOMALY_FLUX 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS ANOMALY_GRAVITATIONAL 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS ANOMALY_PYROCLASTIC 10 10 10 10 10 10 10 10 10 10 -DYNAMIC_REQUIREMENTS ANOMALY_VORTEX 10 10 10 10 10 10 10 10 10 10 -DYNAMIC_REQUIREMENTS BRAND_INTELLIGENCE 10 10 10 10 10 10 10 10 10 10 -DYNAMIC_REQUIREMENTS CARP_MIGRATION 10 10 10 10 10 10 10 10 10 10 -DYNAMIC_REQUIREMENTS COMMUNICATIONS_BLACKOUT 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS PROCESSOR_OVERLOAD 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS SPACE_DUST 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS MAJOR_DUST 10 10 10 10 10 10 10 10 10 10 -DYNAMIC_REQUIREMENTS ELECTRICAL_STORM 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS HEART_ATTACK 5 5 5 5 5 5 5 5 5 5 -DYNAMIC_REQUIREMENTS RADIATION_STORM 5 5 5 5 5 5 5 5 5 5 - -## Latejoin antags -DYNAMIC_REQUIREMENTS LATEJOIN_TRAITOR 40 30 20 15 15 15 15 15 15 15 -DYNAMIC_REQUIREMENTS LATEJOIN_REVOLUTION 101 101 70 40 40 40 40 40 40 40 -DYNAMIC_REQUIREMENTS LATEJOIN_BLOODSUCKER 40 30 20 15 15 15 15 15 15 15 -DYNAMIC_REQUIREMENTS LATEJOIN_COLLECTOR 10 10 10 10 10 10 10 10 10 10 - -## An alternative, static requirement used instead when pop is over mode's high_pop_limit. -DYNAMIC_HIGH_POPULATION_REQUIREMENT TRAITOR 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT MALF_AI 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT TRAITORBRO 101 -DYNAMIC_HIGH_POPULATION_REQUIREMENT CHANGELING 101 -DYNAMIC_HIGH_POPULATION_REQUIREMENT WIZARD 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT CULT 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT NUCLEAR 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT REVOLUTION 50 -# All below are impossible-by-default -DYNAMIC_HIGH_POPULATION_REQUIREMENT EXTENDED 101 -DYNAMIC_HIGH_POPULATION_REQUIREMENT CLOCKWORK_CULT 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT CLOWNOPS 101 -DYNAMIC_HIGH_POPULATION_REQUIREMENT DEVIL 101 -DYNAMIC_HIGH_POPULATION_REQUIREMENT MONKEY 101 -DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR 101 - -## Midround antags -DYNAMIC_HIGH_POPULATION_REQUIREMENT MIDROUND_TRAITOR 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT MIDROUND_MALF_AI 35 -DYNAMIC_HIGH_POPULATION_REQUIREMENT MIDROUND_WIZARD 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT MIDROUND_NUCLEAR 35 -DYNAMIC_HIGH_POPULATION_REQUIREMENT BLOB 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT XENOS 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT NIGHTMARE 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT SENTIENT_DISEASE 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT REVENANT 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT SLAUGHTER_DEMON 30 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ABDUCTORS 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT SPACE_NINJA 30 - -## Events -DYNAMIC_HIGH_POPULATION_REQUIREMENT SPIDERS 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ION_STORM 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE 30 -DYNAMIC_HIGH_POPULATION_REQUIREMENT PIRATES 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_BLUESPACE 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_FLUX 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_GRAVITATIONAL 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_PYROCLASTIC 10 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_VORTEX 10 -DYNAMIC_HIGH_POPULATION_REQUIREMENT BRAND_INTELLIGENCE 10 -DYNAMIC_HIGH_POPULATION_REQUIREMENT CARP_MIGRATION 10 -DYNAMIC_HIGH_POPULATION_REQUIREMENT COMMUNICATIONS_BLACKOUT 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT PROCESSOR_OVERLOAD 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT SPACE_DUST 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT MAJOR_DUST 10 -DYNAMIC_HIGH_POPULATION_REQUIREMENT ELECTRICAL_STORM 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT HEART_ATTACK 5 -DYNAMIC_HIGH_POPULATION_REQUIREMENT RADIATION_STORM 5 - -## Latejoin antags -DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_TRAITOR 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_REVOLUTION 50 -DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_BLOODSUCKER 15 -DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_COLLECTOR 10 - -## Dynamic traitor stuff - -## Requirements for "hijack the shuttle" goals. -DYNAMIC_HIJACK_REQUIREMENTS 101 101 101 95 80 70 60 50 40 30 - -DYNAMIC_HIJACK_HIGH_POPULATION_REQUIREMENT 25 - -DYNAMIC_HIJACK_COST 10 - -DYNAMIC_GLORIOUS_DEATH_COST 5 - -DYNAMIC_ASSASSINATE_COST 2 - -## This requirement uses threat level, rather than current threat, which is why it's higher. -DYNAMIC_WAROPS_REQUIREMENT 60 - -DYNAMIC_WAROPS_COST 10 - -## Storyteller min players -# STORYTELLER_MIN_PLAYERS CHAOTIC 35 - -## Storyteller minimum chaos -# STORYTELLER_MIN_CHAOS CHAOTIC 75 - -## Storyteller maximum chaos -# STORYTELLER_MAX_CHAOS CHAOTIC 250