User prompt
change new enemy name to CircleBoss and make new asset
User prompt
make new enemy, when i collect drop make a circle around me for 10 second. if goblins toched the circle make goblins die ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
change enemy names to goblin, big enemy names to clearBoss
User prompt
there is a screen clear ui at the top can you delete that
User prompt
delete screen clear ui
User prompt
make all big enemies drop screen clear power up
User prompt
when bullet are 10 in total stop adding bullets and disable add bullet button
User prompt
when i choose add bullet add one more bullet every time
User prompt
when power up screen came stop big enemies and bullets
User prompt
when power up screen came stop enemies
User prompt
pause all enemies and bullets when power up screen came
User prompt
make power up background different asset
User prompt
dont change the background just make it little darker
User prompt
make background a little darker
User prompt
make background little darker
User prompt
make background new asset
User prompt
if there is one big enemy on the screen there cant be any other big enemy
User prompt
make big enemy drop new asset
User prompt
make damage power up new asset
User prompt
make add bullet button new asset
User prompt
make health +10 power up different asset
User prompt
delete fire rate button and change with health +10,
User prompt
point going up only when i collect the drops. small enemy drops give 10 points. big enemy drops give 50 points
User prompt
you forgot to add bullet
User prompt
on power up screen add one more button on the middle called add bullet. when i choose this add one bullet to my bullet
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BigEnemyDrop = Container.expand(function () { var self = Container.call(this); var dropGraphics = self.attachAsset('bigEnemyDrop', { anchorX: 0.5, anchorY: 0.5 }); self.experienceValue = 1; self.pointsValue = 1; self.collectRadius = 100; self.update = function () { var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < self.collectRadius) { var moveSpeed = 8; self.x += dx / distance * moveSpeed; self.y += dy / distance * moveSpeed; if (distance < 30) { player.gainExperience(self.experienceValue); LK.setScore(LK.getScore() + self.pointsValue); // If this is a big enemy drop (25 points), kill all enemies if (self.pointsValue === 25) { // Add flash effect for big enemy drop collection LK.effects.flashScreen(0xFFFFFF, 300); // Kill all regular enemies for (var k = enemies.length - 1; k >= 0; k--) { enemies[k].die(); } // Kill all bosses except the one that dropped this orb for (var k = bosses.length - 1; k >= 0; k--) { bosses[k].die(); } } self.destroy(); for (var i = experienceOrbs.length - 1; i >= 0; i--) { if (experienceOrbs[i] === self) { experienceOrbs.splice(i, 1); break; } } } } }; return self; }); var Boss = Container.expand(function () { var self = Container.call(this); var bossGraphics = self.attachAsset('boss', { anchorX: 0.5, anchorY: 0.5 }); self.health = 200; self.maxHealth = 200; self.speed = 1; self.damage = 30; self.experienceValue = 10; self.update = function () { var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } if (distance < 80) { player.takeDamage(self.damage); } }; self.takeDamage = function (damage) { self.health -= damage; LK.effects.flashObject(self, 0xFFFFFF, 150); if (self.health <= 0) { self.die(); } }; self.die = function () { // Create big enemy drop with dedicated asset var orb = new BigEnemyDrop(); orb.x = self.x; orb.y = self.y; orb.experienceValue = self.experienceValue; orb.pointsValue = 25; experienceOrbs.push(orb); game.addChild(orb); LK.getSound('bossDefeat').play(); // Remove from bosses array first, then destroy for (var i = bosses.length - 1; i >= 0; i--) { if (bosses[i] === self) { bosses.splice(i, 1); break; } } self.destroy(); }; return self; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.velocityX = 0; self.velocityY = 0; self.damage = 5; self.lifespan = 0; self.maxLifespan = 120; self.update = function () { self.x += self.velocityX; self.y += self.velocityY; self.lifespan++; if (self.lifespan >= self.maxLifespan || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) { self.destroy(); for (var i = bullets.length - 1; i >= 0; i--) { if (bullets[i] === self) { bullets.splice(i, 1); break; } } } }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.health = 10; self.maxHealth = 10; self.speed = 2; self.damage = 15; self.experienceValue = 1; self.update = function () { var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } if (distance < 50) { player.takeDamage(self.damage); self.destroy(); for (var i = enemies.length - 1; i >= 0; i--) { if (enemies[i] === self) { enemies.splice(i, 1); break; } } } }; self.takeDamage = function (damage) { self.health -= damage; LK.effects.flashObject(self, 0xFFFFFF, 100); if (self.health <= 0) { self.die(); } }; self.die = function () { var orb = new ExperienceOrb(); orb.x = self.x; orb.y = self.y; orb.experienceValue = self.experienceValue; orb.pointsValue = 10; experienceOrbs.push(orb); game.addChild(orb); LK.getSound('enemyHit').play(); self.destroy(); for (var i = enemies.length - 1; i >= 0; i--) { if (enemies[i] === self) { enemies.splice(i, 1); break; } } }; return self; }); var ExperienceOrb = Container.expand(function () { var self = Container.call(this); var orbGraphics = self.attachAsset('experienceOrb', { anchorX: 0.5, anchorY: 0.5 }); self.experienceValue = 1; self.pointsValue = 1; self.collectRadius = 100; self.update = function () { var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < self.collectRadius) { var moveSpeed = 8; self.x += dx / distance * moveSpeed; self.y += dy / distance * moveSpeed; if (distance < 30) { player.gainExperience(self.experienceValue); LK.setScore(LK.getScore() + self.pointsValue); // If this is a big enemy drop (25 points), kill all enemies if (self.pointsValue === 25) { // Add flash effect for big enemy drop collection LK.effects.flashScreen(0xFFFFFF, 300); // Kill all regular enemies for (var k = enemies.length - 1; k >= 0; k--) { enemies[k].die(); } // Kill all bosses except the one that dropped this orb for (var k = bosses.length - 1; k >= 0; k--) { bosses[k].die(); } } self.destroy(); for (var i = experienceOrbs.length - 1; i >= 0; i--) { if (experienceOrbs[i] === self) { experienceOrbs.splice(i, 1); break; } } } } }; 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.experience = 0; self.level = 1; self.experienceToNext = 10; self.shootTimer = 0; self.shootCooldown = 30; self.damage = 5; self.speed = 8; self.update = function () { self.shootTimer++; if (self.shootTimer >= self.shootCooldown) { self.shootAtNearestEnemy(); self.shootTimer = 0; } }; self.shootAtNearestEnemy = function () { // Create array of all enemies within range, sorted by distance var enemiesInRange = []; // Check regular enemies for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var dx = enemy.x - self.x; var dy = enemy.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 600) { enemiesInRange.push({ enemy: enemy, distance: distance }); } } // Check bosses for (var i = 0; i < bosses.length; i++) { var boss = bosses[i]; var dx = boss.x - self.x; var dy = boss.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 600) { enemiesInRange.push({ enemy: boss, distance: distance }); } } // Sort enemies by distance (closest first) enemiesInRange.sort(function (a, b) { return a.distance - b.distance; }); if (enemiesInRange.length > 0) { // Always target the nearest enemy (first in sorted array) var targetEnemy = enemiesInRange[0].enemy; for (var b = 0; b < bulletCount; b++) { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; var dx = targetEnemy.x - self.x; var dy = targetEnemy.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); var angle = Math.atan2(dy, dx); bullet.velocityX = Math.cos(angle) * 10; bullet.velocityY = Math.sin(angle) * 10; bullet.damage = self.damage + damageBonus; bullets.push(bullet); game.addChild(bullet); } LK.getSound('shoot').play(); } }; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; LK.showGameOver(); } LK.effects.flashObject(self, 0xFF0000, 200); }; self.gainExperience = function (amount) { self.experience += amount; if (self.experience >= self.experienceToNext) { self.levelUp(); } }; self.levelUp = function () { self.level++; self.experience = 0; self.experienceToNext = Math.floor(self.experienceToNext * 1.5); LK.getSound('levelUp').play(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2E2E2E }); /**** * Game Code ****/ var player; var enemies = []; var bosses = []; var bullets = []; var experienceOrbs = []; var enemySpawnTimer = 0; var enemySpawnRate = 60; var bossSpawnTimer = 0; var bossSpawnInterval = 600; var dragNode = null; var powerUpActive = false; var powerUpUI = null; var bulletCount = 1; var fireRateBonus = 0; var damageBonus = 0; var powerUpsUsed = 0; // UI Elements var healthText = new Text2('Health: 100', { size: 40, fill: 0xFF4444 }); healthText.anchor.set(0, 0); LK.gui.topLeft.addChild(healthText); healthText.x = 120; healthText.y = 20; var levelText = new Text2('Level: 1', { size: 40, fill: 0x44FF44 }); levelText.anchor.set(0, 0); LK.gui.topRight.addChild(levelText); levelText.x = -200; levelText.y = 20; var scoreText = new Text2('0', { size: 50, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); scoreText.y = 80; function updateUI() { healthText.setText('Health: ' + player.health); levelText.setText('Level: ' + player.level); scoreText.setText(LK.getScore().toString()); } function showPowerUpUI() { powerUpActive = true; // Stop all enemies by setting their speed to 0 for (var i = 0; i < enemies.length; i++) { enemies[i].originalSpeed = enemies[i].speed; enemies[i].speed = 0; } for (var i = 0; i < bosses.length; i++) { bosses[i].originalSpeed = bosses[i].speed; bosses[i].speed = 0; } powerUpUI = new Container(); game.addChild(powerUpUI); var background = LK.getAsset('powerUpBackground', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, alpha: 0.8 }); powerUpUI.addChild(background); var titleText = new Text2('POWER UP!', { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 1000; powerUpUI.addChild(titleText); var healthBtn = LK.getAsset('healthPowerUp', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2, x: 700, y: 1366 }); powerUpUI.addChild(healthBtn); var healthText = new Text2('Health +10', { size: 50, fill: 0xFFFFFF }); healthText.anchor.set(0.5, 0.5); healthText.x = 700; healthText.y = 1500; powerUpUI.addChild(healthText); var damageBtn = LK.getAsset('damagePowerUp', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2, x: 1348, y: 1366 }); powerUpUI.addChild(damageBtn); var damageText = new Text2('Damage +5', { size: 50, fill: 0xFFFFFF }); damageText.anchor.set(0.5, 0.5); damageText.x = 1348; damageText.y = 1500; powerUpUI.addChild(damageText); var bulletBtn = LK.getAsset('bulletPowerUp', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2, x: 1024, y: 1366 }); powerUpUI.addChild(bulletBtn); var bulletText = new Text2('Add Bullet', { size: 50, fill: 0xFFFFFF }); bulletText.anchor.set(0.5, 0.5); bulletText.x = 1024; bulletText.y = 1500; powerUpUI.addChild(bulletText); healthBtn.down = function () { applyPowerUp('health'); }; damageBtn.down = function () { applyPowerUp('damage'); }; bulletBtn.down = function () { applyPowerUp('bullet'); }; } function applyPowerUp(type) { if (type === 'health') { player.health += 10; player.maxHealth += 10; } else if (type === 'damage') { damageBonus += 5; } else if (type === 'bullet') { bulletCount += 1; } powerUpsUsed++; // Restore enemy speeds for (var i = 0; i < enemies.length; i++) { if (enemies[i].originalSpeed !== undefined) { enemies[i].speed = enemies[i].originalSpeed; } } for (var i = 0; i < bosses.length; i++) { if (bosses[i].originalSpeed !== undefined) { bosses[i].speed = bosses[i].originalSpeed; } } tween(powerUpUI, { alpha: 0 }, { duration: 300, onFinish: function onFinish() { powerUpUI.destroy(); powerUpUI = null; powerUpActive = false; } }); } function spawnEnemy() { var enemy = new Enemy(); var side = Math.floor(Math.random() * 4); if (side === 0) { // Top enemy.x = Math.random() * 2048; enemy.y = -50; } else if (side === 1) { // Right enemy.x = 2098; enemy.y = Math.random() * 2732; } else if (side === 2) { // Bottom enemy.x = Math.random() * 2048; enemy.y = 2782; } else { // Left enemy.x = -50; enemy.y = Math.random() * 2732; } enemies.push(enemy); game.addChild(enemy); } function spawnBoss() { // Don't spawn if there's already a boss on screen if (bosses.length > 0) { return; } var boss = new Boss(); var side = Math.floor(Math.random() * 4); if (side === 0) { // Top boss.x = Math.random() * 2048; boss.y = -75; } else if (side === 1) { // Right boss.x = 2048 + 75; boss.y = Math.random() * 2732; } else if (side === 2) { // Bottom boss.x = Math.random() * 2048; boss.y = 2732 + 75; } else { // Left boss.x = -75; boss.y = Math.random() * 2732; } bosses.push(boss); game.addChild(boss); } // Add background var background = LK.getAsset('gameBackground', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(background); // Make background darker by reducing alpha tween(background, { alpha: 0.5 }, { duration: 0 }); // Initialize player player = new Player(); player.x = 1024; player.y = 1366; game.addChild(player); function handleMove(x, y, obj) { if (dragNode) { dragNode.x = x; dragNode.y = y; // Keep player within bounds dragNode.x = Math.max(40, Math.min(2008, dragNode.x)); dragNode.y = Math.max(40, Math.min(2692, dragNode.y)); } } game.move = handleMove; game.down = function (x, y, obj) { dragNode = player; handleMove(x, y, obj); }; game.up = function (x, y, obj) { dragNode = null; }; game.update = function () { // Pause game when power up UI is active if (powerUpActive) { return; } // Update all game objects player.update(); for (var i = bullets.length - 1; i >= 0; i--) { bullets[i].update(); } for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].update(); } for (var i = bosses.length - 1; i >= 0; i--) { bosses[i].update(); } for (var i = experienceOrbs.length - 1; i >= 0; i--) { experienceOrbs[i].update(); } // Bullet collision with enemies for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { enemy.takeDamage(bullet.damage); bullet.destroy(); bullets.splice(i, 1); break; } } if (bullets[i]) { for (var j = bosses.length - 1; j >= 0; j--) { var boss = bosses[j]; if (bullet.intersects(boss)) { boss.takeDamage(bullet.damage); bullet.destroy(); bullets.splice(i, 1); break; } } } } // Spawn enemies enemySpawnTimer++; if (enemySpawnTimer >= enemySpawnRate) { spawnEnemy(); enemySpawnTimer = 0; // Increase spawn rate over time if (enemySpawnRate > 20) { enemySpawnRate = Math.max(20, enemySpawnRate - 0.1); } } // Spawn bosses bossSpawnTimer++; if (bossSpawnTimer >= bossSpawnInterval) { spawnBoss(); bossSpawnTimer = 0; } // Check for power up every 500 points var nextPowerUpThreshold = (powerUpsUsed + 1) * 500; if (LK.getScore() >= nextPowerUpThreshold && !powerUpActive) { showPowerUpUI(); } updateUI(); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BigEnemyDrop = Container.expand(function () {
var self = Container.call(this);
var dropGraphics = self.attachAsset('bigEnemyDrop', {
anchorX: 0.5,
anchorY: 0.5
});
self.experienceValue = 1;
self.pointsValue = 1;
self.collectRadius = 100;
self.update = function () {
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < self.collectRadius) {
var moveSpeed = 8;
self.x += dx / distance * moveSpeed;
self.y += dy / distance * moveSpeed;
if (distance < 30) {
player.gainExperience(self.experienceValue);
LK.setScore(LK.getScore() + self.pointsValue);
// If this is a big enemy drop (25 points), kill all enemies
if (self.pointsValue === 25) {
// Add flash effect for big enemy drop collection
LK.effects.flashScreen(0xFFFFFF, 300);
// Kill all regular enemies
for (var k = enemies.length - 1; k >= 0; k--) {
enemies[k].die();
}
// Kill all bosses except the one that dropped this orb
for (var k = bosses.length - 1; k >= 0; k--) {
bosses[k].die();
}
}
self.destroy();
for (var i = experienceOrbs.length - 1; i >= 0; i--) {
if (experienceOrbs[i] === self) {
experienceOrbs.splice(i, 1);
break;
}
}
}
}
};
return self;
});
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 200;
self.maxHealth = 200;
self.speed = 1;
self.damage = 30;
self.experienceValue = 10;
self.update = function () {
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
if (distance < 80) {
player.takeDamage(self.damage);
}
};
self.takeDamage = function (damage) {
self.health -= damage;
LK.effects.flashObject(self, 0xFFFFFF, 150);
if (self.health <= 0) {
self.die();
}
};
self.die = function () {
// Create big enemy drop with dedicated asset
var orb = new BigEnemyDrop();
orb.x = self.x;
orb.y = self.y;
orb.experienceValue = self.experienceValue;
orb.pointsValue = 25;
experienceOrbs.push(orb);
game.addChild(orb);
LK.getSound('bossDefeat').play();
// Remove from bosses array first, then destroy
for (var i = bosses.length - 1; i >= 0; i--) {
if (bosses[i] === self) {
bosses.splice(i, 1);
break;
}
}
self.destroy();
};
return self;
});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.damage = 5;
self.lifespan = 0;
self.maxLifespan = 120;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.lifespan++;
if (self.lifespan >= self.maxLifespan || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
self.destroy();
for (var i = bullets.length - 1; i >= 0; i--) {
if (bullets[i] === self) {
bullets.splice(i, 1);
break;
}
}
}
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 10;
self.maxHealth = 10;
self.speed = 2;
self.damage = 15;
self.experienceValue = 1;
self.update = function () {
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
if (distance < 50) {
player.takeDamage(self.damage);
self.destroy();
for (var i = enemies.length - 1; i >= 0; i--) {
if (enemies[i] === self) {
enemies.splice(i, 1);
break;
}
}
}
};
self.takeDamage = function (damage) {
self.health -= damage;
LK.effects.flashObject(self, 0xFFFFFF, 100);
if (self.health <= 0) {
self.die();
}
};
self.die = function () {
var orb = new ExperienceOrb();
orb.x = self.x;
orb.y = self.y;
orb.experienceValue = self.experienceValue;
orb.pointsValue = 10;
experienceOrbs.push(orb);
game.addChild(orb);
LK.getSound('enemyHit').play();
self.destroy();
for (var i = enemies.length - 1; i >= 0; i--) {
if (enemies[i] === self) {
enemies.splice(i, 1);
break;
}
}
};
return self;
});
var ExperienceOrb = Container.expand(function () {
var self = Container.call(this);
var orbGraphics = self.attachAsset('experienceOrb', {
anchorX: 0.5,
anchorY: 0.5
});
self.experienceValue = 1;
self.pointsValue = 1;
self.collectRadius = 100;
self.update = function () {
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < self.collectRadius) {
var moveSpeed = 8;
self.x += dx / distance * moveSpeed;
self.y += dy / distance * moveSpeed;
if (distance < 30) {
player.gainExperience(self.experienceValue);
LK.setScore(LK.getScore() + self.pointsValue);
// If this is a big enemy drop (25 points), kill all enemies
if (self.pointsValue === 25) {
// Add flash effect for big enemy drop collection
LK.effects.flashScreen(0xFFFFFF, 300);
// Kill all regular enemies
for (var k = enemies.length - 1; k >= 0; k--) {
enemies[k].die();
}
// Kill all bosses except the one that dropped this orb
for (var k = bosses.length - 1; k >= 0; k--) {
bosses[k].die();
}
}
self.destroy();
for (var i = experienceOrbs.length - 1; i >= 0; i--) {
if (experienceOrbs[i] === self) {
experienceOrbs.splice(i, 1);
break;
}
}
}
}
};
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.experience = 0;
self.level = 1;
self.experienceToNext = 10;
self.shootTimer = 0;
self.shootCooldown = 30;
self.damage = 5;
self.speed = 8;
self.update = function () {
self.shootTimer++;
if (self.shootTimer >= self.shootCooldown) {
self.shootAtNearestEnemy();
self.shootTimer = 0;
}
};
self.shootAtNearestEnemy = function () {
// Create array of all enemies within range, sorted by distance
var enemiesInRange = [];
// Check regular enemies
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
var dx = enemy.x - self.x;
var dy = enemy.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 600) {
enemiesInRange.push({
enemy: enemy,
distance: distance
});
}
}
// Check bosses
for (var i = 0; i < bosses.length; i++) {
var boss = bosses[i];
var dx = boss.x - self.x;
var dy = boss.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 600) {
enemiesInRange.push({
enemy: boss,
distance: distance
});
}
}
// Sort enemies by distance (closest first)
enemiesInRange.sort(function (a, b) {
return a.distance - b.distance;
});
if (enemiesInRange.length > 0) {
// Always target the nearest enemy (first in sorted array)
var targetEnemy = enemiesInRange[0].enemy;
for (var b = 0; b < bulletCount; b++) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
var dx = targetEnemy.x - self.x;
var dy = targetEnemy.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
var angle = Math.atan2(dy, dx);
bullet.velocityX = Math.cos(angle) * 10;
bullet.velocityY = Math.sin(angle) * 10;
bullet.damage = self.damage + damageBonus;
bullets.push(bullet);
game.addChild(bullet);
}
LK.getSound('shoot').play();
}
};
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health <= 0) {
self.health = 0;
LK.showGameOver();
}
LK.effects.flashObject(self, 0xFF0000, 200);
};
self.gainExperience = function (amount) {
self.experience += amount;
if (self.experience >= self.experienceToNext) {
self.levelUp();
}
};
self.levelUp = function () {
self.level++;
self.experience = 0;
self.experienceToNext = Math.floor(self.experienceToNext * 1.5);
LK.getSound('levelUp').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2E2E2E
});
/****
* Game Code
****/
var player;
var enemies = [];
var bosses = [];
var bullets = [];
var experienceOrbs = [];
var enemySpawnTimer = 0;
var enemySpawnRate = 60;
var bossSpawnTimer = 0;
var bossSpawnInterval = 600;
var dragNode = null;
var powerUpActive = false;
var powerUpUI = null;
var bulletCount = 1;
var fireRateBonus = 0;
var damageBonus = 0;
var powerUpsUsed = 0;
// UI Elements
var healthText = new Text2('Health: 100', {
size: 40,
fill: 0xFF4444
});
healthText.anchor.set(0, 0);
LK.gui.topLeft.addChild(healthText);
healthText.x = 120;
healthText.y = 20;
var levelText = new Text2('Level: 1', {
size: 40,
fill: 0x44FF44
});
levelText.anchor.set(0, 0);
LK.gui.topRight.addChild(levelText);
levelText.x = -200;
levelText.y = 20;
var scoreText = new Text2('0', {
size: 50,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
scoreText.y = 80;
function updateUI() {
healthText.setText('Health: ' + player.health);
levelText.setText('Level: ' + player.level);
scoreText.setText(LK.getScore().toString());
}
function showPowerUpUI() {
powerUpActive = true;
// Stop all enemies by setting their speed to 0
for (var i = 0; i < enemies.length; i++) {
enemies[i].originalSpeed = enemies[i].speed;
enemies[i].speed = 0;
}
for (var i = 0; i < bosses.length; i++) {
bosses[i].originalSpeed = bosses[i].speed;
bosses[i].speed = 0;
}
powerUpUI = new Container();
game.addChild(powerUpUI);
var background = LK.getAsset('powerUpBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
alpha: 0.8
});
powerUpUI.addChild(background);
var titleText = new Text2('POWER UP!', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 1000;
powerUpUI.addChild(titleText);
var healthBtn = LK.getAsset('healthPowerUp', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2,
x: 700,
y: 1366
});
powerUpUI.addChild(healthBtn);
var healthText = new Text2('Health +10', {
size: 50,
fill: 0xFFFFFF
});
healthText.anchor.set(0.5, 0.5);
healthText.x = 700;
healthText.y = 1500;
powerUpUI.addChild(healthText);
var damageBtn = LK.getAsset('damagePowerUp', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2,
x: 1348,
y: 1366
});
powerUpUI.addChild(damageBtn);
var damageText = new Text2('Damage +5', {
size: 50,
fill: 0xFFFFFF
});
damageText.anchor.set(0.5, 0.5);
damageText.x = 1348;
damageText.y = 1500;
powerUpUI.addChild(damageText);
var bulletBtn = LK.getAsset('bulletPowerUp', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2,
x: 1024,
y: 1366
});
powerUpUI.addChild(bulletBtn);
var bulletText = new Text2('Add Bullet', {
size: 50,
fill: 0xFFFFFF
});
bulletText.anchor.set(0.5, 0.5);
bulletText.x = 1024;
bulletText.y = 1500;
powerUpUI.addChild(bulletText);
healthBtn.down = function () {
applyPowerUp('health');
};
damageBtn.down = function () {
applyPowerUp('damage');
};
bulletBtn.down = function () {
applyPowerUp('bullet');
};
}
function applyPowerUp(type) {
if (type === 'health') {
player.health += 10;
player.maxHealth += 10;
} else if (type === 'damage') {
damageBonus += 5;
} else if (type === 'bullet') {
bulletCount += 1;
}
powerUpsUsed++;
// Restore enemy speeds
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].originalSpeed !== undefined) {
enemies[i].speed = enemies[i].originalSpeed;
}
}
for (var i = 0; i < bosses.length; i++) {
if (bosses[i].originalSpeed !== undefined) {
bosses[i].speed = bosses[i].originalSpeed;
}
}
tween(powerUpUI, {
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
powerUpUI.destroy();
powerUpUI = null;
powerUpActive = false;
}
});
}
function spawnEnemy() {
var enemy = new Enemy();
var side = Math.floor(Math.random() * 4);
if (side === 0) {
// Top
enemy.x = Math.random() * 2048;
enemy.y = -50;
} else if (side === 1) {
// Right
enemy.x = 2098;
enemy.y = Math.random() * 2732;
} else if (side === 2) {
// Bottom
enemy.x = Math.random() * 2048;
enemy.y = 2782;
} else {
// Left
enemy.x = -50;
enemy.y = Math.random() * 2732;
}
enemies.push(enemy);
game.addChild(enemy);
}
function spawnBoss() {
// Don't spawn if there's already a boss on screen
if (bosses.length > 0) {
return;
}
var boss = new Boss();
var side = Math.floor(Math.random() * 4);
if (side === 0) {
// Top
boss.x = Math.random() * 2048;
boss.y = -75;
} else if (side === 1) {
// Right
boss.x = 2048 + 75;
boss.y = Math.random() * 2732;
} else if (side === 2) {
// Bottom
boss.x = Math.random() * 2048;
boss.y = 2732 + 75;
} else {
// Left
boss.x = -75;
boss.y = Math.random() * 2732;
}
bosses.push(boss);
game.addChild(boss);
}
// Add background
var background = LK.getAsset('gameBackground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChild(background);
// Make background darker by reducing alpha
tween(background, {
alpha: 0.5
}, {
duration: 0
});
// Initialize player
player = new Player();
player.x = 1024;
player.y = 1366;
game.addChild(player);
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.y = y;
// Keep player within bounds
dragNode.x = Math.max(40, Math.min(2008, dragNode.x));
dragNode.y = Math.max(40, Math.min(2692, dragNode.y));
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = player;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
// Pause game when power up UI is active
if (powerUpActive) {
return;
}
// Update all game objects
player.update();
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].update();
}
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].update();
}
for (var i = bosses.length - 1; i >= 0; i--) {
bosses[i].update();
}
for (var i = experienceOrbs.length - 1; i >= 0; i--) {
experienceOrbs[i].update();
}
// Bullet collision with enemies
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
enemy.takeDamage(bullet.damage);
bullet.destroy();
bullets.splice(i, 1);
break;
}
}
if (bullets[i]) {
for (var j = bosses.length - 1; j >= 0; j--) {
var boss = bosses[j];
if (bullet.intersects(boss)) {
boss.takeDamage(bullet.damage);
bullet.destroy();
bullets.splice(i, 1);
break;
}
}
}
}
// Spawn enemies
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnRate) {
spawnEnemy();
enemySpawnTimer = 0;
// Increase spawn rate over time
if (enemySpawnRate > 20) {
enemySpawnRate = Math.max(20, enemySpawnRate - 0.1);
}
}
// Spawn bosses
bossSpawnTimer++;
if (bossSpawnTimer >= bossSpawnInterval) {
spawnBoss();
bossSpawnTimer = 0;
}
// Check for power up every 500 points
var nextPowerUpThreshold = (powerUpsUsed + 1) * 500;
if (LK.getScore() >= nextPowerUpThreshold && !powerUpActive) {
showPowerUpUI();
}
updateUI();
};
a witch with red head and purple hat.. pixel art. full body
pixel art goblin. In-Game asset. 2d. High contrast. No shadows
pixel art seraphim. In-Game asset. 2d. High contrast. No shadows
a background top down game pixel art desert. In-Game asset. 2d. High contrast. No shadows
purple fireball pixel art. In-Game asset. 2d. High contrast. No shadows
pixel art circle health button. In-Game asset. 2d. High contrast. No shadows
pixel art circle damage button with symbols and no letters. In-Game asset. 2d. High contrast. No shadows
pixel art circle bullet button. In-Game asset. 2d. High contrast. No shadows
pixel art green circle. In-Game asset. 2d. High contrast. No shadows
pixel art circle red. In-Game asset. 2d. High contrast. No shadows
a background top down game pixel art desert. night In-Game asset. 2d. High contrast. No shadows
pixel art old wizard boss. In-Game asset. 2d. High contrast. No shadows
pixel art circle brown. In-Game asset. 2d. High contrast. No shadows
fire shoot pixel art. In-Game asset. 2d. High contrast. No shadows
pixel art colorful spider sideview. In-Game asset. 2d. High contrast. No shadows
pixel art pink circle. In-Game asset. 2d. High contrast. No shadows