anchor.diff:  /obj/machinery/field
   	var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
   
  -/obj/machinery/field/CanPass(atom/movable/mover, turf/target, height=0)
  +/obj/machinery/field/CanPass(mob/mover as mob, turf/target, height=0)
   	if(isliving(mover)) // Don't let mobs through
   		shock(mover)
  +		return 0
  +	return ..()
  +
  +/obj/machinery/field/CanPass(obj/mover as obj, turf/target, height=0)
  +	if(istype(mover, /obj/machinery) || istype(mover, /obj/structure))
  +		bump(mover)
   		return 0
   	return ..()
   
  
positive.code: 	return 0
  
  
  /obj/machinery/field/containment/Crossed(atom/movable/mover)
  	if(isliving(mover))
  		shock(mover)
  
  /obj/machinery/field/containment/proc/set_master(var/master1,var/master2)
  	if(!master1 || !master2)
  
negative.code: 			"<span class='danger'>You hear an electrical crack.</span>")
  
  		user.updatehealth()
  		bump(user)
  
  		spawn(5)
  			hasShocked = 0
  	return
  
  /obj/machinery/field/proc/bump(atom/movable/AM as mob|obj)
  	var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
  	s.set_up(5, 1, AM.loc)
  	s.start()
  	var/atom/target = get_edge_target_turf(AM, get_dir(src, get_step_away(AM, src)))
  	AM.throw_at(target, 200, 4)
  