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:
MACRO_COUNT: 0
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"
jobs:

View File

@@ -26,8 +26,8 @@
#include "code\__defines\antagonist.dm"
#include "code\__defines\armor.dm"
#include "code\__defines\atmos.dm"
#include "code\__defines\auxtools.dm"
#include "code\__defines\battle_monsters.dm"
#include "code\__defines\byond_compat.dm"
#include "code\__defines\callback.dm"
#include "code\__defines\chemistry.dm"
#include "code\__defines\color.dm"
@@ -35,7 +35,6 @@
#include "code\__defines\dna.dm"
#include "code\__defines\drinks.dm"
#include "code\__defines\dview.dm"
#include "code\__defines\extools.dm"
#include "code\__defines\flags.dm"
#include "code\__defines\gamemode.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.
#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_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(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, TYPE_PROC_REF(/atom, add_verb), verb, callback), time, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
// Maploader bounds indices
#define MAP_MINX 1

View File

@@ -18,6 +18,6 @@
#define QDELETED(X) (!X || X.gcDestroyed)
#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_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
/// 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_create_png(path, width, height, data) call(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_strip_metadata(fname) LIBCALL(RUST_G, "dmi_strip_metadata")(fname)
#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) LIBCALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
#define rustg_file_read(fname) call(RUST_G, "file_read")(fname)
#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname)
#define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname)
#define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname)
#define rustg_file_read(fname) LIBCALL(RUST_G, "file_read")(fname)
#define rustg_file_exists(fname) LIBCALL(RUST_G, "file_exists")(fname)
#define rustg_file_write(text, fname) LIBCALL(RUST_G, "file_write")(text, fname)
#define rustg_file_append(text, fname) LIBCALL(RUST_G, "file_append")(text, fname)
#ifdef RUSTG_OVERRIDE_BUILTINS
#define file2text(fname) rustg_file_read("[fname]")
#define text2file(text, fname) rustg_file_append(text, "[fname]")
#endif
#define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev)
#define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev)
#define rustg_git_revparse(rev) LIBCALL(RUST_G, "rg_git_revparse")(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_file(algorithm, fname) call(RUST_G, "hash_file")(algorithm, fname)
#define rustg_hash_generate_totp(seed) call(RUST_G, "generate_totp")(seed)
#define rustg_hash_generate_totp_tolerance(seed, tolerance) call(RUST_G, "generate_totp_tolerance")(seed, tolerance)
#define rustg_hash_string(algorithm, text) LIBCALL(RUST_G, "hash_string")(algorithm, text)
#define rustg_hash_file(algorithm, fname) LIBCALL(RUST_G, "hash_file")(algorithm, fname)
#define rustg_hash_generate_totp(seed) LIBCALL(RUST_G, "generate_totp")(seed)
#define rustg_hash_generate_totp_tolerance(seed, tolerance) LIBCALL(RUST_G, "generate_totp_tolerance")(seed, tolerance)
#define RUSTG_HASH_MD5 "md5"
#define RUSTG_HASH_SHA1 "sha1"
@@ -80,25 +80,25 @@
#define RUSTG_HTTP_METHOD_PATCH "patch"
#define RUSTG_HTTP_METHOD_HEAD "head"
#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_async(method, url, body, headers, options) call(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_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) LIBCALL(RUST_G, "http_request_async")(method, url, body, headers, options)
#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_SUCH_JOB "NO SUCH JOB"
#define RUSTG_JOB_ERROR "JOB PANICKED"
#define rustg_log_write(fname, text, format) call(RUST_G, "log_write")(fname, text, format)
/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")()
#define rustg_log_write(fname, text, format) LIBCALL(RUST_G, "log_write")(fname, text, format)
/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_milliseconds(id) text2num(call(RUST_G, "time_milliseconds")(id))
#define rustg_time_reset(id) call(RUST_G, "time_reset")(id)
#define rustg_time_microseconds(id) text2num(LIBCALL(RUST_G, "time_microseconds")(id))
#define rustg_time_milliseconds(id) text2num(LIBCALL(RUST_G, "time_milliseconds")(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_decode(text) call(RUST_G, "url_decode")(text)
#define rustg_url_encode(text) LIBCALL(RUST_G, "url_encode")("[text]")
#define rustg_url_decode(text) LIBCALL(RUST_G, "url_decode")(text)
#ifdef RUSTG_OVERRIDE_BUILTINS
#define url_encode(text) rustg_url_encode(text)

View File

@@ -67,7 +67,7 @@
// -- 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)
// -- SSticker --

View File

@@ -7,7 +7,7 @@
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)
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)
for(var/client/C in show_to)
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
var/list/viewing = list()

View File

@@ -111,9 +111,9 @@ var/global/list/intent_listener = list()
hair_styles_male_list += H.name
hair_styles_female_list += H.name
sortTim(hair_styles_list, /proc/cmp_text_asc)
sortTim(hair_styles_male_list, /proc/cmp_text_asc)
sortTim(hair_styles_female_list, /proc/cmp_text_asc)
sortTim(hair_styles_list, GLOBAL_PROC_REF(cmp_text_asc))
sortTim(hair_styles_male_list, GLOBAL_PROC_REF(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
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()
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
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_female_list += H.name
sortTim(facial_hair_styles_list, /proc/cmp_text_asc)
sortTim(facial_hair_styles_male_list, /proc/cmp_text_asc)
sortTim(facial_hair_styles_female_list, /proc/cmp_text_asc)
sortTim(facial_hair_styles_list, GLOBAL_PROC_REF(cmp_text_asc))
sortTim(facial_hair_styles_male_list, GLOBAL_PROC_REF(cmp_text_asc))
sortTim(facial_hair_styles_female_list, GLOBAL_PROC_REF(cmp_text_asc))
//Body markings
paths = subtypesof(/datum/sprite_accessory/marking)
@@ -145,7 +145,7 @@ var/global/list/intent_listener = list()
var/datum/sprite_accessory/marking/M = new path()
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
paths = subtypesof(/datum/character_disabilities)
@@ -153,7 +153,7 @@ var/global/list/intent_listener = list()
var/datum/character_disabilities/T = new path()
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!
paths = subtypesof(/datum/job)
@@ -183,7 +183,7 @@ var/global/list/intent_listener = list()
S.has_autohiss = TRUE
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.
for (var/thing in all_species)

View File

@@ -761,7 +761,7 @@ proc/ColorTone(rgb, tone)
break
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

View File

@@ -305,21 +305,21 @@
if (!L)
return
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
/proc/sortAtom(var/list/atom/L, var/order = 1)
if (!L)
return
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.
/proc/sortRecord(var/list/datum/record/L, var/order = 1)
if (!L)
return
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
//Mergesort: any value in a list
@@ -327,14 +327,14 @@
if (!L)
return
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
/proc/sortNames(var/list/L)
if (!L)
return
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.
/proc/sortByKey(var/list/L, var/key)
@@ -364,7 +364,7 @@
//Mergesort: any value in a list, preserves key=value structure
/proc/sortAssoc(var/list/L)
var/list/ret = L.Copy()
sortTim(ret, /proc/cmp_text_asc, FALSE)
sortTim(ret, GLOBAL_PROC_REF(cmp_text_asc), FALSE)
return ret
// 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
/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)
fromIndex = fromIndex % L.len
toIndex = toIndex % (L.len+1)

View File

@@ -15,7 +15,7 @@ var/datum/sortInstance/sortInstance = new()
var/list/L
//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]])
var/associative = 0

View File

@@ -18,7 +18,7 @@
/atom/movable/proc/update_filters()
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)
var/list/data = filter_data[f]
var/list/arguments = data.Copy()

View File

@@ -11,7 +11,7 @@
if(!Adjacent(usr) || !over.Adjacent(usr))
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
/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
color = set_color
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)
color = set_color
@@ -317,7 +317,7 @@
up_image.plane = LIGHTING_LAYER + 1
up_image.layer = LIGHTING_LAYER + 1
usr << up_image
addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, up_image), 12)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), up_image), 12)
return
var/turf/T = GetAbove(usr)
if (!T)

View File

@@ -106,4 +106,4 @@ var/list/panic_targets_data_loss = list(
var/ctype = panic_targets[controller]
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
// 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
// Initialize subsystems.
@@ -181,7 +181,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
SetRunLevel(RUNLEVEL_LOBBY)
// 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.
#ifndef UNIT_TEST
world.sleep_offline = 1
@@ -264,9 +264,9 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
queue_tail = null
//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)
sortTim(tickersubsystems, /proc/cmp_subsystem_priority)
sortTim(tickersubsystems, GLOBAL_PROC_REF(cmp_subsystem_priority))
for(var/level in runlevel_sorted_subsystems)
sortTim(level, /proc/cmp_subsystem_priority)
sortTim(level, GLOBAL_PROC_REF(cmp_subsystem_priority))
level += tickersubsystems
var/cached_runlevel = current_runlevel

View File

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

View File

@@ -43,7 +43,7 @@
for (var/area/A in world)
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()
//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)
ghostteleportlocs[map_overmap.name] = map_overmap
sortTim(ghostteleportlocs, /proc/cmp_text_asc)
sortTim(ghostteleportlocs, GLOBAL_PROC_REF(cmp_text_asc))
setupgenetics()
@@ -39,4 +39,4 @@
/proc/sorted_add_area(area/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())
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."))
var/datum/job/job = GetJob(rank)
@@ -416,7 +416,7 @@
BITSET(H.hud_updateflag, IMPLOYAL_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")
to_chat(H, "<b>[current_map.command_spawn_message]</b>")
@@ -869,7 +869,7 @@
T.maptext = "<span style=\"[style]\">[copytext(text,1,i)] </span>"
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)
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]")
#ifdef USE_INTELLIGENT_LIGHTING_UPDATES
SSticker.OnRoundstart(CALLBACK(src, .proc/handle_roundstart))
SSticker.OnRoundstart(CALLBACK(src, PROC_REF(handle_roundstart)))
#endif
..()

View File

@@ -268,8 +268,8 @@ if(Datum.isprocessing) {\
rcon_breaker_units += breaker
rcon_breaker_units_by_tag[breaker.RCon_tag] = breaker
sortTim(rcon_smes_units, /proc/cmp_rcon_smes)
sortTim(rcon_breaker_units, /proc/cmp_rcon_bbox)
sortTim(rcon_smes_units, GLOBAL_PROC_REF(cmp_rcon_smes))
sortTim(rcon_breaker_units, GLOBAL_PROC_REF(cmp_rcon_bbox))
#undef SSMACHINERY_PIPENETS
#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
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
// screen out the abstract subtypes
if(!initial(map_template_type.id))

View File

@@ -117,7 +117,7 @@
. = new /mob/living/carbon/human/dummy/mannequin
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)
var/mannequin = mannequins[ckey]

View File

@@ -22,7 +22,7 @@
if (config.news_use_forum_api)
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()
deactivate(FALSE)
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()
if (disable_type == NL_TEMPORARY_DISABLE)

View File

@@ -143,12 +143,12 @@
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_EXPANDED_WORLD_BOUNDS, .proc/after_world_bounds_expanded)
RegisterSignal(SSdcs, COMSIG_GLOB_NEW_Z, PROC_REF(propogate_spatial_grid_to_new_z))
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
/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
waiting_to_add_by_type[type] += waiting_movable

View File

@@ -45,7 +45,7 @@
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()
// Handle AFK.

View File

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

View File

@@ -274,7 +274,7 @@ var/datum/controller/subsystem/timer/SStimer
return
// 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,
// 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
found_oo += D
sortTim(found_oo, /proc/cmp_planelayer)
sortTim(found_oo, GLOBAL_PROC_REF(cmp_planelayer))
var/list/atoms_list_list = list()
for (var/thing in found_oo)

View File

@@ -34,7 +34,7 @@
icon_state = beam_icon_state
beam_type = btype
if(time != -1)
addtimer(CALLBACK(src,.proc/End), time)
addtimer(CALLBACK(src, PROC_REF(End), time))
/datum/beam/proc/Start()
recalculate()
@@ -64,12 +64,12 @@
return
/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()
if((sleep_time == null) || finished) //Does not automatically recalculate.
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)
finished = TRUE
@@ -209,5 +209,5 @@
crash_with("Tried to create beam with infinite time!")
return null
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

View File

@@ -1,9 +1,9 @@
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)
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
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:
.procname
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:
.procname
Example:
CALLBACK(src, .some_proc_here)
CALLBACK(src, PROC_REF(some_proc_here))
when the above doesn't apply:
.proc/procname
Example:
CALLBACK(src, .proc/some_proc_here)
CALLBACK(src, PROC_REF(some_proc_here))
proc defined on a parent of a some type:
/some/type/.proc/some_proc_here

View File

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

View File

@@ -1,6 +1,6 @@
/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)
. += "<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)))
// 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.
return
@@ -258,7 +258,7 @@ var/datum/discord_bot/discord_bot = null
for (var/B in destinations)
var/datum/discord_channel/channel = B
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
else

View File

@@ -23,7 +23,7 @@
return ELEMENT_INCOMPATIBLE
SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src)
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
/datum/element/proc/Detach(datum/source, force)

View File

@@ -73,7 +73,7 @@
if(!chance || prob(chance))
play(get_sound(starttime))
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)
var/list/atoms_cache = output_atoms
@@ -98,7 +98,7 @@
if(start_sound)
play(start_sound, start_volume)
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()
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)
..()
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)
..()
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)

View File

@@ -67,4 +67,4 @@
if(mercrig)
H.put_in_hands(mercrig)
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)
imprint_idcard(H, ID)
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
H.equip_or_collect(ID, slot_wear_id)
@@ -555,7 +555,7 @@
C.access = get_id_access(H)
C.rank = get_id_rank(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)
C.associated_account_number = H.mind.initial_account.account_number

View File

@@ -73,7 +73,7 @@
LAZYREMOVE(user.progressbars, bar.loc)
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
. = ..()

View File

@@ -123,7 +123,7 @@
return FALSE
/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]
. = "[ckey], with [values[ckey]] deaths."

View File

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

View File

@@ -9,7 +9,7 @@ var/datum/uplink/uplink
items_assoc = list()
items = init_subtypes(/datum/uplink_item)
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)
if(!item.name)
@@ -23,7 +23,7 @@ var/datum/uplink/uplink
category.items += item
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
var/name

View File

@@ -24,15 +24,15 @@
if(APC_WIRE_IDSCAN)
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)
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)
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)

View File

@@ -45,7 +45,7 @@ var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
if(SMES_WIRE_RCON)
if(S.RCon)
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)
S.toggle_input()
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(S.safeties_enabled)
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()
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)
give_codewords(player)
INVOKE_ASYNC(src, .proc/alert_loyalist_status, player)
INVOKE_ASYNC(src, PROC_REF(alert_loyalist_status), player)
return TRUE
/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)
give_codewords(player)
INVOKE_ASYNC(src, .proc/alert_revolutionary_status, player)
INVOKE_ASYNC(src, PROC_REF(alert_revolutionary_status), player)
return TRUE
/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)
E.nextstate = FIREDOOR_CLOSED
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()
if(air_doors_activated)
@@ -173,7 +173,7 @@
if(E.operating)
E.nextstate = FIREDOOR_OPEN
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()
if(!fire)
@@ -185,7 +185,7 @@
if(D.operating)
D.nextstate = FIREDOOR_CLOSED
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()
if (fire)
@@ -197,7 +197,7 @@
if(D.operating)
D.nextstate = FIREDOOR_OPEN
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()
if(!eject)
@@ -225,7 +225,7 @@
if(D.operating)
D.nextstate = FIREDOOR_OPEN
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)

View File

@@ -510,7 +510,7 @@
M.forceMove(ling) //move inside the new dude to hide him.
ling.occupant = M
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)
if(QDELETED(ling))

View File

@@ -119,7 +119,7 @@
target.disabilities |= NEARSIGHTED
target.eye_blind = 10
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()
set category = "Changeling"
@@ -136,7 +136,7 @@
..()
to_chat(target, SPAN_DANGER("Your ears pop and begin ringing loudly!"))
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()
set category = "Changeling"

View File

@@ -6,7 +6,7 @@
/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
/datum/rune/teleport/Destroy()

View File

@@ -37,7 +37,7 @@
return
/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()
var/thing = pick(spawnable)

View File

@@ -327,7 +327,7 @@
A.launch_projectile(target)
next_shot = world.time + shot_delay
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)
if (M.a_intent == "help")

View File

@@ -39,11 +39,11 @@
// EXPAND
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))
addtimer(CALLBACK(src, .proc/after_tick, A), 10)
addtimer(CALLBACK(src, PROC_REF(after_tick), A), 10)
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))
STOP_PROCESSING(SScalamity, src)

View File

@@ -64,8 +64,8 @@ var/global/universe_has_ended = 0
var/time = rand(30, 60)
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.")
addtimer(CALLBACK(src, .proc/announce_to_world), time SECONDS)
addtimer(CALLBACK(src, .proc/end_universe), time SECONDS + 5 MINUTES)
addtimer(CALLBACK(src, PROC_REF(announce_to_world)), time SECONDS)
addtimer(CALLBACK(src, PROC_REF(end_universe)), time SECONDS + 5 MINUTES)
/datum/universal_state/supermatter_cascade/proc/announce_to_world()
var/txt = {"

View File

@@ -245,7 +245,7 @@ var/global/list/additional_antag_types = list()
all_candidates += antag.candidates
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)
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 = 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)
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
if(L.stat == DEAD)
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)
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.
if(ready)
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>")
update_icon()
return PROJECTILE_STOPPED

View File

@@ -50,7 +50,7 @@
spark(L, 5, cardinal)
spark(user, 5, cardinal)
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)
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")
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.
/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")
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
to_chat(src, SPAN_WARNING("You broke your gaze."))
@@ -282,7 +282,7 @@
vampire.use_blood(20)
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.
/mob/living/carbon/human/proc/vampire_bats()
@@ -326,7 +326,7 @@
vampire.use_blood(60)
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
/mob/living/carbon/human/proc/vampire_screech()
@@ -385,7 +385,7 @@
log_and_message_admins("used chiropteran 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.
/mob/living/carbon/human/proc/vampire_veilwalk()
@@ -473,7 +473,7 @@
if(owner_mob.stat)
if(owner_mob.stat == UNCONSCIOUS)
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
deactivate()
return
@@ -749,7 +749,7 @@
vampire.use_blood(150)
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.
/mob/living/carbon/human/proc/vampire_presence()
@@ -1010,4 +1010,4 @@
G.synch()
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()
if(!priv_all_access_datums)
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

View File

@@ -54,7 +54,7 @@
/datum/outfit/job/representative/post_equip(mob/living/carbon/human/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
/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)
visible_message(SPAN_DANGER("\The [src] goes haywire!"))
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()

View File

@@ -232,7 +232,7 @@ obj/machinery/computer/general_air_control/Destroy()
signal.data["sigtype"] = "command"
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
icon = 'icons/obj/modular_console.dmi'
@@ -318,7 +318,7 @@ obj/machinery/computer/general_air_control/Destroy()
signal.data["sigtype"]="command"
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
icon_screen = "alert:0"

View File

@@ -132,7 +132,7 @@
if (on)
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)
stat &= ~EMPED

View File

@@ -203,7 +203,7 @@
return
var/list/target = L.Copy()
// 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()
if (!isturf(loc))

View File

@@ -15,7 +15,7 @@ var/global/list/minor_air_alarms = list()
/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()
atmosphere_alarm.unregister_alarm(src)

View File

@@ -39,7 +39,7 @@
/obj/item/card/id/guest/Initialize(mapload, duration)
. = ..(mapload)
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()
icon_state += "_invalid"

View File

@@ -214,9 +214,9 @@
update_icon()
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)
while(working)

View File

@@ -23,7 +23,7 @@
. = ..()
if(monitor_type)
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()
. = ..()

View File

@@ -196,7 +196,7 @@
for(var/obj/machinery/door/blast/M in SSmachinery.machinery)
if (M.id == src.id)
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)
@@ -207,7 +207,7 @@
sleep(50)
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"
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_at = world.time
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_lost_until == -1 && !backupPowerCablesCut())
backup_power_lost_until = world.time + SecondsToTicks(10)
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
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_at = world.time
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
deltimer(aiActionTimer)
@@ -747,7 +747,7 @@ About the new airlock wires panel:
electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration)
electrified_at = world.time
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)
to_chat(usr, message)
@@ -1175,11 +1175,11 @@ About the new airlock wires panel:
else if(activate)
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.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
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.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
if(activate)
if(src.lock())
@@ -1305,7 +1305,7 @@ About the new airlock wires panel:
"You hear a welding torch on metal."
)
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
if(!WT.use(0,user))
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_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(\
SPAN_WARNING("[user.name] finishes cutting the control pannel of the airlock with the [C]."),\
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_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(\
SPAN_WARNING("[user.name] finishes cutting below the airlock with the [C]."),\
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_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(\
SPAN_WARNING("[user.name] finishes 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
//if we lost power open 'er up
if(insecure)
INVOKE_ASYNC(src, /obj/machinery/door/.proc/open, 1)
INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/door, open), 1)
securitylock = TRUE
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
update_icon()

View File

@@ -41,9 +41,9 @@
return
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
SSticker.OnRoundstart(CALLBACK(src, .proc/handle_queue_command))
SSticker.OnRoundstart(CALLBACK(src, PROC_REF(handle_queue_command)))
waiting_for_roundstart = TRUE
/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(arePowerSystemsOn())
INVOKE_ASYNC(src, .proc/execute_current_command)
INVOKE_ASYNC(src, PROC_REF(execute_current_command))

View File

@@ -188,9 +188,9 @@
return
if((stat & NOPOWER) && fail_secure)
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)
INVOKE_ASYNC(src, /obj/machinery/door/blast/.proc/force_open)
INVOKE_ASYNC(src, PROC_REF(force_open))
securitylock = FALSE
/obj/machinery/door/blast/attack_hand(mob/user as mob)

View File

@@ -133,10 +133,10 @@
return ..()
/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)
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()
if(!density || operating || !ROUND_IS_STARTED)
@@ -537,7 +537,7 @@
if (autoclose)
for (var/atom/movable/M in get_turf(src))
if (M.density && M != src)
addtimer(CALLBACK(src, .proc/autoclose), 60, TIMER_UNIQUE)
addtimer(CALLBACK(src, PROC_REF(autoclose)), 60, TIMER_UNIQUE)
break
operating = TRUE

View File

@@ -247,7 +247,7 @@
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()
var/alarmed = FALSE
@@ -275,7 +275,7 @@
SPAN_ITALIC("You hear a welding torch on metal.")
)
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
if(!WT.use(0,user))
to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task."))

View File

@@ -61,7 +61,7 @@
open()
else
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)
. = ..()

View File

@@ -251,7 +251,7 @@
soundloop = new(src, FALSE)
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()
QDEL_NULL(soundloop)

View File

@@ -44,7 +44,7 @@
// If the cell is almost empty rarely "flicker" the light. Aesthetic only.
if((cell.percent() < 10) && prob(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)

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!"))
return
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"])
forcing_call = !forcing_call

View File

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

View File

@@ -159,7 +159,7 @@
for(var/obj/machinery/sparker/M in SSmachinery.machinery)
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)
if(M.id == id)

View File

@@ -25,7 +25,7 @@
name = "light switch ([area.name])"
src.on = src.area.lightswitch
addtimer(CALLBACK(src, .proc/sync_lights), 25)
addtimer(CALLBACK(src, PROC_REF(sync_lights)), 25)
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]."
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

View File

@@ -34,7 +34,7 @@
hide(!T.is_plating())
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()
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)
var/request = signal.data["findbeacon"]
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

View File

@@ -123,7 +123,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.ispowered = 1
src.update_icon()
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()
ispowered = 0
@@ -1030,7 +1030,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if (!alert)
alert = 1
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)
else

View File

@@ -308,7 +308,7 @@
if(powered())
queue_icon_update()
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()
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(!attacked && !emagged)
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 ..()
/obj/machinery/porta_turret/proc/reset_attacked()
@@ -450,7 +450,7 @@
if(enabled)
if(!attacked && !emagged)
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)
@@ -468,7 +468,7 @@
emagged = TRUE
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)
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)
deltimer(resetting)
resetting = null
@@ -769,7 +769,7 @@
//Shooting Code:
A.launch_projectile(target, def_zone)
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
var/enabled

View File

@@ -41,7 +41,7 @@
var/datum/progressbar/progbar = new(user, C.maxcharge, src)
progbar.update(C.charge)
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)
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>")
rings_pdas += C
// 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()
return TRUE
else
@@ -112,7 +112,7 @@
var/message = "Attention required!"
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()
pinged = FALSE

View File

@@ -127,7 +127,7 @@
if(watching_mob.client)
animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING)
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)
destroyed_event.unregister(watching_mob, src)
watching_mob = null

View File

@@ -66,7 +66,7 @@
MK.forceMove(loc)
// Will help make emagging the console not so easy to get away with.
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
update_icon()
return TRUE

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