diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index 8dc115a94a..9a50eae3cc 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -674,6 +674,14 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
return TRUE
return FALSE
+/datum/game_mode/dynamic/proc/check_age(client/C, age)
+ enemy_minimum_age = age
+ if(get_remaining_days(C) == 0)
+ enemy_minimum_age = initial(enemy_minimum_age)
+ return TRUE // Available in 0 days = available right now = player is old enough to play.
+ enemy_minimum_age = initial(enemy_minimum_age)
+ return FALSE
+
/datum/game_mode/dynamic/make_antag_chance(mob/living/carbon/human/newPlayer)
if (GLOB.dynamic_forced_extended)
return
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm
index 08aedc2e7b..ef3773b7b6 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm
@@ -199,7 +199,7 @@
candidates.Remove(candidate_player)
continue
- if(candidate_client.check_age(minimum_required_age) > 0)
+ else if(!mode.check_age(client, minimum_required_age))
candidates.Remove(candidate_player)
continue
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
index b23061db9d..9f0f041cda 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
@@ -8,7 +8,7 @@
for(var/mob/P in candidates)
if(!P.client || !P.mind || !P.mind.assigned_role) // Are they connected?
candidates.Remove(P)
- else if (!mode.check_age(P.client, minimum_required_age))
+ else if(!mode.check_age(P.client, minimum_required_age))
candidates.Remove(P)
else if(P.mind.assigned_role in restricted_roles) // Does their job allow for it?
candidates.Remove(P)
diff --git a/code/game/gamemodes/dynamic/ruleset_picking.dm b/code/game/gamemodes/dynamic/ruleset_picking.dm
index b92bce5522..678c4fdedc 100644
--- a/code/game/gamemodes/dynamic/ruleset_picking.dm
+++ b/code/game/gamemodes/dynamic/ruleset_picking.dm
@@ -63,13 +63,14 @@
if (!rule.repeatable)
latejoin_rules = remove_from_list(latejoin_rules, rule.type)
addtimer(CALLBACK(src, .proc/execute_midround_latejoin_rule, rule), rule.delay)
+ return TRUE
/// Mainly here to facilitate delayed rulesets. All midround/latejoin rulesets are executed with a timered callback to this proc.
/datum/game_mode/dynamic/proc/execute_midround_latejoin_rule(sent_rule)
var/datum/dynamic_ruleset/rule = sent_rule
spend_midround_budget(rule.cost)
threat_log += "[worldtime2text()]: [rule.ruletype] [rule.name] spent [rule.cost]"
- rule.pre_execute(current_players[CURRENT_LIVING_PLAYERS].len)
+ rule.pre_execute(GLOB.alive_player_list.len)
if (rule.execute())
log_game("DYNAMIC: Injected a [rule.ruletype == "latejoin" ? "latejoin" : "midround"] ruleset [rule.name].")
if(rule.flags & HIGH_IMPACT_RULESET)
@@ -93,7 +94,7 @@
/// Fired when an admin cancels the current midround injection.
/datum/game_mode/dynamic/proc/admin_cancel_midround(mob/user, timer_id)
if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id))
- to_chat(user, "Too late!")
+ to_chat(user, span_notice("Too late!"))
return
log_admin("[key_name(user)] cancelled the next midround injection.")
@@ -104,7 +105,7 @@
/// Fired when an admin requests a different midround injection.
/datum/game_mode/dynamic/proc/admin_different_midround(mob/user, timer_id)
if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id))
- to_chat(user, "Too late!")
+ to_chat(user, span_notice("Too late!"))
return
midround_injection_timer_id = null