Code edit (2 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
๐ฅ 1. Power-Up System Types of Power-Ups: ๐ซ Rapid Fire: Reduces shoot cooldown to 0.5 seconds for 10 seconds. Trigger: Spawn every 20-30 seconds at random lane. Effect: Player shoot rate increases. ๐ก๏ธ Shield: Blocks 1 enemy bullet. Trigger: Drops from a killed enemy with 15% chance. Effect: Absorbs the next hit, then disappears. ๐ฅ Explosive Shot: Your next shot passes through the wall and kills all enemies in its lane. Trigger: Spawns every 60 seconds. Effect: One-time use. Activates on next shot. --- โ๏ธ 2. Mini Boss Enemies Mini Boss Rules: Appears every 30 seconds. Takes 3 hits to kill. Deals 20 damage to the wall per hit. Moves slightly faster than regular enemies. Drops a random Power-Up when killed. --- ๐ง 3. Enemy Lane Behavior (AI Types) Type A: Stays in the same lane. Type B: Randomly switches lanes every 2 seconds. Type C: Tracks the playerโs current lane and follows. Implementation Tip: Every 2s: If Enemy.Type == B โ Randomly change lane If Enemy.Type == C โ Move toward player's lane --- ๐ฒ 4. Random Events Sandstorm Event: Happens every 45-60 seconds. Lasts for 10 seconds. Reduces visibility (add sand overlay). Enemies move faster but cannot shoot during the storm. Trigger: Every 60s Effect: - Add screen filter - EnemySpeed += 25% - EnemyShooting = disabled --- ๐งฑ 5. Wall Repair System Show โRepair Wallโ button when Score โฅ 50. Player can spend 50 points to restore +50 wall HP. Button disappears if score < 50 or wall is full. If PlayerScore >= 50 AND WallHP < 250: Show Button "Repair Wall" OnClick: WallHP += 50 PlayerScore -= 50 โช๐ก Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Uncaught ReferenceError: tween is not defined' in or related to this line: 'tween(weapon, {' Line Number: 152 โช๐ก Consider importing and using the following plugins: @upit/tween.v1
User prompt
Remove the pause button and everything related to it
User prompt
remove leaderboard codes everything and fix game pause
Code edit (3 edits merged)
Please save this source code
User prompt
OK! Remove the leaderboard button and add a game pause button and add a small animated weapon to both the enemy and player's hand (the asset of the enemy weapon and the player's weapon should be different) and let the bullets come out of those guns โช๐ก Consider importing and using the following plugins: @upit/tween.v1
User prompt
put the leaderboard button a little lower then fix the leaderboard logic โช๐ก Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Uncaught TypeError: LK.pause is not a function' in or related to this line: 'LK.pause();' Line Number: 228
User prompt
Please fix the bug: 'Uncaught TypeError: LK.isPaused is not a function' in or related to this line: 'gameWasPaused = LK.isPaused();' Line Number: 229
User prompt
can you add a leaderboard button to the game? (when you click it, the game pauses, when you click it again, the leaderboard screen goes away and the game continues where it left off) โช๐ก Consider importing and using the following plugins: @upit/storage.v1
Code edit (1 edits merged)
Please save this source code
User prompt
make fire button as an asset
User prompt
Make the wall's health, score and kill count more cool with pixel colors instead of normal text. โช๐ก Consider importing and using the following plugins: @upit/tween.v1
User prompt
Make the background color orange by adding assets
User prompt
add a health bar to the wall so that enemies can't pass through it (bullets can) so that enemies start dealing damage when they get right under the wall, not with their bullets, and add a background that covers everything orange color โช๐ก Consider importing and using the following plugins: @upit/tween.v1
User prompt
delete road
Code edit (2 edits merged)
Please save this source code
User prompt
Make a background so that the enemies don't always go to the player's side, they go to random sides, and add life to the wall so that the enemies' bullets pass through the wall but not for themselves They have to go through the wall, when they get right under the wall, the wall starts to get damaged and after a while it breaks. โช๐ก Consider importing and using the following plugins: @upit/tween.v1
Initial prompt
Please save this source code
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('enemyBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 15; self.update = function () { self.y += self.speed; }; return self; }); var EnemyCowboy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemyCowboy', { anchorX: 0.5, anchorY: 0.5 }); self.lane = 1; self.speed = 3; self.lastShot = 0; self.shootCooldown = 180; // 3 seconds at 60fps self.targetLane = 1; self.laneChangeSpeed = 8; self.update = function () { self.y += self.speed; // Move towards target lane var targetX = getLaneX(self.targetLane); if (Math.abs(self.x - targetX) > self.laneChangeSpeed) { if (self.x < targetX) { self.x += self.laneChangeSpeed; } else { self.x -= self.laneChangeSpeed; } } else { self.x = targetX; self.lane = self.targetLane; } // Shooting logic self.lastShot++; if (self.lastShot >= self.shootCooldown) { self.lastShot = 0; // Create enemy bullet var bullet = new EnemyBullet(); bullet.x = self.x; bullet.y = self.y; enemyBullets.push(bullet); game.addChild(bullet); } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('cowboy', { anchorX: 0.5, anchorY: 0.5 }); self.lane = 1; self.targetLane = 1; self.laneChangeSpeed = 12; self.lastShot = 0; self.shootCooldown = 72; // 1.2 seconds at 60fps self.update = function () { // Move towards target lane var targetX = getLaneX(self.targetLane); if (Math.abs(self.x - targetX) > self.laneChangeSpeed) { if (self.x < targetX) { self.x += self.laneChangeSpeed; } else { self.x -= self.laneChangeSpeed; } } else { self.x = targetX; self.lane = self.targetLane; } self.lastShot++; }; self.moveLeft = function () { if (self.targetLane > 0) { self.targetLane--; } }; self.moveRight = function () { if (self.targetLane < 2) { self.targetLane++; } }; self.shoot = function () { if (self.lastShot >= self.shootCooldown) { self.lastShot = 0; var bullet = new PlayerBullet(); bullet.x = self.x; bullet.y = self.y; playerBullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); } }; return self; }); var PlayerBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('playerBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -20; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game variables var player; var enemies = []; var playerBullets = []; var enemyBullets = []; var gameSpeed = 1; var survivalTime = 0; var killCount = 0; var lastEnemySpawn = 0; var enemySpawnRate = 150; // 5 seconds at 60fps var speedIncreaseTimer = 0; // Lane positions function getLaneX(lane) { var laneWidth = 2048 / 3; return laneWidth * lane + laneWidth / 2; } // Create road background var road = game.addChild(LK.getAsset('road', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2732 / 2 })); // Create player player = game.addChild(new Player()); player.x = getLaneX(1); player.y = 2200; // Create UI var scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topLeft.addChild(scoreTxt); scoreTxt.x = 120; scoreTxt.y = 20; var killsTxt = new Text2('Kills: 0', { size: 60, fill: 0xFFFFFF }); killsTxt.anchor.set(1, 0); LK.gui.topRight.addChild(killsTxt); killsTxt.y = 20; // Control buttons var leftBtn = new Text2('โ', { size: 120, fill: 0xFFFFFF }); leftBtn.anchor.set(0.5, 0.5); LK.gui.bottomLeft.addChild(leftBtn); leftBtn.x = 200; leftBtn.y = -150; var rightBtn = new Text2('โถ', { size: 120, fill: 0xFFFFFF }); rightBtn.anchor.set(0.5, 0.5); LK.gui.bottomRight.addChild(rightBtn); rightBtn.x = -200; rightBtn.y = -150; var shootBtn = new Text2('๐ซ', { size: 100, fill: 0xFFFFFF }); shootBtn.anchor.set(0.5, 0.5); LK.gui.bottom.addChild(shootBtn); shootBtn.y = -150; // Button event handlers leftBtn.down = function () { player.moveLeft(); }; rightBtn.down = function () { player.moveRight(); }; shootBtn.down = function () { player.shoot(); }; // Game update loop game.update = function () { // Update survival time and score survivalTime++; if (survivalTime % 60 === 0) { // Every second LK.setScore(LK.getScore() + 0); scoreTxt.setText('Score: ' + LK.getScore()); } // Increase game speed over time speedIncreaseTimer++; if (speedIncreaseTimer % 600 === 0) { // Every 10 seconds gameSpeed += 0.2; if (enemySpawnRate > 120) { enemySpawnRate -= 20; } } // Spawn enemies lastEnemySpawn++; if (lastEnemySpawn >= enemySpawnRate) { lastEnemySpawn = 0; var enemy = new EnemyCowboy(); enemy.lane = Math.floor(Math.random() * 3); enemy.targetLane = player.lane; // Target player's current lane enemy.x = getLaneX(enemy.lane); enemy.y = -100; enemy.speed *= gameSpeed; enemies.push(enemy); game.addChild(enemy); } // Update enemies and make them target player for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; // Occasionally retarget player's lane if (LK.ticks % 120 === 0) { enemy.targetLane = player.lane; } // Remove enemies that went off screen if (enemy.y > 2800) { enemy.destroy(); enemies.splice(i, 1); continue; } } // Update player bullets for (var i = playerBullets.length - 1; i >= 0; i--) { var bullet = playerBullets[i]; // Remove bullets that went off screen if (bullet.y < -50) { bullet.destroy(); playerBullets.splice(i, 1); continue; } // Check collision with enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { // Enemy hit LK.getSound('enemyHit').play(); killCount++; LK.setScore(LK.getScore() + 5); scoreTxt.setText('Score: ' + LK.getScore()); killsTxt.setText('Kills: ' + killCount); // Remove bullet and enemy bullet.destroy(); playerBullets.splice(i, 1); enemy.destroy(); enemies.splice(j, 1); break; } } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { var bullet = enemyBullets[i]; // Remove bullets that went off screen if (bullet.y > 2800) { bullet.destroy(); enemyBullets.splice(i, 1); continue; } // Check collision with player if (bullet.intersects(player)) { // Player hit - game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 15;
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyCowboy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyCowboy', {
anchorX: 0.5,
anchorY: 0.5
});
self.lane = 1;
self.speed = 3;
self.lastShot = 0;
self.shootCooldown = 180; // 3 seconds at 60fps
self.targetLane = 1;
self.laneChangeSpeed = 8;
self.update = function () {
self.y += self.speed;
// Move towards target lane
var targetX = getLaneX(self.targetLane);
if (Math.abs(self.x - targetX) > self.laneChangeSpeed) {
if (self.x < targetX) {
self.x += self.laneChangeSpeed;
} else {
self.x -= self.laneChangeSpeed;
}
} else {
self.x = targetX;
self.lane = self.targetLane;
}
// Shooting logic
self.lastShot++;
if (self.lastShot >= self.shootCooldown) {
self.lastShot = 0;
// Create enemy bullet
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y;
enemyBullets.push(bullet);
game.addChild(bullet);
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('cowboy', {
anchorX: 0.5,
anchorY: 0.5
});
self.lane = 1;
self.targetLane = 1;
self.laneChangeSpeed = 12;
self.lastShot = 0;
self.shootCooldown = 72; // 1.2 seconds at 60fps
self.update = function () {
// Move towards target lane
var targetX = getLaneX(self.targetLane);
if (Math.abs(self.x - targetX) > self.laneChangeSpeed) {
if (self.x < targetX) {
self.x += self.laneChangeSpeed;
} else {
self.x -= self.laneChangeSpeed;
}
} else {
self.x = targetX;
self.lane = self.targetLane;
}
self.lastShot++;
};
self.moveLeft = function () {
if (self.targetLane > 0) {
self.targetLane--;
}
};
self.moveRight = function () {
if (self.targetLane < 2) {
self.targetLane++;
}
};
self.shoot = function () {
if (self.lastShot >= self.shootCooldown) {
self.lastShot = 0;
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -20;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var player;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var gameSpeed = 1;
var survivalTime = 0;
var killCount = 0;
var lastEnemySpawn = 0;
var enemySpawnRate = 150; // 5 seconds at 60fps
var speedIncreaseTimer = 0;
// Lane positions
function getLaneX(lane) {
var laneWidth = 2048 / 3;
return laneWidth * lane + laneWidth / 2;
}
// Create road background
var road = game.addChild(LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2732 / 2
}));
// Create player
player = game.addChild(new Player());
player.x = getLaneX(1);
player.y = 2200;
// Create UI
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreTxt);
scoreTxt.x = 120;
scoreTxt.y = 20;
var killsTxt = new Text2('Kills: 0', {
size: 60,
fill: 0xFFFFFF
});
killsTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(killsTxt);
killsTxt.y = 20;
// Control buttons
var leftBtn = new Text2('โ', {
size: 120,
fill: 0xFFFFFF
});
leftBtn.anchor.set(0.5, 0.5);
LK.gui.bottomLeft.addChild(leftBtn);
leftBtn.x = 200;
leftBtn.y = -150;
var rightBtn = new Text2('โถ', {
size: 120,
fill: 0xFFFFFF
});
rightBtn.anchor.set(0.5, 0.5);
LK.gui.bottomRight.addChild(rightBtn);
rightBtn.x = -200;
rightBtn.y = -150;
var shootBtn = new Text2('๐ซ', {
size: 100,
fill: 0xFFFFFF
});
shootBtn.anchor.set(0.5, 0.5);
LK.gui.bottom.addChild(shootBtn);
shootBtn.y = -150;
// Button event handlers
leftBtn.down = function () {
player.moveLeft();
};
rightBtn.down = function () {
player.moveRight();
};
shootBtn.down = function () {
player.shoot();
};
// Game update loop
game.update = function () {
// Update survival time and score
survivalTime++;
if (survivalTime % 60 === 0) {
// Every second
LK.setScore(LK.getScore() + 0);
scoreTxt.setText('Score: ' + LK.getScore());
}
// Increase game speed over time
speedIncreaseTimer++;
if (speedIncreaseTimer % 600 === 0) {
// Every 10 seconds
gameSpeed += 0.2;
if (enemySpawnRate > 120) {
enemySpawnRate -= 20;
}
}
// Spawn enemies
lastEnemySpawn++;
if (lastEnemySpawn >= enemySpawnRate) {
lastEnemySpawn = 0;
var enemy = new EnemyCowboy();
enemy.lane = Math.floor(Math.random() * 3);
enemy.targetLane = player.lane; // Target player's current lane
enemy.x = getLaneX(enemy.lane);
enemy.y = -100;
enemy.speed *= gameSpeed;
enemies.push(enemy);
game.addChild(enemy);
}
// Update enemies and make them target player
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
// Occasionally retarget player's lane
if (LK.ticks % 120 === 0) {
enemy.targetLane = player.lane;
}
// Remove enemies that went off screen
if (enemy.y > 2800) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
}
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
// Remove bullets that went off screen
if (bullet.y < -50) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Enemy hit
LK.getSound('enemyHit').play();
killCount++;
LK.setScore(LK.getScore() + 5);
scoreTxt.setText('Score: ' + LK.getScore());
killsTxt.setText('Kills: ' + killCount);
// Remove bullet and enemy
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
break;
}
}
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
// Remove bullets that went off screen
if (bullet.y > 2800) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
// Player hit - game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
};
2d cowboy character head. In-Game asset. 2d. High contrast. No shadows
2d revolver bullet. In-Game asset. 2d. High contrast. No shadows
2d old concrete wall suitable for desert atmosphere. In-Game asset. 2d. High contrast. No shadows
2d edgy red themed hostile cowboy character head
A 2d fired revolver. In-Game asset. 2d. High contrast. No shadows
a 2d revolver without firing effect
Let it be red themed
2d simple repair button. In-Game asset. 2d. High contrast. No shadows
2d protection shield. In-Game asset. 2d. High contrast. No shadows
2d explosion effect. In-Game asset. 2d. High contrast. No shadows