User prompt
Reduce character j fire speed a bit
User prompt
Let the s character appear a few seconds after chapter 2 starts
User prompt
Character j should fire continuously from the beginning of chapter 2
User prompt
Let j shoot whenever he sees us
User prompt
Character J should shoot more often
User prompt
Character j should make a laser attack on us.
User prompt
Characters s and j should come and shoot a few seconds after Chapter 2 starts.
User prompt
In Chapter 2, only J vs S characters should be on the opposing team.
User prompt
Let j and s come from the opposite direction and attack us, and let j shoot lasers at us.
User prompt
Add the "j and s" characters in the images file to chapter 2
User prompt
delete last character
User prompt
add just a chapter 2 new chracter
User prompt
Please fix the bug: 'ReferenceError: chapter2Started is not defined' in or related to this line: 'if (' Line Number: 353
User prompt
Let the shooting start when the opponents arrive in Chapter 2
User prompt
During the transition to the 2nd chapter, the screen will turn black and the name of Chapter 2 will appear and let it begin.
User prompt
When you get to the 2nd level, don't let any enemies come for a few seconds.
User prompt
Let the name of Chapter 2 be "Firestorm Rising"
User prompt
After the score is 30, I want chapter 2, continuation of chapter 1
User prompt
Make it like what I shared
User prompt
"2D side-scrolling battle scene for Chapter 2 of a military action game. The background shows a more intense and futuristic battlefield compared to Chapter 1. Advanced soldier characters with high-tech armor and weapons are present. The environment includes destroyed futuristic vehicles, glowing lights, burning debris, and a dark, cloudy sky. The scene should feel more dangerous, dramatic, and chaotic, designed in a semi-cartoon or pixel art style." delete
User prompt
"2D side-scrolling battle scene for Chapter 2 of a military action game. The background shows a more intense and futuristic battlefield compared to Chapter 1. Advanced soldier characters with high-tech armor and weapons are present. The environment includes destroyed futuristic vehicles, glowing lights, burning debris, and a dark, cloudy sky. The scene should feel more dangerous, dramatic, and chaotic, designed in a semi-cartoon or pixel art style."
User prompt
After 20 scores, we will have a stronger weapon, increase its damage and our opponents will become stronger after 20 scores.
User prompt
Write You Are a Real Player instead of You Win
User prompt
When you finish the game, write "You are a Real Gamer" as a gesture
User prompt
Let our weapons be stronger
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Enemy: Drone
var Drone = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('drone', {
anchorX: 0.5,
anchorY: 0.5
});
self.hp = 1;
self.shootCooldown = 0;
self.update = function () {
self.x -= 8;
};
return self;
});
// Enemy bullet
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGfx = self.attachAsset('bullet_enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -18;
self.update = function () {
self.x += self.speed;
};
return self;
});
// Explosion effect
var Explosion = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 1
});
// Animate fade out
tween(gfx, {
alpha: 0
}, {
duration: 400,
easing: tween.linear,
onFinish: function onFinish() {
self.destroy();
}
});
return self;
});
// Squad member: Medic
var Medic = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('medic', {
anchorX: 0.5,
anchorY: 0.5
});
self.hp = 3;
self.role = 'medic';
self.update = function () {};
return self;
});
// Player bullet
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGfx = self.attachAsset('bullet_player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 32;
self.update = function () {
self.x += self.speed;
};
return self;
});
// Powerup: Ammo
var PowerupAmmo = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('powerup_ammo', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.x -= 6;
};
return self;
});
// Powerup: Health
var PowerupHealth = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('powerup_health', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.x -= 6;
};
return self;
});
// Captain Rhea Morgan (player)
var Rhea = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('rhea', {
anchorX: 0.5,
anchorY: 0.5
});
self.hp = 5;
self.shootCooldown = 0;
self.update = function () {};
return self;
});
// Squad member: Sniper
var Sniper = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('sniper', {
anchorX: 0.5,
anchorY: 0.5
});
self.hp = 2;
self.role = 'sniper';
self.shootCooldown = 0;
self.update = function () {};
return self;
});
// Enemy: Tank (mini-boss)
var Tank = Container.expand(function () {
var self = Container.call(this);
var gfx = self.attachAsset('tank', {
anchorX: 0.5,
anchorY: 0.5
});
self.hp = 10;
self.shootCooldown = 0;
self.update = function () {
self.x -= 4;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222831
});
/****
* Game Code
****/
// World War I background image
var battlefieldBg = LK.getAsset('ww1_bg', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: 2048,
height: 2732,
alpha: 0.35
});
game.addChild(battlefieldBg);
// Play music
// Main character: Captain Rhea Morgan
// Squad member: Medic
// Squad member: Sniper
// Enemy: Drone
// Enemy: Tank
// Bullet: Player
// Bullet: Enemy
// Powerup: Health
// Powerup: Ammo
// Explosion effect
// Sound effects
// Music
LK.playMusic('battle_theme');
// Game state variables
var rhea, medic, sniper;
var squad = [];
var playerBullets = [];
var enemyBullets = [];
var enemies = [];
var powerups = [];
var explosions = [];
var score = 0;
var resources = 0;
var gameOver = false;
var youWin = false;
var dragNode = null;
var lastTouchX = 0,
lastTouchY = 0;
// UI
var scoreTxt = new Text2('0', {
size: 100,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var hpTxt = new Text2('HP: 5', {
size: 70,
fill: 0xFF5252
});
// Move HP text to the upper left, avoiding the top left 100x100 px reserved area
hpTxt.anchor.set(0, 0);
hpTxt.x = 110; // 10px right of reserved area
hpTxt.y = 10;
LK.gui.topLeft.addChild(hpTxt);
var resourceTxt = new Text2('Res: 0', {
size: 70,
fill: 0xFFD600
});
resourceTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(resourceTxt);
// Initialize player and squad
rhea = new Rhea();
rhea.x = 400;
rhea.y = 2732 / 2;
game.addChild(rhea);
medic = new Medic();
medic.x = rhea.x - 120;
medic.y = rhea.y + 120;
game.addChild(medic);
sniper = new Sniper();
sniper.x = rhea.x - 120;
sniper.y = rhea.y - 120;
game.addChild(sniper);
squad = [rhea, medic, sniper];
// Helper: spawn enemy
function spawnEnemy() {
var type = LK.ticks % 300 === 0 ? 'tank' : 'drone';
var enemy;
if (type === 'drone') {
enemy = new Drone();
enemy.x = 2048 + 60;
enemy.y = 300 + Math.floor(Math.random() * (2732 - 600));
} else {
enemy = new Tank();
enemy.x = 2048 + 120;
enemy.y = 400 + Math.floor(Math.random() * (2732 - 800));
}
enemies.push(enemy);
game.addChild(enemy);
}
// Helper: spawn powerup
function spawnPowerup() {
var type = Math.random() < 0.5 ? 'health' : 'ammo';
var powerup;
if (type === 'health') {
powerup = new PowerupHealth();
} else {
powerup = new PowerupAmmo();
}
powerup.x = 2048 + 60;
powerup.y = 300 + Math.floor(Math.random() * (2732 - 600));
powerups.push(powerup);
game.addChild(powerup);
}
// Helper: fire player bullet
function firePlayerBullet(from) {
var bullet = new PlayerBullet();
bullet.x = from.x + 70;
bullet.y = from.y;
// Stronger sniper: sniper bullets do more damage
if (from.role === 'sniper') {
bullet.damage = 6;
} else {
bullet.damage = 3;
}
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot_player').play();
}
// Helper: fire enemy bullet
function fireEnemyBullet(from) {
var bullet = new EnemyBullet();
bullet.x = from.x - 70;
bullet.y = from.y;
enemyBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot_enemy').play();
}
// Helper: show explosion
function showExplosion(x, y) {
var exp = new Explosion();
exp.x = x;
exp.y = y;
explosions.push(exp);
game.addChild(exp);
LK.getSound('explosion').play();
}
// Helper: update UI
function updateUI() {
scoreTxt.setText(score);
hpTxt.setText('HP: ' + rhea.hp);
resourceTxt.setText('Res: ' + resources);
}
// Handle dragging Rhea (player)
function handleMove(x, y, obj) {
if (dragNode) {
// Clamp to game area
var minY = 120,
maxY = 2732 - 120;
dragNode.y = Math.max(minY, Math.min(maxY, y));
lastTouchX = x;
lastTouchY = y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Only allow dragging Rhea
if (!gameOver && !youWin) {
if (Math.abs(x - rhea.x) < 120 && Math.abs(y - rhea.y) < 120) {
dragNode = rhea;
handleMove(x, y, obj);
}
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update loop
game.update = function () {
if (gameOver || youWin) return;
// Player auto-fire
if (rhea.shootCooldown > 0) rhea.shootCooldown--;
if (rhea.shootCooldown === 0) {
firePlayerBullet(rhea);
rhea.shootCooldown = 10;
}
// Sniper auto-fire (slower)
if (sniper.shootCooldown > 0) sniper.shootCooldown--;
if (sniper.shootCooldown === 0) {
firePlayerBullet(sniper);
sniper.shootCooldown = 30;
}
// Medic follows Rhea
medic.x += (rhea.x - 120 - medic.x) * 0.15;
medic.y += (rhea.y + 120 - medic.y) * 0.15;
// Sniper follows Rhea
sniper.x += (rhea.x - 120 - sniper.x) * 0.15;
sniper.y += (rhea.y - 120 - sniper.y) * 0.15;
// Spawn enemies
if (LK.ticks % 120 === 0) {
spawnEnemy();
}
// Spawn powerups
if (LK.ticks % 180 === 0) {
spawnPowerup();
}
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var b = playerBullets[i];
b.update();
// Remove if off screen
if (b.x > 2048 + 60) {
b.destroy();
playerBullets.splice(i, 1);
continue;
}
// Hit enemy
for (var j = enemies.length - 1; j >= 0; j--) {
var e = enemies[j];
if (b.intersects(e)) {
var dmg = typeof b.damage === "number" ? b.damage : 3;
e.hp -= dmg;
showExplosion(b.x, b.y);
b.destroy();
playerBullets.splice(i, 1);
if (e.hp <= 0) {
showExplosion(e.x, e.y);
score += e instanceof Tank ? 10 : 2;
resources += e instanceof Tank ? 5 : 1;
e.destroy();
enemies.splice(j, 1);
}
updateUI();
break;
}
}
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var b = enemyBullets[i];
b.update();
if (b.x < -60) {
b.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Hit squad
for (var j = 0; j < squad.length; j++) {
var s = squad[j];
if (b.intersects(s)) {
s.hp--;
showExplosion(b.x, b.y);
b.destroy();
enemyBullets.splice(i, 1);
if (s.hp <= 0) {
showExplosion(s.x, s.y);
if (s === rhea) {
// Game over
gameOver = true;
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
} else {
s.destroy();
squad.splice(j, 1);
}
}
updateUI();
break;
}
}
}
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var e = enemies[i];
e.update();
// Remove if off screen
if (e.x < -200) {
e.destroy();
enemies.splice(i, 1);
continue;
}
// Enemy fire
if (e.shootCooldown > 0) e.shootCooldown--;
if (e.shootCooldown === 0) {
// Only fire if on screen
if (e.x < 2048 && e.x > 0) {
fireEnemyBullet(e);
e.shootCooldown = e instanceof Tank ? 30 : 60;
}
}
// Collide with player
if (e.intersects(rhea)) {
rhea.hp -= 2;
showExplosion(e.x, e.y);
e.destroy();
enemies.splice(i, 1);
if (rhea.hp <= 0) {
gameOver = true;
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
updateUI();
}
}
// Update powerups
for (var i = powerups.length - 1; i >= 0; i--) {
var p = powerups[i];
p.update();
if (p.x < -60) {
p.destroy();
powerups.splice(i, 1);
continue;
}
// Pickup by player
if (p.intersects(rhea)) {
if (p instanceof PowerupHealth) {
rhea.hp = Math.min(rhea.hp + 2, 7);
} else if (p instanceof PowerupAmmo) {
// For MVP, just increase resources
resources += 2;
}
LK.getSound('pickup').play();
p.destroy();
powerups.splice(i, 1);
updateUI();
}
}
// Win condition: score threshold
if (score >= 50) {
youWin = true;
LK.effects.flashScreen(0x00ff00, 1000);
// Show 'You are a Real Gamer' as a gesture
var gamerTxt = new Text2('You are a Real Gamer', {
size: 140,
fill: 0xFFD700,
font: "Impact, 'Arial Black', Tahoma"
});
gamerTxt.anchor.set(0.5, 0.5);
gamerTxt.x = 2048 / 2;
gamerTxt.y = 2732 / 2;
game.addChild(gamerTxt);
LK.showYouWin();
return;
}
};
// Initial UI update
updateUI(); ===================================================================
--- original.js
+++ change.js
@@ -476,8 +476,18 @@
// Win condition: score threshold
if (score >= 50) {
youWin = true;
LK.effects.flashScreen(0x00ff00, 1000);
+ // Show 'You are a Real Gamer' as a gesture
+ var gamerTxt = new Text2('You are a Real Gamer', {
+ size: 140,
+ fill: 0xFFD700,
+ font: "Impact, 'Arial Black', Tahoma"
+ });
+ gamerTxt.anchor.set(0.5, 0.5);
+ gamerTxt.x = 2048 / 2;
+ gamerTxt.y = 2732 / 2;
+ game.addChild(gamerTxt);
LK.showYouWin();
return;
}
};
soldier character. In-Game asset. 2d. High contrast. No shadows
Enemy robot. In-Game asset. 2d. High contrast. No shadows
Let the tank face left. In-Game asset. 2d. High contrast. No shadows
Sniper soldier. In-Game asset. 2d. High contrast. No shadows
Medic Soldier. In-Game asset. 2d. High contrast. No shadows
Health. In-Game asset. 2d. High contrast. No shadows
Ammo. In-Game asset. 2d. High contrast. No shadows
bullet enemy. In-Game asset. 2d. High contrast. No shadows
smile bullet to the right. In-Game asset. 2d. High contrast. No shadows
explosion effect. In-Game asset. 2d. High contrast. No shadows
dron enemy. In-Game asset. 2d. High contrast. No shadows
technological soldier. In-Game asset. 2d. High contrast. No shadows
just laser. In-Game asset. 2d. High contrast. No shadows
technological enemy. In-Game asset. 2d. High contrast. No shadows