Skip to content

Commit

Permalink
Some backend stuff ports (tgstation#13433)
Browse files Browse the repository at this point in the history
* Some backend stuff ports

* fix

---------

Co-authored-by: TiviPlus <[email protected]>
  • Loading branch information
TiviPlus and TiviPlus authored Jul 6, 2023
1 parent 57c9256 commit c239020
Show file tree
Hide file tree
Showing 138 changed files with 492 additions and 479 deletions.
10 changes: 5 additions & 5 deletions .github/HARDDEL_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ This of course means they can store that location in memory in another object's
var/reference
/proc/someshit(mem_location)
var/datum/some_obj = new()
some_obj.reference = mem_location
some_obj.reference = mem_location
```

But what happens when you get rid of the object we're passing around references to? If we just cleared it out from memory, everything that holds a reference to it would suddenly be pointing to nowhere, or worse, something totally different!
Expand Down Expand Up @@ -127,7 +127,7 @@ You can read more about what each of these do in that file, but the long and sho

It'll tell you what object is holding the ref if it's in an object, or what pattern of list transversal was required to find the ref if it's hiding in a list of some sort

## Techniques For Fixing Hard Deletes
## Techniques For Fixing Hard Deletes

Once you've found the issue, it becomes a matter of making sure the ref is cleared as a part of Destroy(). I'm gonna walk you through a few patterns and discuss how you might go about fixing them

Expand Down Expand Up @@ -220,7 +220,7 @@ So then, we want to temporarily remember to clear a reference when it's deleted

This is where I might lose you, but we're gonna use signals

`qdel()`, the proc that sets off this whole deletion business, sends a signal called `COMSIG_PARENT_QDELETING`
`qdel()`, the proc that sets off this whole deletion business, sends a signal called `COMSIG_QDELETING`

We can listen for that signal, and if we hear it clear whatever reference we may have

Expand All @@ -231,10 +231,10 @@ Here's an example
var/mob/target
/somemob/proc/set_target(new_target)
if(target)
UnregisterSignal(target, COMSIG_PARENT_QDELETING) //We need to make sure any old signals are cleared
UnregisterSignal(target, COMSIG_QDELETING) //We need to make sure any old signals are cleared
target = new_target
if(target)
RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clear_target)) //Call clear_target if target is ever qdel()'d
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(clear_target)) //Call clear_target if target is ever qdel()'d
/somemob/proc/clear_target(datum/source)
SIGNAL_HANDLER
set_target(null)
Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/dcs/helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/// The datum hosting the signal is automaticaly added as the first argument
/// Returns a bitfield gathered from all registered procs
/// Arguments given here are packaged in a list and given to _SendSignal
#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) )
#define SEND_SIGNAL(target, sigtype, arguments...) ( !target._listen_lookup || !target._listen_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) )

#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) )

Expand Down
10 changes: 5 additions & 5 deletions code/__DEFINES/dcs/signals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@
/// before a component is removed from a datum because of RemoveComponent: (/datum/component)
#define COMSIG_COMPONENT_REMOVING "component_removing"
/// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted"
#define COMSIG_PREQDELETED "parent_preqdeleted"
/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
#define COMSIG_PARENT_QDELETING "parent_qdeleting"
#define COMSIG_QDELETING "parent_qdeleting"
/// generic topic handler (usr, href_list)
#define COMSIG_TOPIC "handle_topic"

Expand Down Expand Up @@ -157,8 +157,8 @@
#define COMSIG_CLIENT_PREFERENCES_UIACTED "client_preferences_uiacted" //called after preferences have been updated for this client after /datum/preferences/ui_act has completed

// /atom signals
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living)
#define COMSIG_PARENT_ATTACKBY_ALTERNATE "atom_attackby_alternate" //from base of atom/attackby_alternate(): (/obj/item, /mob/living)
#define COMSIG_ATOM_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living)
#define COMSIG_ATOM_ATTACKBY_ALTERNATE "atom_attackby_alternate" //from base of atom/attackby_alternate(): (/obj/item, /mob/living)
#define COMPONENT_NO_AFTERATTACK (1<<0) //Return this in response if you don't want afterattack to be called

#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" //from base of atom/handle_atom_del(): (atom/deleted)
Expand All @@ -176,7 +176,7 @@
#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost)
#define COMPONENT_NO_ATTACK_HAND (1<<0) //works on all attack_hands.
#define COMSIG_ATOM_ATTACK_POWERLOADER "atom_attack_powerloader"//from base of atom/attack_powerloader: (mob/living/user, obj/item/powerloader_clamp/attached_clamp)
#define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob)
#define COMSIG_ATOM_EXAMINE "atom_examine" //from base of atom/examine(): (/mob)
///from base of atom/get_examine_name(): (/mob, list/overrides)
#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name"
//Positions for overrides list
Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/qdel.dm
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,5 @@


#define QDELING(X) (X.gc_destroyed)
#define QDELETED(X) (!X || QDELING(X))
#define QDELETED(X) (isnull(X) || QDELING(X))
#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
28 changes: 14 additions & 14 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
#define ADD_TRAIT(target, trait, source) \
do { \
var/list/_L; \
if (!target.status_traits) { \
target.status_traits = list(); \
_L = target.status_traits; \
if (!target._status_traits) { \
target._status_traits = list(); \
_L = target._status_traits; \
_L[trait] = list(source); \
SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait)); \
} else { \
_L = target.status_traits; \
_L = target._status_traits; \
if (_L[trait]) { \
_L[trait] |= list(source); \
} else { \
Expand All @@ -22,7 +22,7 @@
} while (0)
#define REMOVE_TRAIT(target, trait, sources) \
do { \
var/list/_L = target.status_traits; \
var/list/_L = target._status_traits; \
var/list/_S; \
if (sources && !islist(sources)) { \
_S = list(sources); \
Expand All @@ -40,13 +40,13 @@
SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait)); \
}; \
if (!length(_L)) { \
target.status_traits = null \
target._status_traits = null \
}; \
} \
} while (0)
#define REMOVE_TRAITS_NOT_IN(target, sources) \
do { \
var/list/_L = target.status_traits; \
var/list/_L = target._status_traits; \
var/list/_S = sources; \
if (_L) { \
for (var/_T in _L) { \
Expand All @@ -57,19 +57,19 @@
}; \
};\
if (!length(_L)) { \
target.status_traits = null\
target._status_traits = null\
};\
}\
} while (0)
#define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE)
#define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE)
#define HAS_TRAIT(target, trait) (target._status_traits ? (target._status_traits[trait] ? TRUE : FALSE) : FALSE)
#define HAS_TRAIT_FROM(target, trait, source) (target._status_traits ? (target._status_traits[trait] ? (source in target._status_traits[trait]) : FALSE) : FALSE)
#define HAS_TRAIT_FROM_ONLY(target, trait, source) (\
target.status_traits ?\
(target.status_traits[trait] ?\
((source in target.status_traits[trait]) && (length(target.status_traits) == 1))\
target._status_traits ?\
(target._status_traits[trait] ?\
((source in target._status_traits[trait]) && (length(target._status_traits) == 1))\
: FALSE)\
: FALSE)
#define HAS_TRAIT_NOT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (length(target.status_traits[trait] - source) > 0) : FALSE) : FALSE)
#define HAS_TRAIT_NOT_FROM(target, trait, source) (target._status_traits ? (target._status_traits[trait] ? (length(target._status_traits[trait] - source) > 0) : FALSE) : FALSE)

// common trait
#define TRAIT_GENERIC "generic"
Expand Down
4 changes: 2 additions & 2 deletions code/_globalvars/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ GLOBAL_VAR_INIT(CHARGELEVEL, 0.0005) // Cap for how fast cells charge, as a perc
GLOBAL_VAR_INIT(TAB, "&nbsp;&nbsp;&nbsp;&nbsp;")

GLOBAL_LIST_INIT(duplicate_forbidden_vars, list(
"tag", "datum_components", "area", "type", "loc", "locs", "vars", "parent", "parent_type", "verbs", "ckey", "key",\
"power_supply", "reagents", "stat", "x", "y", "z", "contents", "group", "atmos_adjacent_turfs", "comp_lookup",\
"tag", "_datum_components", "area", "type", "loc", "locs", "vars", "parent", "parent_type", "verbs", "ckey", "key",\
"power_supply", "reagents", "stat", "x", "y", "z", "contents", "group", "atmos_adjacent_turfs", "_listen_lookup",\
"actions", "actions_by_path", "overlays", "overlays_standing", "hud_list",\
"appearance", "managed_overlays", "managed_vis_overlays", "computer_id", "ip_address",\
"boxes", "click_border_start","storage_start", "storage_continue", "storage_end", "closer", "stored_start",\
Expand Down
4 changes: 2 additions & 2 deletions code/_onclick/hud/screen_objects/screen_objects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -639,8 +639,8 @@
tracker = tracker_input
target = target_input
tracker.client.screen += src
RegisterSignal(tracker, COMSIG_PARENT_QDELETING, PROC_REF(kill_arrow))
RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(kill_arrow))
RegisterSignal(tracker, COMSIG_QDELETING, PROC_REF(kill_arrow))
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(kill_arrow))
process() //Ping immediately after parameters have been set

///Stop the arrow to avoid runtime and hard del
Expand Down
4 changes: 2 additions & 2 deletions code/_onclick/item_attack.dm
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
/atom/proc/attackby(obj/item/I, mob/user, params)
SIGNAL_HANDLER_DOES_SLEEP
add_fingerprint(user, "attackby", I)
if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, I, user, params) & COMPONENT_NO_AFTERATTACK)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, I, user, params) & COMPONENT_NO_AFTERATTACK)
return TRUE
return FALSE

Expand Down Expand Up @@ -286,7 +286,7 @@

/atom/proc/attackby_alternate(obj/item/I, mob/user, params)
add_fingerprint(user, "attackby_alternate", I)
if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY_ALTERNATE, I, user, params) & COMPONENT_NO_AFTERATTACK)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY_ALTERNATE, I, user, params) & COMPONENT_NO_AFTERATTACK)
return TRUE
return FALSE

Expand Down
27 changes: 16 additions & 11 deletions code/controllers/master.dm
Original file line number Diff line number Diff line change
Expand Up @@ -161,17 +161,22 @@ GLOBAL_REAL(Master, /datum/controller/master) = new

/datum/controller/master/Recover()
var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n"
for (var/varname in Master.vars)
switch (varname)
if("name", "tag", "bestF", "type", "parent_type", "vars", "statclick") // Built-in junk.
continue
else
var/varval = Master.vars[varname]
if (istype(varval, /datum)) // Check if it has a type var.
var/datum/D = varval
msg += "\t [varname] = [D]([D.type])\n"
else
msg += "\t [varname] = [varval]\n"
var/list/master_attributes = Master.vars
var/list/filtered_variables = list(
NAMEOF(src, name),
NAMEOF(src, parent_type),
NAMEOF(src, statclick),
NAMEOF(src, tag),
NAMEOF(src, type),
NAMEOF(src, vars),
)
for (var/varname in master_attributes - filtered_variables)
var/varval = master_attributes[varname]
if (isdatum(varval)) // Check if it has a type var.
var/datum/D = varval
msg += "\t [varname] = [D]([D.type])\n"
else
msg += "\t [varname] = [varval]\n"
log_world(msg)

var/datum/controller/subsystem/BadBoy = Master.last_type_processed
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/advanced_pathfinding.dm
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ GLOBAL_LIST_EMPTY(goal_nodes)
if(!creator)
return
src.creator = creator
RegisterSignal(creator, COMSIG_PARENT_QDELETING, PROC_REF(clean_creator))
RegisterSignal(creator, COMSIG_QDELETING, PROC_REF(clean_creator))
goal_image = image('icons/mob/actions.dmi', src, "minion_rendez_vous")
goal_image.layer = HUD_PLANE
goal_image.alpha = 180
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/aura.dm
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ SUBSYSTEM_DEF(aura)
affects_xenos = TRUE

SEND_SIGNAL(emitter, COMSIG_AURA_STARTED, aura_types)
RegisterSignal(emitter, COMSIG_PARENT_QDELETING, PROC_REF(stop_emitting))
RegisterSignal(emitter, COMSIG_QDELETING, PROC_REF(stop_emitting))

///Center gets destroyed, we run out of duration, or any other reason to finish. Perish immediately.
/datum/aura_bearer/proc/stop_emitting()
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/dcs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ PROCESSING_SUBSYSTEM_DEF(dcs)
var/list/elements_by_type = list()

/datum/controller/subsystem/processing/dcs/Recover()
comp_lookup = SSdcs.comp_lookup
_listen_lookup = SSdcs._listen_lookup

/datum/controller/subsystem/processing/dcs/proc/GetElement(list/arguments)
var/datum/element/eletype = arguments[1]
Expand Down
4 changes: 2 additions & 2 deletions code/controllers/subsystem/garbage.dm
Original file line number Diff line number Diff line change
Expand Up @@ -331,12 +331,12 @@ SUBSYSTEM_DEF(garbage)
I.qdels++

if(isnull(D.gc_destroyed))
if (SEND_SIGNAL(D, COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted
if (SEND_SIGNAL(D, COMSIG_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted
return
D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED
var/start_time = world.time
var/start_tick = world.tick_usage
SEND_SIGNAL(D, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy
SEND_SIGNAL(D, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy
var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
if(world.time != start_time)
I.slept_destroy++
Expand Down
16 changes: 8 additions & 8 deletions code/controllers/subsystem/minimaps.dm
Original file line number Diff line number Diff line change
Expand Up @@ -143,14 +143,14 @@ SUBSYSTEM_DEF(minimaps)
holder.raw_blips += minimaps_by_z["[ztarget]"].images_raw["[flag]"]
updators_by_datum[target] = holder
update_targets_unsorted += holder
RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(remove_updator))
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(remove_updator))

/**
* Removes a atom from the subsystems updating overlays
*/
/datum/controller/subsystem/minimaps/proc/remove_updator(atom/target)
SIGNAL_HANDLER
UnregisterSignal(target, COMSIG_PARENT_QDELETING)
UnregisterSignal(target, COMSIG_QDELETING)
var/datum/minimap_updator/holder = updators_by_datum[target]
updators_by_datum -= target
for(var/key in update_targets)
Expand Down Expand Up @@ -226,7 +226,7 @@ SUBSYSTEM_DEF(minimaps)
RegisterSignal(target, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_z_change))
blip.RegisterSignal(target, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/image, minimap_on_move))
removal_cbs[target] = CALLBACK(src, PROC_REF(removeimage), blip, target, hud_flags)
RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(remove_marker))
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(remove_marker))

/**
* removes an image from raw tracked lists, invoked by callback
Expand Down Expand Up @@ -282,7 +282,7 @@ SUBSYSTEM_DEF(minimaps)
SIGNAL_HANDLER
if(!removal_cbs[source]) //already removed
return
UnregisterSignal(source, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_Z_CHANGED))
UnregisterSignal(source, list(COMSIG_QDELETING, COMSIG_MOVABLE_Z_CHANGED))
for(var/flag in GLOB.all_minimap_flags)
minimaps_by_z["[source.z]"].images_assoc["[flag]"] -= source
images_by_source -= source
Expand Down Expand Up @@ -452,13 +452,13 @@ SUBSYSTEM_DEF(minimaps)
var/atom/movable/tracking = locator_override ? locator_override : owner
var/atom/movable/new_track = to_track ? to_track : owner
if(locator_override)
UnregisterSignal(locator_override, COMSIG_PARENT_QDELETING)
UnregisterSignal(locator_override, COMSIG_QDELETING)
if(owner)
UnregisterSignal(tracking, COMSIG_MOVABLE_Z_CHANGED)
if(!minimap_displayed)
locator_override = to_track
if(to_track)
RegisterSignal(to_track, COMSIG_PARENT_QDELETING, TYPE_PROC_REF(/datum/action/minimap, clear_locator_override))
RegisterSignal(to_track, COMSIG_QDELETING, TYPE_PROC_REF(/datum/action/minimap, clear_locator_override))
if(owner)
RegisterSignal(new_track, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_owner_z_change))
if(tracking.z != new_track.z)
Expand All @@ -467,7 +467,7 @@ SUBSYSTEM_DEF(minimaps)
locator.UnregisterSignal(tracking, COMSIG_MOVABLE_MOVED)
locator_override = to_track
if(to_track)
RegisterSignal(to_track, COMSIG_PARENT_QDELETING, TYPE_PROC_REF(/datum/action/minimap, clear_locator_override))
RegisterSignal(to_track, COMSIG_QDELETING, TYPE_PROC_REF(/datum/action/minimap, clear_locator_override))
RegisterSignal(new_track, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_owner_z_change))
if(tracking.z != new_track.z)
on_owner_z_change(new_track, tracking.z, new_track.z)
Expand All @@ -477,7 +477,7 @@ SUBSYSTEM_DEF(minimaps)
///CLears the locator override in case the override target is deleted
/datum/action/minimap/proc/clear_locator_override()
SIGNAL_HANDLER
UnregisterSignal(locator_override, COMSIG_PARENT_QDELETING)
UnregisterSignal(locator_override, COMSIG_QDELETING)
if(owner)
UnregisterSignal(locator_override, COMSIG_MOVABLE_Z_CHANGED)
RegisterSignal(owner, COMSIG_MOVABLE_Z_CHANGED)
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/monitor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ SUBSYSTEM_DEF(monitor)
var/list/b17_in_use = list()

/datum/controller/subsystem/monitor/Initialize()
RegisterSignal(SSdcs, list(COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE, COMSIG_GLOB_OPEN_SHUTTERS_EARLY), PROC_REF(set_groundside_calculation))
RegisterSignals(SSdcs, list(COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE, COMSIG_GLOB_OPEN_SHUTTERS_EARLY), PROC_REF(set_groundside_calculation))
RegisterSignal(SSdcs, COMSIG_GLOB_DROPSHIP_HIJACKED, PROC_REF(set_shipside_calculation))
is_automatic_balance_on = CONFIG_GET(flag/is_automatic_balance_on)
return SS_INIT_SUCCESS
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/processing/resinshaping.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ SUBSYSTEM_DEF(resinshaping)

/datum/controller/subsystem/resinshaping/Initialize()
quickbuilds = SSmapping.configs[GROUND_MAP].quickbuilds
RegisterSignal(SSdcs, list(COMSIG_GLOB_OPEN_SHUTTERS_EARLY, COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE,COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND,COMSIG_GLOB_TADPOLE_LAUNCHED,COMSIG_GLOB_DROPPOD_LANDED), PROC_REF(toggle_off))
RegisterSignals(SSdcs, list(COMSIG_GLOB_OPEN_SHUTTERS_EARLY, COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE,COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND,COMSIG_GLOB_TADPOLE_LAUNCHED,COMSIG_GLOB_DROPPOD_LANDED), PROC_REF(toggle_off))
return SS_INIT_SUCCESS
2 changes: 1 addition & 1 deletion code/controllers/subsystem/silo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ SUBSYSTEM_DEF(silo)
var/larva_spawn_rate_temporary_buff = 0

/datum/controller/subsystem/silo/Initialize()
RegisterSignal(SSdcs, list(COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE, COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND, COMSIG_GLOB_OPEN_SHUTTERS_EARLY, COMSIG_GLOB_TADPOLE_LAUNCHED), PROC_REF(start_spawning))
RegisterSignals(SSdcs, list(COMSIG_GLOB_OPEN_TIMED_SHUTTERS_LATE, COMSIG_GLOB_OPEN_TIMED_SHUTTERS_XENO_HIVEMIND, COMSIG_GLOB_OPEN_SHUTTERS_EARLY, COMSIG_GLOB_TADPOLE_LAUNCHED), PROC_REF(start_spawning))
return SS_INIT_SUCCESS

/datum/controller/subsystem/silo/fire(resumed = 0)
Expand Down
8 changes: 4 additions & 4 deletions code/controllers/subsystem/spatial_gridmap.dm
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ SUBSYSTEM_DEF(spatial_grid)
if(movable_turf)
enter_cell(movable, movable_turf)

UnregisterSignal(movable, COMSIG_PARENT_PREQDELETED)
UnregisterSignal(movable, COMSIG_PREQDELETED)
waiting_to_add_by_type[channel_type] -= movable

pregenerate_more_oranges_ears(NUMBER_OF_PREGENERATED_ORANGES_EARS)
Expand All @@ -144,7 +144,7 @@ SUBSYSTEM_DEF(spatial_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)
RegisterSignal(waiting_movable, COMSIG_PARENT_PREQDELETED, PROC_REF(queued_item_deleted), override = TRUE)
RegisterSignal(waiting_movable, COMSIG_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

Expand All @@ -159,11 +159,11 @@ SUBSYSTEM_DEF(spatial_grid)
waiting_movable_is_in_other_queues = TRUE

if(!waiting_movable_is_in_other_queues)
UnregisterSignal(movable_to_remove, COMSIG_PARENT_PREQDELETED)
UnregisterSignal(movable_to_remove, COMSIG_PREQDELETED)

return

UnregisterSignal(movable_to_remove, COMSIG_PARENT_PREQDELETED)
UnregisterSignal(movable_to_remove, COMSIG_PREQDELETED)
for(var/type in waiting_to_add_by_type)
waiting_to_add_by_type[type] -= movable_to_remove

Expand Down
Loading

0 comments on commit c239020

Please sign in to comment.