User prompt
create a new asset for bossbullet2 and assign to boss2 bullets
User prompt
move powerups asset 200 pixel higher but leave diamon icon in its place
User prompt
in level2, use enemy3 instead of enemy2
User prompt
after boss 2 is destroyed, show powerupmenu again, and after powerupmenu is closed move to next level
User prompt
use different asset for boss in level2 name it boss2
User prompt
only apply tint on hitpoints to block and not enemy2
User prompt
blocks will have tints depending on the hitpoints left
User prompt
do not increase level when boss is destroyed
User prompt
only increase level when boss is destroyed
User prompt
console log level
User prompt
Bossbullet should rotate on its axis
User prompt
Make boss and bossbullets ossilarion smaller
User prompt
Boss and bossbullets should increase and decrease their size
User prompt
Icrease and decrease size of boss and bossbullet
User prompt
When powerupscreen is closed move to next level
User prompt
In the code, add a number to identify each level
User prompt
Add level number to each level
Code edit (1 edits merged)
Please save this source code
User prompt
Add level 3
User prompt
add down event to close button in powerup menu. when touched, close powerup menu
User prompt
add a close button to the powerup menu
User prompt
create level 2. level 2 will start once the powerup menu is close
Code edit (1 edits merged)
Please save this source code
User prompt
once pwoerupmenu is closed, level 2 should start
User prompt
lets create a level structure. each levell will have x amount of waves (that will be configured) x amounts of enemy2 and a boss. once the boss is killed, the powerup menu will be dipsplayed.
/**** * Classes ****/ var Boss = Container.expand(function () { var self = Container.call(this); var bossGraphics = self.attachAsset('boss1', { anchorX: 0.5, anchorY: 0.5 // Removed tint for the boss }); self.speed = 2; self.hitpoints = 10; // High hitpoints for the boss self.update = function () { self.x += Math.sin(LK.ticks / 30) * 5; // Sideways movement self.y = Math.min(self.y + self.speed, 2732 * 0.4); // Move to the top 40% of the screen // Logic to increase and decrease boss size if (LK.ticks % 120 < 60) { self.scale.x += 0.001; self.scale.y += 0.001; } else { self.scale.x -= 0.001; self.scale.y -= 0.001; } if (LK.ticks % 30 == 0) { // Shoot bullets every second var newBullet = new BossBullet(); newBullet.x = self.x; newBullet.y = self.y + self.height / 2; bullets.push(newBullet); game.addChild(newBullet); } }; }); var Boss2 = Container.expand(function () { var self = Container.call(this); var bossGraphics = self.attachAsset('boss2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.hitpoints = 15; // Higher hitpoints for the second boss self.update = function () { self.x += Math.sin(LK.ticks / 30) * 5; // Sideways movement self.y = Math.min(self.y + self.speed, 2732 * 0.4); // Move to the top 40% of the screen if (LK.ticks % 120 < 60) { self.scale.x += 0.001; self.scale.y += 0.001; } else { self.scale.x -= 0.001; self.scale.y -= 0.001; } if (LK.ticks % 30 == 0) { var newBullet = new BossBullet2(); newBullet.x = self.x; newBullet.y = self.y + self.height / 2; bullets.push(newBullet); game.addChild(newBullet); } }; }); var BossBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bossbullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.y += self.speed; self.rotation += 0.1; // Add rotation to the boss bullet // Logic to increase and decrease boss bullet size if (LK.ticks % 120 < 60) { self.scale.x += 0.001; self.scale.y += 0.001; } else { self.scale.x -= 0.001; self.scale.y -= 0.001; } }; }); var BossBullet2 = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bossbullet2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.y += self.speed; self.rotation += 0.1; // Add rotation to the boss bullet // Logic to increase and decrease boss bullet size if (LK.ticks % 120 < 60) { self.scale.x += 0.001; self.scale.y += 0.001; } else { self.scale.x -= 0.001; self.scale.y -= 0.001; } }; }); // 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; // Default bullet speed, can be overridden self.update = function () { self.y += self.speed; }; }); // Diamond class var Diamond = Container.expand(function () { var self = Container.call(this); var diamondGraphics = self.attachAsset('diamond', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 4; self.update = function () { self.y += self.speed; self.rotation += 0.05; // Add rotation animation if (LK.ticks % 120 < 60) { self.scale.x += 0.002; self.scale.y += 0.002; } else { self.scale.x -= 0.002; self.scale.y -= 0.002; } if (self.y > 2732) { self.destroy(); } }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('block', { anchorX: 0.5, anchorY: 0.5, tint: 0xffffff // Default tint, will be overridden by wave configuration }); self.speed = 3; self.hitpoints = 3; // Add hitpoints to enemies self.update = function () { // Update tint based on hitpoints if (self.hitpoints === 3) { self.children[0].tint = 0xff6666; // Red tint for 3 hitpoints } else if (self.hitpoints === 2) { self.children[0].tint = 0xcc66ff; // Purple tint for 2 hitpoints } else if (self.hitpoints === 1) { self.children[0].tint = 0xffe066; // Yellow tint for 1 hitpoint } self.y += self.speed; // Logic to increase and decrease block sizes if (LK.ticks % 120 < 60) { self.scale.x += 0.002; self.scale.y += 0.002; } else { self.scale.x -= 0.002; self.scale.y -= 0.002; } // Create and update hitpoints display if (!self.hitpointsDisplay) { self.hitpointsDisplay = new Text2(self.hitpoints.toString(), { size: 100, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); self.hitpointsDisplay.anchor.set(0.5, 0.5); self.hitpointsDisplay.y = 0; self.addChild(self.hitpointsDisplay); } else if (LK.ticks % 10 === 0) { self.hitpointsDisplay.setText(self.hitpoints.toString()); } }; }); var Enemy2 = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 4; // Different speed for Enemy2 self.hitpoints = 4; // Different hitpoints for Enemy2 self.update = function () { self.y += self.speed; // Logic to increase and decrease size if (LK.ticks % 120 < 60) { self.scale.x += 0.001; self.scale.y += 0.001; } else { self.scale.x -= 0.001; self.scale.y -= 0.001; } self.x += Math.sin(LK.ticks / 30) * 5; // Add sideways movement self.y += Math.sin(LK.ticks / 15) * 2; // Add soft bouncy movement if (self.y > 2732) { self.destroy(); } }; }); //<Assets used in the game will automatically appear here> // Fairy class var Fairy = Container.expand(function () { var self = Container.call(this); var fairyGraphics = self.attachAsset('fairy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.particles = []; self.update = function () { // Particle emitter logic if (LK.ticks % 5 === 0) { var particle = LK.getAsset('fairyemitter', { anchorX: 0.5, anchorY: 0.5, alpha: 1, scaleX: 12, scaleY: 12 }); particle.x = self.x + (self.scale.x === -1 ? 30 : -30); particle.y = self.y + self.height / 2; particle.speedX = (Math.random() - 0.5) * 2; particle.speedY = Math.random() * 2 + 1; // Push particles downwards particle.update = function () { this.x += this.speedX; this.y += this.speedY; this.alpha -= 0.01; if (this.alpha <= 0) { this.destroy(); } }; self.particles.push(particle); game.addChild(particle); } // Update existing particles for (var i = self.particles.length - 1; i >= 0; i--) { self.particles[i].update(); if (self.particles[i].alpha <= 0) { self.particles.splice(i, 1); } } // Fairy movement logic }; }); var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -5; self.hitpoints = 1; // Add hitpoints property to HeroBullet self.update = function () { self.y += self.speed; }; }); // Powerup class var Powerup = Container.expand(function () { var self = Container.call(this); var powerupGraphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.destroy(); } }; }); var PowerupMenu = Container.expand(function () { var self = Container.call(this); var screenGraphics = self.attachAsset('menu', { anchorX: 0.5, anchorY: 0.5 }); screenGraphics.width = 1024; // Adjust width to half of the screen width screenGraphics.height = 1366; // Adjust height to half of the screen height screenGraphics.alpha = 0.8; screenGraphics.x = 2048 / 4; screenGraphics.y = 2732 / 4; var title = new Text2('Powerup Shop', { size: 150, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); title.anchor.set(0.5, 0.5); title.x = screenGraphics.x; title.y = screenGraphics.y - screenGraphics.height / 2 + 150; self.x = 2048 / 2 - screenGraphics.width / 2 - 500; self.y = 2732 / 2 - screenGraphics.height / 2; self.addChild(title); var powerup1 = LK.getAsset('powerup1', { anchorX: 0.5, anchorY: 0.5 }); powerup1.x = screenGraphics.x - 300; powerup1.y = screenGraphics.y + 100; self.addChild(powerup1); powerup1.down = function (x, y, obj) { console.log("Powerup1 touched"); if (diamondCount >= 10) { diamondCount -= 10; diamondCounterTxt.setText(diamondCount); heroFireRate = Math.max(5, heroFireRate - 5); // Increase fire rate when the first powerup is selected, but not less than 5 self.destroy(); // Close powerup menu isPowerupScreenActive = false; if (currentLevelIndex < levels.length) { currentLevelIndex++; currentLevel = levels[currentLevelIndex]; } } else { var message = new Text2('I need 10 diamonds for this powerup!', { size: 100, fill: "#ff0000", stroke: "#000000", strokeThickness: 5 }); message.anchor.set(0.5, 0.5); message.x = 2048 / 2; message.y = 2732 / 2; game.addChild(message); LK.setTimeout(function () { message.destroy(); }, 2000); } }; var powerup1DiamondIcon = LK.getAsset('diamond', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5 }); powerup1DiamondIcon.x = powerup1.x; powerup1DiamondIcon.y = powerup1.y + powerup1.height / 2 + 20; self.addChild(powerup1DiamondIcon); var powerup1Cost = new Text2('10', { size: 100, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); powerup1Cost.anchor.set(0.5, 0); powerup1Cost.x = powerup1.x; powerup1Cost.y = powerup1DiamondIcon.y + powerup1DiamondIcon.height / 2 + 20; self.addChild(powerup1Cost); var powerup2 = LK.getAsset('powerup2', { anchorX: 0.5, anchorY: 0.5 }); powerup2.x = screenGraphics.x; powerup2.y = screenGraphics.y + 100; self.addChild(powerup2); powerup2.down = function (x, y, obj) { console.log("Powerup2 touched"); if (diamondCount >= 20) { diamondCount -= 20; diamondCounterTxt.setText(diamondCount); // Add action for powerup2 HeroBullet.prototype.hitpoints += 1; self.destroy(); // Close powerup menu isPowerupScreenActive = false; } else { var message = new Text2('I need 20 diamonds for this powerup!', { size: 100, fill: "#ff0000", stroke: "#000000", strokeThickness: 5 }); message.anchor.set(0.5, 0.5); message.x = 2048 / 2; message.y = 2732 / 2; game.addChild(message); LK.setTimeout(function () { message.destroy(); }, 2000); } }; var powerup2DiamondIcon = LK.getAsset('diamond', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5 }); powerup2DiamondIcon.x = powerup2.x; powerup2DiamondIcon.y = powerup2.y + powerup2.height / 2 + 20; self.addChild(powerup2DiamondIcon); var powerup2Cost = new Text2('20', { size: 100, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); powerup2Cost.anchor.set(0.5, 0); powerup2Cost.x = powerup2.x; powerup2Cost.y = powerup2DiamondIcon.y + powerup2DiamondIcon.height / 2 + 20; self.addChild(powerup2Cost); var powerup3 = LK.getAsset('powerup3', { anchorX: 0.5, anchorY: 0.5 }); powerup3.x = screenGraphics.x + 300; powerup3.y = screenGraphics.y + 100; self.addChild(powerup3); powerup3.down = function (x, y, obj) { console.log("Powerup3 touched"); if (diamondCount >= 30) { diamondCount -= 30; diamondCounterTxt.setText(diamondCount); // Add action for powerup3 self.destroy(); // Close powerup menu isPowerupScreenActive = false; } else { var message = new Text2('I need 30 diamonds for this powerup!', { size: 100, fill: "#ff0000", stroke: "#000000", strokeThickness: 5 }); message.anchor.set(0.5, 0.5); message.x = 2048 / 2; message.y = 2732 / 2; game.addChild(message); LK.setTimeout(function () { message.destroy(); }, 2000); } }; var powerup3DiamondIcon = LK.getAsset('diamond', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5 }); powerup3DiamondIcon.x = powerup3.x; powerup3DiamondIcon.y = powerup3.y + powerup3.height / 2 + 20; self.addChild(powerup3DiamondIcon); var powerup3Cost = new Text2('30', { size: 100, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); powerup3Cost.anchor.set(0.5, 0); powerup3Cost.x = powerup3.x; powerup3Cost.y = powerup3DiamondIcon.y + powerup3DiamondIcon.height / 2 + 20; self.addChild(powerup3Cost); var closeButton = new Text2('Close', { size: 100, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); closeButton.anchor.set(0.5, 0.5); closeButton.x = screenGraphics.x; closeButton.y = screenGraphics.y + screenGraphics.height / 2 - 100; self.addChild(closeButton); closeButton.down = function (x, y, obj) { self.destroy(); // Close powerup menu isPowerupScreenActive = false; if (currentLevelIndex < levels.length) { currentLevelIndex++; currentLevel = levels[currentLevelIndex]; } }; self.down = function (x, y, obj) { var localPos = self.toLocal(obj.global); if (powerup1.intersects(self.toLocal(obj.global)) || powerup2.intersects(self.toLocal(obj.global)) || powerup3.intersects(self.toLocal(obj.global))) { if (powerup1.intersects(self.toLocal(obj.global)) && diamondCount >= 10) { console.log("Powerup1 touched"); diamondCount -= 10; diamondCounterTxt.setText(diamondCount); heroFireRate = Math.max(5, heroFireRate - 5); // Increase fire rate when the first powerup is selected, but not less than 5 self.destroy(); // Close powerup menu isPowerupScreenActive = false; } else if (powerup2.intersects(self.toLocal(obj.global)) && diamondCount >= 20) { console.log("Powerup2 touched"); diamondCount -= 20; diamondCounterTxt.setText(diamondCount); // Add action for powerup2 HeroBullet.prototype.hitpoints += 1; self.destroy(); // Close powerup menu isPowerupScreenActive = false; } else if (powerup3.intersects(self.toLocal(obj.global)) && diamondCount >= 30) { console.log("Powerup3 touched"); diamondCount -= 30; diamondCounterTxt.setText(diamondCount); // Add action for powerup3 self.destroy(); // Close powerup menu isPowerupScreenActive = false; } else { var messageText = 'I need more shiny things!'; if (powerup1.intersects(self.toLocal(obj.global)) && diamondCount < 10) { messageText = 'I need 10 diamonds for this powerup!'; } else if (powerup2.intersects(self.toLocal(obj.global)) && diamondCount < 20) { messageText = 'I need 20 diamonds for this powerup!'; } else if (powerup3.intersects(self.toLocal(obj.global)) && diamondCount < 30) { messageText = 'I need 30 diamonds for this powerup!'; } var message = new Text2(messageText, { size: 100, fill: "#ff0000", stroke: "#000000", strokeThickness: 5 }); message.anchor.set(0.5, 0.5); message.x = 2048 / 2; message.y = 2732 / 2; game.addChild(message); LK.setTimeout(function () { message.destroy(); }, 2000); } } else if (closeButton.intersects(self.toLocal(obj.global))) { self.destroy(); // Close powerup menu isPowerupScreenActive = false; if (currentLevelIndex < levels.length) { currentLevelIndex++; currentLevel = levels[currentLevelIndex]; } } }; }); // Star class var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -5; self.x = Math.random() * 2048; } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x800080 //Init game with purple background }); /**** * Game Code ****/ var Level = function Level(config, levelNumber) { this.waves = config.waves; this.currentWaveIndex = 0; this.boss = config.boss; this.levelNumber = levelNumber; }; Level.prototype.getNextWave = function () { if (this.currentWaveIndex < this.waves.length) { return this.waves[this.currentWaveIndex++]; } else { return null; } }; Level.prototype.hasBoss = function () { return this.boss && this.currentWaveIndex >= this.waves.length; }; var levels = [new Level({ waves: [{ enemies: 3, hitpoints: [1], tints: [0xffe066] }, { enemies: 6, hitpoints: [2, 1], tints: [0xcc66ff, 0xffe066] }, { enemies: 9, hitpoints: [3, 2, 1], tints: [0xff6666, 0xcc66ff, 0xffe066] }], boss: true }, 1), new Level({ waves: [{ enemies: 4, hitpoints: [2], tints: [0x66ff66] }, { enemies: 8, hitpoints: [3, 2], tints: [0x66ccff, 0x66ff66] }, { enemies: 12, hitpoints: [4, 3, 2], tints: [] }], boss: true }, 2), new Level({ waves: [{ enemies: 5, hitpoints: [3], tints: [0xff9933] }, { enemies: 10, hitpoints: [4, 3], tints: [0xffcc00, 0xff9933] }, { enemies: 12, hitpoints: [5, 4, 3], tints: [0xff6600, 0xffcc00, 0xff9933] }], boss: true }, 3)]; var currentLevelIndex = 0; var currentLevel = levels[currentLevelIndex]; // Initialize variables var fairy; var bullets = []; var enemies = []; var scoreTxt; var score = 0; var dragNode = null; var heroFireRate = 30; // Default fire rate for hero bullets var defaultHeroFireRate = 30; // Store the default fire rate var diamondCount = 100; // Initialize diamond counter with 999 diamonds var diamondCounterTxt; // Declare diamondCounterTxt variable var isFairyHeld = false; // Track if the fairy is being held var isPowerupScreenActive = false; // Track if the powerup screen is active var waveCount = 0; // Track the wave count var waveConfig = [{ enemies: 3, hitpoints: [1], tints: [0xffe066] } /**** , { enemies: 6, hitpoints: [2, 1], tints: [0xcc66ff, 0xffe066] } , { enemies: 9, hitpoints: [3, 2, 1], tints: [0xff6666, 0xcc66ff, 0xffe066] } ****/ // Add more wave configurations as needed ]; // Initialize game elements function initGame() { // Create and position the fairy fairy = game.addChild(new Fairy()); fairy.particles = []; fairy.x = 2048 / 2; fairy.y = 2732 - 400; // Create score text scoreTxt = new Text2('0', { size: 200, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); scoreTxt.anchor.set(0.5, 0); // Anchor to the top center scoreTxt.x = 2048 / 2; // Position at the top center of the screen scoreTxt.y = 20; // Position with a margin from the top for (var i = 0; i < 30; i++) { var star = game.addChild(new Star()); star.x = Math.random() * 2048; star.y = Math.random() * 2732; } scoreTxt.anchor.set(0.5, 0); // Create coin counter text game.addChild(scoreTxt); // Create coin counter text var overlay = LK.getAsset('menu', { width: 2048, height: 250, color: 0x000000, alpha: 0.5, anchorX: 0.5, anchorY: 0 }); overlay.x = 2048 / 2; overlay.y = 0; game.addChild(overlay); var diamondCounterContainer = new Container(); var diamondIcon = LK.getAsset('diamond', { anchorX: 1, anchorY: 0, alpha: 0.8, scaleX: 1.4, scaleY: 1.4 }); diamondIcon.x = 2048 - 100; diamondIcon.y = 20; diamondCounterContainer.addChild(diamondIcon); diamondCounterTxt = new Text2('0', { size: 120, fill: "#ffffff", stroke: "#000000", strokeThickness: 5 }); diamondCounterTxt.anchor.set(0.5, 0.5); diamondCounterTxt.x = diamondIcon.x + diamondIcon.width / 2 - 230; diamondCounterTxt.y = diamondIcon.y + diamondIcon.height / 2 + 15; diamondCounterContainer.addChild(diamondCounterTxt); game.addChild(diamondCounterContainer); // Set up game event listeners game.down = function (x, y, obj) { dragNode = fairy; isFairyHeld = true; // Set isFairyHeld to true when the fairy is held }; game.up = function (x, y, obj) { dragNode = null; isFairyHeld = false; // Set isFairyHeld to false when the fairy is released }; game.move = handleMove; // Update game every tick game.update = updateGame; } // Handle move events function handleMove(x, y, obj) { if (dragNode) { // Check if the fairy is moving to the right if (x > dragNode.x) { // Mirror the fairy image dragNode.scale.x = -1; } else { // Reset the fairy image dragNode.scale.x = 1; } // Create a ghost image of the fairy when it moves every other frame if (LK.ticks % 4 === 0) { var ghostFairy = LK.getAsset('fairy', { anchorX: 0.5, anchorY: 0.5, alpha: 0.3 }); ghostFairy.x = dragNode.x; ghostFairy.y = dragNode.y; if (dragNode.parent === game) { game.addChildAt(ghostFairy, game.getChildIndex(dragNode)); } else { game.addChild(ghostFairy); } if (dragNode.scale.x === -1) { ghostFairy.scale.x = -1; } // Remove the ghost image after 0.5 seconds LK.setTimeout(function () { ghostFairy.destroy(); }, 250); } dragNode.x += (x - dragNode.x) * 0.1; if (y > 2732 * 0.6) { dragNode.y += (y - dragNode.y) * 0.1; } else { dragNode.y += (2732 * 0.6 - dragNode.y) * 0.1; } } } // Update game logic function updateGame() { console.log("Current Level:", currentLevel.levelNumber); // Update starfield for (var i = game.children.length - 1; i >= 0; i--) { if (game.children[i] instanceof Star) { game.children[i].update(); } if (game.children[i] instanceof Diamond && game.children[i].intersects(fairy)) { game.children[i].destroy(); diamondCount++; diamondCounterTxt.setText(diamondCount); } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { if (bullets[i] instanceof Bullet) { bullets[i].update(); } bullets[i].update(); if (bullets[i].y < -50) { bullets[i].destroy(); bullets.splice(i, 1); } } for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (enemies[j].y > 2732 + 50) { enemies[j].destroy(); enemies.splice(j, 1); } if (fairy.intersects(enemies[j])) { var fairyX = fairy.x; var fairyY = fairy.y; // Create particle effect for fairy for (var p = 0; p < 10; p++) { var particle = LK.getAsset('star', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); particle.x = fairyX; particle.y = fairyY; particle.speedX = (Math.random() - 0.5) * 10; particle.speedY = (Math.random() - 0.5) * 10; particle.update = function () { this.x += this.speedX; this.y += this.speedY; this.alpha -= 0.02; if (this.alpha <= 0) { this.destroy(); } }; game.addChild(particle); } LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } for (var k = bullets.length - 1; k >= 0; k--) { if (bullets[k] instanceof HeroBullet && bullets[k].intersects(enemies[j])) { bullets[k].destroy(); bullets.splice(k, 1); enemies[j].hitpoints--; if (enemies[j].hitpoints <= 0) { var enemyX = enemies[j].x; var enemyY = enemies[j].y; // Create particle effect for (var p = 0; p < 20; p++) { var particle = LK.getAsset('star', { anchorX: 0.5, anchorY: 0.5, alpha: 1, scaleX: 2, scaleY: 2, tint: enemies[j].children[0].tint }); particle.x = enemyX; particle.y = enemyY; particle.speedX = (Math.random() - 0.5) * 10; particle.speedY = (Math.random() - 0.5) * 10; particle.update = function () { this.x += this.speedX; this.y += this.speedY; this.alpha -= 0.02; if (this.alpha <= 0) { this.destroy(); } }; game.addChild(particle); } enemies[j].destroy(); if (enemies[j] instanceof Boss || enemies[j] instanceof Boss2) { var powerupMenu = new PowerupMenu(); powerupMenu.x = 2048 / 2 - powerupMenu.width / 2; powerupMenu.y = 2732 / 2 - powerupMenu.height / 2; game.addChild(powerupMenu); isPowerupScreenActive = true; // Removed level increase when boss is destroyed } enemies.splice(j, 1); if (enemies[j]) { score += enemies[j].hitpoints * 10; } scoreTxt.setText(score); var dropChance = Math.random(); if (dropChance < 0.2) { var newDiamond = new Diamond(); newDiamond.x = enemyX; newDiamond.y = enemyY; game.addChild(newDiamond); } else if (dropChance < 0.2) { var newPowerup = new Powerup(); newPowerup.x = enemyX; newPowerup.y = enemyY; game.addChild(newPowerup); } } break; } } } // Check for collisions // Check for coin collection for (var i = game.children.length - 1; i >= 0; i--) { if (game.children[i] instanceof Diamond && game.children[i].intersects(fairy)) { game.children[i].destroy(); diamondCount++; diamondCounterTxt.setText('Diamonds: ' + diamondCount); } } for (var k = bullets.length - 1; k >= 0; k--) { for (var l = enemies.length - 1; l >= 0; l--) { if (bullets[k] instanceof HeroBullet && bullets[k].intersects(enemies[l])) { bullets[k].destroy(); bullets.splice(k, 1); enemies[l].hitpoints--; if (enemies[l].hitpoints <= 0) { var enemyX = enemies[l].x; var enemyY = enemies[l].y; enemies[l].destroy(); enemies.splice(l, 1); if (enemies[l]) { score += enemies[l].hitpoints * 10; } scoreTxt.setText(score); // Randomly drop coins or powerups var dropChance = Math.random(); if (dropChance < 0.2) { var newDiamond = new Diamond(); newDiamond.x = enemyX; newDiamond.y = enemyY; game.addChild(newDiamond); } else if (dropChance < 0.2) { var newPowerup = new Powerup(); newPowerup.x = enemyX; newPowerup.y = enemyY; game.addChild(newPowerup); } } break; } } } // Spawn new bullets if (LK.ticks % heroFireRate == 0 && isFairyHeld) { // Only spawn new bullets if the fairy is being held var newBullet = new HeroBullet(); newBullet.x = fairy.x; newBullet.y = fairy.y - fairy.height / 2; bullets.push(newBullet); game.addChild(newBullet); } // Spawn new enemies in a line if (LK.ticks % 600 == 0 && !isPowerupScreenActive) { if (enemies.length === 0) { waveCount++; } if (currentLevel) { var currentWave = currentLevel.getNextWave(); if (currentWave) { var maxEnemiesPerLine = 3; var enemySpacing = 2048 / (maxEnemiesPerLine + 1); // Adjust spacing to center enemies var totalRows = Math.ceil(currentWave.enemies / maxEnemiesPerLine); for (var i = 0; i < currentWave.enemies; i++) { var newBlock = new Enemy(); var row = Math.floor(i / maxEnemiesPerLine); newBlock.hitpoints = currentWave.hitpoints[row] || currentWave.hitpoints[currentWave.hitpoints.length - 1]; newBlock.x = i % maxEnemiesPerLine * enemySpacing + enemySpacing / 2 - newBlock.width / 2; newBlock.y = row * 220 - 50; // Increase row spacing by 20 pixels newBlock.children[0].tint = currentWave.tints[row] || currentWave.tints[currentWave.tints.length - 1]; enemies.push(newBlock); game.addChild(newBlock); } // Spawn Enemy2 after the wave with a delay of 5 seconds LK.setTimeout(function () { var newEnemy2 = new Enemy2(); newEnemy2.x = Math.random() * 2048; newEnemy2.y = -newEnemy2.height; enemies.push(newEnemy2); game.addChild(newEnemy2); }, 5000); // Center the rows of enemies var totalWidth = (Math.min(currentWave.enemies, maxEnemiesPerLine) - 1) * enemySpacing; var offsetX = (2048 - totalWidth) / 2; for (var j = 0; j < enemies.length; j++) { enemies[j].x += offsetX - enemies[j].width / 2; } } else if (currentLevel.hasBoss() && enemies.length === 0) { var boss = currentLevel.levelNumber === 2 ? new Boss2() : new Boss(); boss.x = 2048 / 2; boss.y = -boss.height; enemies.push(boss); game.addChild(boss); } } } } // Initialize the game initGame();
===================================================================
--- original.js
+++ change.js
@@ -49,9 +49,9 @@
self.scale.x -= 0.001;
self.scale.y -= 0.001;
}
if (LK.ticks % 30 == 0) {
- var newBullet = new BossBullet();
+ var newBullet = new BossBullet2();
newBullet.x = self.x;
newBullet.y = self.y + self.height / 2;
bullets.push(newBullet);
game.addChild(newBullet);
@@ -77,8 +77,28 @@
self.scale.y -= 0.001;
}
};
});
+var BossBullet2 = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bossbullet2', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 5;
+ self.update = function () {
+ self.y += self.speed;
+ self.rotation += 0.1; // Add rotation to the boss bullet
+ // Logic to increase and decrease boss bullet size
+ if (LK.ticks % 120 < 60) {
+ self.scale.x += 0.001;
+ self.scale.y += 0.001;
+ } else {
+ self.scale.x -= 0.001;
+ self.scale.y -= 0.001;
+ }
+ };
+});
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
@@ -281,9 +301,9 @@
anchorX: 0.5,
anchorY: 0.5
});
powerup1.x = screenGraphics.x - 300;
- powerup1.y = screenGraphics.y - 100;
+ powerup1.y = screenGraphics.y + 100;
self.addChild(powerup1);
powerup1.down = function (x, y, obj) {
console.log("Powerup1 touched");
if (diamondCount >= 10) {
@@ -335,9 +355,9 @@
anchorX: 0.5,
anchorY: 0.5
});
powerup2.x = screenGraphics.x;
- powerup2.y = screenGraphics.y - 100;
+ powerup2.y = screenGraphics.y + 100;
self.addChild(powerup2);
powerup2.down = function (x, y, obj) {
console.log("Powerup2 touched");
if (diamondCount >= 20) {
@@ -386,9 +406,9 @@
anchorX: 0.5,
anchorY: 0.5
});
powerup3.x = screenGraphics.x + 300;
- powerup3.y = screenGraphics.y - 100;
+ powerup3.y = screenGraphics.y + 100;
self.addChild(powerup3);
powerup3.down = function (x, y, obj) {
console.log("Powerup3 touched");
if (diamondCount >= 30) {
8-bit. cartoon. white star.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon 8 bit fairy dust. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Cartoon, 8bit, fireball. Black border. Cicular.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon, 8 bit, shield. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8bit, cartoon, axe. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
dark electric ball, 8bit, cartoon.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8bit, cartoon, treasure chest frame. very big empty center. only a fine border of chest. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.