mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 01:49:19 +00:00
72 lines
2.9 KiB
Plaintext
72 lines
2.9 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")
|
|
|
|
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("[bro.key] (ckey) 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 Nanotrasen, 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)
|