User prompt
1- make background scroll faster 2- add 1 health point all enemies from the start 3- add hurt animation to all enemies ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
use 3 images and make them move downwards consecutively like a smooth animation ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1- make powerup spawn delay random between 12 to 16 2- add a space themed background image
User prompt
1- make powerup spawn delay random between 12 and 16 2- when an enemy reaches the bottom of the screen player will lose 1 healthpoint 3- make all enemies move a bit faster
User prompt
1- send ally spaceship from a random location when picked up 2- make tank enemy have 3 different attack types 3- make ally spaceship bigger 4- make tank enemy start move like zigzag enemy when stop ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1- lower the chance of hearth drop when enemies die to 5 percent 2- add a supportship powerup that sends an ally spaceship horizontally from bottom to top and make it destroy all enemies exept tank enemy on its path ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
add a start screen music
User prompt
add a background music to the game
User prompt
1-change shield's explanation in the controls tab with "Prevents from taking damage" 2- make yellow transparent circles bigger and less transparent 3- make "tap to play" and "controls" as buttons and remove orange box beneath it
User prompt
1- change shield's explanation in the controls tab with "prevents from taking damage" 2- add transparent yellow circle as a background for spreadshot powerup image and shield powerup image ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1- delete the rapidfire powerup 2- change the shield animation with a transparent blue circle bigger than player whenever shield powerup is taken 3- make the enemies drop a hearth with ten percent chance when destroyed 4- when player take the hearth refill 1 healthpoint of player 5- add explanations of powerups in the controls tab ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1- add tank enemies hurt animation to all enemies 2-make spreadshot powerup shoot bullets into 3 different directions 3- display the tank enemies health bar at the topside of the screen when spawned ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1- delete the speed powerup 2- add a spreadshot powerup that makes player shoot triple bullets 3- Make the white boxes 10 pixels wider 4- Make the white boxes metalic orange colour 5- drop down the enemy spawn rate 6- put the hearth symbols stand next to each other
User prompt
1- Make only 1 tank enemy appear every 5 wave and spawn it in the middle 2- show player's health with hearth shapes 3- every time a tank enemy show up show it's health with a bar on top of screen 4- increase all enemies health by 1 except tank enemy every 10 waves 5- increase tank enemies health by 2 every 5 wave 6- stop player shooting before the game start 7- player will stop shooting after the game over 8- add a white box background for the buttons in the start screen
User prompt
1- make player able to move horizontally 2- make a start screen and add a control explanation tab
User prompt
1- Make tank enemies appear only every five waves 2- Make tank enemies with 5 hitpoint 3- Make tank enemies stop when reaching horizontal mid lenght 4- Make zigzag enemies start appear after wave 2 5- Make bomber enemies start appearing after wave 3 6- Make fast enemies start appearing after wave 2 7- Make player have 3 hitpoints and show how much hitpoint left on top left corner
User prompt
make more type of enemies
Initial prompt
add some powerups
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.shootTimer = 0;
self.shootDelay = 120 + Math.random() * 120; // Random shoot delay
self.update = function () {
self.y += self.speed;
// Enemy shooting logic
self.shootTimer++;
if (self.shootTimer >= self.shootDelay && self.y > 100 && self.y < 2500) {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 30;
enemyBullets.push(bullet);
game.addChild(bullet);
self.shootTimer = 0;
self.shootDelay = 60 + Math.random() * 180;
}
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.shootTimer = 0;
self.shootDelay = 15; // Auto-fire rate
self.update = function () {
// Use dynamic shoot delay from powerups
self.shootDelay = playerShootDelay;
// Auto-fire bullets
self.shootTimer++;
if (self.shootTimer >= self.shootDelay) {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootTimer = 0;
}
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Powerup = Container.expand(function () {
var self = Container.call(this);
self.type = 'speed'; // Will be set when created
self.speed = 3;
self.bobTimer = 0;
self.originalY = 0;
self.init = function (type) {
self.type = type;
var assetName = 'powerupSpeed';
if (type === 'rapidfire') assetName = 'powerupRapidFire';
if (type === 'shield') assetName = 'powerupShield';
var powerupGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.originalY = self.y;
};
self.update = function () {
self.y += self.speed;
// Add bobbing motion
self.bobTimer += 0.1;
if (self.originalY !== 0) {
self.y = self.originalY + self.speed * (LK.ticks - self.spawnTick) + Math.sin(self.bobTimer) * 5;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
// Game variables
var player;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var powerups = [];
var enemySpawnTimer = 0;
var enemySpawnDelay = 60;
var powerupSpawnTimer = 0;
var powerupSpawnDelay = 900; // 15 seconds at 60fps
var waveNumber = 1;
var difficultyTimer = 0;
var dragNode = null;
// Player powerup states
var playerSpeed = 1;
var playerShootDelay = 15;
var playerShield = false;
var speedBoostTimer = 0;
var rapidFireTimer = 0;
var shieldTimer = 0;
// Initialize score display
var scoreTxt = new Text2('0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Initialize wave display
var waveTxt = new Text2('Wave 1', {
size: 40,
fill: 0xFFFF00
});
waveTxt.anchor.set(1, 0);
waveTxt.x = -20;
waveTxt.y = 20;
LK.gui.topRight.addChild(waveTxt);
// Create player
player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 150;
// Game input handling
function handleMove(x, y, obj) {
if (dragNode) {
var speed = playerSpeed;
var targetX = Math.max(40, Math.min(2048 - 40, x));
// Smooth movement with speed multiplier
var deltaX = targetX - dragNode.x;
dragNode.x += deltaX * speed * 0.15;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = player;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update loop
game.update = function () {
// Update powerup timers
if (speedBoostTimer > 0) {
speedBoostTimer--;
if (speedBoostTimer === 0) {
playerSpeed = 1;
}
}
if (rapidFireTimer > 0) {
rapidFireTimer--;
if (rapidFireTimer === 0) {
playerShootDelay = 15;
}
}
if (shieldTimer > 0) {
shieldTimer--;
if (shieldTimer === 0) {
playerShield = false;
player.alpha = 1.0;
} else {
// Shield visual effect
player.alpha = 0.7 + 0.3 * Math.sin(LK.ticks * 0.3);
}
}
// Update difficulty over time
difficultyTimer++;
if (difficultyTimer >= 1800) {
// Every 30 seconds at 60fps
waveNumber++;
waveTxt.setText('Wave ' + waveNumber);
enemySpawnDelay = Math.max(20, enemySpawnDelay - 5);
difficultyTimer = 0;
}
// Spawn powerups
powerupSpawnTimer++;
if (powerupSpawnTimer >= powerupSpawnDelay) {
var powerup = new Powerup();
var types = ['speed', 'rapidfire', 'shield'];
var randomType = types[Math.floor(Math.random() * types.length)];
powerup.x = 100 + Math.random() * (2048 - 200);
powerup.y = -50;
powerup.spawnTick = LK.ticks;
powerup.originalY = powerup.y;
powerup.init(randomType);
powerups.push(powerup);
game.addChild(powerup);
powerupSpawnTimer = 0;
powerupSpawnDelay = 600 + Math.random() * 600; // 10-20 seconds
}
// Spawn enemies
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnDelay) {
var enemy = new Enemy();
enemy.x = 100 + Math.random() * (2048 - 200);
enemy.y = -50;
enemy.speed = 1 + waveNumber * 0.3 + Math.random() * 2;
enemies.push(enemy);
game.addChild(enemy);
enemySpawnTimer = 0;
}
// Update and check player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY >= -30 && bullet.y < -30) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemies
var hitEnemy = false;
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Destroy both bullet and enemy
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore().toString());
LK.getSound('enemyHit').play();
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
hitEnemy = true;
break;
}
}
if (hitEnemy) continue;
bullet.lastY = bullet.y;
}
// Update and check enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY <= 2762 && bullet.y > 2762) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
if (playerShield) {
// Shield absorbs the bullet
LK.effects.flashObject(player, 0x0088ff, 300);
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
} else {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xff0000, 1000);
// Save high score
var currentScore = LK.getScore();
var highScore = storage.highScore || 0;
if (currentScore > highScore) {
storage.highScore = currentScore;
}
LK.showGameOver();
return;
}
}
bullet.lastY = bullet.y;
}
// Update and check enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
// Remove enemies that go off screen
if (enemy.lastY <= 2762 && enemy.y > 2762) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
if (playerShield) {
// Shield destroys the enemy
LK.effects.flashObject(player, 0x0088ff, 300);
LK.setScore(LK.getScore() + 5);
scoreTxt.setText(LK.getScore().toString());
enemy.destroy();
enemies.splice(i, 1);
continue;
} else {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xff0000, 1000);
// Save high score
var currentScore = LK.getScore();
var highScore = storage.highScore || 0;
if (currentScore > highScore) {
storage.highScore = currentScore;
}
LK.showGameOver();
return;
}
}
enemy.lastY = enemy.y;
}
// Update and check powerups
for (var i = powerups.length - 1; i >= 0; i--) {
var powerup = powerups[i];
if (powerup.lastY === undefined) powerup.lastY = powerup.y;
// Remove powerups that go off screen
if (powerup.lastY <= 2762 && powerup.y > 2762) {
powerup.destroy();
powerups.splice(i, 1);
continue;
}
// Check collision with player
if (powerup.intersects(player)) {
LK.getSound('powerup').play();
LK.effects.flashObject(player, 0x00ff00, 500);
// Apply powerup effect
if (powerup.type === 'speed') {
playerSpeed = 2.5;
speedBoostTimer = 600; // 10 seconds
} else if (powerup.type === 'rapidfire') {
playerShootDelay = 5;
rapidFireTimer = 600; // 10 seconds
} else if (powerup.type === 'shield') {
playerShield = true;
shieldTimer = 480; // 8 seconds
}
powerup.destroy();
powerups.splice(i, 1);
continue;
}
powerup.lastY = powerup.y;
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.shootTimer = 0;
self.shootDelay = 120 + Math.random() * 120; // Random shoot delay
self.update = function () {
self.y += self.speed;
// Enemy shooting logic
self.shootTimer++;
if (self.shootTimer >= self.shootDelay && self.y > 100 && self.y < 2500) {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 30;
enemyBullets.push(bullet);
game.addChild(bullet);
self.shootTimer = 0;
self.shootDelay = 60 + Math.random() * 180;
}
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.shootTimer = 0;
self.shootDelay = 15; // Auto-fire rate
self.update = function () {
// Use dynamic shoot delay from powerups
self.shootDelay = playerShootDelay;
// Auto-fire bullets
self.shootTimer++;
if (self.shootTimer >= self.shootDelay) {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootTimer = 0;
}
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Powerup = Container.expand(function () {
var self = Container.call(this);
self.type = 'speed'; // Will be set when created
self.speed = 3;
self.bobTimer = 0;
self.originalY = 0;
self.init = function (type) {
self.type = type;
var assetName = 'powerupSpeed';
if (type === 'rapidfire') assetName = 'powerupRapidFire';
if (type === 'shield') assetName = 'powerupShield';
var powerupGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.originalY = self.y;
};
self.update = function () {
self.y += self.speed;
// Add bobbing motion
self.bobTimer += 0.1;
if (self.originalY !== 0) {
self.y = self.originalY + self.speed * (LK.ticks - self.spawnTick) + Math.sin(self.bobTimer) * 5;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
// Game variables
var player;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var powerups = [];
var enemySpawnTimer = 0;
var enemySpawnDelay = 60;
var powerupSpawnTimer = 0;
var powerupSpawnDelay = 900; // 15 seconds at 60fps
var waveNumber = 1;
var difficultyTimer = 0;
var dragNode = null;
// Player powerup states
var playerSpeed = 1;
var playerShootDelay = 15;
var playerShield = false;
var speedBoostTimer = 0;
var rapidFireTimer = 0;
var shieldTimer = 0;
// Initialize score display
var scoreTxt = new Text2('0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Initialize wave display
var waveTxt = new Text2('Wave 1', {
size: 40,
fill: 0xFFFF00
});
waveTxt.anchor.set(1, 0);
waveTxt.x = -20;
waveTxt.y = 20;
LK.gui.topRight.addChild(waveTxt);
// Create player
player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 150;
// Game input handling
function handleMove(x, y, obj) {
if (dragNode) {
var speed = playerSpeed;
var targetX = Math.max(40, Math.min(2048 - 40, x));
// Smooth movement with speed multiplier
var deltaX = targetX - dragNode.x;
dragNode.x += deltaX * speed * 0.15;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = player;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update loop
game.update = function () {
// Update powerup timers
if (speedBoostTimer > 0) {
speedBoostTimer--;
if (speedBoostTimer === 0) {
playerSpeed = 1;
}
}
if (rapidFireTimer > 0) {
rapidFireTimer--;
if (rapidFireTimer === 0) {
playerShootDelay = 15;
}
}
if (shieldTimer > 0) {
shieldTimer--;
if (shieldTimer === 0) {
playerShield = false;
player.alpha = 1.0;
} else {
// Shield visual effect
player.alpha = 0.7 + 0.3 * Math.sin(LK.ticks * 0.3);
}
}
// Update difficulty over time
difficultyTimer++;
if (difficultyTimer >= 1800) {
// Every 30 seconds at 60fps
waveNumber++;
waveTxt.setText('Wave ' + waveNumber);
enemySpawnDelay = Math.max(20, enemySpawnDelay - 5);
difficultyTimer = 0;
}
// Spawn powerups
powerupSpawnTimer++;
if (powerupSpawnTimer >= powerupSpawnDelay) {
var powerup = new Powerup();
var types = ['speed', 'rapidfire', 'shield'];
var randomType = types[Math.floor(Math.random() * types.length)];
powerup.x = 100 + Math.random() * (2048 - 200);
powerup.y = -50;
powerup.spawnTick = LK.ticks;
powerup.originalY = powerup.y;
powerup.init(randomType);
powerups.push(powerup);
game.addChild(powerup);
powerupSpawnTimer = 0;
powerupSpawnDelay = 600 + Math.random() * 600; // 10-20 seconds
}
// Spawn enemies
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnDelay) {
var enemy = new Enemy();
enemy.x = 100 + Math.random() * (2048 - 200);
enemy.y = -50;
enemy.speed = 1 + waveNumber * 0.3 + Math.random() * 2;
enemies.push(enemy);
game.addChild(enemy);
enemySpawnTimer = 0;
}
// Update and check player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY >= -30 && bullet.y < -30) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemies
var hitEnemy = false;
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Destroy both bullet and enemy
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore().toString());
LK.getSound('enemyHit').play();
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
hitEnemy = true;
break;
}
}
if (hitEnemy) continue;
bullet.lastY = bullet.y;
}
// Update and check enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY <= 2762 && bullet.y > 2762) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
if (playerShield) {
// Shield absorbs the bullet
LK.effects.flashObject(player, 0x0088ff, 300);
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
} else {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xff0000, 1000);
// Save high score
var currentScore = LK.getScore();
var highScore = storage.highScore || 0;
if (currentScore > highScore) {
storage.highScore = currentScore;
}
LK.showGameOver();
return;
}
}
bullet.lastY = bullet.y;
}
// Update and check enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
// Remove enemies that go off screen
if (enemy.lastY <= 2762 && enemy.y > 2762) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
if (playerShield) {
// Shield destroys the enemy
LK.effects.flashObject(player, 0x0088ff, 300);
LK.setScore(LK.getScore() + 5);
scoreTxt.setText(LK.getScore().toString());
enemy.destroy();
enemies.splice(i, 1);
continue;
} else {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xff0000, 1000);
// Save high score
var currentScore = LK.getScore();
var highScore = storage.highScore || 0;
if (currentScore > highScore) {
storage.highScore = currentScore;
}
LK.showGameOver();
return;
}
}
enemy.lastY = enemy.y;
}
// Update and check powerups
for (var i = powerups.length - 1; i >= 0; i--) {
var powerup = powerups[i];
if (powerup.lastY === undefined) powerup.lastY = powerup.y;
// Remove powerups that go off screen
if (powerup.lastY <= 2762 && powerup.y > 2762) {
powerup.destroy();
powerups.splice(i, 1);
continue;
}
// Check collision with player
if (powerup.intersects(player)) {
LK.getSound('powerup').play();
LK.effects.flashObject(player, 0x00ff00, 500);
// Apply powerup effect
if (powerup.type === 'speed') {
playerSpeed = 2.5;
speedBoostTimer = 600; // 10 seconds
} else if (powerup.type === 'rapidfire') {
playerShootDelay = 5;
rapidFireTimer = 600; // 10 seconds
} else if (powerup.type === 'shield') {
playerShield = true;
shieldTimer = 480; // 8 seconds
}
powerup.destroy();
powerups.splice(i, 1);
continue;
}
powerup.lastY = powerup.y;
}
};
a spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a blue shield. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Bomb shaped spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a spaceship carrier from upside perspective. In-Game asset. 2d. High contrast. No shadows
pixelart heart. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
3 dot lines , aqua colour. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a 2D small space warship. In-Game asset. 2d. High contrast. No shadows
space theme background with stars and planets that are too far away,realistic. In-Game asset. 2d. High contrast. No shadows