diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 841312be3a..3e6adb1aa8 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -60,15 +60,23 @@
attack_hand(user)
/obj/structure/table/attack_hand(mob/living/user)
- if(user.a_intent == INTENT_GRAB && user.pulling && isliving(user.pulling))
+ if(user.pulling && isliving(user.pulling))
var/mob/living/pushed_mob = user.pulling
if(pushed_mob.buckled)
to_chat(user, "[pushed_mob] is buckled to [pushed_mob.buckled]!")
return
- if(user.grab_state < GRAB_AGGRESSIVE)
- to_chat(user, "You need a better grip to do that!")
- return
- tablepush(user, pushed_mob)
+ if(user.a_intent == INTENT_GRAB)
+ if(user.grab_state < GRAB_AGGRESSIVE)
+ to_chat(user, "You need a better grip to do that!")
+ return
+ tablepush(user, pushed_mob)
+ if(user.a_intent == INTENT_HELP)
+ pushed_mob.visible_message("[user] begins to place [pushed_mob] onto [src]...", \
+ "[user] begins to place [pushed_mob] onto [src]...")
+ if(do_after(user, 35, target = pushed_mob))
+ tableplace(user, pushed_mob)
+ else
+ return
user.stop_pulling()
else
..()
@@ -89,6 +97,13 @@
var/atom/movable/mover = caller
. = . || (mover.pass_flags & PASSTABLE)
+/obj/structure/table/proc/tableplace(mob/living/user, mob/living/pushed_mob)
+ pushed_mob.forceMove(src.loc)
+ pushed_mob.lay_down()
+ pushed_mob.visible_message("[user] places [pushed_mob] onto [src].", \
+ "[user] places [pushed_mob] onto [src].")
+ add_logs(user, pushed_mob, "placed")
+
/obj/structure/table/proc/tablepush(mob/living/user, mob/living/pushed_mob)
pushed_mob.forceMove(src.loc)
pushed_mob.Knockdown(40)