/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Frog = Container.expand(function () {
	var self = Container.call(this);
	var frogGraphics = self.attachAsset('frog', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.isJumping = false;
	self.jumpPower = 0;
	self.velocityX = 0;
	self.velocityY = 0;
	self.onGround = true;
	self.startJump = function (power) {
		if (!self.onGround) return;
		self.isJumping = true;
		self.onGround = false;
		self.jumpPower = power;
		// Convert power to velocity
		var maxVelocityX = 25;
		var maxVelocityY = -30;
		self.velocityX = maxVelocityX * power;
		self.velocityY = maxVelocityY * power;
		LK.getSound('jump').play();
	};
	self.update = function () {
		if (self.isJumping) {
			// Apply gravity
			self.velocityY += 1.2;
			// Update position
			self.x += self.velocityX;
			self.y += self.velocityY;
			// Check if landed on ground or platform
			var landed = false;
			// Check platform landings
			for (var i = 0; i < platforms.length; i++) {
				var platform = platforms[i];
				if (self.x >= platform.x - 150 && self.x <= platform.x + 150) {
					if (self.y >= platform.y - 30 && self.velocityY > 0) {
						self.y = platform.y - 30;
						landed = true;
						break;
					}
				}
			}
			// Check if frog has fallen too far below any nearby platform (game over condition)
			var gameOver = false;
			if (self.y > 2732) {
				gameOver = true;
			} else if (self.isJumping && self.velocityY > 0) {
				// Check if frog is falling and has passed below all nearby platforms
				var nearbyPlatforms = [];
				for (var j = 0; j < platforms.length; j++) {
					var platform = platforms[j];
					if (Math.abs(platform.x - self.x) < 800) {
						nearbyPlatforms.push(platform);
					}
				}
				if (nearbyPlatforms.length > 0) {
					var lowestPlatform = nearbyPlatforms[0];
					for (var k = 1; k < nearbyPlatforms.length; k++) {
						if (nearbyPlatforms[k].y > lowestPlatform.y) {
							lowestPlatform = nearbyPlatforms[k];
						}
					}
					// If frog is more than 200 pixels below the lowest nearby platform, game over
					if (self.y > lowestPlatform.y + 200) {
						gameOver = true;
					}
				}
			}
			// Check for insect collisions while jumping or moving
			for (var insectIndex = insects.length - 1; insectIndex >= 0; insectIndex--) {
				var insect = insects[insectIndex];
				if (self.intersects(insect)) {
					// Eat the insect - add points and remove it
					LK.setScore(LK.getScore() + 10);
					insect.destroy();
					insects.splice(insectIndex, 1);
				}
			}
			// Check for owl collisions - game over if hit
			for (var owlIndex = 0; owlIndex < owls.length; owlIndex++) {
				var owl = owls[owlIndex];
				if (self.intersects(owl)) {
					// Hit by owl - game over immediately
					LK.showGameOver();
					return;
				}
			}
			if (landed || gameOver) {
				self.velocityX = 0;
				self.velocityY = 0;
				self.isJumping = false;
				self.onGround = true;
				if (landed) {
					LK.getSound('land').play();
					// Update distance if this is a new record
					var currentDistance = Math.floor(self.x / 100);
					if (currentDistance > bestDistance) {
						bestDistance = currentDistance;
						storage.bestDistance = bestDistance;
					}
					jumpDistance = currentDistance;
				} else {
					// Fell off screen or missed platforms - game over
					LK.showGameOver();
				}
			}
		}
	};
	return self;
});
var Insect = Container.expand(function (x, y) {
	var self = Container.call(this);
	var insectGraphics = self.attachAsset('insect', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	self.startY = y;
	self.movementRange = 150;
	self.startVerticalMovement = function () {
		// Start moving down
		tween(self, {
			y: self.startY + self.movementRange
		}, {
			duration: 2000 + Math.random() * 1000,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				// Move back up
				tween(self, {
					y: self.startY - self.movementRange
				}, {
					duration: 2000 + Math.random() * 1000,
					easing: tween.easeInOut,
					onFinish: function onFinish() {
						// Restart the cycle
						self.startVerticalMovement();
					}
				});
			}
		});
	};
	// Start the movement cycle immediately
	self.startVerticalMovement();
	return self;
});
var JumpMeter = Container.expand(function () {
	var self = Container.call(this);
	var meterBg = self.attachAsset('jumpMeterBg', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	var meterFill = self.attachAsset('jumpMeterFill', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.power = 0;
	self.charging = false;
	self.direction = 1;
	self.startCharging = function () {
		self.charging = true;
		self.power = 0;
		self.direction = 1;
	};
	self.stopCharging = function () {
		self.charging = false;
		var finalPower = self.power;
		self.power = 0;
		return finalPower;
	};
	self.update = function () {
		if (self.charging) {
			self.power += self.direction * 0.03;
			if (self.power >= 1.0) {
				self.power = 1.0;
				self.direction = -1;
			} else if (self.power <= 0) {
				self.power = 0;
				self.direction = 1;
			}
		}
		// Update fill height and color
		var fillHeight = 290 * self.power;
		meterFill.height = fillHeight;
		meterFill.y = -2;
		// Color coding: green in optimal zone (0.7-0.9), red otherwise
		if (self.power >= 0.7 && self.power <= 0.9) {
			meterFill.tint = 0x44FF44;
		} else {
			meterFill.tint = 0xFF4444;
		}
	};
	return self;
});
var Owl = Container.expand(function (x, y) {
	var self = Container.call(this);
	var owlGraphics = self.attachAsset('owl', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	self.startX = x;
	self.movementRange = 400;
	self.startHorizontalMovement = function () {
		// Move right
		tween(self, {
			x: self.startX + self.movementRange
		}, {
			duration: 3000 + Math.random() * 1000,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				// Move back left
				tween(self, {
					x: self.startX - self.movementRange
				}, {
					duration: 3000 + Math.random() * 1000,
					easing: tween.easeInOut,
					onFinish: function onFinish() {
						// Restart the cycle
						self.startHorizontalMovement();
					}
				});
			}
		});
	};
	// Start the movement cycle immediately
	self.startHorizontalMovement();
	return self;
});
var Platform = Container.expand(function (x, y) {
	var self = Container.call(this);
	var platformGraphics = self.attachAsset('platform', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
// Game variables
var frog;
var platforms = [];
var insects = [];
var owls = [];
var jumpMeter;
var jumpDistance = 0;
var bestDistance = storage.bestDistance || 0;
var isCharging = false;
// UI elements
var distanceText = new Text2('Distance: 0m', {
	size: 60,
	fill: 0x000000
});
distanceText.anchor.set(0.5, 0);
LK.gui.top.addChild(distanceText);
distanceText.y = 150;
var scoreText = new Text2('Score: 0', {
	size: 50,
	fill: 0x000000
});
scoreText.anchor.set(0, 0);
LK.gui.top.addChild(scoreText);
scoreText.x = -400;
scoreText.y = 50;
var bestText = new Text2('Best: ' + bestDistance + 'm', {
	size: 50,
	fill: 0x000000
});
bestText.anchor.set(1, 0);
LK.gui.topRight.addChild(bestText);
bestText.y = 100;
bestText.x = -20;
// Create frog
frog = game.addChild(new Frog());
frog.x = 400;
frog.y = 2200;
// Create starting platform underneath the frog
var startPlatform = game.addChild(new Platform(400, 2230));
platforms.push(startPlatform);
// Generate initial platforms
function generatePlatforms() {
	for (var i = 1; i <= 20; i++) {
		var x = 400 + i * 600 + (Math.random() - 0.5) * 200;
		var y = 2230 + (Math.random() - 0.5) * 400;
		var platform = game.addChild(new Platform(x, y));
		platforms.push(platform);
	}
}
// Generate initial insects
function generateInsects() {
	for (var i = 0; i < platforms.length - 1; i++) {
		var platform1 = platforms[i];
		var platform2 = platforms[i + 1];
		// Create 1-2 insects between each pair of platforms
		var numInsects = 1 + Math.floor(Math.random() * 2);
		for (var j = 0; j < numInsects; j++) {
			var x = platform1.x + (platform2.x - platform1.x) * (0.3 + Math.random() * 0.4);
			var y = Math.min(platform1.y, platform2.y) - 100 - Math.random() * 200;
			var insect = game.addChild(new Insect(x, y));
			insects.push(insect);
		}
	}
}
// Generate initial owls
function generateOwls() {
	for (var i = 0; i < platforms.length - 1; i++) {
		var platform1 = platforms[i];
		var platform2 = platforms[i + 1];
		// Create 1 owl high above the platforms (every 2-3 platform pairs)
		if (i % 3 === 0) {
			var x = platform1.x + (platform2.x - platform1.x) * 0.5;
			var y = Math.min(platform1.y, platform2.y) - 300 - Math.random() * 200;
			var owl = game.addChild(new Owl(x, y));
			owls.push(owl);
		}
	}
}
generatePlatforms();
generateInsects();
generateOwls();
// Create jump meter
jumpMeter = game.addChild(new JumpMeter());
jumpMeter.x = 200;
jumpMeter.y = 2200;
// Input handling
game.down = function (x, y, obj) {
	if (frog.onGround && !isCharging) {
		isCharging = true;
		jumpMeter.startCharging();
	}
};
game.up = function (x, y, obj) {
	if (isCharging && frog.onGround) {
		isCharging = false;
		var power = jumpMeter.stopCharging();
		frog.startJump(power);
	}
};
// Camera following
function updateCamera() {
	var targetX = -frog.x + 1024;
	var targetY = -frog.y + 1800;
	// Smooth camera movement
	game.x += (targetX - game.x) * 0.1;
	game.y += (targetY - game.y) * 0.1;
	// Generate more platforms if needed
	var rightmostPlatform = platforms[platforms.length - 1];
	if (frog.x > rightmostPlatform.x - 2000) {
		var startIndex = platforms.length - 1;
		for (var i = 0; i < 5; i++) {
			var lastX = rightmostPlatform.x;
			var x = lastX + 600 + Math.random() * 400;
			var y = 2230 + (Math.random() - 0.5) * 400;
			var platform = game.addChild(new Platform(x, y));
			platforms.push(platform);
			rightmostPlatform = platform;
		}
		// Generate insects for the new platforms
		for (var k = startIndex; k < platforms.length - 1; k++) {
			var platform1 = platforms[k];
			var platform2 = platforms[k + 1];
			var numInsects = 1 + Math.floor(Math.random() * 2);
			for (var m = 0; m < numInsects; m++) {
				var insectX = platform1.x + (platform2.x - platform1.x) * (0.3 + Math.random() * 0.4);
				var insectY = Math.min(platform1.y, platform2.y) - 100 - Math.random() * 200;
				var newInsect = game.addChild(new Insect(insectX, insectY));
				insects.push(newInsect);
			}
		}
		// Generate owls for the new platforms
		for (var n = startIndex; n < platforms.length - 1; n++) {
			if (n % 3 === 0) {
				var owlPlatform1 = platforms[n];
				var owlPlatform2 = platforms[n + 1];
				var owlX = owlPlatform1.x + (owlPlatform2.x - owlPlatform1.x) * 0.5;
				var owlY = Math.min(owlPlatform1.y, owlPlatform2.y) - 300 - Math.random() * 200;
				var newOwl = game.addChild(new Owl(owlX, owlY));
				owls.push(newOwl);
			}
		}
	}
}
// Start background music
LK.playMusic('1suaradanaudimalamhari');
game.update = function () {
	// Update distance display
	jumpDistance = Math.floor(Math.max(0, frog.x - 400) / 100);
	distanceText.setText('Distance: ' + jumpDistance + 'm');
	bestText.setText('Best: ' + bestDistance + 'm');
	scoreText.setText('Score: ' + LK.getScore());
	updateCamera();
}; /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Frog = Container.expand(function () {
	var self = Container.call(this);
	var frogGraphics = self.attachAsset('frog', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.isJumping = false;
	self.jumpPower = 0;
	self.velocityX = 0;
	self.velocityY = 0;
	self.onGround = true;
	self.startJump = function (power) {
		if (!self.onGround) return;
		self.isJumping = true;
		self.onGround = false;
		self.jumpPower = power;
		// Convert power to velocity
		var maxVelocityX = 25;
		var maxVelocityY = -30;
		self.velocityX = maxVelocityX * power;
		self.velocityY = maxVelocityY * power;
		LK.getSound('jump').play();
	};
	self.update = function () {
		if (self.isJumping) {
			// Apply gravity
			self.velocityY += 1.2;
			// Update position
			self.x += self.velocityX;
			self.y += self.velocityY;
			// Check if landed on ground or platform
			var landed = false;
			// Check platform landings
			for (var i = 0; i < platforms.length; i++) {
				var platform = platforms[i];
				if (self.x >= platform.x - 150 && self.x <= platform.x + 150) {
					if (self.y >= platform.y - 30 && self.velocityY > 0) {
						self.y = platform.y - 30;
						landed = true;
						break;
					}
				}
			}
			// Check if frog has fallen too far below any nearby platform (game over condition)
			var gameOver = false;
			if (self.y > 2732) {
				gameOver = true;
			} else if (self.isJumping && self.velocityY > 0) {
				// Check if frog is falling and has passed below all nearby platforms
				var nearbyPlatforms = [];
				for (var j = 0; j < platforms.length; j++) {
					var platform = platforms[j];
					if (Math.abs(platform.x - self.x) < 800) {
						nearbyPlatforms.push(platform);
					}
				}
				if (nearbyPlatforms.length > 0) {
					var lowestPlatform = nearbyPlatforms[0];
					for (var k = 1; k < nearbyPlatforms.length; k++) {
						if (nearbyPlatforms[k].y > lowestPlatform.y) {
							lowestPlatform = nearbyPlatforms[k];
						}
					}
					// If frog is more than 200 pixels below the lowest nearby platform, game over
					if (self.y > lowestPlatform.y + 200) {
						gameOver = true;
					}
				}
			}
			// Check for insect collisions while jumping or moving
			for (var insectIndex = insects.length - 1; insectIndex >= 0; insectIndex--) {
				var insect = insects[insectIndex];
				if (self.intersects(insect)) {
					// Eat the insect - add points and remove it
					LK.setScore(LK.getScore() + 10);
					insect.destroy();
					insects.splice(insectIndex, 1);
				}
			}
			// Check for owl collisions - game over if hit
			for (var owlIndex = 0; owlIndex < owls.length; owlIndex++) {
				var owl = owls[owlIndex];
				if (self.intersects(owl)) {
					// Hit by owl - game over immediately
					LK.showGameOver();
					return;
				}
			}
			if (landed || gameOver) {
				self.velocityX = 0;
				self.velocityY = 0;
				self.isJumping = false;
				self.onGround = true;
				if (landed) {
					LK.getSound('land').play();
					// Update distance if this is a new record
					var currentDistance = Math.floor(self.x / 100);
					if (currentDistance > bestDistance) {
						bestDistance = currentDistance;
						storage.bestDistance = bestDistance;
					}
					jumpDistance = currentDistance;
				} else {
					// Fell off screen or missed platforms - game over
					LK.showGameOver();
				}
			}
		}
	};
	return self;
});
var Insect = Container.expand(function (x, y) {
	var self = Container.call(this);
	var insectGraphics = self.attachAsset('insect', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	self.startY = y;
	self.movementRange = 150;
	self.startVerticalMovement = function () {
		// Start moving down
		tween(self, {
			y: self.startY + self.movementRange
		}, {
			duration: 2000 + Math.random() * 1000,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				// Move back up
				tween(self, {
					y: self.startY - self.movementRange
				}, {
					duration: 2000 + Math.random() * 1000,
					easing: tween.easeInOut,
					onFinish: function onFinish() {
						// Restart the cycle
						self.startVerticalMovement();
					}
				});
			}
		});
	};
	// Start the movement cycle immediately
	self.startVerticalMovement();
	return self;
});
var JumpMeter = Container.expand(function () {
	var self = Container.call(this);
	var meterBg = self.attachAsset('jumpMeterBg', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	var meterFill = self.attachAsset('jumpMeterFill', {
		anchorX: 0.5,
		anchorY: 1.0
	});
	self.power = 0;
	self.charging = false;
	self.direction = 1;
	self.startCharging = function () {
		self.charging = true;
		self.power = 0;
		self.direction = 1;
	};
	self.stopCharging = function () {
		self.charging = false;
		var finalPower = self.power;
		self.power = 0;
		return finalPower;
	};
	self.update = function () {
		if (self.charging) {
			self.power += self.direction * 0.03;
			if (self.power >= 1.0) {
				self.power = 1.0;
				self.direction = -1;
			} else if (self.power <= 0) {
				self.power = 0;
				self.direction = 1;
			}
		}
		// Update fill height and color
		var fillHeight = 290 * self.power;
		meterFill.height = fillHeight;
		meterFill.y = -2;
		// Color coding: green in optimal zone (0.7-0.9), red otherwise
		if (self.power >= 0.7 && self.power <= 0.9) {
			meterFill.tint = 0x44FF44;
		} else {
			meterFill.tint = 0xFF4444;
		}
	};
	return self;
});
var Owl = Container.expand(function (x, y) {
	var self = Container.call(this);
	var owlGraphics = self.attachAsset('owl', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	self.startX = x;
	self.movementRange = 400;
	self.startHorizontalMovement = function () {
		// Move right
		tween(self, {
			x: self.startX + self.movementRange
		}, {
			duration: 3000 + Math.random() * 1000,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				// Move back left
				tween(self, {
					x: self.startX - self.movementRange
				}, {
					duration: 3000 + Math.random() * 1000,
					easing: tween.easeInOut,
					onFinish: function onFinish() {
						// Restart the cycle
						self.startHorizontalMovement();
					}
				});
			}
		});
	};
	// Start the movement cycle immediately
	self.startHorizontalMovement();
	return self;
});
var Platform = Container.expand(function (x, y) {
	var self = Container.call(this);
	var platformGraphics = self.attachAsset('platform', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.x = x;
	self.y = y;
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
// Game variables
var frog;
var platforms = [];
var insects = [];
var owls = [];
var jumpMeter;
var jumpDistance = 0;
var bestDistance = storage.bestDistance || 0;
var isCharging = false;
// UI elements
var distanceText = new Text2('Distance: 0m', {
	size: 60,
	fill: 0x000000
});
distanceText.anchor.set(0.5, 0);
LK.gui.top.addChild(distanceText);
distanceText.y = 150;
var scoreText = new Text2('Score: 0', {
	size: 50,
	fill: 0x000000
});
scoreText.anchor.set(0, 0);
LK.gui.top.addChild(scoreText);
scoreText.x = -400;
scoreText.y = 50;
var bestText = new Text2('Best: ' + bestDistance + 'm', {
	size: 50,
	fill: 0x000000
});
bestText.anchor.set(1, 0);
LK.gui.topRight.addChild(bestText);
bestText.y = 100;
bestText.x = -20;
// Create frog
frog = game.addChild(new Frog());
frog.x = 400;
frog.y = 2200;
// Create starting platform underneath the frog
var startPlatform = game.addChild(new Platform(400, 2230));
platforms.push(startPlatform);
// Generate initial platforms
function generatePlatforms() {
	for (var i = 1; i <= 20; i++) {
		var x = 400 + i * 600 + (Math.random() - 0.5) * 200;
		var y = 2230 + (Math.random() - 0.5) * 400;
		var platform = game.addChild(new Platform(x, y));
		platforms.push(platform);
	}
}
// Generate initial insects
function generateInsects() {
	for (var i = 0; i < platforms.length - 1; i++) {
		var platform1 = platforms[i];
		var platform2 = platforms[i + 1];
		// Create 1-2 insects between each pair of platforms
		var numInsects = 1 + Math.floor(Math.random() * 2);
		for (var j = 0; j < numInsects; j++) {
			var x = platform1.x + (platform2.x - platform1.x) * (0.3 + Math.random() * 0.4);
			var y = Math.min(platform1.y, platform2.y) - 100 - Math.random() * 200;
			var insect = game.addChild(new Insect(x, y));
			insects.push(insect);
		}
	}
}
// Generate initial owls
function generateOwls() {
	for (var i = 0; i < platforms.length - 1; i++) {
		var platform1 = platforms[i];
		var platform2 = platforms[i + 1];
		// Create 1 owl high above the platforms (every 2-3 platform pairs)
		if (i % 3 === 0) {
			var x = platform1.x + (platform2.x - platform1.x) * 0.5;
			var y = Math.min(platform1.y, platform2.y) - 300 - Math.random() * 200;
			var owl = game.addChild(new Owl(x, y));
			owls.push(owl);
		}
	}
}
generatePlatforms();
generateInsects();
generateOwls();
// Create jump meter
jumpMeter = game.addChild(new JumpMeter());
jumpMeter.x = 200;
jumpMeter.y = 2200;
// Input handling
game.down = function (x, y, obj) {
	if (frog.onGround && !isCharging) {
		isCharging = true;
		jumpMeter.startCharging();
	}
};
game.up = function (x, y, obj) {
	if (isCharging && frog.onGround) {
		isCharging = false;
		var power = jumpMeter.stopCharging();
		frog.startJump(power);
	}
};
// Camera following
function updateCamera() {
	var targetX = -frog.x + 1024;
	var targetY = -frog.y + 1800;
	// Smooth camera movement
	game.x += (targetX - game.x) * 0.1;
	game.y += (targetY - game.y) * 0.1;
	// Generate more platforms if needed
	var rightmostPlatform = platforms[platforms.length - 1];
	if (frog.x > rightmostPlatform.x - 2000) {
		var startIndex = platforms.length - 1;
		for (var i = 0; i < 5; i++) {
			var lastX = rightmostPlatform.x;
			var x = lastX + 600 + Math.random() * 400;
			var y = 2230 + (Math.random() - 0.5) * 400;
			var platform = game.addChild(new Platform(x, y));
			platforms.push(platform);
			rightmostPlatform = platform;
		}
		// Generate insects for the new platforms
		for (var k = startIndex; k < platforms.length - 1; k++) {
			var platform1 = platforms[k];
			var platform2 = platforms[k + 1];
			var numInsects = 1 + Math.floor(Math.random() * 2);
			for (var m = 0; m < numInsects; m++) {
				var insectX = platform1.x + (platform2.x - platform1.x) * (0.3 + Math.random() * 0.4);
				var insectY = Math.min(platform1.y, platform2.y) - 100 - Math.random() * 200;
				var newInsect = game.addChild(new Insect(insectX, insectY));
				insects.push(newInsect);
			}
		}
		// Generate owls for the new platforms
		for (var n = startIndex; n < platforms.length - 1; n++) {
			if (n % 3 === 0) {
				var owlPlatform1 = platforms[n];
				var owlPlatform2 = platforms[n + 1];
				var owlX = owlPlatform1.x + (owlPlatform2.x - owlPlatform1.x) * 0.5;
				var owlY = Math.min(owlPlatform1.y, owlPlatform2.y) - 300 - Math.random() * 200;
				var newOwl = game.addChild(new Owl(owlX, owlY));
				owls.push(newOwl);
			}
		}
	}
}
// Start background music
LK.playMusic('1suaradanaudimalamhari');
game.update = function () {
	// Update distance display
	jumpDistance = Math.floor(Math.max(0, frog.x - 400) / 100);
	distanceText.setText('Distance: ' + jumpDistance + 'm');
	bestText.setText('Best: ' + bestDistance + 'm');
	scoreText.setText('Score: ' + LK.getScore());
	updateCamera();
};