User prompt
Double size of hitpounta
User prompt
Hitpont colos should be black
User prompt
Move hitpont to center of enemy
User prompt
If fairy collides with enemy then explode faify into particles and game over
Code edit (1 edits merged)
Please save this source code
User prompt
Improve game perfirmance
User prompt
Make sure blocka are 4 per row
User prompt
Make sure blocks are only 5 per row
User prompt
Increase coins speed
User prompt
Reduce rhe ammoun of nlocks
User prompt
Add particle effect whhen a block esplodes
User prompt
Improve game performnace
User prompt
Always keep shadows behind main image
User prompt
Reduce ghost images quantoity in half
User prompt
Do not move the fairy when toucjing sceen to that position butstart moving it from that point like kittne force
User prompt
make ghost image less intense
User prompt
add a ghost image of the fairy when it moves
User prompt
if fairy is moving to the right use mirror image
User prompt
add shirking and expanding effet to fairy sideways to feel movement
User prompt
after boss is killed, pause game and offer player to buy upgrades using coins
User prompt
create a config file to define how many waves each level will have
User prompt
when a boss is destroyed, a new level should start. if there is no level configured, just replay previous level
User prompt
boss should stay on the top 30 % of the screen and have lateral movement
Code edit (2 edits merged)
Please save this source code
User prompt
make sure coins or powerups only spawn in the positon of the destroyed block
/**** * Classes ****/ // Boss class var Boss = Container.expand(function () { var self = Container.call(this); var bossGraphics = self.attachAsset('boss', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.hitpoints = 20; // Boss hitpoints self.update = function () { // Ensure the boss stays within the top 30% of the screen if (self.y < 0.3 * 2732) { self.y += self.speed; } else { self.y = 0.3 * 2732; } // Add lateral movement self.x += self.speed; if (self.x < 0 || self.x > 2048) { self.speed = -self.speed; // Reverse direction when hitting screen edges } // Create and update hitpoints display if (!self.hitpointsDisplay) { self.hitpointsDisplay = new Text2(self.hitpoints.toString(), { size: 100, fill: "#ffffff" }); self.hitpointsDisplay.anchor.set(0.5, 0); self.hitpointsDisplay.y = 120; self.addChild(self.hitpointsDisplay); } else { self.hitpointsDisplay.setText(self.hitpoints.toString()); } }; }); // 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 = -10; self.update = function () { self.y += self.speed; }; }); // Coin class var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.update = function () { self.y += self.speed; 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 }); self.speed = 3; self.hitpoints = 3; // Add hitpoints to enemies self.update = function () { self.y += self.speed; // Create and update hitpoints display if (!self.hitpointsDisplay) { self.hitpointsDisplay = new Text2(self.hitpoints.toString(), { size: 50, fill: "#ffffff" }); self.hitpointsDisplay.anchor.set(0.5, 0); self.hitpointsDisplay.y = 60; self.addChild(self.hitpointsDisplay); } else { self.hitpointsDisplay.setText(self.hitpoints.toString()); } }; }); //<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.update = function () { // Fairy movement logic }; }); // 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(); } }; }); // 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; } }; }); // UpgradeMenu class var UpgradeMenu = Container.expand(function () { var self = Container.call(this); var menuGraphics = self.attachAsset('menu', { anchorX: 0.5, anchorY: 0.5 }); self.visible = false; // Initially hidden self.update = function () { // Update menu items }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Function to start a new level or replay the previous level function startNewLevel() { waveCount = 0; // Reset wave count score = 0; // Reset score scoreTxt.setText(score); // Update score text coinCount = 0; // Reset coin count coinCounterTxt.setText('Coins: ' + coinCount); // Update coin counter text // Clear existing enemies and bullets for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var j = bullets.length - 1; j >= 0; j--) { bullets[j].destroy(); bullets.splice(j, 1); } // Reinitialize game elements initGame(); LK.resumeGame(); // Resume the game upgradeMenu.visible = false; // Hide the upgrade menu } // Initialize variables var fairy; var bullets = []; var enemies = []; var scoreTxt; var score = 0; var dragNode = null; var coinCount = 0; // Initialize coin counter var coinCounterTxt; // Declare coinCounterTxt variable var isFairyHeld = false; // Track if the fairy is being held var waveCount = 0; // Track the wave count var waveConfig = [{ enemies: 6, hitpoints: [1] }, { enemies: 12, hitpoints: [2, 1] }, { enemies: 18, hitpoints: [3, 2, 1] } // Add more wave configurations as needed ]; // Initialize game elements function initGame() { // Create and position the fairy fairy = game.addChild(new Fairy()); fairy.x = 2048 / 2; fairy.y = 2732 - 200; // Create score text scoreTxt = new Text2('0', { size: 150, fill: "#ffffff" }); 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 < 100; 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 coinCounterTxt = new Text2('Coins: 0', { size: 100, fill: "#ffffff" }); coinCounterTxt.anchor.set(1, 0); // Anchor to the top right coinCounterTxt.x = 2048 - 20; // Position at the top right of the screen with a margin coinCounterTxt.y = 20; // Position with a margin from the top game.addChild(coinCounterTxt); // 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 % 2 === 0) { var ghostFairy = LK.getAsset('fairy', { anchorX: 0.5, anchorY: 0.5, alpha: 0.3 }); ghostFairy.x = dragNode.x; ghostFairy.y = dragNode.y; game.addChild(ghostFairy); // Remove the ghost image after 0.5 seconds LK.setTimeout(function () { ghostFairy.destroy(); }, 500); } 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() { // Update starfield for (var i = game.children.length - 1; i >= 0; i--) { if (game.children[i] instanceof Star) { game.children[i].update(); } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { bullets[i].update(); if (bullets[i].y < -50) { bullets[i].destroy(); bullets.splice(i, 1); } } // Update enemies 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); } } // Check for collisions // Check for coin collection for (var i = game.children.length - 1; i >= 0; i--) { if (game.children[i] instanceof Coin && game.children[i].intersects(fairy)) { game.children[i].destroy(); coinCount++; coinCounterTxt.setText('Coins: ' + coinCount); } } for (var k = bullets.length - 1; k >= 0; k--) { for (var l = enemies.length - 1; l >= 0; l--) { if (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); score++; scoreTxt.setText(score); // Randomly drop coins or powerups var dropChance = Math.random(); if (dropChance < 0.2) { var newCoin = new Coin(); newCoin.x = enemyX; newCoin.y = enemyY; game.addChild(newCoin); } else if (dropChance < 0.2) { var newPowerup = new Powerup(); newPowerup.x = enemyX; newPowerup.y = enemyY; game.addChild(newPowerup); } // Check if the destroyed enemy is the boss if (enemies[l] instanceof Boss) { LK.pauseGame(); // Pause the game upgradeMenu.visible = true; // Show the upgrade menu } } break; } } } // Spawn new bullets if (LK.ticks % 20 == 0 && isFairyHeld) { // Only spawn new bullets if the fairy is being held var newBullet = new Bullet(); newBullet.x = fairy.x; newBullet.y = fairy.y; bullets.push(newBullet); game.addChild(newBullet); } // Spawn new enemies in a line if (LK.ticks % 600 == 0) { waveCount++; if (waveCount <= waveConfig.length) { var currentWave = waveConfig[waveCount - 1]; var maxEnemiesPerLine = 6; 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.y = row * 200 - 50; enemies.push(newBlock); game.addChild(newBlock); } // 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; } } else if (waveCount == waveConfig.length + 1) { // Spawn boss enemy var boss = new Boss(); boss.hitpoints = 20; // Set boss hitpoints boss.x = 2048 / 2; boss.y = 0; boss.speed = 5; // Set initial speed for lateral movement enemies.push(boss); game.addChild(boss); } } } // Initialize the game initGame(); // Create and position the upgrade menu var upgradeMenu = game.addChild(new UpgradeMenu()); upgradeMenu.x = 2048 / 2; upgradeMenu.y = 2732 / 2;
===================================================================
--- original.js
+++ change.js
@@ -253,21 +253,23 @@
} else {
// Reset the fairy image
dragNode.scale.x = 1;
}
- // Create a ghost image of the fairy when it moves
- var ghostFairy = LK.getAsset('fairy', {
- anchorX: 0.5,
- anchorY: 0.5,
- alpha: 0.3
- });
- ghostFairy.x = dragNode.x;
- ghostFairy.y = dragNode.y;
- game.addChild(ghostFairy);
- // Remove the ghost image after 0.5 seconds
- LK.setTimeout(function () {
- ghostFairy.destroy();
- }, 500);
+ // Create a ghost image of the fairy when it moves every other frame
+ if (LK.ticks % 2 === 0) {
+ var ghostFairy = LK.getAsset('fairy', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.3
+ });
+ ghostFairy.x = dragNode.x;
+ ghostFairy.y = dragNode.y;
+ game.addChild(ghostFairy);
+ // Remove the ghost image after 0.5 seconds
+ LK.setTimeout(function () {
+ ghostFairy.destroy();
+ }, 500);
+ }
dragNode.x += (x - dragNode.x) * 0.1;
if (y > 2732 * 0.6) {
dragNode.y += (y - dragNode.y) * 0.1;
} else {
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.