anchor.diff:  				Search()
   					Wander()
   					for(var/mob/Player/M in ohearers(src, Range))
  -						if(M.loc.loc == src.loc.loc && getStepTo(M, src))
  +						if(M.loc.loc != src.loc.loc) continue
  +						if(ignore && (M in ignore)) continue
  +
  +						if(!isPathBlocked(M, src, 1, src.density))
   							target = M
   							state  = HOSTILE
   							break
  +						else
  +							if(!ignore) ignore = list()
  +							ignore += M
  +							spawn(50)
  +								if(M && ignore)
  +									ignore -= M
  +									if(ignore.len == 0)
  +										ignore = null
  +								else
  +									ignore = null
   
   				Wander()
   					step_rand(src)
  
positive.code: 	dog/icon_state = "dog"
  
  proc
  	getStepTo(mob/source, mob/target)
  		var/dir  = get_dir(source, target)
  		var/turf/t = get_step(source, dir)
  		var/i = 1
  		var/d = dir
  		while(isBlocked(t) && !source.density)
  			d = turn(dir, 45 * i)
  			i *= -1
  			if(i > 0)
  				i++
  			else if(i == -4) return null
  			t = get_step(source, d)
  		return t
  
  
  	isBlocked(turf/t)
  		if(t.density) return 1
  		for(var/atom/a in t)
  			if(a.density) return 1
  		return 0
  area
  	newareas
  
negative.code: 
  				tmp
  					state = WANDER
  					list/ignore
  
  				Range = 10
  				MoveDelay = 5
  