/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Boss = Container.expand(function () { var self = Container.call(this); // Boss graphics var bossGraphics = self.attachAsset('boss', { anchorX: 0.5, anchorY: 0.5 }); // Boss properties self.speed = 2; self.health = 50; self.points = 500; self.lastX = 0; self.moveDirection = 1; self.movePhase = 0; self.active = false; self.turrets = []; self.attackPhase = 0; self.attackTimer = 0; // Add turrets for (var i = 0; i < 4; i++) { var turret = self.addChild(LK.getAsset('bossPart', { anchorX: 0.5, anchorY: 0.5, x: i < 2 ? -100 : 100, y: i % 2 === 0 ? -50 : 50 })); turret.health = 10; self.turrets.push(turret); } // Activate boss self.activate = function () { self.active = true; LK.getSound('bossAlert').play({ volume: 0.7 }); // Entrance animation self.y = -150; tween.to(self, { y: 400 }, 2000, tween.easing.easeOutQuad); }; // Damage the boss self.damage = function (amount, target) { if (!self.active) { return false; } if (target) { // Hit a turret target.health -= amount; if (target.health <= 0) { // Create explosion var explosion = new Explosion(); explosion.x = self.x + target.x; explosion.y = self.y + target.y; game.addChild(explosion); // Remove turret from array and destroy it var index = self.turrets.indexOf(target); if (index !== -1) { self.turrets.splice(index, 1); } target.destroy(); // Add score LK.setScore(LK.getScore() + 50); } else { // Flash turret when hit LK.effects.flashObject(target, 0xffffff, 300); } return false; } // Hit the main boss body self.health -= amount; if (self.health <= 0) { // Create explosion var finalExplosion = new Explosion(); finalExplosion.x = self.x; finalExplosion.y = self.y; game.addChild(finalExplosion); // Add score LK.setScore(LK.getScore() + self.points); // You win! LK.setTimeout(function () { LK.showYouWin(); }, 1000); // Remove boss self.destroy(); return true; } // Flash boss when hit LK.effects.flashObject(self, 0xffffff, 300); return false; }; // Fire bullets from turrets self.fire = function () { if (!self.active || self.turrets.length === 0) { return; } // Fire from each turret for (var i = 0; i < self.turrets.length; i++) { var turret = self.turrets[i]; var bullet = new EnemyBullet(); bullet.x = self.x + turret.x; bullet.y = self.y + turret.y + 40; game.addChild(bullet); enemyBullets.push(bullet); } LK.getSound('enemyShoot').play({ volume: 0.5 }); }; // Update the boss self.update = function () { if (!self.active) { return; } self.lastX = self.x; // Move horizontally in a sine wave pattern self.movePhase += 0.02; self.x = 2048 / 2 + Math.sin(self.movePhase) * 500; // Attack patterns self.attackTimer++; if (self.attackTimer >= 60) { self.attackTimer = 0; // Different attack patterns based on phase if (self.attackPhase === 0) { self.fire(); } else if (self.attackPhase === 1) { // Rapid fire self.fire(); LK.setTimeout(function () { self.fire(); }, 200); LK.setTimeout(function () { self.fire(); }, 400); } // Change attack phase based on health self.attackPhase = self.health < 25 ? 1 : 0; } }; return self; }); // Set game background var Enemy = Container.expand(function () { var self = Container.call(this); // Enemy graphics var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); // Enemy properties self.speed = 3; self.fireRate = 240; // Doubled the fire rate value to make enemies shoot less frequently self.health = 1; self.points = 10; self.lastY = 0; self.lastX = 0; self.moveDirection = 1; self.lastWasIntersecting = false; // Initialize with random horizontal movement self.horizontalSpeed = 1 + Math.random() * 2; if (Math.random() > 0.5) { self.horizontalSpeed *= -1; } // Damage the enemy self.damage = function (amount) { self.health -= amount; if (self.health <= 0) { // Create explosion var explosion = new Explosion(); explosion.x = self.x; explosion.y = self.y; game.addChild(explosion); // Add score LK.setScore(LK.getScore() + self.points); // Remove enemy self.destroy(); return true; } // Flash enemy when hit LK.effects.flashObject(self, 0xffffff, 300); return false; }; // Fire a bullet self.fire = function () { if (Math.random() < 0.3 && player && player.health > 0) { // Reduced chance from 0.7 to 0.3 var bullet = new EnemyBullet(); bullet.x = self.x; bullet.y = self.y + 40; game.addChild(bullet); enemyBullets.push(bullet); // Play sound with proper volume LK.getSound('enemyShoot').play({ volume: 0.4 }); } }; // Update the enemy self.update = function () { self.lastX = self.x; self.lastY = self.y; // Move down self.y += self.speed; // Move side to side self.x += self.horizontalSpeed * self.moveDirection; // Bounce at edges if (self.x < 100 || self.x > 2048 - 100) { self.moveDirection *= -1; } // Occasionally fire if (LK.ticks % self.fireRate === 0) { self.fire(); } }; return self; }); var EnemyBullet = Container.expand(function () { var self = Container.call(this); // Bullet graphics self.attachAsset('enemyBullet', { anchorX: 0.5, anchorY: 0.5 }); // Bullet properties self.speed = 5; // Reduced from 8 to 5 self.lastY = 0; self.lastWasIntersecting = false; // Update the bullet position self.update = function () { self.lastY = self.y; self.y += self.speed; }; return self; }); var Explosion = Container.expand(function () { var self = Container.call(this); // Explosion graphics var graphic = self.attachAsset('explosion', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); // Play explosion sound LK.getSound('explosion').play({ volume: 0.6 }); // Simple animation LK.setTimeout(function () { self.destroy(); }, 500); return self; }); var PlayerBullet = Container.expand(function () { var self = Container.call(this); // Bullet graphics self.attachAsset('playerBullet', { anchorX: 0.5, anchorY: 0.5 }); // Bullet properties self.speed = 15; self.damage = 1; self.lastY = 0; self.lastWasIntersecting = false; // Update the bullet position self.update = function () { self.lastY = self.y; self.y -= self.speed; }; return self; }); var PlayerShip = Container.expand(function () { var self = Container.call(this); // Ship graphics var shipGraphics = self.attachAsset('playerShip', { anchorX: 0.5, anchorY: 0.5 }); // Ship properties self.speed = 15; self.health = 3; self.lastX = 0; self.lastY = 0; self.fireRate = 15; self.lastFired = 0; self.invulnerable = false; // Make ship fire a bullet self.fire = function () { if (LK.ticks - self.lastFired >= self.fireRate) { var bullet = new PlayerBullet(); bullet.x = self.x; bullet.y = self.y - 50; game.addChild(bullet); bullets.push(bullet); // Play sound with proper volume LK.getSound('playerShoot').play({ volume: 0.5 }); self.lastFired = LK.ticks; } }; // Damage the ship self.damage = function () { if (self.invulnerable) { return; } // Game over on first hit LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; }; // Update method self.update = function () { self.lastX = self.x; self.lastY = self.y; // Auto fire bullets every 1 second (60 frames) if (LK.ticks % 60 === 0) { self.fire(); } }; return self; }); var PowerUp = Container.expand(function () { var self = Container.call(this); // PowerUp graphics var graphic = self.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5 }); // PowerUp properties self.speed = 2; self.lastY = 0; self.lastWasIntersecting = false; // Apply the powerup effect self.apply = function () { LK.getSound('powerup').play({ volume: 0.5 }); }; // Update the powerup self.update = function () { self.lastY = self.y; self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Set game background var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 })); // Initialize game variables var player; var bullets = []; var enemies = []; var enemyBullets = []; var score = 0; // Create score text var scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topLeft.addChild(scoreTxt); scoreTxt.x = 120; // Keep away from top left 100x100 area // Initialize player player = new PlayerShip(); player.x = 2048 / 2; player.y = 2732 - 200; game.addChild(player); // Create a new wave of enemies function createWave() { // Create a new wave of enemies var count = 5; // Reduced from 10 to 5 enemies for (var i = 0; i < count; i++) { var enemy = new Enemy(); enemy.x = 200 + Math.random() * (2048 - 400); enemy.y = -100 - Math.random() * 500; enemy.health = 1; enemy.points = 10; game.addChild(enemy); enemies.push(enemy); } } // Initial wave createWave(); // Start background music LK.playMusic('123Hero'); // Event handlers for player controls var touchActive = false; var touchX = 0; // Mouse/touch down game.down = function (x, y, obj) { touchActive = true; touchX = x; }; // Mouse/touch move game.move = function (x, y, obj) { if (touchActive && player && player.health > 0) { // Move player var deltaX = x - touchX; player.x += deltaX; // Keep player within screen bounds player.x = Math.max(100, Math.min(2048 - 100, player.x)); touchX = x; } }; // Mouse/touch up game.up = function (x, y, obj) { touchActive = false; }; // Main game update loop game.update = function () { // Update player if (player) { player.update(); } // Update player bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; bullet.update(); // Check if bullet is off screen if (bullet.y < -50) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check collision with enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (!bullet.lastWasIntersecting && bullet.intersects(enemy)) { bullet.lastWasIntersecting = true; // Damage enemy if (enemy.damage(bullet.damage)) { enemies.splice(j, 1); // Create new enemies when all are defeated if (enemies.length === 0) { createWave(); } } // Remove bullet bullet.destroy(); bullets.splice(i, 1); break; } } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { var enemyBullet = enemyBullets[i]; enemyBullet.update(); // Check if bullet is off screen if (enemyBullet.y > 2732 + 50) { enemyBullet.destroy(); enemyBullets.splice(i, 1); continue; } // Check collision with player if (player && player.health > 0 && !enemyBullet.lastWasIntersecting && enemyBullet.intersects(player)) { enemyBullet.lastWasIntersecting = true; // Damage player player.damage(); // Remove bullet enemyBullet.destroy(); enemyBullets.splice(i, 1); } } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; enemy.update(); // Check if enemy is off screen if (enemy.y > 2732 + 100) { enemy.destroy(); enemies.splice(i, 1); // Create new enemies when all are gone if (enemies.length === 0) { createWave(); } continue; } // Check collision with player if (player && player.health > 0 && !enemy.lastWasIntersecting && enemy.intersects(player)) { enemy.lastWasIntersecting = true; // Damage player player.damage(); // Damage enemy if (enemy.damage(1)) { enemies.splice(i, 1); // Create new enemies when all are gone if (enemies.length === 0) { createWave(); } } } } // Update score text scoreTxt.setText('Score: ' + LK.getScore()); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Boss = Container.expand(function () {
var self = Container.call(this);
// Boss graphics
var bossGraphics = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
// Boss properties
self.speed = 2;
self.health = 50;
self.points = 500;
self.lastX = 0;
self.moveDirection = 1;
self.movePhase = 0;
self.active = false;
self.turrets = [];
self.attackPhase = 0;
self.attackTimer = 0;
// Add turrets
for (var i = 0; i < 4; i++) {
var turret = self.addChild(LK.getAsset('bossPart', {
anchorX: 0.5,
anchorY: 0.5,
x: i < 2 ? -100 : 100,
y: i % 2 === 0 ? -50 : 50
}));
turret.health = 10;
self.turrets.push(turret);
}
// Activate boss
self.activate = function () {
self.active = true;
LK.getSound('bossAlert').play({
volume: 0.7
});
// Entrance animation
self.y = -150;
tween.to(self, {
y: 400
}, 2000, tween.easing.easeOutQuad);
};
// Damage the boss
self.damage = function (amount, target) {
if (!self.active) {
return false;
}
if (target) {
// Hit a turret
target.health -= amount;
if (target.health <= 0) {
// Create explosion
var explosion = new Explosion();
explosion.x = self.x + target.x;
explosion.y = self.y + target.y;
game.addChild(explosion);
// Remove turret from array and destroy it
var index = self.turrets.indexOf(target);
if (index !== -1) {
self.turrets.splice(index, 1);
}
target.destroy();
// Add score
LK.setScore(LK.getScore() + 50);
} else {
// Flash turret when hit
LK.effects.flashObject(target, 0xffffff, 300);
}
return false;
}
// Hit the main boss body
self.health -= amount;
if (self.health <= 0) {
// Create explosion
var finalExplosion = new Explosion();
finalExplosion.x = self.x;
finalExplosion.y = self.y;
game.addChild(finalExplosion);
// Add score
LK.setScore(LK.getScore() + self.points);
// You win!
LK.setTimeout(function () {
LK.showYouWin();
}, 1000);
// Remove boss
self.destroy();
return true;
}
// Flash boss when hit
LK.effects.flashObject(self, 0xffffff, 300);
return false;
};
// Fire bullets from turrets
self.fire = function () {
if (!self.active || self.turrets.length === 0) {
return;
}
// Fire from each turret
for (var i = 0; i < self.turrets.length; i++) {
var turret = self.turrets[i];
var bullet = new EnemyBullet();
bullet.x = self.x + turret.x;
bullet.y = self.y + turret.y + 40;
game.addChild(bullet);
enemyBullets.push(bullet);
}
LK.getSound('enemyShoot').play({
volume: 0.5
});
};
// Update the boss
self.update = function () {
if (!self.active) {
return;
}
self.lastX = self.x;
// Move horizontally in a sine wave pattern
self.movePhase += 0.02;
self.x = 2048 / 2 + Math.sin(self.movePhase) * 500;
// Attack patterns
self.attackTimer++;
if (self.attackTimer >= 60) {
self.attackTimer = 0;
// Different attack patterns based on phase
if (self.attackPhase === 0) {
self.fire();
} else if (self.attackPhase === 1) {
// Rapid fire
self.fire();
LK.setTimeout(function () {
self.fire();
}, 200);
LK.setTimeout(function () {
self.fire();
}, 400);
}
// Change attack phase based on health
self.attackPhase = self.health < 25 ? 1 : 0;
}
};
return self;
});
// Set game background
var Enemy = Container.expand(function () {
var self = Container.call(this);
// Enemy graphics
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
// Enemy properties
self.speed = 3;
self.fireRate = 240; // Doubled the fire rate value to make enemies shoot less frequently
self.health = 1;
self.points = 10;
self.lastY = 0;
self.lastX = 0;
self.moveDirection = 1;
self.lastWasIntersecting = false;
// Initialize with random horizontal movement
self.horizontalSpeed = 1 + Math.random() * 2;
if (Math.random() > 0.5) {
self.horizontalSpeed *= -1;
}
// Damage the enemy
self.damage = function (amount) {
self.health -= amount;
if (self.health <= 0) {
// Create explosion
var explosion = new Explosion();
explosion.x = self.x;
explosion.y = self.y;
game.addChild(explosion);
// Add score
LK.setScore(LK.getScore() + self.points);
// Remove enemy
self.destroy();
return true;
}
// Flash enemy when hit
LK.effects.flashObject(self, 0xffffff, 300);
return false;
};
// Fire a bullet
self.fire = function () {
if (Math.random() < 0.3 && player && player.health > 0) {
// Reduced chance from 0.7 to 0.3
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
game.addChild(bullet);
enemyBullets.push(bullet);
// Play sound with proper volume
LK.getSound('enemyShoot').play({
volume: 0.4
});
}
};
// Update the enemy
self.update = function () {
self.lastX = self.x;
self.lastY = self.y;
// Move down
self.y += self.speed;
// Move side to side
self.x += self.horizontalSpeed * self.moveDirection;
// Bounce at edges
if (self.x < 100 || self.x > 2048 - 100) {
self.moveDirection *= -1;
}
// Occasionally fire
if (LK.ticks % self.fireRate === 0) {
self.fire();
}
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
// Bullet graphics
self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
// Bullet properties
self.speed = 5; // Reduced from 8 to 5
self.lastY = 0;
self.lastWasIntersecting = false;
// Update the bullet position
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
};
return self;
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
// Explosion graphics
var graphic = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.8
});
// Play explosion sound
LK.getSound('explosion').play({
volume: 0.6
});
// Simple animation
LK.setTimeout(function () {
self.destroy();
}, 500);
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
// Bullet graphics
self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
// Bullet properties
self.speed = 15;
self.damage = 1;
self.lastY = 0;
self.lastWasIntersecting = false;
// Update the bullet position
self.update = function () {
self.lastY = self.y;
self.y -= self.speed;
};
return self;
});
var PlayerShip = Container.expand(function () {
var self = Container.call(this);
// Ship graphics
var shipGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
// Ship properties
self.speed = 15;
self.health = 3;
self.lastX = 0;
self.lastY = 0;
self.fireRate = 15;
self.lastFired = 0;
self.invulnerable = false;
// Make ship fire a bullet
self.fire = function () {
if (LK.ticks - self.lastFired >= self.fireRate) {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 50;
game.addChild(bullet);
bullets.push(bullet);
// Play sound with proper volume
LK.getSound('playerShoot').play({
volume: 0.5
});
self.lastFired = LK.ticks;
}
};
// Damage the ship
self.damage = function () {
if (self.invulnerable) {
return;
}
// Game over on first hit
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
};
// Update method
self.update = function () {
self.lastX = self.x;
self.lastY = self.y;
// Auto fire bullets every 1 second (60 frames)
if (LK.ticks % 60 === 0) {
self.fire();
}
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
// PowerUp graphics
var graphic = self.attachAsset('shield', {
anchorX: 0.5,
anchorY: 0.5
});
// PowerUp properties
self.speed = 2;
self.lastY = 0;
self.lastWasIntersecting = false;
// Apply the powerup effect
self.apply = function () {
LK.getSound('powerup').play({
volume: 0.5
});
};
// Update the powerup
self.update = function () {
self.lastY = self.y;
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Set game background
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: 2048,
height: 2732
}));
// Initialize game variables
var player;
var bullets = [];
var enemies = [];
var enemyBullets = [];
var score = 0;
// Create score text
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreTxt);
scoreTxt.x = 120; // Keep away from top left 100x100 area
// Initialize player
player = new PlayerShip();
player.x = 2048 / 2;
player.y = 2732 - 200;
game.addChild(player);
// Create a new wave of enemies
function createWave() {
// Create a new wave of enemies
var count = 5; // Reduced from 10 to 5 enemies
for (var i = 0; i < count; i++) {
var enemy = new Enemy();
enemy.x = 200 + Math.random() * (2048 - 400);
enemy.y = -100 - Math.random() * 500;
enemy.health = 1;
enemy.points = 10;
game.addChild(enemy);
enemies.push(enemy);
}
}
// Initial wave
createWave();
// Start background music
LK.playMusic('123Hero');
// Event handlers for player controls
var touchActive = false;
var touchX = 0;
// Mouse/touch down
game.down = function (x, y, obj) {
touchActive = true;
touchX = x;
};
// Mouse/touch move
game.move = function (x, y, obj) {
if (touchActive && player && player.health > 0) {
// Move player
var deltaX = x - touchX;
player.x += deltaX;
// Keep player within screen bounds
player.x = Math.max(100, Math.min(2048 - 100, player.x));
touchX = x;
}
};
// Mouse/touch up
game.up = function (x, y, obj) {
touchActive = false;
};
// Main game update loop
game.update = function () {
// Update player
if (player) {
player.update();
}
// Update player bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
bullet.update();
// Check if bullet is off screen
if (bullet.y < -50) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check collision with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (!bullet.lastWasIntersecting && bullet.intersects(enemy)) {
bullet.lastWasIntersecting = true;
// Damage enemy
if (enemy.damage(bullet.damage)) {
enemies.splice(j, 1);
// Create new enemies when all are defeated
if (enemies.length === 0) {
createWave();
}
}
// Remove bullet
bullet.destroy();
bullets.splice(i, 1);
break;
}
}
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var enemyBullet = enemyBullets[i];
enemyBullet.update();
// Check if bullet is off screen
if (enemyBullet.y > 2732 + 50) {
enemyBullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (player && player.health > 0 && !enemyBullet.lastWasIntersecting && enemyBullet.intersects(player)) {
enemyBullet.lastWasIntersecting = true;
// Damage player
player.damage();
// Remove bullet
enemyBullet.destroy();
enemyBullets.splice(i, 1);
}
}
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
enemy.update();
// Check if enemy is off screen
if (enemy.y > 2732 + 100) {
enemy.destroy();
enemies.splice(i, 1);
// Create new enemies when all are gone
if (enemies.length === 0) {
createWave();
}
continue;
}
// Check collision with player
if (player && player.health > 0 && !enemy.lastWasIntersecting && enemy.intersects(player)) {
enemy.lastWasIntersecting = true;
// Damage player
player.damage();
// Damage enemy
if (enemy.damage(1)) {
enemies.splice(i, 1);
// Create new enemies when all are gone
if (enemies.length === 0) {
createWave();
}
}
}
}
// Update score text
scoreTxt.setText('Score: ' + LK.getScore());
};
top down 32 bit image manta ray air warplane. In-Game asset. 2d. High contrast. No shadows
2d disney style image about zone of blue sky. In-Game asset. 2d. High contrast. No shadows
red laser. In-Game asset. 2d. High contrast. No shadows
top down 2d scifi pelican war air plane look a like. In-Game asset. 2d. High contrast. No shadows
vertical torpedo fall. In-Game asset. 2d. High contrast. No shadows
disney image style yellow explosion. In-Game asset. 2d. High contrast. No shadows