From 9310cc0a6693a847281ae0b4e74a2dda9dfe1fc3 Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Tue, 18 Nov 2025 16:02:09 -0700 Subject: [PATCH] [MIRROR] Effect grenade fix (#11983) Co-authored-by: Will <7099514+Willburd@users.noreply.github.com> --- .../items/weapons/grenades/confetti.dm | 20 ++----------------- .../objects/items/weapons/grenades/grenade.dm | 15 ++++++++++++++ .../items/weapons/grenades/smokebomb.dm | 10 +--------- 3 files changed, 18 insertions(+), 27 deletions(-) diff --git a/code/game/objects/items/weapons/grenades/confetti.dm b/code/game/objects/items/weapons/grenades/confetti.dm index ded0d83500..0b9bf4ddc7 100644 --- a/code/game/objects/items/weapons/grenades/confetti.dm +++ b/code/game/objects/items/weapons/grenades/confetti.dm @@ -20,15 +20,7 @@ return ..() /obj/item/grenade/confetti/detonate() //Find a good confetti firework or pop sound effect later - playsound(src.loc, 'sound/effects/snap.ogg', 50, 1, -3) - src.confetti_spread.set_up(10, 0, usr.loc) - spawn(0) - for(var/i = 1 to confetti_strength) - src.confetti_spread.start() - sleep(10) - qdel(src) - - return + start_effect_sprayer(confetti_spread, confetti_strength, 'sound/effects/snap.ogg') /obj/item/grenade/confetti/party_ball //Intended to be used only with the confetti cannon. name = "party ball" @@ -40,12 +32,4 @@ throwforce = 0 //Confetti cannon is only fun to shoot at people if it deals no damage. /obj/item/grenade/confetti/party_ball/detonate() //Could condense this by making the sound a variable in the parent but I'm lazy. - playsound(src.loc, 'sound/effects/confetti_ball.ogg', 50, 1, -3) - src.confetti_spread.set_up(10, 0, usr.loc) - spawn(0) - for(var/i = 1 to confetti_strength) - src.confetti_spread.start() - sleep(10) - qdel(src) - - return + start_effect_sprayer(confetti_spread, confetti_strength, 'sound/effects/confetti_ball.ogg') diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 99ca4517ec..818933389e 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -116,3 +116,18 @@ /obj/item/grenade/vendor_action(var/obj/machinery/vending/V) activate(V) + +/obj/item/grenade/proc/start_effect_sprayer(var/datum/effect/effect/system/spraying, duration, sound_play, start_data = null) + playsound(loc, sound_play, 50, 1, -3) + spraying.set_up(10, 0, loc) + effect_spraying(spraying, duration, start_data) + +/obj/item/grenade/proc/effect_spraying(var/datum/effect/effect/system/spraying, duration, start_data) + SHOULD_NOT_OVERRIDE(TRUE) + PRIVATE_PROC(TRUE) + + spraying.start(start_data) + if(duration > 0) + addtimer(CALLBACK(src, PROC_REF(effect_spraying), spraying, --duration), 1 SECOND, TIMER_DELETE_ME) + return + qdel(src) diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 3a012ae99a..e990c7ab57 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -22,15 +22,7 @@ return ..() /obj/item/grenade/smokebomb/detonate() - playsound(src, 'sound/effects/smoke.ogg', 50, 1, -3) - src.smoke.set_up(10, 0, usr.loc) - spawn(0) - for(var/i = 1 to smoke_strength) - src.smoke.start(smoke_color) - sleep(10) - qdel(src) - - return + start_effect_sprayer(smoke, smoke_strength, 'sound/effects/smoke.ogg', smoke_color) /obj/item/grenade/smokebomb/attackby(obj/item/I as obj, mob/user as mob) if(istype(I,/obj/item/multitool))