anchor.diff:  		}
   		playerParentElement.append(playerCanvas);
   		view.worldElement.append(superParentElement);
  +
  +		new Service(["streetLoaded"], (_) {
  +			if (
  +				(mapData.hubData[currentStreet.hub_id] != null && mapData.hubData[currentStreet.hub_id]["triple_jumping"] == false) ||
  +				(mapData.streetData[currentStreet.label] != null && mapData.streetData[currentStreet.label]["triple_jumping"] == false)
  +			) {
  +				canTripleJump = false;
  +			} else {
  +				canTripleJump = true;
  +			}
  +		});
   	}
   
   	Future<List<Animation>> loadAnimations() {
  
positive.code: 	num yVel = 0, yAccel = -2400;
  	bool jumping = false, moving = false, climbingUp = false, climbingDown = false;
  	bool activeClimb = false, lastClimbStatus = false, facingRight = true, firstRender = true;
  	bool isGuide = false;
  	Map<String, Animation> animations = new Map();
  	Animation currentAnimation;
  
negative.code: 				jumpMultiplier = 1;
  			}
  
  			jumping = true;
  			if (canTripleJump) {
  				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
  					yVel = -1560 * jumpMultiplier;
  					jumpcount = 0;
  					jumpTimer.cancel();
  					jumpTimer = null;
  					if (!activeClimb) {
  						audio.playSound('tripleJump');
  					}
  				}
  				else {
  					// normal jump
  					jumpcount++;
  					yVel = -1000 * jumpMultiplier;
  				}
  			} else {
  				// triple jumping disabled
  				yVel = -1000 * jumpMultiplier;
  			}
  		}
  
  		//needs acceleration, some gravity const somewhere
  