diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index 6fefb320f64..3649b4704aa 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -41,10 +41,16 @@
user.hud_used.lingstingdisplay.invisibility = 101
/datum/action/changeling/sting/can_sting(mob/user, mob/target)
- if(!..() || !iscarbon(target) || !isturf(user.loc) || !length(get_path_to(user, target, max_distance = cling.sting_range, simulated_only = FALSE)))
+ if(!..() || !iscarbon(target) || !isturf(user.loc))
+ return FALSE
+ if(get_dist(user, target) > cling.sting_range) // Too far, don't bother pathfinding
+ to_chat(user, "Our target is too far for our sting!")
+ return FALSE
+ if(!length(get_path_to(user, target, max_distance = cling.sting_range, simulated_only = FALSE, skip_first = FALSE)))
+ to_chat(user, "Our sting is blocked from reaching our target!")
return FALSE
if(!cling.chosen_sting)
- to_chat(user, "We haven't prepared our sting yet!")
+ to_chat(user, "We haven't prepared our sting yet!")
return FALSE
if(ismachineperson(target))
to_chat(user, "This won't work on synthetics.")
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 0308815ef1f..62c0d440e08 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -201,6 +201,9 @@
AM.setDir(current_dir)
now_pushing = FALSE
+/mob/living/CanPathfindPass(obj/item/card/id/ID, to_dir, atom/movable/caller, no_id = FALSE)
+ return TRUE // Unless you're a mule, something's trying to run you over.
+
/mob/living/proc/can_track(mob/living/user)
//basic fast checks go first. When overriding this proc, I recommend calling ..() at the end.
var/turf/T = get_turf(src)