/**** 
* Classes
****/ 
var Background02 = Container.expand(function () {
	var self = Container.call(this);
	var background02Graphics = self.attachAsset('objBackground02', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Add wind animation in the update method
	self.update = function () {
		// Simulate wind blowing by rotating the object slightly
		self.rotation = Math.sin(LK.ticks / 120) * 0.05; // Rotate more back and forth with increased effect
	};
});
var Background04 = Container.expand(function () {
	var self = Container.call(this);
	var background04Graphics = self.attachAsset('objBackground04', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 60) * 0.2; // Reduced floating effect
	};
});
var Background06 = Container.expand(function () {
	var self = Container.call(this);
	var background06Graphics = self.attachAsset('objBackground06', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 60) * 0.2; // Reduced floating effect
		self.rotation = Math.sin(LK.ticks / 60) * 0.05 + Math.sin(LK.ticks / 120) * 0.03; // Add a more complex rotation pattern
	};
});
var Background07 = Container.expand(function () {
	var self = Container.call(this);
	var background07Graphics = self.attachAsset('objBackground07', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Add wind animation in the update method
	self.update = function () {
		// Simulate wind blowing by rotating the object slightly
		self.rotation = Math.sin(LK.ticks / 120) * 0.08; // Rotate a bit less back and forth
	};
});
var Background13 = Container.expand(function () {
	var self = Container.call(this);
	var background13Graphics = self.attachAsset('objBackground13', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self.direction = Math.random() > 0.5 ? 1 : -1; // Randomly choose a direction
	self.update = function () {
		var background13Graphics = self.children[0]; // Access the attached asset
		self.x += self.speed * self.direction;
		// Flip the image depending on the direction
		background13Graphics.scale.x = self.direction * (0.75 + Math.random() * 0.25);
		// Check if background13 is out of bounds horizontally
		if (self.x > 2048 + background13Graphics.width / 2 || self.x < -background13Graphics.width / 2) {
			self.destroy(); // Destroy background13 when it goes out of bounds
			game.background13Active = false; // Reset the flag when objBackground13 is destroyed
		}
	};
});
var ObjCartF = Container.expand(function () {
	var self = Container.call(this);
	var cartFGraphics = self.attachAsset('ObjCartF', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		// No specific update logic for ObjCartF
	};
});
var ObjCrab = Container.expand(function () {
	var self = Container.call(this);
	var crabGraphics = self.attachAsset('objCrab', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.y = 2400;
	self.speed = 2.2 + Math.random() * (3.5 - 2.2);
	self.update = function () {
		self.x += self.speed;
		self.y += Math.sin(LK.ticks / 3) * 2; // Add vertical waddling effect
		self.rotation = Math.sin(LK.ticks / 20) * 0.1; // Add rotation for waddling effect
		if (self.attached) {
			self.x = objContactPoint.x;
			self.y = objContactPoint.y;
			if (!self.scoreUpdated) {
				self.scoreUpdated = true; // Ensure score is only updated once per snatch
				self.snatchStartTick = LK.ticks; // Record the tick when snatch starts
				flashScreenDuringSnatch(); // Start flashing the screen with various colors
				waveEffect(); // Start wave effect
			}
			if (LK.ticks % 60 == 0 && self.attached) {
				score += 5; // Increase score by 5 every second when snatch is true
			}
		}
		// Check for intersection with objContactPoint
		if (self.intersects(objContactPoint)) {
			self.attached = true; // Set attached state to true when snatched
			game.down = null; // Disable left click when a crab is snatched
			if (hungerMeter.width < 2048) {
				hungerMeter.width += 3; // Refill the hunger bar faster
				hungerMeter.tint = 0x00ff00; // Change color to green when increasing
				if (!game.objYum) {
					game.objYum = game.addChild(LK.getAsset('objYum', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					game.objYum.x = game.objImHungry.x;
					game.objYum.y = game.objImHungry.y;
				}
				game.objYum.visible = 1;
				objStar.visible = 1;
				pulsateScore(); // Call pulsate effect
			}
		}
		// Check for intersection with objBackground08 only if not snatched
		if (!self.attached && self.intersects(background8)) {
			var sandDust = game.addChild(new ObjSandDust());
			sandDust.x = self.x + 200;
			sandDust.y = self.y;
			self.destroy();
		}
		// Check if objCrab is out of bounds
		if (self.y > 2732 + self.height / 2 || self.y < -self.height / 2 || self.x > 2048 + self.width / 2 || self.x < -self.width / 2) {
			self.destroy();
			if (crab && crab.attached) {
				crab.attached = false; // Re-enable left click
				LK.setTimeout(function () {
					game.down = function (x, y, obj) {
						if (!seagull.diving && !seagull.returning && (!crab || !crab.attached)) {
							seagull.diving = true;
							seagull.diveTime = 0;
							seagull.startX = seagull.x;
							seagull.startY = seagull.y;
							seagull.endX = seagull.startX + seagull.speed * seagull.direction * seagull.diveDuration / 2;
						}
						if (!gustSpawned && !gustCooldown) {
							var objGust = game.addChildAt(new ObjGust(), game.getChildIndex(seagull));
							objGust.x = seagull.x;
							objGust.y = seagull.y;
							LK.setTimeout(function () {
								objGust.destroy();
							}, 100);
							gustSpawned = true;
							gustCooldown = true;
							LK.setTimeout(function () {
								gustCooldown = false;
							}, 2000);
						}
						// Play a random sound (snoise, snoise02, snoise03)
						var sounds = ['SNoise', 'SNoise02', 'SNoise03'];
						var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
						LK.getSound(randomSound).play();
						// Play a random sound (snoise, snoise02, snoise03)
						var sounds = ['SNoise', 'SNoise02', 'SNoise03'];
						var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
						LK.getSound(randomSound).play();
					};
				}, 500); // Re-enable left click after 0.5 second
			} else {
				// Failsafe: Ensure left click is re-enabled if crab is not attached
				game.down = function (x, y, obj) {
					if (!seagull.diving && !seagull.returning && (!crab || !crab.attached)) {
						// Only start diving if not already diving or returning
						seagull.diving = true;
						seagull.diveTime = 0;
						seagull.startX = seagull.x;
						seagull.startY = seagull.y;
						// Calculate endX based on current speed and direction
						seagull.endX = seagull.startX + seagull.speed * seagull.direction * seagull.diveDuration / 2;
					}
					if (!gustSpawned && !gustCooldown) {
						// Spawn objGust behind seagull
						var objGust = game.addChildAt(new ObjGust(), game.getChildIndex(seagull));
						objGust.x = seagull.x; // Position at the center of the seagull
						objGust.y = seagull.y;
						LK.setTimeout(function () {
							objGust.destroy();
						}, 100); // Destroy objGust after 0.1 seconds
						gustSpawned = true; // Set gustSpawned flag to true
						gustCooldown = true; // Set gustCooldown flag to true
						LK.setTimeout(function () {
							gustCooldown = false; // Reset gustCooldown flag after 2 seconds
						}, 2000);
					}
				};
			}
		}
	};
});
var ObjFish = Container.expand(function () {
	var self = Container.call(this);
	var fishGraphics = self.attachAsset('objFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var startX = 1000; // Centered X position
	var startY = 1875; // Centered Y position
	self.x = startX;
	self.y = startY;
	var scaleDirection = 1;
	self.update = function () {
		// Make the fish swim around its starting position
		var newX = startX + Math.sin(LK.ticks / 60) * 50;
		if (newX < self.x) {
			fishGraphics.scale.x = -1; // Flip horizontally
		} else {
			fishGraphics.scale.x = 1; // Default orientation
		}
		self.x = newX;
		self.y = startY + Math.cos(LK.ticks / 60) * 30;
		// Slowly scale the fish up and down
		if (self.scale.x >= 1.1) {
			scaleDirection = -1;
		} else if (self.scale.x <= 0.9) {
			scaleDirection = 1;
		}
		self.scale.x += scaleDirection * 0.001;
		self.scale.y += scaleDirection * 0.001;
	};
});
var ObjGust = Container.expand(function () {
	var self = Container.call(this);
	var gustGraphics = self.attachAsset('objGust', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y -= 6; // Move vertically up
		self.alpha -= 0.02; // Gradually disappear over 0.5 seconds (30 frames)
		if (self.alpha <= 0) {
			intersecting = false; // Reset intersecting flag
			self.destroy(); // Destroy the object when fully transparent
		}
	};
});
var ObjMusica = Container.expand(function () {
	var self = Container.call(this);
	var musicaGraphics = self.attachAsset('objMusica', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 15) * 0.15; // Further reduced ripple vertical movement
		self.x += Math.cos(LK.ticks / 35) * 0.15; // Further reduced ripple horizontal movement
	};
});
var ObjNPC01 = Container.expand(function () {
	var self = Container.call(this);
	var npcGraphics = self.attachAsset('objNPC01', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.x += self.speed * self.direction;
		if (self.x < -npcGraphics.width / 2 || self.x > 2048 + npcGraphics.width / 2) {
			self.destroy();
			if (activeGrawlix) {
				activeGrawlix.destroy();
				activeGrawlix = null;
			}
			game.npcActive = false;
		}
		// Check for intersection with objContactPoint
		if (self.intersects(objContactPoint) && !self.accelerated) {
			self.speed *= 2; // Double the speed
			self.accelerated = true; // Ensure this happens only once
			// Check if objGrawlix is already active before spawning a new one
			if (!activeGrawlix) {
				// Spawn objGrawlix over objNPC01
				activeGrawlix = game.addChild(LK.getAsset('ObjGrawlix', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
			}
			activeGrawlix.x = self.x;
			activeGrawlix.y = self.y;
			activeGrawlix.startTick = LK.ticks; // Initialize startTick for grawlix
			activeGrawlix.update = function () {
				this.x = self.x;
				this.y = self.y - 200;
				if (!this.objPotatoes && LK.ticks - this.startTick >= 60) {
					// 1 second delay at 60 FPS
					this.objPotatoes = game.addChild(LK.getAsset('ObjPotatoes', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					this.objPotatoes.startTick = LK.ticks; // Initialize startTick for objPotatoes
					this.objPotatoes.x = this.x;
					this.objPotatoes.y = this.y;
					this.objPotatoes.update = function () {
						if (LK.ticks - this.startTick < 120) {
							// 2 seconds at 60 FPS
							this.y += 5; // Animate falling down a few pixels in Y
						} else if (this.intersects(seagull)) {
							// Destroy ObjPotatoes
							this.destroy();
							// Play either SEat or Crunch sound
							var sounds = ['SEat', 'Crunch'];
							var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
							LK.getSound(randomSound).play();
							// Instantiate ObjCartoonP at ObjPotatoes's position
							var ObjCartoonP = game.addChild(LK.getAsset('ObjCartoonP', {
								anchorX: 0.5,
								anchorY: 0.5
							}));
							ObjCartoonP.x = this.x;
							ObjCartoonP.y = this.y;
							// Destroy ObjCartoonP after 2 seconds
							LK.setTimeout(function () {
								ObjCartoonP.destroy();
							}, 2000);
							// Refill hunger bar by 20%
							hungerMeter.width = Math.min(hungerMeter.width + 409.6, 2048);
							// Add +20 to the score
							score += 20;
							// Flash screen yellow for 0.5 seconds
							LK.effects.flashScreen(0xffff00, 500);
							// Update score display
							scoreText.setText('Score: ' + score);
						}
					};
				}
			};
		}
	};
});
var ObjPDroplet = Container.expand(function () {
	var self = Container.call(this);
	var dropletGraphics = self.attachAsset('objPDroplet', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += 10 + Math.random() * 5; // Increased freefall speed with added y randomness
		self.x += seagull.speed * seagull.direction * 0.1; // Follow the direction of the seagull on the X axis
		if (self.y > 2600 + Math.random() * 200) {
			// Check if it reaches anywhere near the bottom of the screen
			var splash = game.addChild(new ObjPSplash());
			splash.x = self.x;
			splash.y = self.y;
			self.destroy();
			LK.setTimeout(function () {
				splash.destroy();
			}, 2000); // Destroy splash after 2 seconds
		}
	};
});
var ObjPSplash = Container.expand(function () {
	var self = Container.call(this);
	var splashGraphics = self.attachAsset('objPSplash', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var ObjSandDust = Container.expand(function () {
	var self = Container.call(this);
	var sandDustGraphics = self.attachAsset('objSandDust', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.alpha = 1.0;
	self.update = function () {
		self.y -= 1; // Move upwards
		self.alpha -= 0.01; // Gradually disappear over 2 seconds (60 frames per second)
		if (self.alpha <= 0) {
			self.destroy(); // Destroy the object when fully transparent
		}
	};
});
var Seagull = Container.expand(function () {
	var self = Container.call(this);
	var seagullGraphics = self.attachAsset('objSeagull', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5 * Math.pow(1.2, Math.floor(score / 65)) * (1 + Math.floor(score / 65) * 0.1);
	self.direction = 1;
	self.diving = false;
	self.diveTime = 0;
	self.diveDuration = 60; // Total duration of the dive in frames
	self.startX = 0;
	self.startY = 0;
	self.endX = 0;
	self.endY = 2732 - seagullGraphics.height / 2 - 200; // Target Y position for the dive
	self.returning = false;
	self.update = function () {
		if (self.diving) {
			self.diveTime++;
			var t = self.diveTime / self.diveDuration; // Normalized time (0 to 1)
			self.x = (1 - t) * self.startX + t * self.endX; // Linear horizontal movement
			self.y = (1 - t) * self.startY + t * self.endY; // Keep vertical movement unchanged
			divetoeat.visible = 0; // Set visibility of divetoeat to 0 when seagull dives
			if (self.diveTime >= self.diveDuration) {
				self.diveTime = 0;
				self.diving = false;
				self.returning = true; // Start returning to original position
				gustSpawned = false; // Reset gustSpawned flag
				self.startX = self.x; // Update startX to the current X
				self.startY = self.y; // Update startY to the current Y (bottom of the dive)
				self.endY = 475; // Return to the original Y position
				self.endX = self.startX + self.speed * self.direction * self.diveDuration / 2; // Move further ahead
			}
		} else if (self.returning) {
			self.diveTime++;
			var t = self.diveTime / self.diveDuration; // Normalized time (0 to 1)
			self.x = (1 - t) * self.startX + t * self.endX; // Linear horizontal movement back
			self.y = (1 - t) * self.startY + t * self.endY; // Keep vertical movement unchanged
			if (self.diveTime >= self.diveDuration) {
				self.diveTime = 0;
				self.returning = false; // End the return phase
				self.diving = false; // Reset diving state
				self.startX = self.x; // Reset startX for the next dive
				self.startY = self.y; // Reset startY for the next dive
				self.endY = 2732 - seagullGraphics.height / 2 - 200; // Reset endY for the next dive
			}
		} else {
			intersecting = false;
			self.x += self.speed * self.direction;
			self.y += Math.sin(LK.ticks / 10) * 5; // Add a hover effect
			// Check if seagull is out of bounds horizontally
			if (self.x > 2048 + seagullGraphics.width / 2 || self.x < -seagullGraphics.width / 2) {
				self.direction *= -1; // Flip direction
				self.x = Math.max(-seagullGraphics.width / 2, Math.min(2048 + seagullGraphics.width / 2, self.x)); // Keep seagull within bounds
				self.y = score > 375 ? Math.random() * (2732 * 0.5) + 100 : Math.random() * (2732 * 0.3) + 100; // Random Y position in the upper 50% of the playspace with a 100px boundary if score > 375, else 30%
				// Flip the seagull's graphics
				seagullGraphics.scale.x *= -1;
			}
		}
		// Update the score display
		scoreText.setText('Score: ' + score);
		// Decrease hungerMeter's width over time if seagull is not snatching fries or crab
		if (hungerMeter.width > 0 && (!crab || !crab.attached)) {
			if (!game.crashSoundInterval) {
				LK.getSound('SoundCrash').play();
				game.crashSoundInterval = LK.setInterval(function () {
					LK.getSound('SoundCrash').play();
				}, 10000);
			}
			if (crab && crab.attached && hungerMeter.width < 2048) {
				hungerMeter.tint = 0xffffff; // Reset color when not decreasing
				hungerMeter.width += 2; // Refill the hunger bar progressively
			}
			if (hungerMeter.width < 2048 * 0.35 && LK.ticks % 120 == 0) {
				// Trigger shake intermittently every 2 seconds
				screenShake(500, 15); // Shake for 500ms with increased intensity of 15 pixels
			}
			hungerMeter.width -= 1.5; // Decrease the rate of decrease
			hungerMeter.tint = 0xff0000; // Change color to red when decreasing
			scoreText.tint = 0xffffff; // Change score text color back to white
			LK.clearInterval(pulsateInterval); // Stop pulsating effect
			// Instantiate objImHungry for two seconds over objHead
			if (!game.objImHungry) {
				game.objImHungry = game.addChild(LK.getAsset('objImHungry', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
				game.objImHungry.x = head.x + 150;
				game.objImHungry.y = head.y - 25;
			}
			if (game.objYum) {
				game.objYum.visible = 0;
			}
			objStar.visible = 0;
			if (LK.ticks % 60 == 0) {
				updateScore(score + 1 * scoreMultiplier);
				self.speed = 10 * Math.pow(1.1, Math.floor(score / 65)) * (1 + Math.floor(score / 65) * 0.1);
				if (score >= lastScoreThreshold + 85) {
					lastScoreThreshold += 85;
					var objWaveCrash = game.addChild(LK.getAsset('objWaveCrash', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					objWaveCrash.x = 1025;
					objWaveCrash.y = 1850;
					LK.setTimeout(function () {
						objWaveCrash.destroy();
						if (!game.objSingleFish) {
							game.objSingleFish = game.addChild(LK.getAsset('objSingleFish', {
								anchorX: 0.5,
								anchorY: 0.5
							}));
							game.objSingleFish.x = 1175;
							game.objSingleFish.y = 1850;
							var startX = game.objSingleFish.x;
							var startY = game.objSingleFish.y;
							var endY = 2150;
							var duration = 60; // Duration of the animation in frames (1 second)
							var currentFrame = 0;
							game.objSingleFish.update = function () {
								if (currentFrame <= duration) {
									var t = currentFrame / duration;
									game.objSingleFish.y = (1 - t) * startY + t * endY;
									game.objSingleFish.scale.set(2.5); // Ensure it remains at 250% of its original scale
									currentFrame++;
								} else {
									// Animate looking around by flipping horizontally
									if (LK.ticks % 120 < 60) {
										game.objSingleFish.scale.set(2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing right
									} else {
										game.objSingleFish.scale.set(-2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing left
									}
								}
							};
							game.objSingleFish.initialized = true;
						}
					}, 1000); // Delay of 1 second before replacing with objSingleFish
				}
			}
			// Stop shake and pulsate effects
			LK.clearInterval(shakeInterval);
			if (pulsateIntervalActive) {
				LK.clearInterval(pulsateInterval);
				pulsateIntervalActive = false; // Reset flag when pulsateInterval is cleared
			}
		}
		// Check if fries or crab leave the playspace
		if (typeof crab !== 'undefined' && (crab.y > 2732 + crab.height / 2 || crab.y < -crab.height / 2 || crab.x > 2048 + crab.width / 2 || crab.x < -crab.width / 2)) {
			crab.destroy();
		}
		// Initialize objBackground13 every 6 to 15 seconds
		if (!game.background13Active && LK.ticks % (60 * (Math.floor(Math.random() * 10) + 6)) == 0) {
			var background13 = game.addChildAt(new Background13(), game.getChildIndex(seagull) - 1);
			background13.direction = Math.random() > 0.5 ? 1 : -1; // Randomly choose a direction
			background13.x = background13.direction > 0 ? -background13.width / 2 : 2048 + background13.width / 2; // Start from the left or right edge of the playspace
			background13.y = Math.random() * (2732 * 0.2) + 50; // Random Y position in the upper 20% of the playspace with a 50px boundary
			game.background13Active = true; // Set the flag to indicate that objBackground13 is active
			background13.update = function () {
				var background13Graphics = this.children[0]; // Access the attached asset
				this.x += this.speed * this.direction;
				// Flip the image depending on the direction
				background13Graphics.scale.x = this.direction;
				// Check if background13 is out of bounds horizontally
				if (this.x > 2048 + background13Graphics.width / 2 || this.x < -background13Graphics.width / 2) {
					this.destroy(); // Destroy background13 when it goes out of bounds
					game.background13Active = false; // Reset the flag when objBackground13 is destroyed
				}
			};
		}
		// Spawn ObjNPC01 every 15 to 25 seconds if not already active
		if (!game.npcActive && LK.ticks % (60 * (Math.floor(Math.random() * 11) + 15)) == 0) {
			var npc = game.addChildAt(new ObjNPC01(), game.getChildIndex(background3) + 1);
			if (Math.random() > 0.5) {
				npc.x = -npc.width / 2; // Start from outside the left edge of the playspace
				npc.direction = 1; // Move towards the right
				npc.children[0].scale.x *= -1; // Flip the visual horizontally
			} else {
				npc.x = 2048 + npc.width / 2; // Start from outside the right edge of the playspace
				npc.direction = -1; // Move towards the left
			}
			npc.y = 1950;
			npc.accelerated = false; // Initialize accelerated flag
			game.npcActive = true;
		}
		// Spawn objCrab every 10 seconds
		if (LK.ticks % (60 * 10) == 0) {
			crab = new ObjCrab();
			crab.attached = false; // Initialize attached state
			crab.x = -crab.width / 2; // Start from the utmost left
			game.addChildAt(crab, game.getChildIndex(background9)); // Add crab behind objBackground09
		}
		// Initialize ObjToast every 10 seconds if it does not exist
		if (LK.ticks % (60 * 10) == 0 && !game.ObjToast) {
			var ObjToast = game.addChild(LK.getAsset('ObjToast', {
				anchorX: 0.5,
				anchorY: 0.5,
				scaleX: 0.5,
				scaleY: 0.5
			}));
			ObjToast.x = 75;
			ObjToast.y = 1150;
			game.ObjToast = ObjToast;
			// Animate ObjToast
			var startX = 75;
			var startY = 1150; // Start from the bottom of the screen
			var endX = Math.random() * (2048 - ObjToast.width) + ObjToast.width / 2;
			var endY = 2090;
			var duration = 60; // Duration of the animation in frames (1 second)
			var currentFrame = 0;
			ObjToast.x = startX;
			ObjToast.y = startY;
			ObjToast.update = function () {
				if (currentFrame <= duration) {
					var t = currentFrame / duration;
					ObjToast.x = (1 - t) * startX + t * endX;
					ObjToast.y = (1 - t) * startY + t * endY - 300 * t * (1 - t); // Parabolic movement
					ObjToast.scale.set(0.5 + 0.5 * t); // Gradually scale by 50%
					currentFrame++;
				}
				// Check for intersection with objSeagull
				if (ObjToast.intersects(seagull)) {
					// Destroy ObjToast
					ObjToast.destroy();
					game.ObjToast = null;
					// Play either SEat or Crunch sound
					var sounds = ['SEat', 'Crunch'];
					var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
					LK.getSound(randomSound).play();
					// Instantiate ObjMunch at ObjToast's position
					var ObjMunch = game.addChild(LK.getAsset('ObjMunch', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					ObjMunch.x = ObjToast.x;
					ObjMunch.y = ObjToast.y;
					// Destroy ObjMunch after 1 second
					LK.setTimeout(function () {
						ObjMunch.destroy();
					}, 1000);
					// Refill hunger bar by 10%
					hungerMeter.width = Math.min(hungerMeter.width + 204.8, 2048);
					// Add +10 to the score
					score += 10;
					// Flash screen yellow for 0.5 seconds
					LK.effects.flashScreen(0xffff00, 500);
					// Update score display
					scoreText.setText('Score: ' + score);
				}
			};
		}
		// Trigger game over when hungerMeter's width reaches 0
		if (hungerMeter.width <= 0) {
			if (game.crashSoundInterval) {
				LK.clearInterval(game.crashSoundInterval);
				game.crashSoundInterval = null;
			}
			var redOverlay = game.addChild(LK.getAsset('objRedOverlay', {
				anchorX: 0.5,
				anchorY: 0.5,
				alpha: 0.1
			}));
			redOverlay.x = 1024;
			redOverlay.y = 1366;
			LK.setTimeout(function () {
				var objDizzy = game.addChild(LK.getAsset('objDizzy', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
				objDizzy.x = 1024;
				objDizzy.y = 1366;
				LK.setScore(score);
				scoreText.visible = false; // Set visibility of score to 0 during game over
				LK.setTimeout(function () {
					LK.showGameOver(); //Calling this will destroy the 'Game' and reset entire game state.
				}, 3000); // Delay game over by 3 seconds
			}, 100); // Delay game over by 0.1 seconds
		}
		// Attach objContactPoint to the center of seagull
		objContactPoint.x = self.x;
		objContactPoint.y = self.y + 200;
		// Check for intersection with objSingleFish
		if (objContactPoint.intersects(game.objSingleFish)) {
			// Destroy objSingleFish
			game.objSingleFish.destroy();
			game.objSingleFish = null;
			// Play either SEat or Crunch sound
			var sounds = ['SEat', 'Crunch'];
			var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
			LK.getSound(randomSound).play();
			// Instantiate ObjCartF at objSingleFish's position
			var objCartF = game.addChildAt(new ObjCartF(), game.children.length - 1);
			objCartF.x = objContactPoint.x;
			objCartF.y = objContactPoint.y;
			// Destroy ObjCartF after 2 seconds
			LK.setTimeout(function () {
				objCartF.destroy();
			}, 2000);
			// Refill the hunger bar by 15%
			hungerMeter.width = Math.min(hungerMeter.width + 307.2, 2048);
			// Flash screen yellow for 0.5 seconds
			LK.effects.flashScreen(0xffff00, 500);
			// Add 15 to the score
			score += 15;
			scoreText.setText('Score: ' + score);
		}
		// Check for intersection with objCrab
		if (objContactPoint.intersects(crab) && !crab.seatSoundPlayed) {
			crab.seatSoundPlayed = true; // Ensure sound is only played once
			// Play either SEat or Crunch sound
			var sounds = ['SEat', 'Crunch'];
			var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
			LK.getSound(randomSound).play();
		}
	};
	// Remove the down event from the seagull as we want to trigger it from anywhere in the playspace
});
var SeagullShadow = Container.expand(function () {
	var self = Container.call(this);
	var shadowGraphics = self.attachAsset('objSeagullShadow', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0.5
	});
	self.update = function () {
		self.x = seagull.x + 20; // Offset shadow slightly
		self.y = 2575 - 100; // Keep shadow at the bottom of the screen
		// Calculate scale based on seagull's Y position
		var maxScale = 3;
		var minScale = 1;
		var maxY = 2732 - seagull.height / 2 - 200;
		var minY = 475;
		var t = (seagull.y - minY) / (maxY - minY);
		var scale = minScale + t * (maxScale - minScale);
		self.scale.set(scale, scale);
	};
});
var Smoke = Container.expand(function () {
	var self = Container.call(this);
	var smokeGraphics = self.attachAsset('objSmoke', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 60) * 0.2; // Reduced floating effect
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
function updateScore(newScore) {
	score = newScore;
	scoreText.setText('Score: ' + score);
	if (score >= lastScoreThreshold + 80) {
		lastScoreThreshold += 80;
		var objWaveCrash = game.addChild(LK.getAsset('objWaveCrash', {
			anchorX: 0.5,
			anchorY: 0.5
		}));
		objWaveCrash.x = 1025;
		objWaveCrash.y = 1850;
		LK.setTimeout(function () {
			objWaveCrash.destroy();
			if (!game.objSingleFish) {
				game.objSingleFish = game.addChild(LK.getAsset('objSingleFish', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
			}
			if (!game.objSingleFish.initialized) {
				game.objSingleFish.x = 1025;
				game.objSingleFish.y = 1850;
				var startX = game.objSingleFish.x;
				var startY = game.objSingleFish.y;
				var endY = 2100;
				var duration = 60; // Duration of the animation in frames (1 second)
				var currentFrame = 0;
				game.objSingleFish.update = function () {
					if (currentFrame <= duration) {
						var t = currentFrame / duration;
						game.objSingleFish.x = (1 - t) * startX + t * endX;
						game.objSingleFish.y = (1 - t) * startY + t * endY;
						game.objSingleFish.y = (1 - t) * startY + t * endY;
						game.objSingleFish.scale.set(2.5); // Ensure it remains at 250% of its original scale
						currentFrame++;
					} else {
						// Animate looking around by flipping horizontally
						if (LK.ticks % 120 < 60) {
							game.objSingleFish.scale.set(2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing right
						} else {
							game.objSingleFish.scale.set(-2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing left
						}
					}
				};
				game.objSingleFish.initialized = true;
			}
			if (!game.objSingleFish.initialized) {
				game.objSingleFish.x = 1025;
				game.objSingleFish.y = 1850;
				var startX = game.objSingleFish.x;
				var startY = game.objSingleFish.y;
				var endX = 1475;
				var endY = 2000;
				var duration = 60; // Duration of the animation in frames (1 second)
				var currentFrame = 0;
				game.objSingleFish.update = function () {
					if (currentFrame <= duration) {
						var t = currentFrame / duration;
						game.objSingleFish.y = (1 - t) * startY + t * endY;
						game.objSingleFish.scale.set(1 + 1.5 * t); // Scale up by 250%
						currentFrame++;
					} else {
						// Animate looking around by flipping horizontally
						if (LK.ticks % 60 < 30) {
							game.objSingleFish.scale.x = 1; // Face right
						} else {
							game.objSingleFish.scale.x = -1; // Face left
						}
					}
				};
				game.objSingleFish.initialized = true;
			}
		}, 1000); // Delay of 1 second before replacing with objSingleFish
	}
}
game.npcActive = false;
var scoreMultiplier = 1; // Initialize scoreMultiplier variable
var lastScoreThreshold = 0; // Variable to track the last score threshold crossed
function waveEffect() {
	if (crab && crab.attached) {
		game.y += Math.sin(LK.ticks / 30) * 1; // Apply further reduced wave effect
		game.x += Math.cos(LK.ticks / 30) * 0.5; // Further lower the horizontal wave effect
		if (objMultipliertext.visible === 0) {
			objMultipliertext.visible = 1; // Set visibility to 1 when waveEffect is active
			LK.getSound('Party').play(); // Play Party sound when objMultipliertext becomes visible
		}
		objMultipliertext.rotation += 0.05; // Rotate objMultipliertext
		scoreMultiplier = 2; // Enable score multiplier
		LK.setTimeout(waveEffect, 16); // Continue wave effect every frame (60 FPS)
	} else {
		game.y = 0; // Reset playspace position to original
		game.x = 0; // Reset playspace position to original
		if (objMultipliertext.visible === 1) {
			objMultipliertext.visible = 0; // Set visibility to 0 when waveEffect is not active
			LK.getSound('Party').stop(); // Stop Party sound when objMultipliertext becomes invisible
		}
		objMultipliertext.rotation += 0.05; // Rotate objMultipliertext
		scoreMultiplier = 1; // Disable score multiplier
	}
}
function flashScreenDuringSnatch() {
	var colors = [0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff];
	var colorIndex = 0;
	function flash() {
		if (crab && crab.attached) {
			LK.effects.flashScreen(colors[colorIndex], 500);
			colorIndex = (colorIndex + 1) % colors.length;
			LK.setTimeout(flash, 500);
		}
	}
	function waveEffect() {
		if (crab && crab.attached) {
			game.y += Math.sin(LK.ticks / 30) * 1; // Apply further reduced wave effect
			game.x += Math.cos(LK.ticks / 30) * 0.5; // Further lower the horizontal wave effect
			LK.setTimeout(waveEffect, 16); // Continue wave effect every frame (60 FPS)
		} else {
			game.y = 0; // Reset playspace position to original
			game.x = 0; // Reset playspace position to original
		}
	}
	flash();
	waveEffect();
}
function pulsateScore() {
	var originalTint = scoreText.tint;
	var pulsateDuration = 1000; // Duration of one pulsate cycle in milliseconds
	function pulsate() {
		scoreText.tint = 0x00ff00; // Change to green
		LK.setTimeout(function () {
			scoreText.tint = originalTint; // Change back to original color
		}, pulsateDuration / 2);
	}
	pulsateInterval = LK.setInterval(pulsate, pulsateDuration);
	pulsateIntervalActive = true; // Set flag to true when pulsateInterval is active
	// Stop pulsating after a certain condition (e.g., hunger bar is full)
	// LK.clearInterval(pulsateInterval);
}
LK.setInterval(function () {
	var droplet = game.addChild(new ObjPDroplet());
	droplet.x = seagull.x;
	droplet.y = seagull.y;
	droplet.direction = seagull.direction; // Set the direction of the droplet to match the seagull
}, (Math.random() * 10 + 10) * 1000); // Random interval between 10 to 20 seconds
var scaleDirectionRadio = 1;
var scaleDirectionDive = 1;
LK.setInterval(function () {
	// Unique scaling for objRadio
	var scaleFactorRadio = 1 + scaleDirectionRadio * 0.005;
	objRadio.scale.x *= scaleFactorRadio;
	objRadio.scale.y *= scaleFactorRadio;
	if (objRadio.scale.x >= 1.15 || objRadio.scale.x <= 0.85) {
		scaleDirectionRadio *= -1;
	}
	// Unique scaling for divetoeat
	var scaleFactorDive = 1 + scaleDirectionDive * 0.01;
	divetoeat.scale.x *= scaleFactorDive;
	divetoeat.scale.y *= scaleFactorDive;
	if (divetoeat.scale.x >= 1.2 || divetoeat.scale.x <= 0.8) {
		scaleDirectionDive *= -1;
	}
}, 16); // Update every frame for smoother animation
function screenShake(duration, intensity) {
	var originalX = game.x;
	var originalY = game.y;
	var shakeInterval = LK.setInterval(function () {
		game.x = originalX + (Math.random() - 0.5) * intensity;
		game.y = originalY + (Math.random() - 0.5) * intensity;
	}, 16); // Shake every frame (60 FPS)
	LK.setTimeout(function () {
		LK.clearInterval(shakeInterval);
		game.x = originalX;
		game.y = originalY;
	}, duration);
}
var crab; // Declare crab in the global scope
var activeGrawlix = null; // Declare a global variable to track the active objGrawlix
var snatchStartTick = 0; // Initialize snatchStartTick variable
var objContactPoint; // Declare objContactPoint in the global scope
var gustSpawned = false; // Flag to track if objGust has been spawned
var gustCooldown = false; // Flag to track if the cooldown period is active
var background = game.addChild(LK.getAsset('ObjBackground01', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background.x = 1024;
background.y = 1366;
var objSmoke = game.addChild(new Smoke());
objSmoke.x = 975;
objSmoke.y = 875;
var objFish = game.addChild(new ObjFish());
objFish.x = 1024;
objFish.y = 1366; // Position objFish at y 1366
objFish.visible = true; // Ensure objFish is visible
var background11 = game.addChild(LK.getAsset('objBackground11', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background11.x = 25;
background11.y = 1300;
var background10 = game.addChild(LK.getAsset('objBackground10', {
	anchorX: 0.5,
	anchorY: 0.5
}));
var divetoeat = LK.gui.top.addChild(LK.getAsset('DivetoEat', {
	anchorX: 0.5,
	anchorY: 0.5
}));
divetoeat.x = 0; // Center horizontally
divetoeat.y = 900; // Center vertically
// Removed duplicate objRadio instantiation
var objMusica = game.addChild(new ObjMusica());
objMusica.x = 400;
objMusica.y = 1100;
background10.x = 125;
background10.y = 2500;
var background9 = game.addChild(LK.getAsset('objBackground09', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background9.x = 450;
background9.y = 2490;
var background8 = game.addChild(LK.getAsset('objBackground08', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background8.x = 1475;
background8.y = 2455;
var background7 = game.addChild(new Background07());
background7.x = 150;
background7.y = 2650;
var background6 = game.addChild(new Background06());
background6.x = 1175;
background6.y = 1035;
var background4 = game.addChild(new Background04());
var objSos = game.addChild(LK.getAsset('ObjSos', {
	anchorX: 0.5,
	anchorY: 0.5
}));
objSos.rotation = -0.436332; // Rotate by -25 degrees (in radians)
objSos.x = 1110;
objSos.y = 850;
objSos.update = function () {
	objSos.y += Math.sin(LK.ticks / 30) * 0.5; // Further reduced vertical wave effect
	objSos.x += Math.cos(LK.ticks / 60) * 0.25; // Further reduced horizontal wave effect
};
var background5 = game.addChild(LK.getAsset('objBackground05', {
	anchorX: 0.5,
	anchorY: 0.5
}));
var objRadio = game.addChild(LK.getAsset('objRadio', {
	anchorX: 0.5,
	anchorY: 0.5
}));
objRadio.x = 265;
objRadio.y = 1165;
var background12 = game.addChild(LK.getAsset('objBackground12', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background12.x = 850;
background12.y = 3335;
background5.x = 165;
background5.y = 1925;
background4.x = 1024;
background4.y = 990;
var background2 = game.addChild(new Background02());
background2.x = 1790;
background2.y = 1766;
var background3 = game.addChildAt(LK.getAsset('objBackground03', {
	anchorX: 0.5,
	anchorY: 0.5
}), game.getChildIndex(background2) - 1);
background3.x = 1824;
background3.y = 2166;
var seagull = game.addChild(new Seagull());
var seagullShadow = game.addChild(new SeagullShadow());
intersecting = false; // Reset intersecting flag
crabSmokeInstantiated = false; // Reset crab smoke flag
gustSpawned = false; // Reset gust spawned flag
gustCooldown = false; // Reset gust cooldown flag
seagull.x = -seagull.width / 2; // Start from outside the left edge of the playspace
seagull.y = 475;
if (typeof crab !== 'undefined') {
	crab.attached = false; // Reset attached state for crab
	crab.destroy(); // Ensure the crab is destroyed and reset
}
var hungerMeter = game.addChild(LK.getAsset('objHungerMeter', {
	anchorX: 0.5,
	anchorY: 0.5,
	width: 2048
}));
hungerMeter.x = 1024;
hungerMeter.y = 2650;
var objMultipliertext = game.addChildAt(LK.getAsset('objMultipliertext', {}), game.getChildIndex(background2) + 1);
objMultipliertext.x = 850;
objMultipliertext.y = 1250;
objMultipliertext.visible = 0; // Set visibility to 0 at the start of the game
objContactPoint = game.addChild(LK.getAsset('objContactPoint', {
	anchorX: 0.5,
	anchorY: 0.5,
	alpha: 0
}));
objContactPoint.x = 1024;
objContactPoint.y = 1366;
// Create a text object to display the score
var scoreText = new Text2('Score: 0', {
	size: 80,
	fill: "#ffffff",
	font: "Impact"
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var score = 0;
scoreText.visible = true; // Reset visibility of score to 1 when game starts
game.background13Active = false; // Flag to track if objBackground13 is active
// Instantiate objStomach where objHungerFrame is and remove objHungerFrame from the playspace
var head = game.addChild(LK.getAsset('objHead', {
	anchorX: 0.5,
	anchorY: 0.5
}));
head.x = 1050;
head.y = 2635;
var objStar = game.addChildAt(LK.getAsset('objStar', {
	anchorX: 0.5,
	anchorY: 0.5
}), game.getChildIndex(head) - 1);
objStar.x = head.x - 45;
objStar.y = head.y - head.height / 2 - objStar.height / 2 + 235;
;
game.down = function (x, y, obj) {
	if (!seagull.diving && !seagull.returning && (!crab || !crab.attached)) {
		seagull.diving = true;
		seagull.diveTime = 0;
		seagull.startX = seagull.x;
		seagull.startY = seagull.y;
		seagull.endX = seagull.startX + seagull.speed * seagull.direction * seagull.diveDuration / 2;
	}
	if (!gustSpawned && !gustCooldown) {
		var objGust = game.addChildAt(new ObjGust(), game.getChildIndex(seagull));
		objGust.x = seagull.x;
		objGust.y = seagull.y;
		LK.setTimeout(function () {
			objGust.destroy();
		}, 100);
		gustSpawned = true;
		gustCooldown = true;
		LK.setTimeout(function () {
			gustCooldown = false;
		}, 2000);
	}
	// Play a random sound (snoise, snoise02, snoise03)
	var sounds = ['SNoise', 'SNoise02', 'SNoise03'];
	var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
	LK.getSound(randomSound).play();
};
var pulsateInterval;
var pulsateIntervalActive = false; // Track if pulsateInterval is active
var shakeInterval; /**** 
* Classes
****/ 
var Background02 = Container.expand(function () {
	var self = Container.call(this);
	var background02Graphics = self.attachAsset('objBackground02', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Add wind animation in the update method
	self.update = function () {
		// Simulate wind blowing by rotating the object slightly
		self.rotation = Math.sin(LK.ticks / 120) * 0.05; // Rotate more back and forth with increased effect
	};
});
var Background04 = Container.expand(function () {
	var self = Container.call(this);
	var background04Graphics = self.attachAsset('objBackground04', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 60) * 0.2; // Reduced floating effect
	};
});
var Background06 = Container.expand(function () {
	var self = Container.call(this);
	var background06Graphics = self.attachAsset('objBackground06', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 60) * 0.2; // Reduced floating effect
		self.rotation = Math.sin(LK.ticks / 60) * 0.05 + Math.sin(LK.ticks / 120) * 0.03; // Add a more complex rotation pattern
	};
});
var Background07 = Container.expand(function () {
	var self = Container.call(this);
	var background07Graphics = self.attachAsset('objBackground07', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Add wind animation in the update method
	self.update = function () {
		// Simulate wind blowing by rotating the object slightly
		self.rotation = Math.sin(LK.ticks / 120) * 0.08; // Rotate a bit less back and forth
	};
});
var Background13 = Container.expand(function () {
	var self = Container.call(this);
	var background13Graphics = self.attachAsset('objBackground13', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self.direction = Math.random() > 0.5 ? 1 : -1; // Randomly choose a direction
	self.update = function () {
		var background13Graphics = self.children[0]; // Access the attached asset
		self.x += self.speed * self.direction;
		// Flip the image depending on the direction
		background13Graphics.scale.x = self.direction * (0.75 + Math.random() * 0.25);
		// Check if background13 is out of bounds horizontally
		if (self.x > 2048 + background13Graphics.width / 2 || self.x < -background13Graphics.width / 2) {
			self.destroy(); // Destroy background13 when it goes out of bounds
			game.background13Active = false; // Reset the flag when objBackground13 is destroyed
		}
	};
});
var ObjCartF = Container.expand(function () {
	var self = Container.call(this);
	var cartFGraphics = self.attachAsset('ObjCartF', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		// No specific update logic for ObjCartF
	};
});
var ObjCrab = Container.expand(function () {
	var self = Container.call(this);
	var crabGraphics = self.attachAsset('objCrab', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.y = 2400;
	self.speed = 2.2 + Math.random() * (3.5 - 2.2);
	self.update = function () {
		self.x += self.speed;
		self.y += Math.sin(LK.ticks / 3) * 2; // Add vertical waddling effect
		self.rotation = Math.sin(LK.ticks / 20) * 0.1; // Add rotation for waddling effect
		if (self.attached) {
			self.x = objContactPoint.x;
			self.y = objContactPoint.y;
			if (!self.scoreUpdated) {
				self.scoreUpdated = true; // Ensure score is only updated once per snatch
				self.snatchStartTick = LK.ticks; // Record the tick when snatch starts
				flashScreenDuringSnatch(); // Start flashing the screen with various colors
				waveEffect(); // Start wave effect
			}
			if (LK.ticks % 60 == 0 && self.attached) {
				score += 5; // Increase score by 5 every second when snatch is true
			}
		}
		// Check for intersection with objContactPoint
		if (self.intersects(objContactPoint)) {
			self.attached = true; // Set attached state to true when snatched
			game.down = null; // Disable left click when a crab is snatched
			if (hungerMeter.width < 2048) {
				hungerMeter.width += 3; // Refill the hunger bar faster
				hungerMeter.tint = 0x00ff00; // Change color to green when increasing
				if (!game.objYum) {
					game.objYum = game.addChild(LK.getAsset('objYum', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					game.objYum.x = game.objImHungry.x;
					game.objYum.y = game.objImHungry.y;
				}
				game.objYum.visible = 1;
				objStar.visible = 1;
				pulsateScore(); // Call pulsate effect
			}
		}
		// Check for intersection with objBackground08 only if not snatched
		if (!self.attached && self.intersects(background8)) {
			var sandDust = game.addChild(new ObjSandDust());
			sandDust.x = self.x + 200;
			sandDust.y = self.y;
			self.destroy();
		}
		// Check if objCrab is out of bounds
		if (self.y > 2732 + self.height / 2 || self.y < -self.height / 2 || self.x > 2048 + self.width / 2 || self.x < -self.width / 2) {
			self.destroy();
			if (crab && crab.attached) {
				crab.attached = false; // Re-enable left click
				LK.setTimeout(function () {
					game.down = function (x, y, obj) {
						if (!seagull.diving && !seagull.returning && (!crab || !crab.attached)) {
							seagull.diving = true;
							seagull.diveTime = 0;
							seagull.startX = seagull.x;
							seagull.startY = seagull.y;
							seagull.endX = seagull.startX + seagull.speed * seagull.direction * seagull.diveDuration / 2;
						}
						if (!gustSpawned && !gustCooldown) {
							var objGust = game.addChildAt(new ObjGust(), game.getChildIndex(seagull));
							objGust.x = seagull.x;
							objGust.y = seagull.y;
							LK.setTimeout(function () {
								objGust.destroy();
							}, 100);
							gustSpawned = true;
							gustCooldown = true;
							LK.setTimeout(function () {
								gustCooldown = false;
							}, 2000);
						}
						// Play a random sound (snoise, snoise02, snoise03)
						var sounds = ['SNoise', 'SNoise02', 'SNoise03'];
						var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
						LK.getSound(randomSound).play();
						// Play a random sound (snoise, snoise02, snoise03)
						var sounds = ['SNoise', 'SNoise02', 'SNoise03'];
						var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
						LK.getSound(randomSound).play();
					};
				}, 500); // Re-enable left click after 0.5 second
			} else {
				// Failsafe: Ensure left click is re-enabled if crab is not attached
				game.down = function (x, y, obj) {
					if (!seagull.diving && !seagull.returning && (!crab || !crab.attached)) {
						// Only start diving if not already diving or returning
						seagull.diving = true;
						seagull.diveTime = 0;
						seagull.startX = seagull.x;
						seagull.startY = seagull.y;
						// Calculate endX based on current speed and direction
						seagull.endX = seagull.startX + seagull.speed * seagull.direction * seagull.diveDuration / 2;
					}
					if (!gustSpawned && !gustCooldown) {
						// Spawn objGust behind seagull
						var objGust = game.addChildAt(new ObjGust(), game.getChildIndex(seagull));
						objGust.x = seagull.x; // Position at the center of the seagull
						objGust.y = seagull.y;
						LK.setTimeout(function () {
							objGust.destroy();
						}, 100); // Destroy objGust after 0.1 seconds
						gustSpawned = true; // Set gustSpawned flag to true
						gustCooldown = true; // Set gustCooldown flag to true
						LK.setTimeout(function () {
							gustCooldown = false; // Reset gustCooldown flag after 2 seconds
						}, 2000);
					}
				};
			}
		}
	};
});
var ObjFish = Container.expand(function () {
	var self = Container.call(this);
	var fishGraphics = self.attachAsset('objFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var startX = 1000; // Centered X position
	var startY = 1875; // Centered Y position
	self.x = startX;
	self.y = startY;
	var scaleDirection = 1;
	self.update = function () {
		// Make the fish swim around its starting position
		var newX = startX + Math.sin(LK.ticks / 60) * 50;
		if (newX < self.x) {
			fishGraphics.scale.x = -1; // Flip horizontally
		} else {
			fishGraphics.scale.x = 1; // Default orientation
		}
		self.x = newX;
		self.y = startY + Math.cos(LK.ticks / 60) * 30;
		// Slowly scale the fish up and down
		if (self.scale.x >= 1.1) {
			scaleDirection = -1;
		} else if (self.scale.x <= 0.9) {
			scaleDirection = 1;
		}
		self.scale.x += scaleDirection * 0.001;
		self.scale.y += scaleDirection * 0.001;
	};
});
var ObjGust = Container.expand(function () {
	var self = Container.call(this);
	var gustGraphics = self.attachAsset('objGust', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y -= 6; // Move vertically up
		self.alpha -= 0.02; // Gradually disappear over 0.5 seconds (30 frames)
		if (self.alpha <= 0) {
			intersecting = false; // Reset intersecting flag
			self.destroy(); // Destroy the object when fully transparent
		}
	};
});
var ObjMusica = Container.expand(function () {
	var self = Container.call(this);
	var musicaGraphics = self.attachAsset('objMusica', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 15) * 0.15; // Further reduced ripple vertical movement
		self.x += Math.cos(LK.ticks / 35) * 0.15; // Further reduced ripple horizontal movement
	};
});
var ObjNPC01 = Container.expand(function () {
	var self = Container.call(this);
	var npcGraphics = self.attachAsset('objNPC01', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.x += self.speed * self.direction;
		if (self.x < -npcGraphics.width / 2 || self.x > 2048 + npcGraphics.width / 2) {
			self.destroy();
			if (activeGrawlix) {
				activeGrawlix.destroy();
				activeGrawlix = null;
			}
			game.npcActive = false;
		}
		// Check for intersection with objContactPoint
		if (self.intersects(objContactPoint) && !self.accelerated) {
			self.speed *= 2; // Double the speed
			self.accelerated = true; // Ensure this happens only once
			// Check if objGrawlix is already active before spawning a new one
			if (!activeGrawlix) {
				// Spawn objGrawlix over objNPC01
				activeGrawlix = game.addChild(LK.getAsset('ObjGrawlix', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
			}
			activeGrawlix.x = self.x;
			activeGrawlix.y = self.y;
			activeGrawlix.startTick = LK.ticks; // Initialize startTick for grawlix
			activeGrawlix.update = function () {
				this.x = self.x;
				this.y = self.y - 200;
				if (!this.objPotatoes && LK.ticks - this.startTick >= 60) {
					// 1 second delay at 60 FPS
					this.objPotatoes = game.addChild(LK.getAsset('ObjPotatoes', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					this.objPotatoes.startTick = LK.ticks; // Initialize startTick for objPotatoes
					this.objPotatoes.x = this.x;
					this.objPotatoes.y = this.y;
					this.objPotatoes.update = function () {
						if (LK.ticks - this.startTick < 120) {
							// 2 seconds at 60 FPS
							this.y += 5; // Animate falling down a few pixels in Y
						} else if (this.intersects(seagull)) {
							// Destroy ObjPotatoes
							this.destroy();
							// Play either SEat or Crunch sound
							var sounds = ['SEat', 'Crunch'];
							var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
							LK.getSound(randomSound).play();
							// Instantiate ObjCartoonP at ObjPotatoes's position
							var ObjCartoonP = game.addChild(LK.getAsset('ObjCartoonP', {
								anchorX: 0.5,
								anchorY: 0.5
							}));
							ObjCartoonP.x = this.x;
							ObjCartoonP.y = this.y;
							// Destroy ObjCartoonP after 2 seconds
							LK.setTimeout(function () {
								ObjCartoonP.destroy();
							}, 2000);
							// Refill hunger bar by 20%
							hungerMeter.width = Math.min(hungerMeter.width + 409.6, 2048);
							// Add +20 to the score
							score += 20;
							// Flash screen yellow for 0.5 seconds
							LK.effects.flashScreen(0xffff00, 500);
							// Update score display
							scoreText.setText('Score: ' + score);
						}
					};
				}
			};
		}
	};
});
var ObjPDroplet = Container.expand(function () {
	var self = Container.call(this);
	var dropletGraphics = self.attachAsset('objPDroplet', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += 10 + Math.random() * 5; // Increased freefall speed with added y randomness
		self.x += seagull.speed * seagull.direction * 0.1; // Follow the direction of the seagull on the X axis
		if (self.y > 2600 + Math.random() * 200) {
			// Check if it reaches anywhere near the bottom of the screen
			var splash = game.addChild(new ObjPSplash());
			splash.x = self.x;
			splash.y = self.y;
			self.destroy();
			LK.setTimeout(function () {
				splash.destroy();
			}, 2000); // Destroy splash after 2 seconds
		}
	};
});
var ObjPSplash = Container.expand(function () {
	var self = Container.call(this);
	var splashGraphics = self.attachAsset('objPSplash', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var ObjSandDust = Container.expand(function () {
	var self = Container.call(this);
	var sandDustGraphics = self.attachAsset('objSandDust', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.alpha = 1.0;
	self.update = function () {
		self.y -= 1; // Move upwards
		self.alpha -= 0.01; // Gradually disappear over 2 seconds (60 frames per second)
		if (self.alpha <= 0) {
			self.destroy(); // Destroy the object when fully transparent
		}
	};
});
var Seagull = Container.expand(function () {
	var self = Container.call(this);
	var seagullGraphics = self.attachAsset('objSeagull', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5 * Math.pow(1.2, Math.floor(score / 65)) * (1 + Math.floor(score / 65) * 0.1);
	self.direction = 1;
	self.diving = false;
	self.diveTime = 0;
	self.diveDuration = 60; // Total duration of the dive in frames
	self.startX = 0;
	self.startY = 0;
	self.endX = 0;
	self.endY = 2732 - seagullGraphics.height / 2 - 200; // Target Y position for the dive
	self.returning = false;
	self.update = function () {
		if (self.diving) {
			self.diveTime++;
			var t = self.diveTime / self.diveDuration; // Normalized time (0 to 1)
			self.x = (1 - t) * self.startX + t * self.endX; // Linear horizontal movement
			self.y = (1 - t) * self.startY + t * self.endY; // Keep vertical movement unchanged
			divetoeat.visible = 0; // Set visibility of divetoeat to 0 when seagull dives
			if (self.diveTime >= self.diveDuration) {
				self.diveTime = 0;
				self.diving = false;
				self.returning = true; // Start returning to original position
				gustSpawned = false; // Reset gustSpawned flag
				self.startX = self.x; // Update startX to the current X
				self.startY = self.y; // Update startY to the current Y (bottom of the dive)
				self.endY = 475; // Return to the original Y position
				self.endX = self.startX + self.speed * self.direction * self.diveDuration / 2; // Move further ahead
			}
		} else if (self.returning) {
			self.diveTime++;
			var t = self.diveTime / self.diveDuration; // Normalized time (0 to 1)
			self.x = (1 - t) * self.startX + t * self.endX; // Linear horizontal movement back
			self.y = (1 - t) * self.startY + t * self.endY; // Keep vertical movement unchanged
			if (self.diveTime >= self.diveDuration) {
				self.diveTime = 0;
				self.returning = false; // End the return phase
				self.diving = false; // Reset diving state
				self.startX = self.x; // Reset startX for the next dive
				self.startY = self.y; // Reset startY for the next dive
				self.endY = 2732 - seagullGraphics.height / 2 - 200; // Reset endY for the next dive
			}
		} else {
			intersecting = false;
			self.x += self.speed * self.direction;
			self.y += Math.sin(LK.ticks / 10) * 5; // Add a hover effect
			// Check if seagull is out of bounds horizontally
			if (self.x > 2048 + seagullGraphics.width / 2 || self.x < -seagullGraphics.width / 2) {
				self.direction *= -1; // Flip direction
				self.x = Math.max(-seagullGraphics.width / 2, Math.min(2048 + seagullGraphics.width / 2, self.x)); // Keep seagull within bounds
				self.y = score > 375 ? Math.random() * (2732 * 0.5) + 100 : Math.random() * (2732 * 0.3) + 100; // Random Y position in the upper 50% of the playspace with a 100px boundary if score > 375, else 30%
				// Flip the seagull's graphics
				seagullGraphics.scale.x *= -1;
			}
		}
		// Update the score display
		scoreText.setText('Score: ' + score);
		// Decrease hungerMeter's width over time if seagull is not snatching fries or crab
		if (hungerMeter.width > 0 && (!crab || !crab.attached)) {
			if (!game.crashSoundInterval) {
				LK.getSound('SoundCrash').play();
				game.crashSoundInterval = LK.setInterval(function () {
					LK.getSound('SoundCrash').play();
				}, 10000);
			}
			if (crab && crab.attached && hungerMeter.width < 2048) {
				hungerMeter.tint = 0xffffff; // Reset color when not decreasing
				hungerMeter.width += 2; // Refill the hunger bar progressively
			}
			if (hungerMeter.width < 2048 * 0.35 && LK.ticks % 120 == 0) {
				// Trigger shake intermittently every 2 seconds
				screenShake(500, 15); // Shake for 500ms with increased intensity of 15 pixels
			}
			hungerMeter.width -= 1.5; // Decrease the rate of decrease
			hungerMeter.tint = 0xff0000; // Change color to red when decreasing
			scoreText.tint = 0xffffff; // Change score text color back to white
			LK.clearInterval(pulsateInterval); // Stop pulsating effect
			// Instantiate objImHungry for two seconds over objHead
			if (!game.objImHungry) {
				game.objImHungry = game.addChild(LK.getAsset('objImHungry', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
				game.objImHungry.x = head.x + 150;
				game.objImHungry.y = head.y - 25;
			}
			if (game.objYum) {
				game.objYum.visible = 0;
			}
			objStar.visible = 0;
			if (LK.ticks % 60 == 0) {
				updateScore(score + 1 * scoreMultiplier);
				self.speed = 10 * Math.pow(1.1, Math.floor(score / 65)) * (1 + Math.floor(score / 65) * 0.1);
				if (score >= lastScoreThreshold + 85) {
					lastScoreThreshold += 85;
					var objWaveCrash = game.addChild(LK.getAsset('objWaveCrash', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					objWaveCrash.x = 1025;
					objWaveCrash.y = 1850;
					LK.setTimeout(function () {
						objWaveCrash.destroy();
						if (!game.objSingleFish) {
							game.objSingleFish = game.addChild(LK.getAsset('objSingleFish', {
								anchorX: 0.5,
								anchorY: 0.5
							}));
							game.objSingleFish.x = 1175;
							game.objSingleFish.y = 1850;
							var startX = game.objSingleFish.x;
							var startY = game.objSingleFish.y;
							var endY = 2150;
							var duration = 60; // Duration of the animation in frames (1 second)
							var currentFrame = 0;
							game.objSingleFish.update = function () {
								if (currentFrame <= duration) {
									var t = currentFrame / duration;
									game.objSingleFish.y = (1 - t) * startY + t * endY;
									game.objSingleFish.scale.set(2.5); // Ensure it remains at 250% of its original scale
									currentFrame++;
								} else {
									// Animate looking around by flipping horizontally
									if (LK.ticks % 120 < 60) {
										game.objSingleFish.scale.set(2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing right
									} else {
										game.objSingleFish.scale.set(-2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing left
									}
								}
							};
							game.objSingleFish.initialized = true;
						}
					}, 1000); // Delay of 1 second before replacing with objSingleFish
				}
			}
			// Stop shake and pulsate effects
			LK.clearInterval(shakeInterval);
			if (pulsateIntervalActive) {
				LK.clearInterval(pulsateInterval);
				pulsateIntervalActive = false; // Reset flag when pulsateInterval is cleared
			}
		}
		// Check if fries or crab leave the playspace
		if (typeof crab !== 'undefined' && (crab.y > 2732 + crab.height / 2 || crab.y < -crab.height / 2 || crab.x > 2048 + crab.width / 2 || crab.x < -crab.width / 2)) {
			crab.destroy();
		}
		// Initialize objBackground13 every 6 to 15 seconds
		if (!game.background13Active && LK.ticks % (60 * (Math.floor(Math.random() * 10) + 6)) == 0) {
			var background13 = game.addChildAt(new Background13(), game.getChildIndex(seagull) - 1);
			background13.direction = Math.random() > 0.5 ? 1 : -1; // Randomly choose a direction
			background13.x = background13.direction > 0 ? -background13.width / 2 : 2048 + background13.width / 2; // Start from the left or right edge of the playspace
			background13.y = Math.random() * (2732 * 0.2) + 50; // Random Y position in the upper 20% of the playspace with a 50px boundary
			game.background13Active = true; // Set the flag to indicate that objBackground13 is active
			background13.update = function () {
				var background13Graphics = this.children[0]; // Access the attached asset
				this.x += this.speed * this.direction;
				// Flip the image depending on the direction
				background13Graphics.scale.x = this.direction;
				// Check if background13 is out of bounds horizontally
				if (this.x > 2048 + background13Graphics.width / 2 || this.x < -background13Graphics.width / 2) {
					this.destroy(); // Destroy background13 when it goes out of bounds
					game.background13Active = false; // Reset the flag when objBackground13 is destroyed
				}
			};
		}
		// Spawn ObjNPC01 every 15 to 25 seconds if not already active
		if (!game.npcActive && LK.ticks % (60 * (Math.floor(Math.random() * 11) + 15)) == 0) {
			var npc = game.addChildAt(new ObjNPC01(), game.getChildIndex(background3) + 1);
			if (Math.random() > 0.5) {
				npc.x = -npc.width / 2; // Start from outside the left edge of the playspace
				npc.direction = 1; // Move towards the right
				npc.children[0].scale.x *= -1; // Flip the visual horizontally
			} else {
				npc.x = 2048 + npc.width / 2; // Start from outside the right edge of the playspace
				npc.direction = -1; // Move towards the left
			}
			npc.y = 1950;
			npc.accelerated = false; // Initialize accelerated flag
			game.npcActive = true;
		}
		// Spawn objCrab every 10 seconds
		if (LK.ticks % (60 * 10) == 0) {
			crab = new ObjCrab();
			crab.attached = false; // Initialize attached state
			crab.x = -crab.width / 2; // Start from the utmost left
			game.addChildAt(crab, game.getChildIndex(background9)); // Add crab behind objBackground09
		}
		// Initialize ObjToast every 10 seconds if it does not exist
		if (LK.ticks % (60 * 10) == 0 && !game.ObjToast) {
			var ObjToast = game.addChild(LK.getAsset('ObjToast', {
				anchorX: 0.5,
				anchorY: 0.5,
				scaleX: 0.5,
				scaleY: 0.5
			}));
			ObjToast.x = 75;
			ObjToast.y = 1150;
			game.ObjToast = ObjToast;
			// Animate ObjToast
			var startX = 75;
			var startY = 1150; // Start from the bottom of the screen
			var endX = Math.random() * (2048 - ObjToast.width) + ObjToast.width / 2;
			var endY = 2090;
			var duration = 60; // Duration of the animation in frames (1 second)
			var currentFrame = 0;
			ObjToast.x = startX;
			ObjToast.y = startY;
			ObjToast.update = function () {
				if (currentFrame <= duration) {
					var t = currentFrame / duration;
					ObjToast.x = (1 - t) * startX + t * endX;
					ObjToast.y = (1 - t) * startY + t * endY - 300 * t * (1 - t); // Parabolic movement
					ObjToast.scale.set(0.5 + 0.5 * t); // Gradually scale by 50%
					currentFrame++;
				}
				// Check for intersection with objSeagull
				if (ObjToast.intersects(seagull)) {
					// Destroy ObjToast
					ObjToast.destroy();
					game.ObjToast = null;
					// Play either SEat or Crunch sound
					var sounds = ['SEat', 'Crunch'];
					var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
					LK.getSound(randomSound).play();
					// Instantiate ObjMunch at ObjToast's position
					var ObjMunch = game.addChild(LK.getAsset('ObjMunch', {
						anchorX: 0.5,
						anchorY: 0.5
					}));
					ObjMunch.x = ObjToast.x;
					ObjMunch.y = ObjToast.y;
					// Destroy ObjMunch after 1 second
					LK.setTimeout(function () {
						ObjMunch.destroy();
					}, 1000);
					// Refill hunger bar by 10%
					hungerMeter.width = Math.min(hungerMeter.width + 204.8, 2048);
					// Add +10 to the score
					score += 10;
					// Flash screen yellow for 0.5 seconds
					LK.effects.flashScreen(0xffff00, 500);
					// Update score display
					scoreText.setText('Score: ' + score);
				}
			};
		}
		// Trigger game over when hungerMeter's width reaches 0
		if (hungerMeter.width <= 0) {
			if (game.crashSoundInterval) {
				LK.clearInterval(game.crashSoundInterval);
				game.crashSoundInterval = null;
			}
			var redOverlay = game.addChild(LK.getAsset('objRedOverlay', {
				anchorX: 0.5,
				anchorY: 0.5,
				alpha: 0.1
			}));
			redOverlay.x = 1024;
			redOverlay.y = 1366;
			LK.setTimeout(function () {
				var objDizzy = game.addChild(LK.getAsset('objDizzy', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
				objDizzy.x = 1024;
				objDizzy.y = 1366;
				LK.setScore(score);
				scoreText.visible = false; // Set visibility of score to 0 during game over
				LK.setTimeout(function () {
					LK.showGameOver(); //Calling this will destroy the 'Game' and reset entire game state.
				}, 3000); // Delay game over by 3 seconds
			}, 100); // Delay game over by 0.1 seconds
		}
		// Attach objContactPoint to the center of seagull
		objContactPoint.x = self.x;
		objContactPoint.y = self.y + 200;
		// Check for intersection with objSingleFish
		if (objContactPoint.intersects(game.objSingleFish)) {
			// Destroy objSingleFish
			game.objSingleFish.destroy();
			game.objSingleFish = null;
			// Play either SEat or Crunch sound
			var sounds = ['SEat', 'Crunch'];
			var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
			LK.getSound(randomSound).play();
			// Instantiate ObjCartF at objSingleFish's position
			var objCartF = game.addChildAt(new ObjCartF(), game.children.length - 1);
			objCartF.x = objContactPoint.x;
			objCartF.y = objContactPoint.y;
			// Destroy ObjCartF after 2 seconds
			LK.setTimeout(function () {
				objCartF.destroy();
			}, 2000);
			// Refill the hunger bar by 15%
			hungerMeter.width = Math.min(hungerMeter.width + 307.2, 2048);
			// Flash screen yellow for 0.5 seconds
			LK.effects.flashScreen(0xffff00, 500);
			// Add 15 to the score
			score += 15;
			scoreText.setText('Score: ' + score);
		}
		// Check for intersection with objCrab
		if (objContactPoint.intersects(crab) && !crab.seatSoundPlayed) {
			crab.seatSoundPlayed = true; // Ensure sound is only played once
			// Play either SEat or Crunch sound
			var sounds = ['SEat', 'Crunch'];
			var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
			LK.getSound(randomSound).play();
		}
	};
	// Remove the down event from the seagull as we want to trigger it from anywhere in the playspace
});
var SeagullShadow = Container.expand(function () {
	var self = Container.call(this);
	var shadowGraphics = self.attachAsset('objSeagullShadow', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0.5
	});
	self.update = function () {
		self.x = seagull.x + 20; // Offset shadow slightly
		self.y = 2575 - 100; // Keep shadow at the bottom of the screen
		// Calculate scale based on seagull's Y position
		var maxScale = 3;
		var minScale = 1;
		var maxY = 2732 - seagull.height / 2 - 200;
		var minY = 475;
		var t = (seagull.y - minY) / (maxY - minY);
		var scale = minScale + t * (maxScale - minScale);
		self.scale.set(scale, scale);
	};
});
var Smoke = Container.expand(function () {
	var self = Container.call(this);
	var smokeGraphics = self.attachAsset('objSmoke', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.update = function () {
		self.y += Math.sin(LK.ticks / 60) * 0.2; // Reduced floating effect
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
function updateScore(newScore) {
	score = newScore;
	scoreText.setText('Score: ' + score);
	if (score >= lastScoreThreshold + 80) {
		lastScoreThreshold += 80;
		var objWaveCrash = game.addChild(LK.getAsset('objWaveCrash', {
			anchorX: 0.5,
			anchorY: 0.5
		}));
		objWaveCrash.x = 1025;
		objWaveCrash.y = 1850;
		LK.setTimeout(function () {
			objWaveCrash.destroy();
			if (!game.objSingleFish) {
				game.objSingleFish = game.addChild(LK.getAsset('objSingleFish', {
					anchorX: 0.5,
					anchorY: 0.5
				}));
			}
			if (!game.objSingleFish.initialized) {
				game.objSingleFish.x = 1025;
				game.objSingleFish.y = 1850;
				var startX = game.objSingleFish.x;
				var startY = game.objSingleFish.y;
				var endY = 2100;
				var duration = 60; // Duration of the animation in frames (1 second)
				var currentFrame = 0;
				game.objSingleFish.update = function () {
					if (currentFrame <= duration) {
						var t = currentFrame / duration;
						game.objSingleFish.x = (1 - t) * startX + t * endX;
						game.objSingleFish.y = (1 - t) * startY + t * endY;
						game.objSingleFish.y = (1 - t) * startY + t * endY;
						game.objSingleFish.scale.set(2.5); // Ensure it remains at 250% of its original scale
						currentFrame++;
					} else {
						// Animate looking around by flipping horizontally
						if (LK.ticks % 120 < 60) {
							game.objSingleFish.scale.set(2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing right
						} else {
							game.objSingleFish.scale.set(-2.5, game.objSingleFish.scale.y); // Ensure it remains at 250% of its original scale while facing left
						}
					}
				};
				game.objSingleFish.initialized = true;
			}
			if (!game.objSingleFish.initialized) {
				game.objSingleFish.x = 1025;
				game.objSingleFish.y = 1850;
				var startX = game.objSingleFish.x;
				var startY = game.objSingleFish.y;
				var endX = 1475;
				var endY = 2000;
				var duration = 60; // Duration of the animation in frames (1 second)
				var currentFrame = 0;
				game.objSingleFish.update = function () {
					if (currentFrame <= duration) {
						var t = currentFrame / duration;
						game.objSingleFish.y = (1 - t) * startY + t * endY;
						game.objSingleFish.scale.set(1 + 1.5 * t); // Scale up by 250%
						currentFrame++;
					} else {
						// Animate looking around by flipping horizontally
						if (LK.ticks % 60 < 30) {
							game.objSingleFish.scale.x = 1; // Face right
						} else {
							game.objSingleFish.scale.x = -1; // Face left
						}
					}
				};
				game.objSingleFish.initialized = true;
			}
		}, 1000); // Delay of 1 second before replacing with objSingleFish
	}
}
game.npcActive = false;
var scoreMultiplier = 1; // Initialize scoreMultiplier variable
var lastScoreThreshold = 0; // Variable to track the last score threshold crossed
function waveEffect() {
	if (crab && crab.attached) {
		game.y += Math.sin(LK.ticks / 30) * 1; // Apply further reduced wave effect
		game.x += Math.cos(LK.ticks / 30) * 0.5; // Further lower the horizontal wave effect
		if (objMultipliertext.visible === 0) {
			objMultipliertext.visible = 1; // Set visibility to 1 when waveEffect is active
			LK.getSound('Party').play(); // Play Party sound when objMultipliertext becomes visible
		}
		objMultipliertext.rotation += 0.05; // Rotate objMultipliertext
		scoreMultiplier = 2; // Enable score multiplier
		LK.setTimeout(waveEffect, 16); // Continue wave effect every frame (60 FPS)
	} else {
		game.y = 0; // Reset playspace position to original
		game.x = 0; // Reset playspace position to original
		if (objMultipliertext.visible === 1) {
			objMultipliertext.visible = 0; // Set visibility to 0 when waveEffect is not active
			LK.getSound('Party').stop(); // Stop Party sound when objMultipliertext becomes invisible
		}
		objMultipliertext.rotation += 0.05; // Rotate objMultipliertext
		scoreMultiplier = 1; // Disable score multiplier
	}
}
function flashScreenDuringSnatch() {
	var colors = [0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff];
	var colorIndex = 0;
	function flash() {
		if (crab && crab.attached) {
			LK.effects.flashScreen(colors[colorIndex], 500);
			colorIndex = (colorIndex + 1) % colors.length;
			LK.setTimeout(flash, 500);
		}
	}
	function waveEffect() {
		if (crab && crab.attached) {
			game.y += Math.sin(LK.ticks / 30) * 1; // Apply further reduced wave effect
			game.x += Math.cos(LK.ticks / 30) * 0.5; // Further lower the horizontal wave effect
			LK.setTimeout(waveEffect, 16); // Continue wave effect every frame (60 FPS)
		} else {
			game.y = 0; // Reset playspace position to original
			game.x = 0; // Reset playspace position to original
		}
	}
	flash();
	waveEffect();
}
function pulsateScore() {
	var originalTint = scoreText.tint;
	var pulsateDuration = 1000; // Duration of one pulsate cycle in milliseconds
	function pulsate() {
		scoreText.tint = 0x00ff00; // Change to green
		LK.setTimeout(function () {
			scoreText.tint = originalTint; // Change back to original color
		}, pulsateDuration / 2);
	}
	pulsateInterval = LK.setInterval(pulsate, pulsateDuration);
	pulsateIntervalActive = true; // Set flag to true when pulsateInterval is active
	// Stop pulsating after a certain condition (e.g., hunger bar is full)
	// LK.clearInterval(pulsateInterval);
}
LK.setInterval(function () {
	var droplet = game.addChild(new ObjPDroplet());
	droplet.x = seagull.x;
	droplet.y = seagull.y;
	droplet.direction = seagull.direction; // Set the direction of the droplet to match the seagull
}, (Math.random() * 10 + 10) * 1000); // Random interval between 10 to 20 seconds
var scaleDirectionRadio = 1;
var scaleDirectionDive = 1;
LK.setInterval(function () {
	// Unique scaling for objRadio
	var scaleFactorRadio = 1 + scaleDirectionRadio * 0.005;
	objRadio.scale.x *= scaleFactorRadio;
	objRadio.scale.y *= scaleFactorRadio;
	if (objRadio.scale.x >= 1.15 || objRadio.scale.x <= 0.85) {
		scaleDirectionRadio *= -1;
	}
	// Unique scaling for divetoeat
	var scaleFactorDive = 1 + scaleDirectionDive * 0.01;
	divetoeat.scale.x *= scaleFactorDive;
	divetoeat.scale.y *= scaleFactorDive;
	if (divetoeat.scale.x >= 1.2 || divetoeat.scale.x <= 0.8) {
		scaleDirectionDive *= -1;
	}
}, 16); // Update every frame for smoother animation
function screenShake(duration, intensity) {
	var originalX = game.x;
	var originalY = game.y;
	var shakeInterval = LK.setInterval(function () {
		game.x = originalX + (Math.random() - 0.5) * intensity;
		game.y = originalY + (Math.random() - 0.5) * intensity;
	}, 16); // Shake every frame (60 FPS)
	LK.setTimeout(function () {
		LK.clearInterval(shakeInterval);
		game.x = originalX;
		game.y = originalY;
	}, duration);
}
var crab; // Declare crab in the global scope
var activeGrawlix = null; // Declare a global variable to track the active objGrawlix
var snatchStartTick = 0; // Initialize snatchStartTick variable
var objContactPoint; // Declare objContactPoint in the global scope
var gustSpawned = false; // Flag to track if objGust has been spawned
var gustCooldown = false; // Flag to track if the cooldown period is active
var background = game.addChild(LK.getAsset('ObjBackground01', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background.x = 1024;
background.y = 1366;
var objSmoke = game.addChild(new Smoke());
objSmoke.x = 975;
objSmoke.y = 875;
var objFish = game.addChild(new ObjFish());
objFish.x = 1024;
objFish.y = 1366; // Position objFish at y 1366
objFish.visible = true; // Ensure objFish is visible
var background11 = game.addChild(LK.getAsset('objBackground11', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background11.x = 25;
background11.y = 1300;
var background10 = game.addChild(LK.getAsset('objBackground10', {
	anchorX: 0.5,
	anchorY: 0.5
}));
var divetoeat = LK.gui.top.addChild(LK.getAsset('DivetoEat', {
	anchorX: 0.5,
	anchorY: 0.5
}));
divetoeat.x = 0; // Center horizontally
divetoeat.y = 900; // Center vertically
// Removed duplicate objRadio instantiation
var objMusica = game.addChild(new ObjMusica());
objMusica.x = 400;
objMusica.y = 1100;
background10.x = 125;
background10.y = 2500;
var background9 = game.addChild(LK.getAsset('objBackground09', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background9.x = 450;
background9.y = 2490;
var background8 = game.addChild(LK.getAsset('objBackground08', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background8.x = 1475;
background8.y = 2455;
var background7 = game.addChild(new Background07());
background7.x = 150;
background7.y = 2650;
var background6 = game.addChild(new Background06());
background6.x = 1175;
background6.y = 1035;
var background4 = game.addChild(new Background04());
var objSos = game.addChild(LK.getAsset('ObjSos', {
	anchorX: 0.5,
	anchorY: 0.5
}));
objSos.rotation = -0.436332; // Rotate by -25 degrees (in radians)
objSos.x = 1110;
objSos.y = 850;
objSos.update = function () {
	objSos.y += Math.sin(LK.ticks / 30) * 0.5; // Further reduced vertical wave effect
	objSos.x += Math.cos(LK.ticks / 60) * 0.25; // Further reduced horizontal wave effect
};
var background5 = game.addChild(LK.getAsset('objBackground05', {
	anchorX: 0.5,
	anchorY: 0.5
}));
var objRadio = game.addChild(LK.getAsset('objRadio', {
	anchorX: 0.5,
	anchorY: 0.5
}));
objRadio.x = 265;
objRadio.y = 1165;
var background12 = game.addChild(LK.getAsset('objBackground12', {
	anchorX: 0.5,
	anchorY: 0.5
}));
background12.x = 850;
background12.y = 3335;
background5.x = 165;
background5.y = 1925;
background4.x = 1024;
background4.y = 990;
var background2 = game.addChild(new Background02());
background2.x = 1790;
background2.y = 1766;
var background3 = game.addChildAt(LK.getAsset('objBackground03', {
	anchorX: 0.5,
	anchorY: 0.5
}), game.getChildIndex(background2) - 1);
background3.x = 1824;
background3.y = 2166;
var seagull = game.addChild(new Seagull());
var seagullShadow = game.addChild(new SeagullShadow());
intersecting = false; // Reset intersecting flag
crabSmokeInstantiated = false; // Reset crab smoke flag
gustSpawned = false; // Reset gust spawned flag
gustCooldown = false; // Reset gust cooldown flag
seagull.x = -seagull.width / 2; // Start from outside the left edge of the playspace
seagull.y = 475;
if (typeof crab !== 'undefined') {
	crab.attached = false; // Reset attached state for crab
	crab.destroy(); // Ensure the crab is destroyed and reset
}
var hungerMeter = game.addChild(LK.getAsset('objHungerMeter', {
	anchorX: 0.5,
	anchorY: 0.5,
	width: 2048
}));
hungerMeter.x = 1024;
hungerMeter.y = 2650;
var objMultipliertext = game.addChildAt(LK.getAsset('objMultipliertext', {}), game.getChildIndex(background2) + 1);
objMultipliertext.x = 850;
objMultipliertext.y = 1250;
objMultipliertext.visible = 0; // Set visibility to 0 at the start of the game
objContactPoint = game.addChild(LK.getAsset('objContactPoint', {
	anchorX: 0.5,
	anchorY: 0.5,
	alpha: 0
}));
objContactPoint.x = 1024;
objContactPoint.y = 1366;
// Create a text object to display the score
var scoreText = new Text2('Score: 0', {
	size: 80,
	fill: "#ffffff",
	font: "Impact"
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var score = 0;
scoreText.visible = true; // Reset visibility of score to 1 when game starts
game.background13Active = false; // Flag to track if objBackground13 is active
// Instantiate objStomach where objHungerFrame is and remove objHungerFrame from the playspace
var head = game.addChild(LK.getAsset('objHead', {
	anchorX: 0.5,
	anchorY: 0.5
}));
head.x = 1050;
head.y = 2635;
var objStar = game.addChildAt(LK.getAsset('objStar', {
	anchorX: 0.5,
	anchorY: 0.5
}), game.getChildIndex(head) - 1);
objStar.x = head.x - 45;
objStar.y = head.y - head.height / 2 - objStar.height / 2 + 235;
;
game.down = function (x, y, obj) {
	if (!seagull.diving && !seagull.returning && (!crab || !crab.attached)) {
		seagull.diving = true;
		seagull.diveTime = 0;
		seagull.startX = seagull.x;
		seagull.startY = seagull.y;
		seagull.endX = seagull.startX + seagull.speed * seagull.direction * seagull.diveDuration / 2;
	}
	if (!gustSpawned && !gustCooldown) {
		var objGust = game.addChildAt(new ObjGust(), game.getChildIndex(seagull));
		objGust.x = seagull.x;
		objGust.y = seagull.y;
		LK.setTimeout(function () {
			objGust.destroy();
		}, 100);
		gustSpawned = true;
		gustCooldown = true;
		LK.setTimeout(function () {
			gustCooldown = false;
		}, 2000);
	}
	// Play a random sound (snoise, snoise02, snoise03)
	var sounds = ['SNoise', 'SNoise02', 'SNoise03'];
	var randomSound = sounds[Math.floor(Math.random() * sounds.length)];
	LK.getSound(randomSound).play();
};
var pulsateInterval;
var pulsateIntervalActive = false; // Track if pulsateInterval is active
var shakeInterval;
 Create a cartoon-style illustration of the ocean and an empty sandy beach from the perspective of a person standing on the beach. The goal is to capture a lively and playful location.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of fries in a brown bag. The goal is to capture a lively and playful object. Front perspective. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of white drop of paint. The goal is to capture a lively and playful paint.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of white splash of paint. The goal is to capture a lively and playful paint. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 Create a cartoon-style illustration of a stomach The goal is to capture a lively and playful stomach... Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of palm trees. The goal is to capture a lively and playful location. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of beach rocks. The goal is to capture a lively and playful location. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of a wooden no feeding and no littering sign on a sandy stake.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of a speech bubble that is written I'm Hungry!. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of a giant squid menacingly staring... Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 Create a cartoon-style illustration of palm trees leaves.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 
 
 
 Create a cartoon-style illustration of a dark silhouette of a seaplane, side profile. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 Create a cartoon-style illustration of smoke.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 Create a cartoon-style illustration of a mix of colorful music notes. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 create a cartoon-style illustration of a crab from the back. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 create a cartoon-style illustration of a sand cloud. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 create a cartoon-style illustration of an explosion of stars. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 create a cartoon-style illustration of an speech bubble with the word "Yum!". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 make it more colorful in the top portion of the bricks
 Create a cartoon-style illustration of a mix of a beach radio. Front View. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a close-up cartoon-style illustration of an dizzy seagull with his tongue sticking out on an empty sandy beach. The goal is to capture a lively and playful game over screen. Make sure 'game over' is written.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a close-up cartoon-style illustration of the letters "sos" in black. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 Create a cartoon-style illustration of a smiling face of a seagul with black shades with the words "Time Bonus" at the bottom of it. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 Create a cartoon-style illustration of a seagul's face chomping down on a slice of bread make it comical. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 create a cartoon-style illustration of an red girly angry emoji. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 create a cartoon-style illustration of a seagul's face chomping down on fries make it comical.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 create a cartoon-style illustration of a seagul's face chomping down on a fish make it comical.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 three words 'dive to eat' in a cartoonish style with an arrow pointing down. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.