diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm new file mode 100644 index 00000000000..539147c5cd1 --- /dev/null +++ b/code/controllers/subsystem/atoms.dm @@ -0,0 +1,104 @@ +var/datum/subsystem/atoms/SSatoms + +#define INITIALIZATION_INSSOBJ 0 //New should not call Initialize +#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE) +#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE) + +/datum/subsystem/atoms + name = "Atoms" + init_order = 12 + flags = SS_NO_FIRE + + var/initialized = INITIALIZATION_INSSOBJ + var/old_initialized + +/datum/subsystem/atoms/New() + NEW_SS_GLOBAL(SSatoms) + +/datum/subsystem/atoms/Initialize(timeofday) + fire_overlay.appearance_flags = RESET_COLOR + setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation. + initialized = INITIALIZATION_INNEW_MAPLOAD + InitializeAtoms() + return ..() + +/datum/subsystem/atoms/proc/InitializeAtoms(list/atoms = null) + if(initialized == INITIALIZATION_INSSOBJ) + return + + var/list/late_loaders + + initialized = INITIALIZATION_INNEW_MAPLOAD + + if(atoms) + for(var/I in atoms) + var/atom/A = I + if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call + var/start_tick = world.time + if(A.Initialize(TRUE)) + LAZYADD(late_loaders, A) + if(start_tick != world.time) + WARNING("[A]: [A.type] slept during it's Initialize!") + CHECK_TICK + testing("Initialized [atoms.len] atoms") + else + #ifdef TESTING + var/count = 0 + #endif + for(var/atom/A in world) + if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call + var/start_tick = world.time + if(A.Initialize(TRUE)) + LAZYADD(late_loaders, A) + #ifdef TESTING + else + ++count + #endif TESTING + if(start_tick != world.time) + WARNING("[A]: [A.type] slept during it's Initialize!") + CHECK_TICK + testing("Roundstart initialized [count] atoms") + + initialized = INITIALIZATION_INNEW_REGULAR + + if(late_loaders) + for(var/I in late_loaders) + var/atom/A = I + var/start_tick = world.time + A.Initialize(FALSE) + if(start_tick != world.time) + WARNING("[A]: [A.type] slept during it's Initialize!") + CHECK_TICK + testing("Late-initialized [late_loaders.len] atoms") + +/datum/subsystem/atoms/proc/map_loader_begin() + old_initialized = initialized + initialized = INITIALIZATION_INSSOBJ + +/datum/subsystem/atoms/proc/map_loader_stop() + initialized = old_initialized + +/datum/subsystem/atoms/Recover() + initialized = SSatoms.initialized + if(initialized == INITIALIZATION_INNEW_MAPLOAD) + InitializeAtoms() + old_initialized = SSatoms.old_initialized + +/datum/subsystem/atoms/proc/setupGenetics() + var/list/avnums = new /list(DNA_STRUC_ENZYMES_BLOCKS) + for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++) + avnums[i] = i + CHECK_TICK + + for(var/A in subtypesof(/datum/mutation/human)) + var/datum/mutation/human/B = new A() + if(B.dna_block == NON_SCANNABLE) + continue + B.dna_block = pick_n_take(avnums) + if(B.quality == POSITIVE) + good_mutations |= B + else if(B.quality == NEGATIVE) + bad_mutations |= B + else if(B.quality == MINOR_NEGATIVE) + not_good_mutations |= B + CHECK_TICK \ No newline at end of file diff --git a/code/controllers/subsystem/processing/objects.dm b/code/controllers/subsystem/processing/objects.dm index 2332763b7ad..b5fc93bae01 100644 --- a/code/controllers/subsystem/processing/objects.dm +++ b/code/controllers/subsystem/processing/objects.dm @@ -16,74 +16,9 @@ var/datum/subsystem/objects/SSobj /datum/subsystem/objects/New() NEW_SS_GLOBAL(SSobj) - -/datum/subsystem/objects/Initialize(timeofdayl) - fire_overlay.appearance_flags = RESET_COLOR - setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation. - initialized = INITIALIZATION_INNEW_MAPLOAD - InitializeAtoms() - . = ..() - -/datum/subsystem/objects/proc/InitializeAtoms(list/objects = null) - if(initialized == INITIALIZATION_INSSOBJ) - return - - var/list/late_loaders - - initialized = INITIALIZATION_INNEW_MAPLOAD - - if(objects) - for(var/I in objects) - var/atom/A = I - if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call - var/start_tick = world.time - if(A.Initialize(TRUE)) - LAZYADD(late_loaders, A) - if(start_tick != world.time) - WARNING("[A]: [A.type] slept during it's Initialize!") - CHECK_TICK - testing("Initialized [objects.len] atoms") - else - #ifdef TESTING - var/count = 0 - #endif - for(var/atom/A in world) - if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call - var/start_tick = world.time - if(A.Initialize(TRUE)) - LAZYADD(late_loaders, A) - #ifdef TESTING - else - ++count - #endif TESTING - if(start_tick != world.time) - WARNING("[A]: [A.type] slept during it's Initialize!") - CHECK_TICK - testing("Roundstart initialized [count] atoms") - - initialized = INITIALIZATION_INNEW_REGULAR - - if(late_loaders) - for(var/I in late_loaders) - var/atom/A = I - var/start_tick = world.time - A.Initialize(FALSE) - if(start_tick != world.time) - WARNING("[A]: [A.type] slept during it's Initialize!") - CHECK_TICK - testing("Late-initialized [late_loaders.len] atoms") - -/datum/subsystem/objects/proc/map_loader_begin() - old_initialized = initialized - initialized = INITIALIZATION_INSSOBJ - -/datum/subsystem/objects/proc/map_loader_stop() - initialized = old_initialized - /datum/subsystem/objects/stat_entry() ..("P:[processing.len]") - /datum/subsystem/objects/fire(resumed = 0) if (!resumed) src.currentrun = processing.Copy() @@ -101,10 +36,4 @@ var/datum/subsystem/objects/SSobj return /datum/subsystem/objects/Recover() - initialized = SSobj.initialized - if(initialized == INITIALIZATION_INNEW_MAPLOAD) - InitializeAtoms() - old_initialized = SSobj.old_initialized - - if (istype(SSobj.processing)) - processing = SSobj.processing + processing = SSobj.processing diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index 9bdf5c34eaa..a7528459d1b 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -41,7 +41,7 @@ atmos_machines += A continue - SSobj.InitializeAtoms(atoms) + SSatoms.InitializeAtoms(atoms) SSmachine.setup_template_powernets(cables) SSair.setup_template_machinery(atmos_machines) SSair.end_map_load() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 57e4032b988..b8bcafe2ddd 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -41,7 +41,7 @@ if(luminosity) light = new(src) - var/do_initialize = SSobj.initialized + var/do_initialize = SSatoms.initialized if(do_initialize > INITIALIZATION_INSSOBJ) Initialize(do_initialize == INITIALIZATION_INNEW_MAPLOAD) //. = ..() //uncomment if you are dumb enough to add a /datum/New() proc diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm deleted file mode 100644 index 9427ac1b732..00000000000 --- a/code/game/gamemodes/setupgame.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/subsystem/objects/proc/setupGenetics() - var/list/avnums = new /list(DNA_STRUC_ENZYMES_BLOCKS) - for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++) - avnums[i] = i - CHECK_TICK - - for(var/A in subtypesof(/datum/mutation/human)) - var/datum/mutation/human/B = new A() - if(B.dna_block == NON_SCANNABLE) - continue - B.dna_block = pick_n_take(avnums) - if(B.quality == POSITIVE) - good_mutations |= B - else if(B.quality == NEGATIVE) - bad_mutations |= B - else if(B.quality == MINOR_NEGATIVE) - not_good_mutations |= B - CHECK_TICK diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index fab32c7ffdb..dc4b18b05ef 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -243,7 +243,7 @@ var/global/dmm_suite/preloader/_preloader = new first_turf_index++ //turn off base new Initialization until the whole thing is loaded - SSobj.map_loader_begin() + SSatoms.map_loader_begin() //instanciate the first /turf var/turf/T if(members[first_turf_index] != /turf/template_noop) @@ -264,11 +264,11 @@ var/global/dmm_suite/preloader/_preloader = new //custom CHECK_TICK here because we don't want things created while we're sleeping to not initialize if(world.tick_usage > CURRENT_TICKLIMIT) - SSobj.map_loader_stop() + SSatoms.map_loader_stop() stoplag() - SSobj.map_loader_begin() + SSatoms.map_loader_begin() //Restore initialization to the previous value - SSobj.map_loader_stop() + SSatoms.map_loader_stop() //////////////// //Helpers procs diff --git a/tgstation.dme b/tgstation.dme index ac467b30d2b..3f3c9dd08bf 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -148,6 +148,7 @@ #include "code\controllers\subsystem\acid.dm" #include "code\controllers\subsystem\air.dm" #include "code\controllers\subsystem\assets.dm" +#include "code\controllers\subsystem\atoms.dm" #include "code\controllers\subsystem\augury.dm" #include "code\controllers\subsystem\communications.dm" #include "code\controllers\subsystem\diseases.dm" @@ -328,7 +329,6 @@ #include "code\game\gamemodes\intercept_report.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" -#include "code\game\gamemodes\setupgame.dm" #include "code\game\gamemodes\blob\blob.dm" #include "code\game\gamemodes\blob\blob_finish.dm" #include "code\game\gamemodes\blob\blob_report.dm"