diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 7216ee0177f..48875c4435a 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -279,6 +279,32 @@ icon = 'icons/obj/nuclearbomb.dmi' icon_state = "nuclearbomb0" anchored = TRUE + /// If TRUE, prevents the player from inserting the disk again while it is currently exploding. + var/exploding = FALSE + +/obj/structure/reagent_dispensers/beerkeg/nuke/attackby(obj/item/O, mob/user, params) + . = ..() + if(exploding) + return + if(!istype(O, /obj/item/disk/nuclear)) + return + user.visible_message( + "[user] inserts [O] into [src] and it begins making a loud beeping noise! Uh-oh!", + "You prime [src] with [O] and it begins making a loud beeping noise! Better run!") + playsound(src, 'sound/machines/alarm.ogg', 100, FALSE, 0) + exploding = TRUE + addtimer(CALLBACK(src, PROC_REF(explode)), 13 SECONDS) + +/obj/structure/reagent_dispensers/beerkeg/nuke/proc/explode() + var/datum/reagents/R = new(100) + R.my_atom = src + R.add_reagent("beer", 100) + var/datum/effect_system/smoke_spread/chem/smoke = new + smoke.set_up(R, src, TRUE) + playsound(src.loc, 'sound/effects/smoke.ogg', 50, TRUE, -3) + smoke.start(3) + qdel(R) + qdel(src) /obj/structure/reagent_dispensers/beerkeg/nuke/update_overlays() . = ..()