User prompt
ask password for admin when player click on admin mode button in main menu
User prompt
ask password for admin when player click on admin mode button
User prompt
add a button bottom left corner named admin when you start as admin mode, and add a menu in there for features
User prompt
make spaces beteen start game button and admin mode button
User prompt
make spaces around title, start game button, admin mode and tutorial text
User prompt
make more spaces around them
User prompt
make the admin mode button similar size as start game button, and make some spaces around start game button and tutorial text
User prompt
add an admin mode button below the start game button
User prompt
fix it
User prompt
add main menu music
User prompt
make the tutoraial text bigger
User prompt
add outline to texts to make them visible. and change the start game text's color to white
User prompt
make the text's color Green and change the font style to futura
User prompt
add a background image asset for the main menu
User prompt
lower the position of tutorial text
User prompt
make the start game button bigger
User prompt
change the game name's to Mango Shooter
User prompt
add a main menu before the main game
User prompt
add a sound for the enemy damage sound
User prompt
no just add the music to the background
User prompt
fix it
User prompt
add sound to the main game background
User prompt
I still cant hear it
User prompt
add bgMusic to the main game
User prompt
add music to main game
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 15;
self.damage = 5;
self.update = function () {
self.y -= self.speed;
};
return self;
});
var GeorgeFloyd = Container.expand(function () {
var self = Container.call(this);
var georgeFloydGraphics = self.attachAsset('georgeFloyd', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 5000;
self.health = self.maxHealth;
self.speed = 0.8;
self.coinValue = 20;
self.lastHealth = self.health;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health < 0) self.health = 0;
};
self.update = function () {
self.y += self.speed;
// Flash red when taking damage
if (self.lastHealth > self.health) {
LK.effects.flashObject(self, 0xff0000, 300);
}
self.lastHealth = self.health;
};
return self;
});
var Mango = Container.expand(function () {
var self = Container.call(this);
var mangoGraphics = self.attachAsset('mango', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 100;
self.health = self.maxHealth;
self.speed = 2;
self.coinValue = 1;
self.lastHealth = self.health;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health < 0) self.health = 0;
};
self.update = function () {
self.y += self.speed;
// Flash red when taking damage
if (self.lastHealth > self.health) {
LK.effects.flashObject(self, 0xff0000, 300);
}
self.lastHealth = self.health;
};
return self;
});
var Mustard = Container.expand(function () {
var self = Container.call(this);
var mustardGraphics = self.attachAsset('mustard', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 200;
self.health = self.maxHealth;
self.speed = 1.5;
self.coinValue = 2;
self.lastHealth = self.health;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health < 0) self.health = 0;
};
self.update = function () {
self.y += self.speed;
// Flash red when taking damage
if (self.lastHealth > self.health) {
LK.effects.flashObject(self, 0xff0000, 300);
}
self.lastHealth = self.health;
};
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;
return self;
});
var SigmaBlud = Container.expand(function () {
var self = Container.call(this);
var sigmaBludGraphics = self.attachAsset('sigmaBlud', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 10000;
self.health = self.maxHealth;
self.speed = 0.5;
self.coinValue = 50;
self.lastHealth = self.health;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health < 0) self.health = 0;
};
self.update = function () {
self.y += self.speed;
// Flash red when taking damage
if (self.lastHealth > self.health) {
LK.effects.flashObject(self, 0xff0000, 300);
}
self.lastHealth = self.health;
};
return self;
});
var SixSevenKid = Container.expand(function () {
var self = Container.call(this);
var kidGraphics = self.attachAsset('sixSevenKid', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 500;
self.health = self.maxHealth;
self.speed = 1;
self.coinValue = 5;
self.lastHealth = self.health;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health < 0) self.health = 0;
};
self.update = function () {
self.y += self.speed;
// Flash red when taking damage
if (self.lastHealth > self.health) {
LK.effects.flashObject(self, 0xff0000, 300);
}
self.lastHealth = self.health;
};
return self;
});
var TurretBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('turretBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 25; // Much faster bullets for quicker targeting
self.damage = 5;
self.turretLevel = 1; // Default level
self.velocityX = 0;
self.velocityY = 0;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x8B0000
});
/****
* Game Code
****/
// Game variables
var player;
var bullets = [];
var enemies = [];
var coins = 0;
var playerHealth = 100;
var gameStarted = false;
var showMainMenu = true;
var enemySpawnTimer = 0;
var enemySpawnRate = 120; // frames between spawns
var difficultyTimer = 0;
var isMouseDown = false;
var mouseX = 0;
var mouseY = 0;
var shootCooldown = 0;
var shootRate = 10; // frames between shots when holding
var currentWave = 1;
var enemiesInWave = 8; // Start with 8 enemies per wave
var enemiesSpawned = 0;
var enemiesKilled = 0;
var waveInProgress = false;
var waveStartDelay = 180; // 3 seconds between waves
var waveDelayTimer = 0;
var upgrade1Cost = 1;
var upgrade2Cost = 3;
var upgrade1Level = 0;
var upgrade2Level = 0;
// Turret damage and cost progression tables
var turretDamageTable = [0, 5, 10, 15, 20, 25, 30, 40, 50, 100, 200];
var turret1CostTable = [0, 1, 1, 2, 5, 10, 50, 50, 60, 200, 250];
var turret2CostTable = [0, 3, 4, 5, 10, 20, 50, 60, 70, 250, 300];
var turrets1 = [];
var turrets2 = [];
var turretBullets = [];
var turretShootTimer1 = 0;
var turretShootTimer2 = 0;
var turretShootRate = 15; // Faster turret shooting rate
// Create city background
var cityBuildings = [];
for (var i = 0; i < 12; i++) {
var buildingType = Math.floor(Math.random() * 3) + 1;
var building = LK.getAsset('cityBuilding' + buildingType, {
anchorX: 0.5,
anchorY: 1
});
building.x = i * 180 + 100;
building.y = 2732;
building.alpha = 0.3;
game.addChild(building);
cityBuildings.push(building);
}
;
// Main Menu Background
var menuBackground = LK.getAsset('menuBackground', {
anchorX: 0.5,
anchorY: 0.5
});
menuBackground.x = 2048 / 2;
menuBackground.y = 2732 / 2;
menuBackground.alpha = 0.8;
game.addChild(menuBackground);
// Start menu music
LK.playMusic('menuMusic', {
loop: true
});
// Main Menu Elements
var menuTitle = new Text2('MANGO SHOOTER', {
size: 120,
fill: 0x00FF00,
font: "Futura",
stroke: 0x000000,
strokeThickness: 4
});
menuTitle.anchor.set(0.5, 0.5);
menuTitle.x = 2048 / 2;
menuTitle.y = 2732 / 2 - 200;
game.addChild(menuTitle);
var startButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
startButton.x = 2048 / 2;
startButton.y = 2732 / 2 - 100;
startButton.tint = 0x4CAF50;
game.addChild(startButton);
var startButtonText = new Text2('START GAME', {
size: 40,
fill: 0xFFFFFF,
font: "Futura",
stroke: 0x000000,
strokeThickness: 3
});
startButtonText.anchor.set(0.5, 0.5);
startButtonText.x = startButton.x;
startButtonText.y = startButton.y;
game.addChild(startButtonText);
var adminButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
adminButton.x = 2048 / 2;
adminButton.y = 2732 / 2 + 80;
adminButton.tint = 0xFF4444;
game.addChild(adminButton);
var adminButtonText = new Text2('ADMIN MODE', {
size: 40,
fill: 0xFFFFFF,
font: "Futura",
stroke: 0x000000,
strokeThickness: 3
});
adminButtonText.anchor.set(0.5, 0.5);
adminButtonText.x = adminButton.x;
adminButtonText.y = adminButton.y;
game.addChild(adminButtonText);
var instructionText = new Text2('Tap to shoot enemies\nUpgrade turrets with coins\nDefend your city!', {
size: 80,
fill: 0x00FF00,
font: "Futura",
stroke: 0x000000,
strokeThickness: 3
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 2048 / 2;
instructionText.y = 2732 / 2 + 350;
game.addChild(instructionText);
// Create player
player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 150;
player.visible = false;
// UI Elements
var coinText = new Text2('Coins: 0', {
size: 60,
fill: 0x00FF00,
font: "Futura",
stroke: 0x000000,
strokeThickness: 3
});
coinText.anchor.set(0, 0);
coinText.x = 150;
coinText.y = 50;
coinText.visible = false;
LK.gui.topLeft.addChild(coinText);
var healthText = new Text2('Health: 100', {
size: 60,
fill: 0x00FF00,
font: "Futura",
stroke: 0x000000,
strokeThickness: 3
});
healthText.anchor.set(1, 0);
healthText.visible = false;
LK.gui.topRight.addChild(healthText);
var waveText = new Text2('Wave: 1', {
size: 60,
fill: 0x00FF00,
font: "Futura",
stroke: 0x000000,
strokeThickness: 3
});
waveText.anchor.set(0.5, 0);
waveText.visible = false;
LK.gui.top.addChild(waveText);
// Create upgrade buttons
var upgrade1Button = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
upgrade1Button.x = player.x - 200;
upgrade1Button.y = player.y;
upgrade1Button.visible = false;
game.addChild(upgrade1Button);
var upgrade2Button = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
upgrade2Button.x = player.x + 200;
upgrade2Button.y = player.y;
upgrade2Button.visible = false;
game.addChild(upgrade2Button);
// Add upgrade button labels
var upgrade1Text = new Text2('Upgrade 1\nCost: ' + upgrade1Cost, {
size: 30,
fill: 0x00FF00,
font: "Futura",
stroke: 0x000000,
strokeThickness: 2
});
upgrade1Text.anchor.set(0.5, 0.5);
upgrade1Text.x = upgrade1Button.x;
upgrade1Text.y = upgrade1Button.y;
upgrade1Text.visible = false;
game.addChild(upgrade1Text);
var upgrade2Text = new Text2('Upgrade 2\nCost: ' + upgrade2Cost, {
size: 30,
fill: 0x00FF00,
font: "Futura",
stroke: 0x000000,
strokeThickness: 2
});
upgrade2Text.anchor.set(0.5, 0.5);
upgrade2Text.x = upgrade2Button.x;
upgrade2Text.y = upgrade2Button.y;
upgrade2Text.visible = false;
game.addChild(upgrade2Text);
// Game functions
function spawnEnemy() {
var enemy;
var spawnX = Math.random() * (2048 - 100) + 50;
if (currentWave >= 20) {
// From wave 20 onwards: include Sigma Blud in spawn pool
var rand = Math.random();
if (rand < 0.25) {
enemy = new Mango();
} else if (rand < 0.45) {
enemy = new Mustard();
} else if (rand < 0.65) {
enemy = new SixSevenKid();
} else if (rand < 0.85) {
enemy = new GeorgeFloyd();
} else {
enemy = new SigmaBlud();
}
} else if (currentWave >= 10) {
// From wave 10-19: include George Floyd in spawn pool
var rand = Math.random();
if (rand < 0.35) {
enemy = new Mango();
} else if (rand < 0.6) {
enemy = new Mustard();
} else if (rand < 0.85) {
enemy = new SixSevenKid();
} else {
enemy = new GeorgeFloyd();
}
} else if (currentWave >= 5) {
// From wave 5-9: 50% Mango, 25% Mustard, 25% 6 7 Kid
var rand = Math.random();
if (rand < 0.5) {
enemy = new Mango();
} else if (rand < 0.75) {
enemy = new Mustard();
} else {
enemy = new SixSevenKid();
}
} else {
// Before wave 5: 70% chance for Mango, 30% chance for Mustard
if (Math.random() < 0.7) {
enemy = new Mango();
} else {
enemy = new Mustard();
}
}
enemy.x = spawnX;
enemy.y = -50;
enemy.lastY = enemy.y;
enemies.push(enemy);
game.addChild(enemy);
enemiesSpawned++;
}
function startNewWave() {
currentWave++;
enemiesInWave = enemiesInWave + 2; // Increase enemies per wave by 2
enemiesSpawned = 0;
enemiesKilled = 0;
waveInProgress = true;
waveDelayTimer = 0;
waveText.setText('Wave: ' + currentWave);
// Make waves progressively harder
enemySpawnRate = Math.max(30, enemySpawnRate - 5);
}
function fireBullet(targetX, targetY) {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y - 40;
bullet.lastY = bullet.y;
// Calculate angle to target at time of firing
var deltaX = targetX - bullet.x;
var deltaY = targetY - bullet.y;
var angle = Math.atan2(deltaY, deltaX);
// Set bullet direction
var velocityX = Math.cos(angle) * bullet.speed;
var velocityY = Math.sin(angle) * bullet.speed;
// Override update to use fixed velocity calculated at firing time
bullet.update = function () {
bullet.x += velocityX;
bullet.y += velocityY;
};
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
function fireTurretBullet(turretX, turretY, targetEnemy, turretLevel) {
if (!targetEnemy) return;
var bullet = new TurretBullet();
bullet.x = turretX;
bullet.y = turretY;
bullet.lastY = bullet.y;
bullet.turretLevel = turretLevel || 1;
bullet.damage = turretDamageTable[bullet.turretLevel];
// Predictive aiming - calculate where enemy will be when bullet arrives
var distance = Math.sqrt(Math.pow(targetEnemy.x - bullet.x, 2) + Math.pow(targetEnemy.y - bullet.y, 2));
var timeToHit = distance / bullet.speed;
// Predict enemy position based on current velocity
var predictedX = targetEnemy.x;
var predictedY = targetEnemy.y + targetEnemy.speed * timeToHit;
// Calculate angle to predicted position for aimbot accuracy
var deltaX = predictedX - bullet.x;
var deltaY = predictedY - bullet.y;
var angle = Math.atan2(deltaY, deltaX);
// Set bullet direction with predictive targeting
bullet.velocityX = Math.cos(angle) * bullet.speed;
bullet.velocityY = Math.sin(angle) * bullet.speed;
turretBullets.push(bullet);
game.addChild(bullet);
}
function findNearestEnemy(turretX, turretY) {
var nearestEnemy = null;
var nearestDistance = Infinity;
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
var distance = Math.sqrt(Math.pow(enemy.x - turretX, 2) + Math.pow(enemy.y - turretY, 2));
if (distance < nearestDistance && distance < 2000) {
// Increased range to 2000px for better aimbot coverage
nearestDistance = distance;
nearestEnemy = enemy;
}
}
return nearestEnemy;
}
// Event handlers
game.down = function (x, y, obj) {
if (showMainMenu) {
// Check if start button was clicked
var startLeft = startButton.x - 135;
var startRight = startButton.x + 135;
var startTop = startButton.y - 90;
var startBottom = startButton.y + 90;
if (x >= startLeft && x <= startRight && y >= startTop && y <= startBottom) {
// Hide menu elements
showMainMenu = false;
gameStarted = true;
menuBackground.visible = false;
menuTitle.visible = false;
startButton.visible = false;
startButtonText.visible = false;
adminButton.visible = false;
adminButtonText.visible = false;
instructionText.visible = false;
// Show game elements
player.visible = true;
upgrade1Button.visible = true;
upgrade2Button.visible = true;
upgrade1Text.visible = true;
upgrade2Text.visible = true;
coinText.visible = true;
healthText.visible = true;
waveText.visible = true;
// Switch from menu music to game music
LK.stopMusic();
LK.playMusic('bgMusic', {
loop: true
});
}
// Check if admin button was clicked
var adminLeft = adminButton.x - 135;
var adminRight = adminButton.x + 135;
var adminTop = adminButton.y - 90;
var adminBottom = adminButton.y + 90;
if (x >= adminLeft && x <= adminRight && y >= adminTop && y <= adminBottom) {
// Admin mode activated - give lots of coins and max health
coins = 10000;
playerHealth = 10000;
coinText.setText('Coins: ' + coins);
healthText.setText('Health: ' + playerHealth);
// Hide menu elements
showMainMenu = false;
gameStarted = true;
menuBackground.visible = false;
menuTitle.visible = false;
startButton.visible = false;
startButtonText.visible = false;
adminButton.visible = false;
adminButtonText.visible = false;
instructionText.visible = false;
// Show game elements
player.visible = true;
upgrade1Button.visible = true;
upgrade2Button.visible = true;
upgrade1Text.visible = true;
upgrade2Text.visible = true;
coinText.visible = true;
healthText.visible = true;
waveText.visible = true;
// Switch from menu music to game music
LK.stopMusic();
LK.playMusic('bgMusic', {
loop: true
});
}
return;
}
if (gameStarted) {
// Check upgrade 1 button - use proper bounds checking
var upgrade1Left = upgrade1Button.x - 90;
var upgrade1Right = upgrade1Button.x + 90;
var upgrade1Top = upgrade1Button.y - 60;
var upgrade1Bottom = upgrade1Button.y + 60;
if (x >= upgrade1Left && x <= upgrade1Right && y >= upgrade1Top && y <= upgrade1Bottom) {
if (upgrade1Level < 10 && coins >= upgrade1Cost) {
coins -= upgrade1Cost;
upgrade1Level++;
upgrade1Cost = turret1CostTable[upgrade1Level] || upgrade1Cost;
coinText.setText('Coins: ' + coins);
var damageText = turretDamageTable[upgrade1Level];
if (upgrade1Level >= 10) {
upgrade1Text.setText('Turret 1\nMax Level\nDamage: ' + damageText);
} else {
upgrade1Text.setText('Turret 1\nLevel: ' + upgrade1Level + '\nDamage: ' + damageText + '\nCost: ' + upgrade1Cost);
}
// Only spawn turret if this is the first level
if (upgrade1Level === 1) {
// Spawn turret at upgrade button position with animation
var newTurret = LK.getAsset('turret', {
anchorX: 0.5,
anchorY: 0.5
});
newTurret.x = player.x - 200;
newTurret.y = player.y - 100; // Position above player
newTurret.tint = 0x00ff00; // Green tint for turret
newTurret.scaleX = 0.1;
newTurret.scaleY = 0.1;
newTurret.level = upgrade1Level;
game.addChild(newTurret);
turrets1.push(newTurret);
// Animate turret spawn
tween(newTurret, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 500,
easing: tween.bounceOut
});
} else {
// Update existing turret level
if (turrets1.length > 0) {
turrets1[0].level = upgrade1Level;
}
}
}
return;
}
// Check upgrade 2 button - use proper bounds checking
var upgrade2Left = upgrade2Button.x - 90;
var upgrade2Right = upgrade2Button.x + 90;
var upgrade2Top = upgrade2Button.y - 60;
var upgrade2Bottom = upgrade2Button.y + 60;
if (x >= upgrade2Left && x <= upgrade2Right && y >= upgrade2Top && y <= upgrade2Bottom) {
if (upgrade2Level < 10 && coins >= upgrade2Cost) {
coins -= upgrade2Cost;
upgrade2Level++;
upgrade2Cost = turret2CostTable[upgrade2Level] || upgrade2Cost;
coinText.setText('Coins: ' + coins);
var damageText = turretDamageTable[upgrade2Level];
if (upgrade2Level >= 10) {
upgrade2Text.setText('Turret 2\nMax Level\nDamage: ' + damageText);
} else {
upgrade2Text.setText('Turret 2\nLevel: ' + upgrade2Level + '\nDamage: ' + damageText + '\nCost: ' + upgrade2Cost);
}
// Only spawn turret if this is the first level
if (upgrade2Level === 1) {
// Spawn turret at upgrade button position with animation
var newTurret = LK.getAsset('turret', {
anchorX: 0.5,
anchorY: 0.5
});
newTurret.x = player.x + 200;
newTurret.y = player.y - 100; // Position above player
newTurret.tint = 0x0000ff; // Blue tint for turret
newTurret.scaleX = 0.1;
newTurret.scaleY = 0.1;
newTurret.level = upgrade2Level;
game.addChild(newTurret);
turrets2.push(newTurret);
// Animate turret spawn
tween(newTurret, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 500,
easing: tween.bounceOut
});
} else {
// Update existing turret level
if (turrets2.length > 0) {
turrets2[0].level = upgrade2Level;
}
}
}
return;
}
isMouseDown = true;
mouseX = x;
mouseY = y;
fireBullet(x, y);
} else {
gameStarted = true;
}
};
game.up = function (x, y, obj) {
isMouseDown = false;
};
game.move = function (x, y, obj) {
// Remove mouse tracking during movement to prevent bullets from following cursor
};
// Main game loop
game.update = function () {
if (showMainMenu) {
return; // Don't run game logic while in menu
}
if (!gameStarted) {
waveInProgress = true; // Start first wave when game begins
return;
}
// Update upgrade button positions
upgrade1Button.x = player.x - 200;
upgrade1Button.y = player.y;
upgrade1Text.x = upgrade1Button.x;
upgrade1Text.y = upgrade1Button.y;
upgrade2Button.x = player.x + 200;
upgrade2Button.y = player.y;
upgrade2Text.x = upgrade2Button.x;
upgrade2Text.y = upgrade2Button.y;
// Handle continuous shooting
if (isMouseDown) {
shootCooldown--;
if (shootCooldown <= 0) {
fireBullet(mouseX, mouseY);
shootCooldown = shootRate;
}
}
// Wave management
if (!waveInProgress) {
waveDelayTimer++;
if (waveDelayTimer >= waveStartDelay) {
startNewWave();
}
} else {
// Spawn enemies for current wave
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnRate && enemiesSpawned < enemiesInWave) {
spawnEnemy();
enemySpawnTimer = 0;
}
// Check if wave is complete
if (enemiesKilled >= enemiesInWave && enemies.length === 0) {
waveInProgress = false;
waveDelayTimer = 0;
}
}
// Turret shooting logic
turretShootTimer1++;
turretShootTimer2++;
if (turretShootTimer1 >= turretShootRate) {
for (var t1 = 0; t1 < turrets1.length; t1++) {
var turret1 = turrets1[t1];
var target1 = findNearestEnemy(turret1.x, turret1.y);
if (target1) {
fireTurretBullet(turret1.x, turret1.y, target1, upgrade1Level);
}
}
turretShootTimer1 = 0;
}
if (turretShootTimer2 >= turretShootRate) {
for (var t2 = 0; t2 < turrets2.length; t2++) {
var turret2 = turrets2[t2];
var target2 = findNearestEnemy(turret2.x, turret2.y);
if (target2) {
fireTurretBullet(turret2.x, turret2.y, target2, upgrade2Level);
}
}
turretShootTimer2 = 0;
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
// Remove bullets that go off screen
if (bullet.lastY <= 2732 && (bullet.y > 2732 || bullet.y < -50 || bullet.x < -50 || bullet.x > 2098)) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
bullet.lastY = bullet.y;
}
// Update turret bullets
for (var tb = turretBullets.length - 1; tb >= 0; tb--) {
var turretBullet = turretBullets[tb];
// Remove turret bullets that go off screen
if (turretBullet.lastY <= 2732 && (turretBullet.y > 2732 || turretBullet.y < -50 || turretBullet.x < -50 || turretBullet.x > 2098)) {
turretBullet.destroy();
turretBullets.splice(tb, 1);
continue;
}
turretBullet.lastY = turretBullet.y;
}
// Update enemies and check collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
// Remove enemies that reach bottom (player takes damage)
if (enemy.lastY < 2732 && enemy.y >= 2732) {
playerHealth -= 20;
healthText.setText('Health: ' + playerHealth);
LK.effects.flashScreen(0xff0000, 500);
if (playerHealth <= 0) {
LK.setScore(coins);
LK.showGameOver();
return;
}
enemiesKilled++; // Count as killed for wave progress
enemy.destroy();
enemies.splice(j, 1);
continue;
}
// Check bullet collisions
for (var k = bullets.length - 1; k >= 0; k--) {
var bullet = bullets[k];
if (bullet.intersects(enemy)) {
enemy.takeDamage(bullet.damage);
LK.getSound('enemyDamage').play();
// Remove bullet
bullet.destroy();
bullets.splice(k, 1);
// Check if enemy is dead
if (enemy.health <= 0) {
coins += enemy.coinValue;
coinText.setText('Coins: ' + coins);
LK.getSound('enemyDeath').play();
enemiesKilled++;
enemy.destroy();
enemies.splice(j, 1);
}
break;
}
}
// Check turret bullet collisions
for (var tkb = turretBullets.length - 1; tkb >= 0; tkb--) {
var turretBullet = turretBullets[tkb];
if (turretBullet.intersects(enemy)) {
enemy.takeDamage(turretBullet.damage);
LK.getSound('enemyDamage').play();
// Remove turret bullet
turretBullet.destroy();
turretBullets.splice(tkb, 1);
// Check if enemy is dead
if (enemy.health <= 0) {
coins += enemy.coinValue;
coinText.setText('Coins: ' + coins);
LK.getSound('enemyDeath').play();
enemiesKilled++;
enemy.destroy();
enemies.splice(j, 1);
}
break;
}
}
enemy.lastY = enemy.y;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -265,9 +265,9 @@
scaleX: 1.5,
scaleY: 1.5
});
startButton.x = 2048 / 2;
-startButton.y = 2732 / 2 - 50;
+startButton.y = 2732 / 2 - 100;
startButton.tint = 0x4CAF50;
game.addChild(startButton);
var startButtonText = new Text2('START GAME', {
size: 40,
@@ -286,9 +286,9 @@
scaleX: 1.5,
scaleY: 1.5
});
adminButton.x = 2048 / 2;
-adminButton.y = 2732 / 2 + 100;
+adminButton.y = 2732 / 2 + 80;
adminButton.tint = 0xFF4444;
game.addChild(adminButton);
var adminButtonText = new Text2('ADMIN MODE', {
size: 40,
@@ -309,9 +309,9 @@
strokeThickness: 3
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 2048 / 2;
-instructionText.y = 2732 / 2 + 300;
+instructionText.y = 2732 / 2 + 350;
game.addChild(instructionText);
// Create player
player = game.addChild(new Player());
player.x = 2048 / 2;