/****
* 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.update = function () {
self.y -= self.speed;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.health = 1;
self.isChasing = false;
self.update = function () {
if (!self.isChasing) {
self.y += self.speed;
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
var gun = self.attachAsset('gun', {
anchorX: 0.5,
anchorY: 0.5
});
gun.y = -40;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2400;
var bullets = [];
var enemies = [];
var gameActive = true;
var spawnRate = 60;
var difficultyMultiplier = 1;
var playerSpeed = 12;
var keysPressed = {
up: false,
down: false,
left: false,
right: false
};
var maxBullets = 30;
var currentBullets = 30;
var isReloading = false;
var reloadTime = 2000;
var leftClickHeld = false;
var canShoot = true;
var enemyDetectionRange = 500;
var scoreTxt = new Text2('0', {
size: 80,
fill: '#ffffff'
});
scoreTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(scoreTxt);
var difficultyTxt = new Text2('Wave: 1', {
size: 80,
fill: '#ffffff'
});
difficultyTxt.anchor.set(0, 0);
LK.gui.bottom.addChild(difficultyTxt);
var ammotTxt = new Text2('Ammo: 30/30', {
size: 60,
fill: '#ffffff'
});
ammotTxt.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(ammotTxt);
function spawnEnemy() {
var enemy = game.addChild(new Enemy());
enemy.x = Math.random() * 1800 + 100;
enemy.y = -60;
enemy.speed = 2 + difficultyMultiplier * 0.5;
enemy.lastY = enemy.y;
enemies.push(enemy);
}
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
var wave = Math.floor(LK.getScore() / 10) + 1;
difficultyTxt.setText('Wave: ' + wave);
difficultyMultiplier = 1 + (wave - 1) * 0.3;
spawnRate = Math.max(20, 60 - (wave - 1) * 3);
}
function updatePlayerMovement() {
if (keysPressed.left) {
player.x -= playerSpeed;
}
if (keysPressed.right) {
player.x += playerSpeed;
}
if (keysPressed.up) {
player.y -= playerSpeed;
}
if (keysPressed.down) {
player.y += playerSpeed;
}
if (player.x < 40) player.x = 40;
if (player.x > 2048 - 40) player.x = 2048 - 40;
if (player.y < 200) player.y = 200;
if (player.y > 2650) player.y = 2650;
}
game.move = function (x, y, obj) {
var distX = x - player.x;
var distY = y - player.y;
var distance = Math.sqrt(distX * distX + distY * distY);
if (distance > 150) {
keysPressed.up = distY < -75;
keysPressed.down = distY > 75;
keysPressed.left = distX < -75;
keysPressed.right = distX > 75;
}
// Shoot when left click is held
if (leftClickHeld && !isReloading && currentBullets > 0 && canShoot) {
var newBullet = game.addChild(new Bullet());
newBullet.x = player.x;
newBullet.y = player.y - 40;
newBullet.lastY = newBullet.y;
bullets.push(newBullet);
LK.getSound('shoot').play();
currentBullets--;
ammotTxt.setText('Ammo: ' + currentBullets + '/' + maxBullets);
canShoot = false;
LK.setTimeout(function () {
canShoot = true;
}, 100);
}
};
game.down = function (x, y, obj) {
leftClickHeld = true;
};
game.up = function (x, y, obj) {
keysPressed.up = false;
keysPressed.down = false;
keysPressed.left = false;
keysPressed.right = false;
leftClickHeld = false;
};
game.update = function () {
if (!gameActive) return;
updatePlayerMovement();
// Spawn enemies
if (LK.ticks % spawnRate === 0) {
spawnEnemy();
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.lastY === undefined) {
bullet.lastY = bullet.y;
}
// Check if bullet is off-screen
if (bullet.lastY >= -20 && bullet.y < -20) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check bullet-enemy collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
LK.getSound('hit').play();
LK.setScore(LK.getScore() + 1);
updateScore();
bullet.destroy();
bullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
break;
}
}
bullet.lastY = bullet.y;
}
// Update enemies
for (var k = enemies.length - 1; k >= 0; k--) {
var enemy = enemies[k];
if (enemy.lastY === undefined) {
enemy.lastY = enemy.y;
enemy.lastIntersecting = false;
}
// Check if enemy is off-screen (bottom)
if (enemy.lastY <= 2732 + 60 && enemy.y > 2732 + 60) {
enemy.destroy();
enemies.splice(k, 1);
continue;
}
// Check if player is in detection range
var distX = player.x - enemy.x;
var distY = player.y - enemy.y;
var distToPlayer = Math.sqrt(distX * distX + distY * distY);
if (distToPlayer < enemyDetectionRange) {
enemy.isChasing = true;
}
// Chase player if detected
if (enemy.isChasing) {
var chaseSpeed = 3 + difficultyMultiplier * 0.5;
if (distX < 0) enemy.x -= chaseSpeed;else if (distX > 0) enemy.x += chaseSpeed;
if (distY < 0) enemy.y -= chaseSpeed;else if (distY > 0) enemy.y += chaseSpeed;
}
// Check player-enemy collision
var currentIntersecting = enemy.intersects(player);
if (!enemy.lastIntersecting && currentIntersecting) {
gameActive = false;
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
return;
}
enemy.lastY = enemy.y;
enemy.lastIntersecting = currentIntersecting;
}
// Handle reload
if (currentBullets === 0 && !isReloading) {
isReloading = true;
ammotTxt.setText('RELOADING...');
LK.setTimeout(function () {
isReloading = false;
currentBullets = maxBullets;
ammotTxt.setText('Ammo: ' + currentBullets + '/' + maxBullets);
}, reloadTime);
}
};
LK.playMusic('bgmusic', {
loop: true
}); /****
* 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.update = function () {
self.y -= self.speed;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.health = 1;
self.isChasing = false;
self.update = function () {
if (!self.isChasing) {
self.y += self.speed;
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
var gun = self.attachAsset('gun', {
anchorX: 0.5,
anchorY: 0.5
});
gun.y = -40;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2400;
var bullets = [];
var enemies = [];
var gameActive = true;
var spawnRate = 60;
var difficultyMultiplier = 1;
var playerSpeed = 12;
var keysPressed = {
up: false,
down: false,
left: false,
right: false
};
var maxBullets = 30;
var currentBullets = 30;
var isReloading = false;
var reloadTime = 2000;
var leftClickHeld = false;
var canShoot = true;
var enemyDetectionRange = 500;
var scoreTxt = new Text2('0', {
size: 80,
fill: '#ffffff'
});
scoreTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(scoreTxt);
var difficultyTxt = new Text2('Wave: 1', {
size: 80,
fill: '#ffffff'
});
difficultyTxt.anchor.set(0, 0);
LK.gui.bottom.addChild(difficultyTxt);
var ammotTxt = new Text2('Ammo: 30/30', {
size: 60,
fill: '#ffffff'
});
ammotTxt.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(ammotTxt);
function spawnEnemy() {
var enemy = game.addChild(new Enemy());
enemy.x = Math.random() * 1800 + 100;
enemy.y = -60;
enemy.speed = 2 + difficultyMultiplier * 0.5;
enemy.lastY = enemy.y;
enemies.push(enemy);
}
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
var wave = Math.floor(LK.getScore() / 10) + 1;
difficultyTxt.setText('Wave: ' + wave);
difficultyMultiplier = 1 + (wave - 1) * 0.3;
spawnRate = Math.max(20, 60 - (wave - 1) * 3);
}
function updatePlayerMovement() {
if (keysPressed.left) {
player.x -= playerSpeed;
}
if (keysPressed.right) {
player.x += playerSpeed;
}
if (keysPressed.up) {
player.y -= playerSpeed;
}
if (keysPressed.down) {
player.y += playerSpeed;
}
if (player.x < 40) player.x = 40;
if (player.x > 2048 - 40) player.x = 2048 - 40;
if (player.y < 200) player.y = 200;
if (player.y > 2650) player.y = 2650;
}
game.move = function (x, y, obj) {
var distX = x - player.x;
var distY = y - player.y;
var distance = Math.sqrt(distX * distX + distY * distY);
if (distance > 150) {
keysPressed.up = distY < -75;
keysPressed.down = distY > 75;
keysPressed.left = distX < -75;
keysPressed.right = distX > 75;
}
// Shoot when left click is held
if (leftClickHeld && !isReloading && currentBullets > 0 && canShoot) {
var newBullet = game.addChild(new Bullet());
newBullet.x = player.x;
newBullet.y = player.y - 40;
newBullet.lastY = newBullet.y;
bullets.push(newBullet);
LK.getSound('shoot').play();
currentBullets--;
ammotTxt.setText('Ammo: ' + currentBullets + '/' + maxBullets);
canShoot = false;
LK.setTimeout(function () {
canShoot = true;
}, 100);
}
};
game.down = function (x, y, obj) {
leftClickHeld = true;
};
game.up = function (x, y, obj) {
keysPressed.up = false;
keysPressed.down = false;
keysPressed.left = false;
keysPressed.right = false;
leftClickHeld = false;
};
game.update = function () {
if (!gameActive) return;
updatePlayerMovement();
// Spawn enemies
if (LK.ticks % spawnRate === 0) {
spawnEnemy();
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.lastY === undefined) {
bullet.lastY = bullet.y;
}
// Check if bullet is off-screen
if (bullet.lastY >= -20 && bullet.y < -20) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check bullet-enemy collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
LK.getSound('hit').play();
LK.setScore(LK.getScore() + 1);
updateScore();
bullet.destroy();
bullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
break;
}
}
bullet.lastY = bullet.y;
}
// Update enemies
for (var k = enemies.length - 1; k >= 0; k--) {
var enemy = enemies[k];
if (enemy.lastY === undefined) {
enemy.lastY = enemy.y;
enemy.lastIntersecting = false;
}
// Check if enemy is off-screen (bottom)
if (enemy.lastY <= 2732 + 60 && enemy.y > 2732 + 60) {
enemy.destroy();
enemies.splice(k, 1);
continue;
}
// Check if player is in detection range
var distX = player.x - enemy.x;
var distY = player.y - enemy.y;
var distToPlayer = Math.sqrt(distX * distX + distY * distY);
if (distToPlayer < enemyDetectionRange) {
enemy.isChasing = true;
}
// Chase player if detected
if (enemy.isChasing) {
var chaseSpeed = 3 + difficultyMultiplier * 0.5;
if (distX < 0) enemy.x -= chaseSpeed;else if (distX > 0) enemy.x += chaseSpeed;
if (distY < 0) enemy.y -= chaseSpeed;else if (distY > 0) enemy.y += chaseSpeed;
}
// Check player-enemy collision
var currentIntersecting = enemy.intersects(player);
if (!enemy.lastIntersecting && currentIntersecting) {
gameActive = false;
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
return;
}
enemy.lastY = enemy.y;
enemy.lastIntersecting = currentIntersecting;
}
// Handle reload
if (currentBullets === 0 && !isReloading) {
isReloading = true;
ammotTxt.setText('RELOADING...');
LK.setTimeout(function () {
isReloading = false;
currentBullets = maxBullets;
ammotTxt.setText('Ammo: ' + currentBullets + '/' + maxBullets);
}, reloadTime);
}
};
LK.playMusic('bgmusic', {
loop: true
});
can you make it a real life bullet. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
can you make the enemy a real life human. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
make it a real life gun. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
make him a guard covering his body to only see his eyes. In-Game asset. 2d. High contrast. No shadows