diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index bb342cc6ae0..0b9df0bdae6 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -11,88 +11,88 @@
volume = 50
var/shaken = 0
- on_reagent_change()
+/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
+ return
+
+/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
+ if(!is_open_container())
+ if(user.a_intent == I_HURT && !shaken)
+ shaken = 1
+ user.visible_message("[user] shakes the [src]!", "You shake the [src]!")
+ playsound(loc,'sound/items/Shaking_Soda_Can.ogg', rand(10,50), 1)
+ return
+ if(shaken)
+ boom(user)
+ else
+ open(user)
+
+/obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user as mob)
+ playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
+ user.visible_message("[user] opens the [src].", "You open the [src] with an audible pop!", "You can hear a pop,")
+ flags |= OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/food/drinks/proc/boom(mob/user as mob)
+ user.visible_message("The [src] explodes all over [user] as they open it!","The [src] explodes all over you as you open it!","You can hear a soda can explode.")
+ playsound(loc,'sound/items/Soda_Burst.ogg', rand(20,50), 1)
+ QDEL_NULL(reagents)
+ flags |= OPENCONTAINER
+ shaken = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
+ if(force && !(flags & NOBLUDGEON) && user.a_intent == I_HURT)
+ return ..()
+
+ if(standard_feed_mob(user, M))
return
- attack_self(mob/user as mob)
- if(!is_open_container())
- if(user.a_intent == I_HURT && !shaken)
- shaken = 1
- user << "You shake the [src]!"
- playsound(loc,'sound/items/Shaking_Soda_Can.ogg', rand(10,50), 1)
- return
- if(shaken)
- boom(user)
- else
- open(user)
+ return 0
- proc/open(mob/user)
- playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
- user << "You open [src] with an audible pop!"
- flags |= OPENCONTAINER
+/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
+ if(!proximity)
+ return
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
+ return
+ return ..()
- proc/boom(user)
- user << "The [src] explodes all over you as you open it!"
- playsound(loc,'sound/items/Soda_Burst.ogg', rand(20,50), 1)
- QDEL_NULL(reagents)
- flags |= OPENCONTAINER
- shaken = 0
+/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target)
+ if(!is_open_container())
+ user << "You need to open [src]!"
+ return 1
+ return ..()
- attack(mob/M as mob, mob/user as mob, def_zone)
- if(force && !(flags & NOBLUDGEON) && user.a_intent == I_HURT)
- return ..()
+/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
+ if(!is_open_container())
+ user << "You need to open [src]!"
+ return 1
+ return ..()
- if(standard_feed_mob(user, M))
- return
+/obj/item/weapon/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target)
+ if(!is_open_container())
+ user << "You need to open [src]!"
+ return 1
+ return ..()
- return 0
+/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user)
+ user << "You swallow a gulp from \the [src]."
- afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
+/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user)
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
- return ..()
-
- standard_feed_mob(var/mob/user, var/mob/target)
- if(!is_open_container())
- user << "You need to open [src]!"
- return 1
- return ..()
-
- standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
- if(!is_open_container())
- user << "You need to open [src]!"
- return 1
- return ..()
-
- standard_pour_into(var/mob/user, var/atom/target)
- if(!is_open_container())
- user << "You need to open [src]!"
- return 1
- return ..()
-
- self_feed_message(var/mob/user)
- user << "You swallow a gulp from \the [src]."
-
- feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
- examine(mob/user)
- if(!..(user, 1))
- return
- if(!reagents || reagents.total_volume == 0)
- user << "\The [src] is empty!"
- else if (reagents.total_volume <= volume * 0.25)
- user << "\The [src] is almost empty!"
- else if (reagents.total_volume <= volume * 0.66)
- user << "\The [src] is half full!"
- else if (reagents.total_volume <= volume * 0.90)
- user << "\The [src] is almost full!"
- else
- user << "\The [src] is full!"
+/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
+ if(!..(user, 1))
+ return
+ if(!reagents || reagents.total_volume == 0)
+ user << "\The [src] is empty!"
+ else if (reagents.total_volume <= volume * 0.25)
+ user << "\The [src] is almost empty!"
+ else if (reagents.total_volume <= volume * 0.66)
+ user << "\The [src] is half full!"
+ else if (reagents.total_volume <= volume * 0.90)
+ user << "\The [src] is almost full!"
+ else
+ user << "\The [src] is full!"
////////////////////////////////////////////////////////////////////////////////
diff --git a/html/changelogs/arrow768-sodacans.yml b/html/changelogs/arrow768-sodacans.yml
new file mode 100644
index 00000000000..c7527ee98a0
--- /dev/null
+++ b/html/changelogs/arrow768-sodacans.yml
@@ -0,0 +1,5 @@
+author: Arrow768
+delete-after: True
+
+changes:
+ - bugfix: "You can now see if someone opens a sodacan that has been shaken."