/****
* 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.