diff --git a/code/defines/mob/living/carbon/alien_humanoid.dm b/code/defines/mob/living/carbon/alien_humanoid.dm
index 6a880121b4d..4dd505c9d0d 100644
--- a/code/defines/mob/living/carbon/alien_humanoid.dm
+++ b/code/defines/mob/living/carbon/alien_humanoid.dm
@@ -45,7 +45,7 @@
health = 250
icon_state = "queen_s"
-
+ relentless = 1
/mob/living/carbon/alien/humanoid/rpbody
update_icon = 0
diff --git a/code/defines/obj/clothing/costume.dm b/code/defines/obj/clothing/costume.dm
index 0aefb4b6a16..9ddf0b26083 100644
--- a/code/defines/obj/clothing/costume.dm
+++ b/code/defines/obj/clothing/costume.dm
@@ -12,6 +12,11 @@
new /obj/item/clothing/suit/chickensuit(src.loc)
del(src)
+/obj/effect/landmark/costume/gladiator/New()
+ new /obj/item/clothing/under/gladiator(src.loc)
+ new /obj/item/clothing/head/gladiator(src.loc)
+ del(src)
+
/obj/effect/landmark/costume/madscientist/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 330b3b2ecbc..c012a59eddd 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -30,9 +30,10 @@
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(prob(70))
- for(var/mob/M in viewers(src, null))
- if(M.client)
- M << "\red [src] fails to push [tmob]'s fat ass out of the way."
+ src << "\red You fail to push [tmob]'s fat ass out of the way."
+ now_pushing = 0
+ return
+ if(tmob.relentless)
now_pushing = 0
return
tmob.LAssailant = src
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 7e567f6de26..63c20fc9f0a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -145,10 +145,12 @@
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(prob(40) && !(mutations & FAT))
- visible_message("\red [src] fails to push [tmob]'s fat ass out of the way.", \
- "\red You fail to push [tmob]'s fat ass out of the way.")
+ src << "\red You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
return
+ if(tmob.relentless)
+ now_pushing = 0
+ return
tmob.LAssailant = src
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index a18e5cbb3b9..cfe9c04ca3c 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -49,11 +49,12 @@
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(prob(70))
- for(var/mob/M in viewers(src, null))
- if(M.client)
- M << "\red [src] fails to push [tmob]'s fat ass out of the way."
+ usr << "\red You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
return
+ if(tmob.relentless)
+ now_pushing = 0
+ return
tmob.LAssailant = src
now_pushing = 0
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 7b2b243b4ca..9fe0fdaf5cb 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -242,12 +242,13 @@
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(prob(20))
- for(var/mob/M in viewers(src, null))
- if(M.client)
- M << M << "\red [src] fails to push [tmob]'s fat ass out of the way."
+ usr << "\red You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
//unlock_medal("That's No Moon, That's A Gourmand!", 1)
return
+ if(tmob.relentless)
+ now_pushing = 0
+ return
now_pushing = 0
..()
if (istype(AM, /obj/machinery/recharge_station))
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 4e9839ddd40..7d089127923 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -253,6 +253,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i
var/canstun = 1 // determines if this mob can be stunned by things
var/canweaken = 1 // determines if this mob can be weakened/knocked down by things
-
+ var/relentless = 0 //Can they be shoved?
var/area/lastarea = null
\ No newline at end of file
diff --git a/code/modules/mob/simple_animal/constructs.dm b/code/modules/mob/simple_animal/constructs.dm
index d7be017f3fe..de15ec75d34 100644
--- a/code/modules/mob/simple_animal/constructs.dm
+++ b/code/modules/mob/simple_animal/constructs.dm
@@ -22,6 +22,9 @@
max_tox = 0
speed = 3
destroyer = 1
+ relentless = 1
+ a_intent = "harm"
+ stop_automated_movement = 1
Life()
..()
@@ -48,4 +51,41 @@
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
- M.show_message("\red [user] gently taps [src] with the [O]. ")
\ No newline at end of file
+ M.show_message("\red [user] gently taps [src] with the [O]. ")
+
+
+/mob/living/simple_animal/constructarmoured/Bump(atom/movable/AM as mob|obj, yes)
+
+ spawn( 0 )
+ if ((!( yes ) || now_pushing))
+ return
+ now_pushing = 1
+ if(ismob(AM))
+ var/mob/tmob = AM
+ if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
+ if(prob(5))
+ src << "\red You fail to push [tmob]'s fat ass out of the way."
+ now_pushing = 0
+ return
+ if(tmob.relentless)
+ now_pushing = 0
+ return
+
+ tmob.LAssailant = src
+ now_pushing = 0
+ ..()
+ if (!( istype(AM, /atom/movable) ))
+ return
+ if (!( now_pushing ))
+ now_pushing = 1
+ if (!( AM.anchored ))
+ var/t = get_dir(src, AM)
+ if (istype(AM, /obj/structure/window))
+ if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
+ for(var/obj/structure/window/win in get_step(AM,t))
+ now_pushing = 0
+ return
+ step(AM, t)
+ now_pushing = null
+ return
+ return
\ No newline at end of file
diff --git a/code/modules/mob/simple_animal/corgi.dm b/code/modules/mob/simple_animal/corgi.dm
index 68a43ecabf2..bf675df2e73 100644
--- a/code/modules/mob/simple_animal/corgi.dm
+++ b/code/modules/mob/simple_animal/corgi.dm
@@ -341,11 +341,12 @@
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(prob(70))
- for(var/mob/M in viewers(src, null))
- if(M.client)
- M << "\red [src] fails to push [tmob]'s fat ass out of the way."
+ src << "\red You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
return
+ if(tmob.relentless)
+ now_pushing = 0
+ return
tmob.LAssailant = src
now_pushing = 0
diff --git a/code/modules/mob/simple_animal/shade.dm b/code/modules/mob/simple_animal/shade.dm
index 8f3c4cc3388..bbcce11a4f4 100644
--- a/code/modules/mob/simple_animal/shade.dm
+++ b/code/modules/mob/simple_animal/shade.dm
@@ -21,6 +21,7 @@
max_co2 = 0
max_tox = 0
speed = -1
+ stop_automated_movement = 1
Life()
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index 60421e56b77..57bf2896fa4 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index c1bdf000bf3..84cd008a907 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -162,7 +162,6 @@
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
-#define FILE_DIR "maps/backup"
#define FILE_DIR "sound"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/announcer"
@@ -311,6 +310,7 @@
#include "code\defines\procs\command_alert.dm"
#include "code\defines\procs\command_name.dm"
#include "code\defines\procs\dbcore.dm"
+#include "code\defines\procs\forum_activation.dm"
#include "code\defines\procs\gamehelpers.dm"
#include "code\defines\procs\helpers.dm"
#include "code\defines\procs\icon_procs.dm"
@@ -718,6 +718,7 @@
#include "code\modules\admin\verbs\adminjump.dm"
#include "code\modules\admin\verbs\adminsay.dm"
#include "code\modules\admin\verbs\atmosdebug.dm"
+#include "code\modules\admin\verbs\BrokenInhands.dm"
#include "code\modules\admin\verbs\deadsay.dm"
#include "code\modules\admin\verbs\debug.dm"
#include "code\modules\admin\verbs\diagnostics.dm"