User prompt
debug zoin pickup
User prompt
debug
User prompt
zoins are not picking up on touch please fix
User prompt
need a break between player death and game reset to use zoins for permanent life max, fire speed, and damage per bullet upgrades ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'isDead')' in or related to this line: 'if (zombie.isDead) {' Line Number: 645
User prompt
player should not receive gameover on death they should be restarted automatically
User prompt
align wave counter and score counter equidistant from sides of view point and eachother
User prompt
stretch healthbar to fill width of viewport - 10%
User prompt
make healthbar a background element
User prompt
set healthbar below wave counter
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'isDead')' in or related to this line: 'if (zombie.isDead) {' Line Number: 644
User prompt
center healthbar at top center of viewport
User prompt
increase healthbar width by 15%
User prompt
increase healthbar by 12.5%
User prompt
increase healthbar length 25%
User prompt
increase healthbar height 25%
User prompt
make healthbar 3x taller 4x longer
User prompt
set health bar display to top left corner of viewport
User prompt
change health display from text to a % based visual bar
User prompt
remove zoins from auto selfdestroy
User prompt
set initial player max health to 1
User prompt
set initial player life value to 1
User prompt
on player death reset all non-permanent variables, set wave to 1, reset score to 0, initialize powerups
User prompt
replace game over with auto reset all non-permanent variables initialized
User prompt
Zoins cannot be auto collected and must be picked up manually
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var AmmoBox = Container.expand(function () {
var self = Container.call(this);
var ammoGraphics = self.attachAsset('ammoBox', {
anchorX: 0.5,
anchorY: 0.5
});
self.ammoAmount = 50;
self.spawnTime = LK.ticks;
self.lifespan = 600; // 10 seconds at 60fps
self.update = function () {
self.rotation += 0.02;
};
return self;
});
var AmmoPowerUp = Container.expand(function () {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset('ammoPowerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.ammoAmount = 100;
self.spawnTime = LK.ticks;
self.lifespan = 600; // 10 seconds at 60fps
self.update = function () {
self.rotation += 0.02;
// Add pulsing effect
self.scaleX = 1 + Math.sin(LK.ticks * 0.1) * 0.1;
self.scaleY = 1 + Math.sin(LK.ticks * 0.1) * 0.1;
};
return self;
});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 20;
self.damage = 10;
self.vx = 0;
self.vy = 0;
self.piercing = false;
self.killHit = false;
self.maxDistance = 800;
self.travelDistance = 0;
self.update = function () {
var moveX = self.vx;
var moveY = self.vy;
var distance = Math.sqrt(moveX * moveX + moveY * moveY);
self.travelDistance += distance;
self.x += moveX;
self.y += moveY;
};
return self;
});
var HealthPack = Container.expand(function () {
var self = Container.call(this);
var healthGraphics = self.attachAsset('healthPack', {
anchorX: 0.5,
anchorY: 0.5
});
self.healAmount = 30;
self.spawnTime = LK.ticks;
self.lifespan = 600; // 10 seconds at 60fps
self.update = function () {
self.rotation += 0.02;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.maxHealth = 100;
self.fireRate = 10;
self.fireCooldown = 0;
self.moveSpeed = 5;
self.invulnerable = 0;
self.takeDamage = function (amount) {
if (self.invulnerable > 0) return;
self.health -= amount;
self.invulnerable = 60;
LK.getSound('playerHurt').play();
LK.effects.flashObject(self, 0xFF0000, 500);
if (self.health <= 0) {
self.health = 0;
return true;
}
return false;
};
self.heal = function (amount) {
self.health = Math.min(self.health + amount, self.maxHealth);
};
self.update = function () {
if (self.fireCooldown > 0) self.fireCooldown--;
if (self.invulnerable > 0) {
self.invulnerable--;
self.alpha = Math.floor(self.invulnerable / 5) % 2 ? 0.5 : 1;
}
};
return self;
});
var TripleShot = Container.expand(function () {
var self = Container.call(this);
var tripleShotGraphics = self.attachAsset('tripleShot', {
anchorX: 0.5,
anchorY: 0.5
});
self.spawnTime = LK.ticks;
self.lifespan = 600; // 10 seconds at 60fps
self.update = function () {
self.rotation += 0.02;
// Add pulsing effect
self.scaleX = 1 + Math.sin(LK.ticks * 0.1) * 0.1;
self.scaleY = 1 + Math.sin(LK.ticks * 0.1) * 0.1;
};
return self;
});
var Zoin = Container.expand(function () {
var self = Container.call(this);
var zoinGraphics = self.attachAsset('zoin', {
anchorX: 0.5,
anchorY: 0.5
});
self.spawnTime = LK.ticks;
self.lifespan = 600; // 10 seconds at 60fps
self.update = function () {
self.rotation += 0.05;
// Add floating effect
self.y += Math.sin(LK.ticks * 0.1) * 0.3;
};
return self;
});
var Zombie = Container.expand(function () {
var self = Container.call(this);
var zombieGraphics = self.attachAsset('zombie', {
anchorX: 0.5,
anchorY: 0.5
});
var baseSpeed = 1.5;
var variation = baseSpeed * 0.25; // 25% variation
self.speed = baseSpeed + (Math.random() - 0.5) * 2 * variation; // Random between baseSpeed ± 25%
self.health = 20;
self.maxHealth = 20; // Store base health for wave scaling
self.damage = 10;
self.baseDamage = 10; // Store base damage for wave scaling
self.attackCooldown = 0;
self.isDead = false;
self.takeDamage = function (amount) {
if (self.isDead) return false;
self.health -= amount;
if (self.health <= 0) {
self.isDead = true;
LK.getSound('zombieHit').play();
return true;
}
zombieGraphics.tint = 0xFF0000;
tween(zombieGraphics, {
tint: 0xFFFFFF
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
zombieGraphics.tint = 0xFFFFFF;
}
});
return false;
};
self.update = function () {
if (self.isDead) return;
if (self.attackCooldown > 0) self.attackCooldown--;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
var player;
var zombies = [];
var bullets = [];
var pickups = [];
var wave = 1;
var zombiesPerWave = 5;
var zombiesSpawned = 0;
var zombiesKilled = 0;
var spawnTimer = 0;
var scoreMultiplier = 1;
var killStreak = 0;
var powerAmmo = 0;
var lastPowerUpSpawn = 0;
var killsSinceLastPowerUp = 0;
var powerUpList = ['ammoPowerUp', 'healthPack', 'ammoBox', 'tripleShot'];
var lastPowerUpType = null;
var hasTripleShot = false;
var tripleShotLevel = 0;
var maxTripleShotLevel = 5;
var zoins = storage.zoins || 0; // Persistent coin count
var moveControl;
var moveStick;
var isDraggingMove = false;
// UI Elements
var waveText = new Text2('Wave: 1', {
size: 80,
fill: 0xFFFFFF
});
waveText.anchor.set(0.5, 0);
LK.gui.top.addChild(waveText);
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(1, 0);
scoreText.x = -20;
LK.gui.topRight.addChild(scoreText);
// Health bar background
var healthBarBg = LK.getAsset('ammoBox', {
width: 1125,
height: 84,
anchorX: 0,
anchorY: 0
});
healthBarBg.tint = 0x444444;
healthBarBg.x = 120;
healthBarBg.y = 20;
LK.gui.topLeft.addChild(healthBarBg);
// Health bar fill
var healthBarFill = LK.getAsset('ammoBox', {
width: 1125,
height: 84,
anchorX: 0,
anchorY: 0
});
healthBarFill.tint = 0xFF0000;
healthBarFill.x = 120;
healthBarFill.y = 20;
LK.gui.topLeft.addChild(healthBarFill);
var powerAmmoText = new Text2('Power Ammo: 0', {
size: 45,
fill: 0xFFD700
});
powerAmmoText.anchor.set(1, 1);
powerAmmoText.x = -20;
powerAmmoText.y = -80;
LK.gui.bottomRight.addChild(powerAmmoText);
var zoinText = new Text2('Zoins: ' + zoins, {
size: 45,
fill: 0xFFD700
});
zoinText.anchor.set(1, 1);
zoinText.x = -20;
zoinText.y = -140;
LK.gui.bottomRight.addChild(zoinText);
// Initialize player
player = game.addChild(new Player());
player.health = 1;
player.maxHealth = 1;
player.x = 1024;
player.y = 1366;
// Initialize controls
moveControl = LK.getAsset('moveControl', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
moveControl.x = 300;
moveControl.y = 2432;
game.addChild(moveControl);
moveStick = LK.getAsset('moveControl', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.3,
scaleY: 0.3,
alpha: 0
});
moveStick.x = moveControl.x;
moveStick.y = moveControl.y;
game.addChild(moveStick);
// Aim control removed - using automatic targeting
// Helper functions
function resetGame() {
// Reset wave and zombies
wave = 1;
zombiesPerWave = 5;
zombiesSpawned = 0;
zombiesKilled = 0;
spawnTimer = 0;
// Reset score and multipliers
LK.setScore(0);
scoreMultiplier = 1;
killStreak = 0;
killsSinceLastPowerUp = 0;
lastPowerUpSpawn = 0;
lastPowerUpType = null;
// Reset powerups
powerAmmo = 0;
hasTripleShot = false;
tripleShotLevel = 0;
// Reset player state
player.health = player.maxHealth;
player.fireCooldown = 0;
player.invulnerable = 0;
player.alpha = 1;
// Clear all game objects
for (var i = zombies.length - 1; i >= 0; i--) {
zombies[i].destroy();
}
zombies = [];
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].destroy();
}
bullets = [];
for (var i = pickups.length - 1; i >= 0; i--) {
pickups[i].destroy();
}
pickups = [];
// Update UI
waveText.setText('Wave: ' + wave);
scoreText.setText('Score: ' + LK.getScore());
// Update health bar
var healthPercent = player.health / player.maxHealth;
healthBarFill.width = 1125 * healthPercent;
powerAmmoText.setText('Power Ammo: ' + powerAmmo);
powerAmmoText.visible = false;
// Reset player position
player.x = 1024;
player.y = 1366;
}
function spawnZombie() {
var zombie = new Zombie();
var side = Math.floor(Math.random() * 4);
switch (side) {
case 0:
// Top
zombie.x = Math.random() * 2048;
zombie.y = -50;
break;
case 1:
// Right
zombie.x = 2098;
zombie.y = Math.random() * 2732;
break;
case 2:
// Bottom
zombie.x = Math.random() * 2048;
zombie.y = 2782;
break;
case 3:
// Left
zombie.x = -50;
zombie.y = Math.random() * 2732;
break;
}
zombie.speed *= 1 + wave * 0.1;
zombie.health += wave * 5;
zombie.damage += Math.floor(wave * 2); // Increase damage by 2 per wave
zombie.scaleX = 0;
zombie.scaleY = 0;
zombie.alpha = 0;
zombies.push(zombie);
game.addChild(zombie);
zombiesSpawned++;
// Animate zombie spawn
tween(zombie, {
scaleX: 1,
scaleY: 1,
alpha: 1
}, {
duration: 300,
easing: tween.easeOut
});
}
function spawnPickup(x, y) {
var shouldSpawn = false;
var pickup;
var powerUpType;
// Force powerup spawn if 50+ kills without powerup
if (killsSinceLastPowerUp >= 50) {
shouldSpawn = true;
// Create available powerup list excluding last spawned type
var availablePowerUps = powerUpList.slice();
if (lastPowerUpType !== null) {
var index = availablePowerUps.indexOf(lastPowerUpType);
if (index > -1) {
availablePowerUps.splice(index, 1);
}
}
powerUpType = availablePowerUps[Math.floor(Math.random() * availablePowerUps.length)];
if (powerUpType === 'ammoPowerUp') {
pickup = new AmmoPowerUp();
} else if (powerUpType === 'ammoBox') {
pickup = new AmmoBox();
} else if (powerUpType === 'tripleShot') {
pickup = new TripleShot();
} else {
pickup = new HealthPack();
}
lastPowerUpType = powerUpType;
killsSinceLastPowerUp = 0;
if (pickup instanceof AmmoPowerUp) {
lastPowerUpSpawn = LK.ticks;
}
} else if (Math.random() < 0.3) {
shouldSpawn = true;
var rand = Math.random();
if (rand < 0.1 && LK.ticks - lastPowerUpSpawn > 1800) {
pickup = new AmmoPowerUp();
powerUpType = 'ammoPowerUp';
lastPowerUpSpawn = LK.ticks;
killsSinceLastPowerUp = 0;
} else if (rand < 0.15 && LK.ticks - lastPowerUpSpawn > 1800) {
pickup = new TripleShot();
powerUpType = 'tripleShot';
lastPowerUpSpawn = LK.ticks;
killsSinceLastPowerUp = 0;
} else if (rand < 0.6) {
pickup = new AmmoBox();
powerUpType = 'ammoBox';
} else {
pickup = new HealthPack();
powerUpType = 'healthPack';
}
lastPowerUpType = powerUpType;
}
if (shouldSpawn) {
pickup.x = x;
pickup.y = y;
pickup.scaleX = 0;
pickup.scaleY = 0;
pickups.push(pickup);
game.addChild(pickup);
// Animate pickup spawn with bounce effect
tween(pickup, {
scaleX: 1,
scaleY: 1
}, {
duration: 400,
easing: tween.elasticOut
});
}
}
function fireBullet() {
var fireRate = powerAmmo > 0 ? 80 : 10; // Much slower fire rate for power ammo (75% reduction)
if (player.fireCooldown > 0) return;
// Find closest zombie in range
var closestZombie = null;
var closestDistance = 500; // Maximum firing range
for (var i = 0; i < zombies.length; i++) {
var zombie = zombies[i];
if (zombie.isDead) continue;
var dx = zombie.x - player.x;
var dy = zombie.y - player.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < closestDistance) {
closestDistance = distance;
closestZombie = zombie;
}
}
// Only fire if there's a zombie in range
if (!closestZombie) return;
var dx = closestZombie.x - player.x;
var dy = closestZombie.y - player.y;
var angle = Math.atan2(dy, dx);
player.rotation = angle; // Rotate player to face target
// Create bullets based on triple shot level
var bulletCount = hasTripleShot ? 1 + tripleShotLevel * 2 : 1;
var angleOffsets = [0]; // Always include center bullet
if (hasTripleShot) {
// Add bullets in pairs at increasing angles
for (var level = 1; level <= tripleShotLevel; level++) {
var angleOffset = level * 10 * Math.PI / 180;
angleOffsets.push(-angleOffset); // Left bullet
angleOffsets.push(angleOffset); // Right bullet
}
}
for (var b = 0; b < bulletCount; b++) {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
var bulletAngle = angle + angleOffsets[b];
bullet.vx = Math.cos(bulletAngle) * bullet.speed;
bullet.vy = Math.sin(bulletAngle) * bullet.speed;
bullet.rotation = bulletAngle;
if (powerAmmo > 0) {
bullet.piercing = true;
bullet.killHit = true;
bullet.maxDistance = 1600; // 2x distance
bullet.damage = 1000; // 1 hit kill
if (b === 0) powerAmmo--; // Only consume one power ammo per shot
// Visual effect for power bullet
tween(bullet, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 100
});
bullet.tint = 0xFFD700;
} else {
bullet.maxDistance = 800;
}
bullets.push(bullet);
game.addChild(bullet);
}
player.fireCooldown = fireRate;
LK.getSound('shoot').play();
}
// Event handlers
game.down = function (x, y, obj) {
isDraggingMove = true;
// Move moveControl to click position
moveControl.x = x;
moveControl.y = y;
// Move moveStick to the same position (center of control)
moveStick.x = x;
moveStick.y = y;
// Show control stick with smooth animation
tween(moveControl, {
alpha: 0.3
}, {
duration: 200,
easing: tween.easeOut
});
tween(moveStick, {
alpha: 0.6
}, {
duration: 200,
easing: tween.easeOut
});
};
game.move = function (x, y, obj) {
if (isDraggingMove) {
moveStick.x = Math.max(moveControl.x - 150, Math.min(moveControl.x + 150, x));
moveStick.y = Math.max(moveControl.y - 150, Math.min(moveControl.y + 150, y));
}
};
game.up = function (x, y, obj) {
if (isDraggingMove) {
isDraggingMove = false;
moveStick.x = moveControl.x;
moveStick.y = moveControl.y;
// Hide control stick with smooth animation
tween(moveControl, {
alpha: 0
}, {
duration: 150,
easing: tween.easeIn
});
tween(moveStick, {
alpha: 0
}, {
duration: 150,
easing: tween.easeIn
});
}
};
// Main game loop
game.update = function () {
// Player movement
if (isDraggingMove) {
var moveX = (moveStick.x - moveControl.x) / 150;
var moveY = (moveStick.y - moveControl.y) / 150;
player.x += moveX * player.moveSpeed;
player.y += moveY * player.moveSpeed;
player.x = Math.max(40, Math.min(2008, player.x));
player.y = Math.max(40, Math.min(2692, player.y));
}
// Auto-fire (fireBullet now handles range checking internally)
fireBullet();
// Spawn zombies
if (zombiesSpawned < zombiesPerWave) {
spawnTimer++;
if (spawnTimer > 60) {
spawnZombie();
spawnTimer = 0;
}
} else if (zombies.length === 0) {
// Next wave
wave++;
zombiesPerWave = 5 + wave * 2;
zombiesSpawned = 0;
zombiesKilled = 0;
waveText.setText('Wave: ' + wave);
}
// Update zombies
for (var i = zombies.length - 1; i >= 0; i--) {
var zombie = zombies[i];
// Skip dead zombies
if (zombie.isDead) continue;
// Move towards player
var dx = player.x - zombie.x;
var dy = player.y - zombie.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 0) {
zombie.x += dx / dist * zombie.speed;
zombie.y += dy / dist * zombie.speed;
zombie.rotation = Math.atan2(dy, dx);
}
// Check collision with player
if (zombie.intersects(player) && zombie.attackCooldown === 0) {
if (player.takeDamage(zombie.damage)) {
resetGame();
LK.showGameOver();
}
zombie.attackCooldown = 60;
killStreak = 0;
scoreMultiplier = 1;
}
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
// Check if bullet is off screen or traveled max distance
if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782 || bullet.travelDistance > bullet.maxDistance) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check collision with zombies
var bulletDestroyed = false;
for (var j = zombies.length - 1; j >= 0; j--) {
var zombie = zombies[j];
if (zombie.isDead) continue;
if (bullet.intersects(zombie)) {
if (zombie.takeDamage(bullet.damage)) {
// Zombie died - add death animation
spawnPickup(zombie.x, zombie.y);
// 10% chance to drop a Zoin
if (Math.random() < 0.1) {
var zoin = new Zoin();
zoin.x = zombie.x;
zoin.y = zombie.y;
zoin.scaleX = 0;
zoin.scaleY = 0;
pickups.push(zoin);
game.addChild(zoin);
// Animate zoin spawn
tween(zoin, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeOut
});
}
var zombieToRemove = zombie; // Capture zombie reference for closure
var zombieIndex = j; // Capture index for closure
tween(zombie, {
scaleX: 0,
scaleY: 0,
alpha: 0,
rotation: zombie.rotation + Math.PI
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
zombieToRemove.destroy();
// Remove from zombies array after animation
var currentIndex = zombies.indexOf(zombieToRemove);
if (currentIndex !== -1) {
zombies.splice(currentIndex, 1);
}
}
});
zombiesKilled++;
killStreak++;
killsSinceLastPowerUp++;
if (killStreak % 5 === 0) {
scoreMultiplier = Math.min(scoreMultiplier + 1, 5);
}
LK.setScore(LK.getScore() + 10 * scoreMultiplier);
scoreText.setText('Score: ' + LK.getScore());
}
if (!bullet.piercing) {
bullet.destroy();
bullets.splice(i, 1);
bulletDestroyed = true;
break;
}
}
}
if (bulletDestroyed) continue;
}
// Update pickups
for (var i = pickups.length - 1; i >= 0; i--) {
var pickup = pickups[i];
// Check if pickup has expired (10 seconds) - auto pickup regardless of distance (except Zoins)
var age = LK.ticks - pickup.spawnTime;
if (age >= pickup.lifespan) {
// Zoins cannot be auto-collected and must be picked up manually - skip auto destruction
if (pickup instanceof Zoin) {
continue;
}
// Auto pickup other items when expiring
if (pickup instanceof HealthPack) {
player.heal(pickup.healAmount);
} else if (pickup instanceof AmmoPowerUp) {
powerAmmo += pickup.ammoAmount;
LK.effects.flashObject(player, 0xFFD700, 500);
} else if (pickup instanceof TripleShot) {
if (!hasTripleShot) {
hasTripleShot = true;
tripleShotLevel = 1;
} else if (tripleShotLevel < maxTripleShotLevel) {
tripleShotLevel++;
}
LK.effects.flashObject(player, 0x00FF00, 500);
}
LK.getSound('pickup').play();
// Animate pickup collection
tween(pickup, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
pickup.destroy();
}
});
pickups.splice(i, 1);
continue;
}
// Manual pickup when touching
if (pickup.intersects(player)) {
if (pickup instanceof HealthPack) {
player.heal(pickup.healAmount);
} else if (pickup instanceof AmmoPowerUp) {
powerAmmo += pickup.ammoAmount;
LK.effects.flashObject(player, 0xFFD700, 500);
} else if (pickup instanceof TripleShot) {
if (!hasTripleShot) {
hasTripleShot = true;
tripleShotLevel = 1;
} else if (tripleShotLevel < maxTripleShotLevel) {
tripleShotLevel++;
}
LK.effects.flashObject(player, 0x00FF00, 500);
} else if (pickup instanceof Zoin) {
zoins++;
storage.zoins = zoins; // Persist zoin count
zoinText.setText('Zoins: ' + zoins);
LK.effects.flashObject(player, 0xFFD700, 300);
}
LK.getSound('pickup').play();
// Animate pickup collection
tween(pickup, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
pickup.destroy();
}
});
pickups.splice(i, 1);
}
}
// Update UI
// Update health bar
var healthPercent = player.health / player.maxHealth;
healthBarFill.width = 1125 * healthPercent;
powerAmmoText.setText('Power Ammo: ' + powerAmmo);
// Hide/show power ammo counter based on availability
powerAmmoText.visible = powerAmmo > 0;
// Despawn distant pickups
for (var i = pickups.length - 1; i >= 0; i--) {
var pickup = pickups[i];
var dx = player.x - pickup.x;
var dy = player.y - pickup.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 2000) {
pickup.destroy();
pickups.splice(i, 1);
}
}
};
// Start music
LK.playMusic('battleMusic'); ===================================================================
--- original.js
+++ change.js
@@ -233,10 +233,10 @@
scoreText.x = -20;
LK.gui.topRight.addChild(scoreText);
// Health bar background
var healthBarBg = LK.getAsset('ammoBox', {
- width: 1000,
- height: 75,
+ width: 1125,
+ height: 84,
anchorX: 0,
anchorY: 0
});
healthBarBg.tint = 0x444444;
@@ -244,10 +244,10 @@
healthBarBg.y = 20;
LK.gui.topLeft.addChild(healthBarBg);
// Health bar fill
var healthBarFill = LK.getAsset('ammoBox', {
- width: 1000,
- height: 75,
+ width: 1125,
+ height: 84,
anchorX: 0,
anchorY: 0
});
healthBarFill.tint = 0xFF0000;
@@ -337,9 +337,9 @@
waveText.setText('Wave: ' + wave);
scoreText.setText('Score: ' + LK.getScore());
// Update health bar
var healthPercent = player.health / player.maxHealth;
- healthBarFill.width = 1000 * healthPercent;
+ healthBarFill.width = 1125 * healthPercent;
powerAmmoText.setText('Power Ammo: ' + powerAmmo);
powerAmmoText.visible = false;
// Reset player position
player.x = 1024;
@@ -779,9 +779,9 @@
}
// Update UI
// Update health bar
var healthPercent = player.health / player.maxHealth;
- healthBarFill.width = 1000 * healthPercent;
+ healthBarFill.width = 1125 * healthPercent;
powerAmmoText.setText('Power Ammo: ' + powerAmmo);
// Hide/show power ammo counter based on availability
powerAmmoText.visible = powerAmmo > 0;
// Despawn distant pickups