/**** 
* Classes
****/ 
// Boat class
var Boat = Container.expand(function () {
	var self = Container.call(this);
	var boatGraphics = self.attachAsset('boat', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	boatGraphics.alpha = 0.8; // Set opacity to 80%
	self.speed = -0.75; // Slow the boat by half its speed
	self.update = function () {
		self.x += self.speed;
		if (self.x < -boatGraphics.width) {
			self.destroy(); // Destroy the boat when it goes off screen
		}
	};
});
// City class
var City = Container.expand(function () {
	var self = Container.call(this);
	var cityGraphics = self.attachAsset('cityTile', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 5,
		scaleY: 5
	});
	cityGraphics.alpha = 0.2; // Set opacity to 20%
	self.speed = -0.1; // Move from right to left, half the ocean speed
	self.update = function () {
		self.x += self.speed;
		if (self.x < -cityGraphics.width) {
			self.x = 2048; // Reset position to the right
		}
	};
});
// Cloud class
var Cloud = Container.expand(function () {
	var self = Container.call(this);
	var cloudGraphics = self.attachAsset('cloud', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 5,
		scaleY: 5
	});
	cloudGraphics.alpha = 0.4; // Set opacity to 30%
	self.speed = -1; // Move from right to left
	self.update = function () {
		self.x += self.speed;
		if (self.x < -cloudGraphics.width) {
			self.x = 2048 + cloudGraphics.width; // Reset position to the right
		}
	};
});
// Fish class
var Fish = Container.expand(function () {
	var self = Container.call(this);
	var fishGraphics = self.attachAsset('pelican', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 1.5,
		scaleY: 1.5
	});
	fishGraphics.alpha = 0.8; // Set alpha to 80% opaque
	self.speed = 2;
	self.direction = 1; // 1 for right, -1 for left
	self.update = function () {
		self.x += self.speed * self.direction;
		if (self.x > 2048 || self.x < 0) {
			self.direction *= -1; // Change direction
			fishGraphics.scale.x *= -1; // Flip the direction of the image
		}
	};
});
// The assets will be automatically created and loaded by the LK engine
// Jet class
var Jet = Container.expand(function () {
	var self = Container.call(this);
	var jetGraphics = self.attachAsset('jet', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 1.25,
		scaleY: 1.25
	});
	self.speed = 15;
	self.update = function () {
		self.x -= self.speed;
		if (self.x < -100) {
			self.destroy();
		}
	};
});
// Obstacle class
var Obstacle = Container.expand(function () {
	var self = Container.call(this);
	var obstacleGraphics = self.attachAsset('obstacle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -5;
	self.update = function () {
		self.x += self.speed;
		self.children.forEach(function (child) {
			if (child instanceof Text2) {
				child.x = self.x;
			}
		});
		if (self.x < -100) {
			self.destroy();
		}
	};
	self.createPipe = function (gapY, gapHeight) {
		var topPipe = LK.getAsset('obstacle', {
			anchorX: 0.5,
			anchorY: 1.0,
			height: gapY
		});
		var bottomPipe = LK.getAsset('obstacle', {
			anchorX: 0.5,
			anchorY: 0.0,
			y: gapY + gapHeight,
			height: 2732 - (gapY + gapHeight)
		});
		self.addChild(topPipe);
		self.addChild(bottomPipe);
	};
});
// Pelican class
var Pelican = Container.expand(function () {
	var self = Container.call(this);
	var pelicanGraphics = self.attachAsset('pelicanSVG', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 2,
		scaleY: 2
	});
	self.speed = 0;
	self.update = function () {
		self.speed += 0.5; // Gravity effect
		self.y += self.speed;
		if (self.y < 0) {
			self.y = 0;
		}
		if (self.y > 2732) {
			LK.effects.flashScreen(0xff0000, 1000);
			LK.stopMusic();
			LK.stopMusic();
			LK.showGameOver();
		}
		// Rotate pelican clockwise as it falls
		if (self.speed > 0) {
			pelicanGraphics.rotation += 0.025; // Rotate clockwise at half speed
			if (pelicanGraphics.rotation > Math.PI / 2) {
				pelicanGraphics.rotation = Math.PI / 2; // Limit rotation to face straight down
			}
			// Apply the same rotation logic to the flap image if it exists
			if (self.flapImage) {
				self.flapImage.rotation = pelicanGraphics.rotation;
			}
		}
		// Check if pelican is in the ocean layer
		if (self.y > 2732 * 0.8) {
			pelicanGraphics.alpha = 0.8; // Set to 80% opaque
			if (self.y < 2732 * 0.8 + 10) {
				// Check if pelican is at the top part of the ocean layer
				createSplashEffect(self.x, self.y);
			}
		} else {
			pelicanGraphics.alpha = 1; // Set to fully opaque
		}
	};
	self.dive = function () {
		self.speed = 10; // Increase speed for diving
	};
	self.fly = function () {
		self.speed = -15; // Increase upward speed for flying
		pelicanGraphics.rotation = 0; // Reset rotation
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
// Add instructions text at the start of the game
var instructionsText = new Text2('Tap to fly, avoid obstacles, and catch fish!', {
	size: 100,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 6
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 2048 / 2;
instructionsText.y = 2732 / 2 - 500;
game.addChild(instructionsText);
// Remove the instructions text after 5 seconds
LK.setTimeout(function () {
	instructionsText.destroy();
}, 5000);
// Initialize city layers to create a continuous loop similar to the ocean
var city1 = game.addChild(new City());
city1.x = 0;
city1.y = 2732 * 0.8 - city1.height / 2 + 155; // Consolidated vertical position adjustment
var city2 = game.addChild(new City());
city2.y = 2732 * 0.8 - city2.height / 2 + 155; // Consolidated vertical position adjustment
city2.x = 2048; // Offset the second city to create a continuous loop
// Initialize cloud layers with random heights
var cloud1 = game.addChild(new Cloud());
cloud1.x = 2048 / 2;
cloud1.y = Math.random() * 2732 * 0.5; // Random height within the top half
var cloud2 = game.addChild(new Cloud());
cloud2.x = 2048 / 2 + 1024; // Offset the second cloud
cloud2.y = Math.random() * 2732 * 0.5; // Random height within the top half
function createSplashEffect(x, y) {
	var splash = LK.getAsset('splash', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 3,
		scaleY: 3
	});
	splash.x = x;
	splash.y = y;
	splash.alpha = 1;
	splash.update = function () {
		this.alpha -= 0.05; // Fade out the splash
		if (this.alpha <= 0) {
			this.destroy();
		}
	};
	LK.getSound('splash').play(); // Play splash sound
	game.addChild(splash);
}
game.pipesPassed = 0;
game.jetsAppear = false;
// Forest green color
// No start screen, game begins immediately
// Forest green color for pipes
// Forest green color for pipes
// Add a light blue layer at the bottom 20% of the screen
var bottomLayer1 = LK.getAsset('ocean', {
	width: 2048,
	height: 2732 * 0.2,
	color: 0xADD8E6,
	anchorX: 0.5,
	anchorY: 0.0
});
bottomLayer1.x = 2048 / 2;
bottomLayer1.y = 2732 * 0.8;
game.addChild(city1);
game.addChild(city2);
game.addChild(bottomLayer1);
var bottomLayer2 = LK.getAsset('ocean', {
	width: 2048,
	height: 2732 * 0.2,
	color: 0xADD8E6,
	anchorX: 0.5,
	anchorY: 0.0
});
bottomLayer2.x = 2048 / 2 + 2048;
bottomLayer2.y = 2732 * 0.8;
game.addChild(bottomLayer2);
var scoreTxt = new Text2('0', {
	size: 150,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 8
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var pelican = game.addChild(new Pelican());
var lastPelicanPosition = {
	x: pelican.x,
	y: pelican.y
};
var fish = game.addChild(new Fish());
fish.x = 1024; // Start in the middle of the screen
fish.y = 2732 * 0.9; // Position in the bottom layer
pelican.speed = 0; // Initial speed
pelican.x = 500;
pelican.y = 1366;
var obstacles = [];
var oceanSwayDirection = 1;
var oceanSwaySpeed = 0.5;
var noMovementText = new Text2('Avoid the posts🚪\nCatch the fish🐟\nDodge the crows🦅', {
	size: 150,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 8
});
noMovementText.anchor.set(0.5, 0.5);
noMovementText.x = 2048 / 2;
noMovementText.y = 2732 / 2;
noMovementText.visible = false;
game.addChild(noMovementText);
var lastPelicanPosition = {
	x: pelican.x,
	y: pelican.y
};
game.update = function () {
	// Check for movement
	var allObstaclesMotionless = obstacles.every(function (obstacle) {
		return obstacle.speed === 0;
	});
	if (pelican.x === lastPelicanPosition.x && pelican.y === lastPelicanPosition.y && allObstaclesMotionless) {
		noMovementText.visible = true;
	} else {
		noMovementText.visible = false;
	}
	lastPelicanPosition.x = pelican.x;
	lastPelicanPosition.y = pelican.y;
	// Add a gentle sway to the ocean layer
	bottomLayer1.x -= oceanSwaySpeed * 0.2;
	bottomLayer2.x -= oceanSwaySpeed * 0.2;
	if (bottomLayer1.x < -2048 / 2) {
		bottomLayer1.x = bottomLayer2.x + 2048;
	}
	if (bottomLayer2.x < -2048 / 2) {
		bottomLayer2.x = bottomLayer1.x + 2048;
	}
	bottomLayer1.y += oceanSwaySpeed * oceanSwayDirection * 0.5;
	bottomLayer2.y += oceanSwaySpeed * oceanSwayDirection * 0.5;
	if (bottomLayer1.y > 2732 * 0.8 + 0.5 || bottomLayer1.y < 2732 * 0.8 - 0.5) {
		oceanSwayDirection *= -1;
	}
	if (LK.ticks % 400 == 0 && !game.jetsAppear) {
		var newObstacle = new Obstacle();
		newObstacle.x = 2048;
		var gapY = Math.random() * (2000 - 600); // Random gap position
		var pelicanHeight = LK.getAsset('pelican', {}).height;
		var maxGapHeight = pelicanHeight * 10;
		var initialGapHeight = 2000 * 0.5; // Increase the initial gap height to create a very large gap
		var minGapHeight = initialGapHeight / 2;
		var gapHeight = Math.max(minGapHeight, Math.min(initialGapHeight, maxGapHeight) - LK.getScore() * 0.1); // Decrease gapHeight over time but not less than half its initial size
		newObstacle.createPipe(gapY, gapHeight);
		obstacles.push(newObstacle);
		game.addChild(newObstacle);
		game.pipesPassed++;
		if (game.pipesPassed % 8 == 0 && !game.jetsAppear) {
			game.jetsAppear = true;
			game.jetsTimer = 0;
			LK.getSound('alert').play();
		}
	}
	for (var i = obstacles.length - 1; i >= 0; i--) {
		if (obstacles[i].x < -50) {
			obstacles[i].destroy();
			obstacles.splice(i, 1);
			LK.setScore(LK.getScore() + 1); // Add 1 point to the score
			scoreTxt.setText(LK.getScore()); // Update the score text
		}
		if (obstacles[i] instanceof Obstacle && pelican.intersects(obstacles[i])) {
			LK.effects.flashScreen(0xff0000, 1000);
			LK.stopMusic();
			LK.getSound('arcadefail').play();
			LK.showGameOver();
		}
		fish.update();
		cloud1.update();
		cloud2.update();
		city1.update();
		city2.update();
		if (pelican.intersects(fish)) {
			fish.destroy();
			fish = game.addChild(new Fish());
			fish.x = 1024; // Reset fish position
			fish.y = 2732 * 0.9;
			LK.setScore(LK.getScore() + 10); // Add 10 points to the score
			scoreTxt.setText(LK.getScore()); // Update the score text
			LK.getSound('specialscore1').play(); // Play the sound Special Score 1
			// Create and display a new unique graphic when the fish is eaten
			var yumGraphic = LK.getAsset('yumGraphic', {
				anchorX: 0.5,
				anchorY: 0.5,
				scaleX: 2,
				scaleY: 2
			});
			yumGraphic.x = pelican.x;
			yumGraphic.y = pelican.y;
			yumGraphic.alpha = 1;
			yumGraphic.update = function () {
				this.y -= 2; // Move the graphic upwards
				this.alpha -= 0.02; // Fade out the graphic
				if (this.alpha <= 0) {
					this.destroy();
				}
			};
			game.addChild(yumGraphic);
			// Create and display the "+10" text
			var plusTenText = new Text2('+10', {
				size: 150,
				fill: "#000000",
				stroke: "#ffffff",
				strokeThickness: 8
			});
			plusTenText.anchor.set(0.5, 0);
			plusTenText.x = pelican.x;
			plusTenText.y = pelican.y - 300; // Position it higher above the "YUM" graphic
			plusTenText.alpha = 1;
			plusTenText.update = function () {
				this.y -= 2; // Move the text upwards
				this.alpha -= 0.02; // Fade out the text
				if (this.alpha <= 0) {
					this.destroy();
				}
			};
			game.addChild(plusTenText);
		}
		// Add a boat every 30 seconds
		if (LK.ticks % 1800 == 0) {
			// 1800 ticks = 30 seconds at 60 FPS
			var newBoat = new Boat();
			newBoat.x = 2048 + newBoat.width; // Start from the right side of the screen
			newBoat.y = 2732 * 0.8 - 30; // Move the boat up by another 10 pixels
			game.addChild(newBoat);
		}
		// Add the jet to the game
		if (game.jetsAppear) {
			game.jetsTimer++;
			if (game.jetsTimer >= 300) {
				// 5 seconds have passed
				game.jetsAppear = false;
			} else if (LK.ticks % 60 == 0) {
				// Every second
				if (game.jetsTimer == 0) {
					// When the first jet appears
					// Play the alert sound
					LK.getSound('alert').play();
					var crowsText = new Text2('CROWS!', {
						size: 200,
						fill: "#ffffff"
					});
					crowsText.anchor.set(0.5, 0.5);
					crowsText.x = 2048 / 2;
					crowsText.y = 2732 / 2;
					game.addChild(crowsText);
					// Remove the "CROWS!" text after 2 seconds
					LK.setTimeout(function () {
						crowsText.destroy();
					}, 2000);
				}
				for (var i = 0; i < 3; i++) {
					var newJet = new Jet();
					newJet.x = 2048 + i * 500; // Start from the right side of the screen and spread out the jets
					newJet.y = Math.random() * 2732; // Random y position
					game.addChild(newJet);
				}
			}
		}
		// Check for collision with the jet
		for (var i = game.children.length - 1; i >= 0; i--) {
			if (game.children[i] instanceof Jet && pelican.intersects(game.children[i])) {
				LK.effects.flashScreen(0xff0000, 1000);
				LK.showGameOver();
			}
		}
		// Increment score for every two seconds the pelican stays alive
		if (LK.ticks % 120 == 0) {
			LK.setScore(LK.getScore() + 1);
			scoreTxt.setText(LK.getScore());
		}
	}
};
game.down = function (x, y, obj) {
	pelican.fly();
	LK.getSound('flap').play();
	// Create and display the "FLAP" image
	var flapImage = LK.getAsset('flapImage', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 2,
		scaleY: 2
	});
	flapImage.x = pelican.x;
	flapImage.y = pelican.y;
	flapImage.alpha = 1; // Ensure the flap image is fully opaque
	flapImage.update = function () {
		this.alpha -= 0.1; // Fade out the image more quickly to last about a quarter second
		this.rotation = pelican.rotation; // Ensure the flap image rotates with the pelican
		if (this.alpha <= 0) {
			this.destroy();
			pelican.visible = true; // Make the pelican visible again
		}
	};
	pelican.flapImage = flapImage; // Store reference to flap image for rotation
	game.addChild(flapImage);
	pelican.visible = false; // Hide the pelican when the flap image is on screen
};
game.up = function (x, y, obj) {
	// No action needed on mouse up
};
// Start the music when the game begins
LK.playMusic('soundtrack', {
	volume: 0.3
}); /**** 
* Classes
****/ 
// Boat class
var Boat = Container.expand(function () {
	var self = Container.call(this);
	var boatGraphics = self.attachAsset('boat', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	boatGraphics.alpha = 0.8; // Set opacity to 80%
	self.speed = -0.75; // Slow the boat by half its speed
	self.update = function () {
		self.x += self.speed;
		if (self.x < -boatGraphics.width) {
			self.destroy(); // Destroy the boat when it goes off screen
		}
	};
});
// City class
var City = Container.expand(function () {
	var self = Container.call(this);
	var cityGraphics = self.attachAsset('cityTile', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 5,
		scaleY: 5
	});
	cityGraphics.alpha = 0.2; // Set opacity to 20%
	self.speed = -0.1; // Move from right to left, half the ocean speed
	self.update = function () {
		self.x += self.speed;
		if (self.x < -cityGraphics.width) {
			self.x = 2048; // Reset position to the right
		}
	};
});
// Cloud class
var Cloud = Container.expand(function () {
	var self = Container.call(this);
	var cloudGraphics = self.attachAsset('cloud', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 5,
		scaleY: 5
	});
	cloudGraphics.alpha = 0.4; // Set opacity to 30%
	self.speed = -1; // Move from right to left
	self.update = function () {
		self.x += self.speed;
		if (self.x < -cloudGraphics.width) {
			self.x = 2048 + cloudGraphics.width; // Reset position to the right
		}
	};
});
// Fish class
var Fish = Container.expand(function () {
	var self = Container.call(this);
	var fishGraphics = self.attachAsset('pelican', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 1.5,
		scaleY: 1.5
	});
	fishGraphics.alpha = 0.8; // Set alpha to 80% opaque
	self.speed = 2;
	self.direction = 1; // 1 for right, -1 for left
	self.update = function () {
		self.x += self.speed * self.direction;
		if (self.x > 2048 || self.x < 0) {
			self.direction *= -1; // Change direction
			fishGraphics.scale.x *= -1; // Flip the direction of the image
		}
	};
});
// The assets will be automatically created and loaded by the LK engine
// Jet class
var Jet = Container.expand(function () {
	var self = Container.call(this);
	var jetGraphics = self.attachAsset('jet', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 1.25,
		scaleY: 1.25
	});
	self.speed = 15;
	self.update = function () {
		self.x -= self.speed;
		if (self.x < -100) {
			self.destroy();
		}
	};
});
// Obstacle class
var Obstacle = Container.expand(function () {
	var self = Container.call(this);
	var obstacleGraphics = self.attachAsset('obstacle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -5;
	self.update = function () {
		self.x += self.speed;
		self.children.forEach(function (child) {
			if (child instanceof Text2) {
				child.x = self.x;
			}
		});
		if (self.x < -100) {
			self.destroy();
		}
	};
	self.createPipe = function (gapY, gapHeight) {
		var topPipe = LK.getAsset('obstacle', {
			anchorX: 0.5,
			anchorY: 1.0,
			height: gapY
		});
		var bottomPipe = LK.getAsset('obstacle', {
			anchorX: 0.5,
			anchorY: 0.0,
			y: gapY + gapHeight,
			height: 2732 - (gapY + gapHeight)
		});
		self.addChild(topPipe);
		self.addChild(bottomPipe);
	};
});
// Pelican class
var Pelican = Container.expand(function () {
	var self = Container.call(this);
	var pelicanGraphics = self.attachAsset('pelicanSVG', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 2,
		scaleY: 2
	});
	self.speed = 0;
	self.update = function () {
		self.speed += 0.5; // Gravity effect
		self.y += self.speed;
		if (self.y < 0) {
			self.y = 0;
		}
		if (self.y > 2732) {
			LK.effects.flashScreen(0xff0000, 1000);
			LK.stopMusic();
			LK.stopMusic();
			LK.showGameOver();
		}
		// Rotate pelican clockwise as it falls
		if (self.speed > 0) {
			pelicanGraphics.rotation += 0.025; // Rotate clockwise at half speed
			if (pelicanGraphics.rotation > Math.PI / 2) {
				pelicanGraphics.rotation = Math.PI / 2; // Limit rotation to face straight down
			}
			// Apply the same rotation logic to the flap image if it exists
			if (self.flapImage) {
				self.flapImage.rotation = pelicanGraphics.rotation;
			}
		}
		// Check if pelican is in the ocean layer
		if (self.y > 2732 * 0.8) {
			pelicanGraphics.alpha = 0.8; // Set to 80% opaque
			if (self.y < 2732 * 0.8 + 10) {
				// Check if pelican is at the top part of the ocean layer
				createSplashEffect(self.x, self.y);
			}
		} else {
			pelicanGraphics.alpha = 1; // Set to fully opaque
		}
	};
	self.dive = function () {
		self.speed = 10; // Increase speed for diving
	};
	self.fly = function () {
		self.speed = -15; // Increase upward speed for flying
		pelicanGraphics.rotation = 0; // Reset rotation
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
// Add instructions text at the start of the game
var instructionsText = new Text2('Tap to fly, avoid obstacles, and catch fish!', {
	size: 100,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 6
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 2048 / 2;
instructionsText.y = 2732 / 2 - 500;
game.addChild(instructionsText);
// Remove the instructions text after 5 seconds
LK.setTimeout(function () {
	instructionsText.destroy();
}, 5000);
// Initialize city layers to create a continuous loop similar to the ocean
var city1 = game.addChild(new City());
city1.x = 0;
city1.y = 2732 * 0.8 - city1.height / 2 + 155; // Consolidated vertical position adjustment
var city2 = game.addChild(new City());
city2.y = 2732 * 0.8 - city2.height / 2 + 155; // Consolidated vertical position adjustment
city2.x = 2048; // Offset the second city to create a continuous loop
// Initialize cloud layers with random heights
var cloud1 = game.addChild(new Cloud());
cloud1.x = 2048 / 2;
cloud1.y = Math.random() * 2732 * 0.5; // Random height within the top half
var cloud2 = game.addChild(new Cloud());
cloud2.x = 2048 / 2 + 1024; // Offset the second cloud
cloud2.y = Math.random() * 2732 * 0.5; // Random height within the top half
function createSplashEffect(x, y) {
	var splash = LK.getAsset('splash', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 3,
		scaleY: 3
	});
	splash.x = x;
	splash.y = y;
	splash.alpha = 1;
	splash.update = function () {
		this.alpha -= 0.05; // Fade out the splash
		if (this.alpha <= 0) {
			this.destroy();
		}
	};
	LK.getSound('splash').play(); // Play splash sound
	game.addChild(splash);
}
game.pipesPassed = 0;
game.jetsAppear = false;
// Forest green color
// No start screen, game begins immediately
// Forest green color for pipes
// Forest green color for pipes
// Add a light blue layer at the bottom 20% of the screen
var bottomLayer1 = LK.getAsset('ocean', {
	width: 2048,
	height: 2732 * 0.2,
	color: 0xADD8E6,
	anchorX: 0.5,
	anchorY: 0.0
});
bottomLayer1.x = 2048 / 2;
bottomLayer1.y = 2732 * 0.8;
game.addChild(city1);
game.addChild(city2);
game.addChild(bottomLayer1);
var bottomLayer2 = LK.getAsset('ocean', {
	width: 2048,
	height: 2732 * 0.2,
	color: 0xADD8E6,
	anchorX: 0.5,
	anchorY: 0.0
});
bottomLayer2.x = 2048 / 2 + 2048;
bottomLayer2.y = 2732 * 0.8;
game.addChild(bottomLayer2);
var scoreTxt = new Text2('0', {
	size: 150,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 8
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var pelican = game.addChild(new Pelican());
var lastPelicanPosition = {
	x: pelican.x,
	y: pelican.y
};
var fish = game.addChild(new Fish());
fish.x = 1024; // Start in the middle of the screen
fish.y = 2732 * 0.9; // Position in the bottom layer
pelican.speed = 0; // Initial speed
pelican.x = 500;
pelican.y = 1366;
var obstacles = [];
var oceanSwayDirection = 1;
var oceanSwaySpeed = 0.5;
var noMovementText = new Text2('Avoid the posts🚪\nCatch the fish🐟\nDodge the crows🦅', {
	size: 150,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 8
});
noMovementText.anchor.set(0.5, 0.5);
noMovementText.x = 2048 / 2;
noMovementText.y = 2732 / 2;
noMovementText.visible = false;
game.addChild(noMovementText);
var lastPelicanPosition = {
	x: pelican.x,
	y: pelican.y
};
game.update = function () {
	// Check for movement
	var allObstaclesMotionless = obstacles.every(function (obstacle) {
		return obstacle.speed === 0;
	});
	if (pelican.x === lastPelicanPosition.x && pelican.y === lastPelicanPosition.y && allObstaclesMotionless) {
		noMovementText.visible = true;
	} else {
		noMovementText.visible = false;
	}
	lastPelicanPosition.x = pelican.x;
	lastPelicanPosition.y = pelican.y;
	// Add a gentle sway to the ocean layer
	bottomLayer1.x -= oceanSwaySpeed * 0.2;
	bottomLayer2.x -= oceanSwaySpeed * 0.2;
	if (bottomLayer1.x < -2048 / 2) {
		bottomLayer1.x = bottomLayer2.x + 2048;
	}
	if (bottomLayer2.x < -2048 / 2) {
		bottomLayer2.x = bottomLayer1.x + 2048;
	}
	bottomLayer1.y += oceanSwaySpeed * oceanSwayDirection * 0.5;
	bottomLayer2.y += oceanSwaySpeed * oceanSwayDirection * 0.5;
	if (bottomLayer1.y > 2732 * 0.8 + 0.5 || bottomLayer1.y < 2732 * 0.8 - 0.5) {
		oceanSwayDirection *= -1;
	}
	if (LK.ticks % 400 == 0 && !game.jetsAppear) {
		var newObstacle = new Obstacle();
		newObstacle.x = 2048;
		var gapY = Math.random() * (2000 - 600); // Random gap position
		var pelicanHeight = LK.getAsset('pelican', {}).height;
		var maxGapHeight = pelicanHeight * 10;
		var initialGapHeight = 2000 * 0.5; // Increase the initial gap height to create a very large gap
		var minGapHeight = initialGapHeight / 2;
		var gapHeight = Math.max(minGapHeight, Math.min(initialGapHeight, maxGapHeight) - LK.getScore() * 0.1); // Decrease gapHeight over time but not less than half its initial size
		newObstacle.createPipe(gapY, gapHeight);
		obstacles.push(newObstacle);
		game.addChild(newObstacle);
		game.pipesPassed++;
		if (game.pipesPassed % 8 == 0 && !game.jetsAppear) {
			game.jetsAppear = true;
			game.jetsTimer = 0;
			LK.getSound('alert').play();
		}
	}
	for (var i = obstacles.length - 1; i >= 0; i--) {
		if (obstacles[i].x < -50) {
			obstacles[i].destroy();
			obstacles.splice(i, 1);
			LK.setScore(LK.getScore() + 1); // Add 1 point to the score
			scoreTxt.setText(LK.getScore()); // Update the score text
		}
		if (obstacles[i] instanceof Obstacle && pelican.intersects(obstacles[i])) {
			LK.effects.flashScreen(0xff0000, 1000);
			LK.stopMusic();
			LK.getSound('arcadefail').play();
			LK.showGameOver();
		}
		fish.update();
		cloud1.update();
		cloud2.update();
		city1.update();
		city2.update();
		if (pelican.intersects(fish)) {
			fish.destroy();
			fish = game.addChild(new Fish());
			fish.x = 1024; // Reset fish position
			fish.y = 2732 * 0.9;
			LK.setScore(LK.getScore() + 10); // Add 10 points to the score
			scoreTxt.setText(LK.getScore()); // Update the score text
			LK.getSound('specialscore1').play(); // Play the sound Special Score 1
			// Create and display a new unique graphic when the fish is eaten
			var yumGraphic = LK.getAsset('yumGraphic', {
				anchorX: 0.5,
				anchorY: 0.5,
				scaleX: 2,
				scaleY: 2
			});
			yumGraphic.x = pelican.x;
			yumGraphic.y = pelican.y;
			yumGraphic.alpha = 1;
			yumGraphic.update = function () {
				this.y -= 2; // Move the graphic upwards
				this.alpha -= 0.02; // Fade out the graphic
				if (this.alpha <= 0) {
					this.destroy();
				}
			};
			game.addChild(yumGraphic);
			// Create and display the "+10" text
			var plusTenText = new Text2('+10', {
				size: 150,
				fill: "#000000",
				stroke: "#ffffff",
				strokeThickness: 8
			});
			plusTenText.anchor.set(0.5, 0);
			plusTenText.x = pelican.x;
			plusTenText.y = pelican.y - 300; // Position it higher above the "YUM" graphic
			plusTenText.alpha = 1;
			plusTenText.update = function () {
				this.y -= 2; // Move the text upwards
				this.alpha -= 0.02; // Fade out the text
				if (this.alpha <= 0) {
					this.destroy();
				}
			};
			game.addChild(plusTenText);
		}
		// Add a boat every 30 seconds
		if (LK.ticks % 1800 == 0) {
			// 1800 ticks = 30 seconds at 60 FPS
			var newBoat = new Boat();
			newBoat.x = 2048 + newBoat.width; // Start from the right side of the screen
			newBoat.y = 2732 * 0.8 - 30; // Move the boat up by another 10 pixels
			game.addChild(newBoat);
		}
		// Add the jet to the game
		if (game.jetsAppear) {
			game.jetsTimer++;
			if (game.jetsTimer >= 300) {
				// 5 seconds have passed
				game.jetsAppear = false;
			} else if (LK.ticks % 60 == 0) {
				// Every second
				if (game.jetsTimer == 0) {
					// When the first jet appears
					// Play the alert sound
					LK.getSound('alert').play();
					var crowsText = new Text2('CROWS!', {
						size: 200,
						fill: "#ffffff"
					});
					crowsText.anchor.set(0.5, 0.5);
					crowsText.x = 2048 / 2;
					crowsText.y = 2732 / 2;
					game.addChild(crowsText);
					// Remove the "CROWS!" text after 2 seconds
					LK.setTimeout(function () {
						crowsText.destroy();
					}, 2000);
				}
				for (var i = 0; i < 3; i++) {
					var newJet = new Jet();
					newJet.x = 2048 + i * 500; // Start from the right side of the screen and spread out the jets
					newJet.y = Math.random() * 2732; // Random y position
					game.addChild(newJet);
				}
			}
		}
		// Check for collision with the jet
		for (var i = game.children.length - 1; i >= 0; i--) {
			if (game.children[i] instanceof Jet && pelican.intersects(game.children[i])) {
				LK.effects.flashScreen(0xff0000, 1000);
				LK.showGameOver();
			}
		}
		// Increment score for every two seconds the pelican stays alive
		if (LK.ticks % 120 == 0) {
			LK.setScore(LK.getScore() + 1);
			scoreTxt.setText(LK.getScore());
		}
	}
};
game.down = function (x, y, obj) {
	pelican.fly();
	LK.getSound('flap').play();
	// Create and display the "FLAP" image
	var flapImage = LK.getAsset('flapImage', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 2,
		scaleY: 2
	});
	flapImage.x = pelican.x;
	flapImage.y = pelican.y;
	flapImage.alpha = 1; // Ensure the flap image is fully opaque
	flapImage.update = function () {
		this.alpha -= 0.1; // Fade out the image more quickly to last about a quarter second
		this.rotation = pelican.rotation; // Ensure the flap image rotates with the pelican
		if (this.alpha <= 0) {
			this.destroy();
			pelican.visible = true; // Make the pelican visible again
		}
	};
	pelican.flapImage = flapImage; // Store reference to flap image for rotation
	game.addChild(flapImage);
	pelican.visible = false; // Hide the pelican when the flap image is on screen
};
game.up = function (x, y, obj) {
	// No action needed on mouse up
};
// Start the music when the game begins
LK.playMusic('soundtrack', {
	volume: 0.3
});
:quality(85)/https://cdn.frvr.ai/672857fb0ac8f145edb50f72.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/672858290ac8f145edb50f80.png%3F3) 
 8-bit profile of pelican flying straight. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/67285b280ac8f145edb50fc8.png%3F3) 
 8-bit profile of fish for arcade game. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6728634a0ac8f145edb5101b.png%3F3) 
 8-bit profile of pelican flapping it's wings downward. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6728679b0ac8f145edb51039.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/67286a560ac8f145edb51052.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/67286ba10ac8f145edb5106e.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/67286e2d0ac8f145edb5108a.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/6728721c0ac8f145edb510b3.png%3F3) 
 8-bit silhouette of tugboat. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/672873760ac8f145edb510bf.png%3F3) 
 8-bit "YUM" dialog bubble. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.