diff --git a/code/game/objects/devices/shields.dm b/code/game/objects/devices/shields.dm
index c48afdf548d..2d86830285e 100644
--- a/code/game/objects/devices/shields.dm
+++ b/code/game/objects/devices/shields.dm
@@ -51,6 +51,37 @@
return
/obj/item/weapon/cloaking_device/emp_act(severity)
+ active = 0
+ icon_state = "shield0"
+ ..()
+
+/obj/item/weapon/displacer
+ name = "displacer field"
+ desc = "Projects a specialized energy field designed to teleport the user out of harms way."
+ icon = 'device.dmi'
+ icon_state = "shield0"
+ var/active = 0.0
+ flags = FPRINT | TABLEPASS| CONDUCT| ONBELT
+ item_state = "electronic"
+ throwforce = 10.0
+ throw_speed = 2
+ throw_range = 10
+ w_class = 4.0
+ origin_tech = "magnets=3;bluespace=4"
+
+
+/obj/item/weapon/displacer/attack_self(mob/user as mob)
+ src.active = !( src.active )
+ if (src.active)
+ user << "\blue The displacer field is now active."
+ src.icon_state = "shield1"
+ else
+ user << "\blue The displacer field is now inactive."
+ src.icon_state = "shield0"
+ src.add_fingerprint(user)
+ return
+
+/obj/item/weapon/displacer/emp_act(severity)
active = 0
icon_state = "shield0"
..()
\ No newline at end of file
diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm
index 76122737582..518bc4cea26 100644
--- a/code/game/objects/items/item.dm
+++ b/code/game/objects/items/item.dm
@@ -340,8 +340,6 @@ mob/proc/flash_weak_pain()
/obj/item/proc/IsShield()
return 0
-
-
/obj/item/proc/eyestab(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
var/mob/living/carbon/human/H = M
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 1f065ea48fa..d575ac1182c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1094,6 +1094,10 @@
if (S.active)
shielded = 2
break
+ for (var/obj/item/weapon/displacer/D in src)
+ if (D.active)
+ shielded = 4
+ break
if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active)
shielded = 3
@@ -1113,6 +1117,8 @@
NinjaStealthActive(loc)
else
NinjaStealthMalf()
+ if(4)
+ overlays += image("icon" = 'effects.dmi', "icon_state" = "shield-old", "layer" = MOB_LAYER+1)
else
invisibility = 0
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 82204a2736b..b4eed09ca9c 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -57,9 +57,24 @@ emp_act
if(I.IsShield() && (prob(50 - round(damage / 3))))
visible_message("\red [src] blocks [attack_text] with the [r_hand.name]!")
return 1
+ if(slot_belt && istype(slot_belt, /obj/item/weapon/displacer))
+ var/obj/item/weapon/displacer/D = slot_belt
+ if(D.active && (prob(50)))
+ visible_message("\red The displacer field flings [src] out of the way of [attack_text]!")
+ var/list/turfs = new/list()
+ for(var/turf/T in orange(6))
+ if(istype(T,/turf/space)) continue
+ if(T.density) continue
+ if(T.x>world.maxx-8 || T.x<8) continue
+ if(T.y>world.maxy-8 || T.y<8) continue
+ turfs += T
+ if(!turfs.len) turfs += pick(/turf in orange(6))
+ var/turf/picked = pick(turfs)
+ if(!isturf(picked)) return
+ src.loc = picked
+ return 1
return 0
-
/mob/living/carbon/human/emp_act(severity)
for(var/obj/O in src)
if(!O) continue