anchor.diff:  				canvas.style.transform = "translateX(${left}px) translateY(${top}px) scale3d(-1,1,1)";
   		}
   
  -		if(intersect(camera.visibleRect,entityRect))
  +		if(intersect(camera.visibleRect, entityRect))
   			animation.updateSourceRect(dt);
   	}
   
  -	render()
  -	{
  -		if(ready && animation.dirty)
  -		{
  -			if(!firstRender)
  -			{
  +	render() {
  +		if(ready && (animation.dirty || dirty)) {
  +			if(!firstRender) {
   				//if the entity is not visible, don't render it
  -				if(!intersect(camera.visibleRect,entityRect))
  +				if(!intersect(camera.visibleRect, entityRect))
   					return;
   			}
   
  
positive.code: part of couclient;
  
  class NPC extends Entity
  {
  	int speed = 0;
  	bool ready = false, facingRight = true, firstRender = true;
  	Animation animation;
  
negative.code: 		speed = map['speed'];
  
  		List<int> frameList = [];
  		for(int i = 0; i < map['numFrames']; i++)
  			frameList.add(i);
  
  		animation = new Animation(map['url'], "npc", map['numRows'], map['numColumns'], frameList, loopDelay: new Duration(milliseconds:map['loopDelay']), loops: map['loops']);
  		animation.load().then((_) {
  			top = currentStreet.bounds.height - num.parse(map['y'].toString()) - animation.height;
  			left = num.parse(map['x'].toString());
  			width = map['width'];
  