diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 197da35056d..c4bca305935 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -1,6 +1,7 @@
/obj/structure
icon = 'icons/obj/structures.dmi'
var/climbable
+ var/mob/climber
/obj/structure/blob_act()
if(prob(50))
@@ -73,20 +74,26 @@
if(S && S.density) return
usr.visible_message("[user] starts climbing onto \the [src]!")
-
+ climber = user
if(!do_after(user,50))
+ climber = null
return
if (!can_touch(user) || !climbable)
+ climber = null
return
S = locate() in T.contents
- if(S && S.density) return
+ if(S && S.density)
+ climber = null
+ return
usr.loc = get_turf(src)
if (get_turf(user) == get_turf(src))
usr.visible_message("[user] climbs onto \the [src]!")
+ climber = null
+
/obj/structure/proc/structure_shaken()
for(var/mob/living/M in get_turf(src))
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 38a08c66b45..46558088bc8 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -307,6 +307,9 @@
destroy()
else
..()
+ if(climber)
+ climber.Weaken(2)
+ climber.visible_message("[climber.name] has been knocked off the table", "You've been knocked off the table", "You see [climber.name] get knocked off the table")
/obj/structure/table/attack_tk() // no telehulk sorry
return