diff --git a/code/controllers/Processes/fires.dm b/code/controllers/Processes/fires.dm deleted file mode 100644 index 26d42833d84..00000000000 --- a/code/controllers/Processes/fires.dm +++ /dev/null @@ -1,24 +0,0 @@ -var/global/datum/controller/process/fire/fire_master - -/datum/controller/process/fire - var/list/burning = list() - -/datum/controller/process/fire/setup() - name = "fire" - schedule_interval = 20 //every 2 seconds - log_startup_progress("Fire process starting up.") - -/datum/controller/process/fire/statProcess() - ..() - stat(null, "[burning.len] burning objects") - -/datum/controller/process/fire/doWork() - for(var/obj/burningobj in burning) - if(burningobj.burn_state == ON_FIRE) - if(burningobj.burn_world_time < world.time) - burningobj.burn() - SCHECK - else - burning.Remove(burningobj) - -DECLARE_GLOBAL_CONTROLLER(fire, fire_master) diff --git a/code/controllers/subsystem/fires.dm b/code/controllers/subsystem/fires.dm new file mode 100644 index 00000000000..50624aa8db0 --- /dev/null +++ b/code/controllers/subsystem/fires.dm @@ -0,0 +1,37 @@ +SUBSYSTEM_DEF(fires) + name = "Fires" + priority = FIRE_PRIOTITY_BURNING + flags = SS_NO_INIT|SS_BACKGROUND + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/list/currentrun = list() + var/list/processing = list() + +/datum/controller/subsystem/fires/stat_entry() + ..("P:[processing.len]") + + +/datum/controller/subsystem/fires/fire(resumed = 0) + if(!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while(currentrun.len) + var/obj/O = currentrun[currentrun.len] + currentrun.len-- + if(!O || qdeleted(O)) + processing -= O + if(MC_TICK_CHECK) + return + continue + + if(O.burn_state == ON_FIRE) + if(O.burn_world_time < world.time) + O.burn() + else + processing -= O + + if(MC_TICK_CHECK) + return diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index efbe9502e7c..bad73292c82 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -79,7 +79,7 @@ debug_variables(vote) feedback_add_details("admin_verb","DVote") if("Fires") - debug_variables(fire_master) + debug_variables(SSfires) feedback_add_details("admin_verb","DFires") if("Mob") debug_variables(mob_master) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index b5d56555c3d..d5ef8fce545 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -139,7 +139,7 @@ /obj/fire_act(global_overlay=1) if(!burn_state) burn_state = ON_FIRE - fire_master.burning += src + SSfires.processing[src] = src burn_world_time = world.time + burntime*rand(10,20) if(global_overlay) overlays += fire_overlay @@ -149,14 +149,14 @@ empty_object_contents(1, loc) var/obj/effect/decal/cleanable/ash/A = new(loc) A.desc = "Looks like this used to be a [name] some time ago." - fire_master.burning -= src + SSfires.processing -= src qdel(src) /obj/proc/extinguish() if(burn_state == ON_FIRE) burn_state = FLAMMABLE overlays -= fire_overlay - fire_master.burning -= src + SSfires.processing -= src /obj/proc/tesla_act(power) being_shocked = TRUE diff --git a/paradise.dme b/paradise.dme index 785a733526a..75274b9ee46 100644 --- a/paradise.dme +++ b/paradise.dme @@ -190,7 +190,6 @@ #include "code\controllers\Processes\alarm.dm" #include "code\controllers\Processes\event.dm" #include "code\controllers\Processes\fast_process.dm" -#include "code\controllers\Processes\fires.dm" #include "code\controllers\Processes\garbage.dm" #include "code\controllers\Processes\inactivity.dm" #include "code\controllers\Processes\lighting.dm" @@ -209,6 +208,7 @@ #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystem\air.dm" +#include "code\controllers\subsystem\fires.dm" #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\throwing.dm" #include "code\datums\action.dm"