diff --git a/code/game/objects/items/tools/welder.dm b/code/game/objects/items/tools/welder.dm index 270a44ee559..49f5bb4073b 100644 --- a/code/game/objects/items/tools/welder.dm +++ b/code/game/objects/items/tools/welder.dm @@ -35,10 +35,12 @@ ..() create_reagents(maximum_fuel) reagents.add_reagent("fuel", maximum_fuel) - if(refills_over_time) - reagents.reagents_generated_per_cycle += list("fuel" = 1) update_icon() +/obj/item/weldingtool/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + /obj/item/weldingtool/examine(mob/user) . = ..() if(get_dist(user, src) <= 0) @@ -49,11 +51,15 @@ return FIRELOSS /obj/item/weldingtool/process() - var/turf/T = get_turf(src) - if(T) // Implants for instance won't find a turf - T.hotspot_expose(2500, 5) - if(prob(5)) - remove_fuel(1) + if(tool_enabled) + var/turf/T = get_turf(src) + if(T) // Implants for instance won't find a turf + T.hotspot_expose(2500, 5) + if(prob(5)) + remove_fuel(1) + if(refills_over_time) + if(GET_FUEL < maximum_fuel) + reagents.add_reagent("fuel", 1) ..() /obj/item/weldingtool/attack_self(mob/user) @@ -77,7 +83,8 @@ playsound(loc, activation_sound, 50, 1) set_light(light_intensity) else - STOP_PROCESSING(SSobj, src) + if(!refills_over_time) + STOP_PROCESSING(SSobj, src) damtype = BRUTE force = 3 hitsound = "swing_hit" diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 5a0069632a2..8811d8f2584 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -13,7 +13,6 @@ var/list/datum/reagent/addiction_list = new/list() var/list/addiction_threshold_accumulated = new/list() var/flags - var/list/reagents_generated_per_cycle = new/list() /datum/reagents/New(maximum = 100, temperature_minimum, temperature_maximum) maximum_volume = maximum @@ -21,8 +20,6 @@ temperature_min = temperature_minimum if(temperature_maximum) temperature_max = temperature_maximum - if(!(flags & REAGENT_NOREACT)) - START_PROCESSING(SSobj, src) //I dislike having these here but map-objects are initialised before world/New() is called. >_> if(!GLOB.chemical_reagents_list) //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id @@ -361,23 +358,10 @@ od_chems.Add(R.id) return od_chems -/datum/reagents/process() - if(flags & REAGENT_NOREACT) - STOP_PROCESSING(SSobj, src) - return - for(var/thing in reagents_generated_per_cycle) - add_reagent(thing, reagents_generated_per_cycle[thing]) - for(var/datum/reagent/R in reagent_list) - R.on_tick() - /datum/reagents/proc/set_reacting(react = TRUE) if(react) - // Order is important, process() can remove from processing if - // the flag is present flags &= ~(REAGENT_NOREACT) - START_PROCESSING(SSobj, src) else - STOP_PROCESSING(SSobj, src) flags |= REAGENT_NOREACT /* @@ -906,7 +890,6 @@ /datum/reagents/Destroy() . = ..() - STOP_PROCESSING(SSobj, src) QDEL_LIST(reagent_list) reagent_list = null QDEL_LIST(addiction_list) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index f3b4181062e..7f0ed2c91dc 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -120,8 +120,10 @@ return // Called every time reagent containers process. -/datum/reagent/proc/on_tick(data) - return +/datum/reagent/process() + if(!holder || holder.flags & REAGENT_NOREACT) + return FALSE + return TRUE // Called when the reagent container is hit by an explosion /datum/reagent/proc/on_ex_act(severity) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index dc79b5f4b3c..9d85459f465 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -333,19 +333,26 @@ process_flags = ORGANIC | SYNTHETIC taste_description = "bitterness" +/datum/reagent/cryostylane/on_new(data) + ..() + START_PROCESSING(SSprocessing, src) + +/datum/reagent/cryostylane/Destroy() + STOP_PROCESSING(SSprocessing, src) + return ..() + /datum/reagent/cryostylane/on_mob_life(mob/living/M) //TODO: code freezing into an ice cube if(M.reagents.has_reagent("oxygen")) M.reagents.remove_reagent("oxygen", 1) M.bodytemperature -= 30 return ..() -/datum/reagent/cryostylane/on_tick() - if(holder.has_reagent("oxygen")) - holder.remove_reagent("oxygen", 2) - holder.remove_reagent("cryostylane", 2) - holder.temperature_reagents(holder.chem_temp - 200) - holder.temperature_reagents(holder.chem_temp - 200) - ..() +/datum/reagent/cryostylane/process() + if(..()) + if(holder.has_reagent("oxygen")) + holder.remove_reagent("oxygen", 2) + holder.remove_reagent("cryostylane", 2) + holder.temperature_reagents(holder.chem_temp - 200) /datum/reagent/cryostylane/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) if(method == REAGENT_TOUCH) @@ -368,19 +375,26 @@ process_flags = ORGANIC | SYNTHETIC taste_description = "bitterness" +/datum/reagent/pyrosium/on_new(data) + ..() + START_PROCESSING(SSprocessing, src) + +/datum/reagent/pyrosium/Destroy() + STOP_PROCESSING(SSprocessing, src) + return ..() + /datum/reagent/pyrosium/on_mob_life(mob/living/M) if(M.reagents.has_reagent("oxygen")) M.reagents.remove_reagent("oxygen", 1) M.bodytemperature += 30 return ..() -/datum/reagent/pyrosium/on_tick() - if(holder.has_reagent("oxygen")) - holder.remove_reagent("oxygen", 2) - holder.remove_reagent("pyrosium", 2) - holder.temperature_reagents(holder.chem_temp + 200) - holder.temperature_reagents(holder.chem_temp + 200) - ..() +/datum/reagent/pyrosium/process() + if(..()) + if(holder.has_reagent("oxygen")) + holder.remove_reagent("oxygen", 2) + holder.remove_reagent("pyrosium", 2) + holder.temperature_reagents(holder.chem_temp + 200) /datum/reagent/firefighting_foam name = "Firefighting foam" diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 28ed544cb18..dec256ac455 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -192,6 +192,14 @@ color = "#7DFF00" taste_description = "slime" +/datum/reagent/stable_mutagen/on_new(data) + ..() + START_PROCESSING(SSprocessing, src) + +/datum/reagent/stable_mutagen/Destroy() + STOP_PROCESSING(SSprocessing, src) + return ..() + /datum/reagent/stable_mutagen/on_mob_life(mob/living/M) if(!ishuman(M) || !M.dna) return @@ -212,11 +220,11 @@ return ..() -/datum/reagent/stable_mutagen/on_tick() - var/datum/reagent/blood/B = locate() in holder.reagent_list - if(B && islist(B.data) && !data) - data = B.data.Copy() - ..() +/datum/reagent/stable_mutagen/process() + if(..()) + var/datum/reagent/blood/B = locate() in holder.reagent_list + if(B && islist(B.data) && !data) + data = B.data.Copy() /datum/reagent/romerol name = "romerol" diff --git a/paradise.dme b/paradise.dme index f2dbf198ebd..c137faf236f 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1472,6 +1472,8 @@ #include "code\modules\events\anomaly_grav.dm" #include "code\modules\events\anomaly_pyro.dm" #include "code\modules\events\anomaly_vortex.dm" +#include "code\modules\events\apc_overload.dm" +#include "code\modules\events\apc_short.dm" #include "code\modules\events\aurora_caelus.dm" #include "code\modules\events\blob.dm" #include "code\modules\events\brand_intelligence.dm" @@ -1485,8 +1487,6 @@ #include "code\modules\events\event_procs.dm" #include "code\modules\events\false_alarm.dm" #include "code\modules\events\floorcluwne.dm" -#include "code\modules\events\apc_overload.dm" -#include "code\modules\events\apc_short.dm" #include "code\modules\events\headcrabs.dm" #include "code\modules\events\immovable_rod.dm" #include "code\modules\events\infestation.dm"