User prompt
load music at beginning of game
User prompt
start game with 5 lives
Code edit (1 edits merged)
Please save this source code
User prompt
do not subtract a life if truck hit by 'DOTmissile'
User prompt
if truck gets hit by a 'spaceDOT', then subtract 15 points and play sound 'Hit2' . if truck gets hit by a 'DOTmissile', only subtract 5 points and play sound 'Hit2'
User prompt
do not subtract points if truck gets hit by 'missile'
User prompt
play sound 'Hit1" when truck gets hit with 'missle'
User prompt
start game at 0 points
User prompt
play sound Hit2 if truck gets hit by 'spaceDOT' or 'DOTmissile'
User prompt
play sound Hit1 if truck gets hit by a 'missle'
User prompt
play sound Hit2 anytime the truck gets hit by DOT or a missile from DOT
User prompt
play sound Hit 2 if DOT collides with truck
User prompt
delete sound 100points
User prompt
start game at 95 points
User prompt
play sound 100points when score hits 100 points
User prompt
play sound Hit3 when truck picks up extra life
User prompt
play sound Hit2 when DOTmissile hits truck
User prompt
play sound Hit1 when truck gets hit by space pirate missile
User prompt
play sound Explosion2 when dot gets hit
User prompt
play Explosion sound when space pirate gets hit
User prompt
delete missile when colliding with truck
/**** 
* Classes
****/ 
// Bullet class
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var bulletGraphics = self.attachAsset('bullet', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -5;
	self.update = function () {
		self.y += self.speed;
	};
});
// DOTMissile class
var DOTMissile = Container.expand(function () {
	var self = Container.call(this);
	var missileGraphics = self.attachAsset('DOTmissile', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 8;
	self.update = function () {
		self.x += self.vx;
		self.y += self.vy;
		// Calculate the angle of movement
		var angle = Math.atan2(self.vy, self.vx);
		// Rotate the missile to point in the direction of movement
		missileGraphics.rotation = angle;
	};
});
// Explosion class
var Explosion = Container.expand(function () {
	var self = Container.call(this);
	var explosionGraphics = self.attachAsset('explosion', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.lifetime = 30; // Duration of the explosion effect
	self.update = function () {
		self.lifetime--;
		if (self.lifetime <= 0) {
			self.destroy();
		}
	};
});
// LifePod class
var LifePod = Container.expand(function () {
	var self = Container.call(this);
	var podGraphics = self.attachAsset('cargo', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 2; // Falling speed of the life pod
	self.update = function () {
		self.y += self.speed;
		// Check if the life pod goes off screen
		if (self.y > 2732) {
			self.destroy();
		}
	};
});
// Missile class
var Missile = Container.expand(function () {
	var self = Container.call(this);
	var missileGraphics = self.attachAsset('missile', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 8;
	self.update = function () {
		self.x += self.vx;
		self.y += self.vy;
		// Calculate the angle of movement
		var angle = Math.atan2(self.vy, self.vx);
		// Rotate the missile to point in the direction of movement
		missileGraphics.rotation = angle;
	};
});
// Mothership class
var Mothership = Container.expand(function () {
	var self = Container.call(this);
	var mothershipGraphics = self.attachAsset('spacePirateMotherShip', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.health = 10;
	self.update = function () {
		// Mothership logic can be added here
	};
});
// PowerBoost class
var PowerBoost = Container.expand(function () {
	var self = Container.call(this);
	var boostGraphics = self.attachAsset('yellowStar', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 2; // Falling speed of the power boost
	self.update = function () {
		self.y += self.speed;
		// Check if the power boost goes off screen
		if (self.y > 2732) {
			self.destroy();
		}
	};
});
// Red Star class
var RedStar = Container.expand(function () {
	var self = Container.call(this);
	var starGraphics = self.attachAsset('redStar', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 1; // Set a consistent falling speed for stars
	self.update = function () {
		self.y += self.speed;
		if (self.y > 2732) {
			self.y = -self.height; // Reset position to top when it goes off screen
		}
	};
});
// Space DOT class
var SpaceDOT = Container.expand(function () {
	var self = Container.call(this);
	var dotGraphics = self.attachAsset('spaceDOT', {
		anchorX: 0.0,
		anchorY: 0.5
	});
	self.speed = 5;
	self.health = 3;
	self.update = function () {
		// Space DOTs fire missiles every 4 seconds
		if (LK.ticks % 240 == 0) {
			var newMissile = new DOTMissile();
			newMissile.x = self.x;
			newMissile.y = self.y;
			var dx = truck.x - self.x;
			var dy = truck.y - self.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			newMissile.vx = dx / distance * newMissile.speed;
			newMissile.vy = dy / distance * newMissile.speed;
			missiles.push(newMissile);
			game.addChild(newMissile);
		}
		// Calculate angle towards the truck
		var angle = Math.atan2(truck.y - self.y, truck.x - self.x);
		// Rotate the SpaceDOT to point towards the truck
		dotGraphics.rotation = angle;
		// Calculate direction towards the truck
		var dx = truck.x - self.x;
		var dy = truck.y - self.y;
		var distance = Math.sqrt(dx * dx + dy * dy);
		if (distance > 0.1) {
			// Prevent division by zero
			// Calculate movement towards the truck
			self.x += dx / distance * self.speed;
			self.y += dy / distance * self.speed;
		}
		if (self.y > 2732) {
			self.y = -self.height;
		}
	};
});
// Space Pirate class
var SpacePirate = Container.expand(function () {
	var self = Container.call(this);
	var pirateGraphics = self.attachAsset('spacePirate', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3;
	self.update = function () {
		self.y += self.speed;
		if (self.y > 2732) {
			self.y = -self.height;
		}
		// Space pirates fire missiles
		if (LK.ticks % 240 == 0) {
			var newMissile = new Missile();
			newMissile.x = self.x;
			newMissile.y = self.y;
			// Calculate direction towards the truck
			var dx = truck.x - self.x;
			var dy = truck.y - self.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			newMissile.vx = dx / distance * newMissile.speed;
			newMissile.vy = dy / distance * newMissile.speed;
			missiles.push(newMissile);
			game.addChild(newMissile);
		}
	};
});
// Star class
var Star = Container.expand(function () {
	var self = Container.call(this);
	var starGraphics = self.attachAsset('blueStar', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 1; // Set a consistent falling speed for stars
	self.update = function () {
		self.y += self.speed;
		if (self.y > 2732) {
			self.y = -self.height; // Reset position to top when it goes off screen
		}
	};
});
//<Assets used in the game will automatically appear here>
// Truck class
var Truck = Container.expand(function () {
	var self = Container.call(this);
	self.lives = 10; // Initialize truck with 10 lives
	var truckGraphics = self.attachAsset('truck', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		// Truck movement logic
		// Touch-based controls for truck movement
		game.move = function (x, y, obj) {
			self.x = x;
			self.y = y;
		};
		if (LK.ticks % 30 == 0) {
			var newBullet = new Bullet();
			newBullet.x = self.x;
			newBullet.y = self.y;
			bullets.push(newBullet);
			game.addChild(newBullet);
		}
	};
	self.move = function (x, y, obj) {
		self.x = x;
		self.y = y;
	};
});
// Yellow Star class
var YellowStar = Container.expand(function () {
	var self = Container.call(this);
	var starGraphics = self.attachAsset('yellowStar', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 1; // Set a consistent falling speed for stars
	self.update = function () {
		self.y += self.speed;
		if (self.y > 2732) {
			self.y = -self.height; // Reset position to top when it goes off screen
		}
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000 //Init game with black background
});
/**** 
* Game Code
****/ 
// Initialize stars
var stars = [];
for (var i = 0; i < 100; i++) {
	var star;
	var randomType = Math.random();
	if (randomType < 0.33) {
		star = new Star();
	} else if (randomType < 0.66) {
		star = new RedStar();
	} else {
		star = new YellowStar();
	}
	star.x = Math.random() * 2048;
	star.y = Math.random() * 2732;
	stars.push(star);
	game.addChild(star);
}
// Update stars
for (var i = 0; i < stars.length; i++) {
	stars[i].update();
}
// Initialize score to 0 points
LK.setScore(0);
// Initialize bullets
var bullets = [];
// Initialize missiles
var missiles = [];
// Initialize truck
var truck = game.addChild(new Truck());
truck.x = 2048 / 2;
truck.y = 2732 - 200;
// Initialize space pirates
var spacePirates = [];
var pirateSpawnInterval = LK.setInterval(function () {
	var pirate = new SpacePirate();
	pirate.x = Math.random() * 2048;
	pirate.y = Math.random() * -2732; // Ensure pirates spawn off-screen initially
	spacePirates.push(pirate);
	game.addChild(pirate);
}, 5000); // Spawn a pirate every 5 seconds
// Initialize space DOTs
var spaceDOTs = [];
var dotSpawnInterval = LK.setInterval(function () {
	var dot = new SpaceDOT();
	dot.x = Math.random() * 2048;
	dot.y = Math.random() * -500;
	spaceDOTs.push(dot);
	game.addChild(dot);
}, 10000); // Spawn a DOT every 10 seconds
// Handle truck movement
game.move = function (x, y, obj) {
	truck.x = x;
	truck.y = y;
};
// Display current points at the top of the screen in white letters and numbers, in a retro font
var scoreDisplay = new Text2('Score: 0', {
	size: 100,
	// Increased size for the score banner
	fill: "#ffffff",
	font: "'Press Start 2P', cursive" // Retro font
});
scoreDisplay.anchor.set(0.5, 0); // Center the text horizontally
LK.gui.top.addChild(scoreDisplay);
// Display truck lives below the score banner
var livesDisplay = new Text2('Lives: 3', {
	size: 80,
	fill: "#ffffff",
	font: "'Press Start 2P', cursive"
});
livesDisplay.anchor.set(0.5, 0);
livesDisplay.y = scoreDisplay.height; // Position below the score banner
LK.gui.top.addChild(livesDisplay);
// Update game logic
if (LK.getScore() >= 500 && !mothershipSpawned) {
	var mothership = new Mothership();
	mothership.x = 2048 / 2;
	mothership.y = -mothership.height; // Start off-screen
	game.addChild(mothership);
	mothershipSpawned = true;
}
game.update = function () {
	// Increase missile speed after reaching 300 points
	if (LK.getScore() >= 300) {
		for (var i = 0; i < missiles.length; i++) {
			missiles[i].speed = 12; // Increase speed
		}
	}
	// Check if score is 100 or more to increase difficulty
	if (LK.getScore() >= 100) {
		// Increase pirate fire rate
		for (var i = 0; i < spacePirates.length; i++) {
			if (LK.ticks % 60 == 0) {
				// Fire every second instead of every two seconds
				var newMissile = new Missile();
				newMissile.x = spacePirates[i].x;
				newMissile.y = spacePirates[i].y;
				var dx = truck.x - spacePirates[i].x;
				var dy = truck.y - spacePirates[i].y;
				var distance = Math.sqrt(dx * dx + dy * dy);
				newMissile.vx = dx / distance * newMissile.speed;
				newMissile.vy = dy / distance * newMissile.speed;
				missiles.push(newMissile);
				game.addChild(newMissile);
			}
		}
		// Increase pirate spawn rate
		if (LK.getScore() >= 250) {
			if (LK.ticks % 150 == 0) {
				// Spawn a pirate every 2.5 seconds
				var pirate = new SpacePirate();
				pirate.x = Math.random() * 2048;
				pirate.y = Math.random() * -2732;
				spacePirates.push(pirate);
				game.addChild(pirate);
			}
		} else {
			if (LK.ticks % 300 == 0) {
				// Spawn a pirate every 5 seconds
				var pirate = new SpacePirate();
				pirate.x = Math.random() * 2048;
				pirate.y = Math.random() * -2732;
				spacePirates.push(pirate);
				game.addChild(pirate);
			}
		}
	}
	// Update lives display
	livesDisplay.setText('Lives: ' + truck.lives);
	// Update score display
	scoreDisplay.setText('Score: ' + LK.getScore());
	// Update game logic
	// Update bullets
	for (var i = bullets.length - 1; i >= 0; i--) {
		bullets[i].update();
		// Remove bullets that go off screen
		if (bullets[i].y < -50) {
			game.removeChild(bullets[i]);
			bullets.splice(i, 1);
			continue;
		}
		// Check collision with space pirates
		for (var j = spacePirates.length - 1; j >= 0; j--) {
			if (bullets[i].intersects(spacePirates[j])) {
				LK.getSound('Explosion').play();
				game.removeChild(bullets[i]);
				var explosion = new Explosion();
				explosion.x = spacePirates[j].x;
				explosion.y = spacePirates[j].y;
				game.addChild(explosion);
				game.removeChild(spacePirates[j]);
				// 20% chance to spawn a LifePod
				if (Math.random() < 0.2) {
					var lifePod = new LifePod();
					lifePod.x = spacePirates[j].x;
					lifePod.y = spacePirates[j].y;
					game.addChild(lifePod);
				}
				bullets.splice(i, 1);
				spacePirates.splice(j, 1);
				LK.setScore(LK.getScore() + 5); // Add 5 points for destroying a space pirate
				scoreDisplay.setStyle({
					fill: "#00ff00"
				}); // Change text color to green
				LK.setTimeout(function () {
					scoreDisplay.setStyle({
						fill: "#ffffff"
					}); // Change text color back to white
				}, 200);
				break;
			}
		}
		// Check collision with spaceDOTs
		for (var j = spaceDOTs.length - 1; j >= 0; j--) {
			if (bullets[i] && bullets[i].intersects(spaceDOTs[j])) {
				game.removeChild(bullets[i]);
				bullets.splice(i, 1);
				spaceDOTs[j].health -= 1;
				if (spaceDOTs[j].health <= 0) {
					var explosion = new Explosion();
					explosion.x = spaceDOTs[j].x;
					explosion.y = spaceDOTs[j].y;
					game.addChild(explosion);
					game.removeChild(spaceDOTs[j]);
					spaceDOTs.splice(j, 1);
					LK.setScore(LK.getScore() + 15); // Add 15 points for destroying a DOT
					// 100% chance to spawn a PowerBoost
					if (spaceDOTs[j]) {
						var powerBoost = new PowerBoost();
						powerBoost.x = spaceDOTs[j].x;
						powerBoost.y = spaceDOTs[j].y;
						game.addChild(powerBoost);
					}
					scoreDisplay.setStyle({
						fill: "#00ff00"
					}); // Change text color to green
					LK.setTimeout(function () {
						scoreDisplay.setStyle({
							fill: "#ffffff"
						}); // Change text color back to white
					}, 200);
				}
				break;
			}
		}
	}
	for (var i = 0; i < spacePirates.length; i++) {
		spacePirates[i].update();
		// If a space pirate is destroyed, spawn a new one
		if (spacePirates.length == 0) {
			var pirate = new SpacePirate();
			pirate.x = Math.random() * 2048;
			pirate.y = Math.random() * -2732;
			spacePirates.push(pirate);
			game.addChild(pirate);
		}
		// Check collision with truck
		if (spacePirates[i].intersects(truck)) {
			game.removeChild(spacePirates[i]);
			spacePirates.splice(i, 1);
			truck.lives -= 1; // Decrease truck lives by 1
			livesDisplay.setStyle({
				fill: "#ff0000"
			}); // Change text color to red
			LK.setTimeout(function () {
				livesDisplay.setStyle({
					fill: "#ffffff"
				}); // Change text color back to white
				LK.setTimeout(function () {
					livesDisplay.setStyle({
						fill: "#ff0000"
					}); // Change text color to red again
					LK.setTimeout(function () {
						livesDisplay.setStyle({
							fill: "#ffffff"
						}); // Change text color back to white
					}, 200);
				}, 200);
			}, 200);
			if (truck.lives <= 0) {
				LK.effects.flashScreen(0xff0000, 1000);
				LK.showGameOver();
			}
		}
	}
	// Update space DOTs
	for (var i = 0; i < spaceDOTs.length; i++) {
		spaceDOTs[i].update();
		// Check collision with truck
		if (spaceDOTs[i].intersects(truck)) {
			var explosion = new Explosion();
			explosion.x = spaceDOTs[i].x;
			explosion.y = spaceDOTs[i].y;
			game.addChild(explosion);
			game.removeChild(spaceDOTs[i]);
			spaceDOTs.splice(i, 1);
			LK.setScore(LK.getScore() - 15); // Subtract 15 points for collision with the truck
			scoreDisplay.setStyle({
				fill: "#ff0000"
			}); // Change text color to red
			LK.setTimeout(function () {
				scoreDisplay.setStyle({
					fill: "#ffffff"
				}); // Change text color back to white
			}, 200);
		}
	}
	// Update life pods
	for (var i = game.children.length - 1; i >= 0; i--) {
		var child = game.children[i];
		if (child instanceof LifePod) {
			child.update();
			if (child.intersects(truck)) {
				game.removeChild(child);
				if (child instanceof LifePod) {
					truck.lives += 1; // Increase truck lives by 1
					livesDisplay.setStyle({
						fill: "#00ff00"
					}); // Change text color to green
					LK.setTimeout(function () {
						livesDisplay.setStyle({
							fill: "#ffffff"
						}); // Change text color back to white
					}, 200);
				} else if (child instanceof PowerBoost) {
					// Fire 3 bullets: 1 straight, 2 at 30-degree angles
					var angles = [0, Math.PI / 6, -Math.PI / 6];
					for (var _i = 0, _angles = angles; _i < _angles.length; _i++) {
						var angle = _angles[_i];
						var newBullet = new Bullet();
						newBullet.x = truck.x;
						newBullet.y = truck.y;
						newBullet.speed = -5;
						newBullet.update = function () {
							this.y += this.speed * Math.cos(angle);
							this.x += this.speed * Math.sin(angle);
						};
						bullets.push(newBullet);
						game.addChild(newBullet);
					}
				}
			}
		}
	}
	for (var i = missiles.length - 1; i >= 0; i--) {
		missiles[i].update();
		// Remove missiles that go off screen
		if (missiles[i].y > 2732 || missiles[i].x < -50 || missiles[i].x > 2098) {
			game.removeChild(missiles[i]);
			missiles.splice(i, 1);
			continue;
		}
		// Check collision with truck
		if (missiles[i].intersects(truck) && !truck.invincible) {
			game.removeChild(missiles[i]);
			missiles.splice(i, 1);
			truck.lives -= 1;
			LK.setScore(LK.getScore() - 15); // Subtract 15 points for missile hit
			scoreDisplay.setStyle({
				fill: "#ff0000"
			}); // Change text color to red
			LK.setTimeout(function () {
				scoreDisplay.setStyle({
					fill: "#ffffff"
				}); // Change text color back to white
			}, 200);
			truck.invincible = true; // Make truck invincible
			LK.setTimeout(function () {
				truck.invincible = false; // Remove invincibility after 0.5 seconds
			}, 500);
			livesDisplay.setStyle({
				fill: "#ff0000"
			}); // Change text color to red
			LK.setTimeout(function () {
				livesDisplay.setStyle({
					fill: "#ffffff"
				}); // Change text color back to white
				LK.setTimeout(function () {
					livesDisplay.setStyle({
						fill: "#ff0000"
					}); // Change text color to red again
					LK.setTimeout(function () {
						livesDisplay.setStyle({
							fill: "#ffffff"
						}); // Change text color back to white
					}, 200);
				}, 200);
			}, 200);
			if (truck.lives <= 0) {
				LK.effects.flashScreen(0xff0000, 1000);
				LK.showGameOver();
			}
			continue; // Ensure the missile is immediately removed
		}
		// Check collision with missile and truck
		if (missiles[i].intersects(truck)) {
			game.removeChild(missiles[i]);
			missiles.splice(i, 1);
		}
	}
}; ===================================================================
--- original.js
+++ change.js
@@ -405,8 +405,9 @@
 		}
 		// Check collision with space pirates
 		for (var j = spacePirates.length - 1; j >= 0; j--) {
 			if (bullets[i].intersects(spacePirates[j])) {
+				LK.getSound('Explosion').play();
 				game.removeChild(bullets[i]);
 				var explosion = new Explosion();
 				explosion.x = spacePirates[j].x;
 				explosion.y = spacePirates[j].y;