From c080097bc8e8fb5a708b6871a1eae341c7016ac8 Mon Sep 17 00:00:00 2001
From: Kal Woodside <163444594+TheRealWoodside@users.noreply.github.com>
Date: Fri, 10 Jul 2026 07:05:21 -0500
Subject: [PATCH] Allow Skittish to Intercept Bump (#96890)
## About The Pull Request
resolves: https://github.com/tgstation/tgstation/issues/56396
Modifies `atoms_movable.dm` and `skittish.md`, as a subscriber to the
`COMSIG_MOVABLE_BUMP` signal, to allow the latter to bubble up an
intercept flag to `living.dm`, so that it can cancel a shove and
function properly.
I looked at every other registered `COMSIG_MOVABLE_BUMP` signal receiver
and found that only one ever possibly returns non-zero, and that is
`/obj/item/clothing/gloves/gauntlets/proc/rocksmash`. However, when
`rocksmash` is called via a bump signal, it will return `NONE` because
the `proximity` parameter will not be set. Therefore, unless I missed
something, there should be no collateral damage from this change.
## Why It's Good For The Game
Skittish has been broken seemingly since its addition to the game. This
fixes that.
## Changelog
:cl:
fix: Fixed Skittish behaving strangely with lockers not against a wall,
and crates in general.
/:cl:
---
code/datums/elements/skittish.dm | 2 ++
code/game/atoms_movable.dm | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/code/datums/elements/skittish.dm b/code/datums/elements/skittish.dm
index 7f642377370..da1b76ecfb5 100644
--- a/code/datums/elements/skittish.dm
+++ b/code/datums/elements/skittish.dm
@@ -59,3 +59,5 @@
closet_turf.visible_message(span_warning("[scooby] dives into [closet]!"))
// If you run into a locker, you don't want to run out immediately
scooby.Immobilize(0.5 SECONDS)
+
+ return COMPONENT_INTERCEPT_BUMPED
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 403af00e60f..5475913e1c7 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -950,7 +950,7 @@
if(!bumped_atom)
CRASH("Bump was called with no argument.")
if(SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, bumped_atom) & COMPONENT_INTERCEPT_BUMPED)
- return
+ return TRUE
. = ..()
if(!QDELETED(throwing))
throwing.finalize(hit = TRUE, target = bumped_atom)