diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index 71c91ca698b3..94cd37264434 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -249,6 +249,13 @@ minimum_players = 25 repeatable = FALSE +/datum/dynamic_ruleset/latejoin/trim_candidates() + . = ..() + for(var/mob/living/carbon/C in candidates) + if(C?.dna?.species && (NOBLOOD in C?.dna?.species.species_traits)) + candidates -= C + continue + /datum/dynamic_ruleset/latejoin/bloodsucker/execute() var/mob/latejoiner = pick(candidates) // This should contain a single player, but in case. assigned += latejoiner.mind diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 5ce8cfc667ef..ebe6e567282e 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -716,6 +716,11 @@ /datum/dynamic_ruleset/midround/bloodsucker/trim_candidates() . = ..() for(var/mob/living/player in living_players) + if(iscarbon(player)) + var/mob/living/carbon/C = player + if(C?.dna?.species && (NOBLOOD in C?.dna?.species.species_traits)) + living_players -= player + continue if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon. living_players -= player else if(is_centcom_level(player.z)) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 1e77f5457622..cba1d34270f3 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -984,6 +984,12 @@ antag_cap = list("denominator" = 24) minimum_players = 25 +/datum/dynamic_ruleset/roundstart/bloodsucker/trim_candidates() + . = ..() + for(var/mob/player in candidates) + if(player?.client?.prefs.pref_species && (NOBLOOD in player.client.prefs.pref_species.species_traits)) + candidates.Remove(player) + /datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute(population) . = ..() var/num_bloodsuckers = get_antag_cap(population) * (scaled_times + 1)