Readjusted weight; added min/max config options

This commit is contained in:
Putnam
2020-12-18 20:24:30 -08:00
parent 5c7ddaeedd
commit 5e8f76792e
4 changed files with 44 additions and 14 deletions

View File

@@ -388,6 +388,8 @@ Example config:
var/list/probabilities = Get(/datum/config_entry/keyed_list/storyteller_weight)
var/list/repeated_mode_adjust = Get(/datum/config_entry/number_list/repeated_mode_adjust)
var/list/min_player_counts = Get(/datum/config_entry/keyed_list/storyteller_min_players)
var/list/storyteller_min_chaos = Get(/datum/config_entry/keyed_list/storyteller_min_chaos)
var/list/storyteller_max_chaos = Get(/datum/config_entry/keyed_list/storyteller_max_chaos)
for(var/T in storyteller_cache)
var/datum/dynamic_storyteller/S = T
var/config_tag = initial(S.config_tag)
@@ -399,6 +401,13 @@ Example config:
continue
if(length(GLOB.player_list) < min_players)
continue
if(!Get(/datum/config_entry/flag/no_storyteller_threat_removal))
var/min_chaos = (probabilities in storyteller_min_chaos) ? storyteller_min_chaos[config_tag] : initial(S.min_chaos)
var/max_chaos = (probabilities in storyteller_max_chaos) ? storyteller_max_chaos[config_tag] : initial(S.max_chaos)
if(SSpersistence.average_dynamic_threat < min_chaos)
continue
if(SSpersistence.average_dynamic_threat > max_chaos)
continue
if(SSpersistence.saved_storytellers.len == repeated_mode_adjust.len)
var/name = initial(S.name)
var/recent_round = min(SSpersistence.saved_storytellers.Find(name),3)

View File

@@ -1,5 +1,7 @@
/datum/config_entry/flag/dynamic_voting
/datum/config_entry/flag/no_storyteller_threat_removal
/datum/config_entry/number/dynamic_high_pop_limit
config_entry_value = 55
min_val = 1
@@ -96,3 +98,11 @@
/datum/config_entry/keyed_list/storyteller_min_players
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_NUM
/datum/config_entry/keyed_list/storyteller_min_chaos
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_NUM
/datum/config_entry/keyed_list/storyteller_max_chaos
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_NUM

View File

@@ -15,7 +15,9 @@
*/
var/flags = 0
var/dead_player_weight = 1 // How much dead players matter for threat calculation
var/weight = 3 // Weights for randomly picking storyteller. Multiplied by score after voting.
var/weight = 0 // Weights for randomly picking storyteller. Multiplied by score after voting.
var/min_chaos = -1000 // Won't show up if recent rounds have been below this chaotic on average
var/max_chaos = 1000 // Won't show up if recent rounds have been above this chaotic on average
var/event_frequency_lower = 6 MINUTES // How rare events will be, at least.
var/event_frequency_upper = 20 MINUTES // How rare events will be, at most.
var/min_players = -1 // How many players are required for this one to start.
@@ -212,6 +214,7 @@ Property weights are added to the config weight of the ruleset. They are:
weight = 1
event_frequency_lower = 2 MINUTES
event_frequency_upper = 10 MINUTES
max_chaos = 50
flags = WAROPS_ALWAYS_ALLOWED | FORCE_IF_WON
min_players = 30
var/refund_cooldown = 0
@@ -234,12 +237,13 @@ Property weights are added to the config weight of the ruleset. They are:
desc = "Modes where the crew must band together. Nukies, xenos, blob. Only one antag threat at once."
curve_centre = 2
curve_width = 1.5
weight = 2
weight = 4
max_chaos = 75
min_players = 20
flags = WAROPS_ALWAYS_ALLOWED | USE_PREV_ROUND_WEIGHTS
property_weights = list("valid" = 3, "trust" = 5)
/datum/dynamic_storyteller/chaotic/minor_start_chance()
/datum/dynamic_storyteller/team/minor_start_chance()
return 0
/datum/dynamic_storyteller/team/should_inject_antag(dry_run = FALSE)
@@ -255,13 +259,14 @@ Property weights are added to the config weight of the ruleset. They are:
flags = WAROPS_ALWAYS_ALLOWED
property_weights = list("valid" = 1, "conversion" = 20)
/datum/dynamic_storyteller/chaotic/minor_start_chance()
/datum/dynamic_storyteller/conversion/minor_start_chance()
return 0
/datum/dynamic_storyteller/random
name = "Random"
config_tag = "random"
weight = 1
max_chaos = 60
desc = "No weighting at all; every ruleset has the same chance of happening. Cooldowns vary wildly. As random as it gets."
/datum/dynamic_storyteller/random/on_start()
@@ -274,7 +279,7 @@ Property weights are added to the config weight of the ruleset. They are:
/datum/dynamic_storyteller/random/should_inject_antag()
return prob(50)
/datum/dynamic_storyteller/chaotic/minor_start_chance()
/datum/dynamic_storyteller/random/minor_start_chance()
return 20
/datum/dynamic_storyteller/random/roundstart_draft()
@@ -330,7 +335,7 @@ Property weights are added to the config weight of the ruleset. They are:
name = "Story"
config_tag = "story"
desc = "Antags with options for loadouts and gimmicks. Traitor, wizard, nukies."
weight = 2
weight = 4
curve_width = 2
flags = USE_PREV_ROUND_WEIGHTS
property_weights = list("story_potential" = 2)
@@ -338,6 +343,7 @@ Property weights are added to the config weight of the ruleset. They are:
/datum/dynamic_storyteller/classic
name = "Classic"
config_tag = "classic"
weight = 8
desc = "No special antagonist weights. Good variety, but not like random. Uses your chaos preference to weight."
flags = USE_PREF_WEIGHTS | USE_PREV_ROUND_WEIGHTS
@@ -345,7 +351,7 @@ Property weights are added to the config weight of the ruleset. They are:
name = "Intrigue"
config_tag = "intrigue"
desc = "Antags that instill distrust in the crew. Traitors, bloodsuckers."
weight = 2
weight = 4
curve_width = 2
dead_player_weight = 2
flags = USE_PREV_ROUND_WEIGHTS
@@ -358,7 +364,7 @@ Property weights are added to the config weight of the ruleset. They are:
name = "Grab Bag"
config_tag = "grabbag"
desc = "Crew antags (e.g. traitor, changeling, bloodsucker, heretic) only, all mixed together."
weight = 2
weight = 4
flags = USE_PREF_WEIGHTS | USE_PREV_ROUND_WEIGHTS
/datum/dynamic_storyteller/grabbag/minor_start_chance()
@@ -398,12 +404,13 @@ Property weights are added to the config weight of the ruleset. They are:
curve_centre = -3
curve_width = 0.5
flags = NO_ASSASSIN
weight = 1
min_chaos = 30
weight = 3
dead_player_weight = 5
property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "conversion" = -10)
/datum/dynamic_storyteller/liteextended/minor_start_chance()
return 100
return 90
/datum/dynamic_storyteller/no_antag
name = "Extended"
@@ -411,6 +418,7 @@ Property weights are added to the config weight of the ruleset. They are:
desc = "No standard antags."
curve_centre = -5
curve_width = 0.5
min_chaos = 40
flags = NO_ASSASSIN | FORCE_IF_WON
weight = 1
property_weights = list("extended" = 2)

View File

@@ -13,6 +13,9 @@ STORYTELLER_WEIGHT EXTENDED 0
STORYTELLER_MIN_PLAYERS CHAOTIC 30
STORYTELLER_MIN_PLAYERS TEAMWORK 30
## If this is uncommented, Dynamic won't disable certain storytellers based on recent round threats
#NO_STORYTELLER_THREAT_REMOVAL
## Injection delays: how long (in minutes) will pass before a midround or latejoin antag is injected.
DYNAMIC_MIDROUND_DELAY_MIN 5
DYNAMIC_MIDROUND_DELAY_MAX 15