diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm
index de751d6da2a..efa3911323c 100644
--- a/code/game/objects/items/weapons/material/ashtray.dm
+++ b/code/game/objects/items/weapons/material/ashtray.dm
@@ -17,6 +17,24 @@
update_icon()
return
+/obj/item/material/ashtray/shatter()
+ if(emptyout(get_turf(src)))
+ visible_message(SPAN_DANGER("The contents of [src] spill everywhere!"))
+
+/obj/item/material/ashtray/proc/emptyout(atom/dest)
+ var/count = 0
+ for (var/obj/item/clothing/mask/smokable/cigarette/O in contents)
+ count++
+ O.forceMove(dest)
+ return count > 0
+
+/obj/item/material/ashtray/attack_self(mob/user)
+ var/turf/dest = get_turf(src)
+ if(emptyout(dest))
+ user.visible_message("[user] pours [src] out onto [dest].", SPAN_NOTICE("You pour [src] out onto [dest]."))
+ return
+ to_chat(user, SPAN_WARNING("[src] is empty, there's nothing to pour out!"))
+
/obj/item/material/ashtray/update_icon()
color = null
cut_overlays()
@@ -50,7 +68,7 @@
if (istype(W,/obj/item/clothing/mask/smokable/cigarette))
var/obj/item/clothing/mask/smokable/cigarette/cig = W
if (cig.lit == TRUE)
- src.visible_message("[user] crushes [cig] in \the [src], putting it out.")
+ user.visible_message("[user] crushes [cig] in \the [src], putting it out.", SPAN_NOTICE(""))
playsound(src.loc, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
STOP_PROCESSING(SSprocessing, cig)
var/obj/item/butt = new cig.type_butt(src)
@@ -60,7 +78,10 @@
//spawn(1)
// TemperatureAct(150)
else if (cig.lit == FALSE)
- to_chat(user, "You place [cig] in [src] without even smoking it. Why would you do that?")
+ user.visible_message(
+ "[user] places [cig] in [src] without even smoking it.",
+ SPAN_NOTICE("You place [cig] in [src] without even smoking it. Why would you do that?")
+ )
src.visible_message("[user] places [W] in [src].")
user.update_inv_l_hand()
@@ -69,7 +90,8 @@
update_icon()
else
health = max(0,health - W.force)
- to_chat(user, "You hit [src] with [W].")
+ user.visible_message(user, SPAN_DANGER("[user] hits [src] with [W]!"), SPAN_DANGER("You hit [src] with [W]."))
+ playsound(get_turf(src), material.hitsound, 25)
if (health < 1)
shatter()
return
@@ -77,10 +99,8 @@
/obj/item/material/ashtray/throw_impact(atom/hit_atom)
if (health > 0)
health = max(0,health - 3)
- if (contents.len)
- src.visible_message("\The [src] slams into [hit_atom], spilling its contents!")
- for (var/obj/item/clothing/mask/smokable/cigarette/O in contents)
- O.forceMove(src.loc)
+ if(emptyout(get_turf(src)))
+ visible_message(SPAN_DANGER("[src] slams into [hit_atom], spilling its contents everywhere!"))
if (health < 1)
shatter()
return
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 70eae980c47..fc7f853d3a3 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -163,6 +163,12 @@
update()
return
+ else if (istype (I, /obj/item/material/ashtray) && user.a_intent != I_HURT)
+ var/obj/item/material/ashtray/A = I
+ if(A.emptyout(get_turf(src)))
+ user.visible_message("[user] pours [I] out into [src].", SPAN_NOTICE("You pour [I] out into [src]."))
+ return
+
else if (istype (I, /obj/item/device/lightreplacer))
var/count = 0
var/obj/item/device/lightreplacer/R = I
diff --git a/html/changelogs/MDP-ashestoashes.yml b/html/changelogs/MDP-ashestoashes.yml
new file mode 100644
index 00000000000..25fcb31353c
--- /dev/null
+++ b/html/changelogs/MDP-ashestoashes.yml
@@ -0,0 +1,45 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: MoondancerPony
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "You can now empty ashtrays into disposal units by clicking the disposal unit with the ashtray in hand. On harm intent, you will disposal the ashtray instead."
+ - tweak: "Tweaks messages when ashtrays are emptied out, hit, and used."
+ - rscadd: "Ashtrays spill their contents when destroyed."
+ - rscadd: "Using an ashtray in hand will dump its contents onto the ground."
+ - rscadd: "Hitting an ashtray will now produce a sound and a visible message."