User prompt
Make me a health bar
User prompt
Make me change rotation ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Make me move
User prompt
Add more waves
Code edit (1 edits merged)
Please save this source code
User prompt
Red Dead Showdown
Initial prompt
Make me RDR2 Game
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1;
self.health = 5;
self.maxHealth = 5;
self.shootTimer = 0;
self.shootDelay = 30;
self.direction = Math.random() < 0.5 ? -1 : 1;
self.moveTimer = 0;
self.update = function () {
self.y += self.speed;
self.moveTimer++;
if (self.moveTimer % 120 === 0) {
self.direction *= -1;
}
self.x += self.direction * 2;
if (self.x < 100 || self.x > 1948) {
self.direction *= -1;
}
self.shootTimer++;
if (self.shootTimer >= self.shootDelay) {
self.shootTimer = 0;
// Boss shoots 3 bullets in spread pattern
for (var k = -1; k <= 1; k++) {
var bullet = new EnemyBullet();
bullet.x = self.x + k * 40;
bullet.y = self.y + 60;
enemyBullets.push(bullet);
game.addChild(bullet);
}
}
// Visual health indicator
var healthRatio = self.health / self.maxHealth;
bossGraphics.tint = 0x8B0000 + 0x550000 * (1 - healthRatio);
};
return self;
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
self.rotation += 0.1;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.shootTimer = 0;
self.shootDelay = 60 + Math.random() * 60;
self.direction = Math.random() < 0.5 ? -1 : 1;
self.update = function () {
self.y += self.speed;
self.x += self.direction * 1;
if (self.x < 50 || self.x > 1998) {
self.direction *= -1;
}
self.shootTimer++;
if (self.shootTimer >= self.shootDelay) {
self.shootTimer = 0;
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
enemyBullets.push(bullet);
game.addChild(bullet);
}
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
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 = 15;
self.update = function () {
self.y -= self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x8B7355
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 1024;
player.y = 2400;
var playerBullets = [];
var enemies = [];
var enemyBullets = [];
var coins = [];
var dragNode = null;
var waveNumber = 1;
var enemiesKilled = 0;
var enemiesPerWave = 3;
var isBossWave = false;
var bossSpawned = false;
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var waveTxt = new Text2('Wave: 1', {
size: 60,
fill: 0xFFDD44
});
waveTxt.anchor.set(0, 0);
waveTxt.x = 150;
waveTxt.y = 0;
LK.gui.topLeft.addChild(waveTxt);
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
}
function updateWave() {
waveTxt.setText('Wave: ' + waveNumber);
}
function spawnEnemy() {
var enemy = new Enemy();
enemy.x = Math.random() * 1800 + 124;
enemy.y = -50;
enemy.speed = 1 + waveNumber * 0.3;
enemy.shootDelay = Math.max(30, 60 - waveNumber * 2);
enemies.push(enemy);
game.addChild(enemy);
}
function spawnBoss() {
var boss = new Boss();
boss.x = 1024;
boss.y = -100;
boss.speed = 0.5 + waveNumber * 0.1;
boss.health = 3 + Math.floor(waveNumber / 5);
boss.maxHealth = boss.health;
enemies.push(boss);
game.addChild(boss);
bossSpawned = true;
}
function spawnWave() {
isBossWave = waveNumber % 5 === 0;
bossSpawned = false;
if (isBossWave) {
// Boss wave: spawn boss after delay
LK.setTimeout(function () {
spawnBoss();
}, 1500);
// Add some regular enemies too for boss waves
var regularEnemies = Math.min(3, Math.floor(waveNumber / 5));
for (var i = 0; i < regularEnemies; i++) {
LK.setTimeout(function () {
spawnEnemy();
}, i * 800);
}
} else {
// Regular wave
for (var i = 0; i < enemiesPerWave; i++) {
LK.setTimeout(function () {
spawnEnemy();
}, i * (1000 - waveNumber * 50));
}
}
}
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = Math.max(40, Math.min(2008, x));
dragNode.y = Math.max(100, Math.min(2632, y));
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Always set player as drag target for movement
dragNode = player;
handleMove(x, y, obj);
// Also shoot a bullet
var bullet = new PlayerBullet();
bullet.x = player.x;
bullet.y = player.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
};
game.up = function (x, y, obj) {
dragNode = null;
};
spawnWave();
game.update = function () {
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY >= -10 && bullet.y < -10) {
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)) {
// Handle boss health
if (enemy.health !== undefined) {
enemy.health--;
LK.effects.flashObject(enemy, 0xFF0000, 200);
if (enemy.health > 0) {
bullet.destroy();
playerBullets.splice(i, 1);
break;
}
// Boss defeated
LK.setScore(LK.getScore() + 50);
} else {
// Regular enemy
LK.setScore(LK.getScore() + 10);
}
updateScore();
enemiesKilled++;
// Drop coin
var coin = new Coin();
coin.x = enemy.x;
coin.y = enemy.y;
coins.push(coin);
game.addChild(coin);
LK.getSound('enemyHit').play();
LK.effects.flashObject(enemy, 0xFF0000, 200);
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
break;
}
}
bullet.lastY = bullet.y;
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY <= 2742 && bullet.y > 2742) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xFF0000, 1000);
LK.showGameOver();
return;
}
bullet.lastY = bullet.y;
}
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
if (enemy.lastY <= 2742 && enemy.y > 2742) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xFF0000, 1000);
LK.showGameOver();
return;
}
enemy.lastY = enemy.y;
}
// Update coins
for (var i = coins.length - 1; i >= 0; i--) {
var coin = coins[i];
if (coin.lastY === undefined) coin.lastY = coin.y;
if (coin.lastY <= 2742 && coin.y > 2742) {
coin.destroy();
coins.splice(i, 1);
continue;
}
// Check collision with player
if (coin.intersects(player)) {
LK.setScore(LK.getScore() + 5);
updateScore();
LK.getSound('coinCollect').play();
LK.effects.flashObject(coin, 0xFFFFFF, 300);
coin.destroy();
coins.splice(i, 1);
continue;
}
coin.lastY = coin.y;
}
// Check if wave is complete
var waveComplete = false;
if (isBossWave) {
waveComplete = enemies.length === 0 && bossSpawned;
} else {
waveComplete = enemies.length === 0 && enemiesKilled >= enemiesPerWave;
}
if (waveComplete) {
waveNumber++;
// Increase difficulty progressively
if (waveNumber % 5 === 0) {
// Boss waves don't increase regular enemy count
enemiesPerWave = Math.min(10, enemiesPerWave);
} else {
enemiesPerWave = Math.min(10, 3 + Math.floor(waveNumber / 3));
}
updateWave();
enemiesKilled = 0;
// Bonus score for completing waves
var waveBonus = isBossWave ? 100 : 25;
LK.setScore(LK.getScore() + waveBonus);
updateScore();
// Show wave completion message
if (isBossWave) {
LK.effects.flashScreen(0x00FF00, 500);
}
LK.setTimeout(function () {
spawnWave();
}, isBossWave ? 3000 : 2000);
}
}; ===================================================================
--- original.js
+++ change.js
@@ -215,19 +215,18 @@
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
- if (obj === player) {
- dragNode = player;
- handleMove(x, y, obj);
- } else {
- var bullet = new PlayerBullet();
- bullet.x = player.x;
- bullet.y = player.y - 40;
- playerBullets.push(bullet);
- game.addChild(bullet);
- LK.getSound('shoot').play();
- }
+ // Always set player as drag target for movement
+ dragNode = player;
+ handleMove(x, y, obj);
+ // Also shoot a bullet
+ var bullet = new PlayerBullet();
+ bullet.x = player.x;
+ bullet.y = player.y - 40;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
};
game.up = function (x, y, obj) {
dragNode = null;
};
Make me a boss for RDR2. In-Game asset. 2d. High contrast. No shadows
Make me a coin for RDR2. In-Game asset. 2d. High contrast. No shadows
Make me a enemy for RDR2. In-Game asset. 2d. High contrast. No shadows
Make me a enemy bullet for RDR2. In-Game asset. 2d. High contrast. No shadows
Make me a player bullet for RDR2. In-Game asset. 2d. High contrast. No shadows
Make me a Player for RDR2. In-Game asset. 2d. High contrast. No shadows