diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index 20a4dbc159..2306775ad5 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -1,5 +1,3 @@ -var/global/list/datum/pipe_network/pipe_networks = list() // TODO - Move into SSmachines - /datum/pipe_network var/list/datum/gas_mixture/gases = list() //All of the gas_mixtures continuously connected in this network var/volume = 0 //caches the total volume for atmos machines to use in gas calculations diff --git a/code/ATMOSPHERICS/pipes/simple.dm b/code/ATMOSPHERICS/pipes/simple.dm index 1f427fb151..def462a354 100644 --- a/code/ATMOSPHERICS/pipes/simple.dm +++ b/code/ATMOSPHERICS/pipes/simple.dm @@ -96,7 +96,7 @@ node1 = null if(node2) node2.disconnect(src) - node1 = null + node2 = null . = ..() diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm index 3edae54b47..76e5b0b768 100644 --- a/code/__defines/machinery.dm +++ b/code/__defines/machinery.dm @@ -154,17 +154,17 @@ if (!(DATUM.datum_flags & DF_ISPROCESSING)) {\ #define STOP_PROCESSING_IN_LIST(DATUM, LIST) LIST.Remove(DATUM);DATUM.datum_flags &= ~DF_ISPROCESSING // Note - I would prefer these be defined machines.dm, but some are used prior in file order. ~Leshana -#define START_MACHINE_PROCESSING(Datum) START_PROCESSING_IN_LIST(Datum, global.processing_machines) -#define STOP_MACHINE_PROCESSING(Datum) STOP_PROCESSING_IN_LIST(Datum, global.processing_machines) +#define START_MACHINE_PROCESSING(Datum) START_PROCESSING_IN_LIST(Datum, SSmachines.processing_machines) +#define STOP_MACHINE_PROCESSING(Datum) STOP_PROCESSING_IN_LIST(Datum, SSmachines.processing_machines) -#define START_PROCESSING_PIPENET(Datum) START_PROCESSING_IN_LIST(Datum, global.pipe_networks) -#define STOP_PROCESSING_PIPENET(Datum) STOP_PROCESSING_IN_LIST(Datum, global.pipe_networks) +#define START_PROCESSING_PIPENET(Datum) START_PROCESSING_IN_LIST(Datum, SSmachines.networks) +#define STOP_PROCESSING_PIPENET(Datum) STOP_PROCESSING_IN_LIST(Datum, SSmachines.networks) -#define START_PROCESSING_POWERNET(Datum) START_PROCESSING_IN_LIST(Datum, global.powernets) -#define STOP_PROCESSING_POWERNET(Datum) STOP_PROCESSING_IN_LIST(Datum, global.powernets) +#define START_PROCESSING_POWERNET(Datum) START_PROCESSING_IN_LIST(Datum, SSmachines.powernets) +#define STOP_PROCESSING_POWERNET(Datum) STOP_PROCESSING_IN_LIST(Datum, SSmachines.powernets) -#define START_PROCESSING_POWER_OBJECT(Datum) START_PROCESSING_IN_LIST(Datum, global.processing_power_items) -#define STOP_PROCESSING_POWER_OBJECT(Datum) STOP_PROCESSING_IN_LIST(Datum, global.processing_power_items) +#define START_PROCESSING_POWER_OBJECT(Datum) START_PROCESSING_IN_LIST(Datum, SSmachines.powerobjs) +#define STOP_PROCESSING_POWER_OBJECT(Datum) STOP_PROCESSING_IN_LIST(Datum, SSmachines.powerobjs) // Computer login types #define LOGIN_TYPE_NORMAL 1 diff --git a/code/_helpers/sorts/__main.dm b/code/_helpers/sorts/__main.dm index 622d88f147..7fd0a505c7 100644 --- a/code/_helpers/sorts/__main.dm +++ b/code/_helpers/sorts/__main.dm @@ -102,7 +102,8 @@ start the index of the first element in the range that is not already known to b if(start <= lo) start = lo + 1 - for(,start < hi, ++start) + var/list/L = src.L + for(start in start to hi - 1) var/pivot = fetchElement(L,start) //set left and right to the index where pivot belongs @@ -626,20 +627,17 @@ reverse a descending sequence without violating stability. var/val2 = fetchElement(L,cursor2) while(1) - if(call(cmp)(val1,val2) < 0) + if(call(cmp)(val1,val2) <= 0) if(++cursor1 >= end1) break val1 = fetchElement(L,cursor1) else moveElement(L,cursor2,cursor1) - ++cursor2 if(++cursor2 >= end2) break ++end1 ++cursor1 - //if(++cursor1 >= end1) - // break val2 = fetchElement(L,cursor2) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index c1fe92295d..400a61b0f9 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -26,6 +26,7 @@ SUBSYSTEM_DEF(garbage) var/list/queues #ifdef REFERENCE_TRACKING var/list/reference_find_on_fail = list() + var/find_reference_on_fail_global_toggle = FALSE #endif diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm index 100811f5c0..62e5be38d3 100644 --- a/code/controllers/subsystems/machines.dm +++ b/code/controllers/subsystems/machines.dm @@ -23,10 +23,18 @@ SUBSYSTEM_DEF(machines) var/list/current_run = list() + var/list/all_machines = list() + + var/list/networks = list() + var/list/processing_machines = list() + var/list/powernets = list() + var/list/powerobjs = list() + /datum/controller/subsystem/machines/Initialize(timeofday) makepowernets() admin_notice("Initializing atmos machinery.", R_DEBUG) - setup_atmos_machinery(global.machines) + machines = all_machines //stupid god damn globals + setup_atmos_machinery(all_machines) fire() ..() @@ -83,24 +91,24 @@ SUBSYSTEM_DEF(machines) msg += "PN:[round(cost_powernets,1)]|" msg += "PO:[round(cost_power_objects,1)]" msg += "} " - msg += "PI:[global.pipe_networks.len]|" - msg += "MC:[global.processing_machines.len]|" - msg += "PN:[global.powernets.len]|" - msg += "PO:[global.processing_power_items.len]|" - msg += "MC/MS:[round((cost ? global.processing_machines.len/cost_machinery : 0),0.1)]" + msg += "PI:[SSmachines.networks.len]|" + msg += "MC:[SSmachines.processing_machines.len]|" + msg += "PN:[SSmachines.powernets.len]|" + msg += "PO:[SSmachines.powerobjs.len]|" + msg += "MC/MS:[round((cost ? SSmachines.processing_machines.len/cost_machinery : 0),0.1)]" ..(jointext(msg, null)) /datum/controller/subsystem/machines/proc/process_pipenets(resumed = 0) if (!resumed) - src.current_run = global.pipe_networks.Copy() + src.current_run = networks.Copy() //cache for sanic speed (lists are references anyways) var/wait = src.wait var/list/current_run = src.current_run while(current_run.len) var/datum/pipe_network/PN = current_run[current_run.len] current_run.len-- - if(QDELETED(PN)) - global.pipe_networks.Remove(PN) + if(!PN) + networks.Remove(PN) DISABLE_BITFIELD(PN?.datum_flags, DF_ISPROCESSING) else PN.process(wait) @@ -109,30 +117,30 @@ SUBSYSTEM_DEF(machines) /datum/controller/subsystem/machines/proc/process_machinery(resumed = 0) if (!resumed) - src.current_run = global.processing_machines.Copy() + src.current_run = processing_machines.Copy() var/wait = src.wait var/list/current_run = src.current_run while(current_run.len) var/obj/machinery/M = current_run[current_run.len] current_run.len-- - if(QDELETED(M) || (M.process(wait) == PROCESS_KILL)) - global.processing_machines.Remove(M) + if(!M || (M.process(wait) == PROCESS_KILL)) + processing_machines.Remove(M) DISABLE_BITFIELD(M?.datum_flags, DF_ISPROCESSING) if(MC_TICK_CHECK) return /datum/controller/subsystem/machines/proc/process_powernets(resumed = 0) if (!resumed) - src.current_run = global.powernets.Copy() + src.current_run = powernets.Copy() var/wait = src.wait var/list/current_run = src.current_run while(current_run.len) var/datum/powernet/PN = current_run[current_run.len] current_run.len-- - if(QDELETED(PN)) - global.powernets.Remove(PN) + if(!PN) + powernets.Remove(PN) DISABLE_BITFIELD(PN?.datum_flags, DF_ISPROCESSING) else PN.reset(wait) @@ -143,36 +151,42 @@ SUBSYSTEM_DEF(machines) // Currently only used by powersinks. These items get priority processed before machinery /datum/controller/subsystem/machines/proc/process_power_objects(resumed = 0) if (!resumed) - src.current_run = global.processing_power_items.Copy() + src.current_run = powerobjs.Copy() var/wait = src.wait var/list/current_run = src.current_run while(current_run.len) var/obj/item/I = current_run[current_run.len] current_run.len-- - if(QDELETED(I) || (I.pwr_drain(wait) == PROCESS_KILL)) - global.processing_power_items.Remove(I) + if(!I || (I.pwr_drain(wait) == PROCESS_KILL)) + powerobjs.Remove(I) DISABLE_BITFIELD(I?.datum_flags, DF_ISPROCESSING) if(MC_TICK_CHECK) return /datum/controller/subsystem/machines/Recover() - for(var/datum/D as anything in global.pipe_networks) + for(var/datum/D as anything in SSmachines.networks) if(!istype(D, /datum/pipe_network)) - error("Found wrong type during SSmachinery recovery: list=global.pipe_networks, item=[D], type=[D?.type]") - global.pipe_networks -= D - for(var/datum/D as anything in global.processing_machines) + error("Found wrong type during SSmachinery recovery: list=SSmachines.networks, item=[D], type=[D?.type]") + SSmachines.networks -= D + for(var/datum/D as anything in SSmachines.processing_machines) if(!istype(D, /obj/machinery)) - error("Found wrong type during SSmachinery recovery: list=global.processing_machines, item=[D], type=[D?.type]") - global.processing_machines -= D - for(var/datum/D as anything in global.powernets) + error("Found wrong type during SSmachinery recovery: list=SSmachines.machines, item=[D], type=[D?.type]") + SSmachines.processing_machines -= D + for(var/datum/D as anything in SSmachines.powernets) if(!istype(D, /datum/powernet)) - error("Found wrong type during SSmachinery recovery: list=global.powernets, item=[D], type=[D?.type]") - global.powernets -= D - for(var/datum/D as anything in global.processing_power_items) + error("Found wrong type during SSmachinery recovery: list=SSmachines.powernets, item=[D], type=[D?.type]") + SSmachines.powernets -= D + for(var/datum/D as anything in SSmachines.powerobjs) if(!istype(D, /obj/item)) - error("Found wrong type during SSmachinery recovery: list=global.processing_power_items, item=[D], type=[D?.type]") - global.processing_power_items -= D + error("Found wrong type during SSmachinery recovery: list=SSmachines.powerobjs, item=[D], type=[D?.type]") + SSmachines.powerobjs -= D + + all_machines = SSmachines.all_machines + networks = SSmachines.networks + processing_machines = SSmachines.processing_machines + powernets = SSmachines.powernets + powerobjs = SSmachines.powerobjs #undef SSMACHINES_PIPENETS #undef SSMACHINES_MACHINERY diff --git a/code/datums/datum.dm b/code/datums/datum.dm index af085fbc14..a9bd003fa7 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -56,6 +56,7 @@ #ifdef REFERENCE_TRACKING var/tmp/running_find_references var/tmp/last_find_references = 0 + var/tmp/find_references_on_destroy = FALSE //set this to true on an item to have it find refs after #ifdef REFERENCE_TRACKING_DEBUG ///Stores info about where refs are found, used for sanity checks and testing var/list/found_refs @@ -113,6 +114,14 @@ tag = null SStgui.close_uis(src) + + #ifdef REFERENCE_TRACKING + if(find_references_on_destroy) + return QDEL_HINT_FINDREFERENCE + if(SSgarbage.find_reference_on_fail_global_toggle) + return QDEL_HINT_IFFAIL_FINDREFERENCE + #endif + return QDEL_HINT_QUEUE /** diff --git a/code/datums/reference_tracking.dm b/code/datums/reference_tracking.dm index 3154f64740..0f317b026c 100644 --- a/code/datums/reference_tracking.dm +++ b/code/datums/reference_tracking.dm @@ -1,6 +1,6 @@ #ifdef REFERENCE_TRACKING -/datum/proc/find_references(skip_alert) +/datum/proc/find_references(skip_alert = TRUE) running_find_references = type if(usr?.client) if(usr.client.running_find_references) @@ -28,7 +28,11 @@ //Time to search the whole game for our ref DoSearchVar(GLOB, "GLOB") //globals - log_reftracker("Finished searching globals") + log_reftracker("Finished searching GLOB") + + for(var/thing in global.vars) + DoSearchVar(thing, "Global variable -> [nameof(thing)]", search_time = starting_time) + log_reftracker("Finished searching global.vars") for(var/datum/thing in world) //atoms (don't beleive its lies) DoSearchVar(thing, "World -> [thing.type]", search_time = starting_time) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index d991eddae9..b275821a59 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -130,7 +130,7 @@ Class Procs: /obj/machinery/Initialize(var/mapload) . = ..() - global.machines += src + SSmachines.all_machines += src if(ispath(circuit)) circuit = new circuit(src) if(!speed_process) @@ -145,7 +145,7 @@ Class Procs: STOP_MACHINE_PROCESSING(src) else STOP_PROCESSING(SSfastprocess, src) - global.machines -= src + SSmachines.all_machines -= src if(component_parts) for(var/atom/A in component_parts) if(A.loc == src) // If the components are inside the machine, delete them. diff --git a/code/global.dm b/code/global.dm index c6e450ceac..da077ef48c 100644 --- a/code/global.dm +++ b/code/global.dm @@ -1,8 +1,7 @@ // Items that ask to be called every cycle. var/global/datum/datacore/data_core = null var/global/list/machines = list() // ALL Machines, wether processing or not. -var/global/list/processing_machines = list() // TODO - Move into SSmachines -var/global/list/processing_power_items = list() // TODO - Move into SSmachines + var/global/list/active_diseases = list() var/global/list/hud_icon_reference = list() @@ -91,8 +90,6 @@ var/list/IClog = list() var/list/OOClog = list() var/list/adminlog = list() -var/list/powernets = list() // TODO - Move into SSmachines - var/Debug2 = 0 var/datum/debug/debugobj diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 082f0e26b0..64c33419d0 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -48,7 +48,7 @@ feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - for (var/datum/powernet/PN in powernets) + for (var/datum/powernet/PN in SSmachines.powernets) if (!PN.nodes || !PN.nodes.len) if(PN.cables && (PN.cables.len > 1)) var/obj/structure/cable/C = PN.cables[1] @@ -57,4 +57,4 @@ if (!PN.cables || (PN.cables.len < 10)) if(PN.cables && (PN.cables.len > 1)) var/obj/structure/cable/C = PN.cables[1] - to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") \ No newline at end of file + to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm index 9ad4619166..1024fb7d32 100644 --- a/code/modules/admin/verbs/grief_fixers.dm +++ b/code/modules/admin/verbs/grief_fixers.dm @@ -20,7 +20,7 @@ to_chat(usr, "\[1/5\] - Supermatter depowered") // Remove all gases from all pipenets - for(var/datum/pipe_network/PN in pipe_networks) + for(var/datum/pipe_network/PN in SSmachines.networks) for(var/datum/gas_mixture/G in PN.gases) G.gas = list() G.update_values() @@ -48,4 +48,4 @@ SSair.RebootZAS() to_chat(usr, "\[5/5\] - ZAS Rebooted") - to_world("Atmosphere restart completed in [(world.timeofday - current_time)/10] seconds.") \ No newline at end of file + to_world("Atmosphere restart completed in [(world.timeofday - current_time)/10] seconds.")