diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index b62befc88c..0052306949 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -382,6 +382,70 @@ else return ..() +////////////////////////////////////////////// +// // +// Clock Cult (MID) // +// // +////////////////////////////////////////////// + + +//changes two people midround into clockwork cultists +/datum/dynamic_ruleset/midround/ratvar_awakening + name = "Ratvar Awakening" + antag_datum = /datum/antagonist/clockcult + antag_flag = "clock mid" + antag_flag_override = ROLE_SERVANT_OF_RATVAR + protected_roles = list("AI", "Cyborg", "Prisoner", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Chaplain", "Head of Personnel", "Quartermaster", "Chief Engineer", "Chief Medical Officer", "Research Director") + restricted_roles = list("AI", "Cyborg", "Prisoner", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Chaplain", "Head of Personnel", "Quartermaster", "Chief Engineer", "Chief Medical Officer", "Research Director") + enemy_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Chaplain", "Head of Personnel", "Quartermaster", "Chief Engineer", "Chief Medical Officer", "Research Director") + required_enemies = list(1,1,1,1,1,1,0,0,0,0) + required_candidates = 2 + weight = 3 + cost = 20 + requirements = list(101,101,101,101,50,40,30,20,10,10) + var/list/clock_cap = list(1,1,1,1,2,3,4,5,5,5) + flags = HIGH_IMPACT_RULESET + +/datum/dynamic_ruleset/midround/ratvar_awakening/acceptable(population=0, threat=0) + if (locate(/datum/dynamic_ruleset/roundstart/clockcult) in mode.executed_rules) + return FALSE // Unavailable if clockies exist at round start + indice_pop = min(clock_cap.len, round(living_players.len/5)+1) + required_candidates = clock_cap[indice_pop] + return ..() + +/datum/dynamic_ruleset/midround/ratvar_awakening/trim_candidates() + ..() + candidates = living_players + for(var/mob/living/player as anything in candidates) + var/turf/player_turf = get_turf(player) + if(!player_turf || !is_station_level(player_turf.z)) + candidates -= player //no ghost roles + continue + + if(!is_eligible_servant(player)) + candidates -= player + continue + + if(player.mind && (player.mind.special_role || length(player.mind.antag_datums) > 0)) + candidates -= player //no double dipping + +/datum/dynamic_ruleset/midround/ratvar_awakening/execute() + if(!candidates || !candidates.len) + return FALSE + for(var/i = 0; i < required_candidates; i++) + if(!candidates.len) + break + var/mob/living/clock_antag = pick_n_take(candidates) + assigned += clock_antag.mind + for(var/datum/mind/M in assigned) //add them to the clockwork team + add_servant_of_ratvar(M.current) + SSticker.mode.equip_servant(M.current) + SSticker.mode.greet_servant(M.current) + message_admins("[ADMIN_LOOKUPFLW(M.current)] was selected by the [name] ruleset and has been made into a midround clock cultist.") + log_game("DYNAMIC: [key_name(M.current)] was selected by the [name] ruleset and has been made into a midround clock cultist.") + load_reebe() + return ..() + ////////////////////////////////////////////// // // // BLOB (GHOST) //