From 3177ea2e9fd474ae53952fd13d8db88a6f02b3c5 Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Tue, 8 Apr 2025 09:58:42 -0400 Subject: [PATCH] blackbox dynamic ruleset selections and budget (#28890) * blackbox dynamic ruleset selections and budget * record both ruleset and antag budget --- code/game/gamemodes/dynamic/antag_rulesets.dm | 4 ++++ code/game/gamemodes/dynamic/dynamic.dm | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/dynamic/antag_rulesets.dm b/code/game/gamemodes/dynamic/antag_rulesets.dm index a445c7a475e..b800d184042 100644 --- a/code/game/gamemodes/dynamic/antag_rulesets.dm +++ b/code/game/gamemodes/dynamic/antag_rulesets.dm @@ -122,6 +122,7 @@ /datum/ruleset/proc/roundstart_post_setup(datum/game_mode/dynamic) for(var/datum/mind/antag as anything in pre_antags) antag.add_antag_datum(antagonist_type) + SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("roundstart", "[antagonist_type]")) /datum/ruleset/proc/refund(info) // not enough antagonists signed up!!! idk what to do. The only real solution is to procedurally allocate budget, which will result in 1000x more get_players_for_role() calls. Which is not cheap. @@ -170,6 +171,7 @@ for(var/i in 1 to late_antag_amount) var/datum/mind/antag = pick_n_take(possible_antags) antag.add_antag_datum(antagonist_type) + SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("latespawn", "[antagonist_type]")) log_dynamic("Latespawned [late_antag_amount] [name]\s.") message_admins("Dynamic latespawned [late_antag_amount] [name]\s.") @@ -196,6 +198,7 @@ traitor_datum.delayed_objectives = TRUE traitor_datum.addtimer(CALLBACK(traitor_datum, TYPE_PROC_REF(/datum/antagonist/traitor, reveal_delayed_objectives)), latespawn_time, TIMER_DELETE_ME) antag.add_antag_datum(traitor_datum) + SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("roundstart", "[antagonist_type]")) /datum/ruleset/traitor/autotraitor name = "Autotraitor" @@ -287,6 +290,7 @@ /datum/ruleset/team/roundstart_post_setup(datum/game_mode/dynamic) if(unique_team) + SSblackbox.record_feedback("nested tally", "dynamic_selections", 1, list("roundstart", "[team_type]")) new team_type(pre_antags) return stack_trace("Undefined behavior for dynamic non-unique teams!") diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index e72612c3c7e..ea3ca4752f1 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -46,8 +46,12 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) /datum/game_mode/dynamic/proc/allocate_ruleset_budget() var/ruleset_budget = text2num(GLOB.dynamic_forced_rulesets["budget"] || pickweight(list("0" = 3, "1" = 8, "2" = 12, "3" = 3))) - antag_budget = calculate_budget(num_players()) + var/num_players = num_players() + antag_budget = calculate_budget(num_players) log_dynamic("Allocated gamemode budget: [ruleset_budget]") + SSblackbox.record_feedback("tally", "dynamic_budget", ruleset_budget, "ruleset") + SSblackbox.record_feedback("tally", "dynamic_budget", antag_budget, "antag") + SSblackbox.record_feedback("amount", "dynamic_num_players", num_players) var/list/possible_rulesets = list() for(var/datum/ruleset/ruleset as anything in subtypesof(/datum/ruleset)) if(ruleset.ruleset_weight <= 0) @@ -57,6 +61,8 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) var/datum/ruleset/new_ruleset = new ruleset() possible_rulesets[new_ruleset] = new_ruleset.ruleset_weight + for(var/datum/ruleset/ruleset in possible_rulesets) + SSblackbox.record_feedback("tally", "dynamic_possible_rulesets_by_weight", ruleset.ruleset_weight, "[ruleset.type]") log_dynamic("Available rulesets: [english_list(possible_rulesets)]") for(var/datum/ruleset/ruleset as anything in GLOB.dynamic_forced_rulesets)