/**** 
* Plugins
****/ 
var facekit = LK.import("@upit/facekit.v1");
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
//<Write imports for supported plugins here>
// Chicken class to represent the player character
var Chicken = Container.expand(function () {
	var self = Container.call(this);
	var chickenGraphics = self.attachAsset('chicken', {
		anchorX: 0.5,
		anchorY: 1
	});
	// Add a collision element inside the chicken
	var collisionElement = self.attachAsset('collisionElement', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: chickenGraphics.width * 0.4,
		height: chickenGraphics.height * 0.2
	});
	collisionElement.alpha = 0;
	collisionElement.y = -90;
	chickenGraphics.y = 90;
	self.speed = 5;
	self.jumpHeight = 400;
	self.isJumping = true;
	self.jumpVelocity = 0;
	self.update = function () {
		self.y += self.jumpVelocity;
		self.jumpVelocity += 1; // Gravity effect
		if (self.jumpVelocity > 30) {
			self.jumpVelocity = 30;
		}
		var targetPlatform = undefined;
		var isOnPlatform = platforms.some(function (platform) {
			if (collisionElement.intersects(platform)) {
				if (self.y - platform.y < 100) {
					targetPlatform = platform;
					return true;
				}
			}
		});
		if (isOnPlatform && self.jumpVelocity > 0) {
			// Ground level
			self.y = targetPlatform.y + 70;
			if (self.isJumping) {
				for (var a = 0; a < 30; a++) {
					particles.addDirtParticle(chicken.x, chicken.y);
				}
				chickenGraphics.scale.y = .8;
				chickenGraphics.scale.x = 1.2;
				tween(chickenGraphics, {
					scaleY: 1,
					scaleX: 1
				}, {
					duration: 1000,
					easing: tween.elasticOut
				});
			}
			self.isJumping = false;
			self.jumpVelocity = 0; // Reset jump velocity when hitting the ground
			// Apply a bounce effect using tween when the chicken lands
		}
		self.x = 2048 / 2; // Center the chicken horizontally
	};
	function groove() {
		tween(self, {
			scaleX: 1.03,
			scaleY: 1.03
		}, {
			duration: 300,
			onFinish: function onFinish() {
				tween(self, {
					scaleX: 1,
					scaleY: 1
				}, {
					onFinish: groove,
					duration: 300
				});
			}
		});
	}
	groove();
	self.jump = function (volume) {
		if (platforms[0].x > -1500) {
			return;
		}
		var isOnPlatform = platforms.some(function (platform) {
			if (collisionElement.intersects(platform)) {
				return self.y - platform.y < 100;
			}
		});
		if (!self.isJumping && isOnPlatform) {
			self.isJumping = true;
			for (var a = 0; a < 30; a++) {
				particles.addDirtParticle(chicken.x, chicken.y);
			}
			chicken.jumpVelocity = -45 * volume; // Set jump velocity based on volume
			self.update();
		}
	};
});
var Countdown = Container.expand(function () {
	var self = Container.call(this);
	var currentNumber = 16;
	var countdownTextShadow = new Text2("GO!", {
		size: 500,
		fill: 0x000000,
		weight: 800
	});
	var countdownText = new Text2("GO!", {
		size: 500,
		fill: 0xFFFFFF,
		weight: 800
	});
	countdownText.anchor.set(0.5, 0.5);
	countdownTextShadow.anchor.set(0.5, 0.5);
	self.addChild(countdownTextShadow);
	self.addChild(countdownText);
	self.x = 2048 / 2;
	self.y = 400;
	countdownTextShadow.x = 15;
	countdownTextShadow.y = 15;
	function tweenIt() {
		self.scale.set(1, 1);
		tween(self, {
			scaleX: .8,
			scaleY: .8
		}, {
			duration: 400,
			easing: tween.bounceOut
		});
	}
	var countdownInterval = LK.setInterval(function () {
		currentNumber--;
		if (currentNumber > 0) {
			countdownText.setText(currentNumber.toString());
			countdownTextShadow.setText(currentNumber.toString());
		} else {
			self.destroy();
			LK.clearInterval(countdownInterval);
			LK.effects.flashScreen(0xff0000, 3000); // Flash screen red for 1 second (1000ms) to show we are dead.
			LK.showGameOver();
		}
		tweenIt();
	}, 1000);
	tweenIt();
});
// DirtParticle class to represent a fading dirt particle
var DirtParticle = Container.expand(function () {
	var self = Container.call(this);
	var dirtGraphics = self.attachAsset('dirtparticle', {
		anchorX: 0.5,
		anchorY: 1
	});
	var speed = Math.random() * 3;
	var angle = -Math.random() * Math.PI;
	var scale = 1;
	// Update function to handle fading
	self.update = function () {
		scale -= 0.02; // Reduce alpha to fade out
		self.scale.set(scale, scale);
		if (scale <= 0) {
			self.destroy(); // Remove particle when fully transparent
		}
		self.x += Math.cos(angle) * speed;
		self.y += Math.sin(angle) * speed;
	};
});
// LargeBork class to represent the large bork overlay
var LargeBork = Container.expand(function () {
	var self = Container.call(this);
	self.moveMultiplier = 0;
	self.moveSpeed = -5; // Base move speed
	var largeBorkGraphicsChicken = self.attachAsset('chicken_shout', {
		anchorX: 0.5,
		anchorY: 1
	});
	largeBorkGraphicsChicken.y = -50;
	var largeBorkGraphics = self.attachAsset('large_bork', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
	};
	self.bork = function () {
		var speechBubbleLarge = new SpeechBubbleLarge();
		var offset = Math.PI / 4 * Math.random() - Math.PI / 2 - Math.PI / 4;
		speechBubbleLarge.x = -50 + Math.cos(offset) * 350;
		speechBubbleLarge.y = -100 + Math.sin(offset) * 350;
		speechBubbleLarge.rotation = offset + Math.PI * 0.5 + .3;
		self.addChild(speechBubbleLarge);
		largeBorkGraphicsChicken.scale.y = 1.05;
		largeBorkGraphicsChicken.scale.x = 1.05;
		largeBorkGraphicsChicken.rotation = .2;
		tween(largeBorkGraphicsChicken, {
			scaleY: 1,
			scaleX: 1,
			rotation: 0
		}, {
			duration: 1000,
			easing: tween.elasticOut
		});
	};
});
// Particles class to manage dirt particles
var Particles = Container.expand(function () {
	var self = Container.call(this);
	// Method to add a dirt particle at a specific position
	self.moveMultiplier = 0;
	self.moveSpeed = -5; // Base move speed
	self.addDirtParticle = function (x, y) {
		var dirtParticle = new DirtParticle();
		dirtParticle.x = x - self.x + Math.random() * 130 - 40;
		dirtParticle.y = y + 90;
		self.addChild(dirtParticle);
	};
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
	};
});
// Platform class to represent moving platforms
var Platform = Container.expand(function () {
	var self = Container.call(this);
	self.moveSpeed = -5; // Base move speed
	self.moveMultiplier = 1; // Default move multiplier
	var groundGraphics = self.attachAsset('ground', {
		anchorX: 0,
		anchorY: 0
	});
	self.width = groundGraphics.width;
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
		// If the platform moves off screen to the left, reposition it to the right
		/*if (self.x < -self.width) {
			// Reposition the platform to the right with a random gap
			self.x += self.width + 2048 + Math.random() * 1000;
		}*/ 
	};
});
var SpeechBubble = Container.expand(function () {
	var self = Container.call(this);
	var bubbleGraphics = self.attachAsset('small_bork_speach', {
		anchorX: 0.8,
		anchorY: 1
	});
	// Initial position and scale
	self.y -= 50;
	self.alpha = 1;
	// Update function to handle fading and moving up
	self.update = function () {
		self.y -= 1; // Move up
		self.alpha -= 0.01; // Fade out
		if (self.alpha <= 0) {
			self.destroy(); // Remove bubble when fully transparent
		}
	};
	// Apply a tween for smooth fading
	tween(self, {
		alpha: 0
	}, {
		duration: 2000,
		easing: tween.linear,
		onFinish: function onFinish() {
			self.destroy();
		}
	});
});
var SpeechBubbleLarge = Container.expand(function () {
	var self = Container.call(this);
	var bubbleGraphics = self.attachAsset('large_bork_speach', {
		anchorX: 0.2,
		anchorY: 1
	});
	// Initial position and scale
	self.y -= 50;
	self.alpha = 1;
	// Update function to handle fading and moving up
	self.scale.set(0, 0);
	tween(self, {
		scaleX: 1,
		scaleY: 1
	}, {
		duration: 800,
		easing: tween.elasticOut
	});
	// Apply a tween for smooth fading
	LK.setTimeout(function () {
		tween(self, {
			alpha: 0,
			y: self.y - 100
		}, {
			duration: 100,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				self.destroy();
			}
		});
	}, 800);
});
// Spikes class to represent dangerous spikes
var Spikes = Container.expand(function () {
	var self = Container.call(this);
	self.moveMultiplier = 0;
	self.moveSpeed = -5; // Base move speed
	var spikesGraphics = self.attachAsset('spikes', {
		anchorX: 0,
		anchorY: 0
	});
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000 //Init game with black background 
});
/**** 
* Game Code
****/ 
// Create a volume label at the bottom right corner
var volumeLabel = new Text2('Volume: 0', {
	size: 50,
	fill: 0xFFFFFF
});
volumeLabel.anchor.set(1, 1); // Anchor to the bottom right corner
volumeLabel.alpha = .3;
LK.gui.bottomRight.addChild(volumeLabel);
// Initialize platforms 
function addPlatformAt(x, y) {
	var platform = game.addChild(new Platform());
	platform.x = x; //i * 1900 + i * Math.random() * 1000; // Space platforms with gaps
	platform.y = y; //2200; // Ground level
	platforms.push(platform);
	return platform;
}
var xspeed = 0;
var platforms = [];
addPlatformAt(1000, 2200);
addPlatformAt(2450, 2200);
addPlatformAt(3000 + 1500, 2200);
var platform3 = addPlatformAt(5000 + 1500, 1800);
var spikes = game.addChild(new Spikes());
spikes.x = platform3.x;
spikes.y = platform3.y - 900; // position spikes above the platform
addPlatformAt(7000 + 1500, 2200);
var platform1 = platforms[0];
var smallBork = platform1.attachAsset('small_bork', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: platform1.width / 2 - 500,
	y: -550
});
var chickenBork = platform1.attachAsset('chicken_bork', {
	anchorX: 0.5,
	anchorY: 1,
	x: smallBork.x - 50,
	y: -700
});
var platform2 = platforms[1];
var largeBork = game.addChild(new LargeBork());
largeBork.x = platform2.x + platform2.width + 250;
largeBork.y = platform2.y - 500;
var startFlag = platform2.attachAsset('start', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 130,
	y: -140
});
var lastPlatform = addPlatformAt(9000 + 1500, 1600);
var trophy = lastPlatform.attachAsset('trophy', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: lastPlatform.width / 2,
	y: -100
});
var boffset = 0;
function doSmallBork() {
	var speechBubble = new SpeechBubble();
	var offset = Math.PI / 2 * Math.random() - Math.PI / 2 - Math.PI / 4;
	speechBubble.x = smallBork.x - 25 + Math.cos(offset) * 150;
	speechBubble.y = smallBork.y - 150 + Math.sin(offset) * 150;
	speechBubble.rotation = offset + Math.PI * 0.5 - .1;
	platform1.addChild(speechBubble);
	LK.setTimeout(doSmallBork, 200 + Math.random() * 200);
	chickenBork.scale.y = 1.05;
	chickenBork.scale.x = 1.05;
	tween(chickenBork, {
		scaleY: 1,
		scaleX: 1
	}, {
		duration: 800,
		easing: tween.elasticOut
	});
	if (boffset++ % 3 == 0) {
		largeBork.bork();
	}
}
doSmallBork();
// Initialize chicken
//<Write imports for supported plugins here> 
var chicken = game.addChild(new Chicken());
var particles = game.addChild(new Particles());
Platform.prototype.chicken = chicken; // Make chicken accessible in Platform class
chicken.x = 2048 / 2; // Center the chicken horizontally
chicken.y = 2200; // Start the chicken at the ground level
var countdown;
// Update game logic 
game.update = function () {
	// Remove excess platforms if more than 3 exist
	/*while (platforms.length > 3) {
		var excessPlatform = platforms.shift();
		excessPlatform.destroy();
	}*/ 
	// Create and add a dirt particle at the chicken's position
	if (platform1.x < -500 && !countdown) {
		countdown = game.addChild(new Countdown());
	}
	if (!chicken.isJumping) {
		if (facekit.volume > 0.05) {
			xspeed += Math.max(facekit.volume, .5);
			particles.addDirtParticle(chicken.x, chicken.y);
		}
		xspeed *= .4;
	}
	if (facekit.volume > 0.80 && !chicken.isJumping) {
		chicken.jump(facekit.volume);
	}
	// Check if the chicken has fallen off the screen
	if (chicken.y > 3000) {
		// End the game if the chicken  has fallen off the screen
		LK.effects.flashScreen(0xff0000, 3000); // Flash screen red for 1 second (1000ms) to show we are dead.
		LK.showGameOver();
	}
	// Check if the chicken touches the spikes
	if (chicken.intersects(spikes)) {
		// End the game if the chicken touches the spikes
		LK.effects.flashScreen(0xff0000, 3000); // Flash screen red for 1 second (1000ms) to show we are dead.
		LK.showGameOver();
	}
	// Check if the chicken touches the trophy
	if (chicken.intersects(trophy)) {
		// End the game with a win if the chicken touches the trophy
		LK.showYouWin();
	}
	volumeLabel.setText('Volume: ' + facekit.volume.toFixed(2)); // Update volume label text
}; /**** 
* Plugins
****/ 
var facekit = LK.import("@upit/facekit.v1");
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
//<Write imports for supported plugins here>
// Chicken class to represent the player character
var Chicken = Container.expand(function () {
	var self = Container.call(this);
	var chickenGraphics = self.attachAsset('chicken', {
		anchorX: 0.5,
		anchorY: 1
	});
	// Add a collision element inside the chicken
	var collisionElement = self.attachAsset('collisionElement', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: chickenGraphics.width * 0.4,
		height: chickenGraphics.height * 0.2
	});
	collisionElement.alpha = 0;
	collisionElement.y = -90;
	chickenGraphics.y = 90;
	self.speed = 5;
	self.jumpHeight = 400;
	self.isJumping = true;
	self.jumpVelocity = 0;
	self.update = function () {
		self.y += self.jumpVelocity;
		self.jumpVelocity += 1; // Gravity effect
		if (self.jumpVelocity > 30) {
			self.jumpVelocity = 30;
		}
		var targetPlatform = undefined;
		var isOnPlatform = platforms.some(function (platform) {
			if (collisionElement.intersects(platform)) {
				if (self.y - platform.y < 100) {
					targetPlatform = platform;
					return true;
				}
			}
		});
		if (isOnPlatform && self.jumpVelocity > 0) {
			// Ground level
			self.y = targetPlatform.y + 70;
			if (self.isJumping) {
				for (var a = 0; a < 30; a++) {
					particles.addDirtParticle(chicken.x, chicken.y);
				}
				chickenGraphics.scale.y = .8;
				chickenGraphics.scale.x = 1.2;
				tween(chickenGraphics, {
					scaleY: 1,
					scaleX: 1
				}, {
					duration: 1000,
					easing: tween.elasticOut
				});
			}
			self.isJumping = false;
			self.jumpVelocity = 0; // Reset jump velocity when hitting the ground
			// Apply a bounce effect using tween when the chicken lands
		}
		self.x = 2048 / 2; // Center the chicken horizontally
	};
	function groove() {
		tween(self, {
			scaleX: 1.03,
			scaleY: 1.03
		}, {
			duration: 300,
			onFinish: function onFinish() {
				tween(self, {
					scaleX: 1,
					scaleY: 1
				}, {
					onFinish: groove,
					duration: 300
				});
			}
		});
	}
	groove();
	self.jump = function (volume) {
		if (platforms[0].x > -1500) {
			return;
		}
		var isOnPlatform = platforms.some(function (platform) {
			if (collisionElement.intersects(platform)) {
				return self.y - platform.y < 100;
			}
		});
		if (!self.isJumping && isOnPlatform) {
			self.isJumping = true;
			for (var a = 0; a < 30; a++) {
				particles.addDirtParticle(chicken.x, chicken.y);
			}
			chicken.jumpVelocity = -45 * volume; // Set jump velocity based on volume
			self.update();
		}
	};
});
var Countdown = Container.expand(function () {
	var self = Container.call(this);
	var currentNumber = 16;
	var countdownTextShadow = new Text2("GO!", {
		size: 500,
		fill: 0x000000,
		weight: 800
	});
	var countdownText = new Text2("GO!", {
		size: 500,
		fill: 0xFFFFFF,
		weight: 800
	});
	countdownText.anchor.set(0.5, 0.5);
	countdownTextShadow.anchor.set(0.5, 0.5);
	self.addChild(countdownTextShadow);
	self.addChild(countdownText);
	self.x = 2048 / 2;
	self.y = 400;
	countdownTextShadow.x = 15;
	countdownTextShadow.y = 15;
	function tweenIt() {
		self.scale.set(1, 1);
		tween(self, {
			scaleX: .8,
			scaleY: .8
		}, {
			duration: 400,
			easing: tween.bounceOut
		});
	}
	var countdownInterval = LK.setInterval(function () {
		currentNumber--;
		if (currentNumber > 0) {
			countdownText.setText(currentNumber.toString());
			countdownTextShadow.setText(currentNumber.toString());
		} else {
			self.destroy();
			LK.clearInterval(countdownInterval);
			LK.effects.flashScreen(0xff0000, 3000); // Flash screen red for 1 second (1000ms) to show we are dead.
			LK.showGameOver();
		}
		tweenIt();
	}, 1000);
	tweenIt();
});
// DirtParticle class to represent a fading dirt particle
var DirtParticle = Container.expand(function () {
	var self = Container.call(this);
	var dirtGraphics = self.attachAsset('dirtparticle', {
		anchorX: 0.5,
		anchorY: 1
	});
	var speed = Math.random() * 3;
	var angle = -Math.random() * Math.PI;
	var scale = 1;
	// Update function to handle fading
	self.update = function () {
		scale -= 0.02; // Reduce alpha to fade out
		self.scale.set(scale, scale);
		if (scale <= 0) {
			self.destroy(); // Remove particle when fully transparent
		}
		self.x += Math.cos(angle) * speed;
		self.y += Math.sin(angle) * speed;
	};
});
// LargeBork class to represent the large bork overlay
var LargeBork = Container.expand(function () {
	var self = Container.call(this);
	self.moveMultiplier = 0;
	self.moveSpeed = -5; // Base move speed
	var largeBorkGraphicsChicken = self.attachAsset('chicken_shout', {
		anchorX: 0.5,
		anchorY: 1
	});
	largeBorkGraphicsChicken.y = -50;
	var largeBorkGraphics = self.attachAsset('large_bork', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
	};
	self.bork = function () {
		var speechBubbleLarge = new SpeechBubbleLarge();
		var offset = Math.PI / 4 * Math.random() - Math.PI / 2 - Math.PI / 4;
		speechBubbleLarge.x = -50 + Math.cos(offset) * 350;
		speechBubbleLarge.y = -100 + Math.sin(offset) * 350;
		speechBubbleLarge.rotation = offset + Math.PI * 0.5 + .3;
		self.addChild(speechBubbleLarge);
		largeBorkGraphicsChicken.scale.y = 1.05;
		largeBorkGraphicsChicken.scale.x = 1.05;
		largeBorkGraphicsChicken.rotation = .2;
		tween(largeBorkGraphicsChicken, {
			scaleY: 1,
			scaleX: 1,
			rotation: 0
		}, {
			duration: 1000,
			easing: tween.elasticOut
		});
	};
});
// Particles class to manage dirt particles
var Particles = Container.expand(function () {
	var self = Container.call(this);
	// Method to add a dirt particle at a specific position
	self.moveMultiplier = 0;
	self.moveSpeed = -5; // Base move speed
	self.addDirtParticle = function (x, y) {
		var dirtParticle = new DirtParticle();
		dirtParticle.x = x - self.x + Math.random() * 130 - 40;
		dirtParticle.y = y + 90;
		self.addChild(dirtParticle);
	};
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
	};
});
// Platform class to represent moving platforms
var Platform = Container.expand(function () {
	var self = Container.call(this);
	self.moveSpeed = -5; // Base move speed
	self.moveMultiplier = 1; // Default move multiplier
	var groundGraphics = self.attachAsset('ground', {
		anchorX: 0,
		anchorY: 0
	});
	self.width = groundGraphics.width;
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
		// If the platform moves off screen to the left, reposition it to the right
		/*if (self.x < -self.width) {
			// Reposition the platform to the right with a random gap
			self.x += self.width + 2048 + Math.random() * 1000;
		}*/ 
	};
});
var SpeechBubble = Container.expand(function () {
	var self = Container.call(this);
	var bubbleGraphics = self.attachAsset('small_bork_speach', {
		anchorX: 0.8,
		anchorY: 1
	});
	// Initial position and scale
	self.y -= 50;
	self.alpha = 1;
	// Update function to handle fading and moving up
	self.update = function () {
		self.y -= 1; // Move up
		self.alpha -= 0.01; // Fade out
		if (self.alpha <= 0) {
			self.destroy(); // Remove bubble when fully transparent
		}
	};
	// Apply a tween for smooth fading
	tween(self, {
		alpha: 0
	}, {
		duration: 2000,
		easing: tween.linear,
		onFinish: function onFinish() {
			self.destroy();
		}
	});
});
var SpeechBubbleLarge = Container.expand(function () {
	var self = Container.call(this);
	var bubbleGraphics = self.attachAsset('large_bork_speach', {
		anchorX: 0.2,
		anchorY: 1
	});
	// Initial position and scale
	self.y -= 50;
	self.alpha = 1;
	// Update function to handle fading and moving up
	self.scale.set(0, 0);
	tween(self, {
		scaleX: 1,
		scaleY: 1
	}, {
		duration: 800,
		easing: tween.elasticOut
	});
	// Apply a tween for smooth fading
	LK.setTimeout(function () {
		tween(self, {
			alpha: 0,
			y: self.y - 100
		}, {
			duration: 100,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				self.destroy();
			}
		});
	}, 800);
});
// Spikes class to represent dangerous spikes
var Spikes = Container.expand(function () {
	var self = Container.call(this);
	self.moveMultiplier = 0;
	self.moveSpeed = -5; // Base move speed
	var spikesGraphics = self.attachAsset('spikes', {
		anchorX: 0,
		anchorY: 0
	});
	self.update = function () {
		self.moveMultiplier = xspeed * 6;
		self.x += self.moveSpeed * self.moveMultiplier;
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000 //Init game with black background 
});
/**** 
* Game Code
****/ 
// Create a volume label at the bottom right corner
var volumeLabel = new Text2('Volume: 0', {
	size: 50,
	fill: 0xFFFFFF
});
volumeLabel.anchor.set(1, 1); // Anchor to the bottom right corner
volumeLabel.alpha = .3;
LK.gui.bottomRight.addChild(volumeLabel);
// Initialize platforms 
function addPlatformAt(x, y) {
	var platform = game.addChild(new Platform());
	platform.x = x; //i * 1900 + i * Math.random() * 1000; // Space platforms with gaps
	platform.y = y; //2200; // Ground level
	platforms.push(platform);
	return platform;
}
var xspeed = 0;
var platforms = [];
addPlatformAt(1000, 2200);
addPlatformAt(2450, 2200);
addPlatformAt(3000 + 1500, 2200);
var platform3 = addPlatformAt(5000 + 1500, 1800);
var spikes = game.addChild(new Spikes());
spikes.x = platform3.x;
spikes.y = platform3.y - 900; // position spikes above the platform
addPlatformAt(7000 + 1500, 2200);
var platform1 = platforms[0];
var smallBork = platform1.attachAsset('small_bork', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: platform1.width / 2 - 500,
	y: -550
});
var chickenBork = platform1.attachAsset('chicken_bork', {
	anchorX: 0.5,
	anchorY: 1,
	x: smallBork.x - 50,
	y: -700
});
var platform2 = platforms[1];
var largeBork = game.addChild(new LargeBork());
largeBork.x = platform2.x + platform2.width + 250;
largeBork.y = platform2.y - 500;
var startFlag = platform2.attachAsset('start', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 130,
	y: -140
});
var lastPlatform = addPlatformAt(9000 + 1500, 1600);
var trophy = lastPlatform.attachAsset('trophy', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: lastPlatform.width / 2,
	y: -100
});
var boffset = 0;
function doSmallBork() {
	var speechBubble = new SpeechBubble();
	var offset = Math.PI / 2 * Math.random() - Math.PI / 2 - Math.PI / 4;
	speechBubble.x = smallBork.x - 25 + Math.cos(offset) * 150;
	speechBubble.y = smallBork.y - 150 + Math.sin(offset) * 150;
	speechBubble.rotation = offset + Math.PI * 0.5 - .1;
	platform1.addChild(speechBubble);
	LK.setTimeout(doSmallBork, 200 + Math.random() * 200);
	chickenBork.scale.y = 1.05;
	chickenBork.scale.x = 1.05;
	tween(chickenBork, {
		scaleY: 1,
		scaleX: 1
	}, {
		duration: 800,
		easing: tween.elasticOut
	});
	if (boffset++ % 3 == 0) {
		largeBork.bork();
	}
}
doSmallBork();
// Initialize chicken
//<Write imports for supported plugins here> 
var chicken = game.addChild(new Chicken());
var particles = game.addChild(new Particles());
Platform.prototype.chicken = chicken; // Make chicken accessible in Platform class
chicken.x = 2048 / 2; // Center the chicken horizontally
chicken.y = 2200; // Start the chicken at the ground level
var countdown;
// Update game logic 
game.update = function () {
	// Remove excess platforms if more than 3 exist
	/*while (platforms.length > 3) {
		var excessPlatform = platforms.shift();
		excessPlatform.destroy();
	}*/ 
	// Create and add a dirt particle at the chicken's position
	if (platform1.x < -500 && !countdown) {
		countdown = game.addChild(new Countdown());
	}
	if (!chicken.isJumping) {
		if (facekit.volume > 0.05) {
			xspeed += Math.max(facekit.volume, .5);
			particles.addDirtParticle(chicken.x, chicken.y);
		}
		xspeed *= .4;
	}
	if (facekit.volume > 0.80 && !chicken.isJumping) {
		chicken.jump(facekit.volume);
	}
	// Check if the chicken has fallen off the screen
	if (chicken.y > 3000) {
		// End the game if the chicken  has fallen off the screen
		LK.effects.flashScreen(0xff0000, 3000); // Flash screen red for 1 second (1000ms) to show we are dead.
		LK.showGameOver();
	}
	// Check if the chicken touches the spikes
	if (chicken.intersects(spikes)) {
		// End the game if the chicken touches the spikes
		LK.effects.flashScreen(0xff0000, 3000); // Flash screen red for 1 second (1000ms) to show we are dead.
		LK.showGameOver();
	}
	// Check if the chicken touches the trophy
	if (chicken.intersects(trophy)) {
		// End the game with a win if the chicken touches the trophy
		LK.showYouWin();
	}
	volumeLabel.setText('Volume: ' + facekit.volume.toFixed(2)); // Update volume label text
};
:quality(85)/https://cdn.frvr.ai/679d0450200702e4a761011c.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/679d0777200702e4a76101ad.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/679d0ab0200702e4a76101ec.png%3F3) 
 Golden chicken trophy. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/679d0ecef1bec1b24bcb550c.png%3F3) 
 Row of Spikes. Computer Game Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/679d2b901a7b86672c796707.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/679d36bf1a7b86672c79687f.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/679d3e0d1a7b86672c7968d6.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/679d42121a7b86672c796906.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/67a0f6e2284cf4dbc65a7721.png%3F3) 
 A simple wide hand-drawn symmetrical ribbon banners. The banner text reads “Small bawk to move” in playful, cartoonish black lettering. The ribbon is warm beige parchment. Each side ends with simple curved, scroll-like ribbon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/67a0f983284cf4dbc65a7787.png%3F3) 
 A simple wide hand-drawn symmetrical ribbon banners. The banner text reads “Big BAWK to Jump!” in playful, cartoonish black lettering. The ribbon is warm beige parchment. Each side ends with simple curved, scroll-like ribbon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/67a0ff51284cf4dbc65a78a9.png%3F3) 
 Cartoon-style rectangular speech bubble with a sharp, dynamic outline. Inside the bubble, create the text ‘BAWK’ in bold, vibrant orange-to-yellow gradient lettering, with a thick black jagged shadow for contrast. The text should have a dynamic comic-style font and appear slightly 3D. The bubble should have a sharp tail pointing downward, consistent with comic-style speech bubbles. The intent is that we are shouting "BAWK".. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/67a1018b284cf4dbc65a791a.png%3F3) 
 Simple cartoon whisper speech bubble with text "bawk" lowercase lettering. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows