diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 1e0bb974373..2ad24b4c846 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -601,4 +601,4 @@ GLOBAL_LIST_EMPTY(the_station_areas) CHECK_TICK spawner.spawn_loot() - spawner.hide() + qdel(spawner) diff --git a/code/game/objects/effects/spawners/random/maintenance.dm b/code/game/objects/effects/spawners/random/maintenance.dm index ad3f26ffcb7..d685e448368 100644 --- a/code/game/objects/effects/spawners/random/maintenance.dm +++ b/code/game/objects/effects/spawners/random/maintenance.dm @@ -10,16 +10,21 @@ . += span_info("This spawner has an effective loot count of [get_effective_lootcount()].") /obj/effect/spawner/random/maintenance/Initialize(mapload) - . = ..() - // There is a single callback in SSmapping to spawn all delayed maintenance loot - // so we don't just make one callback per loot spawner - GLOB.maintenance_loot_spawners += src loot = GLOB.maintenance_loot - // Late loaded templates like shuttles can have maintenance loot - if(SSticker.current_state >= GAME_STATE_SETTING_UP) - spawn_loot() - hide() + . = ..() + + GLOB.maintenance_loot_spawners += src + +/obj/effect/spawner/random/maintenance/should_spawn_on_init() + . = ..() + + if(.) + return + + // Late loaded templates like shuttles can have maintenance loot. + // Once the game state progresses to roundstart, new maint loot spawners should just instantly pop. + return (SSticker.current_state >= GAME_STATE_SETTING_UP) /obj/effect/spawner/random/maintenance/Destroy() GLOB.maintenance_loot_spawners -= src diff --git a/code/game/objects/effects/spawners/random/random.dm b/code/game/objects/effects/spawners/random/random.dm index ca43aa3fef7..d4a381ec1b1 100644 --- a/code/game/objects/effects/spawners/random/random.dm +++ b/code/game/objects/effects/spawners/random/random.dm @@ -33,10 +33,14 @@ /obj/effect/spawner/random/Initialize(mapload) . = ..() - if(spawn_on_init) + if(should_spawn_on_init()) spawn_loot() return INITIALIZE_HINT_QDEL +/// Helper proc that returns TRUE if the spawner should spawn loot in Initialise() and FALSE otherwise. Override this to change spawning behaviour. +/obj/effect/spawner/random/proc/should_spawn_on_init() + return spawn_on_init + ///If the spawner has any loot defined, randomly picks some and spawns it. Does not cleanup the spawner. /obj/effect/spawner/random/proc/spawn_loot(lootcount_override) if(!prob(spawn_loot_chance))