mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 09:42:29 +00:00
## About The Pull Request I heard you liked commas. ## Why It's Good For The Game Trailing commas make everyone happy! ## Changelog Nothing anyone will notice besides downstreams adding to these lists
58 lines
2.6 KiB
Plaintext
58 lines
2.6 KiB
Plaintext
SUBSYSTEM_DEF(traitor)
|
|
name = "Traitor"
|
|
dependencies = list(
|
|
/datum/controller/subsystem/mapping,
|
|
/datum/controller/subsystem/atoms,
|
|
)
|
|
flags = SS_KEEP_TIMING
|
|
wait = 10 SECONDS
|
|
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
|
|
|
/// A list of all uplink items mapped by type
|
|
var/list/uplink_items_by_type = list()
|
|
/// A list of all uplink items
|
|
var/list/uplink_items = list()
|
|
|
|
/// The coefficient multiplied by the current_global_progression for new joining traitors to calculate their progression
|
|
var/newjoin_progression_coeff = 1
|
|
/// The current progression that all traitors should be at in the round, you can't have less than this
|
|
var/current_global_progression = 0
|
|
/// The current uplink handlers being managed
|
|
var/list/datum/uplink_handler/uplink_handlers = list()
|
|
/// The current scaling per minute of progression.
|
|
var/current_progression_scaling = 1 MINUTES
|
|
|
|
/datum/controller/subsystem/traitor/Initialize()
|
|
current_progression_scaling = 1 MINUTES * CONFIG_GET(number/traitor_scaling_multiplier)
|
|
for(var/theft_item in subtypesof(/datum/objective_item/steal))
|
|
new theft_item
|
|
return SS_INIT_SUCCESS
|
|
|
|
/datum/controller/subsystem/traitor/fire(resumed)
|
|
var/previous_progression = current_global_progression
|
|
current_global_progression = (STATION_TIME_PASSED()) * CONFIG_GET(number/traitor_scaling_multiplier)
|
|
var/progression_increment = current_global_progression - previous_progression
|
|
|
|
for(var/datum/uplink_handler/handler in uplink_handlers)
|
|
if(!handler.has_progression || QDELETED(handler))
|
|
uplink_handlers -= handler
|
|
if(handler.progression_points < current_global_progression)
|
|
// If we got unsynced somehow, just set them to the current global progression
|
|
// Prevents problems with precision errors.
|
|
handler.progression_points = current_global_progression
|
|
else
|
|
handler.progression_points += progression_increment // Should only really happen if an admin is messing with an individual's progression value
|
|
handler.on_update()
|
|
|
|
/datum/controller/subsystem/traitor/proc/register_uplink_handler(datum/uplink_handler/uplink_handler)
|
|
if(!uplink_handler.has_progression)
|
|
return
|
|
uplink_handlers |= uplink_handler
|
|
// An uplink handler can be registered multiple times if they get assigned to new uplinks, so
|
|
// override is set to TRUE here because it is intentional that they could get added multiple times.
|
|
RegisterSignal(uplink_handler, COMSIG_QDELETING, PROC_REF(uplink_handler_deleted), override = TRUE)
|
|
|
|
/datum/controller/subsystem/traitor/proc/uplink_handler_deleted(datum/uplink_handler/uplink_handler)
|
|
SIGNAL_HANDLER
|
|
uplink_handlers -= uplink_handler
|