Code edit (1 edits merged)
Please save this source code
User prompt
The city should move half as slow as the ocean.
User prompt
the city should move just as slow as the ocean.
User prompt
The city image should only ever be on-screen at once. They should be back-to-back so that there are no gaps between the tiles.
Code edit (1 edits merged)
Please save this source code
User prompt
The city image should be at 30% opacity.
User prompt
The city layer should take up the entire horizontal screen space.
User prompt
The city layer should be directly above the ocean with no gap.
User prompt
The new city set should be a solid layer similar to the ocean. There are no gaps between it and it loops like the ocean.
User prompt
Sorry, the last thing I mentioned for the city, those are not clouds. That is a whole new tile set that is the same size as the clouds.
User prompt
Let's create a new layer right above the ocean layer that will serve as a city in the background. This will also have no collision. The tiles should all be the same size as the cloud tiles.
User prompt
Actually, let's make the clouds at 30% opacity.
User prompt
The cloud should be at 60% opacity.
User prompt
The clouds should appear at varying heights randomly.
User prompt
The clouds should be five times the size they are currently.
User prompt
Similar to the ocean layer that's moving from left to right slowly, we want to create a cloud layer that is also moving slowly but about twice the speed of the ocean layer from right to left.
User prompt
The yum and plus 10 text should be bright orange.
User prompt
We should play a splash sound when the splash effect is triggered.
User prompt
Anytime the player collides with the top part of the ocean layer, we should create a splash effect.
User prompt
Whenever the player's pelican goes into the ocean layer, they should go to 80% opaque opacity.
User prompt
The fish should have an alpha of about 80% opaque.
User prompt
The ocean layer currently is not looping. There should be another ocean layer on the end of it so you never see a gap between tiles.
User prompt
The ocean layer should move a little bit faster from right to left, but it should loop so there's never a gap. The ocean layer is a permanent background.
User prompt
The ocean layer should also move very slowly from right to left.
User prompt
Let's slow the motion of the ocean layer down a bit.
/****
* Classes
****/
// Fish class
var Fish = Container.expand(function () {
var self = Container.call(this);
var fishGraphics = self.attachAsset('pelican', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.direction = 1; // 1 for right, -1 for left
self.update = function () {
self.x += self.speed * self.direction;
if (self.x > 2048 || self.x < 0) {
self.direction *= -1; // Change direction
fishGraphics.scale.x *= -1; // Flip the direction of the image
}
};
});
// The assets will be automatically created and loaded by the LK engine
// Jet class
var Jet = Container.expand(function () {
var self = Container.call(this);
var jetGraphics = self.attachAsset('jet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 15;
self.update = function () {
self.x -= self.speed;
if (self.x < -100) {
self.destroy();
}
};
});
// Obstacle class
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -5;
self.update = function () {
self.x += self.speed;
self.children.forEach(function (child) {
if (child instanceof Text2) {
child.x = self.x;
}
});
if (self.x < -100) {
self.destroy();
}
};
self.createPipe = function (gapY, gapHeight) {
var topPipe = LK.getAsset('obstacle', {
anchorX: 0.5,
anchorY: 1.0,
height: gapY
});
var bottomPipe = LK.getAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.0,
y: gapY + gapHeight,
height: 2732 - (gapY + gapHeight)
});
self.addChild(topPipe);
self.addChild(bottomPipe);
};
});
// Pelican class
var Pelican = Container.expand(function () {
var self = Container.call(this);
var pelicanGraphics = self.attachAsset('pelicanSVG', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.update = function () {
self.speed += 0.5; // Gravity effect
self.y += self.speed;
if (self.y < 0) {
self.y = 0;
}
if (self.y > 2732) {
LK.effects.flashScreen(0xff0000, 1000);
LK.stopMusic();
LK.stopMusic();
LK.showGameOver();
}
};
self.dive = function () {
self.speed = 10; // Increase speed for diving
};
self.fly = function () {
self.speed = -15; // Increase upward speed for flying
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
game.pipesPassed = 0;
game.jetsAppear = false;
// Forest green color
// No start screen, game begins immediately
// Forest green color for pipes
// Forest green color for pipes
// Add a light blue layer at the bottom 20% of the screen
var bottomLayer = LK.getAsset('ocean', {
width: 2048,
height: 2732 * 0.2,
color: 0xADD8E6,
// Light blue color
// Bright pink color
anchorX: 0.5,
anchorY: 0.0
});
bottomLayer.x = 2048 / 2;
bottomLayer.y = 2732 * 0.8;
game.addChild(bottomLayer);
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var pelican = game.addChild(new Pelican());
var fish = game.addChild(new Fish());
fish.x = 1024; // Start in the middle of the screen
fish.y = 2732 * 0.9; // Position in the bottom layer
pelican.speed = 0; // Initial speed
pelican.x = 500;
pelican.y = 1366;
var obstacles = [];
var oceanSwayDirection = 1;
var oceanSwaySpeed = 0.5;
game.update = function () {
// Add a gentle sway to the ocean layer
bottomLayer.x += oceanSwaySpeed * oceanSwayDirection * 0.5;
bottomLayer.y += oceanSwaySpeed * oceanSwayDirection * 0.5;
if (bottomLayer.x > 2048 / 2 + 0.5 || bottomLayer.x < 2048 / 2 - 0.5) {
oceanSwayDirection *= -1; // Change direction
}
if (LK.ticks % 400 == 0 && !game.jetsAppear) {
var newObstacle = new Obstacle();
newObstacle.x = 2048;
var gapY = Math.random() * (2000 - 600); // Random gap position
var pelicanHeight = LK.getAsset('pelican', {}).height;
var maxGapHeight = pelicanHeight * 10;
var initialGapHeight = 2000 * 0.2;
var minGapHeight = initialGapHeight / 2;
var gapHeight = Math.max(minGapHeight, Math.min(initialGapHeight, maxGapHeight) - LK.getScore() * 0.1); // Decrease gapHeight over time but not less than half its initial size
newObstacle.createPipe(gapY, gapHeight);
obstacles.push(newObstacle);
game.addChild(newObstacle);
game.pipesPassed++;
if (game.pipesPassed % 8 == 0) {
game.jetsAppear = true;
game.jetsTimer = 0;
LK.getSound('alert').play();
}
}
for (var i = obstacles.length - 1; i >= 0; i--) {
if (obstacles[i].x < -50) {
obstacles[i].destroy();
obstacles.splice(i, 1);
LK.setScore(LK.getScore() + 1); // Add 1 point to the score
scoreTxt.setText(LK.getScore()); // Update the score text
}
if (pelican.intersects(obstacles[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.stopMusic();
LK.getSound('arcadefail').play();
LK.showGameOver();
}
fish.update();
if (pelican.intersects(fish)) {
fish.destroy();
fish = game.addChild(new Fish());
fish.x = 1024; // Reset fish position
fish.y = 2732 * 0.9;
LK.setScore(LK.getScore() + 10); // Add 10 points to the score
scoreTxt.setText(LK.getScore()); // Update the score text
LK.getSound('specialscore1').play(); // Play the sound Special Score 1
// Create and display the "YUM" text
var yumText = new Text2('YUM', {
size: 150,
fill: "#ffffff"
});
yumText.anchor.set(0.5, 0);
yumText.x = pelican.x;
yumText.y = pelican.y;
yumText.alpha = 1;
yumText.update = function () {
this.y -= 2; // Move the text upwards
this.alpha -= 0.02; // Fade out the text
if (this.alpha <= 0) {
this.destroy();
}
};
game.addChild(yumText);
// Create and display the "+10" text
var plusTenText = new Text2('+10', {
size: 150,
fill: "#ffffff"
});
plusTenText.anchor.set(0.5, 0);
plusTenText.x = pelican.x;
plusTenText.y = pelican.y - 200; // Position it above the "YUM" text
plusTenText.alpha = 1;
plusTenText.update = function () {
this.y -= 2; // Move the text upwards
this.alpha -= 0.02; // Fade out the text
if (this.alpha <= 0) {
this.destroy();
}
};
game.addChild(plusTenText);
}
// Add the jet to the game
if (game.jetsAppear) {
game.jetsTimer++;
if (game.jetsTimer >= 300) {
// 5 seconds have passed
game.jetsAppear = false;
} else if (LK.ticks % 60 == 0) {
// Every second
if (game.jetsTimer == 0) {
// When the first jet appears
// Play the alert sound
LK.getSound('alert').play();
var crowsText = new Text2('CROWS!', {
size: 200,
fill: "#ffffff"
});
crowsText.anchor.set(0.5, 0.5);
crowsText.x = 2048 / 2;
crowsText.y = 2732 / 2;
game.addChild(crowsText);
// Remove the "CROWS!" text after 2 seconds
LK.setTimeout(function () {
crowsText.destroy();
}, 2000);
}
for (var i = 0; i < 3; i++) {
var newJet = new Jet();
newJet.x = 2048 + i * 500; // Start from the right side of the screen and spread out the jets
newJet.y = Math.random() * 2732; // Random y position
game.addChild(newJet);
}
}
}
// Check for collision with the jet
for (var i = game.children.length - 1; i >= 0; i--) {
if (game.children[i] instanceof Jet && pelican.intersects(game.children[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
// Increment score for every two seconds the pelican stays alive
if (LK.ticks % 120 == 0) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
}
}
};
game.down = function (x, y, obj) {
pelican.fly();
LK.getSound('flap').play();
// Create and display the "FLAP" image
var flapImage = LK.getAsset('flapImage', {
anchorX: 0.5,
anchorY: 0.5
});
flapImage.x = pelican.x;
flapImage.y = pelican.y;
flapImage.alpha = 1;
flapImage.update = function () {
this.alpha -= 0.25; // Fade out the image
if (this.alpha <= 0) {
this.destroy();
pelican.visible = true; // Make the pelican visible again
}
};
game.addChild(flapImage);
pelican.visible = false; // Hide the pelican when the flap image is on screen
};
game.up = function (x, y, obj) {
// No action needed on mouse up
};
// Start the music when the game begins
LK.playMusic('soundtrack', {
volume: 0.3
});
8-bit profile of pelican flying straight. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit profile of fish for arcade game. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit profile of pelican flapping it's wings downward. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit silhouette of tugboat. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit "YUM" dialog bubble. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.