diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index f163b2a4c04..b7ff2c30e0d 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -2,11 +2,13 @@ name = "traitor+changeling" config_tag = "traitorchan" traitors_possible = 3 //hard limit on traitors if scaling is turned off - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("Cyborg") + secondary_restricted_jobs = list("AI") // Allows AI to roll traitor, but not changeling required_players = 10 required_enemies = 1 // how many of each type are required recommended_enemies = 3 - var/protected_species_changeling = list("Machine") + secondary_enemies_scaling = 0.025 + secondary_protected_species = list("Machine") /datum/game_mode/traitor/changeling/announce() to_chat(world, "The current game mode is - Traitor+Changeling!") @@ -18,17 +20,23 @@ restricted_jobs += protected_jobs var/list/datum/mind/possible_changelings = get_players_for_role(ROLE_CHANGELING) + secondary_enemies = CEILING((secondary_enemies_scaling * num_players()), 1) for(var/mob/new_player/player in GLOB.player_list) - if((player.mind in possible_changelings) && (player.client.prefs.species in protected_species_changeling)) + if((player.mind in possible_changelings) && (player.client.prefs.species in secondary_protected_species)) possible_changelings -= player.mind if(possible_changelings.len > 0) - var/datum/mind/changeling = pick(possible_changelings) - changelings += changeling - modePlayer += changelings - changeling.restricted_roles = restricted_jobs - changeling.special_role = SPECIAL_ROLE_CHANGELING + for(var/I in possible_changelings) + if(length(changelings) >= secondary_enemies) + break + var/datum/mind/changeling = pick(possible_changelings) + changelings += changeling + modePlayer += changelings + possible_changelings -= changeling + changeling.restricted_roles = (restricted_jobs + secondary_restricted_jobs) + changeling.special_role = SPECIAL_ROLE_CHANGELING + return ..() else return 0 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index d61b59cace2..4f150975322 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -20,11 +20,15 @@ var/explosion_in_progress = 0 //sit back and relax var/list/datum/mind/modePlayer = new var/list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist + var/list/secondary_restricted_jobs = list() // Same as above, but for secondary antagonists var/list/protected_jobs = list() // Jobs that can't be traitors var/list/protected_species = list() // Species that can't be traitors + var/list/secondary_protected_species = list() // Same as above, but for secondary antagonists var/required_players = 0 var/required_enemies = 0 var/recommended_enemies = 0 + var/secondary_enemies = 0 + var/secondary_enemies_scaling = 0 // Scaling rate of secondary enemies var/newscaster_announcements = null var/ert_disabled = 0 var/uplink_welcome = "Syndicate Uplink Console:" diff --git a/code/game/gamemodes/vampire/traitor_vamp.dm b/code/game/gamemodes/vampire/traitor_vamp.dm index d69b9a23518..7fb1088214b 100644 --- a/code/game/gamemodes/vampire/traitor_vamp.dm +++ b/code/game/gamemodes/vampire/traitor_vamp.dm @@ -3,11 +3,13 @@ config_tag = "traitorvamp" traitors_possible = 3 //hard limit on traitors if scaling is turned off protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer") - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("Cyborg") + secondary_restricted_jobs = list("AI") required_players = 10 required_enemies = 1 // how many of each type are required recommended_enemies = 3 - var/protected_species_vampire = list("Machine") + secondary_enemies_scaling = 0.025 + secondary_protected_species = list("Machine") /datum/game_mode/traitor/vampire/announce() to_chat(world, "The current game mode is - Traitor+Vampire!") @@ -19,20 +21,26 @@ restricted_jobs += protected_jobs var/list/datum/mind/possible_vampires = get_players_for_role(ROLE_VAMPIRE) + secondary_enemies = CEILING((secondary_enemies_scaling * num_players()), 1) for(var/mob/new_player/player in GLOB.player_list) - if((player.mind in possible_vampires) && (player.client.prefs.species in protected_species_vampire)) + if((player.mind in possible_vampires) && (player.client.prefs.species in secondary_protected_species)) possible_vampires -= player.mind if(possible_vampires.len > 0) - var/datum/mind/vampire = pick(possible_vampires) - vampires += vampire - modePlayer += vampires - var/datum/mindslaves/slaved = new() - slaved.masters += vampire - vampire.som = slaved //we MIGT want to mindslave someone - vampire.restricted_roles = restricted_jobs - vampire.special_role = SPECIAL_ROLE_VAMPIRE + for(var/I in possible_vampires) + if(length(vampires) >= secondary_enemies) + break + var/datum/mind/vampire = pick(possible_vampires) + vampires += vampire + modePlayer += vampires + possible_vampires -= vampire + var/datum/mindslaves/slaved = new() + slaved.masters += vampire + vampire.som = slaved //we MIGHT want to mindslave someone + vampire.restricted_roles = (restricted_jobs + secondary_restricted_jobs) + vampire.special_role = SPECIAL_ROLE_VAMPIRE + ..() return 1 else