10ef9e374a
I know it's a mess, but the least I can do is add comments anywhere I can
75 lines
3.1 KiB
Plaintext
75 lines
3.1 KiB
Plaintext
/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\
|
|
<span class='danger'>Traitors</span>: Accomplish your objectives.\n\
|
|
<span class='danger'>Blood Brothers</span>: Accomplish your objectives.\n\
|
|
<span class='notice'>Crew</span>: 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)
|