User prompt
There is pwr dark purple button at middle bottom. When clicking this button, it increases power level.
Code edit (1 edits merged)
Please save this source code
User prompt
Boss must move only in x direction
User prompt
Boss musn't go down continously
User prompt
At wave 10, put only boss
User prompt
There must be boss in the game. The boss have "boss" asset. Define boss in the classes section
User prompt
WAve9 must consist of fully "alien3"
User prompt
At wave9 reduce total alien number bu it must be little bit less than wave8
User prompt
At wave 8 decrease total alien number little bit
User prompt
At wave8 the ratio must be %50 "alien2" and %50 "alien3"
User prompt
At wave 8 total alien number must be more than wave7
User prompt
add smh button to the left bottom corner. When hitting this button, it wil kill all aliens in the wave immediately
User prompt
Reduce the firing frequency of alien3 more
User prompt
At wave7 decrease total alien number little bit more
User prompt
At wave7 add some "alien3". At wave7 the ratio must be %30 "alien3" and %70 "alien"
Code edit (1 edits merged)
Please save this source code
User prompt
At wave7 reduce the alien number little bit than wave6
User prompt
Alien3 should fire triple bullet this bullets must have different angles from each other
User prompt
At wave6 make the ratio as %60 "alien2" and %40 "alien"
User prompt
At wave6 change the ratio as %70 "alien2" and %30 "alien"
User prompt
At wave6 there is %80 of "alien2" and the remaining aliens are "alien"
User prompt
At wave 6 there is little bit more aliens than wave5
User prompt
When pressing inv button again. Immortality should gone. This button toggle you are immortality or not
User prompt
at wave5 reduce the number of aliens but it must be more than wave4
User prompt
At wave4 and wave5 spawn "alien2" only
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Alien
var Alien = Container.expand(function () {
var self = Container.call(this);
var alien = self.attachAsset('alien', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = alien.width;
self.height = alien.height;
self.speedX = 0;
self.speedY = 0.8;
self.shootCooldown = 0;
self.row = 0;
self.col = 0;
self.alive = true;
self.hp = 2; // Aliens require 2 hits to be defeated
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
if (self.shootCooldown > 0) {
self.shootCooldown -= 1;
}
};
// Flash when hit
self.flash = function () {
tween(self, {
alpha: 0.3
}, {
duration: 60,
onFinish: function onFinish() {
tween(self, {
alpha: 1
}, {
duration: 100
});
}
});
};
return self;
});
// Alien2
var Alien2 = Container.expand(function () {
var self = Container.call(this);
var alien = self.attachAsset('alien2', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = alien.width;
self.height = alien.height;
self.speedX = 0;
self.speedY = 0.8;
self.shootCooldown = 0;
self.row = 0;
self.col = 0;
self.alive = true;
self.hp = 4;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
if (self.shootCooldown > 0) {
self.shootCooldown -= 1;
}
};
self.flash = function () {
tween(self, {
alpha: 0.3
}, {
duration: 60,
onFinish: function onFinish() {
tween(self, {
alpha: 1
}, {
duration: 100
});
}
});
};
return self;
});
// Alien3
var Alien3 = Container.expand(function () {
var self = Container.call(this);
var alien = self.attachAsset('alien3', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = alien.width;
self.height = alien.height;
self.speedX = 0;
self.speedY = 0.8;
self.shootCooldown = 0;
self.row = 0;
self.col = 0;
self.alive = true;
self.hp = 3;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
if (self.shootCooldown > 0) {
self.shootCooldown -= 1;
}
};
self.flash = function () {
tween(self, {
alpha: 0.3
}, {
duration: 60,
onFinish: function onFinish() {
tween(self, {
alpha: 1
}, {
duration: 100
});
}
});
};
return self;
});
// Alien Bullet
var AlienBullet = Container.expand(function () {
var self = Container.call(this);
var bullet = self.attachAsset('alienBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = bullet.width;
self.height = bullet.height;
self.speedY = 14;
self.update = function () {
if (typeof self.speedX === "undefined") {
self.speedX = 0;
}
self.x += self.speedX;
self.y += self.speedY;
};
return self;
});
// Boss
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossAsset = self.attachAsset('Boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = bossAsset.width;
self.height = bossAsset.height;
self.hp = 500;
self.speedX = 4;
self.speedY = 0.7;
self.alive = true;
self.shootCooldown = 60;
self.update = function () {
// Move horizontally, bounce off edges
self.x += self.speedX;
if (self.x - self.width / 2 <= 0 && self.speedX < 0) {
self.x = self.width / 2;
self.speedX = -self.speedX;
}
if (self.x + self.width / 2 >= GAME_WIDTH && self.speedX > 0) {
self.x = GAME_WIDTH - self.width / 2;
self.speedX = -self.speedX;
}
// Boss does NOT move down in y direction anymore
// Shoot cooldown
if (self.shootCooldown > 0) {
self.shootCooldown -= 1;
}
};
// Flash when hit
self.flash = function () {
tween(self, {
alpha: 0.3
}, {
duration: 60,
onFinish: function onFinish() {
tween(self, {
alpha: 1
}, {
duration: 100
});
}
});
};
return self;
});
// Coin
var Coin = Container.expand(function () {
var self = Container.call(this);
var c = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = c.width;
self.height = c.height;
self.speedY = 32;
self.update = function () {
self.y += self.speedY;
};
return self;
});
// Hero Bullet
var HeroBullet = Container.expand(function () {
var self = Container.call(this);
var bullet = self.attachAsset('heroBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = bullet.width;
self.height = bullet.height;
self.speedY = -22;
self.update = function () {
self.y += self.speedY;
};
return self;
});
// Hero Ship
var HeroShip = Container.expand(function () {
var self = Container.call(this);
var ship = self.attachAsset('heroShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = ship.width;
self.height = ship.height;
self.lives = 1;
self.fireCooldown = 0;
self.powerLevel = 1;
self.invincible = false;
self.invincibleTimer = 0;
// Flash when hit
self.flash = function () {
tween(self, {
alpha: 0.3
}, {
duration: 80,
onFinish: function onFinish() {
tween(self, {
alpha: 1
}, {
duration: 120
});
}
});
};
// Power up
self.upgrade = function () {
if (self.powerLevel < 3) {
self.powerLevel += 1;
LK.effects.flashObject(self, 0xaa66ff, 400);
}
};
// Invincibility after hit
self.setInvincible = function (duration) {
self.invincible = true;
self.invincibleTimer = duration;
tween(self, {
alpha: 0.5
}, {
duration: 100
});
};
// Called every tick
self.update = function () {
if (self.invincible) {
self.invincibleTimer -= 1;
if (self.invincibleTimer <= 0) {
self.invincible = false;
self.alpha = 1;
}
}
if (self.fireCooldown > 0) {
self.fireCooldown -= 1;
}
};
return self;
});
// Powerup
var Powerup = Container.expand(function () {
var self = Container.call(this);
var p = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = p.width;
self.height = p.height;
self.speedY = 40;
self.update = function () {
self.y += self.speedY;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Music
// Sound effects
// Power-up: purple ellipse
// Alien bullet: red box
// Hero bullet: yellow box
// Alien: green ellipse
// Hero ship: blue box
// Game area
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
// Play music
LK.playMusic('bgmusic');
// Score
var score = 0;
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Wave
var wave = 1;
var waveTxt = new Text2('Wave 1', {
size: 70,
fill: 0xAAFFFF
});
waveTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(waveTxt);
waveTxt.y = 120;
// Hero
var hero = new HeroShip();
game.addChild(hero);
hero.x = GAME_WIDTH / 2;
hero.y = GAME_HEIGHT - 220;
// Bullets, aliens, powerups, coins
var heroBullets = [];
var alienBullets = [];
var aliens = [];
var powerups = [];
var coins = [];
// Dragging
var dragNode = null;
// Alien formation
function spawnWave(waveNum) {
// Remove old aliens
for (var i = aliens.length - 1; i >= 0; i--) {
aliens[i].destroy();
aliens.splice(i, 1);
}
if (waveNum === 10) {
// Only spawn the boss for wave 10
var boss = new Boss();
boss.x = GAME_WIDTH / 2;
boss.y = 320;
aliens.push(boss);
game.addChild(boss);
waveTxt.setText('Wave ' + waveNum);
// Reset wave timer and alien zone flag for new wave
game._waveStartTime = Date.now();
game._alienReachedHeroZone = false;
return;
}
// Formation: rows, cols, spacing
var rows, cols;
if (waveNum === 4) {
rows = 3;
cols = 5;
} else if (waveNum === 5) {
// More than wave 4, but less than default for wave 5 (default would be rows=6, cols=10)
rows = 4;
cols = 7;
} else if (waveNum === 6) {
// Slightly more than wave 5
rows = 5;
cols = 8;
} else if (waveNum === 7) {
// Reduce a little bit more from wave 6
rows = 3;
cols = 7;
} else if (waveNum === 8) {
// Decrease total alien number in wave 8 a little bit (but still more than wave 7)
rows = 4;
cols = 8;
} else if (waveNum === 9) {
// Reduce total alien number a little bit compared to wave 8
rows = 3;
cols = 8;
} else {
rows = Math.min(2 + waveNum, 6);
cols = Math.min(4 + waveNum * 2, 10);
}
var spacingX = 160;
var spacingY = 140;
var startX = (GAME_WIDTH - (cols - 1) * spacingX) / 2;
var startY = 220 + (waveNum - 1) * 30;
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {
var alien;
if (waveNum === 4 || waveNum === 5) {
alien = new Alien2();
} else if (waveNum === 6) {
// 70% Alien2, 30% Alien
if (Math.random() < 0.7) {
alien = new Alien2();
} else {
alien = new Alien();
}
} else if (waveNum === 7) {
// 30% Alien3, 70% Alien
if (Math.random() < 0.3) {
alien = new Alien3();
} else {
alien = new Alien();
}
} else if (waveNum === 8) {
// 50% Alien2, 50% Alien3
if (Math.random() < 0.5) {
alien = new Alien2();
} else {
alien = new Alien3();
}
} else if (waveNum === 9) {
// All Alien3 for wave 9
alien = new Alien3();
} else {
alien = new Alien();
}
alien.x = startX + c * spacingX;
alien.y = startY + r * spacingY;
alien.row = r;
alien.col = c;
alien.speedX = Math.sin((r * cols + c + waveNum) * 0.7) * 1.5 + (Math.random() - 0.5) * 0.5;
alien.speedY = 0.7 + 0.1 * waveNum + (Math.random() - 0.5) * 0.2;
alien.shootCooldown = 60 + Math.floor(Math.random() * 60);
aliens.push(alien);
game.addChild(alien);
}
}
waveTxt.setText('Wave ' + waveNum);
// Reset wave timer and alien zone flag for new wave
game._waveStartTime = Date.now();
game._alienReachedHeroZone = false;
}
// Powerup spawn
function maybeSpawnPowerup(x, y) {
if (Math.random() < 0.03) {
var p = new Powerup();
p.x = x;
p.y = y;
powerups.push(p);
game.addChild(p);
}
}
// Coin spawn (lower probability than powerup)
function maybeSpawnCoin(x, y) {
// Powerup is 0.03, so coin should be less, but increase coin drop rate (e.g. 0.02)
if (Math.random() < 0.02) {
var c = new Coin();
c.x = x;
c.y = y;
coins.push(c);
game.addChild(c);
}
}
// Fire hero bullets
function fireHeroBullets() {
if (hero.fireCooldown > 0) {
return;
}
var b;
if (hero.powerLevel === 1) {
b = new HeroBullet();
b.x = hero.x;
b.y = hero.y - hero.height / 2 - 10;
heroBullets.push(b);
game.addChild(b);
} else if (hero.powerLevel === 2) {
b = new HeroBullet();
b.x = hero.x - 38;
b.y = hero.y - hero.height / 2 - 10;
heroBullets.push(b);
game.addChild(b);
b = new HeroBullet();
b.x = hero.x + 38;
b.y = hero.y - hero.height / 2 - 10;
heroBullets.push(b);
game.addChild(b);
} else if (hero.powerLevel >= 3) {
b = new HeroBullet();
b.x = hero.x - 60;
b.y = hero.y - hero.height / 2 - 10;
heroBullets.push(b);
game.addChild(b);
b = new HeroBullet();
b.x = hero.x;
b.y = hero.y - hero.height / 2 - 10;
heroBullets.push(b);
game.addChild(b);
b = new HeroBullet();
b.x = hero.x + 60;
b.y = hero.y - hero.height / 2 - 10;
heroBullets.push(b);
game.addChild(b);
}
hero.fireCooldown = 12;
LK.getSound('shoot').play();
}
// Fire alien bullet
function fireAlienBullet(alien) {
// If Alien3, fire triple bullets at different angles
if (alien instanceof Alien3) {
// Center bullet (straight down)
var b0 = new AlienBullet();
b0.x = alien.x;
b0.y = alien.y + alien.height / 2 + 10;
b0.speedY = 14;
b0.speedX = 0;
alienBullets.push(b0);
game.addChild(b0);
// Left bullet (angle -20deg)
var b1 = new AlienBullet();
b1.x = alien.x;
b1.y = alien.y + alien.height / 2 + 10;
var angle1 = Math.PI / 2 - Math.PI / 9; // 70deg
b1.speedY = Math.sin(angle1) * 14;
b1.speedX = Math.cos(angle1) * 14;
alienBullets.push(b1);
game.addChild(b1);
// Right bullet (angle +20deg)
var b2 = new AlienBullet();
b2.x = alien.x;
b2.y = alien.y + alien.height / 2 + 10;
var angle2 = Math.PI / 2 + Math.PI / 9; // 110deg
b2.speedY = Math.sin(angle2) * 14;
b2.speedX = Math.cos(angle2) * 14;
alienBullets.push(b2);
game.addChild(b2);
LK.getSound('alienShoot').play();
} else {
// Default: single bullet straight down
var b = new AlienBullet();
b.x = alien.x;
b.y = alien.y + alien.height / 2 + 10;
alienBullets.push(b);
game.addChild(b);
LK.getSound('alienShoot').play();
}
}
// Move handler (drag hero)
function handleMove(x, y, obj) {
if (dragNode) {
// Clamp to game area, avoid top 100px (menu)
var nx = Math.max(hero.width / 2, Math.min(GAME_WIDTH - hero.width / 2, x));
var ny = Math.max(GAME_HEIGHT - 600, Math.min(GAME_HEIGHT - hero.height / 2, y));
dragNode.x = nx;
dragNode.y = ny;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Only drag if touch is on hero
var local = hero.toLocal(game.toGlobal({
x: x,
y: y
}));
if (local.x > -hero.width / 2 && local.x < hero.width / 2 && local.y > -hero.height / 2 && local.y < hero.height / 2) {
dragNode = hero;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Tap to shoot
game.tap = function (x, y, obj) {
fireHeroBullets();
};
// Main update
game.update = function () {
// Hero update
hero.update();
// Fire hero bullets automatically if holding
if (dragNode === hero && LK.ticks % 6 === 0) {
fireHeroBullets();
}
// Update hero bullets
for (var i = heroBullets.length - 1; i >= 0; i--) {
var b = heroBullets[i];
b.update();
// Off screen
if (b.y < -b.height) {
b.destroy();
heroBullets.splice(i, 1);
continue;
}
// Hit alien
for (var j = aliens.length - 1; j >= 0; j--) {
var a = aliens[j];
if (a.alive && b.intersects(a)) {
a.flash();
a.hp -= 1;
b.destroy();
heroBullets.splice(i, 1);
if (a.hp <= 0) {
a.alive = false;
a.destroy();
aliens.splice(j, 1);
score += 100;
scoreTxt.setText(score);
maybeSpawnPowerup(a.x, a.y);
maybeSpawnCoin(a.x, a.y);
LK.getSound('explosion').play();
}
break;
}
}
}
// Update alien bullets
for (var i = alienBullets.length - 1; i >= 0; i--) {
var b = alienBullets[i];
b.update();
if (b.y > GAME_HEIGHT + b.height) {
b.destroy();
alienBullets.splice(i, 1);
continue;
}
// Hit hero
if (!hero.invincible && b.intersects(hero)) {
hero.flash();
hero.setInvincible(60);
b.destroy();
alienBullets.splice(i, 1);
// Explosion effect at hero ship position
LK.effects.flashObject(hero, 0xffe066, 700);
LK.effects.flashScreen(0xff0000, 400);
LK.getSound('explosion').play();
// Game over
LK.showGameOver();
return;
}
}
// Update aliens
for (var i = aliens.length - 1; i >= 0; i--) {
var a = aliens[i];
a.update();
// Game over if alien touches hero ship
if (a.alive && !hero.invincible && a.intersects(hero)) {
hero.flash();
// Explosion effect at hero ship position
LK.effects.flashObject(hero, 0xffe066, 700);
LK.effects.flashScreen(0xff0000, 800);
LK.getSound('explosion').play();
LK.showGameOver();
return;
}
// Fire bullet
// Reduce firing frequency: lower probability and increase cooldown
if (a.shootCooldown <= 0) {
if (a instanceof Alien3) {
// Alien3: much lower probability and higher cooldown
if (Math.random() < 0.002 + 0.0005 * wave) {
fireAlienBullet(a);
a.shootCooldown = 220 + Math.floor(Math.random() * 100);
}
} else {
if (Math.random() < 0.006 + 0.001 * wave) {
fireAlienBullet(a);
a.shootCooldown = 120 + Math.floor(Math.random() * 80);
}
}
}
// Off screen (bottom) or reached hero moving zone
if (a.y > GAME_HEIGHT - 600) {
// If any alien reaches hero moving zone, set flag to disable bonus for this wave
game._alienReachedHeroZone = true;
}
if (a.y > GAME_HEIGHT - 200) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Bounce alien off left/right borders
if (a.x - a.width / 2 <= 0 && a.speedX < 0) {
a.x = a.width / 2;
a.speedX = -a.speedX;
}
if (a.x + a.width / 2 >= GAME_WIDTH && a.speedX > 0) {
a.x = GAME_WIDTH - a.width / 2;
a.speedX = -a.speedX;
}
// Remove alien if it goes off screen at the top
if (a.y < -a.height) {
a.destroy();
aliens.splice(i, 1);
continue;
}
}
// Update powerups
for (var i = powerups.length - 1; i >= 0; i--) {
var p = powerups[i];
p.update();
if (p.y > GAME_HEIGHT + p.height) {
p.destroy();
powerups.splice(i, 1);
continue;
}
// Collect
if (p.intersects(hero)) {
hero.upgrade();
LK.getSound('powerup').play();
p.destroy();
powerups.splice(i, 1);
}
}
// Update coins
for (var i = coins.length - 1; i >= 0; i--) {
var c = coins[i];
c.update();
if (c.y > GAME_HEIGHT + c.height) {
c.destroy();
coins.splice(i, 1);
continue;
}
// Collect coin
if (c.intersects(hero)) {
score += 500; // Give additional score for collecting coin
scoreTxt.setText(score);
c.destroy();
coins.splice(i, 1);
// Optionally play a sound here if desired
}
}
// --- Wave bonus logic variables ---
if (typeof game._waveStartTime === "undefined") {
game._waveStartTime = Date.now();
}
if (typeof game._alienReachedHeroZone === "undefined") {
game._alienReachedHeroZone = false;
}
// Next wave
if (aliens.length === 0 && !game._wavePopupActive) {
// Calculate and award wave finish bonus if no alien reached hero zone
var bonusScore = 0;
var waveFinishTime = Date.now();
if (!game._alienReachedHeroZone) {
// Bonus: 5000 - 1000 * (seconds taken, min 0), min 1000, max 5000
var elapsedSec = Math.floor((waveFinishTime - game._waveStartTime) / 1000);
bonusScore = Math.max(1000, 5000 - 1000 * elapsedSec);
score += bonusScore;
scoreTxt.setText(score);
}
game._wavePopupActive = true;
// Create popup
if (!game._wavePopup) {
game._wavePopup = new Text2("Congratulations\nGet ready for the next wave", {
size: 120,
fill: 0xFFFF99,
align: "center"
});
game._wavePopup.anchor.set(0.5, 0.5);
}
if (wave >= 10) {
game._wavePopup.setText("Congratulations!\nYou completed all 10 waves!" + (bonusScore > 0 ? "\nWave Bonus: +" + bonusScore : ""));
} else {
if (bonusScore > 0) {
game._wavePopup.setText("Congratulations\nGet ready for the next wave\nWave Bonus: +" + bonusScore);
} else if (game._alienReachedHeroZone) {
game._wavePopup.setText("Congratulations\nGet ready for the next wave\n(No bonus: Aliens reached your zone!)");
} else {
game._wavePopup.setText("Congratulations\nGet ready for the next wave");
}
}
game._wavePopup.x = GAME_WIDTH / 2;
game._wavePopup.y = GAME_HEIGHT / 2;
if (!game._wavePopup.parent) {
game.addChild(game._wavePopup);
}
// Play popup sound
LK.getSound('powerup').play();
// Hold for 2 seconds, then start next wave or finish
LK.setTimeout(function () {
if (game._wavePopup && game._wavePopup.parent) {
game._wavePopup.parent.removeChild(game._wavePopup);
}
if (wave >= 10) {
LK.showYouWin();
} else {
wave += 1;
spawnWave(wave);
// Reset wave timer and alien zone flag
game._waveStartTime = Date.now();
game._alienReachedHeroZone = false;
game._wavePopupActive = false;
}
}, 2000);
}
};
// Start first wave
spawnWave(wave);
// Initial score
scoreTxt.setText(score);
// --- Add Invincibility Button ---
var invBtn = new Text2("INV", {
size: 90,
fill: 0xFFEE44,
align: "center"
});
invBtn.anchor.set(1, 1); // bottom right
invBtn.x = GAME_WIDTH - 40;
invBtn.y = GAME_HEIGHT - 40;
invBtn.interactive = true;
invBtn.buttonMode = true;
game.addChild(invBtn);
// Button press handler: toggle hero immortality
invBtn.down = function (x, y, obj) {
if (hero.invincible && hero.invincibleTimer > 1000) {
// Turn off immortality
hero.invincible = false;
hero.invincibleTimer = 0;
hero.alpha = 1;
} else {
// Turn on immortality
hero.setInvincible(99999); // Effectively infinite duration
hero.alpha = 0.5;
}
};
// --- Add PWR Button (Increase Power Level) ---
var pwrBtn = new Text2("PWR", {
size: 90,
fill: 0x7B1FA2,
// dark purple
align: "center"
});
pwrBtn.anchor.set(0.5, 1); // middle bottom
pwrBtn.x = GAME_WIDTH / 2;
pwrBtn.y = GAME_HEIGHT - 40;
pwrBtn.interactive = true;
pwrBtn.buttonMode = true;
game.addChild(pwrBtn);
pwrBtn.down = function (x, y, obj) {
if (hero && typeof hero.upgrade === "function") {
hero.upgrade();
}
};
// --- Add SMH Button (Kill All Aliens) ---
var smhBtn = new Text2("SMH", {
size: 90,
fill: 0xFF4444,
align: "center"
});
smhBtn.anchor.set(0, 1); // bottom left
smhBtn.x = 40;
smhBtn.y = GAME_HEIGHT - 40;
smhBtn.interactive = true;
smhBtn.buttonMode = true;
game.addChild(smhBtn);
smhBtn.down = function (x, y, obj) {
// Kill all aliens in the wave immediately
for (var i = aliens.length - 1; i >= 0; i--) {
var a = aliens[i];
if (a && a.alive) {
a.alive = false;
a.destroy();
aliens.splice(i, 1);
score += 100;
scoreTxt.setText(score);
maybeSpawnPowerup(a.x, a.y);
maybeSpawnCoin(a.x, a.y);
LK.getSound('explosion').play();
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -833,8 +833,26 @@
hero.setInvincible(99999); // Effectively infinite duration
hero.alpha = 0.5;
}
};
+// --- Add PWR Button (Increase Power Level) ---
+var pwrBtn = new Text2("PWR", {
+ size: 90,
+ fill: 0x7B1FA2,
+ // dark purple
+ align: "center"
+});
+pwrBtn.anchor.set(0.5, 1); // middle bottom
+pwrBtn.x = GAME_WIDTH / 2;
+pwrBtn.y = GAME_HEIGHT - 40;
+pwrBtn.interactive = true;
+pwrBtn.buttonMode = true;
+game.addChild(pwrBtn);
+pwrBtn.down = function (x, y, obj) {
+ if (hero && typeof hero.upgrade === "function") {
+ hero.upgrade();
+ }
+};
// --- Add SMH Button (Kill All Aliens) ---
var smhBtn = new Text2("SMH", {
size: 90,
fill: 0xFF4444,
Space ship with guns. In-Game asset. 2d. High contrast. No shadows
A green alien ship. In-Game asset. 2d. High contrast. No shadows
A navy blue alien ship. In-Game asset. 2d. High contrast. No shadows
A dark purple alien ship. In-Game asset. 2d. High contrast. No shadows
A coin having saturn logo. In-Game asset. 2d. High contrast. No shadows
A power-up logo for spaceships. In-Game asset. 2d. High contrast. No shadows
Giant bordeux ostentatious alien ship with ostentatious giant guns. Looking straightly down In-Game asset. 2d. High contrast. No shadows
red dot. In-Game asset. 2d. High contrast. No shadows
light yellow dot. In-Game asset. 2d. High contrast. No shadows
bgmusic
Music
explosion
Sound effect
alienexplosion
Sound effect
powerup
Sound effect
wavepass
Sound effect
coinsound
Sound effect
shoot
Sound effect
alienShoot
Sound effect
bossmusic
Music
bossmusic2
Music
bossexplosion
Sound effect
bossexplosion2
Sound effect
bossexplosion3
Sound effect
bossexplosion4
Sound effect
bosswin
Sound effect
rage
Sound effect
menumusic
Music
menuclick
Sound effect