diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index f765956fc8e..8b3d587c3ee 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -12,6 +12,8 @@ var/datum/controller/subsystem/atoms/SSatoms var/initialized = INITIALIZATION_INSSATOMS var/old_initialized + var/list/late_loaders + /datum/controller/subsystem/atoms/New() NEW_SS_GLOBAL(SSatoms) @@ -26,8 +28,6 @@ var/datum/controller/subsystem/atoms/SSatoms if(initialized == INITIALIZATION_INSSATOMS) return - var/list/late_loaders - initialized = INITIALIZATION_INNEW_MAPLOAD var/static/list/NewQdelList = list() @@ -73,15 +73,15 @@ var/datum/controller/subsystem/atoms/SSatoms 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") + 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 [LAZYLEN(late_loaders)] atoms") + LAZYCLEARLIST(late_loaders) /datum/controller/subsystem/atoms/proc/map_loader_begin() old_initialized = initialized diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 0097d91883c..63f2f9ef2f9 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -39,8 +39,10 @@ if(do_initialize > INITIALIZATION_INSSATOMS) if(QDELETED(src)) CRASH("Found new qdeletion in type [type]!") - args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD - Initialize(arglist(args)) + var/mapload = do_initialize == INITIALIZATION_INNEW_MAPLOAD + args[1] = mapload + if(Initialize(arglist(args)) && mapload) + LAZYADD(SSatoms.late_loaders, src) //Called after New if the map is being loaded. mapload = TRUE //Called from base of New if the map is being loaded. mapload = FALSE