/datum/game_mode var/list/datum/mind/brothers = list() var/list/datum/team/brother_team/brother_teams = list() /datum/game_mode/traitor/bros name = "traitor+brothers" config_tag = "traitorbro" required_players = 25 chaos = 5 restricted_jobs = list("Prisoner", "AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") announce_span = "danger" announce_text = "There are Syndicate agents and Blood Brothers on the station!\n\ Traitors: Accomplish your objectives.\n\ Blood Brothers: Accomplish your objectives.\n\ Crew: Do not let the traitors or brothers succeed!" var/list/datum/team/brother_team/pre_brother_teams = list() var/const/team_amount = 2 //hard limit on brother teams if scaling is turned off var/const/min_team_size = 2 traitors_required = FALSE //Only teams are possible /datum/game_mode/traitor/bros/pre_setup() if(CONFIG_GET(flag/protect_roles_from_antagonist)) restricted_jobs += protected_jobs if(CONFIG_GET(flag/protect_assistant_from_antagonist)) restricted_jobs += "Assistant" var/list/datum/mind/possible_brothers = get_players_for_role(ROLE_BROTHER) var/num_teams = team_amount var/bsc = CONFIG_GET(number/brother_scaling_coeff) if(bsc) num_teams = max(1, round(num_players() / bsc)) for(var/j = 1 to num_teams) if(possible_brothers.len < min_team_size || antag_candidates.len <= required_enemies) break var/datum/team/brother_team/team = new var/team_size = prob(10) ? min(3, possible_brothers.len) : 2 for(var/k = 1 to team_size) var/datum/mind/bro = antag_pick(possible_brothers) possible_brothers -= bro antag_candidates -= bro team.add_member(bro) bro.special_role = "brother" bro.restricted_roles = restricted_jobs log_game("[key_name(bro)] has been selected as a Brother") pre_brother_teams += team return ..() /datum/game_mode/traitor/bros/post_setup() for(var/datum/team/brother_team/team in pre_brother_teams) team.pick_meeting_area() team.forge_brother_objectives() for(var/datum/mind/M in team.members) M.add_antag_datum(/datum/antagonist/brother, team) team.update_name() brother_teams += pre_brother_teams return ..() /datum/game_mode/traitor/bros/generate_report() return "It's Syndicate recruiting season. Be alert for potential Syndicate infiltrators, but also watch out for disgruntled employees trying to defect. Unlike GATO, the Syndicate prides itself in teamwork and will only recruit pairs that share a brotherly trust." //GS13 - Nanotrasen to GATO /datum/game_mode/proc/update_brother_icons_added(datum/mind/brother_mind) var/datum/atom_hud/antag/brotherhud = GLOB.huds[ANTAG_HUD_BROTHER] brotherhud.join_hud(brother_mind.current) set_antag_hud(brother_mind.current, "brother") /datum/game_mode/proc/update_brother_icons_removed(datum/mind/brother_mind) var/datum/atom_hud/antag/brotherhud = GLOB.huds[ANTAG_HUD_BROTHER] brotherhud.leave_hud(brother_mind.current) set_antag_hud(brother_mind.current, null)