A few rebalances and fixes

I'm mostly backing up changes because I'm about to do a giant overhaul and refactor on a hunch.

Why do I do this to myself?
This commit is contained in:
JaySparrow
2020-10-11 09:13:25 -05:00
parent 83bbddf957
commit 132d3bded9
4 changed files with 93 additions and 57 deletions
+2 -2
View File
@@ -40,7 +40,7 @@ GLOBAL_VAR_INIT(dynamic_high_pop_limit, 55)
GLOBAL_VAR_INIT(dynamic_forced_extended, FALSE)
// How high threat is required for HIGHLANDER_RULESETs stacking.
// This is independent of dynamic_no_stacking.
GLOBAL_VAR_INIT(dynamic_stacking_limit, 90)
GLOBAL_VAR_INIT(dynamic_stacking_limit, 101)
// List of forced roundstart rulesets.
GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset)
// Forced threat level, setting this to zero or higher forces the roundstart threat to the value.
@@ -130,7 +130,7 @@ GLOBAL_VAR_INIT(dynamic_chaos_level, 1.5)
dat += "Threat to Spend: <b>[threat]</b> <a href='?src=\ref[src];[HrefToken()];adjustthreat=1'>\[Adjust\]</A> <a href='?src=\ref[src];[HrefToken()];threatlog=1'>\[View Log\]</a><br/>"
dat += "<br/>"
dat += "Parameters: centre = [GLOB.dynamic_curve_centre] ; width = [GLOB.dynamic_curve_width].<br/>"
dat += "<i>On average, <b>[peaceful_percentage]</b>% of the rounds are more peaceful.</i><br/>"
//dat += "<i>On average, <b>[peaceful_percentage]</b>% of the rounds are more peaceful.</i><br/>"
dat += "Forced extended: <a href='?src=\ref[src];[HrefToken()];forced_extended=1'><b>[GLOB.dynamic_forced_extended ? "On" : "Off"]</b></a><br/>"
dat += "Classic secret (only autotraitor): <a href='?src=\ref[src];[HrefToken()];classic_secret=1'><b>[GLOB.dynamic_classic_secret ? "On" : "Off"]</b></a><br/>"
dat += "No stacking (only one round-ender): <a href='?src=\ref[src];[HrefToken()];no_stacking=1'><b>[GLOB.dynamic_no_stacking ? "On" : "Off"]</b></a><br/>"
@@ -102,9 +102,9 @@
typepath = /datum/round_event/pirates
antag_flag = ROLE_TRAITOR
enemy_roles = list("AI","Security Officer","Head of Security","Captain")
required_enemies = list(2,2,1,1,0,0,0,0,0,0)
required_enemies = list(2,2,2,2,1,1,1,1,0,0)
weight = 3
cost = 10
cost = 0
earliest_start = 50 MINUTES
blocking_rules = list(/datum/dynamic_ruleset/roundstart/nuclear,/datum/dynamic_ruleset/midround/from_ghosts/nuclear)
requirements = list(101,30,25,20,20,20,15,10,10,10)
@@ -208,7 +208,7 @@
required_enemies = list(2,2,1,1,0,0,0,0,0,0)
weight = 3
cost = 5
requirements = list(30,30,25,20,15,15,10,10,10,10)
requirements = list(101,20,15,10,10,10,10,10,10,10)
high_population_requirement = 15
//property_weights = list("chaos" = 1, "valid" = 1)
earliest_start = 30 MINUTES //Skyrat change.
@@ -228,9 +228,9 @@
enemy_roles = list("Chemist","Medical Doctor","Chief Medical Officer")
required_enemies = list(1,1,1,1,1,1,0,0,0,0)
cost = 2
weight = 2
weight = 1
repeatable_weight_decrease = 1
requirements = list(101,10,5,5,5,5,5,5,5,5) // yes, can happen on fake-extended
requirements = list(101,101,10,10,5,5,5,5,5,5) // yes, can happen on fake-extended
high_population_requirement = 5
repeatable = TRUE
//property_weights = list("chaos" = 1, "extended" = 2)
@@ -241,12 +241,12 @@
if(mode.threat_level > 30 && mode.threat >= 5 && prob(20))
name = "Clogged Vents: Threatening"
cost = 8
required_enemies = list(3,3,3,2,2,2,1,1,1,1)
required_enemies = list(3,3,3,2,2,2,1,1,0,0)
typepath = /datum/round_event/vent_clog/threatening
else if(mode.threat_level > 15 && mode.threat > 15 && prob(30))
name = "Clogged Vents: Catastrophic"
cost = 15
required_enemies = list(2,2,1,1,1,1,0,0,0,0)
required_enemies = list(4,4,4,3,3,3,2,1,1,0)
typepath = /datum/round_event/vent_clog/catastrophic
else
cost = 0
@@ -305,6 +305,7 @@
name = "Meteor Wave: Threatening"
cost = 10
typepath = /datum/round_event/meteor_wave/threatening
chaos_min = 1.8
else if(world.time-SSticker.round_start_time > 45 MINUTES && mode.threat_level > 50 && mode.threat >= 40 && prob(30))
name = "Meteor Wave: Catastrophic"
cost = 0
@@ -315,6 +316,8 @@
name = "Meteor Wave: Normal"
cost = 5
typepath = /datum/round_event/meteor_wave
chaos_min = 1.0
required_enemies = list(2,2,2,2,1,1,1,1,1,1)
return ..()
//////////////////////////////////////////////
@@ -333,7 +336,7 @@
earliest_start = 20 MINUTES
repeatable_weight_decrease = 2
cost = 3
requirements = list(5,5,5,5,5,5,5,5,5,5)
requirements = list(101,101,5,5,5,5,5,5,5,5)
high_population_requirement = 5
repeatable = TRUE
//property_weights = list("extended" = 1)
@@ -350,7 +353,7 @@
earliest_start = 20 MINUTES
repeatable_weight_decrease = 2
cost = 5
requirements = list(5,5,5,5,5,5,5,5,5,5)
requirements = list(101,5,5,5,5,5,5,5,5,5)
high_population_requirement = 10
repeatable = TRUE
//property_weights = list("extended" = 1)
@@ -380,8 +383,8 @@
repeatable_weight_decrease = 1
cost = 0
enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg")
required_enemies = list(1,1,1,1,1,1,1,1,1,1)
requirements = list(10,10,10,10,10,10,10,10,10,10)
required_enemies = list(2,2,2,2,2,1,1,1,1,1)
requirements = list(101,101,10,10,10,10,10,10,10,10)
high_population_requirement = 10
repeatable = TRUE
//property_weights = list("extended" = 1)
@@ -397,8 +400,8 @@
repeatable_weight_decrease = 1
cost = 5
enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg")
required_enemies = list(1,1,1,1,1,1,1,1,1,1)
requirements = list(10,10,10,10,10,10,10,10,10,10)
required_enemies = list(3,3,3,2,2,2,2,2,2,2)
requirements = list(101,101,10,10,10,10,10,10,10,10)
high_population_requirement = 10
repeatable = TRUE
//property_weights = list("extended" = 1)
@@ -437,10 +440,10 @@
weight = 1
earliest_start = 30 MINUTES
repeatable_weight_decrease = 1
cost = 10
cost = -10
enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg")
required_enemies = list(2,1,1,1,1,1,0,0,0,0)
requirements = list(101,20,20,15,15,10,10,10,10,10)
requirements = list(101,25,20,15,15,15,10,10,10,10)
high_population_requirement = 10
repeatable = TRUE
//property_weights = list("extended" = -1, "chaos" = 1)
@@ -485,8 +488,8 @@
weight = 2
repeatable_weight_decrease = 3
enemy_roles = list("Chief Engineer","Station Engineer")
required_enemies = list(1,1,1,1,1,1,1,1,1,1)
requirements = list(101,101,5,5,5,10,10,10,10,10)
required_enemies = list(2,2,2,2,1,1,1,1,1,1)
requirements = list(101,101,5,5,5,5,5,5,5,5)
high_population_requirement = 5
repeatable = TRUE
//property_weights = list("extended" = 1, "chaos" = 1)
@@ -518,7 +521,7 @@
weight = 2
repeatable_weight_decrease = 1
enemy_roles = list("Chief Engineer","Station Engineer")
required_enemies = list(2,2,2,2,2,2,2,2,2,2)
required_enemies = list(2,2,1,1,1,1,1,1,1,1)
requirements = list(15,10,9,8,7,6,5,4,3,2)
high_population_requirement = 10
repeatable = TRUE
@@ -570,11 +573,11 @@
name = "Portal Storm"
//config_tag = "portal_storm"
typepath = /datum/round_event/portal_storm/syndicate_shocktroop
cost = 10
cost = 0
weight = 1
enemy_roles = list("Head of Security","Security Officer","AI","Captain","Shaft Miner")
required_enemies = list(2,2,2,2,2,2,2,2,2,2)
requirements = list(101,101,40,30,30,30,30,30,30,30)
requirements = list(101,101,40,35,30,30,30,30,25,20)
high_population_requirement = 30
earliest_start = 40 MINUTES
//property_weights = list("teamwork" = 1,"chaos" = 1, "extended" = -1)
@@ -601,7 +604,7 @@
name = "Swarmers"
//config_tag = "swarmer"
typepath = /datum/round_event/spawn_swarmer
cost = 10
cost = 0
weight = 1
earliest_start = 40 MINUTES
enemy_roles = list("AI","Security Officer","Head of Security","Captain","Station Engineer","Atmos Technician","Chief Engineer")
@@ -620,7 +623,7 @@
required_enemies = list(2,1,1,1,1,1,1,0,0,0)
required_candidates = 1
weight = 4
cost = 5
cost = -5
requirements = list(30,30,20,20,15,10,10,10,10,5) // yes, it can even happen in "extended"!
//property_weights = list("story_potential" = 1, "extended" = 1, "valid" = -2)
high_population_requirement = 5
@@ -651,9 +654,18 @@
high_population_requirement = 15
cost = 0
occurances_max = 2
weight = 4
weight = 3
repeatable_weight_decrease = 2
earliest_start = 30 MINUTES
chaos_min = 1.5
var/atom/special_target
/datum/dynamic_ruleset/event/immovable_rod/execute() //I do not know why this is necessary
var/datum/round_event_control/E = locate(/datum/round_event_control/immovable_rod) in SSevents.control
var/datum/round_event/event = E.runEvent() //But it is.
event.announceWhen = -1 //So it isn't double announced.
return ..()
//////////////////////////////////////////////
@@ -696,29 +708,47 @@
requirements = list(0,0,0,0,0,0,0,0,0,0)
high_population_requirement = 0
weight = 100
repeatable_weight_decrease = 1 //Slightly drop the weight each time it is called to keep the pool from getting too diluted as the round goes on.
repeatable = TRUE
occurances_max = 20
//occurances_max = 20 //Our rounds can go for a WHILE
/datum/dynamic_ruleset/event/disease_outbreak
name = "Disease Outbreak"
enemy_roles = list("Virologist","Chief Medical Officer","Captain","Chemist")
required_enemies = list(2,1,1,1,0,0,0,0,0,0)
//required_enemies = list(2,1,1,1,1,1,1,1,0,0)
typepath = /datum/round_event/disease_outbreak
//requirements = list(5,5,5,5,5,5,5,5,5,5)
required_enemies = list(0,0,0,0,0,0,0,0,0,0)
requirements = list(5,5,5,5,5,5,5,5,5,5)
high_population_requirement = 5
weight = 5
weight = 999
cost = 0
repeatable = TRUE
occurances_max = 1
earliest_start = 0 MINUTES
/datum/dynamic_ruleset/event/disease_outbreak/execute() //I do not know why this is necessary
var/datum/round_event_control/E = locate(/datum/round_event_control/disease_outbreak) in SSevents.control
var/datum/round_event/event = E.runEvent() //But it is.
event.announceWhen = -1 //So it isn't double announced.
return ..()
/datum/dynamic_ruleset/event/falsealarm
name = "False Alarm"
typepath = /datum/round_event/falsealarm
requirements = list(0,0,0,0,0,0,0,0,0,0)
high_population_requirement = 0
weight = 20
weight = 999
repeatable = TRUE
occurances_max = 5
earliest_start = 0 MINUTES
/datum/dynamic_ruleset/event/falsealarm/execute() //I do not know why this is necessary
var/datum/round_event_control/E = locate(/datum/round_event_control/falsealarm) in SSevents.control
//var/datum/round_event/event = E.runEvent() //But it is.
//event.announceWhen = -1 //So it isn't double announced.
E.runEvent()
return ..()
/datum/dynamic_ruleset/event/grid_check
name = "Grid Check"
@@ -744,7 +774,7 @@
name = "Mice Migration"
typepath = /datum/round_event/mice_migration
enemy_roles = list("Chief Engineer","Station Engineer","Captain","Cook","Atmospheric Technician")
required_enemies = list(1,1,1,1,1,0,0,0,0,0)
required_enemies = list(1,1,1,1,1,1,0,0,0,0)
requirements = list(5,5,5,5,0,0,0,0,0,0)
high_population_requirement = 0
weight = 10
@@ -760,7 +790,7 @@
requirements = list(101,10,10,10,5,5,5,5,5,5)
high_population_requirement = 0
repeatable = TRUE
weight = 5
weight = 4
repeatable_weight_decrease = 3
occurances_max = 2
@@ -791,8 +821,8 @@
requirements = list(101,101,10,9,8,7,5,5,5,0)
cost = 2
high_population_requirement = 0
weight = 6
repeatable_weight_decrease = 5
weight = 4
repeatable_weight_decrease = 2
earliest_start = 20 MINUTES
repeatable = TRUE
occurances_max = 3
@@ -179,7 +179,7 @@
required_candidates = 1
weight = 7
cost = 10
requirements = list(101,101,40,30,30,30,25,20,20,15)
requirements = list(101,101,30,25,20,20,15,15,15,10)
repeatable = TRUE
high_population_requirement = 10
flags = TRAITOR_RULESET
@@ -194,7 +194,7 @@
required_candidates = 1
weight = 7
cost = 5
requirements = list(30,30,30,25,20,15,10,10,5,5)
requirements = list(101,30,25,20,15,10,10,5,5,5)
repeatable = TRUE
high_population_requirement = 10
flags = TRAITOR_RULESET
@@ -251,8 +251,8 @@
required_enemies = list(4,4,4,4,4,4,2,2,2,0)
required_candidates = 1
weight = 3
cost = 35
requirements = list(101,101,60,55,50,45,40,35,25,20)
cost = 20
requirements = list(101,101,55,50,45,40,35,30,25,20)
high_population_requirement = 35
required_type = /mob/living/silicon/ai
var/ion_announce = 33
@@ -300,14 +300,15 @@
antag_datum = /datum/antagonist/wizard
antag_flag = ROLE_WIZARD
enemy_roles = list("Security Officer","Detective","Head of Security", "Captain")
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_enemies = list(2,2,1,1,1,1,1,1,0,0)
required_candidates = 1
weight = 1
cost = 20
requirements = list(101,101,80,70,60,50,40,30,30,30)
requirements = list(101,101,60,55,50,40,30,30,20,20)
high_population_requirement = 50
repeatable = FALSE //WE DON'T NEED MORE THAN ONE WIZARD
chaos_min = 3.5
chaos_min = 4
admin_required = TRUE
/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
if (required_candidates > (dead_players.len + list_observers.len))
@@ -333,13 +334,13 @@
antag_flag = ROLE_OPERATIVE
antag_datum = /datum/antagonist/nukeop
enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain")
required_enemies = list(3,3,3,3,3,2,1,1,0,0)
required_enemies = list(3,3,3,3,3,2,2,1,1,0)
required_candidates = 5
weight = 5
cost = 35
requirements = list(101,101,101,90,80,70,60,50,50,50)
requirements = list(101,101,100,70,60,50,40,40,40,40)
high_population_requirement = 10
var/operative_cap = list(2,2,3,3,4,5,5,5,5,5)
var/operative_cap = list(2,2,2,2,3,3,4,4,5,5)
var/datum/team/nuclear/nuke_team
flags = HIGHLANDER_RULESET
chaos_min = 4.0
@@ -381,7 +382,7 @@
required_candidates = 1
weight = 4
cost = 20
requirements = list(101,101,70,60,60,60,50,40,30,20)
requirements = list(101,101,60,50,45,40,40,40,30,20)
high_population_requirement = 50
repeatable = TRUE
chaos_min = 3.5
@@ -404,8 +405,8 @@
required_enemies = list(2,2,1,1,1,1,1,0,0,0)
required_candidates = 1
weight = 3
cost = 10
requirements = list(101,101,100,80,70,60,50,40,30,20)
cost = 15
requirements = list(101,101,100,70,60,50,40,40,30,20)
high_population_requirement = 50
repeatable = TRUE
var/list/vents = list()
@@ -501,13 +502,14 @@
required_candidates = 2
weight = 4
cost = 10
requirements = list(101,101,70,50,40,30,30,30,30,30)
requirements = list(101,101,60,50,40,30,20,20,10,10)
blocking_rules = list(/datum/dynamic_ruleset/roundstart/nuclear,/datum/dynamic_ruleset/midround/from_ghosts/nuclear)
high_population_requirement = 15
var/datum/team/abductor_team/team
//property_weights = list("extended" = -2, "valid" = 1, "trust" = -1, "chaos" = 2)
repeatable_weight_decrease = 4
repeatable = TRUE
chaos_min = 2.0
/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE)
team = new /datum/team/abductor_team
@@ -547,6 +549,7 @@
//property_weights = list("story_potential" = 1, "extended" = -2, "valid" = 2)
var/list/spawn_locs = list()
var/spawn_loc
chaos_min = 3.0
/datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE)
if(!spawn_loc)
@@ -16,10 +16,11 @@
required_candidates = 1
weight = 5
cost = 10
requirements = list(101,50,45,40,35,30,25,20,20,20)
requirements = list(101,40,30,25,20,20,15,15,15,15)
high_population_requirement = 10
var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec)
chaos_min = 2.5
chaos_max = 4.5
/datum/dynamic_ruleset/roundstart/traitor/thief //The steal only version
name = "Thief Traitors"
@@ -32,7 +33,7 @@
//required_candidates = 1
//weight = 5
cost = 0
requirements = list(40,30,30,25,20,15,15,10,10,5)
requirements = list(101,25,25,20,20,15,15,10,10,5)
high_population_requirement = 10
//var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec)
chaos_min = 2.0
@@ -185,7 +186,8 @@
required_candidates = 1
weight = 3
cost = 30
requirements = list(101,101,80,60,40,40,30,30,20,10)
//requirements = list(101,101,60,50,40,40,30,30,20,10)
requirements = list(101,101,101,101,101,101,101,101,101,101) //Disabled until the size problem is fixed
high_population_requirement = 10
var/team_mode_probability = 30
chaos_min = 3.0
@@ -235,10 +237,11 @@
required_candidates = 1
weight = 1
cost = 30
requirements = list(101,101,101,80,60,50,40,30,30,20)
requirements = list(101,101,60,50,40,40,30,30,30,20)
high_population_requirement = 10
var/list/roundstart_wizards = list()
chaos_min = 3.5
chaos_min = 4
admin_required = TRUE
/datum/dynamic_ruleset/roundstart/wizard/acceptable(population=0, threat=0)
if(GLOB.wizardstart.len == 0)
@@ -280,7 +283,7 @@
restricted_roles = list("AI", "Cyborg")
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director")
required_candidates = 2
weight = 3
weight = 2
cost = 30
requirements = list(101,101,101,95,70,60,60,60,50,50)
high_population_requirement = 10
@@ -343,12 +346,12 @@
restricted_roles = list("Head of Security", "Captain") // Just to be sure that a nukie getting picked won't ever imply a Captain or HoS not getting drafted
required_candidates = 5
weight = 3
cost = 40
requirements = list(101,101,100,90,85,70,50,30,30,20)
cost = 20
requirements = list(101,100,90,80,70,60,50,40,30,20)
high_population_requirement = 10
pop_per_requirement = 5
flags = HIGHLANDER_RULESET
var/operative_cap = list(2,2,2,3,3,3,4,4,5,5)
var/operative_cap = list(2,2,2,2,2,3,3,3,4,5)
var/datum/team/nuclear/nuke_team
chaos_min = 4.0
@@ -679,7 +682,7 @@
required_candidates = 1
weight = 3
cost = 0
requirements = list(101,101,101,101,101,101,101,101,101,101)
requirements = list(101,101,101,101,101,101,101,101,101,101) //Disabled due to being an RP heavy antag
high_population_requirement = 101
var/devil_limit = 4 // Hard limit on devils if scaling is turned off
admin_required = TRUE