User prompt
put a separate explosion sound for each memes. and make it work correctly.
User prompt
breast midium disappears when struck
User prompt
Put a separate explosion sound for each memes.
User prompt
Put a separate explosion sound for each memes.Put a separate explosion sound for each memes.Put a separate explosion sound for each memes.Put a separate explosion sound for each memes.
User prompt
Put a separate explosion sound for each memes.
User prompt
put a separate popping sound for each nozzle.
User prompt
Add 3 different background music and take turns.
User prompt
Add 3 different background music and take turns.
User prompt
minimize level, lives and score 0.5.
User prompt
tap to start will disappear from the screen when the game starts.
User prompt
The background of the tap to start place should be a dark gray background and cover the entire text.
User prompt
minimize the tap to start location very slightly and add a gray background.
User prompt
move the lives place very slightly to the left.
User prompt
move your lives a little to the right.
User prompt
move your lives a little to the right.
User prompt
move your lives a little to the left.
User prompt
shift the level slightly to the left.
User prompt
Move the level a little to the right and down.
User prompt
Let's move the score a little lower.
User prompt
just enlarge the text by 2 times
Code edit (2 edits merged)
Please save this source code
User prompt
enlarge all articles by 2x ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Asteroid Battle Blitz
Initial prompt
asteroid breast war
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0,
level: 1
});
/****
* Classes
****/
var Asteroid = Container.expand(function () {
var self = Container.call(this);
// Random size between 0.6 and 1.8
var scale = 0.6 + Math.random() * 1.2;
var asteroidGraphics = self.attachAsset('asteroid', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: scale,
scaleY: scale
});
// Asteroid properties based on size
self.speed = 3 + Math.random() * 4;
self.rotationSpeed = (Math.random() - 0.5) * 0.05;
self.health = Math.floor(20 * scale);
self.scoreValue = Math.floor(50 * scale);
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
self.takeDamage = function (amount) {
self.health -= amount;
// Flash asteroid when hit
LK.effects.flashObject(self, 0xff0000, 200);
return self.health <= 0;
};
return self;
});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -15; // Moving upward
self.damage = 10;
self.update = function () {
self.y += self.speed;
};
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 = 10; // Moving downward
self.damage = 10;
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
// Enemy ship properties
self.speed = 2 + Math.random() * 2;
self.health = 30;
self.scoreValue = 100;
self.movementPattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine wave
self.movementCounter = 0;
self.fireInterval = 60 + Math.floor(Math.random() * 60); // Frames between shots
self.fireCounter = Math.floor(Math.random() * 60); // Randomize initial fire timing
self.update = function () {
// Basic downward movement
self.y += self.speed;
// Apply movement pattern
self.movementCounter++;
switch (self.movementPattern) {
case 0:
// Straight down
break;
case 1:
// Zigzag
self.x += Math.sin(self.movementCounter * 0.1) * 3;
break;
case 2:
// Sine wave
self.x += Math.sin(self.movementCounter * 0.05) * 4;
break;
}
// Update fire counter
self.fireCounter++;
};
self.shouldFire = function () {
if (self.fireCounter >= self.fireInterval) {
self.fireCounter = 0;
return true;
}
return false;
};
self.takeDamage = function (amount) {
self.health -= amount;
// Flash enemy when hit
LK.effects.flashObject(self, 0xff0000, 200);
return self.health <= 0;
};
return self;
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.8
});
self.lifetime = 20; // Frames until explosion disappears
self.update = function () {
self.lifetime--;
// Scale up and fade out
self.scale.x += 0.05;
self.scale.y += 0.05;
explosionGraphics.alpha = self.lifetime / 20;
return self.lifetime <= 0; // Return true if explosion should be removed
};
return self;
});
var PlayerShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
// Ship properties
self.speed = 8;
self.health = 100;
self.maxHealth = 100;
self.shieldActive = false;
self.shieldDuration = 0;
self.shieldGraphics = null;
self.fireRate = 15;
self.powerUpTimer = 0;
self.powerUpType = null;
self.activateShield = function (duration) {
if (!self.shieldGraphics) {
self.shieldGraphics = self.attachAsset('shield', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.5
});
} else {
self.shieldGraphics.alpha = 0.5;
}
self.shieldActive = true;
self.shieldDuration = duration;
};
self.deactivateShield = function () {
if (self.shieldGraphics) {
self.shieldGraphics.alpha = 0;
}
self.shieldActive = false;
self.shieldDuration = 0;
};
self.takeDamage = function (amount) {
if (self.shieldActive) {
return;
}
self.health -= amount;
if (self.health <= 0) {
self.health = 0;
return true; // Ship destroyed
}
// Flash ship when damaged
LK.effects.flashObject(self, 0xff0000, 300);
return false; // Ship still alive
};
self.activatePowerUp = function (type, duration) {
// Reset any current power-up
if (self.powerUpType) {
self.deactivatePowerUp();
}
self.powerUpType = type;
self.powerUpTimer = duration;
// Apply power-up effect
switch (type) {
case 'speed':
self.speed = 12;
shipGraphics.tint = 0x2ecc71; // Green tint for speed
break;
case 'fireRate':
self.fireRate = 5;
shipGraphics.tint = 0xf1c40f; // Yellow tint for fire rate
break;
}
};
self.deactivatePowerUp = function () {
// Reset to default values
self.speed = 8;
self.fireRate = 15;
shipGraphics.tint = 0xffffff; // Reset tint
self.powerUpType = null;
};
self.update = function () {
// Update shield
if (self.shieldActive) {
self.shieldDuration--;
if (self.shieldDuration <= 0) {
self.deactivateShield();
}
}
// Update power-ups
if (self.powerUpType) {
self.powerUpTimer--;
if (self.powerUpTimer <= 0) {
self.deactivatePowerUp();
}
}
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerupGraphics = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
// Define power-up types and set random type
var types = ['shield', 'speed', 'fireRate'];
self.type = types[Math.floor(Math.random() * types.length)];
self.speed = 2 + Math.random() * 2;
self.duration = 300; // 5 seconds at 60fps
// Set color based on type
switch (self.type) {
case 'shield':
powerupGraphics.tint = 0x3498db; // Blue
break;
case 'speed':
powerupGraphics.tint = 0x2ecc71; // Green
break;
case 'fireRate':
powerupGraphics.tint = 0xf1c40f; // Yellow
break;
}
self.update = function () {
self.y += self.speed;
self.rotation += 0.02; // Rotate for visual effect
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game state variables
var gameWidth = 2048;
var gameHeight = 2732;
var player;
var playerBullets = [];
var enemyBullets = [];
var asteroids = [];
var enemies = [];
var powerUps = [];
var explosions = [];
var score = 0;
var level = storage.level;
var lives = 3;
var gameActive = true;
var lastShootTime = 0;
var waveTimer = 0;
var nextWaveTime = 300; // 5 seconds at 60fps
var waveCount = 0;
var levelComplete = false;
// Scoring and UI elements
var scoreTxt = new Text2('SCORE: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topRight.addChild(scoreTxt);
var levelTxt = new Text2('LEVEL: ' + level, {
size: 80,
fill: 0xFFFFFF
});
levelTxt.anchor.set(1, 0);
LK.gui.topLeft.addChild(levelTxt);
levelTxt.x = 200; // Move away from the corner
var livesTxt = new Text2('LIVES: ' + lives, {
size: 80,
fill: 0xFFFFFF
});
livesTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(livesTxt);
// Initialize player
function initializePlayer() {
player = new PlayerShip();
player.x = gameWidth / 2;
player.y = gameHeight - 200;
game.addChild(player);
}
// Create a new asteroid
function createAsteroid() {
var asteroid = new Asteroid();
asteroid.x = Math.random() * gameWidth;
asteroid.y = -100;
asteroids.push(asteroid);
game.addChild(asteroid);
}
// Create a new enemy ship
function createEnemy() {
var enemy = new EnemyShip();
enemy.x = Math.random() * gameWidth;
enemy.y = -100;
enemies.push(enemy);
game.addChild(enemy);
}
// Create a player bullet
function createPlayerBullet() {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
// Play shoot sound
LK.getSound('shoot').play();
// Update last shoot time
lastShootTime = LK.ticks;
}
// Create an enemy bullet
function createEnemyBullet(enemy) {
var bullet = new EnemyBullet();
bullet.x = enemy.x;
bullet.y = enemy.y + 30;
enemyBullets.push(bullet);
game.addChild(bullet);
}
// Create a power-up
function createPowerUp(x, y) {
// 20% chance to spawn a power-up
if (Math.random() < 0.2) {
var powerUp = new PowerUp();
powerUp.x = x;
powerUp.y = y;
powerUps.push(powerUp);
game.addChild(powerUp);
}
}
// Create an explosion
function createExplosion(x, y, scale) {
var explosion = new Explosion();
explosion.x = x;
explosion.y = y;
explosion.scale.set(scale || 1);
explosions.push(explosion);
game.addChild(explosion);
// Play explosion sound
LK.getSound('explosion').play();
}
// Start a new wave of enemies and asteroids
function startWave() {
waveCount++;
// Number of asteroids and enemies increases with level and wave
var numAsteroids = 5 + Math.floor(level * 1.5) + Math.floor(waveCount * 0.5);
var numEnemies = Math.floor(level * 0.8) + Math.floor(waveCount * 0.3);
// Spawn asteroids over time
for (var i = 0; i < numAsteroids; i++) {
LK.setTimeout(createAsteroid, i * 30);
}
// Spawn enemies over time
for (var j = 0; j < numEnemies; j++) {
LK.setTimeout(createEnemy, j * 60 + 600); // Delay enemies a bit after asteroids
}
}
// Check for level completion
function checkLevelCompletion() {
// Level is complete when all waves are finished and all enemies and asteroids are cleared
if (waveCount >= level + 2 && enemies.length === 0 && asteroids.length === 0 && !levelComplete) {
levelComplete = true;
// Display level complete message
var levelCompleteTxt = new Text2('LEVEL ' + level + ' COMPLETE!', {
size: 120,
fill: 0xFFFFFF
});
levelCompleteTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(levelCompleteTxt);
// Start next level after delay
LK.setTimeout(function () {
level++;
storage.level = level;
// Reset game state for next level
levelTxt.setText('LEVEL: ' + level);
waveCount = 0;
waveTimer = 0;
levelComplete = false;
// Remove level complete text
LK.gui.center.removeChild(levelCompleteTxt);
}, 3000);
}
}
// Update score display
function updateScore(points) {
score += points;
LK.setScore(score);
scoreTxt.setText('SCORE: ' + score);
// Update high score if needed
if (score > storage.highScore) {
storage.highScore = score;
}
}
// Reset game state
function resetGame() {
// Clear all game objects
playerBullets = [];
enemyBullets = [];
asteroids = [];
enemies = [];
powerUps = [];
explosions = [];
// Reset variables
score = 0;
lives = 3;
waveCount = 0;
waveTimer = 0;
levelComplete = false;
gameActive = true;
// Update UI
scoreTxt.setText('SCORE: 0');
livesTxt.setText('LIVES: ' + lives);
levelTxt.setText('LEVEL: ' + level);
// Initialize player
initializePlayer();
// Start first wave
startWave();
}
// Initialize game
function initGame() {
game.setBackgroundColor(0x0a0a2a); // Dark blue space background
// Initialize player
initializePlayer();
// Start music
LK.playMusic('spaceTheme', {
fade: {
start: 0,
end: 0.4,
duration: 1000
}
});
// Start first wave
startWave();
}
// Dragging support for touch controls
var isDragging = false;
// Mouse/touch handlers
game.down = function (x, y, obj) {
if (!gameActive) {
return;
}
// Start dragging
isDragging = true;
// Move player to touch position
player.x = x;
player.y = y;
};
game.up = function (x, y, obj) {
isDragging = false;
};
game.move = function (x, y, obj) {
if (!gameActive || !isDragging) {
return;
}
// Move player to follow touch
player.x = x;
// Limit vertical movement to bottom half of screen
player.y = Math.max(gameHeight / 2, Math.min(y, gameHeight - 100));
};
// Game update function
game.update = function () {
if (!gameActive) {
return;
}
// Update player
if (player) {
player.update();
// Keep player within screen bounds
player.x = Math.max(50, Math.min(player.x, gameWidth - 50));
player.y = Math.max(50, Math.min(player.y, gameHeight - 50));
// Auto-fire based on fire rate
if (LK.ticks - lastShootTime >= player.fireRate) {
createPlayerBullet();
}
}
// Wave timer logic
if (!levelComplete) {
waveTimer++;
if (waveTimer >= nextWaveTime && waveCount < level + 2) {
startWave();
waveTimer = 0;
nextWaveTime = 600; // 10 seconds between waves
}
}
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
bullet.update();
// Remove bullets that go off screen
if (bullet.y < -50) {
game.removeChild(bullet);
playerBullets.splice(i, 1);
continue;
}
// Check collision with asteroids
for (var j = asteroids.length - 1; j >= 0; j--) {
var asteroid = asteroids[j];
if (bullet.intersects(asteroid)) {
// Damage asteroid
if (asteroid.takeDamage(bullet.damage)) {
// Asteroid destroyed
updateScore(asteroid.scoreValue);
createExplosion(asteroid.x, asteroid.y, asteroid.scale.x);
createPowerUp(asteroid.x, asteroid.y);
game.removeChild(asteroid);
asteroids.splice(j, 1);
}
// Remove bullet
game.removeChild(bullet);
playerBullets.splice(i, 1);
break;
}
}
// Check collision with enemies
if (bullet) {
for (var k = enemies.length - 1; k >= 0; k--) {
var enemy = enemies[k];
if (bullet.intersects(enemy)) {
// Damage enemy
if (enemy.takeDamage(bullet.damage)) {
// Enemy destroyed
updateScore(enemy.scoreValue);
createExplosion(enemy.x, enemy.y, 1.2);
createPowerUp(enemy.x, enemy.y);
game.removeChild(enemy);
enemies.splice(k, 1);
}
// Remove bullet
game.removeChild(bullet);
playerBullets.splice(i, 1);
break;
}
}
}
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
bullet.update();
// Remove bullets that go off screen
if (bullet.y > gameHeight + 50) {
game.removeChild(bullet);
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (player && bullet.intersects(player)) {
// Damage player
if (player.takeDamage(bullet.damage)) {
// Player lost a life
lives--;
livesTxt.setText('LIVES: ' + lives);
if (lives <= 0) {
// Game over
createExplosion(player.x, player.y, 2);
game.removeChild(player);
player = null;
gameActive = false;
LK.showGameOver();
} else {
// Respawn player
createExplosion(player.x, player.y, 1.5);
game.removeChild(player);
// Small delay before respawning
LK.setTimeout(function () {
initializePlayer();
}, 1000);
}
}
// Remove bullet
game.removeChild(bullet);
enemyBullets.splice(i, 1);
}
}
// Update asteroids
for (var i = asteroids.length - 1; i >= 0; i--) {
var asteroid = asteroids[i];
asteroid.update();
// Remove asteroids that go off screen
if (asteroid.y > gameHeight + 100) {
game.removeChild(asteroid);
asteroids.splice(i, 1);
continue;
}
// Check collision with player
if (player && asteroid.intersects(player)) {
if (player.takeDamage(20)) {
// Player lost a life
lives--;
livesTxt.setText('LIVES: ' + lives);
if (lives <= 0) {
// Game over
createExplosion(player.x, player.y, 2);
game.removeChild(player);
player = null;
gameActive = false;
LK.showGameOver();
} else {
// Respawn player
createExplosion(player.x, player.y, 1.5);
game.removeChild(player);
// Small delay before respawning
LK.setTimeout(function () {
initializePlayer();
}, 1000);
}
}
// Destroy asteroid
createExplosion(asteroid.x, asteroid.y, asteroid.scale.x);
game.removeChild(asteroid);
asteroids.splice(i, 1);
}
}
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
enemy.update();
// Remove enemies that go off screen
if (enemy.y > gameHeight + 100) {
game.removeChild(enemy);
enemies.splice(i, 1);
continue;
}
// Check if enemy should fire
if (enemy.shouldFire() && player) {
createEnemyBullet(enemy);
}
// Check collision with player
if (player && enemy.intersects(player)) {
if (player.takeDamage(30)) {
// Player lost a life
lives--;
livesTxt.setText('LIVES: ' + lives);
if (lives <= 0) {
// Game over
createExplosion(player.x, player.y, 2);
game.removeChild(player);
player = null;
gameActive = false;
LK.showGameOver();
} else {
// Respawn player
createExplosion(player.x, player.y, 1.5);
game.removeChild(player);
// Small delay before respawning
LK.setTimeout(function () {
initializePlayer();
}, 1000);
}
}
// Destroy enemy
createExplosion(enemy.x, enemy.y, 1.2);
game.removeChild(enemy);
enemies.splice(i, 1);
}
}
// Update power-ups
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
powerUp.update();
// Remove power-ups that go off screen
if (powerUp.y > gameHeight + 50) {
game.removeChild(powerUp);
powerUps.splice(i, 1);
continue;
}
// Check collision with player
if (player && powerUp.intersects(player)) {
// Apply power-up effect
switch (powerUp.type) {
case 'shield':
player.activateShield(300); // 5 second shield
break;
case 'speed':
player.activatePowerUp('speed', 300); // 5 second speed boost
break;
case 'fireRate':
player.activatePowerUp('fireRate', 300); // 5 second fire rate boost
break;
}
// Play power-up sound
LK.getSound('powerUp').play();
// Remove power-up
game.removeChild(powerUp);
powerUps.splice(i, 1);
}
}
// Update explosions
for (var i = explosions.length - 1; i >= 0; i--) {
var explosion = explosions[i];
if (explosion.update()) {
// Remove explosion if lifetime is over
game.removeChild(explosion);
explosions.splice(i, 1);
}
}
// Check for level completion
checkLevelCompletion();
};
// Initialize the game
initGame(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,729 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1", {
+ highScore: 0,
+ level: 1
+});
+
+/****
+* Classes
+****/
+var Asteroid = Container.expand(function () {
+ var self = Container.call(this);
+ // Random size between 0.6 and 1.8
+ var scale = 0.6 + Math.random() * 1.2;
+ var asteroidGraphics = self.attachAsset('asteroid', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: scale,
+ scaleY: scale
+ });
+ // Asteroid properties based on size
+ self.speed = 3 + Math.random() * 4;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.05;
+ self.health = Math.floor(20 * scale);
+ self.scoreValue = Math.floor(50 * scale);
+ self.update = function () {
+ self.y += self.speed;
+ self.rotation += self.rotationSpeed;
+ };
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ // Flash asteroid when hit
+ LK.effects.flashObject(self, 0xff0000, 200);
+ return self.health <= 0;
+ };
+ return self;
+});
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -15; // Moving upward
+ self.damage = 10;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ 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 = 10; // Moving downward
+ self.damage = 10;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var EnemyShip = Container.expand(function () {
+ var self = Container.call(this);
+ var shipGraphics = self.attachAsset('enemyShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Enemy ship properties
+ self.speed = 2 + Math.random() * 2;
+ self.health = 30;
+ self.scoreValue = 100;
+ self.movementPattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine wave
+ self.movementCounter = 0;
+ self.fireInterval = 60 + Math.floor(Math.random() * 60); // Frames between shots
+ self.fireCounter = Math.floor(Math.random() * 60); // Randomize initial fire timing
+ self.update = function () {
+ // Basic downward movement
+ self.y += self.speed;
+ // Apply movement pattern
+ self.movementCounter++;
+ switch (self.movementPattern) {
+ case 0:
+ // Straight down
+ break;
+ case 1:
+ // Zigzag
+ self.x += Math.sin(self.movementCounter * 0.1) * 3;
+ break;
+ case 2:
+ // Sine wave
+ self.x += Math.sin(self.movementCounter * 0.05) * 4;
+ break;
+ }
+ // Update fire counter
+ self.fireCounter++;
+ };
+ self.shouldFire = function () {
+ if (self.fireCounter >= self.fireInterval) {
+ self.fireCounter = 0;
+ return true;
+ }
+ return false;
+ };
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ // Flash enemy when hit
+ LK.effects.flashObject(self, 0xff0000, 200);
+ return self.health <= 0;
+ };
+ return self;
+});
+var Explosion = Container.expand(function () {
+ var self = Container.call(this);
+ var explosionGraphics = self.attachAsset('explosion', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.8
+ });
+ self.lifetime = 20; // Frames until explosion disappears
+ self.update = function () {
+ self.lifetime--;
+ // Scale up and fade out
+ self.scale.x += 0.05;
+ self.scale.y += 0.05;
+ explosionGraphics.alpha = self.lifetime / 20;
+ return self.lifetime <= 0; // Return true if explosion should be removed
+ };
+ return self;
+});
+var PlayerShip = Container.expand(function () {
+ var self = Container.call(this);
+ var shipGraphics = self.attachAsset('playerShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Ship properties
+ self.speed = 8;
+ self.health = 100;
+ self.maxHealth = 100;
+ self.shieldActive = false;
+ self.shieldDuration = 0;
+ self.shieldGraphics = null;
+ self.fireRate = 15;
+ self.powerUpTimer = 0;
+ self.powerUpType = null;
+ self.activateShield = function (duration) {
+ if (!self.shieldGraphics) {
+ self.shieldGraphics = self.attachAsset('shield', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.5
+ });
+ } else {
+ self.shieldGraphics.alpha = 0.5;
+ }
+ self.shieldActive = true;
+ self.shieldDuration = duration;
+ };
+ self.deactivateShield = function () {
+ if (self.shieldGraphics) {
+ self.shieldGraphics.alpha = 0;
+ }
+ self.shieldActive = false;
+ self.shieldDuration = 0;
+ };
+ self.takeDamage = function (amount) {
+ if (self.shieldActive) {
+ return;
+ }
+ self.health -= amount;
+ if (self.health <= 0) {
+ self.health = 0;
+ return true; // Ship destroyed
+ }
+ // Flash ship when damaged
+ LK.effects.flashObject(self, 0xff0000, 300);
+ return false; // Ship still alive
+ };
+ self.activatePowerUp = function (type, duration) {
+ // Reset any current power-up
+ if (self.powerUpType) {
+ self.deactivatePowerUp();
+ }
+ self.powerUpType = type;
+ self.powerUpTimer = duration;
+ // Apply power-up effect
+ switch (type) {
+ case 'speed':
+ self.speed = 12;
+ shipGraphics.tint = 0x2ecc71; // Green tint for speed
+ break;
+ case 'fireRate':
+ self.fireRate = 5;
+ shipGraphics.tint = 0xf1c40f; // Yellow tint for fire rate
+ break;
+ }
+ };
+ self.deactivatePowerUp = function () {
+ // Reset to default values
+ self.speed = 8;
+ self.fireRate = 15;
+ shipGraphics.tint = 0xffffff; // Reset tint
+ self.powerUpType = null;
+ };
+ self.update = function () {
+ // Update shield
+ if (self.shieldActive) {
+ self.shieldDuration--;
+ if (self.shieldDuration <= 0) {
+ self.deactivateShield();
+ }
+ }
+ // Update power-ups
+ if (self.powerUpType) {
+ self.powerUpTimer--;
+ if (self.powerUpTimer <= 0) {
+ self.deactivatePowerUp();
+ }
+ }
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerupGraphics = self.attachAsset('powerUp', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Define power-up types and set random type
+ var types = ['shield', 'speed', 'fireRate'];
+ self.type = types[Math.floor(Math.random() * types.length)];
+ self.speed = 2 + Math.random() * 2;
+ self.duration = 300; // 5 seconds at 60fps
+ // Set color based on type
+ switch (self.type) {
+ case 'shield':
+ powerupGraphics.tint = 0x3498db; // Blue
+ break;
+ case 'speed':
+ powerupGraphics.tint = 0x2ecc71; // Green
+ break;
+ case 'fireRate':
+ powerupGraphics.tint = 0xf1c40f; // Yellow
+ break;
+ }
+ self.update = function () {
+ self.y += self.speed;
+ self.rotation += 0.02; // Rotate for visual effect
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
backgroundColor: 0x000000
-});
\ No newline at end of file
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var gameWidth = 2048;
+var gameHeight = 2732;
+var player;
+var playerBullets = [];
+var enemyBullets = [];
+var asteroids = [];
+var enemies = [];
+var powerUps = [];
+var explosions = [];
+var score = 0;
+var level = storage.level;
+var lives = 3;
+var gameActive = true;
+var lastShootTime = 0;
+var waveTimer = 0;
+var nextWaveTime = 300; // 5 seconds at 60fps
+var waveCount = 0;
+var levelComplete = false;
+// Scoring and UI elements
+var scoreTxt = new Text2('SCORE: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0, 0);
+LK.gui.topRight.addChild(scoreTxt);
+var levelTxt = new Text2('LEVEL: ' + level, {
+ size: 80,
+ fill: 0xFFFFFF
+});
+levelTxt.anchor.set(1, 0);
+LK.gui.topLeft.addChild(levelTxt);
+levelTxt.x = 200; // Move away from the corner
+var livesTxt = new Text2('LIVES: ' + lives, {
+ size: 80,
+ fill: 0xFFFFFF
+});
+livesTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(livesTxt);
+// Initialize player
+function initializePlayer() {
+ player = new PlayerShip();
+ player.x = gameWidth / 2;
+ player.y = gameHeight - 200;
+ game.addChild(player);
+}
+// Create a new asteroid
+function createAsteroid() {
+ var asteroid = new Asteroid();
+ asteroid.x = Math.random() * gameWidth;
+ asteroid.y = -100;
+ asteroids.push(asteroid);
+ game.addChild(asteroid);
+}
+// Create a new enemy ship
+function createEnemy() {
+ var enemy = new EnemyShip();
+ enemy.x = Math.random() * gameWidth;
+ enemy.y = -100;
+ enemies.push(enemy);
+ game.addChild(enemy);
+}
+// Create a player bullet
+function createPlayerBullet() {
+ var bullet = new Bullet();
+ bullet.x = player.x;
+ bullet.y = player.y - 40;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ // Play shoot sound
+ LK.getSound('shoot').play();
+ // Update last shoot time
+ lastShootTime = LK.ticks;
+}
+// Create an enemy bullet
+function createEnemyBullet(enemy) {
+ var bullet = new EnemyBullet();
+ bullet.x = enemy.x;
+ bullet.y = enemy.y + 30;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+}
+// Create a power-up
+function createPowerUp(x, y) {
+ // 20% chance to spawn a power-up
+ if (Math.random() < 0.2) {
+ var powerUp = new PowerUp();
+ powerUp.x = x;
+ powerUp.y = y;
+ powerUps.push(powerUp);
+ game.addChild(powerUp);
+ }
+}
+// Create an explosion
+function createExplosion(x, y, scale) {
+ var explosion = new Explosion();
+ explosion.x = x;
+ explosion.y = y;
+ explosion.scale.set(scale || 1);
+ explosions.push(explosion);
+ game.addChild(explosion);
+ // Play explosion sound
+ LK.getSound('explosion').play();
+}
+// Start a new wave of enemies and asteroids
+function startWave() {
+ waveCount++;
+ // Number of asteroids and enemies increases with level and wave
+ var numAsteroids = 5 + Math.floor(level * 1.5) + Math.floor(waveCount * 0.5);
+ var numEnemies = Math.floor(level * 0.8) + Math.floor(waveCount * 0.3);
+ // Spawn asteroids over time
+ for (var i = 0; i < numAsteroids; i++) {
+ LK.setTimeout(createAsteroid, i * 30);
+ }
+ // Spawn enemies over time
+ for (var j = 0; j < numEnemies; j++) {
+ LK.setTimeout(createEnemy, j * 60 + 600); // Delay enemies a bit after asteroids
+ }
+}
+// Check for level completion
+function checkLevelCompletion() {
+ // Level is complete when all waves are finished and all enemies and asteroids are cleared
+ if (waveCount >= level + 2 && enemies.length === 0 && asteroids.length === 0 && !levelComplete) {
+ levelComplete = true;
+ // Display level complete message
+ var levelCompleteTxt = new Text2('LEVEL ' + level + ' COMPLETE!', {
+ size: 120,
+ fill: 0xFFFFFF
+ });
+ levelCompleteTxt.anchor.set(0.5, 0.5);
+ LK.gui.center.addChild(levelCompleteTxt);
+ // Start next level after delay
+ LK.setTimeout(function () {
+ level++;
+ storage.level = level;
+ // Reset game state for next level
+ levelTxt.setText('LEVEL: ' + level);
+ waveCount = 0;
+ waveTimer = 0;
+ levelComplete = false;
+ // Remove level complete text
+ LK.gui.center.removeChild(levelCompleteTxt);
+ }, 3000);
+ }
+}
+// Update score display
+function updateScore(points) {
+ score += points;
+ LK.setScore(score);
+ scoreTxt.setText('SCORE: ' + score);
+ // Update high score if needed
+ if (score > storage.highScore) {
+ storage.highScore = score;
+ }
+}
+// Reset game state
+function resetGame() {
+ // Clear all game objects
+ playerBullets = [];
+ enemyBullets = [];
+ asteroids = [];
+ enemies = [];
+ powerUps = [];
+ explosions = [];
+ // Reset variables
+ score = 0;
+ lives = 3;
+ waveCount = 0;
+ waveTimer = 0;
+ levelComplete = false;
+ gameActive = true;
+ // Update UI
+ scoreTxt.setText('SCORE: 0');
+ livesTxt.setText('LIVES: ' + lives);
+ levelTxt.setText('LEVEL: ' + level);
+ // Initialize player
+ initializePlayer();
+ // Start first wave
+ startWave();
+}
+// Initialize game
+function initGame() {
+ game.setBackgroundColor(0x0a0a2a); // Dark blue space background
+ // Initialize player
+ initializePlayer();
+ // Start music
+ LK.playMusic('spaceTheme', {
+ fade: {
+ start: 0,
+ end: 0.4,
+ duration: 1000
+ }
+ });
+ // Start first wave
+ startWave();
+}
+// Dragging support for touch controls
+var isDragging = false;
+// Mouse/touch handlers
+game.down = function (x, y, obj) {
+ if (!gameActive) {
+ return;
+ }
+ // Start dragging
+ isDragging = true;
+ // Move player to touch position
+ player.x = x;
+ player.y = y;
+};
+game.up = function (x, y, obj) {
+ isDragging = false;
+};
+game.move = function (x, y, obj) {
+ if (!gameActive || !isDragging) {
+ return;
+ }
+ // Move player to follow touch
+ player.x = x;
+ // Limit vertical movement to bottom half of screen
+ player.y = Math.max(gameHeight / 2, Math.min(y, gameHeight - 100));
+};
+// Game update function
+game.update = function () {
+ if (!gameActive) {
+ return;
+ }
+ // Update player
+ if (player) {
+ player.update();
+ // Keep player within screen bounds
+ player.x = Math.max(50, Math.min(player.x, gameWidth - 50));
+ player.y = Math.max(50, Math.min(player.y, gameHeight - 50));
+ // Auto-fire based on fire rate
+ if (LK.ticks - lastShootTime >= player.fireRate) {
+ createPlayerBullet();
+ }
+ }
+ // Wave timer logic
+ if (!levelComplete) {
+ waveTimer++;
+ if (waveTimer >= nextWaveTime && waveCount < level + 2) {
+ startWave();
+ waveTimer = 0;
+ nextWaveTime = 600; // 10 seconds between waves
+ }
+ }
+ // Update player bullets
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var bullet = playerBullets[i];
+ bullet.update();
+ // Remove bullets that go off screen
+ if (bullet.y < -50) {
+ game.removeChild(bullet);
+ playerBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with asteroids
+ for (var j = asteroids.length - 1; j >= 0; j--) {
+ var asteroid = asteroids[j];
+ if (bullet.intersects(asteroid)) {
+ // Damage asteroid
+ if (asteroid.takeDamage(bullet.damage)) {
+ // Asteroid destroyed
+ updateScore(asteroid.scoreValue);
+ createExplosion(asteroid.x, asteroid.y, asteroid.scale.x);
+ createPowerUp(asteroid.x, asteroid.y);
+ game.removeChild(asteroid);
+ asteroids.splice(j, 1);
+ }
+ // Remove bullet
+ game.removeChild(bullet);
+ playerBullets.splice(i, 1);
+ break;
+ }
+ }
+ // Check collision with enemies
+ if (bullet) {
+ for (var k = enemies.length - 1; k >= 0; k--) {
+ var enemy = enemies[k];
+ if (bullet.intersects(enemy)) {
+ // Damage enemy
+ if (enemy.takeDamage(bullet.damage)) {
+ // Enemy destroyed
+ updateScore(enemy.scoreValue);
+ createExplosion(enemy.x, enemy.y, 1.2);
+ createPowerUp(enemy.x, enemy.y);
+ game.removeChild(enemy);
+ enemies.splice(k, 1);
+ }
+ // Remove bullet
+ game.removeChild(bullet);
+ playerBullets.splice(i, 1);
+ break;
+ }
+ }
+ }
+ }
+ // Update enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var bullet = enemyBullets[i];
+ bullet.update();
+ // Remove bullets that go off screen
+ if (bullet.y > gameHeight + 50) {
+ game.removeChild(bullet);
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (player && bullet.intersects(player)) {
+ // Damage player
+ if (player.takeDamage(bullet.damage)) {
+ // Player lost a life
+ lives--;
+ livesTxt.setText('LIVES: ' + lives);
+ if (lives <= 0) {
+ // Game over
+ createExplosion(player.x, player.y, 2);
+ game.removeChild(player);
+ player = null;
+ gameActive = false;
+ LK.showGameOver();
+ } else {
+ // Respawn player
+ createExplosion(player.x, player.y, 1.5);
+ game.removeChild(player);
+ // Small delay before respawning
+ LK.setTimeout(function () {
+ initializePlayer();
+ }, 1000);
+ }
+ }
+ // Remove bullet
+ game.removeChild(bullet);
+ enemyBullets.splice(i, 1);
+ }
+ }
+ // Update asteroids
+ for (var i = asteroids.length - 1; i >= 0; i--) {
+ var asteroid = asteroids[i];
+ asteroid.update();
+ // Remove asteroids that go off screen
+ if (asteroid.y > gameHeight + 100) {
+ game.removeChild(asteroid);
+ asteroids.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (player && asteroid.intersects(player)) {
+ if (player.takeDamage(20)) {
+ // Player lost a life
+ lives--;
+ livesTxt.setText('LIVES: ' + lives);
+ if (lives <= 0) {
+ // Game over
+ createExplosion(player.x, player.y, 2);
+ game.removeChild(player);
+ player = null;
+ gameActive = false;
+ LK.showGameOver();
+ } else {
+ // Respawn player
+ createExplosion(player.x, player.y, 1.5);
+ game.removeChild(player);
+ // Small delay before respawning
+ LK.setTimeout(function () {
+ initializePlayer();
+ }, 1000);
+ }
+ }
+ // Destroy asteroid
+ createExplosion(asteroid.x, asteroid.y, asteroid.scale.x);
+ game.removeChild(asteroid);
+ asteroids.splice(i, 1);
+ }
+ }
+ // Update enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ enemy.update();
+ // Remove enemies that go off screen
+ if (enemy.y > gameHeight + 100) {
+ game.removeChild(enemy);
+ enemies.splice(i, 1);
+ continue;
+ }
+ // Check if enemy should fire
+ if (enemy.shouldFire() && player) {
+ createEnemyBullet(enemy);
+ }
+ // Check collision with player
+ if (player && enemy.intersects(player)) {
+ if (player.takeDamage(30)) {
+ // Player lost a life
+ lives--;
+ livesTxt.setText('LIVES: ' + lives);
+ if (lives <= 0) {
+ // Game over
+ createExplosion(player.x, player.y, 2);
+ game.removeChild(player);
+ player = null;
+ gameActive = false;
+ LK.showGameOver();
+ } else {
+ // Respawn player
+ createExplosion(player.x, player.y, 1.5);
+ game.removeChild(player);
+ // Small delay before respawning
+ LK.setTimeout(function () {
+ initializePlayer();
+ }, 1000);
+ }
+ }
+ // Destroy enemy
+ createExplosion(enemy.x, enemy.y, 1.2);
+ game.removeChild(enemy);
+ enemies.splice(i, 1);
+ }
+ }
+ // Update power-ups
+ for (var i = powerUps.length - 1; i >= 0; i--) {
+ var powerUp = powerUps[i];
+ powerUp.update();
+ // Remove power-ups that go off screen
+ if (powerUp.y > gameHeight + 50) {
+ game.removeChild(powerUp);
+ powerUps.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (player && powerUp.intersects(player)) {
+ // Apply power-up effect
+ switch (powerUp.type) {
+ case 'shield':
+ player.activateShield(300); // 5 second shield
+ break;
+ case 'speed':
+ player.activatePowerUp('speed', 300); // 5 second speed boost
+ break;
+ case 'fireRate':
+ player.activatePowerUp('fireRate', 300); // 5 second fire rate boost
+ break;
+ }
+ // Play power-up sound
+ LK.getSound('powerUp').play();
+ // Remove power-up
+ game.removeChild(powerUp);
+ powerUps.splice(i, 1);
+ }
+ }
+ // Update explosions
+ for (var i = explosions.length - 1; i >= 0; i--) {
+ var explosion = explosions[i];
+ if (explosion.update()) {
+ // Remove explosion if lifetime is over
+ game.removeChild(explosion);
+ explosions.splice(i, 1);
+ }
+ }
+ // Check for level completion
+ checkLevelCompletion();
+};
+// Initialize the game
+initGame();
\ No newline at end of file
bulletShape. In-Game asset. 2d. High contrast. No shadows
fireButton is round and orange with a bullet pattern.. In-Game asset. 2d. High contrast. No shadows
rotateLeftButton is a square button with an arrow towards the left side.. In-Game asset. 2d. High contrast. No shadows
amungas memes no text one cracter. In-Game asset. 2d. High contrast. No shadows
trol face no text one cracter. In-Game asset. 2d. High contrast. No shadows
make those famous dog memes that are so well known.one cracter. head. In-Game asset. 2d. High contrast. No shadows
very well known pickles make Rick memes. single character. no writing.. In-Game asset. 2d. High contrast. No shadows
making very well known cat memes. single character. no writing.. In-Game asset. 2d. High contrast. No shadows
make very well known white ghost memes. single character. no writing.. In-Game asset. 2d. High contrast. No shadows
make very well known frog memes. single character. no writing. just head grinning. In-Game asset. 2d. High contrast. No shadows
make very well known duck memes. single character. no writing.. In-Game asset. 2d. High contrast. No shadows
make very well known rainbow cat memes. single character. no writing.. In-Game asset. 2d. High contrast. No shadows
very well known squid game just make cookie memes. single character. no writing.. In-Game asset. 2d. High contrast. No shadows
make very well known minecraft memes. single character. no writing.. In-Game asset. 2d. High contrast. No shadows
It's a spaceship made of orange pixels, reminiscent of arcade games.. In-Game asset. 2d. High contrast. No shadows
Not the hand with the cat.
A stylish orange letter G.. In-Game asset. 2d. High contrast. No shadows
shoot
Sound effect
meme0Explosion
Sound effect
explosion
Sound effect
meme1Explosion
Sound effect
meme2Explosion
Sound effect
meme3Explosion
Sound effect
meme4Explosion
Sound effect
meme5Explosion
Sound effect
meme6Explosion
Sound effect
meme7Explosion
Sound effect
meme8Explosion
Sound effect
meme9Explosion
Sound effect
levelStart
Sound effect
gameStart
Sound effect
beatSound
Sound effect
gameMusic1
Music
gameMusic2
Music
introMusic
Sound effect
gameMusic3
Music
meme10Explosion
Sound effect
meme11Explosion
Sound effect
meme12Explosion
Sound effect
outroMusic
Music
meme13Explosion
Sound effect
ballGrow
Sound effect
ballContract
Sound effect
letterAppear
Sound effect
colorTransform
Sound effect