From 355c21acb19fa7552d549ea8ad144ed23daea19a Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sun, 28 Jan 2018 00:16:20 +0200 Subject: [PATCH] Remove mobs/idlenpcpool Initializers, make mob/client expansion happen when maxz is incremented (#34987) * work * Seems to worky * one more place where maxz is touched --- code/controllers/subsystem/idlenpcpool.dm | 11 +++++++---- code/controllers/subsystem/mobs.dm | 11 +++++++---- code/game/world.dm | 7 ++++++- code/modules/mapping/reader.dm | 3 ++- .../mapping/space_management/zlevel_manager.dm | 2 +- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index a15237e5a7c..1e895d56f31 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(idlenpcpool) name = "Idling NPC Pool" - flags = SS_POST_FIRE_TIMING|SS_BACKGROUND + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT priority = FIRE_PRIORITY_IDLE_NPC wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME @@ -13,9 +13,12 @@ SUBSYSTEM_DEF(idlenpcpool) var/list/zlist = GLOB.simple_animals[AI_Z_OFF] ..("IdleNPCS:[idlelist.len]|Z:[zlist.len]") -/datum/controller/subsystem/idlenpcpool/Initialize(start_timeofday) - idle_mobs_by_zlevel = new /list(world.maxz,0) - return ..() +/datum/controller/subsystem/idlenpcpool/proc/MaxZChanged() + if (!islist(idle_mobs_by_zlevel)) + idle_mobs_by_zlevel = new /list(world.maxz,0) + while (SSidlenpcpool.idle_mobs_by_zlevel.len < world.maxz) + SSidlenpcpool.idle_mobs_by_zlevel.len++ + SSidlenpcpool.idle_mobs_by_zlevel[idle_mobs_by_zlevel.len] = list() /datum/controller/subsystem/idlenpcpool/fire(resumed = FALSE) diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index 14ad19e1ea8..cd47adf476e 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" priority = FIRE_PRIORITY_MOBS - flags = SS_KEEP_TIMING + flags = SS_KEEP_TIMING | SS_NO_INIT runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() @@ -10,9 +10,12 @@ SUBSYSTEM_DEF(mobs) /datum/controller/subsystem/mobs/stat_entry() ..("P:[GLOB.mob_living_list.len]") -/datum/controller/subsystem/mobs/Initialize(start_timeofday) - clients_by_zlevel = new /list(world.maxz,0) - return ..() +/datum/controller/subsystem/mobs/proc/MaxZChanged() + if (!islist(clients_by_zlevel)) + clients_by_zlevel = new /list(world.maxz,0) + while (clients_by_zlevel.len < world.maxz) + clients_by_zlevel.len++ + clients_by_zlevel[clients_by_zlevel.len] = list() /datum/controller/subsystem/mobs/fire(resumed = 0) var/seconds = wait * 0.1 diff --git a/code/game/world.dm b/code/game/world.dm index 270b38481e8..8f037dcd731 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -38,7 +38,7 @@ GLOBAL_PROTECT(security_mode) if(fexists(RESTART_COUNTER_PATH)) GLOB.restart_counter = text2num(trim(file2text(RESTART_COUNTER_PATH))) fdel(RESTART_COUNTER_PATH) - + if(NO_INIT_PARAMETER in params) return @@ -269,3 +269,8 @@ GLOBAL_PROTECT(security_mode) hub_password = "kMZy3U5jJHSiBQjr" else hub_password = "SORRYNOPASSWORD" + +/world/proc/incrementMaxZ() + maxz++ + SSmobs.MaxZChanged() + SSidlenpcpool.MaxZChanged() diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 5b2a73d7084..0e37d74c1bc 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -98,7 +98,8 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(cropMap) continue else - world.maxz = zcrd //create a new z_level if needed + while (zcrd > world.maxz) //create a new z_level if needed + world.incrementMaxZ() if(!no_changeturf) WARNING("Z-level expansion occurred without no_changeturf set, this may cause problems when /turf/AfterChange is called") diff --git a/code/modules/mapping/space_management/zlevel_manager.dm b/code/modules/mapping/space_management/zlevel_manager.dm index e2b313220cc..5a442c5b6a9 100644 --- a/code/modules/mapping/space_management/zlevel_manager.dm +++ b/code/modules/mapping/space_management/zlevel_manager.dm @@ -19,7 +19,7 @@ /datum/controller/subsystem/mapping/proc/add_new_zlevel(name, linkage = SELFLOOPING, traits = list(), z_type = /datum/space_level) var/new_z = z_list.len + 1 if (world.maxz < new_z) - ++world.maxz + world.incrementMaxZ() CHECK_TICK // TODO: sleep here if the Z level needs to be cleared var/datum/space_level/S = new z_type(new_z, name, linkage, traits)