Implements dynamic latespawns (#31005)

* first pass

* Latespawning now works for implied rulesets

* Prevent team antags from getting latespawns.

* calculate_budget() formula no longer gives half-points

* fix mindflayer ruleset not updating banned_jobs

* update dynamic budget unit test for new formula

* tweak latespawn budget threshold

* remove autotraitor ruleset

* use the right logging proc this time

* oops

* Logging tweaks. log_dynamic can now output to log_debug.

* Logging tweaks. Don't log crew join/cryo when latespawns are disabled.

* Fix rare double antag spawn with implied ruleset trigger.

* add heretic ruleset

* prevent dynamic antag_budget from going negative.

* implement add/remove_owner_to_gamemode() for changeling datum
This commit is contained in:
chuga-git
2026-02-17 21:16:19 +00:00
committed by GitHub
parent cc8da4d650
commit 1391e4ff4a
5 changed files with 138 additions and 81 deletions
@@ -60,7 +60,6 @@ RESTRICT_TYPE(/datum/antagonist/changeling)
purchaseable_powers = get_powers_of_type(CHANGELING_PURCHASABLE_POWER)
/datum/antagonist/changeling/on_gain()
SSticker.mode.changelings |= owner
var/honorific = owner.current.gender == FEMALE ? "Ms." : "Mr."
if(length(GLOB.possible_changeling_IDs))
changelingID = pick(GLOB.possible_changeling_IDs)
@@ -79,12 +78,17 @@ RESTRICT_TYPE(/datum/antagonist/changeling)
..()
/datum/antagonist/changeling/Destroy()
SSticker.mode.changelings -= owner
QDEL_LIST_CONTENTS(acquired_powers)
STOP_PROCESSING(SSobj, src)
chosen_sting = null
return ..()
/datum/antagonist/changeling/add_owner_to_gamemode()
SSticker.mode.changelings |= owner
/datum/antagonist/changeling/remove_owner_from_gamemode()
SSticker.mode.changelings -= owner
/datum/antagonist/changeling/greet()
. = ..()
SEND_SOUND(owner.current, sound('sound/ambience/antag/ling_alert.ogg'))