anchor.diff:  /datum/dynamic_ruleset/midround/from_ghosts/proc/setup_role(datum/antagonist/new_role)
   	return
   
  +/// Fired when there are no valid candidates. Will spawn a sleeper agent or latejoin traitor.
  +/datum/dynamic_ruleset/midround/from_ghosts/proc/attempt_replacement()
  +	var/datum/dynamic_ruleset/midround/autotraitor/sleeper_agent = new
  +
  +	// Otherwise, it has a chance to fail. We don't want that, since this is already pretty unlikely.
  +	sleeper_agent.has_failure_chance = FALSE
  +
  +	mode.configure_ruleset(sleeper_agent)
  +
  +	if (!mode.picking_specific_rule(sleeper_agent))
  +		return
  +
  +	mode.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator)
  +
   //////////////////////////////////////////////
   //                                          //
   //           SYNDICATE TRAITORS             //
  
positive.code: 	candidates = pollGhostCandidates("The mode is looking for volunteers to become [antag_flag] for [name]", antag_flag, antag_flag_override ? antag_flag_override : antag_flag, poll_time = 300)
  
  	if(!candidates || candidates.len <= 0)
  		message_admins("The ruleset [name] received no applications.")
  		log_game("DYNAMIC: The ruleset [name] received no applications.")
  		mode.executed_rules -= src
  		return
  
  	message_admins("[candidates.len] players volunteered for the ruleset [name].")
  
negative.code: 	requirements = list(50,40,30,20,10,10,10,10,10,10)
  	repeatable = TRUE
  
  	/// Whether or not this instance of sleeper agent should be randomly acceptable.
  	/// If TRUE, then this has a threat level% chance to succeed.
  	var/has_failure_chance = TRUE
  
  /datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0)
  	var/player_count = GLOB.alive_player_list.len
  	var/antag_count = GLOB.current_living_antags.len
  