/**** 
* Classes
****/ 
var Bird = Container.expand(function () {
	var self = Container.call(this);
	var birdGraphics = self.attachAsset('bird', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.originalX = self.direction === 1 ? 0 : 2048;
	self._move_migrated = function () {};
	self._update_migrated = function () {
		self.x += self.direction * 1.5; // Further reduce speed for smoother movement
		if (self.direction === -1) {
			birdGraphics.scale.x = -1;
		} else {
			birdGraphics.scale.x = 1;
		}
		if (self.x < 0 || self.x > 2048) {
			self.x = self.originalX;
		}
		self.y = Math.max(300, Math.min(2732 - 50 - self.height, self.y + Math.random() * 10 - 5));
	};
});
var Branch = Container.expand(function () {
	var self = Container.call(this);
	var branchGraphics = self.attachAsset('branch', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self._move_migrated = function () {};
	self._update_migrated = function () {};
});
var Hippo = Container.expand(function () {
	var self = Container.call(this);
	var hippoGraphics = self.attachAsset('hippo', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 1,
		scaleY: 1
	});
	var hippoMouthOpen = false;
	self.vx = 0;
	self.vy = 0;
	self.gravity = 0.5;
	self.jumping = false;
	self.jump = function (target, branches) {
		if (target && !self.jumping) {
			self.jumping = true;
			var dx = target.x - self.x;
			var dy = target.y - self.y;
			if (dy > 0) {
				self.jumping = false;
				return;
			}
			var distance = Math.sqrt(dx * dx + dy * dy);
			self.vx = dx / distance * 25; // Increase speed for faster jump
			self.vy = dy / distance * 25; // Increase speed for faster jump
			self.jumpingFrom = branches;
		}
	};
	self._update_migrated = function () {
		self.x = Math.max(0, Math.min(2048 - self.width, self.x + self.vx * 0.9)); // Apply easing effect
		if (self.vx > 0) {
			hippoGraphics.scale.x = -1;
		} else if (self.vx < 0) {
			hippoGraphics.scale.x = 1;
		}
		// Render hippo with mouth open if state is true
		if (hippoMouthOpen) {
			hippoGraphics.scale.y = 1.2; // Example of mouth open effect
		} else {
			hippoGraphics.scale.y = 1;
		}
		self.y += self.vy * 0.9; // Apply easing effect
		self.vy += self.gravity;
		if (self.vy > 0) {
			self.jumpingFrom = [];
			// Check if hippo is not intersecting any branch
			var onBranch = branches.some(function (branch) {
				return self.intersects(branch);
			});
			if (!onBranch) {
				self.vy += self.gravity; // Continue falling
			}
		}
		if (self.y > 2732 - self.height) {
			self.y = 2732 - self.height;
			self.vy = -self.vy * 0.3; // Further reduce velocity for smoother bounce
			self.vx *= 0.3; // Further reduce horizontal velocity
			if (Math.abs(self.vy) < 1) {
				// Stop bouncing if velocity is too low
				self.vy = 0;
				self.vx = 0;
				self.jumping = false;
			}
			// Removed bounce effect and scale animation
		}
	};
});
var Spider = Container.expand(function () {
	var self = Container.call(this);
	var spiderGraphics = self.attachAsset('spider', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.idle = true;
	self.moveDown = false;
	self.moveUp = false;
	self.state = 'idle';
	self.originalY = self.y;
	self._update_migrated = function () {
		switch (self.state) {
			case 'idle':
				self.state = 'moveDown';
				break;
			case 'moveDown':
				self.y += 1.5; // Further reduce speed for smoother movement
				if (self.y >= self.originalY + 3 * self.height) {
					self.state = 'moveUp';
				}
				break;
			case 'moveUp':
				self.y -= 5;
				if (self.y <= self.originalY) {
					self.state = 'idle';
				}
				break;
			default:
				break;
		}
	};
});
var TopBranch = Container.expand(function () {
	var self = Container.call(this);
	var topBranchGraphics = self.attachAsset('topBranch', {
		anchorY: 0.5
	});
	self.x = 0;
	self.y = 0;
	self.width = 2048;
	self._move_migrated = function () {};
	self._update_migrated = function () {};
});
var Vine = Container.expand(function () {
	var self = Container.call(this);
	var vineGraphics = self.attachAsset('vine', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var Watermelon = Container.expand(function () {
	var self = Container.call(this);
	var watermelonGraphics = self.attachAsset('watermelon', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	watermelonGraphics.scale.x = 2;
	watermelonGraphics.scale.y = 2;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
game.setupLevel = function () {
	for (var i = 0; i < branches.length; i++) {
		branches[i].destroy();
	}
	branches = [];
	for (var i = 0; i < 25; i++) {
		// Increase the number of branches
		var newBranch = new Branch();
		newBranch.x = Math.random() * 2048; // Randomize x position
		newBranch.y = Math.random() * 2300; // Randomize y position
		branches.push(newBranch);
		game.addChild(newBranch);
		if (i % 5 === 0) {
			// Reduce the number of watermelons
			var watermelonPrize = new Watermelon();
			watermelonPrize.x = newBranch.x;
			watermelonPrize.y = newBranch.y - 50; // Position watermelon closer to the branch
			game.addChild(watermelonPrize);
			watermelons.push(watermelonPrize);
		}
	}
	for (var i = 0; i < birds.length; i++) {
		birds[i].destroy();
	}
	birds = [];
	for (var i = 0; i < level + 1; i++) {
		// Reduce the number of birds
		// Add two more birds
		// Increase number of birds
		var newBird = new Bird();
		newBird.x = Math.random() * 2048;
		newBird.y = i * (2732 / (2 + level)) + 300;
		birds.push(newBird);
		game.addChild(newBird);
	}
	for (var i = 0; i < watermelons.length; i++) {
		watermelons[i].destroy();
	}
	watermelons = [];
	for (var i = 0; i < 20; i++) {
		// Reduce the number of watermelons for smoother gameplay
		// Increase the number of watermelons
		var newWatermelon = new Watermelon();
		newWatermelon.x = Math.random() * 2048;
		newWatermelon.y = Math.random() * 2732; // Randomize y position across the entire screen
		game.addChild(newWatermelon);
		watermelons.push(newWatermelon);
	}
	for (var i = 0; i < spiders.length; i++) {
		spiders[i].destroy();
	}
	spiders = [];
	for (var i = 0; i < Math.max(1, level - 1); i++) {
		// Reduce the number of spiders
		// Decrease number of spiders by one
		var newSpider = new Spider();
		var eligibleBranches = branches.filter(function (branch) {
			return branch.y < 2732 * 2 / 3;
		});
		var randomBranch = eligibleBranches[Math.floor(Math.random() * eligibleBranches.length)];
		newSpider.x = randomBranch.x;
		newSpider.y = randomBranch.y + randomBranch.height;
		newSpider.originalY = newSpider.y;
		game.addChild(newSpider);
		spiders.push(newSpider);
	}
	var eligibleBranches = branches.filter(function (branch) {
		return branch.y < 2732 * 2 / 3;
	});
	var randomBranch = eligibleBranches[Math.floor(Math.random() * eligibleBranches.length)];
	newSpider.x = randomBranch.x;
	newSpider.y = randomBranch.y + randomBranch.height;
	newSpider.originalY = newSpider.y;
	game.addChild(newSpider);
	spiders.push(newSpider);
	// Add a new spider that moves horizontally
	var newSpiderHorizontal = new Spider();
	newSpiderHorizontal.x = Math.random() * 2048;
	newSpiderHorizontal.y = Math.random() * 2732;
	newSpiderHorizontal.originalX = newSpiderHorizontal.x;
	newSpiderHorizontal._update_migrated = function () {
		switch (this.state) {
			case 'idle':
				this.state = 'moveRight';
				break;
			case 'moveRight':
				this.x += 5;
				if (this.x >= this.originalX + 3 * this.width) {
					this.state = 'moveLeft';
				}
				break;
			case 'moveLeft':
				this.x -= 5;
				if (this.x <= this.originalX) {
					this.state = 'idle';
				}
				break;
			default:
				break;
		}
	};
	game.addChild(newSpiderHorizontal);
	spiders.push(newSpiderHorizontal);
	var newVine = new Vine();
	var vineBranch = eligibleBranches[Math.floor(Math.random() * eligibleBranches.length)];
	newVine.x = vineBranch.x;
	newVine.y = vineBranch.y + 400;
	game.addChild(newVine);
	branches.sort(function (a, b) {
		return a.y - b.y;
	});
};
var branches = [];
var birds = [];
var watermelons = [];
var spiders = [];
var level = 1;
var hippo = game.addChild(new Hippo());
hippo.x = 1024;
hippo.y = 2732 - hippo.height - 100; // Adjusted initial position to prevent getting stuck
// Removed initial upward velocity for the jump
game.setupLevel();
var levelTxt = new Text2('Level: ' + level, {
	size: 75,
	fill: '#ffffff'
});
levelTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(levelTxt);
var watermelonCount = 0;
var watermelonTxt = new Text2('Watermelons: ' + watermelonCount, {
	size: 75,
	fill: '#ffffff'
});
watermelonTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(watermelonTxt);
// Removed duplicate hippo creation
LK.on('tick', function () {
	hippo._update_migrated();
	for (var i = 0; i < branches.length; i++) {
		branches[i]._update_migrated();
		if (branches[i].y > 2732) {
			branches[i].destroy();
			branches.splice(i, 1);
			i--;
		}
	}
	for (var i = 0; i < birds.length; i++) {
		birds[i]._update_migrated();
	}
	for (var i = 0; i < branches.length; i++) {
		if (!hippo.jumpingFrom.includes(branches[i]) && hippo.intersects(branches[i])) {
			hippo.vx = 0;
			hippo.vy = 0;
			hippo.jumping = false;
			// Removed code to prevent hippo from landing on the branch
		}
	}
	if (hippo.y <= 0) {
		hippo.y = 0;
		hippo.vy = 0;
	}
	for (var i = 0; i < birds.length; i++) {
		if (hippo.intersects(birds[i])) {
			LK.showGameOver();
		}
		birds[i]._update_migrated();
	}
	for (var i = 0; i < watermelons.length; i++) {
		if (hippo.intersects(watermelons[i])) {
			watermelons[i].destroy();
			watermelons.splice(i, 1);
			watermelonCount++;
			watermelonTxt.setText('Watermelons: ' + watermelonCount);
			LK.setScore(LK.getScore() + 1);
			// Removed the effect of the hippo getting bigger when grabbing watermelons
			// Toggle mouth open state
			hippoMouthOpen = true;
			LK.setTimeout(function () {
				hippoMouthOpen = false;
			}, 500); // Close mouth after 500ms
		}
	}
	for (var i = 0; i < spiders.length; i++) {
		spiders[i]._update_migrated();
		if (hippo.intersects(spiders[i])) {
			LK.showGameOver();
		}
	}
});
game.on('down', function (x, y, obj) {
	var pos = game.toLocal(obj.global);
	hippo.jump({
		x: pos.x,
		y: pos.y
	}, branches);
}); /**** 
* Classes
****/ 
var Bird = Container.expand(function () {
	var self = Container.call(this);
	var birdGraphics = self.attachAsset('bird', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.originalX = self.direction === 1 ? 0 : 2048;
	self._move_migrated = function () {};
	self._update_migrated = function () {
		self.x += self.direction * 1.5; // Further reduce speed for smoother movement
		if (self.direction === -1) {
			birdGraphics.scale.x = -1;
		} else {
			birdGraphics.scale.x = 1;
		}
		if (self.x < 0 || self.x > 2048) {
			self.x = self.originalX;
		}
		self.y = Math.max(300, Math.min(2732 - 50 - self.height, self.y + Math.random() * 10 - 5));
	};
});
var Branch = Container.expand(function () {
	var self = Container.call(this);
	var branchGraphics = self.attachAsset('branch', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self._move_migrated = function () {};
	self._update_migrated = function () {};
});
var Hippo = Container.expand(function () {
	var self = Container.call(this);
	var hippoGraphics = self.attachAsset('hippo', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 1,
		scaleY: 1
	});
	var hippoMouthOpen = false;
	self.vx = 0;
	self.vy = 0;
	self.gravity = 0.5;
	self.jumping = false;
	self.jump = function (target, branches) {
		if (target && !self.jumping) {
			self.jumping = true;
			var dx = target.x - self.x;
			var dy = target.y - self.y;
			if (dy > 0) {
				self.jumping = false;
				return;
			}
			var distance = Math.sqrt(dx * dx + dy * dy);
			self.vx = dx / distance * 25; // Increase speed for faster jump
			self.vy = dy / distance * 25; // Increase speed for faster jump
			self.jumpingFrom = branches;
		}
	};
	self._update_migrated = function () {
		self.x = Math.max(0, Math.min(2048 - self.width, self.x + self.vx * 0.9)); // Apply easing effect
		if (self.vx > 0) {
			hippoGraphics.scale.x = -1;
		} else if (self.vx < 0) {
			hippoGraphics.scale.x = 1;
		}
		// Render hippo with mouth open if state is true
		if (hippoMouthOpen) {
			hippoGraphics.scale.y = 1.2; // Example of mouth open effect
		} else {
			hippoGraphics.scale.y = 1;
		}
		self.y += self.vy * 0.9; // Apply easing effect
		self.vy += self.gravity;
		if (self.vy > 0) {
			self.jumpingFrom = [];
			// Check if hippo is not intersecting any branch
			var onBranch = branches.some(function (branch) {
				return self.intersects(branch);
			});
			if (!onBranch) {
				self.vy += self.gravity; // Continue falling
			}
		}
		if (self.y > 2732 - self.height) {
			self.y = 2732 - self.height;
			self.vy = -self.vy * 0.3; // Further reduce velocity for smoother bounce
			self.vx *= 0.3; // Further reduce horizontal velocity
			if (Math.abs(self.vy) < 1) {
				// Stop bouncing if velocity is too low
				self.vy = 0;
				self.vx = 0;
				self.jumping = false;
			}
			// Removed bounce effect and scale animation
		}
	};
});
var Spider = Container.expand(function () {
	var self = Container.call(this);
	var spiderGraphics = self.attachAsset('spider', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.idle = true;
	self.moveDown = false;
	self.moveUp = false;
	self.state = 'idle';
	self.originalY = self.y;
	self._update_migrated = function () {
		switch (self.state) {
			case 'idle':
				self.state = 'moveDown';
				break;
			case 'moveDown':
				self.y += 1.5; // Further reduce speed for smoother movement
				if (self.y >= self.originalY + 3 * self.height) {
					self.state = 'moveUp';
				}
				break;
			case 'moveUp':
				self.y -= 5;
				if (self.y <= self.originalY) {
					self.state = 'idle';
				}
				break;
			default:
				break;
		}
	};
});
var TopBranch = Container.expand(function () {
	var self = Container.call(this);
	var topBranchGraphics = self.attachAsset('topBranch', {
		anchorY: 0.5
	});
	self.x = 0;
	self.y = 0;
	self.width = 2048;
	self._move_migrated = function () {};
	self._update_migrated = function () {};
});
var Vine = Container.expand(function () {
	var self = Container.call(this);
	var vineGraphics = self.attachAsset('vine', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var Watermelon = Container.expand(function () {
	var self = Container.call(this);
	var watermelonGraphics = self.attachAsset('watermelon', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	watermelonGraphics.scale.x = 2;
	watermelonGraphics.scale.y = 2;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
game.setupLevel = function () {
	for (var i = 0; i < branches.length; i++) {
		branches[i].destroy();
	}
	branches = [];
	for (var i = 0; i < 25; i++) {
		// Increase the number of branches
		var newBranch = new Branch();
		newBranch.x = Math.random() * 2048; // Randomize x position
		newBranch.y = Math.random() * 2300; // Randomize y position
		branches.push(newBranch);
		game.addChild(newBranch);
		if (i % 5 === 0) {
			// Reduce the number of watermelons
			var watermelonPrize = new Watermelon();
			watermelonPrize.x = newBranch.x;
			watermelonPrize.y = newBranch.y - 50; // Position watermelon closer to the branch
			game.addChild(watermelonPrize);
			watermelons.push(watermelonPrize);
		}
	}
	for (var i = 0; i < birds.length; i++) {
		birds[i].destroy();
	}
	birds = [];
	for (var i = 0; i < level + 1; i++) {
		// Reduce the number of birds
		// Add two more birds
		// Increase number of birds
		var newBird = new Bird();
		newBird.x = Math.random() * 2048;
		newBird.y = i * (2732 / (2 + level)) + 300;
		birds.push(newBird);
		game.addChild(newBird);
	}
	for (var i = 0; i < watermelons.length; i++) {
		watermelons[i].destroy();
	}
	watermelons = [];
	for (var i = 0; i < 20; i++) {
		// Reduce the number of watermelons for smoother gameplay
		// Increase the number of watermelons
		var newWatermelon = new Watermelon();
		newWatermelon.x = Math.random() * 2048;
		newWatermelon.y = Math.random() * 2732; // Randomize y position across the entire screen
		game.addChild(newWatermelon);
		watermelons.push(newWatermelon);
	}
	for (var i = 0; i < spiders.length; i++) {
		spiders[i].destroy();
	}
	spiders = [];
	for (var i = 0; i < Math.max(1, level - 1); i++) {
		// Reduce the number of spiders
		// Decrease number of spiders by one
		var newSpider = new Spider();
		var eligibleBranches = branches.filter(function (branch) {
			return branch.y < 2732 * 2 / 3;
		});
		var randomBranch = eligibleBranches[Math.floor(Math.random() * eligibleBranches.length)];
		newSpider.x = randomBranch.x;
		newSpider.y = randomBranch.y + randomBranch.height;
		newSpider.originalY = newSpider.y;
		game.addChild(newSpider);
		spiders.push(newSpider);
	}
	var eligibleBranches = branches.filter(function (branch) {
		return branch.y < 2732 * 2 / 3;
	});
	var randomBranch = eligibleBranches[Math.floor(Math.random() * eligibleBranches.length)];
	newSpider.x = randomBranch.x;
	newSpider.y = randomBranch.y + randomBranch.height;
	newSpider.originalY = newSpider.y;
	game.addChild(newSpider);
	spiders.push(newSpider);
	// Add a new spider that moves horizontally
	var newSpiderHorizontal = new Spider();
	newSpiderHorizontal.x = Math.random() * 2048;
	newSpiderHorizontal.y = Math.random() * 2732;
	newSpiderHorizontal.originalX = newSpiderHorizontal.x;
	newSpiderHorizontal._update_migrated = function () {
		switch (this.state) {
			case 'idle':
				this.state = 'moveRight';
				break;
			case 'moveRight':
				this.x += 5;
				if (this.x >= this.originalX + 3 * this.width) {
					this.state = 'moveLeft';
				}
				break;
			case 'moveLeft':
				this.x -= 5;
				if (this.x <= this.originalX) {
					this.state = 'idle';
				}
				break;
			default:
				break;
		}
	};
	game.addChild(newSpiderHorizontal);
	spiders.push(newSpiderHorizontal);
	var newVine = new Vine();
	var vineBranch = eligibleBranches[Math.floor(Math.random() * eligibleBranches.length)];
	newVine.x = vineBranch.x;
	newVine.y = vineBranch.y + 400;
	game.addChild(newVine);
	branches.sort(function (a, b) {
		return a.y - b.y;
	});
};
var branches = [];
var birds = [];
var watermelons = [];
var spiders = [];
var level = 1;
var hippo = game.addChild(new Hippo());
hippo.x = 1024;
hippo.y = 2732 - hippo.height - 100; // Adjusted initial position to prevent getting stuck
// Removed initial upward velocity for the jump
game.setupLevel();
var levelTxt = new Text2('Level: ' + level, {
	size: 75,
	fill: '#ffffff'
});
levelTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(levelTxt);
var watermelonCount = 0;
var watermelonTxt = new Text2('Watermelons: ' + watermelonCount, {
	size: 75,
	fill: '#ffffff'
});
watermelonTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(watermelonTxt);
// Removed duplicate hippo creation
LK.on('tick', function () {
	hippo._update_migrated();
	for (var i = 0; i < branches.length; i++) {
		branches[i]._update_migrated();
		if (branches[i].y > 2732) {
			branches[i].destroy();
			branches.splice(i, 1);
			i--;
		}
	}
	for (var i = 0; i < birds.length; i++) {
		birds[i]._update_migrated();
	}
	for (var i = 0; i < branches.length; i++) {
		if (!hippo.jumpingFrom.includes(branches[i]) && hippo.intersects(branches[i])) {
			hippo.vx = 0;
			hippo.vy = 0;
			hippo.jumping = false;
			// Removed code to prevent hippo from landing on the branch
		}
	}
	if (hippo.y <= 0) {
		hippo.y = 0;
		hippo.vy = 0;
	}
	for (var i = 0; i < birds.length; i++) {
		if (hippo.intersects(birds[i])) {
			LK.showGameOver();
		}
		birds[i]._update_migrated();
	}
	for (var i = 0; i < watermelons.length; i++) {
		if (hippo.intersects(watermelons[i])) {
			watermelons[i].destroy();
			watermelons.splice(i, 1);
			watermelonCount++;
			watermelonTxt.setText('Watermelons: ' + watermelonCount);
			LK.setScore(LK.getScore() + 1);
			// Removed the effect of the hippo getting bigger when grabbing watermelons
			// Toggle mouth open state
			hippoMouthOpen = true;
			LK.setTimeout(function () {
				hippoMouthOpen = false;
			}, 500); // Close mouth after 500ms
		}
	}
	for (var i = 0; i < spiders.length; i++) {
		spiders[i]._update_migrated();
		if (hippo.intersects(spiders[i])) {
			LK.showGameOver();
		}
	}
});
game.on('down', function (x, y, obj) {
	var pos = game.toLocal(obj.global);
	hippo.jump({
		x: pos.x,
		y: pos.y
	}, branches);
});
 Cartoony looking spider, with two big round eyes Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 cut watermelon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 bush. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 tree. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 funny bird. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.