User prompt
make blocks hitpoints font color white
User prompt
move blocks 100 pixels left
User prompt
make increase an decrese of blocks size even less
User prompt
make blocks increase and decrease size less
Code edit (1 edits merged)
Please save this source code
User prompt
change block make blocks increase and decrease their sizes
User prompt
enemy boss should fire bullets at fairy
User prompt
Make backgound black
User prompt
Fix issue boss not shooting
User prompt
Boss should shoot bullets
User prompt
Make lifebar green less shiny
User prompt
Update lifbar to yellow and red whne it is smaller
User prompt
Make lifa r green softer
User prompt
Please fix the bug: 'TypeError: self.hitpointsDisplay.setText is not a function' in or related to this line: 'self.hitpointsDisplay.setText(self.hitpoints.toString());' Line Number: 163
User prompt
Goblins should also have htopint lifbear insted of text
User prompt
Please fix the bug: 'TypeError: self.hitpointsDisplay.setText is not a function' in or related to this line: 'self.hitpointsDisplay.setText(self.hitpoints.toString());' Line Number: 62
User prompt
Use lifebar for hitpointa intead of numbers for boss
User prompt
Make background color lighetr
User prompt
Goblin and boss should have lifebars for hitpointa
User prompt
Golbin sjould spawn after a enemy waves is destoryed or disapears on the bottm of the screen
User prompt
Goblin should have jumpy movement in the dircetion of teh player
User prompt
Goblin should spawn btween wsves and shoot at player
User prompt
Create goblin
User prompt
Create a new enemy that spawns between waves and move towards player shooting
User prompt
Asd bigger particle effect qhen boss is destroyed
/****
* 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: 200,
fill: "#000000"
});
self.hitpointsDisplay.anchor.set(0.5, 0.5);
self.hitpointsDisplay.y = 0;
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 = 6;
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: 100,
fill: "#000000"
});
self.hitpointsDisplay.anchor.set(0.5, 0.5);
self.hitpointsDisplay.y = 0;
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: 4,
hitpoints: [1]
}, {
enemies: 8,
hitpoints: [2, 1]
}, {
enemies: 12,
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 < 50; 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 % 4 === 0) {
var ghostFairy = LK.getAsset('fairy', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.3
});
ghostFairy.x = dragNode.x;
ghostFairy.y = dragNode.y;
game.addChildAt(ghostFairy, game.getChildIndex(dragNode));
// 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() {
// 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 Coin && game.children[i].intersects(fairy)) {
game.children[i].destroy();
coinCount++;
coinCounterTxt.setText('Coins: ' + coinCount);
}
}
// 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);
}
}
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 < 20; 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].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
});
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();
enemies.splice(j, 1);
score++;
scoreTxt.setText(score);
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);
}
if (enemies[j] instanceof Boss) {
// Create bigger particle effect for boss
for (var p = 0; p < 50; p++) {
var particle = LK.getAsset('star', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 1
});
particle.x = enemyX;
particle.y = enemyY;
particle.speedX = (Math.random() - 0.5) * 20;
particle.speedY = (Math.random() - 0.5) * 20;
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.pauseGame();
upgradeMenu.visible = true;
}
}
break;
}
}
}
// 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 = 4;
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;
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.