anchor.diff:  
   		//needs acceleration, some gravity const somewhere
   		//for jumps/falling
  -		if(doPhysicsApply && !climbingUp && !climbingDown)
  -		{
  +		if(doPhysicsApply && !climbingUp && !climbingDown) {
  +			// walking
   			yVel -= yAccel * dt;
   			posY += yVel * dt;
  -		}
  -		else
  -		{
  +		} else {
  +			// climbing
   			if(inputManager.downKey == true)
   				posY += speed * dt;
   			if(inputManager.upKey == true)
   				posY -= speed * dt;
   		}
   
  -		if(posX < 0)
  +		if(posX < 0) {
   			posX = 0.0;
  -		if(posX > currentStreet.bounds.width - width)
  +		}
  +		if(posX > currentStreet.bounds.width - width) {
   			posX = currentStreet.bounds.width - width;
  +		}
   
   		//check for collisions with platforms
  -		if(doPhysicsApply && !climbingDown && !climbingUp && yVel >= 0)
  -		{
  +		if(doPhysicsApply && !climbingDown && !climbingUp && yVel >= 0) {
   			num x = posX+width/2;
   			Platform bestPlatform = _getBestPlatform(cameFrom);
   
  -			if(bestPlatform != null)
  -			{
  +			if(bestPlatform != null) {
   				num goingTo = posY+height+currentStreet.streetData['dynamic']['ground_y'];
   				num slope = (bestPlatform.end.y-bestPlatform.start.y)/(bestPlatform.end.x-bestPlatform.start.x);
   				num yInt = bestPlatform.start.y - slope*bestPlatform.start.x;
   				num lineY = slope*x+yInt;
   
  -				if(goingTo >= lineY)
  -				{
  +				if(goingTo >= lineY) {
   					posY = lineY-height-currentStreet.streetData['dynamic']['ground_y'];
   					yVel = 0;
   					jumping = false;
  
positive.code: 		return Future.wait(futures);
  	}
  
  	update(double dt)
  	{
  		num cameFrom = posY;
  
  		//show chat message if it exists and decrement it's timeToLive
  		if(chatBubble != null)
  			chatBubble.update(dt);
  
  		if(doPhysicsApply && inputManager.upKey == true)
  		{
  			bool found = false;
  			Rectangle playerRect = new Rectangle(posX,posY+currentStreet.streetData['dynamic']['ground_y'],width,height-15);
  			for(Ladder ladder in currentStreet.ladders)
  			{
  				if(intersect(ladder.bounds,playerRect))
  				{
  					//if our feet are above the ladder, stop climbing
  					if(playerRect.top+playerRect.height < ladder.bounds.top)
  						break;
  
  					posY -= speed/4 * dt;
  					climbingUp = true;
  					activeClimb = true;
  					jumping = false;
  					found = true;
  					break;
  				}
  			}
  			if(!found)
  			{
  				climbingUp = false;
  				climbingDown = false;
  				activeClimb = false;
  			}
  		}
  
  		if(doPhysicsApply && inputManager.downKey == true)
  		{
  			bool found = false;
  			Rectangle playerRect = new Rectangle(posX,posY+currentStreet.streetData['dynamic']['ground_y'],width,height);
  			for(Ladder ladder in currentStreet.ladders)
  			{
  				if(intersect(ladder.bounds,playerRect))
  				{
  					//if our feet are below the ladder, stop climbing
  					if(playerRect.top+playerRect.height > ladder.bounds.top+ladder.bounds.height)
  					break;
  
  					posY += speed/4 * dt;
  					climbingDown = true;
  					activeClimb = true;
  					jumping = false;
  					found = true;
  					break;
  				}
  			}
  			if(!found)
  			{
  				climbingDown = false;
  				climbingUp = false;
  				activeClimb = false;
  			}
  		}
  
  		if(doPhysicsApply && inputManager.downKey == false && inputManager.upKey == false)
  		{
  			bool found = false;
  			Rectangle playerRect = new Rectangle(posX,posY+currentStreet.streetData['dynamic']['ground_y'],width,height);
  			for(Ladder ladder in currentStreet.ladders)
  			{
  				if(intersect(ladder.bounds,playerRect))
  				{
  					found = true;
  					break;
  				}
  			}
  			if(!found)
  			{
  				climbingDown = false;
  				climbingUp = false;
  			}
  			activeClimb = false;
  		}
  
  		if(inputManager.rightKey == true)
  		{
  			posX += speed * dt;
  			facingRight = true;
  			moving = true;
  		}
  		else if(inputManager.leftKey == true)
  		{
  			posX -= speed * dt;
  			facingRight = false;
  			moving = true;
  		}
  		else
  			moving = false;
  
  		//primitive jumping
  		if (inputManager.jumpKey == true && !jumping && !climbingUp && !climbingDown)
  		{
  			num jumpMultiplier;
  			if (querySelector("#buff-pie") != null && querySelector("#buff-spinach") != null) {
  				jumpMultiplier = 1;
  
negative.code: 				jumpMultiplier = 1;
  			}
  
  			if(jumpTimer == null) {
  				// start timer
  				jumpTimer = new Timer(new Duration(seconds:3), () {
  				// normal jump
  				jumpcount = 0;
  				jumpTimer.cancel();
  				jumpTimer = null;
  				});
  			}
  			if(jumpcount == 2) {
  				// triple jump
  				if (querySelector("#buff-pie") == null && querySelector("#buff-spinach") == null) {
  					yVel = -1560;
  