diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 36ee4d4f..69baaa58 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -770,10 +770,27 @@ repeatable = FALSE chaos_min = 4.0 +datum/dynamic_ruleset/midround/bloodsucker/trim_candidates() + ..() + for(var/mob/living/player in living_players) + if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon. + living_players -= player + continue + if(is_centcom_level(player.z)) + living_players -= player // We don't autotator people in CentCom + continue + if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) + living_players -= player // We don't autotator people with roles already + +/datum/dynamic_ruleset/midround/bloodsucker/ready(forced = FALSE) + if (required_candidates > living_players.len) + return FALSE + return ..() + /datum/dynamic_ruleset/midround/bloodsucker/execute() - var/mob/M = pick(candidates) - assigned += M.mind - M.mind.special_role = antag_flag - if(mode.make_bloodsucker(M.mind)) - mode.bloodsuckers += M - return TRUE + var/mob/M = pick(living_players) + assigned += M + living_players -= M + var/datum/antagonist/bloodsucker/newVamp = new + M.mind.add_antag_datum(newVamp) + return TRUE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index ad71f37e..bafccca2 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -847,7 +847,7 @@ requirements = list(101,101,101,70,60,60,50,50,50,40) high_population_requirement = 10 chaos_min = 4.0 - chaos_max = 4.9 + /datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute() var/num_bloodsuckers = min(round(mode.candidates.len / 10) +1, candidates.len) @@ -858,9 +858,10 @@ M.mind.restricted_roles = restricted_roles return TRUE -/datum/dynamic_ruleset/roundstart/bloodsucker/execute() - mode.check_start_sunlight() - for(var/datum/mind/M in assigned) - if(mode.make_bloodsucker(M)) - mode.bloodsuckers += M + +/datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute() + var/mob/M = pick_n_take(candidates) + assigned += M.mind + M.mind.special_role = ROLE_BLOODSUCKER + M.mind.restricted_roles = restricted_roles return TRUE