Update the codebase to 515. (#15553)

* Update the codebase to 515.

* edit that

* WHOOPS

* maor

* maybe works

* libcall and shit

* do that too

* remove that

* auxtools isnt updated so get rid of it

* actually remove auxtools lol

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2023-01-23 21:21:37 +01:00
committed by GitHub
parent 1d359b64e3
commit dd482c63af
326 changed files with 672 additions and 833 deletions

View File

@@ -11,7 +11,7 @@ on:
env: env:
MACRO_COUNT: 0 MACRO_COUNT: 0
GENDER_COUNT: 6 GENDER_COUNT: 6
TO_WORLD_COUNT: 202 TO_WORLD_COUNT: 201
TGM_CHECK: "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE" TGM_CHECK: "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE"
jobs: jobs:

View File

@@ -26,8 +26,8 @@
#include "code\__defines\antagonist.dm" #include "code\__defines\antagonist.dm"
#include "code\__defines\armor.dm" #include "code\__defines\armor.dm"
#include "code\__defines\atmos.dm" #include "code\__defines\atmos.dm"
#include "code\__defines\auxtools.dm"
#include "code\__defines\battle_monsters.dm" #include "code\__defines\battle_monsters.dm"
#include "code\__defines\byond_compat.dm"
#include "code\__defines\callback.dm" #include "code\__defines\callback.dm"
#include "code\__defines\chemistry.dm" #include "code\__defines\chemistry.dm"
#include "code\__defines\color.dm" #include "code\__defines\color.dm"
@@ -35,7 +35,6 @@
#include "code\__defines\dna.dm" #include "code\__defines\dna.dm"
#include "code\__defines\drinks.dm" #include "code\__defines\drinks.dm"
#include "code\__defines\dview.dm" #include "code\__defines\dview.dm"
#include "code\__defines\extools.dm"
#include "code\__defines\flags.dm" #include "code\__defines\flags.dm"
#include "code\__defines\gamemode.dm" #include "code\__defines\gamemode.dm"
#include "code\__defines\ghostspawner.dm" #include "code\__defines\ghostspawner.dm"

Binary file not shown.

View File

@@ -1,18 +0,0 @@
/proc/auxtools_stack_trace(msg)
CRASH(msg)
/proc/enable_debugging(mode, port)
CRASH("auxtools not loaded")
/world/New()
var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL")
if (debug_server)
call(debug_server, "auxtools_init")()
enable_debugging()
. = ..()
/world/Del()
var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL")
if (debug_server)
call(debug_server, "auxtools_shutdown")()
. = ..()

View File

@@ -0,0 +1,23 @@
// 515 split call for external libraries into call_ext
#if DM_VERSION < 515
#define LIBCALL call
#else
#define LIBCALL call_ext
#endif
// So we want to have compile time guarantees these procs exist on local type, unfortunately 515 killed the .proc/procname syntax so we have to use nameof()
#if DM_VERSION < 515
/// Call by name proc reference, checks if the proc exists on this type or as a global proc
#define PROC_REF(X) (.proc/##X)
/// Call by name proc reference, checks if the proc exists on given type or as a global proc
#define TYPE_PROC_REF(TYPE, X) (##TYPE.proc/##X)
/// Call by name proc reference, checks if the proc is existing global proc
#define GLOBAL_PROC_REF(X) (/proc/##X)
#else
/// Call by name proc reference, checks if the proc exists on this type or as a global proc
#define PROC_REF(X) (nameof(.proc/##X))
/// Call by name proc reference, checks if the proc exists on given type or as a global proc
#define TYPE_PROC_REF(TYPE, X) (nameof(##TYPE.proc/##X))
/// Call by name proc reference, checks if the proc is existing global proc
#define GLOBAL_PROC_REF(X) (/proc/##X)
#endif

View File

@@ -1,178 +0,0 @@
#define EXTOOLS (world.system_type == MS_WINDOWS ? "byond-extools.dll" : "byond-extools")
#define EXTOOLS_SUCCESS "SUCCESS"
#define EXTOOLS_FAILED "FAIL"
/*
Core - Provides necessary functionality for other modules.
Initializing any other modules also initializes this so it shouldn't be necessary to call this.
*/
/proc/extools_initialize()
return call(EXTOOLS, "core_initialize")() == EXTOOLS_SUCCESS
/*
TFFI - Threaded FFI
All DLL calls are automatically threaded off.
Black magic is used to suspend (sleep) the currently executing proc, allowing non-blocking FFI.
You may call a DLL function and sleep until it returns, pass a callback to be called with the result,
or call resolve() on the /datum/promise to receive the return value at any time.
Example:
var/x = call_wait("sample.dll", "do_work", "arg1", "arg2", "arg3")
- Calls the do_work function from sample.dll with 3 arguments. The proc sleeps until do_work returns.
var/datum/promise/P = call_async("sample.dll", "do_work", "arg1")
... do something else ...
var/result = P.resolve()
- Calls do_work with 1 argument. Returns a promise object. Runs some other code before calling P.resolve() to obtain the result.
/proc/print_result(result)
world << result
call_cb("sample.dll", "do_work", /proc/print_result, "arg1", "arg2")
- Calls do_work with 2 arguments. The callback is invoked with the result as the single argument. Execution resumes immediately.
*/
#if 0
/proc/tffi_initialize()
return call(EXTOOLS, "tffi_initialize")() == EXTOOLS_SUCCESS
var/fallback_alerted = FALSE
var/next_promise_id = 0
/datum/promise
var/completed = FALSE
var/result = ""
var/callback_context = GLOBAL_PROC
var/callback_proc = null
var/__id = 0
/datum/promise/New()
__id = next_promise_id++ //please don't create more than 10^38 promises in a single tick
//This proc's bytecode is overwritten to allow suspending and resuming on demand.
//None of the code here should run.
/datum/promise/proc/__internal_resolve(ref, id)
if(!fallback_alerted && world.system_type != UNIX) // the rewriting is currently broken on Linux.
world << "<b>TFFI: __internal_resolve has not been rewritten, the TFFI DLL was not loaded correctly.</b>"
world.log << "<b>TFFI: __internal_resolve has not been rewritten, the TFFI DLL was not loaded correctly.</b>"
fallback_alerted = TRUE
while(!completed)
sleep(1)
//It might be better to just fail and notify the user that something went wrong.
/datum/promise/proc/__resolve_callback()
__internal_resolve("\ref[src]", __id)
if(callback_context == GLOBAL_PROC)
call(callback_proc)(result)
else
call(callback_context, callback_proc)(result)
/datum/promise/proc/resolve()
__internal_resolve("\ref[src]", __id)
return result
/proc/call_async()
var/list/arguments = args.Copy()
var/datum/promise/P = new
arguments.Insert(1, "\ref[P]")
call(EXTOOLS, "call_async")(arglist(arguments))
return P
/proc/call_cb()
var/list/arguments = args.Copy()
var/context = arguments[3]
var/callback = arguments[4]
arguments.Cut(3, 5)
var/datum/promise/P = new
P.callback_context = context
P.callback_proc = callback
arguments.Insert(1, "\ref[P]")
call(EXTOOLS, "call_async")(arglist(arguments))
spawn(0)
P.__resolve_callback()
/proc/call_wait()
return call_async(arglist(args)).resolve()
#endif
/*
Extended Profiling - High precision in-depth performance profiling.
Turning on extended profiling for a proc will cause each execution of it to generate a file in the ./profiles directory
containing a breakdown of time spent executing the proc and each sub-proc it calls. Import the file into https://www.speedscope.app/ to
view a good visual representation.
Be aware that sleeping counts as stopping and restarting the execution of the proc, which will generate multiple files, one between each sleep.
For large procs the profiles may become unusably large. Optimizations pending.
Example:
start_profiling(/datum/explosion/New)
- Enables profiling for /datum/explosion/New(), which will produce a detailed breakdown of each explosion that occurs afterwards.
stop_profiling(/datum/explosion/New)
- Disables profiling for explosions. Any currently running profiles will stop when the proc finishes executing or enters a sleep.
*/
/proc/profiling_initialize()
return call(EXTOOLS, "extended_profiling_initialize")() == EXTOOLS_SUCCESS
/proc/start_profiling(procpath)
call(EXTOOLS, "enable_extended_profiling")("[procpath]")
/proc/stop_profiling(procpath)
call(EXTOOLS, "disable_extended_profiling")("[procpath]")
/*
Debug Server - High and low level debugging of DM code.
Calling debugger_initialize will start a debug server that allows connections from frontends,
such as SpaceManiac's VSCode extension for line-by-line debugging (and more), or Steamport's
Somnium for bytecode inspection.
Call with pause = TRUE to wait until the debugger connected and immediately break on the next instruction after the call.
*/
/proc/debugger_initialize(pause = FALSE)
return call(EXTOOLS, "debug_initialize")(pause ? "pause" : "") == EXTOOLS_SUCCESS
/*
Misc
*/
//Programatically enable and disable the built-in byond profiler. Useful if you want to, for example, profile subsystem initializations.
/proc/enable_profiling()
return call(EXTOOLS, "enable_profiling")() == EXTOOLS_SUCCESS
/proc/disable_profiling()
return call(EXTOOLS, "disable_profiling")() == EXTOOLS_SUCCESS
// Will dump the server's in-depth memory profile into the file specified.
/proc/dump_memory_profile(file_name)
return call(EXTOOLS, "dump_memory_usage")(file_name) == EXTOOLS_SUCCESS

View File

@@ -311,8 +311,8 @@
// This only works on 511 because it relies on 511's `var/something = foo = bar` syntax. // This only works on 511 because it relies on 511's `var/something = foo = bar` syntax.
#define WEAKREF(D) (istype(D, /datum) && !D:gcDestroyed ? (D:weakref || (D:weakref = new/datum/weakref(D))) : null) #define WEAKREF(D) (istype(D, /datum) && !D:gcDestroyed ? (D:weakref || (D:weakref = new/datum/weakref(D))) : null)
#define ADD_VERB_IN(the_atom,time,verb) addtimer(CALLBACK(the_atom, /atom/.proc/add_verb, verb), time, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) #define ADD_VERB_IN(the_atom,time,verb) addtimer(CALLBACK(the_atom, TYPE_PROC_REF(/atom, add_verb), verb), time, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
#define ADD_VERB_IN_IF(the_atom,time,verb,callback) addtimer(CALLBACK(the_atom, /atom/.proc/add_verb, verb, callback), time, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) #define ADD_VERB_IN_IF(the_atom,time,verb,callback) addtimer(CALLBACK(the_atom, TYPE_PROC_REF(/atom, add_verb), verb, callback), time, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
// Maploader bounds indices // Maploader bounds indices
#define MAP_MINX 1 #define MAP_MINX 1

View File

@@ -18,6 +18,6 @@
#define QDELETED(X) (!X || X.gcDestroyed) #define QDELETED(X) (!X || X.gcDestroyed)
#define QDESTROYING(X) (!X || X.gcDestroyed == GC_CURRENTLY_BEING_QDELETED) #define QDESTROYING(X) (!X || X.gcDestroyed == GC_CURRENTLY_BEING_QDELETED)
#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE) #define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), item), time, TIMER_STOPPABLE)
#define QDEL_NULL(item) qdel(item); item = null #define QDEL_NULL(item) qdel(item); item = null
#define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) }}; if(x) {x.Cut(); x = null } // Second x check to handle items that LAZYREMOVE on qdel. #define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) }}; if(x) {x.Cut(); x = null } // Second x check to handle items that LAZYREMOVE on qdel.

View File

@@ -39,29 +39,29 @@
#endif #endif
/// Gets the version of rust_g /// Gets the version of rust_g
/proc/rustg_get_version() return call(RUST_G, "get_version")() /proc/rustg_get_version() return LIBCALL(RUST_G, "get_version")()
#define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname) #define rustg_dmi_strip_metadata(fname) LIBCALL(RUST_G, "dmi_strip_metadata")(fname)
#define rustg_dmi_create_png(path, width, height, data) call(RUST_G, "dmi_create_png")(path, width, height, data) #define rustg_dmi_create_png(path, width, height, data) LIBCALL(RUST_G, "dmi_create_png")(path, width, height, data)
#define rustg_dmi_resize_png(path, width, height, resizetype) call(RUST_G, "dmi_resize_png")(path, width, height, resizetype) #define rustg_dmi_resize_png(path, width, height, resizetype) LIBCALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
#define rustg_file_read(fname) call(RUST_G, "file_read")(fname) #define rustg_file_read(fname) LIBCALL(RUST_G, "file_read")(fname)
#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname) #define rustg_file_exists(fname) LIBCALL(RUST_G, "file_exists")(fname)
#define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname) #define rustg_file_write(text, fname) LIBCALL(RUST_G, "file_write")(text, fname)
#define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname) #define rustg_file_append(text, fname) LIBCALL(RUST_G, "file_append")(text, fname)
#ifdef RUSTG_OVERRIDE_BUILTINS #ifdef RUSTG_OVERRIDE_BUILTINS
#define file2text(fname) rustg_file_read("[fname]") #define file2text(fname) rustg_file_read("[fname]")
#define text2file(text, fname) rustg_file_append(text, "[fname]") #define text2file(text, fname) rustg_file_append(text, "[fname]")
#endif #endif
#define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev) #define rustg_git_revparse(rev) LIBCALL(RUST_G, "rg_git_revparse")(rev)
#define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev) #define rustg_git_commit_date(rev) LIBCALL(RUST_G, "rg_git_commit_date")(rev)
#define rustg_hash_string(algorithm, text) call(RUST_G, "hash_string")(algorithm, text) #define rustg_hash_string(algorithm, text) LIBCALL(RUST_G, "hash_string")(algorithm, text)
#define rustg_hash_file(algorithm, fname) call(RUST_G, "hash_file")(algorithm, fname) #define rustg_hash_file(algorithm, fname) LIBCALL(RUST_G, "hash_file")(algorithm, fname)
#define rustg_hash_generate_totp(seed) call(RUST_G, "generate_totp")(seed) #define rustg_hash_generate_totp(seed) LIBCALL(RUST_G, "generate_totp")(seed)
#define rustg_hash_generate_totp_tolerance(seed, tolerance) call(RUST_G, "generate_totp_tolerance")(seed, tolerance) #define rustg_hash_generate_totp_tolerance(seed, tolerance) LIBCALL(RUST_G, "generate_totp_tolerance")(seed, tolerance)
#define RUSTG_HASH_MD5 "md5" #define RUSTG_HASH_MD5 "md5"
#define RUSTG_HASH_SHA1 "sha1" #define RUSTG_HASH_SHA1 "sha1"
@@ -80,25 +80,25 @@
#define RUSTG_HTTP_METHOD_PATCH "patch" #define RUSTG_HTTP_METHOD_PATCH "patch"
#define RUSTG_HTTP_METHOD_HEAD "head" #define RUSTG_HTTP_METHOD_HEAD "head"
#define RUSTG_HTTP_METHOD_POST "post" #define RUSTG_HTTP_METHOD_POST "post"
#define rustg_http_request_blocking(method, url, body, headers, options) call(RUST_G, "http_request_blocking")(method, url, body, headers, options) #define rustg_http_request_blocking(method, url, body, headers, options) LIBCALL(RUST_G, "http_request_blocking")(method, url, body, headers, options)
#define rustg_http_request_async(method, url, body, headers, options) call(RUST_G, "http_request_async")(method, url, body, headers, options) #define rustg_http_request_async(method, url, body, headers, options) LIBCALL(RUST_G, "http_request_async")(method, url, body, headers, options)
#define rustg_http_check_request(req_id) call(RUST_G, "http_check_request")(req_id) #define rustg_http_check_request(req_id) LIBCALL(RUST_G, "http_check_request")(req_id)
#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET" #define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET"
#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB" #define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB"
#define RUSTG_JOB_ERROR "JOB PANICKED" #define RUSTG_JOB_ERROR "JOB PANICKED"
#define rustg_log_write(fname, text, format) call(RUST_G, "log_write")(fname, text, format) #define rustg_log_write(fname, text, format) LIBCALL(RUST_G, "log_write")(fname, text, format)
/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")() /proc/rustg_log_close_all() return LIBCALL(RUST_G, "log_close_all")()
#define rustg_time_microseconds(id) text2num(call(RUST_G, "time_microseconds")(id)) #define rustg_time_microseconds(id) text2num(LIBCALL(RUST_G, "time_microseconds")(id))
#define rustg_time_milliseconds(id) text2num(call(RUST_G, "time_milliseconds")(id)) #define rustg_time_milliseconds(id) text2num(LIBCALL(RUST_G, "time_milliseconds")(id))
#define rustg_time_reset(id) call(RUST_G, "time_reset")(id) #define rustg_time_reset(id) LIBCALL(RUST_G, "time_reset")(id)
#define rustg_udp_send(addr, text) call(RUST_G, "udp_send")(addr, text) #define rustg_udp_send(addr, text) LIBCALL(RUST_G, "udp_send")(addr, text)
#define rustg_url_encode(text) call(RUST_G, "url_encode")("[text]") #define rustg_url_encode(text) LIBCALL(RUST_G, "url_encode")("[text]")
#define rustg_url_decode(text) call(RUST_G, "url_decode")(text) #define rustg_url_decode(text) LIBCALL(RUST_G, "url_decode")(text)
#ifdef RUSTG_OVERRIDE_BUILTINS #ifdef RUSTG_OVERRIDE_BUILTINS
#define url_encode(text) rustg_url_encode(text) #define url_encode(text) rustg_url_encode(text)

View File

@@ -67,7 +67,7 @@
// -- SSoverlays -- // -- SSoverlays --
#define CUT_OVERLAY_IN(ovr, time) addtimer(CALLBACK(src, /atom/.proc/cut_overlay, ovr), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME) #define CUT_OVERLAY_IN(ovr, time) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, cut_overlay), ovr), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME)
#define ATOM_USING_SSOVERLAY(atom) (atom.our_overlays || atom.priority_overlays) #define ATOM_USING_SSOVERLAY(atom) (atom.our_overlays || atom.priority_overlays)
// -- SSticker -- // -- SSticker --

View File

@@ -7,7 +7,7 @@
var/list/calling_arguments = length(args) > 2 ? args.Copy(3) : null var/list/calling_arguments = length(args) > 2 ? args.Copy(3) : null
. = call(dll, func)(arglist(calling_arguments)) . = LIBCALL(dll, func)(arglist(calling_arguments))
if (world.timeofday - start > 10 SECONDS) if (world.timeofday - start > 10 SECONDS)
crash_with("DLL call took longer than 10 seconds: [func]") crash_with("DLL call took longer than 10 seconds: [func]")

View File

@@ -283,7 +283,7 @@ datum/projectile_data
/proc/flick_overlay(image/I, list/show_to, duration) /proc/flick_overlay(image/I, list/show_to, duration)
for(var/client/C in show_to) for(var/client/C in show_to)
C.images += I C.images += I
addtimer(CALLBACK(GLOBAL_PROC, /.proc/remove_images_from_clients, I, show_to), duration) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_images_from_clients), I, show_to), duration)
/proc/flick_overlay_view(image/I, atom/target, duration) //wrapper for the above, flicks to everyone who can see the target atom /proc/flick_overlay_view(image/I, atom/target, duration) //wrapper for the above, flicks to everyone who can see the target atom
var/list/viewing = list() var/list/viewing = list()

View File

@@ -111,9 +111,9 @@ var/global/list/intent_listener = list()
hair_styles_male_list += H.name hair_styles_male_list += H.name
hair_styles_female_list += H.name hair_styles_female_list += H.name
sortTim(hair_styles_list, /proc/cmp_text_asc) sortTim(hair_styles_list, GLOBAL_PROC_REF(cmp_text_asc))
sortTim(hair_styles_male_list, /proc/cmp_text_asc) sortTim(hair_styles_male_list, GLOBAL_PROC_REF(cmp_text_asc))
sortTim(hair_styles_female_list, /proc/cmp_text_asc) sortTim(hair_styles_female_list, GLOBAL_PROC_REF(cmp_text_asc))
//Gradients - Initialise all /datum/sprite_accessory/hair_gradients into an list indexed by hairgradient-style name //Gradients - Initialise all /datum/sprite_accessory/hair_gradients into an list indexed by hairgradient-style name
paths = subtypesof(/datum/sprite_accessory/hair_gradients) paths = subtypesof(/datum/sprite_accessory/hair_gradients)
@@ -121,7 +121,7 @@ var/global/list/intent_listener = list()
var/datum/sprite_accessory/hair_gradients/H = new path() var/datum/sprite_accessory/hair_gradients/H = new path()
hair_gradient_styles_list[H.name] = H hair_gradient_styles_list[H.name] = H
sortTim(hair_gradient_styles_list, /proc/cmp_text_asc) sortTim(hair_gradient_styles_list, GLOBAL_PROC_REF(cmp_text_asc))
//Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name //Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name
paths = subtypesof(/datum/sprite_accessory/facial_hair) paths = subtypesof(/datum/sprite_accessory/facial_hair)
@@ -135,9 +135,9 @@ var/global/list/intent_listener = list()
facial_hair_styles_male_list += H.name facial_hair_styles_male_list += H.name
facial_hair_styles_female_list += H.name facial_hair_styles_female_list += H.name
sortTim(facial_hair_styles_list, /proc/cmp_text_asc) sortTim(facial_hair_styles_list, GLOBAL_PROC_REF(cmp_text_asc))
sortTim(facial_hair_styles_male_list, /proc/cmp_text_asc) sortTim(facial_hair_styles_male_list, GLOBAL_PROC_REF(cmp_text_asc))
sortTim(facial_hair_styles_female_list, /proc/cmp_text_asc) sortTim(facial_hair_styles_female_list, GLOBAL_PROC_REF(cmp_text_asc))
//Body markings //Body markings
paths = subtypesof(/datum/sprite_accessory/marking) paths = subtypesof(/datum/sprite_accessory/marking)
@@ -145,7 +145,7 @@ var/global/list/intent_listener = list()
var/datum/sprite_accessory/marking/M = new path() var/datum/sprite_accessory/marking/M = new path()
body_marking_styles_list[M.name] = M body_marking_styles_list[M.name] = M
sortTim(body_marking_styles_list, /proc/cmp_text_asc) sortTim(body_marking_styles_list, GLOBAL_PROC_REF(cmp_text_asc))
//Disability datums //Disability datums
paths = subtypesof(/datum/character_disabilities) paths = subtypesof(/datum/character_disabilities)
@@ -153,7 +153,7 @@ var/global/list/intent_listener = list()
var/datum/character_disabilities/T = new path() var/datum/character_disabilities/T = new path()
chargen_disabilities_list[T.name] = T chargen_disabilities_list[T.name] = T
sortTim(chargen_disabilities_list, /proc/cmp_text_asc) sortTim(chargen_disabilities_list, GLOBAL_PROC_REF(cmp_text_asc))
//List of job. I can't believe this was calculated multiple times per tick! //List of job. I can't believe this was calculated multiple times per tick!
paths = subtypesof(/datum/job) paths = subtypesof(/datum/job)
@@ -183,7 +183,7 @@ var/global/list/intent_listener = list()
S.has_autohiss = TRUE S.has_autohiss = TRUE
all_species[S.name] = S all_species[S.name] = S
sortTim(all_species, /proc/cmp_text_asc) sortTim(all_species, GLOBAL_PROC_REF(cmp_text_asc))
// The other lists are generated *after* we sort the main one so they don't need sorting too. // The other lists are generated *after* we sort the main one so they don't need sorting too.
for (var/thing in all_species) for (var/thing in all_species)

View File

@@ -761,7 +761,7 @@ proc/ColorTone(rgb, tone)
break break
layers[current] = current_layer layers[current] = current_layer
//sortTim(layers, /proc/cmp_image_layer_asc) //sortTim(layers, GLOBAL_PROC_REF(cmp_image_layer_asc))
var/icon/add // Icon of overlay being added var/icon/add // Icon of overlay being added

View File

@@ -305,21 +305,21 @@
if (!L) if (!L)
return return
var/list/target = L.Copy() var/list/target = L.Copy()
return sortTim(target, order ? /proc/cmp_ckey_asc : /proc/cmp_ckey_dsc, FALSE) return sortTim(target, order ? GLOBAL_PROC_REF(cmp_ckey_asc) : GLOBAL_PROC_REF(cmp_ckey_dsc), FALSE)
//Mergesort: divides up the list into halves to begin the sort //Mergesort: divides up the list into halves to begin the sort
/proc/sortAtom(var/list/atom/L, var/order = 1) /proc/sortAtom(var/list/atom/L, var/order = 1)
if (!L) if (!L)
return return
var/list/target = L.Copy() var/list/target = L.Copy()
return sortTim(target, order ? /proc/cmp_name_asc : /proc/cmp_name_dsc, FALSE) return sortTim(target, order ? GLOBAL_PROC_REF(cmp_name_asc) : GLOBAL_PROC_REF(cmp_name_dsc), FALSE)
//Mergesort: Specifically for record datums in a list. //Mergesort: Specifically for record datums in a list.
/proc/sortRecord(var/list/datum/record/L, var/order = 1) /proc/sortRecord(var/list/datum/record/L, var/order = 1)
if (!L) if (!L)
return return
var/list/target = L.Copy() var/list/target = L.Copy()
sortTim(target, order ? /proc/cmp_records_asc : /proc/cmp_records_dsc, FALSE) sortTim(target, order ? GLOBAL_PROC_REF(cmp_records_asc) : GLOBAL_PROC_REF(cmp_records_dsc), FALSE)
return target return target
//Mergesort: any value in a list //Mergesort: any value in a list
@@ -327,14 +327,14 @@
if (!L) if (!L)
return return
var/list/target = L.Copy() var/list/target = L.Copy()
return sortTim(target, /proc/cmp_text_asc) return sortTim(target, GLOBAL_PROC_REF(cmp_text_asc))
//Mergsorge: uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead //Mergsorge: uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead
/proc/sortNames(var/list/L) /proc/sortNames(var/list/L)
if (!L) if (!L)
return return
var/list/target = L.Copy() var/list/target = L.Copy()
return sortTim(target, /proc/cmp_name_asc, FALSE) return sortTim(target, GLOBAL_PROC_REF(cmp_name_asc), FALSE)
// List of lists, sorts by element[key] - for things like crew monitoring computer sorting records by name. // List of lists, sorts by element[key] - for things like crew monitoring computer sorting records by name.
/proc/sortByKey(var/list/L, var/key) /proc/sortByKey(var/list/L, var/key)
@@ -364,7 +364,7 @@
//Mergesort: any value in a list, preserves key=value structure //Mergesort: any value in a list, preserves key=value structure
/proc/sortAssoc(var/list/L) /proc/sortAssoc(var/list/L)
var/list/ret = L.Copy() var/list/ret = L.Copy()
sortTim(ret, /proc/cmp_text_asc, FALSE) sortTim(ret, GLOBAL_PROC_REF(cmp_text_asc), FALSE)
return ret return ret
// Macros to test for bits in a bitfield. Note, that this is for use with indexes, not bit-masks! // Macros to test for bits in a bitfield. Note, that this is for use with indexes, not bit-masks!

View File

@@ -1,5 +1,5 @@
//TimSort interface //TimSort interface
/proc/sortTim(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex=0) /proc/sortTim(list/L, cmp=GLOBAL_PROC_REF(cmp_numeric_asc), associative, fromIndex=1, toIndex=0)
if(L && L.len >= 2) if(L && L.len >= 2)
fromIndex = fromIndex % L.len fromIndex = fromIndex % L.len
toIndex = toIndex % (L.len+1) toIndex = toIndex % (L.len+1)

View File

@@ -15,7 +15,7 @@ var/datum/sortInstance/sortInstance = new()
var/list/L var/list/L
//The comparator proc-reference //The comparator proc-reference
var/cmp = /proc/cmp_numeric_asc var/cmp = GLOBAL_PROC_REF(cmp_numeric_asc)
//whether we are sorting list keys (0: L[i]) or associated values (1: L[L[i]]) //whether we are sorting list keys (0: L[i]) or associated values (1: L[L[i]])
var/associative = 0 var/associative = 0

View File

@@ -18,7 +18,7 @@
/atom/movable/proc/update_filters() /atom/movable/proc/update_filters()
filters = null filters = null
filter_data = sortTim(filter_data, /proc/cmp_filter_data_priority, TRUE) filter_data = sortTim(filter_data, GLOBAL_PROC_REF(cmp_filter_data_priority), TRUE)
for(var/f in filter_data) for(var/f in filter_data)
var/list/data = filter_data[f] var/list/data = filter_data[f]
var/list/arguments = data.Copy() var/list/arguments = data.Copy()

View File

@@ -11,7 +11,7 @@
if(!Adjacent(usr) || !over.Adjacent(usr)) if(!Adjacent(usr) || !over.Adjacent(usr))
return // should stop you from dragging through windows return // should stop you from dragging through windows
INVOKE_ASYNC(over, /atom/.proc/MouseDrop_T, src, usr, src_location, over_location, src_control, over_control, params) INVOKE_ASYNC(over, TYPE_PROC_REF(/atom, MouseDrop_T), src, usr, src_location, over_location, src_control, over_control, params)
// receive a mousedrop // receive a mousedrop
/atom/proc/MouseDrop_T(atom/dropping, mob/user, src_location, over_location, src_control, over_control, params) /atom/proc/MouseDrop_T(atom/dropping, mob/user, src_location, over_location, src_control, over_control, params)

View File

@@ -65,7 +65,7 @@
var/old_color = color var/old_color = color
color = set_color color = set_color
color_changed = TRUE color_changed = TRUE
addtimer(CALLBACK(src, .proc/set_color_to, old_color), set_time) addtimer(CALLBACK(src, PROC_REF(set_color_to), old_color), set_time)
/obj/screen/inventory/proc/set_color_to(var/set_color) /obj/screen/inventory/proc/set_color_to(var/set_color)
color = set_color color = set_color
@@ -317,7 +317,7 @@
up_image.plane = LIGHTING_LAYER + 1 up_image.plane = LIGHTING_LAYER + 1
up_image.layer = LIGHTING_LAYER + 1 up_image.layer = LIGHTING_LAYER + 1
usr << up_image usr << up_image
addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, up_image), 12) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), up_image), 12)
return return
var/turf/T = GetAbove(usr) var/turf/T = GetAbove(usr)
if (!T) if (!T)

View File

@@ -106,4 +106,4 @@ var/list/panic_targets_data_loss = list(
var/ctype = panic_targets[controller] var/ctype = panic_targets[controller]
Master.subsystems += new ctype Master.subsystems += new ctype
sortTim(Master.subsystems, /proc/cmp_subsystem_display) sortTim(Master.subsystems, GLOBAL_PROC_REF(cmp_subsystem_display))

View File

@@ -157,7 +157,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
initializing = TRUE initializing = TRUE
// Sort subsystems by init_order, so they initialize in the correct order. // Sort subsystems by init_order, so they initialize in the correct order.
sortTim(subsystems, /proc/cmp_subsystem_init) sortTim(subsystems, GLOBAL_PROC_REF(cmp_subsystem_init))
var/start_timeofday = REALTIMEOFDAY var/start_timeofday = REALTIMEOFDAY
// Initialize subsystems. // Initialize subsystems.
@@ -181,7 +181,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
SetRunLevel(RUNLEVEL_LOBBY) SetRunLevel(RUNLEVEL_LOBBY)
// Sort subsystems by display setting for easy access. // Sort subsystems by display setting for easy access.
sortTim(subsystems, /proc/cmp_subsystem_display) sortTim(subsystems, GLOBAL_PROC_REF(cmp_subsystem_display))
// Set world options. // Set world options.
#ifndef UNIT_TEST #ifndef UNIT_TEST
world.sleep_offline = 1 world.sleep_offline = 1
@@ -264,9 +264,9 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
queue_tail = null queue_tail = null
//these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue
//(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add)
sortTim(tickersubsystems, /proc/cmp_subsystem_priority) sortTim(tickersubsystems, GLOBAL_PROC_REF(cmp_subsystem_priority))
for(var/level in runlevel_sorted_subsystems) for(var/level in runlevel_sorted_subsystems)
sortTim(level, /proc/cmp_subsystem_priority) sortTim(level, GLOBAL_PROC_REF(cmp_subsystem_priority))
level += tickersubsystems level += tickersubsystems
var/cached_runlevel = current_runlevel var/cached_runlevel = current_runlevel

View File

@@ -225,7 +225,7 @@ var/datum/controller/subsystem/atlas/SSatlas
var/static/regex/mapregex = new(".+\\.dmm$") var/static/regex/mapregex = new(".+\\.dmm$")
var/list/files = flist(directory) var/list/files = flist(directory)
sortTim(files, /proc/cmp_text_asc) sortTim(files, GLOBAL_PROC_REF(cmp_text_asc))
var/mfile var/mfile
var/first_dmm = TRUE var/first_dmm = TRUE
var/time var/time

View File

@@ -43,7 +43,7 @@
for (var/area/A in world) for (var/area/A in world)
all_areas += A all_areas += A
sortTim(all_areas, /proc/cmp_name_asc) sortTim(all_areas, GLOBAL_PROC_REF(cmp_name_asc))
/datum/controller/subsystem/finalize/proc/select_ruin() /datum/controller/subsystem/finalize/proc/select_ruin()
//Get all the folders in dynamic maps and check if they contain a config.json //Get all the folders in dynamic maps and check if they contain a config.json

View File

@@ -17,7 +17,7 @@
if(current_map.use_overmap) if(current_map.use_overmap)
ghostteleportlocs[map_overmap.name] = map_overmap ghostteleportlocs[map_overmap.name] = map_overmap
sortTim(ghostteleportlocs, /proc/cmp_text_asc) sortTim(ghostteleportlocs, GLOBAL_PROC_REF(cmp_text_asc))
setupgenetics() setupgenetics()
@@ -39,4 +39,4 @@
/proc/sorted_add_area(area/A) /proc/sorted_add_area(area/A)
all_areas += A all_areas += A
sortTim(all_areas, /proc/cmp_name_asc) sortTim(all_areas, GLOBAL_PROC_REF(cmp_name_asc))

View File

@@ -318,7 +318,7 @@
to_chat(H, SSatlas.current_sector.get_chat_description()) to_chat(H, SSatlas.current_sector.get_chat_description())
if("Arrivals Shuttle" in current_map.allowed_spawns && spawning_at == "Arrivals Shuttle") if("Arrivals Shuttle" in current_map.allowed_spawns && spawning_at == "Arrivals Shuttle")
H.centcomm_despawn_timer = addtimer(CALLBACK(H, /mob/living/.proc/centcomm_timeout), 10 MINUTES, TIMER_STOPPABLE) H.centcomm_despawn_timer = addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living, centcomm_timeout)), 10 MINUTES, TIMER_STOPPABLE)
to_chat(H,SPAN_NOTICE("You have ten minutes to reach the station before you will be forced there.")) to_chat(H,SPAN_NOTICE("You have ten minutes to reach the station before you will be forced there."))
var/datum/job/job = GetJob(rank) var/datum/job/job = GetJob(rank)
@@ -416,7 +416,7 @@
BITSET(H.hud_updateflag, IMPLOYAL_HUD) BITSET(H.hud_updateflag, IMPLOYAL_HUD)
BITSET(H.hud_updateflag, SPECIALROLE_HUD) BITSET(H.hud_updateflag, SPECIALROLE_HUD)
INVOKE_ASYNC(GLOBAL_PROC, .proc/show_location_blurb, H.client, 30) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(show_location_blurb), H.client, 30)
if(spawning_at == "Arrivals Shuttle") if(spawning_at == "Arrivals Shuttle")
to_chat(H, "<b>[current_map.command_spawn_message]</b>") to_chat(H, "<b>[current_map.command_spawn_message]</b>")
@@ -869,7 +869,7 @@
T.maptext = "<span style=\"[style]\">[copytext(text,1,i)] </span>" T.maptext = "<span style=\"[style]\">[copytext(text,1,i)] </span>"
sleep(1) sleep(1)
addtimer(CALLBACK(GLOBAL_PROC, .proc/fade_location_blurb, C, T), duration) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(fade_location_blurb), C, T), duration)
/proc/fade_location_blurb(client/C, obj/T) /proc/fade_location_blurb(client/C, obj/T)
animate(T, alpha = 0, time = 5) animate(T, alpha = 0, time = 5)

View File

@@ -109,7 +109,7 @@ var/datum/controller/subsystem/lighting/SSlighting
log_ss("lighting", "NOv:[overlaycount] L:[processed_lights] C:[processed_corners] O:[processed_overlays]") log_ss("lighting", "NOv:[overlaycount] L:[processed_lights] C:[processed_corners] O:[processed_overlays]")
#ifdef USE_INTELLIGENT_LIGHTING_UPDATES #ifdef USE_INTELLIGENT_LIGHTING_UPDATES
SSticker.OnRoundstart(CALLBACK(src, .proc/handle_roundstart)) SSticker.OnRoundstart(CALLBACK(src, PROC_REF(handle_roundstart)))
#endif #endif
..() ..()

View File

@@ -268,8 +268,8 @@ if(Datum.isprocessing) {\
rcon_breaker_units += breaker rcon_breaker_units += breaker
rcon_breaker_units_by_tag[breaker.RCon_tag] = breaker rcon_breaker_units_by_tag[breaker.RCon_tag] = breaker
sortTim(rcon_smes_units, /proc/cmp_rcon_smes) sortTim(rcon_smes_units, GLOBAL_PROC_REF(cmp_rcon_smes))
sortTim(rcon_breaker_units, /proc/cmp_rcon_bbox) sortTim(rcon_breaker_units, GLOBAL_PROC_REF(cmp_rcon_bbox))
#undef SSMACHINERY_PIPENETS #undef SSMACHINERY_PIPENETS
#undef SSMACHINERY_MACHINERY #undef SSMACHINERY_MACHINERY

View File

@@ -50,7 +50,7 @@ var/datum/controller/subsystem/mapping/SSmapping
var/list/banned_maps = list() + banned_exoplanet_dmms + banned_space_dmms + banned_away_site_dmms var/list/banned_maps = list() + banned_exoplanet_dmms + banned_space_dmms + banned_away_site_dmms
for(var/item in sortList(subtypesof(/datum/map_template), /proc/cmp_ruincost_priority)) for(var/item in sortList(subtypesof(/datum/map_template), GLOBAL_PROC_REF(cmp_ruincost_priority)))
var/datum/map_template/map_template_type = item var/datum/map_template/map_template_type = item
// screen out the abstract subtypes // screen out the abstract subtypes
if(!initial(map_template_type.id)) if(!initial(map_template_type.id))

View File

@@ -117,7 +117,7 @@
. = new /mob/living/carbon/human/dummy/mannequin . = new /mob/living/carbon/human/dummy/mannequin
mannequins[ckey] = . mannequins[ckey] = .
addtimer(CALLBACK(src, .proc/del_mannequin, ckey), 5 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(del_mannequin), ckey), 5 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE)
/datum/controller/subsystem/mobs/proc/del_mannequin(ckey) /datum/controller/subsystem/mobs/proc/del_mannequin(ckey)
var/mannequin = mannequins[ckey] var/mannequin = mannequins[ckey]

View File

@@ -22,7 +22,7 @@
if (config.news_use_forum_api) if (config.news_use_forum_api)
load_forum_news_config() load_forum_news_config()
INVOKE_ASYNC(src, .proc/load_from_forums) INVOKE_ASYNC(src, PROC_REF(load_from_forums))
..() ..()

View File

@@ -26,7 +26,7 @@ var/datum/controller/subsystem/nightlight/SSnightlight
suspend() suspend()
deactivate(FALSE) deactivate(FALSE)
if (time > 0) if (time > 0)
addtimer(CALLBACK(src, .proc/end_temp_disable), time, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(end_temp_disable)), time, TIMER_UNIQUE | TIMER_OVERRIDE)
/datum/controller/subsystem/nightlight/proc/end_temp_disable() /datum/controller/subsystem/nightlight/proc/end_temp_disable()
if (disable_type == NL_TEMPORARY_DISABLE) if (disable_type == NL_TEMPORARY_DISABLE)

View File

@@ -143,12 +143,12 @@
pregenerate_more_oranges_ears(NUMBER_OF_PREGENERATED_ORANGES_EARS) pregenerate_more_oranges_ears(NUMBER_OF_PREGENERATED_ORANGES_EARS)
RegisterSignal(SSdcs, COMSIG_GLOB_NEW_Z, .proc/propogate_spatial_grid_to_new_z) RegisterSignal(SSdcs, COMSIG_GLOB_NEW_Z, PROC_REF(propogate_spatial_grid_to_new_z))
RegisterSignal(SSdcs, COMSIG_GLOB_EXPANDED_WORLD_BOUNDS, .proc/after_world_bounds_expanded) RegisterSignal(SSdcs, COMSIG_GLOB_EXPANDED_WORLD_BOUNDS, PROC_REF(after_world_bounds_expanded))
///add a movable to the pre init queue for whichever type is specified so that when the subsystem initializes they get added to the grid ///add a movable to the pre init queue for whichever type is specified so that when the subsystem initializes they get added to the grid
/datum/controller/subsystem/spatial_grid/proc/enter_pre_init_queue(atom/movable/waiting_movable, type) /datum/controller/subsystem/spatial_grid/proc/enter_pre_init_queue(atom/movable/waiting_movable, type)
RegisterSignal(waiting_movable, COMSIG_PARENT_PREQDELETED, .proc/queued_item_deleted, override = TRUE) RegisterSignal(waiting_movable, COMSIG_PARENT_PREQDELETED, PROC_REF(queued_item_deleted), override = TRUE)
//override because something can enter the queue for two different types but that is done through unrelated procs that shouldnt know about eachother //override because something can enter the queue for two different types but that is done through unrelated procs that shouldnt know about eachother
waiting_to_add_by_type[type] += waiting_movable waiting_to_add_by_type[type] += waiting_movable

View File

@@ -45,7 +45,7 @@
simple_statistics[S.key] = S simple_statistics[S.key] = S
sortTim(simple_statistics, /proc/cmp_name_asc, TRUE) sortTim(simple_statistics, GLOBAL_PROC_REF(cmp_name_asc), TRUE)
/datum/controller/subsystem/statistics/fire() /datum/controller/subsystem/statistics/fire()
// Handle AFK. // Handle AFK.

View File

@@ -342,7 +342,7 @@ var/datum/controller/subsystem/ticker/SSticker
for(var/dept in ready_job.departments) for(var/dept in ready_job.departments)
LAZYDISTINCTADD(ready_player_jobs[dept], prefs.real_name) LAZYDISTINCTADD(ready_player_jobs[dept], prefs.real_name)
LAZYSET(ready_player_jobs[dept], prefs.real_name, ready_job.title) LAZYSET(ready_player_jobs[dept], prefs.real_name, ready_job.title)
sortTim(ready_player_jobs[dept], /proc/cmp_text_asc) sortTim(ready_player_jobs[dept], GLOBAL_PROC_REF(cmp_text_asc))
. = TRUE . = TRUE
if(.) if(.)
@@ -545,7 +545,7 @@ var/datum/controller/subsystem/ticker/SSticker
round_start_time = world.time round_start_time = world.time
callHook("roundstart") callHook("roundstart")
INVOKE_ASYNC(src, .proc/roundstart) INVOKE_ASYNC(src, PROC_REF(roundstart))
log_debug("SSticker: Running [LAZYLEN(roundstart_callbacks)] round-start callbacks.") log_debug("SSticker: Running [LAZYLEN(roundstart_callbacks)] round-start callbacks.")
run_callback_list(roundstart_callbacks) run_callback_list(roundstart_callbacks)

View File

@@ -274,7 +274,7 @@ var/datum/controller/subsystem/timer/SStimer
return return
// Sort all timers by time to run // Sort all timers by time to run
sortTim(alltimers, .proc/cmp_timer) sortTim(alltimers, GLOBAL_PROC_REF(cmp_timer))
// Get the earliest timer, and if the TTR is earlier than the current world.time, // Get the earliest timer, and if the TTR is earlier than the current world.time,
// then set the head offset appropriately to be the earliest time tracked by the // then set the head offset appropriately to be the earliest time tracked by the

View File

@@ -417,7 +417,7 @@
D.plane = T.shadower.plane D.plane = T.shadower.plane
found_oo += D found_oo += D
sortTim(found_oo, /proc/cmp_planelayer) sortTim(found_oo, GLOBAL_PROC_REF(cmp_planelayer))
var/list/atoms_list_list = list() var/list/atoms_list_list = list()
for (var/thing in found_oo) for (var/thing in found_oo)

View File

@@ -34,7 +34,7 @@
icon_state = beam_icon_state icon_state = beam_icon_state
beam_type = btype beam_type = btype
if(time != -1) if(time != -1)
addtimer(CALLBACK(src,.proc/End), time) addtimer(CALLBACK(src, PROC_REF(End), time))
/datum/beam/proc/Start() /datum/beam/proc/Start()
recalculate() recalculate()
@@ -64,12 +64,12 @@
return return
/datum/beam/proc/recalculate_in(time) /datum/beam/proc/recalculate_in(time)
timing_id = addtimer(CALLBACK(src, .proc/recalculate), time, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_NO_HASH_WAIT | TIMER_OVERRIDE) timing_id = addtimer(CALLBACK(src, PROC_REF(recalculate)), time, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_NO_HASH_WAIT | TIMER_OVERRIDE)
/datum/beam/proc/after_calculate() /datum/beam/proc/after_calculate()
if((sleep_time == null) || finished) //Does not automatically recalculate. if((sleep_time == null) || finished) //Does not automatically recalculate.
return return
timing_id = addtimer(CALLBACK(src, .proc/recalculate), sleep_time, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_NO_HASH_WAIT) timing_id = addtimer(CALLBACK(src, PROC_REF(recalculate)), sleep_time, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_NO_HASH_WAIT)
/datum/beam/proc/End(destroy_self = TRUE) /datum/beam/proc/End(destroy_self = TRUE)
finished = TRUE finished = TRUE
@@ -209,5 +209,5 @@
crash_with("Tried to create beam with infinite time!") crash_with("Tried to create beam with infinite time!")
return null return null
var/datum/beam/newbeam = new beam_datum_type(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time) var/datum/beam/newbeam = new beam_datum_type(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time)
INVOKE_ASYNC(newbeam, /datum/beam/.proc/Start) INVOKE_ASYNC(newbeam, TYPE_PROC_REF(/datum/beam, Start))
return newbeam return newbeam

View File

@@ -1,9 +1,9 @@
USAGE: USAGE:
var/datum/callback/C = new(object|null, /proc/type/path|"procstring", arg1, arg2, ... argn) var/datum/callback/C = new(object|null, TYPE_PROC_REF(type, path|"procstring"), arg1, arg2, ... argn)
var/timerid = addtimer(C, time, timertype) var/timerid = addtimer(C, time, timertype)
OR OR
var/timerid = addtimer(CALLBACK(object|null, /proc/type/path|procstring, arg1, arg2, ... argn), time, timertype) var/timerid = addtimer(CALLBACK(object|null, TYPE_PROC_REF(type, path|procstring), arg1, arg2, ... argn), time, timertype)
Note: proc strings can only be given for datum proc calls, global procs must be proc paths Note: proc strings can only be given for datum proc calls, global procs must be proc paths
Also proc strings are strongly advised against because they don't compile error if the proc stops existing Also proc strings are strongly advised against because they don't compile error if the proc stops existing
@@ -21,18 +21,18 @@
global proc while in another global proc: global proc while in another global proc:
.procname .procname
Example: Example:
CALLBACK(GLOBAL_PROC, .some_proc_here) CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(some_proc_here))
proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents: proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents:
.procname .procname
Example: Example:
CALLBACK(src, .some_proc_here) CALLBACK(src, PROC_REF(some_proc_here))
when the above doesn't apply: when the above doesn't apply:
.proc/procname .proc/procname
Example: Example:
CALLBACK(src, .proc/some_proc_here) CALLBACK(src, PROC_REF(some_proc_here))
proc defined on a parent of a some type: proc defined on a parent of a some type:
/some/type/.proc/some_proc_here /some/type/.proc/some_proc_here

View File

@@ -6,8 +6,8 @@
/datum/component/base_name/Initialize(var/name) /datum/component/base_name/Initialize(var/name)
base_name = name base_name = name
RegisterSignal(parent, COMSIG_BASENAME_RENAME, .proc/rename) RegisterSignal(parent, COMSIG_BASENAME_RENAME, PROC_REF(rename))
RegisterSignal(parent, COMSIG_BASENAME_SETNAME, .proc/change_base_name) RegisterSignal(parent, COMSIG_BASENAME_SETNAME, PROC_REF(change_base_name))
/datum/component/base_name/proc/rename(var/name) /datum/component/base_name/proc/rename(var/name)
base_name = name base_name = name

View File

@@ -1,6 +1,6 @@
/obj/item/circuitboard/stationalert/Initialize() /obj/item/circuitboard/stationalert/Initialize()
. = ..() . = ..()
AddComponent(/datum/component/multitool/circuitboards, CALLBACK(src, .proc/get_multitool_ui), CALLBACK(src, .proc/on_topic)) AddComponent(/datum/component/multitool/circuitboards, CALLBACK(src, PROC_REF(get_multitool_ui)), CALLBACK(src, PROC_REF(get_multitool_ui)))
/obj/item/circuitboard/stationalert/proc/get_multitool_ui(var/mob/user, var/obj/item/device/multitool/MT, var/datum/component/multitool/C) /obj/item/circuitboard/stationalert/proc/get_multitool_ui(var/mob/user, var/obj/item/device/multitool/MT, var/datum/component/multitool/C)
. += "<b>Alarm Sources</b><br>" . += "<b>Alarm Sources</b><br>"

View File

@@ -145,7 +145,7 @@ var/datum/discord_bot/discord_bot = null
queue.Add(list(list(message, A - sent))) queue.Add(list(list(message, A - sent)))
// Schedule a push. // Schedule a push.
addtimer(CALLBACK(src, .proc/push_queue), 10 SECONDS, TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(push_queue)), 10 SECONDS, TIMER_UNIQUE)
// And exit. // And exit.
return return
@@ -258,7 +258,7 @@ var/datum/discord_bot/discord_bot = null
for (var/B in destinations) for (var/B in destinations)
var/datum/discord_channel/channel = B var/datum/discord_channel/channel = B
if (channel.send_message_to(auth_token, message) == SEND_TIMEOUT) if (channel.send_message_to(auth_token, message) == SEND_TIMEOUT)
addtimer(CALLBACK(src, .proc/push_queue), 10 SECONDS, TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(push_queue)), 10 SECONDS, TIMER_UNIQUE)
return return
else else

View File

@@ -23,7 +23,7 @@
return ELEMENT_INCOMPATIBLE return ELEMENT_INCOMPATIBLE
SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src) SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src)
if(element_flags & ELEMENT_DETACH) if(element_flags & ELEMENT_DETACH)
RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach, override = TRUE) RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(Detach), override = TRUE)
/// Deactivates the functionality defines by the element on the given datum /// Deactivates the functionality defines by the element on the given datum
/datum/element/proc/Detach(datum/source, force) /datum/element/proc/Detach(datum/source, force)

View File

@@ -73,7 +73,7 @@
if(!chance || prob(chance)) if(!chance || prob(chance))
play(get_sound(starttime)) play(get_sound(starttime))
if(!timerid) if(!timerid)
timerid = addtimer(CALLBACK(src, .proc/sound_loop, world.time), mid_length, TIMER_STOPPABLE | TIMER_LOOP) timerid = addtimer(CALLBACK(src, PROC_REF(sound_loop), world.time), mid_length, TIMER_STOPPABLE | TIMER_LOOP)
/datum/looping_sound/proc/play(soundfile, volume_override) /datum/looping_sound/proc/play(soundfile, volume_override)
var/list/atoms_cache = output_atoms var/list/atoms_cache = output_atoms
@@ -98,7 +98,7 @@
if(start_sound) if(start_sound)
play(start_sound, start_volume) play(start_sound, start_volume)
start_wait = start_length start_wait = start_length
addtimer(CALLBACK(src, .proc/sound_loop), start_wait) addtimer(CALLBACK(src, PROC_REF(sound_loop)), start_wait)
/datum/looping_sound/proc/on_stop() /datum/looping_sound/proc/on_stop()
if(end_sound) if(end_sound)

View File

@@ -33,9 +33,9 @@ var/singleton/observ/moved/moved_event = new()
/atom/movable/Entered(var/atom/movable/am, atom/old_loc) /atom/movable/Entered(var/atom/movable/am, atom/old_loc)
..() ..()
if(moved_event.has_listeners(am) && !moved_event.is_listening(src, am)) if(moved_event.has_listeners(am) && !moved_event.is_listening(src, am))
moved_event.register(src, am, /atom/movable/proc/recursive_move) moved_event.register(src, am, TYPE_PROC_REF(/atom/movable, recursive_move))
/atom/movable/Exited(var/atom/movable/am, atom/old_loc) /atom/movable/Exited(var/atom/movable/am, atom/old_loc)
..() ..()
if(moved_event.is_listening(src, am, /atom/movable/proc/recursive_move)) if(moved_event.is_listening(src, am, TYPE_PROC_REF(/atom/movable, recursive_move)))
moved_event.unregister(src, am) moved_event.unregister(src, am)

View File

@@ -67,4 +67,4 @@
if(mercrig) if(mercrig)
H.put_in_hands(mercrig) H.put_in_hands(mercrig)
H.equip_to_slot_or_del(mercrig, slot_back) H.equip_to_slot_or_del(mercrig, slot_back)
addtimer(CALLBACK(mercrig, /obj/item/rig/.proc/toggle_seals, H, TRUE), 2 SECONDS) addtimer(CALLBACK(mercrig, TYPE_PROC_REF(/obj/item/rig, toggle_seals), H, TRUE), 2 SECONDS)

View File

@@ -457,7 +457,7 @@
var/obj/item/ID = new id(H) var/obj/item/ID = new id(H)
imprint_idcard(H, ID) imprint_idcard(H, ID)
if(personal_computer?.card_slot) if(personal_computer?.card_slot)
addtimer(CALLBACK(src, .proc/register_pda, personal_computer, ID), 2 SECOND) addtimer(CALLBACK(src, PROC_REF(register_pda), personal_computer, ID), 2 SECOND)
else else
H.equip_or_collect(ID, slot_wear_id) H.equip_or_collect(ID, slot_wear_id)
@@ -555,7 +555,7 @@
C.access = get_id_access(H) C.access = get_id_access(H)
C.rank = get_id_rank(H) C.rank = get_id_rank(H)
C.assignment = get_id_assignment(H) C.assignment = get_id_assignment(H)
addtimer(CALLBACK(H, /mob/.proc/set_id_info, C), 1 SECOND) // Delay a moment to allow an icon update to happen. addtimer(CALLBACK(H, TYPE_PROC_REF(/mob, set_id_info), C), 1 SECOND) // Delay a moment to allow an icon update to happen.
if(H.mind && H.mind.initial_account) if(H.mind && H.mind.initial_account)
C.associated_account_number = H.mind.initial_account.account_number C.associated_account_number = H.mind.initial_account.account_number

View File

@@ -73,7 +73,7 @@
LAZYREMOVE(user.progressbars, bar.loc) LAZYREMOVE(user.progressbars, bar.loc)
animate(bar, alpha = 0, time = PROGRESSBAR_ANIMATION_TIME) animate(bar, alpha = 0, time = PROGRESSBAR_ANIMATION_TIME)
addtimer(CALLBACK(src, .proc/remove_from_client), PROGRESSBAR_ANIMATION_TIME, TIMER_CLIENT_TIME) addtimer(CALLBACK(src, PROC_REF(remove_from_client)), PROGRESSBAR_ANIMATION_TIME, TIMER_CLIENT_TIME)
QDEL_IN(bar, PROGRESSBAR_ANIMATION_TIME * 2) //for garbage collection safety QDEL_IN(bar, PROGRESSBAR_ANIMATION_TIME * 2) //for garbage collection safety
. = ..() . = ..()

View File

@@ -123,7 +123,7 @@
return FALSE return FALSE
/datum/statistic/grouped/most_deaths/get_roundend_lines() /datum/statistic/grouped/most_deaths/get_roundend_lines()
sortTim(values, /proc/cmp_numeric_dsc, TRUE) sortTim(values, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE)
var/ckey = values[1] var/ckey = values[1]
. = "[ckey], with [values[ckey]] deaths." . = "[ckey], with [values[ckey]] deaths."

View File

@@ -58,7 +58,7 @@
//If this hits 0 then they decide to up and leave. //If this hits 0 then they decide to up and leave.
/datum/trader/proc/tick() /datum/trader/proc/tick()
addtimer(CALLBACK(src, .proc/do_after_tick), 1) addtimer(CALLBACK(src, PROC_REF(do_after_tick)), 1)
return 1 return 1
/datum/trader/proc/do_after_tick() /datum/trader/proc/do_after_tick()

View File

@@ -9,7 +9,7 @@ var/datum/uplink/uplink
items_assoc = list() items_assoc = list()
items = init_subtypes(/datum/uplink_item) items = init_subtypes(/datum/uplink_item)
categories = init_subtypes(/datum/uplink_category) categories = init_subtypes(/datum/uplink_category)
sortTim(categories, /proc/cmp_uplink_category, FALSE) sortTim(categories, GLOBAL_PROC_REF(cmp_uplink_category), FALSE)
for(var/datum/uplink_item/item in items) for(var/datum/uplink_item/item in items)
if(!item.name) if(!item.name)
@@ -23,7 +23,7 @@ var/datum/uplink/uplink
category.items += item category.items += item
for(var/datum/uplink_category/category in categories) for(var/datum/uplink_category/category in categories)
sortTim(category.items, /proc/cmp_uplink_item, FALSE) sortTim(category.items, GLOBAL_PROC_REF(cmp_uplink_item), FALSE)
/datum/uplink_item /datum/uplink_item
var/name var/name

View File

@@ -24,15 +24,15 @@
if(APC_WIRE_IDSCAN) if(APC_WIRE_IDSCAN)
set_locked(A, FALSE) set_locked(A, FALSE)
addtimer(CALLBACK(src, .proc/set_locked, A, TRUE), 30 SECONDS) addtimer(CALLBACK(src, PROC_REF(set_locked), A, TRUE), 30 SECONDS)
if (APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2) if (APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2)
set_short_out(A, TRUE) set_short_out(A, TRUE)
addtimer(CALLBACK(src, .proc/set_short_out, A, FALSE), 120 SECONDS) addtimer(CALLBACK(src, PROC_REF(set_short_out), A, FALSE), 120 SECONDS)
if (APC_WIRE_AI_CONTROL) if (APC_WIRE_AI_CONTROL)
set_ai_control(A, TRUE) set_ai_control(A, TRUE)
addtimer(CALLBACK(src, .proc/set_ai_control, A, FALSE), 1 SECONDS) addtimer(CALLBACK(src, PROC_REF(set_ai_control), A, FALSE), 1 SECONDS)
/datum/wires/apc/proc/set_locked(var/obj/machinery/power/apc/A, var/setting) /datum/wires/apc/proc/set_locked(var/obj/machinery/power/apc/A, var/setting)

View File

@@ -45,7 +45,7 @@ var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
if(SMES_WIRE_RCON) if(SMES_WIRE_RCON)
if(S.RCon) if(S.RCon)
S.RCon = 0 S.RCon = 0
addtimer(CALLBACK(S, /obj/machinery/power/smes/buildable/.proc/reset_rcon), 10) addtimer(CALLBACK(S, TYPE_PROC_REF(/obj/machinery/power/smes/buildable, reset_rcon)), 10)
if(SMES_WIRE_INPUT) if(SMES_WIRE_INPUT)
S.toggle_input() S.toggle_input()
if(SMES_WIRE_OUTPUT) if(SMES_WIRE_OUTPUT)
@@ -55,7 +55,7 @@ var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
if(SMES_WIRE_FAILSAFES) if(SMES_WIRE_FAILSAFES)
if(S.safeties_enabled) if(S.safeties_enabled)
S.safeties_enabled = 0 S.safeties_enabled = 0
addtimer(CALLBACK(S, /obj/machinery/power/smes/buildable/.proc/reset_safeties), 10) addtimer(CALLBACK(S, TYPE_PROC_REF(/obj/machinery/power/smes/buildable, reset_safeties)), 10)
/obj/machinery/power/smes/buildable/proc/reset_safeties() /obj/machinery/power/smes/buildable/proc/reset_safeties()
safeties_enabled = TRUE safeties_enabled = TRUE

View File

@@ -58,7 +58,7 @@ var/datum/antagonist/loyalists/loyalists
player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player, player.mind), slot_in_backpack) player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player, player.mind), slot_in_backpack)
give_codewords(player) give_codewords(player)
INVOKE_ASYNC(src, .proc/alert_loyalist_status, player) INVOKE_ASYNC(src, PROC_REF(alert_loyalist_status), player)
return TRUE return TRUE
/datum/antagonist/loyalists/proc/alert_loyalist_status(var/mob/living/carbon/human/player) //This is still dumb but it works /datum/antagonist/loyalists/proc/alert_loyalist_status(var/mob/living/carbon/human/player) //This is still dumb but it works

View File

@@ -69,7 +69,7 @@ var/datum/antagonist/revolutionary/revs
player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player, player.mind), slot_in_backpack) player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player, player.mind), slot_in_backpack)
give_codewords(player) give_codewords(player)
INVOKE_ASYNC(src, .proc/alert_revolutionary_status, player) INVOKE_ASYNC(src, PROC_REF(alert_revolutionary_status), player)
return TRUE return TRUE
/datum/antagonist/revolutionary/proc/alert_revolutionary_status(var/mob/living/carbon/human/player) //This is so dumb. /datum/antagonist/revolutionary/proc/alert_revolutionary_status(var/mob/living/carbon/human/player) //This is so dumb.

View File

@@ -163,7 +163,7 @@
if(E.operating) if(E.operating)
E.nextstate = FIREDOOR_CLOSED E.nextstate = FIREDOOR_CLOSED
else if(!E.density) else if(!E.density)
INVOKE_ASYNC(E, /obj/machinery/door/.proc/close) INVOKE_ASYNC(E, TYPE_PROC_REF(/obj/machinery/door, close))
/area/proc/air_doors_open() /area/proc/air_doors_open()
if(air_doors_activated) if(air_doors_activated)
@@ -173,7 +173,7 @@
if(E.operating) if(E.operating)
E.nextstate = FIREDOOR_OPEN E.nextstate = FIREDOOR_OPEN
else if(E.density) else if(E.density)
INVOKE_ASYNC(E, /obj/machinery/door/.proc/open) INVOKE_ASYNC(E, TYPE_PROC_REF(/obj/machinery/door, open))
/area/proc/fire_alert() /area/proc/fire_alert()
if(!fire) if(!fire)
@@ -185,7 +185,7 @@
if(D.operating) if(D.operating)
D.nextstate = FIREDOOR_CLOSED D.nextstate = FIREDOOR_CLOSED
else if(!D.density) else if(!D.density)
INVOKE_ASYNC(D, /obj/machinery/door/.proc/close) INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/machinery/door, close))
/area/proc/fire_reset() /area/proc/fire_reset()
if (fire) if (fire)
@@ -197,7 +197,7 @@
if(D.operating) if(D.operating)
D.nextstate = FIREDOOR_OPEN D.nextstate = FIREDOOR_OPEN
else if(D.density) else if(D.density)
INVOKE_ASYNC(D, /obj/machinery/door/.proc/open) INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/machinery/door, open))
/area/proc/readyalert() /area/proc/readyalert()
if(!eject) if(!eject)
@@ -225,7 +225,7 @@
if(D.operating) if(D.operating)
D.nextstate = FIREDOOR_OPEN D.nextstate = FIREDOOR_OPEN
else if(D.density) else if(D.density)
INVOKE_ASYNC(D, /obj/machinery/door/.proc/open) INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/machinery/door, open))
#define DO_PARTY(COLOR) animate(color = COLOR, time = 0.5 SECONDS, easing = QUAD_EASING) #define DO_PARTY(COLOR) animate(color = COLOR, time = 0.5 SECONDS, easing = QUAD_EASING)

View File

@@ -510,7 +510,7 @@
M.forceMove(ling) //move inside the new dude to hide him. M.forceMove(ling) //move inside the new dude to hide him.
ling.occupant = M ling.occupant = M
M.status_flags |= GODMODE //dont want him to die or breathe or do ANYTHING M.status_flags |= GODMODE //dont want him to die or breathe or do ANYTHING
addtimer(CALLBACK(src, .proc/revert_horror_form,ling), 10 MINUTES) addtimer(CALLBACK(src, PROC_REF(revert_horror_form), ling), 10 MINUTES)
/mob/proc/revert_horror_form(var/mob/living/ling) /mob/proc/revert_horror_form(var/mob/living/ling)
if(QDELETED(ling)) if(QDELETED(ling))

View File

@@ -119,7 +119,7 @@
target.disabilities |= NEARSIGHTED target.disabilities |= NEARSIGHTED
target.eye_blind = 10 target.eye_blind = 10
target.eye_blurry = 20 target.eye_blurry = 20
addtimer(CALLBACK(target, /mob.proc/remove_nearsighted), 30 SECONDS) addtimer(CALLBACK(target, TYPE_PROC_REF(/mob, remove_nearsighted)), 30 SECONDS)
/mob/proc/changeling_deaf_sting() /mob/proc/changeling_deaf_sting()
set category = "Changeling" set category = "Changeling"
@@ -136,7 +136,7 @@
..() ..()
to_chat(target, SPAN_DANGER("Your ears pop and begin ringing loudly!")) to_chat(target, SPAN_DANGER("Your ears pop and begin ringing loudly!"))
target.sdisabilities |= DEAF target.sdisabilities |= DEAF
addtimer(CALLBACK(target, /mob.proc/remove_deaf), 30 SECONDS) addtimer(CALLBACK(target, TYPE_PROC_REF(/mob, remove_deaf)), 30 SECONDS)
/mob/proc/changeling_paralysis_sting() /mob/proc/changeling_paralysis_sting()
set category = "Changeling" set category = "Changeling"

View File

@@ -6,7 +6,7 @@
/datum/rune/teleport/New() /datum/rune/teleport/New()
..() ..()
addtimer(CALLBACK(src, .proc/random_network), 5) // if this rune somehow spawned without a network, we assign a random one addtimer(CALLBACK(src, PROC_REF(random_network)), 5) // if this rune somehow spawned without a network, we assign a random one
SScult.teleport_runes += src SScult.teleport_runes += src
/datum/rune/teleport/Destroy() /datum/rune/teleport/Destroy()

View File

@@ -37,7 +37,7 @@
return return
/obj/effect/gateway/active/New() /obj/effect/gateway/active/New()
addtimer(CALLBACK(src, .proc/do_spawn), rand(30, 60) SECONDS) addtimer(CALLBACK(src, PROC_REF(do_spawn)), rand(30, 60) SECONDS)
/obj/effect/gateway/active/proc/do_spawn() /obj/effect/gateway/active/proc/do_spawn()
var/thing = pick(spawnable) var/thing = pick(spawnable)

View File

@@ -327,7 +327,7 @@
A.launch_projectile(target) A.launch_projectile(target)
next_shot = world.time + shot_delay next_shot = world.time + shot_delay
A = null //So projectiles can GC A = null //So projectiles can GC
addtimer(CALLBACK(src, .proc/handle_firing), shot_delay + 1) addtimer(CALLBACK(src, PROC_REF(handle_firing)), shot_delay + 1)
/obj/structure/cult/pylon/attack_hand(mob/M) /obj/structure/cult/pylon/attack_hand(mob/M)
if (M.a_intent == "help") if (M.a_intent == "help")

View File

@@ -39,11 +39,11 @@
// EXPAND // EXPAND
if(!istype(T,type)) if(!istype(T,type))
addtimer(CALLBACK(src, .proc/after_tick, T), 10) addtimer(CALLBACK(src, PROC_REF(after_tick), T), 10)
if(A && !istype(A,type)) if(A && !istype(A,type))
addtimer(CALLBACK(src, .proc/after_tick, A), 10) addtimer(CALLBACK(src, PROC_REF(after_tick), A), 10)
if(B && !istype(B,type)) if(B && !istype(B,type))
addtimer(CALLBACK(src, .proc/after_tick, B), 10) addtimer(CALLBACK(src, PROC_REF(after_tick), B), 10)
if((spawned & (NORTH|SOUTH|EAST|WEST)) == (NORTH|SOUTH|EAST|WEST)) if((spawned & (NORTH|SOUTH|EAST|WEST)) == (NORTH|SOUTH|EAST|WEST))
STOP_PROCESSING(SScalamity, src) STOP_PROCESSING(SScalamity, src)

View File

@@ -64,8 +64,8 @@ var/global/universe_has_ended = 0
var/time = rand(30, 60) var/time = rand(30, 60)
log_debug("universal_state/cascade: Announcing to world in [time] seconds.") log_debug("universal_state/cascade: Announcing to world in [time] seconds.")
log_debug("universal_state/cascade: Ending universe in [(time SECONDS + 5 MINUTES)/10] seconds.") log_debug("universal_state/cascade: Ending universe in [(time SECONDS + 5 MINUTES)/10] seconds.")
addtimer(CALLBACK(src, .proc/announce_to_world), time SECONDS) addtimer(CALLBACK(src, PROC_REF(announce_to_world)), time SECONDS)
addtimer(CALLBACK(src, .proc/end_universe), time SECONDS + 5 MINUTES) addtimer(CALLBACK(src, PROC_REF(end_universe)), time SECONDS + 5 MINUTES)
/datum/universal_state/supermatter_cascade/proc/announce_to_world() /datum/universal_state/supermatter_cascade/proc/announce_to_world()
var/txt = {" var/txt = {"

View File

@@ -245,7 +245,7 @@ var/global/list/additional_antag_types = list()
all_candidates += antag.candidates all_candidates += antag.candidates
antag_templates_by_initial_spawn_req[antag] = antag.initial_spawn_req antag_templates_by_initial_spawn_req[antag] = antag.initial_spawn_req
sortTim(antag_templates_by_initial_spawn_req, /proc/cmp_numeric_asc, TRUE) sortTim(antag_templates_by_initial_spawn_req, GLOBAL_PROC_REF(cmp_numeric_asc), TRUE)
antag_templates = list_keys(antag_templates_by_initial_spawn_req) antag_templates = list_keys(antag_templates_by_initial_spawn_req)
var/list/valid_templates_per_candidate = list() // number of roles each candidate can satisfy var/list/valid_templates_per_candidate = list() // number of roles each candidate can satisfy
@@ -253,7 +253,7 @@ var/global/list/additional_antag_types = list()
valid_templates_per_candidate[candidate]++ valid_templates_per_candidate[candidate]++
valid_templates_per_candidate = shuffle(valid_templates_per_candidate) // shuffle before sorting so that candidates with the same number of templates will be in random order valid_templates_per_candidate = shuffle(valid_templates_per_candidate) // shuffle before sorting so that candidates with the same number of templates will be in random order
sortTim(valid_templates_per_candidate, /proc/cmp_numeric_asc, TRUE) sortTim(valid_templates_per_candidate, GLOBAL_PROC_REF(cmp_numeric_asc), TRUE)
for(var/datum/antagonist/antag in antag_templates) for(var/datum/antagonist/antag in antag_templates)
antag.candidates = list_keys(valid_templates_per_candidate) & antag.candidates // orders antag.candidates by valid_templates_per_candidate antag.candidates = list_keys(valid_templates_per_candidate) & antag.candidates // orders antag.candidates by valid_templates_per_candidate

View File

@@ -127,7 +127,7 @@
var/mob/living/L = A var/mob/living/L = A
if(L.stat == DEAD) if(L.stat == DEAD)
summoned_mobs -= L summoned_mobs -= L
addtimer(CALLBACK(src, .proc/remove_summon, L), 1) addtimer(CALLBACK(src, PROC_REF(remove_summon), L), 1)
/obj/item/technomancer_core/proc/remove_summon(var/mob/living/L) /obj/item/technomancer_core/proc/remove_summon(var/mob/living/L)
L.visible_message("<span class='notice'>\The [L] begins to fade away...</span>") L.visible_message("<span class='notice'>\The [L] begins to fade away...</span>")

View File

@@ -43,7 +43,7 @@
//Deal with protecting our wearer now. //Deal with protecting our wearer now.
if(ready) if(ready)
ready = FALSE ready = FALSE
addtimer(CALLBACK(src, .proc/recharge, user), cooldown_to_charge) addtimer(CALLBACK(src, PROC_REF(recharge), user), cooldown_to_charge)
visible_message("<span class='danger'>\The [user]'s [src.name] blocks [attack_text]!</span>") visible_message("<span class='danger'>\The [user]'s [src.name] blocks [attack_text]!</span>")
update_icon() update_icon()
return PROJECTILE_STOPPED return PROJECTILE_STOPPED

View File

@@ -50,7 +50,7 @@
spark(L, 5, cardinal) spark(L, 5, cardinal)
spark(user, 5, cardinal) spark(user, 5, cardinal)
L.throw_at(get_step(get_turf(src), get_dir(src, L)), 4, 1, src) L.throw_at(get_step(get_turf(src), get_dir(src, L)), 4, 1, src)
addtimer(CALLBACK(src, .proc/seize_mob, L, user), 1 SECOND) addtimer(CALLBACK(src, PROC_REF(seize_mob), L, user), 1 SECOND)
user.drop_item(src) user.drop_item(src)
src.loc = null src.loc = null

View File

@@ -195,7 +195,7 @@
admin_attacker_log_many_victims(src, victims, "used glare to stun", "was stunned by [key_name(src)] using glare", "used glare to stun") admin_attacker_log_many_victims(src, victims, "used glare to stun", "was stunned by [key_name(src)] using glare", "used glare to stun")
verbs -= /mob/living/carbon/human/proc/vampire_glare verbs -= /mob/living/carbon/human/proc/vampire_glare
ADD_VERB_IN_IF(src, 800, /mob/living/carbon/human/proc/vampire_glare, CALLBACK(src, .proc/finish_vamp_timeout)) ADD_VERB_IN_IF(src, 800, /mob/living/carbon/human/proc/vampire_glare, CALLBACK(src, PROC_REF(finish_vamp_timeout)))
// Targeted stun ability, moderate duration. // Targeted stun ability, moderate duration.
/mob/living/carbon/human/proc/vampire_hypnotise() /mob/living/carbon/human/proc/vampire_hypnotise()
@@ -236,7 +236,7 @@
admin_attack_log(src, T, "used hypnotise to stun [key_name(T)]", "was stunned by [key_name(src)] using hypnotise", "used hypnotise on") admin_attack_log(src, T, "used hypnotise to stun [key_name(T)]", "was stunned by [key_name(src)] using hypnotise", "used hypnotise on")
verbs -= /mob/living/carbon/human/proc/vampire_hypnotise verbs -= /mob/living/carbon/human/proc/vampire_hypnotise
ADD_VERB_IN_IF(src, 1200, /mob/living/carbon/human/proc/vampire_hypnotise, CALLBACK(src, .proc/finish_vamp_timeout)) ADD_VERB_IN_IF(src, 1200, /mob/living/carbon/human/proc/vampire_hypnotise, CALLBACK(src, PROC_REF(finish_vamp_timeout)))
else else
to_chat(src, SPAN_WARNING("You broke your gaze.")) to_chat(src, SPAN_WARNING("You broke your gaze."))
@@ -282,7 +282,7 @@
vampire.use_blood(20) vampire.use_blood(20)
verbs -= /mob/living/carbon/human/proc/vampire_veilstep verbs -= /mob/living/carbon/human/proc/vampire_veilstep
ADD_VERB_IN_IF(src, 300, /mob/living/carbon/human/proc/vampire_veilstep, CALLBACK(src, .proc/finish_vamp_timeout)) ADD_VERB_IN_IF(src, 300, /mob/living/carbon/human/proc/vampire_veilstep, CALLBACK(src, PROC_REF(finish_vamp_timeout)))
// Summons bats. // Summons bats.
/mob/living/carbon/human/proc/vampire_bats() /mob/living/carbon/human/proc/vampire_bats()
@@ -326,7 +326,7 @@
vampire.use_blood(60) vampire.use_blood(60)
verbs -= /mob/living/carbon/human/proc/vampire_bats verbs -= /mob/living/carbon/human/proc/vampire_bats
ADD_VERB_IN_IF(src, 1200, /mob/living/carbon/human/proc/vampire_bats, CALLBACK(src, .proc/finish_vamp_timeout)) ADD_VERB_IN_IF(src, 1200, /mob/living/carbon/human/proc/vampire_bats, CALLBACK(src, PROC_REF(finish_vamp_timeout)))
// Chiropteran Screech // Chiropteran Screech
/mob/living/carbon/human/proc/vampire_screech() /mob/living/carbon/human/proc/vampire_screech()
@@ -385,7 +385,7 @@
log_and_message_admins("used chiropteran screech.") log_and_message_admins("used chiropteran screech.")
verbs -= /mob/living/carbon/human/proc/vampire_screech verbs -= /mob/living/carbon/human/proc/vampire_screech
ADD_VERB_IN_IF(src, 3600, /mob/living/carbon/human/proc/vampire_screech, CALLBACK(src, .proc/finish_vamp_timeout)) ADD_VERB_IN_IF(src, 3600, /mob/living/carbon/human/proc/vampire_screech, CALLBACK(src, PROC_REF(finish_vamp_timeout)))
// Enables the vampire to be untouchable and walk through walls and other solid things. // Enables the vampire to be untouchable and walk through walls and other solid things.
/mob/living/carbon/human/proc/vampire_veilwalk() /mob/living/carbon/human/proc/vampire_veilwalk()
@@ -473,7 +473,7 @@
if(owner_mob.stat) if(owner_mob.stat)
if(owner_mob.stat == UNCONSCIOUS) if(owner_mob.stat == UNCONSCIOUS)
to_chat(owner_mob, SPAN_WARNING("You cannot maintain this form while unconcious.")) to_chat(owner_mob, SPAN_WARNING("You cannot maintain this form while unconcious."))
addtimer(CALLBACK(src, .proc/kick_unconcious), 10, TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(kick_unconcious)), 10, TIMER_UNIQUE)
else else
deactivate() deactivate()
return return
@@ -749,7 +749,7 @@
vampire.use_blood(150) vampire.use_blood(150)
verbs -= /mob/living/carbon/human/proc/vampire_enthrall verbs -= /mob/living/carbon/human/proc/vampire_enthrall
ADD_VERB_IN_IF(src, 2800, /mob/living/carbon/human/proc/vampire_enthrall, CALLBACK(src, .proc/finish_vamp_timeout)) ADD_VERB_IN_IF(src, 2800, /mob/living/carbon/human/proc/vampire_enthrall, CALLBACK(src, PROC_REF(finish_vamp_timeout)))
// Makes the vampire appear 'friendlier' to others. // Makes the vampire appear 'friendlier' to others.
/mob/living/carbon/human/proc/vampire_presence() /mob/living/carbon/human/proc/vampire_presence()
@@ -1010,4 +1010,4 @@
G.synch() G.synch()
verbs -= /mob/living/carbon/human/proc/grapple verbs -= /mob/living/carbon/human/proc/grapple
ADD_VERB_IN_IF(src, 800, /mob/living/carbon/human/proc/grapple, CALLBACK(src, .proc/finish_vamp_timeout, VAMP_FRENZIED)) ADD_VERB_IN_IF(src, 800, /mob/living/carbon/human/proc/grapple, CALLBACK(src, PROC_REF(finish_vamp_timeout), VAMP_FRENZIED))

View File

@@ -89,7 +89,7 @@
/proc/get_all_access_datums() /proc/get_all_access_datums()
if(!priv_all_access_datums) if(!priv_all_access_datums)
priv_all_access_datums = init_subtypes(/datum/access) priv_all_access_datums = init_subtypes(/datum/access)
sortTim(priv_all_access_datums, /proc/cmp_access, FALSE) sortTim(priv_all_access_datums, GLOBAL_PROC_REF(cmp_access), FALSE)
return priv_all_access_datums return priv_all_access_datums

View File

@@ -54,7 +54,7 @@
/datum/outfit/job/representative/post_equip(mob/living/carbon/human/H, visualsOnly) /datum/outfit/job/representative/post_equip(mob/living/carbon/human/H, visualsOnly)
. = ..() . = ..()
if(H && !visualsOnly) if(H && !visualsOnly)
addtimer(CALLBACK(src, .proc/send_representative_mission, H), 5 MINUTES) addtimer(CALLBACK(src, PROC_REF(send_representative_mission), H), 5 MINUTES)
return TRUE return TRUE
/datum/outfit/job/representative/proc/send_representative_mission(var/mob/living/carbon/human/H) /datum/outfit/job/representative/proc/send_representative_mission(var/mob/living/carbon/human/H)

View File

@@ -112,7 +112,7 @@ var/global/list/bluespace_inhibitors
playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 20) playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 20)
visible_message(SPAN_DANGER("\The [src] goes haywire!")) visible_message(SPAN_DANGER("\The [src] goes haywire!"))
do_break() do_break()
addtimer(CALLBACK(src, .proc/haywire_teleport), 10 SECONDS) addtimer(CALLBACK(src, PROC_REF(haywire_teleport)), 10 SECONDS)
/obj/machinery/anti_bluespace/proc/haywire_teleport() /obj/machinery/anti_bluespace/proc/haywire_teleport()

View File

@@ -232,7 +232,7 @@ obj/machinery/computer/general_air_control/Destroy()
signal.data["sigtype"] = "command" signal.data["sigtype"] = "command"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
addtimer(CALLBACK(SSvueui, /datum/controller/subsystem/processing/vueui/proc/check_uis_for_change, src), 5) //Just in case we get no new data addtimer(CALLBACK(SSvueui, TYPE_PROC_REF(/datum/controller/subsystem/processing/vueui, check_uis_for_change), src), 5) //Just in case we get no new data
/obj/machinery/computer/general_air_control/supermatter_core /obj/machinery/computer/general_air_control/supermatter_core
icon = 'icons/obj/modular_console.dmi' icon = 'icons/obj/modular_console.dmi'
@@ -318,7 +318,7 @@ obj/machinery/computer/general_air_control/Destroy()
signal.data["sigtype"]="command" signal.data["sigtype"]="command"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
addtimer(CALLBACK(SSvueui, /datum/controller/subsystem/processing/vueui/proc/check_uis_for_change, src), 5) //Just in case we get no new data addtimer(TYPE_PROC_REF(/datum/controller/subsystem/processing/vueui, check_uis_for_change), src, 5) //Just in case we get no new data
/obj/machinery/computer/general_air_control/fuel_injection /obj/machinery/computer/general_air_control/fuel_injection
icon_screen = "alert:0" icon_screen = "alert:0"

View File

@@ -132,7 +132,7 @@
if (on) if (on)
turn_off() turn_off()
addtimer(CALLBACK(src, .proc/post_emp, was_on), severity * 300) addtimer(CALLBACK(src, PROC_REF(post_emp), was_on), severity * 300)
/obj/machinery/bot/proc/post_emp(was_on) /obj/machinery/bot/proc/post_emp(was_on)
stat &= ~EMPED stat &= ~EMPED

View File

@@ -203,7 +203,7 @@
return return
var/list/target = L.Copy() var/list/target = L.Copy()
// sortTim sorts in-place, but returns a ref to the list anyways. // sortTim sorts in-place, but returns a ref to the list anyways.
return sortTim(target, /proc/cmp_camera, FALSE) return sortTim(target, GLOBAL_PROC_REF(cmp_camera), FALSE)
mob/living/proc/near_camera() mob/living/proc/near_camera()
if (!isturf(loc)) if (!isturf(loc))

View File

@@ -15,7 +15,7 @@ var/global/list/minor_air_alarms = list()
/obj/machinery/computer/atmos_alert/Initialize() /obj/machinery/computer/atmos_alert/Initialize()
. = ..() . = ..()
atmosphere_alarm.register_alarm(src, /atom/.proc/update_icon) atmosphere_alarm.register_alarm(src, TYPE_PROC_REF(/atom, update_icon))
/obj/machinery/computer/atmos_alert/Destroy() /obj/machinery/computer/atmos_alert/Destroy()
atmosphere_alarm.unregister_alarm(src) atmosphere_alarm.unregister_alarm(src)

View File

@@ -39,7 +39,7 @@
/obj/item/card/id/guest/Initialize(mapload, duration) /obj/item/card/id/guest/Initialize(mapload, duration)
. = ..(mapload) . = ..(mapload)
expiration_time = duration + world.time expiration_time = duration + world.time
addtimer(CALLBACK(src, .proc/expire), duration) addtimer(CALLBACK(src, PROC_REF(expire)), duration)
/obj/item/card/id/guest/proc/expire() /obj/item/card/id/guest/proc/expire()
icon_state += "_invalid" icon_state += "_invalid"

View File

@@ -214,9 +214,9 @@
update_icon() update_icon()
updateUsrDialog() updateUsrDialog()
INVOKE_ASYNC(src, .proc/do_spin) INVOKE_ASYNC(src, PROC_REF(do_spin))
addtimer(CALLBACK(src, .proc/finish_spinning, user, the_name), SPIN_TIME - (REEL_DEACTIVATE_DELAY * reels.len)) //WARNING: no sanity checking for user since it's not needed and would complicate things (machine should still spin even if user is gone), be wary of this if you're changing this code. addtimer(CALLBACK(src, PROC_REF(finish_spinning), user, the_name), SPIN_TIME - (REEL_DEACTIVATE_DELAY * reels.len)) //WARNING: no sanity checking for user since it's not needed and would complicate things (machine should still spin even if user is gone), be wary of this if you're changing this code.
/obj/machinery/computer/slot_machine/proc/do_spin(mob/user, the_name) /obj/machinery/computer/slot_machine/proc/do_spin(mob/user, the_name)
while(working) while(working)

View File

@@ -23,7 +23,7 @@
. = ..() . = ..()
if(monitor_type) if(monitor_type)
register_monitor(new monitor_type(src)) register_monitor(new monitor_type(src))
alarm_monitor.register_alarm(src, /atom/.proc/update_icon) alarm_monitor.register_alarm(src, TYPE_PROC_REF(/atom, update_icon))
/obj/machinery/computer/station_alert/Destroy() /obj/machinery/computer/station_alert/Destroy()
. = ..() . = ..()

View File

@@ -196,7 +196,7 @@
for(var/obj/machinery/door/blast/M in SSmachinery.machinery) for(var/obj/machinery/door/blast/M in SSmachinery.machinery)
if (M.id == src.id) if (M.id == src.id)
same_id += M same_id += M
INVOKE_ASYNC(M, /obj/machinery/door/blast/.proc/open) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/door/blast, open))
sleep(20) sleep(20)
@@ -207,7 +207,7 @@
sleep(50) sleep(50)
for(var/mm in same_id) for(var/mm in same_id)
INVOKE_ASYNC(mm, /obj/machinery/door/blast/.proc/close) INVOKE_ASYNC(mm, TYPE_PROC_REF(/obj/machinery/door/blast, close))
icon_state = "launcherbtt" icon_state = "launcherbtt"
active = 0 active = 0

View File

@@ -686,13 +686,13 @@ About the new airlock wires panel:
main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
main_power_lost_at = world.time main_power_lost_at = world.time
if (main_power_lost_until > 0) if (main_power_lost_until > 0)
addtimer(CALLBACK(src, .proc/regainMainPower), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) addtimer(CALLBACK(src, PROC_REF(regainMainPower)), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
// If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running // If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running
if(backup_power_lost_until == -1 && !backupPowerCablesCut()) if(backup_power_lost_until == -1 && !backupPowerCablesCut())
backup_power_lost_until = world.time + SecondsToTicks(10) backup_power_lost_until = world.time + SecondsToTicks(10)
backup_power_lost_at = world.time backup_power_lost_at = world.time
addtimer(CALLBACK(src, .proc/regainBackupPower), 10 SECONDS, TIMER_UNIQUE | TIMER_NO_HASH_WAIT) addtimer(CALLBACK(src, PROC_REF(regainBackupPower)), 10 SECONDS, TIMER_UNIQUE | TIMER_NO_HASH_WAIT)
if(!arePowerSystemsOn() && !isnull(aiActionTimer)) // AI action timer gets reset if any if(!arePowerSystemsOn() && !isnull(aiActionTimer)) // AI action timer gets reset if any
deltimer(aiActionTimer) deltimer(aiActionTimer)
@@ -704,7 +704,7 @@ About the new airlock wires panel:
backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
backup_power_lost_at = world.time backup_power_lost_at = world.time
if (backup_power_lost_until > 0) if (backup_power_lost_until > 0)
addtimer(CALLBACK(src, .proc/regainBackupPower), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) addtimer(CALLBACK(src, PROC_REF(regainBackupPower)), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
if(!arePowerSystemsOn() && !isnull(aiActionTimer)) // AI action timer gets reset if any if(!arePowerSystemsOn() && !isnull(aiActionTimer)) // AI action timer gets reset if any
deltimer(aiActionTimer) deltimer(aiActionTimer)
@@ -747,7 +747,7 @@ About the new airlock wires panel:
electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration) electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration)
electrified_at = world.time electrified_at = world.time
if (electrified_until > 0) if (electrified_until > 0)
addtimer(CALLBACK(src, .proc/electrify, 0), duration SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) addtimer(CALLBACK(src, PROC_REF(electrify), 0), duration SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
if(feedback && message) if(feedback && message)
to_chat(usr, message) to_chat(usr, message)
@@ -1175,11 +1175,11 @@ About the new airlock wires panel:
else if(activate) else if(activate)
to_chat(usr, SPAN_NOTICE("The door bolts should drop in [src.aiBoltingDelay] seconds.")) to_chat(usr, SPAN_NOTICE("The door bolts should drop in [src.aiBoltingDelay] seconds."))
src.audible_message("[icon2html(src.icon, viewers(get_turf(src)))] <b>[src]</b> announces, <span class='notice'>\"Bolts set to drop in <strong>[src.aiBoltingDelay] seconds</strong>.\"</span>") src.audible_message("[icon2html(src.icon, viewers(get_turf(src)))] <b>[src]</b> announces, <span class='notice'>\"Bolts set to drop in <strong>[src.aiBoltingDelay] seconds</strong>.\"</span>")
src.aiActionTimer = addtimer(CALLBACK(src, .proc/lock), src.aiBoltingDelay SECONDS, TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_STOPPABLE) src.aiActionTimer = addtimer(CALLBACK(src, PROC_REF(lock)), src.aiBoltingDelay SECONDS, TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_STOPPABLE)
else else
to_chat(usr, SPAN_NOTICE("The door bolts should raise in [src.aiUnBoltingDelay] seconds.")) to_chat(usr, SPAN_NOTICE("The door bolts should raise in [src.aiUnBoltingDelay] seconds."))
src.audible_message("[icon2html(src.icon, viewers(get_turf(src)))] <b>[src]</b> announces, <span class='notice'>\"Bolts set to raise in <strong>[src.aiUnBoltingDelay] seconds</strong>.\"</span>") src.audible_message("[icon2html(src.icon, viewers(get_turf(src)))] <b>[src]</b> announces, <span class='notice'>\"Bolts set to raise in <strong>[src.aiUnBoltingDelay] seconds</strong>.\"</span>")
src.aiActionTimer = addtimer(CALLBACK(src, .proc/unlock), src.aiUnBoltingDelay SECONDS, TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_STOPPABLE) src.aiActionTimer = addtimer(CALLBACK(src, PROC_REF(unlock)), src.aiUnBoltingDelay SECONDS, TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_STOPPABLE)
else // everyone else else // everyone else
if(activate) if(activate)
if(src.lock()) if(src.lock())
@@ -1305,7 +1305,7 @@ About the new airlock wires panel:
"You hear a welding torch on metal." "You hear a welding torch on metal."
) )
playsound(src, 'sound/items/welder.ogg', 50, 1) playsound(src, 'sound/items/welder.ogg', 50, 1)
if(!WT.use_tool(src, user, 20, volume = 50, extra_checks = CALLBACK(src, .proc/is_open, src.density))) if(!WT.use_tool(src, user, 20, volume = 50, extra_checks = CALLBACK(src, PROC_REF(is_open), src.density)))
return TRUE return TRUE
if(!WT.use(0,user)) if(!WT.use(0,user))
to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task."))
@@ -1411,7 +1411,7 @@ About the new airlock wires panel:
SPAN_WARNING("You start cutting the airlock control panel..."),\ SPAN_WARNING("You start cutting the airlock control panel..."),\
SPAN_NOTICE("You hear a loud buzzing sound and metal grinding on metal...")\ SPAN_NOTICE("You hear a loud buzzing sound and metal grinding on metal...")\
) )
if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, .proc/CanChainsaw, C))) if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, PROC_REF(CanChainsaw), C)))
user.visible_message(\ user.visible_message(\
SPAN_WARNING("[user.name] finishes cutting the control pannel of the airlock with the [C]."),\ SPAN_WARNING("[user.name] finishes cutting the control pannel of the airlock with the [C]."),\
SPAN_WARNING("You finish cutting the airlock control panel."),\ SPAN_WARNING("You finish cutting the airlock control panel."),\
@@ -1429,7 +1429,7 @@ About the new airlock wires panel:
SPAN_WARNING("You start cutting below the airlock..."),\ SPAN_WARNING("You start cutting below the airlock..."),\
SPAN_NOTICE("You hear a loud buzzing sound and metal grinding on metal...")\ SPAN_NOTICE("You hear a loud buzzing sound and metal grinding on metal...")\
) )
if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, .proc/CanChainsaw, C))) if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, PROC_REF(CanChainsaw), C)))
user.visible_message(\ user.visible_message(\
SPAN_WARNING("[user.name] finishes cutting below the airlock with the [C]."),\ SPAN_WARNING("[user.name] finishes cutting below the airlock with the [C]."),\
SPAN_NOTICE("You finish cutting below the airlock."),\ SPAN_NOTICE("You finish cutting below the airlock."),\
@@ -1445,7 +1445,7 @@ About the new airlock wires panel:
SPAN_WARNING("You start cutting between the airlock..."),\ SPAN_WARNING("You start cutting between the airlock..."),\
SPAN_NOTICE("You hear a loud buzzing sound and metal grinding on metal...")\ SPAN_NOTICE("You hear a loud buzzing sound and metal grinding on metal...")\
) )
if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, .proc/CanChainsaw, C))) if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, PROC_REF(CanChainsaw), C)))
user.visible_message(\ user.visible_message(\
SPAN_WARNING("[user.name] finishes cutting between the airlock."),\ SPAN_WARNING("[user.name] finishes cutting between the airlock."),\
SPAN_WARNING("You finish cutting between the airlock."),\ SPAN_WARNING("You finish cutting between the airlock."),\
@@ -1674,10 +1674,10 @@ About the new airlock wires panel:
electrified_until = 0 electrified_until = 0
//if we lost power open 'er up //if we lost power open 'er up
if(insecure) if(insecure)
INVOKE_ASYNC(src, /obj/machinery/door/.proc/open, 1) INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/door, open), 1)
securitylock = TRUE securitylock = TRUE
else if(securitylock) else if(securitylock)
INVOKE_ASYNC(src, /obj/machinery/door/.proc/close, 1) INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/door, close), 1)
securitylock = FALSE securitylock = FALSE
update_icon() update_icon()

View File

@@ -41,9 +41,9 @@
return return
if (ROUND_IS_STARTED) if (ROUND_IS_STARTED)
addtimer(CALLBACK(src, .proc/execute_current_command), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(execute_current_command)), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
else else
SSticker.OnRoundstart(CALLBACK(src, .proc/handle_queue_command)) SSticker.OnRoundstart(CALLBACK(src, PROC_REF(handle_queue_command)))
waiting_for_roundstart = TRUE waiting_for_roundstart = TRUE
/obj/machinery/door/airlock/proc/handle_queue_command() /obj/machinery/door/airlock/proc/handle_queue_command()
@@ -314,4 +314,4 @@
//if there's no power, receive the signal but just don't do anything. This allows airlocks to continue to work normally once power is restored //if there's no power, receive the signal but just don't do anything. This allows airlocks to continue to work normally once power is restored
if(arePowerSystemsOn()) if(arePowerSystemsOn())
INVOKE_ASYNC(src, .proc/execute_current_command) INVOKE_ASYNC(src, PROC_REF(execute_current_command))

View File

@@ -188,9 +188,9 @@
return return
if((stat & NOPOWER) && fail_secure) if((stat & NOPOWER) && fail_secure)
securitylock = !density // Blast doors will only re-open when power is restored if they were open originally. securitylock = !density // Blast doors will only re-open when power is restored if they were open originally.
INVOKE_ASYNC(src, /obj/machinery/door/blast/.proc/force_close) INVOKE_ASYNC(src, PROC_REF(force_close))
else if(securitylock && fail_secure) else if(securitylock && fail_secure)
INVOKE_ASYNC(src, /obj/machinery/door/blast/.proc/force_open) INVOKE_ASYNC(src, PROC_REF(force_open))
securitylock = FALSE securitylock = FALSE
/obj/machinery/door/blast/attack_hand(mob/user as mob) /obj/machinery/door/blast/attack_hand(mob/user as mob)

View File

@@ -133,10 +133,10 @@
return ..() return ..()
/obj/machinery/door/proc/close_door_in(var/time = 5 SECONDS) /obj/machinery/door/proc/close_door_in(var/time = 5 SECONDS)
addtimer(CALLBACK(src, .proc/close), time, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(close)), time, TIMER_UNIQUE | TIMER_OVERRIDE)
/obj/machinery/door/proc/close_hatch_in(var/time = 3 SECONDS) /obj/machinery/door/proc/close_hatch_in(var/time = 3 SECONDS)
addtimer(CALLBACK(src, .proc/close_hatch), time, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(close_hatch)), time, TIMER_UNIQUE | TIMER_OVERRIDE)
/obj/machinery/door/proc/can_open() /obj/machinery/door/proc/can_open()
if(!density || operating || !ROUND_IS_STARTED) if(!density || operating || !ROUND_IS_STARTED)
@@ -537,7 +537,7 @@
if (autoclose) if (autoclose)
for (var/atom/movable/M in get_turf(src)) for (var/atom/movable/M in get_turf(src))
if (M.density && M != src) if (M.density && M != src)
addtimer(CALLBACK(src, .proc/autoclose), 60, TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(autoclose)), 60, TIMER_UNIQUE)
break break
operating = TRUE operating = TRUE

View File

@@ -247,7 +247,7 @@
close() close()
if(needs_to_close) if(needs_to_close)
addtimer(CALLBACK(src, .proc/do_close), 50) addtimer(CALLBACK(src, PROC_REF(do_close)), 50)
/obj/machinery/door/firedoor/proc/do_close() /obj/machinery/door/firedoor/proc/do_close()
var/alarmed = FALSE var/alarmed = FALSE
@@ -275,7 +275,7 @@
SPAN_ITALIC("You hear a welding torch on metal.") SPAN_ITALIC("You hear a welding torch on metal.")
) )
playsound(src, 'sound/items/welder.ogg', 50, 1) playsound(src, 'sound/items/welder.ogg', 50, 1)
if(!WT.use_tool(src, user, 20, volume = 50, extra_checks = CALLBACK(src, .proc/is_open, src.density))) if(!WT.use_tool(src, user, 20, volume = 50, extra_checks = CALLBACK(src, PROC_REF(is_open), src.density)))
return return
if(!WT.use(0,user)) if(!WT.use(0,user))
to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task."))

View File

@@ -61,7 +61,7 @@
open() open()
else else
open() open()
addtimer(CALLBACK(src, .proc/close), check_access(null) ? 5 SECONDS : 2 SECONDS) addtimer(CALLBACK(src, PROC_REF(close)), check_access(null) ? 5 SECONDS : 2 SECONDS)
/obj/machinery/door/window/allowed(mob/M) /obj/machinery/door/window/allowed(mob/M)
. = ..() . = ..()

View File

@@ -251,7 +251,7 @@
soundloop = new(src, FALSE) soundloop = new(src, FALSE)
var/area/A = get_area(src) var/area/A = get_area(src)
RegisterSignal(A, COMSIG_AREA_FIRE_ALARM, /atom/.proc/update_icon) RegisterSignal(A, COMSIG_AREA_FIRE_ALARM, TYPE_PROC_REF(/atom, update_icon))
/obj/machinery/firealarm/Destroy() /obj/machinery/firealarm/Destroy()
QDEL_NULL(soundloop) QDEL_NULL(soundloop)

View File

@@ -44,7 +44,7 @@
// If the cell is almost empty rarely "flicker" the light. Aesthetic only. // If the cell is almost empty rarely "flicker" the light. Aesthetic only.
if((cell.percent() < 10) && prob(5)) if((cell.percent() < 10) && prob(5))
set_light(brightness_on/3, 0.5) set_light(brightness_on/3, 0.5)
addtimer(CALLBACK(src, .proc/stop_flicker), 5, TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(stop_flicker)), 5, TIMER_UNIQUE)
cell.use(use*CELLRATE) cell.use(use*CELLRATE)

View File

@@ -169,7 +169,7 @@ Possible to do for anyone motivated enough:
to_chat(usr, SPAN_DANGER("Could not locate that holopad, this is a bug!")) to_chat(usr, SPAN_DANGER("Could not locate that holopad, this is a bug!"))
return return
connected_pad = HP connected_pad = HP
INVOKE_ASYNC(src, .proc/make_call, connected_pad, usr, forcing_call) INVOKE_ASYNC(src, PROC_REF(make_call), connected_pad, usr, forcing_call)
if(href_list["toggle_command"]) if(href_list["toggle_command"])
forcing_call = !forcing_call forcing_call = !forcing_call

View File

@@ -67,6 +67,6 @@
update_icon() update_icon()
for(var/obj/machinery/holosign/M in SSmachinery.machinery) for(var/obj/machinery/holosign/M in SSmachinery.machinery)
if (M.id == src.id) if (M.id == src.id)
INVOKE_ASYNC(M, /obj/machinery/holosign/proc/toggle) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/holosign, toggle))
return return

View File

@@ -159,7 +159,7 @@
for(var/obj/machinery/sparker/M in SSmachinery.machinery) for(var/obj/machinery/sparker/M in SSmachinery.machinery)
if (M.id == id) if (M.id == id)
INVOKE_ASYNC(M, /obj/machinery/sparker/proc/ignite) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/sparker, ignite))
for(var/obj/machinery/igniter/M in SSmachinery.machinery) for(var/obj/machinery/igniter/M in SSmachinery.machinery)
if(M.id == id) if(M.id == id)

View File

@@ -25,7 +25,7 @@
name = "light switch ([area.name])" name = "light switch ([area.name])"
src.on = src.area.lightswitch src.on = src.area.lightswitch
addtimer(CALLBACK(src, .proc/sync_lights), 25) addtimer(CALLBACK(src, PROC_REF(sync_lights)), 25)
update_icon() update_icon()
/obj/machinery/light_switch/update_icon() /obj/machinery/light_switch/update_icon()

View File

@@ -465,7 +465,7 @@ Class Procs:
message = "\The [src] rattles to life and spits out a paper titled [paper]." message = "\The [src] rattles to life and spits out a paper titled [paper]."
visible_message(SPAN_NOTICE(message)) visible_message(SPAN_NOTICE(message))
addtimer(CALLBACK(src, .proc/print_move_paper, paper), print_delay) addtimer(CALLBACK(src, PROC_REF(print_move_paper), paper), print_delay)
return 1 return 1

View File

@@ -34,7 +34,7 @@
hide(!T.is_plating()) hide(!T.is_plating())
center = T center = T
addtimer(CALLBACK(src, .proc/magnetic_process), 0, TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(magnetic_process)), 0, TIMER_UNIQUE)
/obj/machinery/magnetic_module/LateInitialize() /obj/machinery/magnetic_module/LateInitialize()
if(SSradio) if(SSradio)

View File

@@ -82,7 +82,7 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
/obj/machinery/navbeacon/receive_signal(datum/signal/signal) /obj/machinery/navbeacon/receive_signal(datum/signal/signal)
var/request = signal.data["findbeacon"] var/request = signal.data["findbeacon"]
if(request && ((request in codes) || request == "any" || request == location)) if(request && ((request in codes) || request == "any" || request == location))
addtimer(CALLBACK(src, .proc/post_signal), 1) addtimer(CALLBACK(src, PROC_REF(post_signal)), 1)
// return a signal giving location and transponder codes // return a signal giving location and transponder codes

View File

@@ -123,7 +123,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.ispowered = 1 src.ispowered = 1
src.update_icon() src.update_icon()
else else
addtimer(CALLBACK(src, .proc/post_power_loss), rand(1, 15)) addtimer(CALLBACK(src, PROC_REF(post_power_loss)), rand(1, 15))
/obj/machinery/newscaster/proc/post_power_loss() /obj/machinery/newscaster/proc/post_power_loss()
ispowered = 0 ispowered = 0
@@ -1030,7 +1030,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if (!alert) if (!alert)
alert = 1 alert = 1
update_icon() update_icon()
addtimer(CALLBACK(src, .proc/clearAlert), 300, TIMER_UNIQUE) addtimer(CALLBACK(src, PROC_REF(clearAlert)), 300, TIMER_UNIQUE)
playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1) playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1)
else else

View File

@@ -308,7 +308,7 @@
if(powered()) if(powered())
queue_icon_update() queue_icon_update()
else else
addtimer(CALLBACK(src, .proc/lose_power), rand(1, 15)) addtimer(CALLBACK(src, PROC_REF(lose_power)), rand(1, 15))
/obj/machinery/porta_turret/proc/lose_power() /obj/machinery/porta_turret/proc/lose_power()
stat |= NOPOWER stat |= NOPOWER
@@ -408,7 +408,7 @@
if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off
if(!attacked && !emagged) if(!attacked && !emagged)
attacked = 1 attacked = 1
addtimer(CALLBACK(src, .proc/reset_attacked), 1 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(reset_attacked)), 1 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
return ..() return ..()
/obj/machinery/porta_turret/proc/reset_attacked() /obj/machinery/porta_turret/proc/reset_attacked()
@@ -450,7 +450,7 @@
if(enabled) if(enabled)
if(!attacked && !emagged) if(!attacked && !emagged)
attacked = 1 attacked = 1
addtimer(CALLBACK(src, .proc/reset_attacked), 60, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(reset_attacked)), 60, TIMER_UNIQUE | TIMER_OVERRIDE)
..() ..()
take_damage(damage) take_damage(damage)
@@ -468,7 +468,7 @@
emagged = TRUE emagged = TRUE
enabled = FALSE enabled = FALSE
addtimer(CALLBACK(src, .proc/post_emp_act), rand(60, 600)) addtimer(CALLBACK(src, PROC_REF(post_emp_act)), rand(60, 600))
..() ..()
@@ -528,7 +528,7 @@
tryToShootAt(secondarytargets) tryToShootAt(secondarytargets)
if(!targets.len && !secondarytargets.len) if(!targets.len && !secondarytargets.len)
resetting = addtimer(CALLBACK(src, .proc/reset), 6 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) // no valid targets, close the cover resetting = addtimer(CALLBACK(src, PROC_REF(reset)), 6 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) // no valid targets, close the cover
else if(resetting) else if(resetting)
deltimer(resetting) deltimer(resetting)
resetting = null resetting = null
@@ -769,7 +769,7 @@
//Shooting Code: //Shooting Code:
A.launch_projectile(target, def_zone) A.launch_projectile(target, def_zone)
last_fired = TRUE last_fired = TRUE
addtimer(CALLBACK(src, .proc/reset_last_fired), shot_delay, TIMER_UNIQUE | TIMER_OVERRIDE) addtimer(CALLBACK(src, PROC_REF(reset_last_fired)), shot_delay, TIMER_UNIQUE | TIMER_OVERRIDE)
/datum/turret_checks /datum/turret_checks
var/enabled var/enabled

View File

@@ -41,7 +41,7 @@
var/datum/progressbar/progbar = new(user, C.maxcharge, src) var/datum/progressbar/progbar = new(user, C.maxcharge, src)
progbar.update(C.charge) progbar.update(C.charge)
LAZYADD(chargebars, progbar) LAZYADD(chargebars, progbar)
chargebars[progbar] = addtimer(CALLBACK(src, .proc/remove_bar, progbar, null), 3 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) chargebars[progbar] = addtimer(CALLBACK(src, PROC_REF(remove_bar), progbar, null), 3 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE)
/obj/machinery/recharger/proc/remove_bar(datum/progressbar/bar, timerid) /obj/machinery/recharger/proc/remove_bar(datum/progressbar/bar, timerid)
if (!timerid || deltimer(timerid)) if (!timerid || deltimer(timerid))

View File

@@ -73,7 +73,7 @@
to_chat(user, "<span class='notice'>You link \the [C] to \the [src], it will now ring upon someone using \the [src].</span>") to_chat(user, "<span class='notice'>You link \the [C] to \the [src], it will now ring upon someone using \the [src].</span>")
rings_pdas += C rings_pdas += C
// WONT FIX: This requires callbacks fuck my dick. // WONT FIX: This requires callbacks fuck my dick.
destroyed_event.register(C, src, .proc/remove_pda) destroyed_event.register(C, src, PROC_REF(remove_pda))
update_icon() update_icon()
return TRUE return TRUE
else else
@@ -112,7 +112,7 @@
var/message = "Attention required!" var/message = "Attention required!"
P.get_notification(message, 1, "[capitalize(department)]") P.get_notification(message, 1, "[capitalize(department)]")
addtimer(CALLBACK(src, .proc/unping), 45 SECONDS) addtimer(CALLBACK(src, PROC_REF(unping)), 45 SECONDS)
/obj/machinery/ringer/proc/unping() /obj/machinery/ringer/proc/unping()
pinged = FALSE pinged = FALSE

View File

@@ -127,7 +127,7 @@
if(watching_mob.client) if(watching_mob.client)
animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING) animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING)
var/mob/M = watching_mob var/mob/M = watching_mob
addtimer(CALLBACK(src, .proc/clear_image, M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out addtimer(CALLBACK(src, PROC_REF(clear_image), M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out
moved_event.unregister(watching_mob, src) moved_event.unregister(watching_mob, src)
destroyed_event.unregister(watching_mob, src) destroyed_event.unregister(watching_mob, src)
watching_mob = null watching_mob = null

View File

@@ -66,7 +66,7 @@
MK.forceMove(loc) MK.forceMove(loc)
// Will help make emagging the console not so easy to get away with. // Will help make emagging the console not so easy to get away with.
MK.info += "<br><br><span class='warning'>£%@%(*$%&(£&?*(%&£/{}</span>" MK.info += "<br><br><span class='warning'>£%@%(*$%&(£&?*(%&£/{}</span>"
addtimer(CALLBACK(src, .proc/UnmagConsole), 100 * length(linkedServer.decryptkey)) addtimer(CALLBACK(src, PROC_REF(UnmagConsole)), 100 * length(linkedServer.decryptkey))
message = rebootmsg message = rebootmsg
update_icon() update_icon()
return TRUE return TRUE

Some files were not shown because too many files have changed in this diff Show More