User prompt
Remove the bullet firing from the blaster class.
User prompt
Remove the bullets from blaster
User prompt
Do that please.
User prompt
When the laser fires, keep the top of the Y axis of the asset pinned to the point of origin. Only stretch the other end of the asset.
User prompt
Change the angle of the laser asset as appropriate to target the players position when firing.
User prompt
The laser should be traveling along the Y axis of the asset with the top end of the asset originating from the Blaster.
User prompt
Please fix the bug: 'TypeError: null is not an object (evaluating 'self.laserCharge.x')' in or related to this line: 'laser.x = self.laserCharge.x;' Line Number: 79
User prompt
When firing the laser. Spawn the laser asset at the same location as the laser charge and at the correct angle for the laser to intersect with the players location
User prompt
Add the second phase of the laser sequence. After charge is complete shoot a laser at the players location. Do this by using Laser asset and quickly stretching it across the screen towards the players location. If the end of the laser travels off the screen, destroy the laser.
User prompt
Add the second phase of the laser sequence. After charge is complete shoot a laser at the players location. Do this by using Laser asset and quickly stretching it across the screen until the end travels off screen. Then destroy it.
User prompt
Flatten the laser charges along the opposite axis as the stretch is happening at the same time.
User prompt
Reduce time of charge to 1.5 seconds but keep overall scale growth the same.
User prompt
Make sure both laser charges are destroyed after charging is over
User prompt
Spawn a second laser charge over top of the same location on the blaster and have it stretch in the exact same way along the Y axis
User prompt
Keep the charge time the same, but increase the overall scale growth
User prompt
Move the spawn location of the laser charge down 5% on the blaster
User prompt
Increase the opacity of the laser charge to 75%
User prompt
Increase the amount of scale growth.
User prompt
Have the charge grow quicker.
User prompt
Only increase the scale along the X axis, not the Y
User prompt
Only increase the scale along the Y axis, not the X
User prompt
As the laser charge stretches, increase scale as well.
User prompt
During laser charge sequence stretch the charge along the x axis
User prompt
Remove all stretching and flattening from the laser charge sequence.
User prompt
Remove the Y axis stretch on laser charge.
/**** * Classes ****/ // Blaster class representing a shooting enemy var Blaster = Container.expand(function () { var self = Container.call(this); var blasterGraphics = self.attachAsset('Blaster', { anchorX: 0.5, anchorY: 0.5 }); self.HitPoints = 5; // Moderate hit points for Blaster self.speed = 3; // Moderate speed for Blaster self.shootInterval = 60; // Interval for shooting bullets self.update = function () { // Laser charge-up phase if (self.chargeUp) { if (!self.laserCharge) { self.laserCharge = LK.getAsset('LaserCharge', { anchorX: 0.5, anchorY: 0.5, alpha: 0.75 }); self.laserCharge.y = blasterGraphics.height * 0.05; // Move laser charge down 5% on the blaster self.addChild(self.laserCharge); // Create a second laser charge for Y-axis stretching self.laserChargeY = LK.getAsset('LaserCharge', { anchorX: 0.5, anchorY: 0.5, alpha: 0.75 }); self.laserChargeY.y = blasterGraphics.height * 0.05; // Align with the first laser charge self.addChild(self.laserChargeY); self.chargeStartTime = LK.ticks; } var chargeProgress = (LK.ticks - self.chargeStartTime) / 90; // 1.5 seconds at 60 FPS self.laserCharge.alpha = 0.5; self.laserCharge.scale.x = 1 + chargeProgress * 3; // Increase stretch along the x-axis self.laserCharge.scale.y = 1 - chargeProgress * 0.5; // Flatten along Y-axis self.laserChargeY.scale.x = 1 - chargeProgress * 0.5; // Flatten along X-axis for the second charge self.laserChargeY.scale.y = 1 + chargeProgress * 3; // Increase stretch along the y-axis if (chargeProgress >= 1) { self.removeChild(self.laserCharge); self.removeChild(self.laserChargeY); self.laserCharge = null; self.laserChargeY = null; self.chargeUp = false; // Start laser shooting phase var laser = LK.getAsset('LaserBeam', { anchorX: 0.5, anchorY: 0 }); if (self.laserCharge) { laser.x = self.laserCharge.x; laser.y = self.laserCharge.y; } self.addChild(laser); // Calculate direction towards hero var directionX = hero.x - self.x; var directionY = hero.y - (self.y + blasterGraphics.height / 2); var magnitude = Math.sqrt(directionX * directionX + directionY * directionY); directionX /= magnitude; directionY /= magnitude; // Adjust laser angle to target the player's position laser.rotation = Math.atan2(directionY, directionX) - Math.PI / 2; // Stretch laser towards hero laser.update = function () { laser.scale.y = Math.max(1, laser.scale.y + 0.1); // Stretch effect from the bottom // Destroy laser if it goes off screen if (laser.x < 0 || laser.x > 2048 || laser.y < 0 || laser.y > 2732) { self.removeChild(laser); } }; } return; } // Check for nearby enemies and adjust path to avoid collisions var nearbyEnemy = enemies.find(function (enemy) { return enemy !== self && Math.abs(enemy.x - self.x) < 100 && Math.abs(enemy.y - self.y) < 100; }); if (nearbyEnemy) { self.x += (self.x < nearbyEnemy.x ? -1 : 1) * self.speed; // Move away from the nearby enemy } else { self.y += self.speed; } // Destroy if out of screen if (self.y > 2732) { self.destroy(); var index = enemies.indexOf(self); if (index > -1) { enemies.splice(index, 1); } } }; }); // BlasterBullet class for blaster's bullets var BlasterBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('heroBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; // Speed of the bullet self.update = function () { self.y += self.speed; if (self.y > 2732) { self.destroy(); var index = enemies.indexOf(self); if (index > -1) { enemies.splice(index, 1); } } }; }); // Bruiser class representing a tougher enemy var Bruiser = Container.expand(function () { var self = Container.call(this); var bruiserGraphics = self.attachAsset('Bruiser', { anchorX: 0.5, anchorY: 0.5 }); self.HitPoints = 10; // Higher hit points for Bruiser self.speed = 4; // Increased speed for Bruiser self.update = function () { // Implement mechanical stomping movement if (LK.ticks % 80 < 20) { bruiserGraphics.scale.x = 1.1; bruiserGraphics.scale.y = 0.9; bruiserGraphics.rotation = 0.1; // Tilt right } else if (LK.ticks % 80 < 40) { bruiserGraphics.scale.x = 1.0; bruiserGraphics.scale.y = 1.0; bruiserGraphics.rotation = 0; } else if (LK.ticks % 80 < 60) { bruiserGraphics.scale.x = 1.1; bruiserGraphics.scale.y = 0.9; bruiserGraphics.rotation = -0.1; // Tilt left } else { bruiserGraphics.scale.x = 1.0; bruiserGraphics.scale.y = 1.0; bruiserGraphics.rotation = 0; } // Move downwards only during tilt phases if (LK.ticks % 80 < 20 || LK.ticks % 80 >= 40 && LK.ticks % 80 < 60) { // Check for nearby enemies and adjust path to avoid collisions var nearbyEnemy = enemies.find(function (enemy) { return enemy !== self && Math.abs(enemy.x - self.x) < 100 && Math.abs(enemy.y - self.y) < 100; }); if (nearbyEnemy) { self.x += (self.x < nearbyEnemy.x ? -1 : 1) * self.speed; // Move away from the nearby enemy } else { self.y += self.speed; } } if (self.y > 2732) { self.destroy(); var index = enemies.indexOf(self); if (index > -1) { enemies.splice(index, 1); } } }; }); // BruiserPiece class for bruiser destruction effect var BruiserPiece = Container.expand(function (assetType) { var self = Container.call(this); var pieceGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5 }); self.speedX = -Math.random() * 6 + 3; // Switch direction of horizontal speed self.speedY = Math.random() * 4 - 2; // Random vertical speed self.alphaDecay = 0.02; // Rate at which the piece fades out self.update = function () { self.x += self.speedX; self.y += self.speedY; pieceGraphics.rotation += Math.random() * 0.1 - 0.05; // Add slight random rotation pieceGraphics.alpha -= self.alphaDecay; if (pieceGraphics.alpha <= 0) { self.destroy(); } }; }); // Enemy class representing the enemy robots var Drone = Container.expand(function () { var self = Container.call(this); var droneGraphics = self.attachAsset('Drone', { anchorX: 0.5, anchorY: 0.5 }); self.HitPoints = 3; self.randomOffset = Math.random() * 100; // Random timing for each drone self.speed = 2.25; self.update = function () { // Add robotic hover effects // Check for nearby enemies and adjust path to avoid collisions var nearbyEnemy = enemies.find(function (enemy) { return enemy !== self && Math.abs(enemy.x - self.x) < 100 && Math.abs(enemy.y - self.y) < 100; }); if (nearbyEnemy) { self.x += (self.x < nearbyEnemy.x ? -1 : 1) * self.speed; // Move away from the nearby enemy } else { self.y += self.speed * (Math.random() > 0.1 ? 1 : 0); // Brief pauses in downward movement } self.x += Math.sin(LK.ticks / 10 + self.randomOffset) * 2; // Small jerky side-to-side movements if (Math.random() > 0.95) { self.x += Math.random() * 4 - 2; // Quick position corrections } // Pulse effect on hit if (self.pulseEffect) { droneGraphics.scale.x = 1.2; droneGraphics.scale.y = 1.2; self.pulseEffect = false; } else { droneGraphics.scale.x = 1.0; droneGraphics.scale.y = 1.0; } if (self.y > 2732) { self.destroy(); var index = enemies.indexOf(self); if (index > -1) { enemies.splice(index, 1); } } }; }); // DronePiece class for drone destruction effect var DronePiece = Container.expand(function (assetType) { var self = Container.call(this); var pieceGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5 }); self.speedX = Math.random() * 6 - 3; // Increased random horizontal speed self.speedY = Math.random() * 4 - 2; // Random vertical speed self.alphaDecay = 0.02; // Rate at which the piece fades out self.update = function () { self.x += self.speedX; self.y += self.speedY; pieceGraphics.rotation += Math.random() * 0.1 - 0.05; // Add slight random rotation pieceGraphics.alpha -= self.alphaDecay; if (pieceGraphics.alpha <= 0) { self.destroy(); } }; }); // Dust class for dust particles var Dust = Container.expand(function () { var self = Container.call(this); var dustGraphics = self.attachAsset('Dust', { anchorX: 0.5, anchorY: 0.5 }); dustGraphics.alpha = 0.75; self.speed = Math.random() * 3 + 1; self.rotationSpeed = Math.random() * 0.02 - 0.01; // Random rotation speed between -0.01 and 0.01 self.direction = Math.random() * Math.PI * 0.5; self.update = function () { self.y += self.speed; self.x += Math.sin(self.direction) * self.speed; // Add slight X travel based on direction self.rotation += self.rotationSpeed; // Add rotation dustGraphics.alpha -= 0.01; // fade out at a medium pace if (self.y > 2732 || dustGraphics.alpha <= 0) { self.destroy(); } }; }); // Assets will be automatically created and loaded by the LK engine based on their usage in the code. // Hero class representing the player's spaceship var Hero = Container.expand(function () { var self = Container.call(this); self.prevX = self.x; // Initialize prevX with the current x position var heroGraphics = self.attachAsset('hero', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; self.update = function () { if (self.y > 2375) { self.y -= self.speed; } // Add rotation based on movement direction if (self.x > self.prevX) { self.rotation += Math.PI / 180 * 1; // Rotate 1 degree to the right if (self.rotation > Math.PI / 180 * 5) { self.rotation = Math.PI / 180 * 5; } } else if (self.x < self.prevX) { self.rotation -= Math.PI / 180 * 1; // Rotate 1 degree to the left if (self.rotation < Math.PI / 180 * -5) { self.rotation = Math.PI / 180 * -5; } } else { if (self.rotation > 0) { self.rotation -= Math.PI / 180 * 1; if (self.rotation < 0) { self.rotation = 0; } } else if (self.rotation < 0) { self.rotation += Math.PI / 180 * 1; if (self.rotation > 0) { self.rotation = 0; } } } self.prevX = self.x; // Store the current x position for the next frame // Add scale change to simulate footsteps if (LK.ticks % 24 < 12) { self.scale.x = 1.02; } else { self.scale.x = 0.98; } }; }); // Bullet class for hero's bullets var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('heroBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -15; self.Type = 'standard'; // Default type for bullets self.Power = 1; // Default power level for bullets self.update = function () { self.y += self.speed; if (self.y < 0) { self.destroy(); var index = heroBullets.indexOf(self); if (index > -1) { heroBullets.splice(index, 1); } } }; }); // RailingLeft class for the scrolling left railing var RailingLeft = Container.expand(function (assetType) { var self = Container.call(this); var railingGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0 }); self.speed = 2; self.update = function () { self.y += self.speed; if (self.y >= 2732) { self.y = -2732; } }; }); // RailingRight class for the scrolling right railing var RailingRight = Container.expand(function (assetType) { var self = Container.call(this); var railingGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0 }); self.speed = 2; self.update = function () { self.y += self.speed; if (self.y >= 2732) { self.y = -2732; } }; }); // RoadScroll class for the scrolling road var RoadScroll = Container.expand(function (assetType) { var self = Container.call(this); var roadGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0 }); if (assetType === 'CityBackgroundHD') { self.speed = 1; } else { self.speed = 2; } self.update = function () { self.y += self.speed; if (self.y >= 2732) { self.y = -2732; } }; }); // TitleScreen class for the title screen var TitleScreen = Container.expand(function () { var self = Container.call(this); // Attach game logo var logo = self.attachAsset('GameLogoHD', { anchorX: 0.5, anchorY: 0.5 }); logo.x = 2048 / 2; logo.y = 2732 / 2 - 200; // Attach play button var playButton = self.attachAsset('PlayButton', { anchorX: 0.5, anchorY: 0.5 }); playButton.x = 2048 / 2; playButton.y = logo.y + logo.height / 2 + playButton.height / 2 + 50; // Event handler for play button playButton.down = function (x, y, obj) { isTitle = false; isStarted = true; self.destroy(); startGame(); }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Initialize the city background for parallax effect var cityBackground1 = game.addChild(new RoadScroll('CityBackgroundHD')); var cityBackground2 = game.addChild(new RoadScroll('CityBackgroundHD')); cityBackground1.x = 2048 / 2; cityBackground2.x = 2048 / 2; cityBackground1.y = 0; cityBackground2.y = -2732; // Initialize the road instances var road1 = game.addChild(new RoadScroll('Road')); var road2 = game.addChild(new RoadScroll('Road2')); road2.x = 2048 / 2; road1.x = 2048 / 2; road1.y = 0; road2.y = -2732; // Initialize the left railing instances var railingLeft1 = game.addChild(new RailingLeft('RailingStart')); var railingLeft2 = game.addChild(new RailingLeft('RailingEnd')); railingLeft1.x = 2048 * 0.16; railingLeft2.x = 2048 * 0.16; railingLeft1.y = 0; railingLeft2.y = -2732; // Initialize the right railing instances var railingRight1 = game.addChild(new RailingRight('RailingEnd')); var railingRight2 = game.addChild(new RailingRight('RailingStart')); railingRight1.x = 2048 * 0.81; // Moved left by 3% railingRight2.x = 2048 * 0.81; // Moved left by 3% railingRight1.y = 0; railingRight2.y = -2732; // Initialize game state variables var isTitle = true; var isStarted = false; // Initialize title screen if (isTitle) { var titleScreen = game.addChild(new TitleScreen()); } // Function to start the game function startGame() { // Initialize hero hero = game.addChild(new Hero()); hero.x = 2048 / 2; hero.y = 2732 + hero.height; // Initialize enemies and bullets arrays enemies = []; heroBullets = []; } // Initialize variables var hero; var enemies = []; var heroBullets = []; // Function to handle game updates game.update = function () { // Update the city background instances for parallax effect cityBackground1.update(); cityBackground2.update(); // Update the road instances road1.update(); road2.update(); // Update the left railing instances railingLeft1.update(); railingLeft2.update(); // Update the right railing instances railingRight1.update(); railingRight2.update(); if (isStarted) { if (dragNode) { hero.x = dragNode.x; hero.y = dragNode.y; } // Update enemies if (!enemies) { return; } // Ensure enemies array is initialized for (var i = enemies.length - 1; i >= 0; i--) { if (enemies[i]) { enemies[i].update(); } if (enemies[i] && enemies[i].intersects(hero)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } } // Update hero bullets for (var j = heroBullets.length - 1; j >= 0; j--) { heroBullets[j].update(); for (var k = enemies.length - 1; k >= 0; k--) { if (heroBullets[j].intersects(enemies[k]) && enemies[k].y > 0) { enemies[k].HitPoints -= heroBullets[j].Power; // Apply an increased push back effect if (!(enemies[k] instanceof Bruiser)) { enemies[k].y -= 12; // Push the drone upwards slightly more } enemies[k].pulseEffect = true; // Trigger pulse effect heroBullets[j].destroy(); heroBullets.splice(j, 1); if (enemies[k].HitPoints <= 0) { if (enemies[k] instanceof Drone) { // Create drone pieces upon destruction var centerPiece = new DronePiece('DroneCenterPart'); centerPiece.x = enemies[k].x; centerPiece.y = enemies[k].y; game.addChild(centerPiece); var leftPiece = new DronePiece('DroneLeftPart'); leftPiece.x = enemies[k].x - 40; // Increase spread leftPiece.y = enemies[k].y; game.addChild(leftPiece); var rightPiece = new DronePiece('DroneRightPart'); rightPiece.x = enemies[k].x + 40; // Increase spread rightPiece.y = enemies[k].y; game.addChild(rightPiece); } else if (enemies[k] instanceof Bruiser) { // Create bruiser pieces upon destruction var centerPiece = new BruiserPiece('BruiserCenterPart'); centerPiece.x = enemies[k].x; centerPiece.y = enemies[k].y; game.addChild(centerPiece); var leftPiece = new BruiserPiece('BruiserLeftPart'); leftPiece.x = enemies[k].x - 40; // Increase spread leftPiece.y = enemies[k].y; var rightPiece = new BruiserPiece('BruiserRightPart'); rightPiece.x = enemies[k].x + 40; // Increase spread rightPiece.y = enemies[k].y; leftPiece.speedX = -Math.abs(leftPiece.speedX) * 1.5; // Increase force for left piece rightPiece.speedX = Math.abs(rightPiece.speedX) * 1.5; // Increase force for right piece game.addChild(leftPiece); game.addChild(rightPiece); } enemies[k].destroy(); enemies.splice(k, 1); LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); } break; } } } // Spawn Drones in groups of 1-2 within the Road area if (LK.ticks % 120 == 0) { var numberOfDrones = Math.floor(Math.random() * 2) + 1; // Randomly choose between 1 and 2 drones for (var i = 0; i < numberOfDrones; i++) { var newDrone = new Drone(); newDrone.x = 2048 * 0.21 + Math.random() * (2048 * 0.55); // Adjusted x position within the Road area with 5% margin newDrone.y = -newDrone.height; // Start just outside the top of the screen enemies.push(newDrone); game.addChild(newDrone); } } // Initialize charge-up phase for Blaster if (LK.ticks % 600 == 0) { // Every 10 seconds enemies.forEach(function (enemy) { if (enemy instanceof Blaster) { enemy.chargeUp = true; } }); } if (LK.ticks % 240 == 0) { var newBlaster = new Blaster(); newBlaster.x = 2048 * 0.21 + Math.random() * (2048 * 0.55); // Adjusted x position within the Road area with 5% margin newBlaster.y = -newBlaster.height; // Start just outside the top of the screen enemies.push(newBlaster); game.addChild(newBlaster); } // Spawn Bruisers occasionally if (LK.ticks % 360 == 0) { var newBruiser = new Bruiser(); newBruiser.x = 2048 * 0.21 + Math.random() * (2048 * 0.55); // Adjusted x position within the Road area with 5% margin newBruiser.y = -newBruiser.height; // Start just outside the top of the screen enemies.push(newBruiser); game.addChild(newBruiser); } // Fire bullets if (LK.ticks % 18 == 0) { var newBullet = new HeroBullet(); newBullet.x = hero.x; newBullet.y = hero.y - hero.height / 2; heroBullets.push(newBullet); game.addChild(newBullet); } // Generate dust particles in sync with player pulsing if (LK.ticks % 24 == 0) { var newDust = new Dust(); newDust.x = hero.x - hero.width / 4; // Move dust spawn position right half as much as the last move newDust.y = hero.y + hero.height / 2 * 0.93; // Move dust spawn point up 3% more game.addChild(newDust); } else if (LK.ticks % 24 == 12) { var newDust = new Dust(); newDust.x = hero.x + hero.width / 4; // Create another dust spawn point an equal distance in from the right of the player asset newDust.y = hero.y + hero.height / 2 * 0.93; // Move dust spawn point up 3% more game.addChild(newDust); } } }; // Handle touch input for hero movement var dragNode = null; game.down = function (x, y, obj) { if (isStarted) { dragNode = { x: hero.x, y: hero.y }; // Add a tilt-back effect during initial movement hero.rotation = x > hero.x ? Math.PI / 180 * -1 : Math.PI / 180 * 1; } }; game.move = function (x, y, obj) { if (isStarted && dragNode) { // Add a slight delay to the drag control to make the player feel like it has more weight dragNode.x += (x - dragNode.x) * 0.1; dragNode.y = hero.y; // Lock the y position to the hero's initial y position } }; game.up = function (x, y, obj) { dragNode = null; }; // Display score var scoreTxt = new Text2('0', { size: 150, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); scoreTxt.setText(LK.getScore());
===================================================================
--- original.js
+++ change.js
@@ -81,9 +81,8 @@
self.x += (self.x < nearbyEnemy.x ? -1 : 1) * self.speed; // Move away from the nearby enemy
} else {
self.y += self.speed;
}
- // Removed bullet shooting functionality from Blaster
// Destroy if out of screen
if (self.y > 2732) {
self.destroy();
var index = enemies.indexOf(self);
View of a futuristic soldier from directly overhead. White armor with blue glowing cyberpunk details. Holding weapon forward.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
The lights of a futuristic city in the dark at night. Very high above it looking straight down like from an airplane or a map. Background for an endlessly scrolling game.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A big button that say Play to start playing a game. Use neon cyberpunk style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Overhead view. A hovering robot with a tapered midsection with two bulky arms with claw like hands and a giant red “eye” on top of its body. Looking straight down. Cyberpunk, black with red glowing highlights.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Overhead view. A heavily armored attack robot. Two arms with large gauntlet type fists. Four large red glowing eyes. Three distinct parts, body and two arms. Symmetrical design. Birds Eye view above them looking down on their head. Simple shapes. Low detail. Cyberpunk, black with red glowing highlights.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A red glowing line. Bright red core with subtle outer glow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A blue transparent dome type shield. Simple graphics. Low details. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A ring of nuclear fire seen from overhead. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A thin robot with goggles riding a hover-bike. Twin blaster guns mounted on front. Top down view. Birds Eye view. Cyberpunk with red glowing highlights... Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Battle drone, circular. White with blue glowing highlights. Birds Eye view from overhead. Cyberpunk. Simple shapes.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
GameTheme
Music
TitleTheme
Music
HeroBlaster
Sound effect
Explosion
Sound effect
PowerUp
Sound effect
CloneSoldier
Sound effect
WeaponPowerUp
Sound effect
Drone
Sound effect
BinaryStorm
Sound effect
LaserCharge
Sound effect
LaserFire
Sound effect
BruiserStomp
Sound effect
RaiderSwoop
Sound effect
ShieldLevelUp
Sound effect
HeroHit
Sound effect
HeroScream
Sound effect