mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-20 04:17:45 +01:00
73 lines
3.0 KiB
Plaintext
73 lines
3.0 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"
|
|
restricted_jobs = list("AI", "Cyborg")
|
|
protected_jobs = list("Rookie", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Quartermaster", "Chief Engineer", "Research Director")
|
|
|
|
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."
|
|
|
|
/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)
|