diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index f5af415da13..2cb5d16503a 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -162,9 +162,7 @@
used = 1
var/mob/dead/observer/theghost = pick(nuke_candidates)
spawn_antag(theghost.client, get_turf(src), "syndieborg")
- var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread
- S.set_up(4, 1, src)
- S.start()
+ do_sparks(4, TRUE, src)
qdel(src)
else
to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.")
diff --git a/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm b/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm
index 2691036cf1e..705273876c2 100644
--- a/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm
+++ b/code/game/gamemodes/clock_cult/clock_helpers/clock_powerdrain.dm
@@ -21,10 +21,8 @@
if(!charge && !panel_open)
panel_open = TRUE
icon_state = "[initial(icon_state)]-o"
- var/datum/effect_system/spark_spread/spks = new(get_turf(src))
- spks.set_up(10, 0, get_turf(src))
- spks.start()
- visible_message("[src]'s panel flies open with a flurry of spark")
+ do_sparks(10, FALSE, src)
+ visible_message("[src]'s panel flies open with a flurry of sparks!")
update_icon()
/obj/item/weapon/stock_parts/cell/power_drain(clockcult_user)
diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm
index 1e48e69d399..54099070cdd 100644
--- a/code/game/gamemodes/gang/dominator.dm
+++ b/code/game/gamemodes/gang/dominator.dm
@@ -24,7 +24,7 @@
set_light(2)
GLOB.poi_list |= src
spark_system = new
- spark_system.set_up(5, 1, src)
+ spark_system.set_up(5, TRUE, src)
countdown = new(src)
/obj/machinery/dominator/examine(mob/user)
@@ -129,9 +129,8 @@
set_broken()
GLOB.poi_list.Remove(src)
gang = null
- qdel(spark_system)
- qdel(countdown)
- countdown = null
+ QDEL_NULL(spark_system)
+ QDEL_NULL(countdown)
STOP_PROCESSING(SSmachines, src)
return ..()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index df5366024b4..9a3af5b627f 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -339,9 +339,7 @@
return FALSE //Already shocked someone recently?
if(!prob(prb))
return FALSE //you lucked out, no shock for you
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, src)
- s.start() //sparks always.
+ do_sparks(5, TRUE, src)
var/tmp/check_range = TRUE
if(electrocute_mob(user, get_area(src), src, 1, check_range))
hasShocked = TRUE
diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm
index 34b20fde6f3..fe7216801b6 100644
--- a/code/game/objects/effects/effect_system/effect_system.dm
+++ b/code/game/objects/effects/effect_system/effect_system.dm
@@ -23,7 +23,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
/datum/effect_system
var/number = 3
- var/cardinals = 0
+ var/cardinals = FALSE
var/turf/location
var/atom/holder
var/effect_type
@@ -34,7 +34,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
location = null
return ..()
-/datum/effect_system/proc/set_up(n = 3, c = 0, loca)
+/datum/effect_system/proc/set_up(n = 3, c = FALSE, loca)
if(n > 10)
n = 10
number = n
diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm
index 054416efc24..997c7af1246 100644
--- a/code/game/objects/effects/effect_system/effects_sparks.dm
+++ b/code/game/objects/effects/effect_system/effects_sparks.dm
@@ -5,6 +5,17 @@
// will always spawn at the items location.
/////////////////////////////////////////////
+/proc/do_sparks(n, c, source)
+ // n - number of sparks
+ // c - cardinals, bool, do the sparks only move in cardinal directions?
+ // source - source of the sparks.
+
+ var/datum/effect_system/spark_spread/sparks = new
+ sparks.set_up(n, c, source)
+ sparks.start()
+ qdel(sparks)
+
+
/obj/effect/particle_effect/sparks
name = "sparks"
icon_state = "sparks"
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index fd5ca52dab6..e79cdf7399d 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -247,7 +247,7 @@
var/armed = 0
var/trap_damage = 20
-/obj/item/weapon/restraints/legcuffs/beartrap/New()
+/obj/item/weapon/restraints/legcuffs/beartrap/Initialize()
..()
icon_state = "[initial(icon_state)][armed]"
@@ -307,9 +307,7 @@
/obj/item/weapon/restraints/legcuffs/beartrap/energy/proc/dissipate()
if(!istype(loc, /mob))
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(1, 1, src)
- sparks.start()
+ do_sparks(1, TRUE, src)
qdel(src)
/obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 5ea803ed745..82124c14099 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -350,9 +350,7 @@
else
to_chat(user, "You stick \the [W] into the light socket!")
if(has_power() && (W.flags & CONDUCT))
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(3, 1, src)
- s.start()
+ do_sparks(3, TRUE, src)
if (prob(75))
electrocute_mob(user, get_area(src), src, rand(0.7,1.0), TRUE)
else
@@ -523,9 +521,7 @@
if(status == LIGHT_OK || status == LIGHT_BURNED)
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
if(on)
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(3, 1, src)
- s.start()
+ do_sparks(3, TRUE, src)
status = LIGHT_BROKEN
update()
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 37c7d9b8b24..10dc52c3c30 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -123,9 +123,7 @@
if(hasShocked)
return 0
hasShocked = 1
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, AM.loc)
- s.start()
+ do_sparks(5, TRUE, AM.loc)
var/atom/target = get_edge_target_turf(AM, get_dir(src, get_step_away(AM, src)))
AM.throw_at(target, 200, 4)
addtimer(CALLBACK(src, .proc/clear_shock), 5)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index d32274bdd25..4947715b318 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -28,6 +28,8 @@
var/projectile_sound = 'sound/weapons/emitter.ogg'
+ var/datum/effect_system/spark_spread/sparks
+
/obj/machinery/power/emitter/New()
..()
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null)
@@ -87,11 +89,15 @@
if(state == 2 && anchored)
connect_to_network()
+ sparks = new
+ sparks.set_up(5, TRUE, src)
+
/obj/machinery/power/emitter/Destroy()
if(SSticker && SSticker.current_state == GAME_STATE_PLAYING)
message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("deleted at ([x],[y],[z]) at [get_area(src)]","singulo")
+ QDEL_NULL(sparks)
return ..()
/obj/machinery/power/emitter/update_icon()
@@ -198,9 +204,7 @@
A.setDir(src.dir)
playsound(src.loc, projectile_sound, 25, 1)
if(prob(35))
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, src)
- s.start()
+ sparks.start()
switch(dir)
if(NORTH)
A.yo = 20
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index de0d230a39c..e03eaf944ac 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -152,9 +152,7 @@
return
var/obj/structure/cable/N = T.get_cable_node() //get the connecting node cable, if there's one
if (prob(50) && electrocute_mob(usr, N, N, 1, TRUE)) //animate the electrocution if uncautious and unlucky
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, src)
- s.start()
+ do_sparks(5, TRUE, src)
return
C.use(10)
diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm
index bfe94d55164..5cae8b3c911 100644
--- a/code/modules/power/terminal.dm
+++ b/code/modules/power/terminal.dm
@@ -62,9 +62,7 @@
if(do_after(user, 50*W.toolspeed, target = src))
if(!master || master.can_terminal_dismantle())
if(prob(50) && electrocute_mob(user, powernet, src, 1, TRUE))
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, master)
- s.start()
+ do_sparks(5, TRUE, master)
return
new /obj/item/stack/cable_coil(loc, 10)
to_chat(user, "You cut the cables and dismantle the power terminal.")
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 532090879ad..ad517c698e5 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -49,10 +49,8 @@
..()
/obj/item/projectile/bullet/pellet/weak/on_range()
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(1, 1, src)
- sparks.start()
- ..()
+ do_sparks(1, TRUE, src)
+ ..()
/obj/item/projectile/bullet/pellet/overload
damage = 3
@@ -66,11 +64,9 @@
explosion(target, 0, 0, 2)
/obj/item/projectile/bullet/pellet/overload/on_range()
- explosion(src, 0, 0, 2)
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(3, 3, src)
- sparks.start()
- ..()
+ explosion(src, 0, 0, 2)
+ do_sparks(3, TRUE, src)
+ ..()
/obj/item/projectile/bullet/midbullet
damage = 20
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 934c2ef53ff..a3dd75c3749 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -21,9 +21,7 @@
/obj/item/projectile/energy/electrode/on_hit(atom/target, blocked = 0)
. = ..()
if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks!
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(1, 1, src)
- sparks.start()
+ do_sparks(1, TRUE, src)
else if(iscarbon(target))
var/mob/living/carbon/C = target
if(C.dna && C.dna.check_mutation(HULK))
@@ -32,9 +30,7 @@
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(1, 1, src)
- sparks.start()
+ do_sparks(1, TRUE, src)
..()
/obj/item/projectile/energy/net
@@ -45,7 +41,7 @@
hitsound = 'sound/weapons/taserhit.ogg'
range = 10
-/obj/item/projectile/energy/net/New()
+/obj/item/projectile/energy/net/Initialize()
..()
SpinAnimation()
@@ -53,13 +49,11 @@
if(isliving(target))
var/turf/Tloc = get_turf(target)
if(!locate(/obj/effect/nettingportal) in Tloc)
- new/obj/effect/nettingportal(Tloc)
+ new /obj/effect/nettingportal(Tloc)
..()
/obj/item/projectile/energy/net/on_range()
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(1, 1, src)
- sparks.start()
+ do_sparks(1, TRUE, src)
..()
/obj/effect/nettingportal
@@ -69,7 +63,7 @@
icon_state = "dragnetfield"
anchored = 1
-/obj/effect/nettingportal/New()
+/obj/effect/nettingportal/Initialize()
..()
set_light(3)
var/obj/item/device/radio/beacon/teletarget = null
@@ -77,16 +71,18 @@
if(com.target)
if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged)
teletarget = com.target
+
+ addtimer(CALLBACK(src, .proc/pop, teletarget), 30)
+
+/obj/effect/nettingportal/proc/pop(teletarget)
if(teletarget)
- spawn(30)
- for(var/mob/living/L in get_turf(src))
- do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon
- qdel(src)
+ for(var/mob/living/L in get_turf(src))
+ do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon
else
- spawn(30)
- for(var/mob/living/L in get_turf(src))
- do_teleport(L, L, 15) //Otherwise it just warps you off somewhere.
- qdel(src)
+ for(var/mob/living/L in get_turf(src))
+ do_teleport(L, L, 15) //Otherwise it just warps you off somewhere.
+
+ qdel(src)
/obj/item/projectile/energy/trap
@@ -106,7 +102,7 @@
..()
/obj/item/projectile/energy/trap/on_range()
- new/obj/item/weapon/restraints/legcuffs/beartrap/energy(loc)
+ new /obj/item/weapon/restraints/legcuffs/beartrap/energy(loc)
..()
/obj/item/projectile/energy/trap/cyborg
@@ -119,21 +115,16 @@
/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = 0)
if(!ismob(target) || blocked >= 100)
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(1, 1, src)
- sparks.start()
+ do_sparks(1, TRUE, src)
qdel(src)
if(iscarbon(target))
var/obj/item/weapon/restraints/legcuffs/beartrap/B = new /obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target))
B.Crossed(target)
- spawn(10)
- qdel(src)
+ QDEL_IN(src, 10)
..()
/obj/item/projectile/energy/trap/cyborg/on_range()
- var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
- sparks.set_up(1, 1, src)
- sparks.start()
+ do_sparks(1, TRUE, src)
qdel(src)
/obj/item/projectile/energy/declone
diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
index e940081db39..948da607f83 100644
--- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
@@ -261,7 +261,6 @@
color = "#EFD65A"
complementary_color = "#00E5B1"
message_living = ", and you feel a horrible tingling sensation"
- var/datum/effect_system/spark_spread/spark_system = new/datum/effect_system/spark_spread()
/datum/reagent/blob/energized_jelly/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
@@ -272,8 +271,7 @@
/datum/reagent/blob/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && B.obj_integrity - damage <= 0 && prob(10))
- spark_system.set_up(rand(2, 4), 0, B)
- spark_system.start()
+ do_sparks(rand(2, 4), FALSE, B)
return ..()
/datum/reagent/blob/energized_jelly/tesla_reaction(obj/structure/blob/B, power)
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index 0357f0dbdc4..805aa936d43 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -216,9 +216,7 @@
if(holder.has_reagent("stabilizing_agent"))
return
var/location = get_turf(holder.my_atom)
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(2, 1, location)
- s.start()
+ do_sparks(2, TRUE, location)
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location))
if(C.flash_act())
if(get_dist(C, location) < 4)
@@ -235,9 +233,7 @@
/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(2, 1, location)
- s.start()
+ do_sparks(2, TRUE, location)
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
if(C.flash_act())
if(get_dist(C, location) < 4)
@@ -402,4 +398,4 @@
required_reagents = list("nitrous_oxide" = 1)
strengthdiv = 7
required_temp = 575
- modifier = 1
\ No newline at end of file
+ modifier = 1
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index 7ba7192affc..2ff9387a719 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -30,9 +30,7 @@
return 0
if(!prob(prb))
return 0
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, src)
- s.start()
+ do_sparks(5, TRUE, src)
if (electrocute_mob(user, get_area(src), src, 0.7, TRUE))
return 1
else
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index 3de937a15e5..bdab8b6c226 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -295,9 +295,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
if(isliving(target) && message)
to_chat(target, text("[message]"))
if(sparks_spread)
- var/datum/effect_system/spark_spread/sparks = new
- sparks.set_up(sparks_amt, 0, location) //no idea what the 0 is
- sparks.start()
+ do_sparks(sparks_amt, FALSE, location)
if(smoke_spread)
if(smoke_spread == 1)
var/datum/effect_system/smoke_spread/smoke = new
diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm
index c1d9707ce43..20d223354b7 100644
--- a/code/modules/spells/spell_types/godhand.dm
+++ b/code/modules/spells/spell_types/godhand.dm
@@ -50,9 +50,7 @@
if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //exploding after touching yourself would be bad
return
var/mob/M = target
- var/datum/effect_system/spark_spread/sparks = new
- sparks.set_up(4, 0, M.loc) //no idea what the 0 is
- sparks.start()
+ do_sparks(4, FALSE, M.loc)
M.gib()
..()
@@ -73,4 +71,4 @@
var/mob/living/M = target
M.Stun(2)
M.petrify()
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 8153e47c988..027cab8c3e6 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -167,8 +167,6 @@
/obj/item/weapon/rcs/emag_act(mob/user)
if(!emagged)
- emagged = 1
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, src)
- s.start()
+ emagged = TRUE
+ do_sparks(5, TRUE, src)
to_chat(user, "You emag the RCS. Click on it to toggle between modes.")
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index b5145eaabc0..60ac49a529c 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -139,20 +139,14 @@
var/datum/browser/popup = new(user, "telesci", name, 300, 500)
popup.set_content(t)
popup.open()
- return
/obj/machinery/computer/telescience/proc/sparks()
if(telepad)
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, get_turf(telepad))
- s.start()
- else
- return
+ do_sparks(5, TRUE, get_turf(telepad))
/obj/machinery/computer/telescience/proc/telefail()
sparks()
visible_message("The telepad weakly fizzles.")
- return
/obj/machinery/computer/telescience/proc/doteleport(mob/user)
@@ -201,9 +195,7 @@
// use a lot of power
use_power(power * 10)
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(5, 1, get_turf(telepad))
- s.start()
+ do_sparks(5, TRUE, get_turf(telepad))
temp_msg = "Teleport successful.
"
if(teles_left < 10)
@@ -211,10 +203,7 @@
else
temp_msg += "Data printed below."
- var/sparks = get_turf(target)
- var/datum/effect_system/spark_spread/y = new /datum/effect_system/spark_spread
- y.set_up(5, 1, sparks)
- y.start()
+ do_sparks(5, TRUE, get_turf(target))
var/turf/source = target
var/turf/dest = get_turf(telepad)