User prompt
If enemies collide with explosion from bomb button it will die instantly
User prompt
If hp ran out it will decrease a life and if all 3 lifes are out then game over
User prompt
Shield button increases maximum hp we had, the hp bar will get longer as it purchased
User prompt
Move 3 lifes icon more down
User prompt
Add 3 lifes icon on the right up corner to see how many lifes we have left, if hp 0, life will decrease by 1 then hp reset to full
User prompt
Add back bottom screen limiter for hero
User prompt
Remove bottom screen limiter for enemies
User prompt
Remove bottom screen limiter
User prompt
No more enemy auto destroy in under hero spawn
User prompt
Add health orb falling down the screen every 10 seconds if hp damaged, but if hp full it wont spawn
User prompt
Change background to very light green
User prompt
Make background gray very light blue color
User prompt
Color the +1 display text for currencies to black
User prompt
Add +1 display text for each coins and diamonds collected
User prompt
Cancel Add +1 for each coin or diamond collected
User prompt
Add +1 for each coin or diamond collected
User prompt
Increase diamond chance to drop from enemy to 20%
User prompt
Change use of shield button to increase hero hp bar instead of making a shield, it spends 20 coin and 10 diamondd
User prompt
Add shield bar next to hp bar if shield upgrade bough
User prompt
Fix shield
User prompt
Make regular enemy and fast endmy spawn raytr same
User prompt
Make spawn rate for each enemy same in frenzy mode and not in feenzy mode
User prompt
Increase regular enemy spawn rate in frenzy mode
User prompt
Decrease enemy spawn rate a bit only in both frenzy mode and normal time
User prompt
Increase fast enemy spawn rate a bit
/****
* Classes
****/
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.createAsset('enemyBullet', 'Enemy Bullet', 0.5, 0.5);
self.speed = 5;
self.move = function () {
self.y += self.speed;
};
});
var HealthBar = Container.expand(function () {
var self = Container.call(this);
var healthBar = self.createAsset('healthBar', 'Health Bar', 0, 0.5);
var backgroundBar = self.createAsset('healthBarBackground', 'Health Bar Background', 0, 0.5);
backgroundBar.x = healthBar.x;
var healthBar = self.createAsset('healthBar', 'Health Bar', 0, 0.5);
healthBar.width = 200; // Initial full health width
self.setHealth = function (percentage) {
healthBar.width = 200 * percentage;
};
});
var ScorePopup = Container.expand(function () {
var self = Container.call(this);
var scoreText = new Text2('+1', {
size: 80,
fill: "#ffffff"
});
scoreText.anchor.set(0.5, 0.5);
self.addChild(scoreText);
self.animate = function () {
self.y -= 2;
if (self.alpha > 0) {
self.alpha -= 0.05;
} else {
self.destroy();
}
};
});
// ShootButton class
var ShootButton = Container.expand(function () {
var self = Container.call(this);
var shootButtonGraphics = self.createAsset('shootButton', 'Shoot Button', 0.5, 0.5);
self.cooldown = false;
self.on('down', function () {
if (!self.cooldown) {
self.cooldown = true;
for (var i = 0; i < hero.bulletCount; i++) {
var newBullet = new Bullet();
// Calculate the distance between bullets based on the current bullet count
var bulletSpacing = hero.bulletCount > 1 ? hero.width / hero.bulletCount : 0;
newBullet.x = hero.x - hero.width / 2 + bulletSpacing * i;
newBullet.y = hero.y - hero.children[1].height;
if (bullets.length < 40) {
bullets.push(newBullet);
game.addChild(newBullet);
} else {
newBullet.destroy();
}
}
LK.setTimeout(function () {
self.cooldown = false;
}, 250);
}
});
});
// Hero class
var Hero = Container.expand(function () {
var self = Container.call(this);
var heroGraphics = self.createAsset('hero', 'Hero character', 0.5, 0.5);
self.maxHealth = 100; // Initialize hero's max health to 100
self.maxShield = 100; // Initialize hero's max shield to 100
self.health = self.maxHealth; // Initialize hero's current health to max health
// Direction indicator line
var directionLine = self.createAsset('directionLine', 'Direction Indicator', 0.5, 1);
directionLine.y = -heroGraphics.height / 2 - 60;
// Direction indicator line
self.bulletCount = 1; // Initialize with 1 bullet
// The update method for the Hero class
self.update = function () {
// Add hero movement or other periodic update logic here
if (self.shield > 0) {
var shieldPercentage = self.shield / self.maxShield;
self.shieldBar.setShield(shieldPercentage);
self.shieldGraphic.updateVisibility(true);
self.shieldGraphic.updatePosition(self.x, self.y);
} else if (self.shieldGraphic) {
self.shieldGraphic.updateVisibility(false);
}
self.healthBar.setHealth(self.health / self.maxHealth);
if (!self.shieldRegenerationTimer) {
self.shieldRegenerationTimer = LK.setInterval(function () {
if (self.shield < self.maxShield) {
self.shield = Math.min(self.shield + self.maxShield * 0.05, self.maxShield);
self.shieldBar.setShield(self.shield / self.maxShield);
}
}, 4000);
}
};
// Health bar for the hero
self.healthBar = game.addChild(new HealthBar());
self.healthBar.x = 50; // Move health bar 50 pixels to the right
self.healthBar.y = 2732 - self.healthBar.children[1].height; // Position at the left bottom corner
// Initialize shield graphic and shield bar only if shield upgrade has been purchased
if (self.shield) {
self.shieldGraphic = game.addChild(new ShieldGraphic());
self.shieldGraphic.updatePosition(self.x, self.y);
self.shieldGraphic.updateVisibility(false);
self.shieldBar = game.addChild(new ShieldBar());
self.shieldBar.x = self.healthBar.x + self.healthBar.children[1].width + 10; // Position shield bar next to health bar
self.shieldBar.y = self.healthBar.y; // Align shield bar with health bar
}
// Regeneration timer for the hero
self.regenerationTimer = LK.setInterval(function () {
if (self.health < self.maxHealth && self.health > 0) {
self.health = Math.min(self.health + 10, self.maxHealth);
self.healthBar.setHealth(self.health / self.maxHealth);
}
}, 4000);
// Initialize shield graphic and shield bar only if shield upgrade has been purchased
if (self.shield) {
self.shieldGraphic = game.addChild(new ShieldGraphic());
self.shieldGraphic.updatePosition(self.x, self.y);
self.shieldGraphic.updateVisibility(false);
self.shieldBar = game.addChild(new ShieldBar());
self.shieldBar.x = self.healthBar.x + self.healthBar.children[1].width + 10; // Position shield bar next to health bar
self.shieldBar.y = self.healthBar.y; // Align shield bar with health bar
}
});
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.createAsset('bullet', 'Hero Bullet', 0.5, 0.5);
self.speed = -10;
self.move = function () {
self.y += self.speed;
};
});
// Coin class
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.createAsset('coin', 'Coin', 0.5, 0.5);
self.value = 1;
self.speed = 5;
self.move = function () {
self.y += self.speed;
};
self.collect = function () {
self.collect = function () {
// Increment total coins collected by 1
totalCoins += 1;
// Update the total coins display
coinsDisplay.updateCoins(totalCoins);
// Create and animate the '+1' text for coins
var scorePopup = new ScorePopup();
scorePopup.x = self.x;
scorePopup.y = self.y;
game.addChild(scorePopup);
scorePopups.push(scorePopup);
scorePopup.animate();
self.destroy();
};
};
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.createAsset('enemy', 'Enemy character', 0.5, 0.5);
self.speed = 1; // Normal enemy speed
self.shootTimer = 0;
self.shootInterval = 300; // 5 seconds at 60FPS
self.move = function (directionX, directionY) {
self.x += directionX * self.speed;
self.y += directionY * self.speed;
self.x = Math.max(0, Math.min(2048 - self.children[0].width, self.x));
self.y += directionY * self.speed;
};
self.shoot = function () {
if (self.shootTimer >= self.shootInterval) {
var enemyBullet = new EnemyBullet();
enemyBullet.x = self.x;
enemyBullet.y = self.y + enemyGraphics.height / 2;
enemyBullets.push(enemyBullet);
game.addChild(enemyBullet);
self.shootTimer = 0;
}
};
});
// FastEnemy class
var FastEnemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.createAsset('fastEnemy', 'Fast Enemy character', 0.5, 0.5);
self.speed = 2; // Increased speed for FastEnemy
self.shootTimer = 0;
self.shootInterval = 150; // 2.5 seconds at 60FPS
self.move = function () {
var directionX = Math.random() < 0.5 ? -1 : 1;
var directionY = 1;
self.x += directionX * self.speed;
self.y += directionY * self.speed;
self.x = Math.max(0, Math.min(2048 - self.children[0].width, self.x));
self.y += directionY * self.speed;
};
self.shoot = function () {
if (self.shootTimer >= self.shootInterval) {
var enemyBullet = new EnemyBullet();
enemyBullet.x = self.x;
enemyBullet.y = self.y + enemyGraphics.height / 2;
enemyBullets.push(enemyBullet);
game.addChild(enemyBullet);
self.shootTimer = 0;
}
};
});
// CoinsDisplay class
var CoinsDisplay = Container.expand(function () {
var self = Container.call(this);
var coinsText = new Text2('Coins: 0', {
size: 100,
fill: "#ffd700"
});
coinsText.anchor.set(0.5, 0);
self.addChild(coinsText);
self.updateCoins = function (totalCoins) {
coinsText.setText('Coins: ' + totalCoins.toString());
};
});
var ShieldBar = Container.expand(function () {
var self = Container.call(this);
var shieldBar = self.createAsset('shieldBar', 'Shield Bar', 0, 0.5);
var backgroundBar = self.createAsset('shieldBarBackground', 'Shield Bar Background', 0, 0.5);
backgroundBar.x = shieldBar.x;
shieldBar.width = 200; // Initial full shield width
self.setShield = function (percentage) {
shieldBar.width = 200 * percentage;
};
});
var ShieldGraphic = Container.expand(function () {
var self = Container.call(this);
var shieldGraphic = self.createAsset('shieldGraphic', 'Hero Shield', 0.5, 0.5);
self.updatePosition = function (x, y) {
self.x = x;
self.y = y;
};
self.updateVisibility = function (visible) {
self.visible = visible;
};
});
var HealthOrb = Container.expand(function () {
var self = Container.call(this);
var orbGraphics = self.createAsset('healthOrb', 'Health Orb', 0.5, 0.5);
self.speed = 3;
self.move = function () {
self.y += self.speed;
};
self.collect = function () {
if (hero.health < hero.maxHealth) {
hero.health = Math.min(hero.health + 20, hero.maxHealth);
hero.healthBar.setHealth(hero.health / hero.maxHealth);
self.destroy();
}
};
});
var Life = Container.expand(function () {
var self = Container.call(this);
var lifeGraphics = self.createAsset('lifeIcon', 'Life Icon', 0.5, 0.5);
});
var LivesDisplay = Container.expand(function () {
var self = Container.call(this);
self.lives = 3;
self.icons = [];
for (var i = 0; i < self.lives; i++) {
var life = new Life();
life.x = (life.width + 10) * i;
self.addChild(life);
self.icons.push(life);
}
self.removeLife = function () {
if (self.lives > 0) {
self.lives--;
var lifeToRemove = self.icons[self.lives];
lifeToRemove.destroy();
self.icons.pop();
}
};
});
//{5.1}
// DiamondsDisplay class
var DiamondsDisplay = Container.expand(function () {
var self = Container.call(this);
var diamondsText = new Text2('Diamonds: 0', {
size: 100,
fill: "#b9f2ff"
});
diamondsText.anchor.set(0.5, 0);
self.addChild(diamondsText);
self.updateDiamonds = function (totalDiamonds) {
diamondsText.setText('Diamonds: ' + totalDiamonds.toString());
};
});
var FrenzyButton = Container.expand(function () {
var self = Container.call(this);
var frenzyButtonGraphics = self.createAsset('frenzyButton', 'Frenzy Mode Button', 0.5, 0.5);
self.isFrenzyActive = false;
self.toggleFrenzyMode = function () {
if (!self.isFrenzyActive && !self.cooldownActive) {
self.isFrenzyActive = true;
fireRate = Math.max(5, fireRate - 10);
LK.setTimeout(function () {
self.isFrenzyActive = false;
fireRate = 30; // Reset fire rate to default when frenzy mode ends
self.cooldownActive = true;
LK.setTimeout(function () {
self.cooldownActive = false;
}, 20000); // 20-second cooldown
}, 10000); // Frenzy mode lasts only 10 seconds
}
};
self.on('down', function () {
self.toggleFrenzyMode();
});
});
// Diamond class
var Diamond = Container.expand(function () {
var self = Container.call(this);
var diamondGraphics = self.createAsset('diamond', 'Diamond', 0.5, 0.5);
self.value = 5;
self.speed = 5;
self.move = function () {
self.y += self.speed;
};
self.collect = function () {
// Increment total diamonds collected by 1
totalDiamonds += 1;
// Update the total diamonds display
diamondsDisplay.updateDiamonds(totalDiamonds);
// Create and animate the '+1' text for diamonds
var scorePopup = new ScorePopup();
scorePopup.x = self.x;
scorePopup.y = self.y;
game.addChild(scorePopup);
scorePopups.push(scorePopup);
scorePopup.animate();
self.destroy();
};
});
// Bomb class
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.createAsset('explosion', 'Explosion', 0.5, 0.5);
self.explode = function () {
LK.setTimeout(function () {
self.checkCollisionWithEnemy();
self.destroy();
}, 3000);
};
self.checkCollisionWithEnemy = function () {
for (var i = enemies.length - 1; i >= 0; i--) {
if (self.intersects(enemies[i])) {
// Instantly destroy the enemy
enemies[i].destroy();
enemies.splice(i, 1);
}
}
};
});
// BombButton class
var BombButton = Container.expand(function () {
var self = Container.call(this);
var bombButtonGraphics = self.createAsset('bombButton', 'Bomb Button', 0.5, 0.5);
self.cooldown = false;
self.on('down', function () {
if (!self.cooldown) {
self.cooldown = true;
var explosion = new Explosion();
explosion.x = 2048 / 2;
explosion.y = 2732 / 2 - 500;
game.addChild(explosion);
explosion.explode();
LK.setTimeout(function () {
self.cooldown = false;
}, 5000);
}
});
});
// MagnetButton class
var MagnetButton = Container.expand(function () {
var self = Container.call(this);
var magnetButtonGraphics = self.createAsset('magnetButton', 'Magnet Button', 0.5, 0.5);
self.cooldown = false;
self.on('down', function () {
if (!self.cooldown) {
self.cooldown = true;
coins.forEach(function (coin) {
// Increment total coins collected
totalCoins += coin.value;
// Update the total coins display
coinsDisplay.updateCoins(totalCoins);
coin.destroy();
});
coins = []; // Clear the coins array
diamonds.forEach(function (diamond) {
// Increment total diamonds collected by 1
totalDiamonds += 2;
// Update the total diamonds display
diamondsDisplay.updateDiamonds(totalDiamonds);
diamond.destroy();
});
diamonds = []; // Clear the diamonds array
LK.setTimeout(function () {
self.cooldown = false;
}, 3000); // 3-second cooldown
}
});
});
var Thumbstick = Container.expand(function () {
var self = Container.call(this);
var outerCircle = self.createAsset('thumbstickOuter', 'Thumbstick Outer Circle', 0.5, 0.5);
var innerCircle = self.createAsset('thumbstickInner', 'Thumbstick Inner Circle', 0.5, 0.5);
self.isDragging = false;
self.on('down', function (obj) {
self.isDragging = true;
var pos = obj.event.getLocalPosition(game);
innerCircle.position.set(pos.x, pos.y);
});
game.on('move', function (obj) {
if (self.isDragging) {
var pos = obj.event.getLocalPosition(outerCircle);
var dx = pos.x - outerCircle.width * 0.5;
var dy = pos.y - outerCircle.height * 0.5;
var distance = Math.sqrt(dx * dx + dy * dy);
var maxDistance = outerCircle.width * 0.5;
if (distance > maxDistance) {
var angle = Math.atan2(dy, dx);
innerCircle.x = Math.cos(angle) * maxDistance;
innerCircle.y = Math.sin(angle) * maxDistance;
} else {
innerCircle.position.set(pos.x, pos.y);
}
var heroMoveX = Math.min(10, Math.abs(dx * 0.05)) * Math.sign(dx);
var heroMoveY = Math.min(10, Math.abs(dy * 0.05)) * Math.sign(dy);
hero.x = Math.max(hero.width / 2, Math.min(2048 - hero.width / 2, hero.x + heroMoveX));
hero.y = Math.max(hero.height / 2, Math.min(2732 - hero.height / 2, hero.y + heroMoveY));
}
});
game.on('up', function (obj) {
self.isDragging = false;
innerCircle.position.set(outerCircle.x, outerCircle.y);
});
});
var MultiBulletUpgradeButton = Container.expand(function () {
var self = Container.call(this);
var upgradeButtonGraphics = self.createAsset('multiBulletUpgradeButton', 'Multi Bullet Upgrade Button', 0.5, 0.5);
self.on('down', function () {
if (totalCoins >= 10 && totalDiamonds >= 5) {
hero.bulletCount = Math.min(hero.bulletCount + 1, 5);
totalCoins -= 10;
totalDiamonds -= 5;
coinsDisplay.updateCoins(totalCoins);
diamondsDisplay.updateDiamonds(totalDiamonds);
}
});
});
// ShieldUpgradeButton class
var ShieldUpgradeButton = Container.expand(function () {
var self = Container.call(this);
var shieldButtonGraphics = self.createAsset('shieldButton', 'Shield Upgrade Button', 0.5, 0.5);
self.on('down', function () {
if (totalCoins >= 20 && totalDiamonds >= 10) {
hero.maxHealth = Math.min(hero.maxHealth + 20, 200); // Increase max health up to a limit of 200
hero.health = hero.maxHealth; // Reset health to max after upgrade
totalCoins -= 20;
totalDiamonds -= 10;
coinsDisplay.updateCoins(totalCoins);
diamondsDisplay.updateDiamonds(totalDiamonds);
hero.healthBar.setHealth(hero.health / hero.maxHealth);
// Extend the health bar's width to reflect the increased max health
hero.healthBar.children[1].width = hero.healthBar.children[1].width / (hero.maxHealth - 20) * hero.maxHealth;
}
});
});
/****
* Initialize Game
****/
// Create frenzy button instance
var game = new LK.Game({
icon: 'newGameIcon',
// Set the new game icon asset
backgroundColor: 0xE0FFD6 //Init game with very light green background
});
/****
* Game Code
****/
// Create multi bullet upgrade button instance
var multiBulletUpgradeButton = game.addChild(new MultiBulletUpgradeButton());
multiBulletUpgradeButton.x = multiBulletUpgradeButton.width / 2 + 100;
multiBulletUpgradeButton.y = 2732 / 2 - multiBulletUpgradeButton.height / 2;
// Create shield upgrade button instance
var shieldUpgradeButton = game.addChild(new ShieldUpgradeButton());
shieldUpgradeButton.x = multiBulletUpgradeButton.width / 2 + 100;
shieldUpgradeButton.y = multiBulletUpgradeButton.y + multiBulletUpgradeButton.height + 20;
var multiBulletUpgradeButton = game.addChild(new MultiBulletUpgradeButton());
multiBulletUpgradeButton.x = multiBulletUpgradeButton.width / 2 + 100;
multiBulletUpgradeButton.y = 2732 / 2 - multiBulletUpgradeButton.height / 2;
var shootButton = game.addChild(new ShootButton());
shootButton.x = 2048 - shootButton.width / 2 - 100;
shootButton.y = 2732 - shootButton.height - 100;
var thumbstick = game.addChild(new Thumbstick());
thumbstick.x = thumbstick.width / 2 + 100;
thumbstick.y = 2732 - shootButton.height - 100;
// Create shoot button instance
// Create multi bullet upgrade button instance
var shootButton = game.addChild(new ShootButton());
shootButton.x = 2048 - shootButton.width / 2 - 100;
shootButton.y = 2732 - shootButton.height - 100;
var frenzyButton = game.addChild(new FrenzyButton());
frenzyButton.x = 2048 - frenzyButton.width / 2 - 100;
frenzyButton.y = 2732 / 2;
var bombButton = game.addChild(new BombButton());
bombButton.x = frenzyButton.x;
bombButton.y = frenzyButton.y + frenzyButton.height + 20;
var frenzyButton = game.addChild(new FrenzyButton());
var magnetButton = game.addChild(new MagnetButton());
magnetButton.x = 2048 - magnetButton.width / 2 - 100;
magnetButton.y = bombButton.y + bombButton.height + 20;
frenzyButton.x = 2048 - frenzyButton.width / 2 - 100;
frenzyButton.y = 2732 / 2;
// Initialize important asset arrays, score, coins, diamonds, fire rate, enemy bullets, and explosion
var enemyBullets = [];
var bullets = [];
var enemies = [];
var coins = []; // Array to store coin instances
var diamonds = []; // Array to store diamond instances
var currentExplosion = null; // Variable to store the current explosion instance
var fireRate = 30; // Initialize fire rate to 30
var scorePopups = []; // Array to store instances of ScorePopup
var totalCoins = 0; // Initialize total coins collected to 0
var totalDiamonds = 0; // Initialize total diamonds collected to 0
var score = 0; // Initialize score to 0
// Create score display
var scoreTxt = new Text2(score.toString(), {
size: 150,
fill: "#000000"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Create coins display instance
var coinsDisplay = new CoinsDisplay();
coinsDisplay.scale.set(0.5, 0.5);
LK.gui.top.addChild(coinsDisplay);
coinsDisplay.y = scoreTxt.height;
// Create diamonds display instance
var diamondsDisplay = new DiamondsDisplay();
diamondsDisplay.scale.set(0.5, 0.5);
LK.gui.top.addChild(diamondsDisplay);
diamondsDisplay.y = coinsDisplay.y + coinsDisplay.height;
// Create LivesDisplay instance
var livesDisplay = game.addChild(new LivesDisplay());
livesDisplay.x = 2048 - (livesDisplay.width + 10 * livesDisplay.lives);
livesDisplay.y = 100;
// Create hero instance
var hero = game.addChild(new Hero());
hero.x = 2048 / 2;
hero.y = 2732 - hero.height / 2 - 100; // Position hero a bit more up from the bottom of the screen
// Game tick event
LK.on('tick', function () {
// Spawn HealthOrb every 10 seconds if hero's health is not full
if (hero.health < hero.maxHealth && LK.ticks % (10 * 60) == 0) {
var healthOrb = new HealthOrb();
healthOrb.x = Math.random() * (2048 - healthOrb.width) + healthOrb.width / 2;
healthOrb.y = -healthOrb.height;
game.addChild(healthOrb);
}
// Move enemy bullets and check for collisions with hero
for (var i = enemyBullets.length - 1; i >= 0; i--) {
enemyBullets[i].move();
if (enemyBullets[i].intersects(hero)) {
if (hero.shield > 0) {
hero.shield = Math.max(0, hero.shield - 10);
} else {
hero.health = Math.max(0, hero.health - 10);
// Reset the health regeneration timer each time the hero is damaged
LK.clearInterval(hero.regenerationTimer);
hero.regenerationTimer = LK.setInterval(function () {
if (hero.health < hero.maxHealth && hero.health > 0) {
hero.health = Math.min(hero.health + 10, hero.maxHealth);
hero.healthBar.setHealth(hero.health / hero.maxHealth);
}
}, 4000);
}
hero.healthBar.setHealth(hero.health / 100); // Update health bar
if (hero.health <= 0) {
livesDisplay.removeLife();
if (livesDisplay.lives > 0) {
hero.health = hero.maxHealth;
hero.healthBar.setHealth(hero.health / hero.maxHealth);
} else {
LK.showGameOver();
}
}
enemyBullets[i].destroy();
enemyBullets.splice(i, 1);
} else if (enemyBullets[i].y > 2732) {
enemyBullets[i].destroy();
enemyBullets.splice(i, 1);
}
}
// Handle enemy shooting
for (var j = 0; j < enemies.length; j++) {
enemies[j].shootTimer++;
if (typeof enemies[j].shoot === 'function') {
enemies[j].shoot();
}
}
// Move bullets
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].move();
if (bullets[i].y < 0) {
bullets[i].destroy();
bullets.splice(i, 1);
}
}
// Move enemies and check for collision with hero
for (var j = enemies.length - 1; j >= 0; j--) {
var directionX = Math.random() < 0.5 ? -1 : 1;
var directionY = Math.random() < 0.5 ? 0 : 1;
enemies[j].move(directionX, directionY);
if (enemies[j].y > 2732) {
// Increase score for each enemy reaching the bottom
score++;
// Update score text
scoreTxt.setText(score.toString());
enemies[j].destroy();
enemies.splice(j, 1);
} else if (hero.intersects(enemies[j])) {
hero.health -= 10; // Reduce hero health by 10 on collision
// Reset the health regeneration timer each time the hero is damaged
LK.clearInterval(hero.regenerationTimer);
hero.regenerationTimer = LK.setInterval(function () {
if (hero.health < hero.maxHealth && hero.health > 0) {
hero.health = Math.min(hero.health + 10, hero.maxHealth);
hero.healthBar.setHealth(hero.health / hero.maxHealth);
}
}, 4000);
if (hero.health <= 0) {
livesDisplay.removeLife();
if (livesDisplay.lives > 0) {
hero.health = hero.maxHealth;
hero.healthBar.setHealth(hero.health / hero.maxHealth);
} else {
LK.showGameOver();
}
}
enemies[j].destroy();
enemies.splice(j, 1);
}
}
// Check for bullet-enemy collisions and bullet-enemyBullet collisions
for (var b = bullets.length - 1; b >= 0; b--) {
for (var eb = enemyBullets.length - 1; eb >= 0; eb--) {
if (bullets[b].intersects(enemyBullets[eb])) {
bullets[b].destroy();
bullets.splice(b, 1);
enemyBullets[eb].destroy();
enemyBullets.splice(eb, 1);
break; // Exit the loop after handling collision
}
}
for (var e = enemies.length - 1; e >= 0; e--) {
if (bullets[b] && bullets[b].intersects(enemies[e])) {
// Increase score and update display
score++;
scoreTxt.setText(score.toString());
// Create and animate the '+1' text
var scorePopup = new ScorePopup();
scorePopup.x = enemies[e].x;
scorePopup.y = enemies[e].y;
game.addChild(scorePopup);
// Animate the '+1' text
scorePopups.push(scorePopup);
scorePopup.animate();
// Destroy the bullet and remove it from the array
bullets[b].destroy();
bullets.splice(b, 1);
// Spawn a coin or diamond when an enemy is destroyed
var coinDropCount = Math.floor(Math.random() * 5) + 1; // Randomly choose between 1 and 5 coins to drop
for (var coinIndex = 0; coinIndex < coinDropCount; coinIndex++) {
if (coins.length < 10) {
var newCoin = new Coin();
newCoin.x = enemies[e].x + (Math.random() - 0.5) * enemies[e].children[0].width; // Randomize coin x position slightly using the width of the enemy asset
newCoin.y = enemies[e].y;
newCoin.value = 1; // Set coin value to 1
coins.push(newCoin);
game.addChild(newCoin);
}
}
enemies[e].destroy();
enemies.splice(e, 1);
break;
}
}
}
// Move and collect diamonds
for (var d = diamonds.length - 1; d >= 0; d--) {
diamonds[d].move();
var heroDiamondCollectionArea = new Rectangle(hero.x - hero.width, hero.y - hero.height, hero.width * 3, hero.height * 3);
if (heroDiamondCollectionArea.contains(diamonds[d].x, diamonds[d].y)) {
// Increment total diamonds collected
totalDiamonds += 1;
// Update the total diamonds display
diamondsDisplay.updateDiamonds(totalDiamonds);
diamonds[d].destroy();
diamonds.splice(d, 1);
} else if (diamonds[d].y > 2732) {
// Remove diamonds that have moved off screen
diamonds[d].destroy();
diamonds.splice(d, 1);
}
}
// Move and collect HealthOrb
var healthOrbs = game.children.filter(function (child) {
return child instanceof HealthOrb;
});
for (var h = healthOrbs.length - 1; h >= 0; h--) {
healthOrbs[h].move();
if (healthOrbs[h].intersects(hero)) {
healthOrbs[h].collect();
} else if (healthOrbs[h].y > 2732) {
healthOrbs[h].destroy();
}
}
// Move and collect coins
for (var c = coins.length - 1; c >= 0; c--) {
coins[c].move();
var heroCoinCollectionArea = new Rectangle(hero.x - hero.width, hero.y - hero.height, hero.width * 3, hero.height * 3);
if (heroCoinCollectionArea.contains(coins[c].x, coins[c].y)) {
// Increment total coins collected
totalCoins += coins[c].value;
// Update the total coins display
coinsDisplay.updateCoins(totalCoins);
coins[c].destroy();
coins.splice(c, 1);
} else if (coins[c].y > 2732) {
// Remove coins that have moved off screen
coins[c].destroy();
coins.splice(c, 1);
}
}
// Spawn enemies
var enemySpawnRate = frenzyButton.isFrenzyActive ? 120 : 480; // Spawn rate is the same for both regular and fast enemies
if (LK.ticks % enemySpawnRate == 0) {
var regularEnemy = new Enemy();
regularEnemy.x = Math.random() * 1024;
regularEnemy.y = -50;
enemies.push(regularEnemy);
game.addChild(regularEnemy);
var fastEnemy = new FastEnemy();
fastEnemy.x = Math.random() * 1024 + 1024;
fastEnemy.y = -50;
enemies.push(fastEnemy);
game.addChild(fastEnemy);
}
// Check for explosion-enemy collisions
// Animate and remove the '+1' text popups
for (var p = scorePopups.length - 1; p >= 0; p--) {
scorePopups[p].animate();
if (scorePopups[p].alpha <= 0) {
scorePopups.splice(p, 1);
}
}
// Update hero
hero.update();
}); ===================================================================
--- original.js
+++ change.js
@@ -355,44 +355,13 @@
};
self.checkCollisionWithEnemy = function () {
for (var i = enemies.length - 1; i >= 0; i--) {
if (self.intersects(enemies[i])) {
- // Increase score for each enemy destroyed by the explosion
- score++;
- scoreTxt.setText(score.toString());
- // Spawn a coin or diamond when an enemy is destroyed
- var dropChance = Math.random();
- if (dropChance < 0.2) {
- // 20% chance to drop a diamond
- if (diamonds.length < 5) {
- var newDiamond = new Diamond();
- newDiamond.x = enemies[i].x + (Math.random() - 0.5) * enemies[i].children[0].width;
- newDiamond.y = enemies[i].y;
- diamonds.push(newDiamond);
- game.addChild(newDiamond);
- }
- } else {
- // 50% chance to drop a coin
- if (coins.length < 10) {
- var newCoin = new Coin();
- newCoin.x = enemies[i].x + (Math.random() - 0.5) * enemies[i].children[0].width;
- newCoin.y = enemies[i].y;
- newCoin.value = 1;
- coins.push(newCoin);
- game.addChild(newCoin);
- }
- }
+ // Instantly destroy the enemy
enemies[i].destroy();
enemies.splice(i, 1);
}
}
- // Check for enemy bullet-explosion collisions
- for (var j = enemyBullets.length - 1; j >= 0; j--) {
- if (self.intersects(enemyBullets[j])) {
- enemyBullets[j].destroy();
- enemyBullets.splice(j, 1);
- }
- }
};
});
// BombButton class
var BombButton = Container.expand(function () {
Coin. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Fighter jet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Has rocket behind to boost movement to down faster
Explosion. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Medkit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.