Initial stuff.

This commit is contained in:
Ghommie
2019-11-10 06:30:47 +01:00
parent c6550291b9
commit 3ddbee8878
5 changed files with 87 additions and 149 deletions
@@ -25,8 +25,7 @@
var/traitor_scaling_coeff = 10 - max(0,round(mode.threat_level/10)-5) // Above 50 threat level, coeff goes down by 1 for every 10 levels
var/num_traitors = min(round(mode.candidates.len / traitor_scaling_coeff) + 1, candidates.len)
for (var/i = 1 to num_traitors)
var/mob/M = pick(candidates)
candidates -= M
var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.special_role = ROLE_TRAITOR
M.mind.restricted_roles = restricted_roles
@@ -67,7 +66,7 @@
var/num_teams = team_amount
var/bsc = CONFIG_GET(number/brother_scaling_coeff)
if(bsc)
num_teams = max(1, round(num_players() / bsc))
num_teams = max(1, round(mode.roundstart_pop_ready / bsc))
for(var/j = 1 to num_teams)
if(candidates.len < min_team_size || candidates.len < required_candidates)
@@ -75,8 +74,7 @@
var/datum/team/brother_team/team = new
var/team_size = prob(10) ? min(3, candidates.len) : 2
for(var/k = 1 to team_size)
var/mob/bro = pick(candidates)
candidates -= bro
var/mob/bro = pick_n_take(candidates)
assigned += bro.mind
team.add_member(bro.mind)
bro.mind.special_role = "brother"
@@ -117,8 +115,7 @@
/datum/dynamic_ruleset/roundstart/changeling/pre_execute()
var/num_changelings = min(round(mode.candidates.len / 10) + 1, candidates.len)
for (var/i = 1 to num_changelings)
var/mob/M = pick(candidates)
candidates -= M
var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.restricted_roles = restricted_roles
M.mind.special_role = ROLE_CHANGELING
@@ -175,9 +172,8 @@
if(GLOB.wizardstart.len == 0)
return FALSE
var/mob/M = pick(candidates)
var/mob/M = pick_n_take(candidates)
if (M)
candidates -= M
assigned += M.mind
M.mind.assigned_role = ROLE_WIZARD
M.mind.special_role = ROLE_WIZARD
@@ -225,8 +221,7 @@
for(var/cultists_number = 1 to cultists)
if(candidates.len <= 0)
break
var/mob/M = pick(candidates)
candidates -= M
var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.special_role = ROLE_CULTIST
M.mind.restricted_roles = restricted_roles
@@ -288,8 +283,7 @@
for(var/operatives_number = 1 to operatives)
if(candidates.len <= 0)
break
var/mob/M = pick(candidates)
candidates -= M
var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.assigned_role = "Nuclear Operative"
M.mind.special_role = "Nuclear Operative"
@@ -347,7 +341,7 @@
// //
//////////////////////////////////////////////
/datum/dynamic_ruleset/roundstart/delayed/revs
/datum/dynamic_ruleset/roundstart/revs
name = "Revolution"
config_tag = "revolution"
persistent = TRUE
@@ -358,47 +352,48 @@
restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 3
weight = 2
delay = 7 MINUTES
cost = 35
requirements = list(101,101,70,40,30,20,10,10,10,10)
high_population_requirement = 10
delay = 5 MINUTES
flags = HIGHLANDER_RULESET
// I give up, just there should be enough heads with 35 players...
minimum_players = 35
var/datum/team/revolution/revolution
var/finished = 0
/datum/dynamic_ruleset/roundstart/delayed/revs/execute()
var/max_canditates = 4
revolution = new()
/datum/dynamic_ruleset/roundstart/revs/pre_execute()
var/max_canditates = 3
for(var/i = 1 to max_canditates)
if(candidates.len <= 0)
break
var/mob/M = pick(candidates)
candidates -= M
var/mob/M = pick_n_take(candidates)
assigned += M.mind
M.mind.restricted_roles = restricted_roles
M.mind.special_role = antag_flag
return TRUE
/datum/dynamic_ruleset/roundstart/revs/execute()
revolution = new()
for(var/datum/mind/M in assigned)
var/datum/antagonist/rev/head/new_head = new antag_datum()
new_head.give_flash = TRUE
new_head.give_hud = TRUE
new_head.remove_clumsy = TRUE
M.mind.add_antag_datum(new_head,revolution)
M.add_antag_datum(new_head,revolution)
revolution.update_objectives()
revolution.update_heads()
SSshuttle.registerHostileEnvironment(src)
return TRUE
/datum/dynamic_ruleset/roundstart/delayed/revs/rule_process()
/datum/dynamic_ruleset/roundstart/revs/rule_process()
if(check_rev_victory())
finished = 1
else if(check_heads_victory())
finished = 2
return
/datum/dynamic_ruleset/roundstart/delayed/revs/check_finished()
/datum/dynamic_ruleset/roundstart/revs/check_finished()
if(CONFIG_GET(keyed_list/continuous)["revolution"])
if(finished)
SSshuttle.clearHostileEnvironment(src)
@@ -408,13 +403,13 @@
else
return ..()
/datum/dynamic_ruleset/roundstart/delayed/revs/proc/check_rev_victory()
/datum/dynamic_ruleset/roundstart/revs/proc/check_rev_victory()
for(var/datum/objective/mutiny/objective in revolution.objectives)
if(!(objective.check_completion()))
return FALSE
return TRUE
/datum/dynamic_ruleset/roundstart/delayed/revs/proc/check_heads_victory()
/datum/dynamic_ruleset/roundstart/revs/proc/check_heads_victory()
for(var/datum/mind/rev_mind in revolution.head_revolutionaries())
var/turf/T = get_turf(rev_mind.current)
if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z))
@@ -422,7 +417,7 @@
return FALSE
return TRUE
/datum/dynamic_ruleset/roundstart/delayed/revs/round_result()
/datum/dynamic_ruleset/roundstart/revs/round_result()
if(finished == 1)
SSticker.mode_result = "win - heads killed"
SSticker.news_report = REVS_WIN
@@ -487,14 +482,13 @@
PM.initTemplateBounds()
var/starter_servants = 4
var/number_players = num_players()
var/number_players = mode.roundstart_pop_ready
if(number_players > 30)
number_players -= 30
starter_servants += round(number_players / 10)
starter_servants = min(starter_servants, 8)
for (var/i in 1 to starter_servants)
var/mob/servant = pick(candidates)
candidates -= servant
var/mob/servant = pick_n_take(candidates)
assigned += servant.mind
servant.mind.assigned_role = ROLE_SERVANT_OF_RATVAR
servant.mind.special_role = ROLE_SERVANT_OF_RATVAR
@@ -610,16 +604,15 @@
var/num_devils = 1
if(tsc)
num_devils = max(required_candidates, min(round(num_players() / (tsc * 3)) + 2, round(num_players() / (tsc * 1.5))))
num_devils = max(required_candidates, min(round(mode.roundstart_pop_ready / (tsc * 3)) + 2, round(mode.roundstart_pop_ready / (tsc * 1.5))))
else
num_devils = max(required_candidates, min(num_players(), devil_limit))
num_devils = max(required_candidates, min(mode.roundstart_pop_ready, devil_limit))
for(var/j = 0, j < num_devils, j++)
if (!candidates.len)
break
var/mob/devil = pick(candidates)
assigned += devil
candidates -= devil
var/mob/devil = pick_n_take(candidates)
assigned += devil.mind
devil.mind.special_role = ROLE_DEVIL
devil.mind.restricted_roles = restricted_roles
@@ -668,13 +661,12 @@
var/datum/team/monkey/monkey_team
/datum/dynamic_ruleset/roundstart/monkey/pre_execute()
var/carriers_to_make = max(round(num_players()/players_per_carrier, 1), 1)
var/carriers_to_make = max(round(mode.roundstart_pop_ready / players_per_carrier, 1), 1)
for(var/j = 0, j < carriers_to_make, j++)
if (!candidates.len)
break
var/mob/carrier = pick(candidates)
candidates -= carrier
var/mob/carrier = pick_n_take(candidates)
assigned += carrier.mind
carrier.mind.special_role = "Monkey Leader"
carrier.mind.restricted_roles = restricted_roles