diff --git a/code/game/gamemodes/antagonist/alien/xenomorph.dm b/code/game/gamemodes/antagonist/alien/xenomorph.dm index b749b1c7112..b219b523659 100644 --- a/code/game/gamemodes/antagonist/alien/xenomorph.dm +++ b/code/game/gamemodes/antagonist/alien/xenomorph.dm @@ -2,6 +2,7 @@ var/datum/antagonist/xenos/xenomorphs /datum/antagonist/xenos id = MODE_XENOMORPH + role_type = BE_ALIEN role_text = "Xenomorph" role_text_plural = "Xenomorphs" mob_path = /mob/living/carbon/alien/larva diff --git a/code/game/gamemodes/antagonist/antagonist.dm b/code/game/gamemodes/antagonist/antagonist.dm index f3eff484b29..dd7196d93de 100644 --- a/code/game/gamemodes/antagonist/antagonist.dm +++ b/code/game/gamemodes/antagonist/antagonist.dm @@ -154,11 +154,14 @@ var/global/list/antag_names_to_ids = list() /datum/antagonist/proc/attempt_spawn(var/lower_count, var/upper_count, var/ghosts_only) + world << "Attempting to spawn [id]." + var/main_type if(ticker && ticker.mode) if(ticker.mode.antag_tag && ticker.mode.antag_tag == id) main_type = 1 else + world << "Ticker uninitialized, failed." return 0 var/cur_max = (main_type ? max_antags_round : max_antags) @@ -166,6 +169,7 @@ var/global/list/antag_names_to_ids = list() cur_max = Clamp((ticker.mode.num_players()/ticker.mode.antag_scaling_coeff), 1, cur_max) if(get_antag_count() >= cur_max) + world << "Antag count: [get_antag_count()] greater than [cur_max], failed." return 0 // Sanity. @@ -188,15 +192,22 @@ var/global/list/antag_names_to_ids = list() // Get the raw list of potential players. var/req_num = 0 - var/list/candidates = ticker.mode.get_players_for_role(role_type) + var/list/candidates = ticker.mode.get_players_for_role(role_type, id) + if(!candidates) candidates = list() + + world << "Candidate count is [candidates.len]." // Prune restricted jobs and status. for(var/datum/mind/player in candidates) if((ghosts_only && !istype(player.current, /mob/dead)) || (player.assigned_role in restricted_jobs)) + world << "Removing [player.name]." candidates -= player + world << "Candidate count is now [candidates.len]." + // Update our boundaries. if((!candidates.len) || candidates.len < lower_count) + world << "[candidates.len] not set or below [lower_count], failed." return 0 else if(candidates.len < upper_count) req_num = candidates.len @@ -229,6 +240,7 @@ var/global/list/antag_names_to_ids = list() else command_announcement.Announce("[spawn_announcement]", "[spawn_announcement_title ? spawn_announcement_title : "Priority Alert"]") + world << "Success." return 1 /datum/antagonist/proc/apply(var/datum/mind/player) diff --git a/code/game/gamemodes/antagonist/outsider/deathsquad.dm b/code/game/gamemodes/antagonist/outsider/deathsquad.dm index 9233589bf22..be482b5d2c3 100644 --- a/code/game/gamemodes/antagonist/outsider/deathsquad.dm +++ b/code/game/gamemodes/antagonist/outsider/deathsquad.dm @@ -2,6 +2,7 @@ var/datum/antagonist/deathsquad/deathsquad /datum/antagonist/deathsquad id = MODE_DEATHSQUAD + role_type = BE_OPERATIVE role_text = "Death Commando" role_text_plural = "Death Commandos" welcome_text = "You work in the service of Central Command Asset Protection, answering directly to the Board of Directors." diff --git a/code/game/gamemodes/antagonist/outsider/ert.dm b/code/game/gamemodes/antagonist/outsider/ert.dm index 11b0c137c7f..ce1ba743c09 100644 --- a/code/game/gamemodes/antagonist/outsider/ert.dm +++ b/code/game/gamemodes/antagonist/outsider/ert.dm @@ -3,6 +3,7 @@ var/datum/antagonist/ert/ert /datum/antagonist/ert id = MODE_ERT bantype = "Emergency Response Team" + role_type = BE_OPERATIVE role_text = "Emergency Responder" role_text_plural = "Emergency Responders" welcome_text = "As member of the Emergency Response Team, you answer only to your leader and CentComm officials." diff --git a/code/game/gamemodes/antagonist/station/rogue_ai.dm b/code/game/gamemodes/antagonist/station/rogue_ai.dm index f016706f6ee..f4a44b88fe8 100644 --- a/code/game/gamemodes/antagonist/station/rogue_ai.dm +++ b/code/game/gamemodes/antagonist/station/rogue_ai.dm @@ -35,7 +35,7 @@ var/datum/antagonist/rogue_ai/malf /datum/antagonist/rogue_ai/attempt_spawn() - var/list/candidates = ticker.mode.get_players_for_role(role_type) + var/list/candidates = ticker.mode.get_players_for_role(role_type, id) for(var/datum/mind/player in candidates) if(player.assigned_role != "AI") candidates -= player diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index cc9150de8e4..06f6f979f15 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -241,12 +241,11 @@ var/global/list/additional_antag_types = list() playerC++ if(master_mode=="secret") - if(playerC >= required_players_secret) - return 1 + if(playerC < required_players_secret) + return 0 else - if(playerC >= required_players) - return 1 - return 0 + if(playerC < required_players) + return 0 // Ensure we can spawn at least the voted roundtype main antagonist type after scaling the max antag counts. // If we can, -try- to spawn the other voted antagonist types. It doesn't really matter if we can't. @@ -255,9 +254,9 @@ var/global/list/additional_antag_types = list() if(main_antags.attempt_spawn(required_enemies)) for(var/datum/antagonist/antag in (antag_templates-main_antags)) antag.attempt_spawn() - else - return 0 - return 1 + return 1 + + return 0 ///pre_setup() ///Attempts to select players for special roles the mode might have. @@ -560,15 +559,11 @@ var/global/list/additional_antag_types = list() comm.messagetext.Add(intercepttext) world << sound('sound/AI/commandreport.ogg') -/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0) +/datum/game_mode/proc/get_players_for_role(var/role, var/antag_id) var/list/players = list() var/list/candidates = list() - var/datum/antagonist/antag_template - for(var/datum/antagonist/antag in all_antag_types) - if(antag.role_type == role) - antag_template = antag - break + var/datum/antagonist/antag_template = all_antag_types[antag_id] if(!antag_template) return candidates @@ -584,7 +579,7 @@ var/global/list/additional_antag_types = list() // Get a list of all the people who want to be the antagonist for this round for(var/mob/new_player/player in players) - if(player.client.prefs.be_special & role) + if(!role || (player.client.prefs.be_special & role)) log_debug("[player.key] had [roletext] enabled, so we are drafting them.") candidates += player.mind players -= player diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index ea9f1602dc3..85cbf3a7052 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -3,7 +3,7 @@ round_description = "There is a SPACE WIZARD on the station. You can't let them achieve their objectives!" extended_round_description = "A powerful entity capable of manipulating the elements around him, most commonly referred to as a 'wizard', has infiltrated the station. They have a wide variety of powers and spells available to them that makes your own simple moral self tremble with fear and excitement. Ultimately, their purpose is unknown. However, it is up to you and your crew to decide if their powers can be used for good or if their arrival foreshadows the destruction of the entire station." config_tag = "wizard" - required_players = 2 + required_players = 1 required_players_secret = 10 required_enemies = 1 uplink_welcome = "Wizardly Uplink Console:"