diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm
index 4ae31e98d6..d91d91de72 100644
--- a/code/controllers/subsystem/throwing.dm
+++ b/code/controllers/subsystem/throwing.dm
@@ -103,7 +103,7 @@ SUBSYSTEM_DEF(throwing)
finalize()
return
-/datum/thrownthing/proc/finalize(hit = FALSE)
+/datum/thrownthing/proc/finalize(hit = FALSE, target=null)
set waitfor = 0
SSthrowing.processing -= thrownthing
//done throwing, either because it hit something or it finished moving
@@ -120,13 +120,15 @@ SUBSYSTEM_DEF(throwing)
thrownthing.newtonian_move(init_dir)
else
thrownthing.newtonian_move(init_dir)
+
+ if(target)
+ thrownthing.throw_impact(target, src)
+
if (callback)
callback.Invoke()
/datum/thrownthing/proc/hit_atom(atom/A)
- thrownthing.throw_impact(A, src)
- thrownthing.newtonian_move(init_dir)
- finalize(TRUE)
+ finalize(hit=TRUE, target=A)
/datum/thrownthing/proc/hitcheck()
for (var/thing in get_turf(thrownthing))
@@ -134,6 +136,5 @@ SUBSYSTEM_DEF(throwing)
if (AM == thrownthing)
continue
if (AM.density && !(AM.pass_flags & LETPASSTHROW) && !(AM.flags & ON_BORDER))
- thrownthing.throwing = null
- thrownthing.throw_impact(AM, src)
+ finalize(hit=TRUE, target=AM)
return TRUE
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index 94c8e54f15..13f22851b1 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -26,24 +26,29 @@
tastes = list("pie" = 1)
/obj/item/weapon/reagent_containers/food/snacks/pie/cream/throw_impact(atom/hit_atom)
- if(!..()) //was it caught by a mob?
- var/turf/T = get_turf(hit_atom)
- new/obj/effect/decal/cleanable/pie_smudge(T)
- reagents.reaction(hit_atom, TOUCH)
+ . = ..()
+ if(!.) //if we're not being caught
+ splat(hit_atom)
- if(ishuman(hit_atom))
- var/mob/living/carbon/human/H = hit_atom
- var/mutable_appearance/creamoverlay = mutable_appearance('icons/effects/creampie.dmi')
- if(H.dna.species.id == "lizard")
- creamoverlay.icon_state = "creampie_lizard"
- else
- creamoverlay.icon_state = "creampie_human"
- H.Knockdown(20) //splat!
- H.adjust_blurriness(1)
- visible_message("[H] was creamed by [src]!!")
- H.add_overlay(creamoverlay)
-
- qdel(src)
+/obj/item/weapon/reagent_containers/food/snacks/pie/cream/proc/splat(atom/movable/hit_atom)
+ if(isliving(loc)) //someone caught us!
+ return
+ var/turf/T = get_turf(hit_atom)
+ new/obj/effect/decal/cleanable/pie_smudge(T)
+ reagents.reaction(hit_atom, TOUCH)
+ if(ishuman(hit_atom))
+ var/mob/living/carbon/human/H = hit_atom
+ var/mutable_appearance/creamoverlay = mutable_appearance('icons/effects/creampie.dmi')
+ if(H.dna.species.limbs_id == "lizard")
+ creamoverlay.icon_state = "creampie_lizard"
+ else
+ creamoverlay.icon_state = "creampie_human"
+ H.Knockdown(20) //splat!
+ H.adjust_blurriness(1)
+ H.visible_message("[H] is creamed by [src]!", "You've been creamed by [src]!")
+ playsound(H, "desceration", 50, TRUE)
+ H.add_overlay(creamoverlay)
+ qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/pie/berryclafoutis