diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index c734743af1..7843931511 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -24,6 +24,7 @@ var/range = 3 var/hits_left = 3 var/range_left = 3 + var/list/hit /obj/effect/decal/chempuff/blob_act(obj/structure/blob/B) return @@ -35,12 +36,23 @@ src.speed = speed src.range = src.range_left = range src.hits_left = hits_left + hit = list() + +/obj/effect/decal/chempuff/Destroy() + hit = null + return ..() /obj/effect/decal/chempuff/proc/hit_thing(atom/A) if(A == src || A.invisibility) return - if(!hits_left) + if(!hits_left || hit[A]) return + var/living = isliving(A) + if(!A.density && !living) + return + if(ismob(A) && !living) + return + hit[A] = TRUE if(stream) if(ismob(A)) var/mob/M = A @@ -60,7 +72,6 @@ hit_thing(AM) /obj/effect/decal/chempuff/proc/run_puff(atom/target) - set waitfor = FALSE for(var/i in 1 to range) range_left-- if(!isturf(loc)) @@ -69,11 +80,10 @@ hit_thing(T) if(!hits_left || !isturf(loc)) break - if(hits_left && isturf(loc) && (!stream || !range_left)) + if(isturf(loc) && (!stream || !range_left)) reagents.reaction(loc, VAPOR) - hits_left-- - if(!hits_left) - break + step_towards(target) + sleep(speed) qdel(src) /obj/effect/decal/fakelattice diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index d9dde84a5e..95e55cb29d 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -85,7 +85,7 @@ reagents.trans_to(D, amount_per_transfer_from_this, 1/range) D.add_atom_colour(mix_color_from_reagents(D.reagents.reagent_list), TEMPORARY_COLOUR_PRIORITY) last_spray = world.time - D.run_puff(A) + INVOKE_ASYNC(D, /obj/effect/decal/chempuff/proc/run_puff, A) /obj/item/reagent_containers/spray/attack_self(mob/user) stream_mode = !stream_mode