public void tick(){
		if(isDead()){
			dead();
		}
		if((isIdle() || wasJumping || wasBouncing) && !action){
			if(currentIdleFrame == idleAnim.size())
				currentIdleFrame = 0;
			current = idleAnim.get(currentIdleFrame);
			currentIdleFrame++;
		} else {
			currentIdleFrame = 0;
		}
		
		if(collidingWithBouncyBlock()){
			bounce((int)(getCollidingBouncyBlockBounciness()),bouncingAccelerationSpeed);
		}
		
		if(!collidingWithGround() && !jumping && !bouncing && collidable){
		y-=gravityFactor+fallingAccelerationFactor;
			if(collidingWithGround()){
				y++;
			}
		if(fallingAccelerationFactor < fallingAccelerationMax)
			fallingAccelerationFactor+=fallingAccelerationSpeed;
		wasJumping = false;
		wasBouncing = false;
		} else if(collidingWithGround()){
			fallingAccelerationFactor = 0;
	
		}
		if(jumping && !collidingWithCeiling() && !collidingWithLadder()) {
			wasJumping = true;  
			y+= jumpFactor/Math.max(((jumpFactor*jumpInterval)/Math.max(1, (gravityFactor*jumpInterval))), 1);
			jumpInterval++;
			if(jumpInterval == jumpMax){
				jumping = false;
				jumpInterval = 0;
			}
		} else if (jumping && collidingWithLadder() && !collidingWithCeiling()){ 
			y+= ladderClimbFactor;
		} else if(collidingWithCeiling() && !collidingWithLadder()){
			jumping = false;
			jumpInterval = 0;
		}
		
			if(bouncing && !collidingWithCeiling() && !collidingWithLadder()) {
				wasBouncing = true;  
				y+= bounceFactor/Math.max(((bounceFactor*bounceInterval)/Math.max(1, (gravityFactor*bounceInterval))), 1)*Math.max(0.1, bouncingAccelerationFactor);
				bounceInterval++;
				if(bounceInterval == bounceMax){
					bouncing = false;
					bounceMax = 0;
					bouncingAccelerationFactor = 0;
					bounceInterval = 0;
				}
			} else if (bouncing && collidingWithLadder() && !collidingWithCeiling()){ 
				y+= ladderClimbFactor;
			} else if(collidingWithCeiling() && !collidingWithLadder()){
				bouncing = false;
				bouncingAccelerationFactor = 0;
				bounceMax = 0;
				bounceInterval = 0;
			}
		
		movement();
	
		if(!action && actionWithdraw)
			actionWasWithdrawed = true;
		
		if(collidingWithActionBlocks() || infiniteAction){
			if(actiontime == 0){
				if(action && !crouch && (!walking || actionWhileWalking) && (!actionWithdraw || (actionWithdraw && actionWasWithdrawed))){
					current = actionText;
					action();
					actionWasWithdrawed = false;
					actiontime = actiondelay;
				}
			} else {
				actiontime--;
			}
		}
		if(crouch && !jumping && !wasJumping && crouchable){
			height = tempHeight-(tempHeight/crouchAmount);
			current = crouchText;
			wasCrouching = true;
		} else {
			height = tempHeight;
			if(wasCrouching){
				y+=(tempHeight/crouchAmount)*2;
				wasCrouching = false;
			}
		}
		if(collidingWithWallRight()){
			x-=1;
		} else if(collidingWithWallLeft()){
			x+=1;
		}
		if(screenlock){
			Point fov = game.comp.display.getCamera().getFOV();
			game.comp.display.getCamera().setX(Math.min(Math.max(0, x-(fov.x/2))+(game.getCurrentLevel().blockSize.width/2), (int)(game.getCurrentLevel().maxCoords.x-((game.comp.getDisplay().getCamera().getFovX()/game.getCurrentLevel().blockSize.width)))*game.getCurrentLevel().blockSize.width));
			game.comp.display.getCamera().setY(Math.min(Math.max(0, y-(fov.y/2))+(game.getCurrentLevel().blockSize.height/2), (int)(game.getCurrentLevel().maxCoords.y-((game.comp.getDisplay().getCamera().getFovY()/game.getCurrentLevel().blockSize.height)))*game.getCurrentLevel().blockSize.height)-(game.getCurrentLevel().blockSize.height/2));
		}
		etick();
	}