diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index cb7146af27e..e34890d1cdb 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -136,7 +136,7 @@
handle_eye_mouth_covering(affecting, assailant, assailant.zone_sel.selecting)
if(force_down)
- if(affecting.loc != assailant.loc)
+ if(affecting.loc != assailant.loc || size_difference(affecting, assailant) > 0)
force_down = 0
else
affecting.Weaken(2)
@@ -237,7 +237,7 @@
if(state < GRAB_AGGRESSIVE)
if(!allow_upgrade)
return
- if(!affecting.lying)
+ if(!affecting.lying || size_difference(affecting, assailant) > 0)
assailant.visible_message("[assailant] has grabbed [affecting] aggressively (now hands)!")
else
assailant.visible_message("[assailant] pins [affecting] down to the ground (now hands)!")
diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm
index af50746cd4d..e7b75a2e5de 100644
--- a/code/modules/mob/mob_grab_specials.dm
+++ b/code/modules/mob/mob_grab_specials.dm
@@ -131,6 +131,10 @@
return
if(force_down)
attacker << "You are already pinning [target] to the ground."
+ return
+ if(size_difference(affecting, assailant) > 0)
+ attacker << "You are too small to do that!"
+ return
attacker.visible_message("[attacker] starts forcing [target] to the ground!")
if(do_after(attacker, 20) && target)