diff --git a/code/game/sound.dm b/code/game/sound.dm
index fa311c5ece524..7d63311d301fa 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -133,6 +133,8 @@
'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg')
if ("desceration")
soundin = pick('sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg')
+ if ("can_open")
+ soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg')
return soundin
/proc/playsound_global(file, repeat=0, wait, channel, volume)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 08fc5391201c1..b776ed292074f 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -29,6 +29,10 @@
if(!canconsume(M, user))
return 0
+
+ if (!is_open_container())
+ to_chat(user, "[src]'s lid hasn't been opened!")
+ return 0
if(M == user)
to_chat(M, "You swallow a gulp of [src].")
@@ -50,6 +54,10 @@
/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity)
if(!proximity) return
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
+
+ if (!is_open_container())
+ to_chat(user, "[target]'s tab isn't open!")
+ return
if(!target.reagents.total_volume)
to_chat(user, "[target] is empty.")
@@ -87,11 +95,17 @@
to_chat(user, "You heat [src] with [I].")
reagents.handle_reactions()
..()
+
+
+
+
+
////////////////////////////////////////////////////////////////////////////////
/// Drinks. END
////////////////////////////////////////////////////////////////////////////////
+
/obj/item/weapon/reagent_containers/food/drinks/trophy
name = "pewter cup"
desc = "Everyone gets a trophy."
@@ -312,7 +326,9 @@
/obj/item/weapon/reagent_containers/food/drinks/soda_cans
name = "soda can"
-
+ container_type = 0
+ spillable = FALSE
+
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/attack(mob/M, mob/user)
if(M == user && !src.reagents.total_volume && user.a_intent == INTENT_HARM && user.zone_selected == "head")
user.visible_message("[user] crushes the can of [src] on [user.p_their()] forehead!", "You crush the can of [src] on your forehead.")
@@ -321,6 +337,16 @@
crushed_can.icon_state = icon_state
qdel(src)
..()
+
+
+/obj/item/weapon/reagent_containers/food/drinks/soda_cans/attack_self(mob/user)
+ if(!is_open_container())
+ to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh
+ container_type = OPENCONTAINER
+ playsound(src, "can_open", 50, 1)
+ spillable = TRUE
+ return
+ return ..()
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola
name = "Space Cola"
diff --git a/sound/effects/can_open1.ogg b/sound/effects/can_open1.ogg
new file mode 100644
index 0000000000000..4b38ab77038e6
Binary files /dev/null and b/sound/effects/can_open1.ogg differ
diff --git a/sound/effects/can_open2.ogg b/sound/effects/can_open2.ogg
new file mode 100644
index 0000000000000..0b054c23c69dc
Binary files /dev/null and b/sound/effects/can_open2.ogg differ
diff --git a/sound/effects/can_open3.ogg b/sound/effects/can_open3.ogg
new file mode 100644
index 0000000000000..4523c6f1fec8e
Binary files /dev/null and b/sound/effects/can_open3.ogg differ