User prompt
delete DOTmissile when collides with truck
User prompt
DOT fires DOTmissile from assests
User prompt
space dot's fire missiles at truck every 4 seconds, if a missile hits it reduces points by 15
User prompt
pirates fire missles every 4 seconds
User prompt
start the game at score 0
User prompt
At 500 points, spawn mothership enemy, 10 health
User prompt
Delete everything about motherhood, space pirate mother ship, and mothers hip
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'intersects')' in or related to this line: 'if (motherShipSpawned && bullets[i].intersects(motherShip)) {' Line Number: 460
User prompt
Make bullets collide with mother's hip
User prompt
Bullets won't collide with mother's hip
User prompt
Start game at 490 points
User prompt
Rename spacepiratemothership to mother's hip
User prompt
make power boost drop 100% chance
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'powerBoost.x = spaceDOTs[j].x;' Line Number: 475
User prompt
start game at 0 points
User prompt
10% chance that dot will drop a power boost to the bullets of the truck, the power boost fires 3 bullets, 1 straight up and 2 at 30degree angles from the straight one
User prompt
bullet collision with mothership still not being detected
User prompt
decrease spawn rate of space pirates fter score reaches 500 to 1 every 5 seconds
Code edit (3 edits merged)
Please save this source code
User prompt
mothership has 10 health, witch decreases every time it gets hit by a bullet, when it reaches 0 health, it creates an explosion and is removed
Code edit (1 edits merged)
Please save this source code
User prompt
set mothership health to 5
Code edit (2 edits merged)
Please save this source code
User prompt
decrease spawn rate of space pirates when points reach 500
User prompt
at score 500 decrease the spawn rate of space pirates
/****
* 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;
};
});
// 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 Missile();
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])) {
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
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -112,10 +112,22 @@
anchorY: 0.5
});
self.speed = 5;
self.health = 3;
- // self.healthBar.y = self.y - self.height / 2 - 10; // Update the health bar position
self.update = function () {
+ // Space DOTs fire missiles every 4 seconds
+ if (LK.ticks % 240 == 0) {
+ var newMissile = new Missile();
+ 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;
@@ -548,8 +560,17 @@
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);