Files
SmArtKarandGitHub 12bca76e5d Fixes broken DreamSeeker debug launch option (#96860)
Verb PR broke the dreamseeker debug launch option and will spew runtimes
until the debugger chokes and crashes. A lot of our devs use this option
so this is pretty high prio.
2026-07-07 22:53:31 +02:00

39 lines
1.5 KiB
Plaintext

SUBSYSTEM_DEF(verbs)
name = "Verbs"
ss_flags = SS_NO_FIRE
init_stage = INITSTAGE_EARLY
var/list/datum/verb_metadata/verbs_by_type = list()
/datum/controller/subsystem/verbs/Initialize()
if (!length(verbs_by_type))
initialize_verb_types()
initialized = TRUE
return SS_INIT_SUCCESS
/datum/controller/subsystem/verbs/proc/initialize_verb_types()
for(var/datum/verb_metadata/verb_type as anything in subtypesof(/datum/verb_metadata))
verbs_by_type[verb_type] = new verb_type
/datum/controller/subsystem/verbs/proc/invoke(target, datum/verb_metadata/verb_type, ...)
var/datum/verb_metadata/meta = verbs_by_type[verb_type]
if(isnull(meta))
CRASH("Attempted to invoke unknown verb '[verb_type]'.")
var/list/invoke_args = args.Copy(3)
call(target, meta.body_path)(arglist(invoke_args))
/datum/controller/subsystem/verbs/proc/assign_verb(target, datum/verb_metadata/verb_type)
// When launching via dreamseeker and not dreamdaemon, client is created first before any of the subsystems init
// This can only happen in dev environments so its not a big deal
if (!initialized)
initialize_verb_types()
var/datum/verb_metadata/meta = verbs_by_type[verb_type]
if(isnull(meta))
CRASH("Attempted to assign unknown verb '[verb_type]'.")
meta.assign_to(target)
/datum/controller/subsystem/verbs/proc/unassign_verb(target, datum/verb_metadata/verb_type)
var/datum/verb_metadata/meta = verbs_by_type[verb_type]
if(isnull(meta))
CRASH("Attempted to unassign unknown verb '[verb_type]'.")
meta.unassign_from(target)