From bdc94d4a3b1b3ad09ca9c9eec1879306c2bb99a8 Mon Sep 17 00:00:00 2001 From: Guti <32563288+TheCaramelion@users.noreply.github.com> Date: Sat, 15 Nov 2025 01:09:24 +0100 Subject: [PATCH] Adds can shaking (#18755) * Shake shake * Un-shake the shaken * boom --- code/modules/food/food/cans.dm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/code/modules/food/food/cans.dm b/code/modules/food/food/cans.dm index 5229bcd7dc9..0d42e72dcf0 100644 --- a/code/modules/food/food/cans.dm +++ b/code/modules/food/food/cans.dm @@ -5,6 +5,39 @@ drop_sound = 'sound/items/drop/soda.ogg' pickup_sound = 'sound/items/pickup/soda.ogg' cant_chance = 1 //arbitrarily high for april fools; if it's not reverted in its entirety I suggest rolling it down to 2% or something + var/shaken = 0 // How many times this can has been shaken. + +/obj/item/reagent_containers/food/drinks/cans/attack_self(mob/user) + if(user.a_intent == I_HURT && !is_open_container()) + to_chat(user, span_warning("You shake [src].")) + if(!shaken) + START_PROCESSING(SSobj, src) + shaken += 3 + return + if(HAS_TRAIT(user, TRAIT_UNLUCKY) && prob(10)) // Because it's always funny + shaken += 10 + . = ..() + +/obj/item/reagent_containers/food/drinks/cans/open(mob/user) + . = ..() + if(!cant_open && shaken) + to_chat(user, span_warning("[src] [(shaken > 50) ? "explodes" : "foams"] when you open it!")) + var/obj/effect/effect/foam/foam = new /obj/effect/effect/foam(src.loc) + foam.amount = (shaken > 50) ? 2 : 1 + reagents.splash(user, shaken/2) + reagents.trans_to(foam, shaken/2) + if(shaken > 50) + if(HAS_TRAIT(user, TRAIT_UNLUCKY) && prob(0.1)) + explosion(get_turf(src), -1, -1, -1, 7) + user.gib() + else + explosion(get_turf(src), -1, -1, -1, 1) + qdel(src) + +/obj/item/reagent_containers/food/drinks/cans/process() + if(shaken <= 0) + return PROCESS_KILL + shaken-- //DRINKS