User prompt
Make GUI's Bigger
User prompt
Make GUI' bigger
User prompt
Make GUI's Bigger
User prompt
Gangsters Will Be Spawning Randomly
User prompt
Gangsters will not spawning in the trees
User prompt
No One Should Be Created Inside Trees
User prompt
Do not pass through trees and barriers
User prompt
Add The Background İn Music Files İn The "Background" Music
User prompt
Rewrite text pixel art style
User prompt
Add GUİ pixel art style
User prompt
Let it say on the screen how many lives we have left
User prompt
make a life sytem
User prompt
Let the screen show how many lives we have left
User prompt
change the image of hearts to the image of the Heart file in the files
User prompt
make lives as heart indicator
User prompt
make a life system
User prompt
replace street lights with a tree
User prompt
only 1 cars are ruined
User prompt
only 3 cars are ruined
User prompt
reduce the intensity of street lights
User prompt
reduce the intensity of street lights
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BurningCar = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('burningCar', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Gangster = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('gangster', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.shootTimer = 0;
self.shootInterval = 90 + Math.random() * 60;
self.targetX = player.x;
self.targetY = player.y;
self.update = function () {
// Move toward player
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 5) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
// Shooting logic
self.shootTimer++;
if (self.shootTimer >= self.shootInterval) {
self.shootTimer = 0;
var bullet = new GangsterBullet();
bullet.x = self.x;
bullet.y = self.y;
bullet.lastY = bullet.y;
bullet.lastIntersecting = false;
gangsterBullets.push(bullet);
game.addChild(bullet);
LK.getSound('enemyShoot').play();
}
};
return self;
});
var GangsterBullet = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('gangsterBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('policeOfficer', {
anchorX: 0.5,
anchorY: 0.5
});
self.isAlive = true;
return self;
});
var PoliceBullet = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('policeBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -15;
self.update = function () {
self.y += self.speed;
};
return self;
});
var StreetLamp = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('tree', {
anchorX: 0.5,
anchorY: 1,
scaleX: 1,
scaleY: 1
});
return self;
});
var YellowBarrier = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('yellowBarrier', {
anchorX: 0.5,
anchorY: 0.5
});
// Add black stripes
for (var i = 0; i < 5; i++) {
var stripe = LK.getAsset('yellowBarrier', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.1,
scaleY: 1,
x: -80 + i * 40,
y: 0
});
stripe.tint = 0x000000;
self.addChild(stripe);
}
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c3e50
});
/****
* Game Code
****/
// Add street background
var background = game.addChild(LK.getAsset('streetBackground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
}));
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 200;
var policeBullets = [];
var gangsterBullets = [];
var gangsters = [];
var barriers = [];
var burningCars = [];
var streetLamps = [];
var waveTimer = 0;
var spawnTimer = 0;
var difficulty = 1;
var dragNode = null;
var currentWave = 1;
var gangstersToSpawn = 3;
var gangstersSpawned = 0;
var waveInProgress = false;
var waveCompleted = false;
var waveCompletionTimer = 0;
var gameState = 'menu'; // 'menu', 'playing', 'paused'
var menuContainer = null;
var titleText = null;
var playButton = null;
var instructionsText = null;
var playerLives = 3;
var maxLives = 3;
// Create barriers
for (var i = 0; i < 4; i++) {
var barrier = new YellowBarrier();
barrier.x = 400 + i * 400;
barrier.y = 1500;
barriers.push(barrier);
game.addChild(barrier);
}
// Create street lamps positioned on the road sides
var lampPositions = [];
// Left side of the road
for (var i = 0; i < 8; i++) {
lampPositions.push({
x: 200,
y: 300 + i * 300
});
}
// Right side of the road
for (var i = 0; i < 8; i++) {
lampPositions.push({
x: 1848,
y: 300 + i * 300
});
}
for (var i = 0; i < lampPositions.length; i++) {
var lamp = new StreetLamp();
lamp.x = lampPositions[i].x;
lamp.y = lampPositions[i].y;
streetLamps.push(lamp);
game.addChild(lamp);
}
// Create burning cars with distant random distribution
var carPositions = [];
for (var i = 0; i < 1; i++) {
var burningCar = new BurningCar();
var validPosition = false;
var attempts = 0;
// Keep trying until we find a position that's far enough from other cars
while (!validPosition && attempts < 50) {
burningCar.x = 200 + Math.random() * 1648; // Random X position across street width
burningCar.y = 400 + Math.random() * 1000; // Random Y position in middle area
// Ensure cars don't spawn too close to barriers (around y=1500)
if (burningCar.y > 1350 && burningCar.y < 1650) {
burningCar.y = burningCar.y < 1500 ? 1250 : 1750;
}
// Check distance from other cars (minimum 400 pixels apart)
validPosition = true;
for (var j = 0; j < carPositions.length; j++) {
var dx = burningCar.x - carPositions[j].x;
var dy = burningCar.y - carPositions[j].y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 400) {
validPosition = false;
break;
}
}
attempts++;
}
// Store position for distance checking
carPositions.push({
x: burningCar.x,
y: burningCar.y
});
burningCars.push(burningCar);
game.addChild(burningCar);
}
// Score display - pixel art style
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF,
font: "monospace"
});
scoreTxt.anchor.set(0.5, 0);
// Wave display - pixel art style
var waveTxt = new Text2('Wave: 1', {
size: 70,
fill: 0xFFFF00,
font: "monospace"
});
waveTxt.anchor.set(0.5, 0);
waveTxt.y = 120;
// Lives display with hearts
var heartsContainer = new Container();
var hearts = [];
var livesText = new Text2('Lives: 3', {
size: 60,
fill: 0xFFFFFF,
font: "monospace"
});
livesText.anchor.set(0.5, 0);
livesText.y = 250;
// Create main menu
createMainMenu();
function createHeartsDisplay() {
// Clear existing hearts
for (var i = 0; i < hearts.length; i++) {
hearts[i].destroy();
}
hearts = [];
// Create hearts based on current lives
for (var i = 0; i < playerLives; i++) {
var heart = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5,
x: i * 100,
y: 0
});
hearts.push(heart);
heartsContainer.addChild(heart);
}
// Position hearts container
heartsContainer.x = 2048 / 2 - (playerLives - 1) * 100 / 2;
heartsContainer.y = 200;
// Update lives text
livesText.setText('Lives: ' + playerLives);
}
function createMainMenu() {
// Create menu container
menuContainer = new Container();
game.addChild(menuContainer);
// Create semi-transparent background overlay
var overlay = LK.getAsset('yellowBarrier', {
anchorX: 0,
anchorY: 0,
scaleX: 8,
scaleY: 26,
x: 0,
y: 0
});
overlay.tint = 0x000000;
overlay.alpha = 0.7;
menuContainer.addChild(overlay);
// Create title using streetbattle image
titleText = LK.getAsset('streetbattle', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 800,
scaleX: 7.5,
scaleY: 7.5
});
menuContainer.addChild(titleText);
// Create play button using image asset
playButton = game.addChild(LK.getAsset('play', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 1200,
scaleX: 1,
scaleY: 1
}));
menuContainer.addChild(playButton);
// Create instructions text - pixel art style
instructionsText = new Text2('Drag to move and shoot\nDefeat all gangsters to advance waves', {
size: 70,
fill: 0xFFFFFF,
font: "monospace"
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 2048 / 2;
instructionsText.y = 1500;
menuContainer.addChild(instructionsText);
// Add click handler for play button
playButton.down = function (x, y, obj) {
startGame();
};
}
function startGame() {
// Remove menu
if (menuContainer) {
menuContainer.destroy();
menuContainer = null;
}
// Set game state to playing
gameState = 'playing';
// Reset player lives
playerLives = maxLives;
player.isAlive = true;
// Show UI elements - unified score display
scoreTxt.setText('Score: ' + LK.getScore());
createHeartsDisplay();
LK.gui.top.addChild(scoreTxt);
LK.gui.top.addChild(waveTxt);
LK.gui.top.addChild(heartsContainer);
LK.gui.top.addChild(livesText);
// Initialize wave system
startWave();
// Play background music
LK.playMusic('Background');
}
function startWave() {
waveInProgress = true;
waveCompleted = false;
waveCompletionTimer = 0;
gangstersSpawned = 0;
gangstersToSpawn = 2 + currentWave * 2; // More gangsters each wave
difficulty = Math.floor(currentWave / 2) + 1; // Difficulty increases every 2 waves
waveTxt.setText('Wave: ' + currentWave);
}
function spawnGangster() {
var gangster = new Gangster();
var validPosition = false;
var attempts = 0;
// Keep trying until we find a position that doesn't intersect with trees
while (!validPosition && attempts < 50) {
// Random spawn position from top and sides
var spawnSide = Math.random();
if (spawnSide < 0.5) {
// Spawn from top
gangster.x = Math.random() * 1800 + 124;
gangster.y = 100;
} else if (spawnSide < 0.75) {
// Spawn from left
gangster.x = 100;
gangster.y = Math.random() * 1000 + 200;
} else {
// Spawn from right
gangster.x = 1948;
gangster.y = Math.random() * 1000 + 200;
}
// Check if gangster intersects with any street lamps (trees)
validPosition = true;
for (var i = 0; i < streetLamps.length; i++) {
if (gangster.intersects(streetLamps[i])) {
validPosition = false;
break;
}
}
attempts++;
}
gangster.targetX = player.x;
gangster.targetY = player.y;
gangster.lastIntersecting = false;
gangsters.push(gangster);
game.addChild(gangster);
gangstersSpawned++;
}
function handleMove(x, y, obj) {
if (dragNode && dragNode.isAlive) {
// Store the current position
var oldX = dragNode.x;
var oldY = dragNode.y;
// Calculate the new position with bounds checking
var newX = Math.max(50, Math.min(1998, x));
var newY = Math.max(200, Math.min(2732 - 100, y));
// Temporarily move to new position to test for collisions
dragNode.x = newX;
dragNode.y = newY;
// Check collision with barriers
var hasCollision = false;
for (var i = 0; i < barriers.length; i++) {
if (dragNode.intersects(barriers[i])) {
hasCollision = true;
break;
}
}
// Check collision with burning cars
if (!hasCollision) {
for (var i = 0; i < burningCars.length; i++) {
if (dragNode.intersects(burningCars[i])) {
hasCollision = true;
break;
}
}
}
// Check collision with street lamps (trees)
if (!hasCollision) {
for (var i = 0; i < streetLamps.length; i++) {
if (dragNode.intersects(streetLamps[i])) {
hasCollision = true;
break;
}
}
}
// If there's a collision, revert to old position
if (hasCollision) {
dragNode.x = oldX;
dragNode.y = oldY;
}
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
if (gameState === 'playing' && player.isAlive) {
// Set drag node to player
dragNode = player;
handleMove(x, y, obj);
// Shoot bullet
var bullet = new PoliceBullet();
bullet.x = player.x;
bullet.y = player.y - 40;
bullet.lastY = bullet.y;
bullet.lastIntersecting = false;
policeBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
if (gameState !== 'playing' || !player.isAlive) return;
// Wave logic
if (waveInProgress) {
// Spawn gangsters for current wave
spawnTimer++;
var spawnRate = Math.max(120 - difficulty * 10, 30);
if (spawnTimer >= spawnRate && gangstersSpawned < gangstersToSpawn) {
spawnTimer = 0;
spawnGangster();
}
// Check if wave is completed (all gangsters spawned and defeated)
if (gangstersSpawned >= gangstersToSpawn && gangsters.length === 0) {
waveInProgress = false;
waveCompleted = true;
waveCompletionTimer = 0;
}
} else if (waveCompleted) {
// Wave completion pause
waveCompletionTimer++;
if (waveCompletionTimer >= 180) {
// 3 second pause
currentWave++;
startWave();
}
}
// Update police bullets
for (var i = policeBullets.length - 1; i >= 0; i--) {
var bullet = policeBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY >= 0 && bullet.y < 0) {
bullet.destroy();
policeBullets.splice(i, 1);
continue;
}
// Check collision with barriers
var hitBarrier = false;
for (var k = barriers.length - 1; k >= 0; k--) {
var barrier = barriers[k];
if (bullet.intersects(barrier)) {
// Remove bullet
bullet.destroy();
policeBullets.splice(i, 1);
hitBarrier = true;
break;
}
}
// Check collision with burning cars
if (!hitBarrier) {
for (var k = burningCars.length - 1; k >= 0; k--) {
var burningCar = burningCars[k];
if (bullet.intersects(burningCar)) {
// Remove bullet
bullet.destroy();
policeBullets.splice(i, 1);
hitBarrier = true;
break;
}
}
}
if (!hitBarrier) {
// Check collision with gangsters
var hitGangster = false;
for (var j = gangsters.length - 1; j >= 0; j--) {
var gangster = gangsters[j];
if (bullet.intersects(gangster)) {
// Hit gangster
LK.setScore(LK.getScore() + 10);
scoreTxt.setText('Score: ' + LK.getScore());
// Animate score with red pulsing effect
tween.stop(scoreTxt, {
scaleX: true,
scaleY: true,
tint: true
});
tween(scoreTxt, {
scaleX: 1.3,
scaleY: 1.3,
tint: 0xFF3333
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(scoreTxt, {
scaleX: 1,
scaleY: 1,
tint: 0xFF0000
}, {
duration: 200,
easing: tween.easeIn
});
}
});
LK.getSound('hit').play();
// Remove gangster
gangster.destroy();
gangsters.splice(j, 1);
// Remove bullet
bullet.destroy();
policeBullets.splice(i, 1);
hitGangster = true;
break;
}
}
}
if (!hitGangster) {
bullet.lastY = bullet.y;
}
}
// Update gangster bullets
for (var i = gangsterBullets.length - 1; i >= 0; i--) {
var bullet = gangsterBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY <= 2732 && bullet.y > 2732) {
bullet.destroy();
gangsterBullets.splice(i, 1);
continue;
}
// Check collision with barriers
var hitBarrier = false;
for (var k = barriers.length - 1; k >= 0; k--) {
var barrier = barriers[k];
if (bullet.intersects(barrier)) {
// Remove bullet
bullet.destroy();
gangsterBullets.splice(i, 1);
hitBarrier = true;
break;
}
}
// Check collision with burning cars
if (!hitBarrier) {
for (var k = burningCars.length - 1; k >= 0; k--) {
var burningCar = burningCars[k];
if (bullet.intersects(burningCar)) {
// Remove bullet
bullet.destroy();
gangsterBullets.splice(i, 1);
hitBarrier = true;
break;
}
}
}
if (!hitBarrier) {
// Check collision with player
if (bullet.intersects(player) && player.isAlive) {
playerLives--;
createHeartsDisplay();
// Flash screen red
LK.effects.flashScreen(0xff0000, 500);
// Remove the bullet that hit the player
bullet.destroy();
gangsterBullets.splice(i, 1);
// Check if game over (no lives left)
if (playerLives <= 0) {
player.isAlive = false;
LK.showGameOver();
return;
} else {
// Reset player position to safe area
player.x = 2048 / 2;
player.y = 2732 - 200;
// Brief invincibility period
player.alpha = 0.5;
tween(player, {
alpha: 1
}, {
duration: 1000,
easing: tween.easeOut
});
}
}
}
bullet.lastY = bullet.y;
}
// Update gangsters
for (var i = gangsters.length - 1; i >= 0; i--) {
var gangster = gangsters[i];
// Check if gangster reached player
if (gangster.intersects(player) && player.isAlive) {
playerLives--;
createHeartsDisplay();
// Flash screen red
LK.effects.flashScreen(0xff0000, 500);
// Remove the gangster that hit the player
gangster.destroy();
gangsters.splice(i, 1);
// Check if game over (no lives left)
if (playerLives <= 0) {
player.isAlive = false;
LK.showGameOver();
return;
} else {
// Reset player position to safe area
player.x = 2048 / 2;
player.y = 2732 - 200;
// Brief invincibility period
player.alpha = 0.5;
tween(player, {
alpha: 1
}, {
duration: 1000,
easing: tween.easeOut
});
}
}
// Update gangster target occasionally
if (LK.ticks % 30 === 0) {
gangster.targetX = player.x;
gangster.targetY = player.y;
}
// Increase gangster speed with difficulty
gangster.speed = 2 + difficulty * 0.5;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -225,31 +225,31 @@
game.addChild(burningCar);
}
// Score display - pixel art style
var scoreTxt = new Text2('Score: 0', {
- size: 64,
+ size: 80,
fill: 0xFFFFFF,
font: "monospace"
});
scoreTxt.anchor.set(0.5, 0);
// Wave display - pixel art style
var waveTxt = new Text2('Wave: 1', {
- size: 56,
+ size: 70,
fill: 0xFFFF00,
font: "monospace"
});
waveTxt.anchor.set(0.5, 0);
-waveTxt.y = 100;
+waveTxt.y = 120;
// Lives display with hearts
var heartsContainer = new Container();
var hearts = [];
var livesText = new Text2('Lives: 3', {
- size: 48,
+ size: 60,
fill: 0xFFFFFF,
font: "monospace"
});
livesText.anchor.set(0.5, 0);
-livesText.y = 200;
+livesText.y = 250;
// Create main menu
createMainMenu();
function createHeartsDisplay() {
// Clear existing hearts
@@ -269,9 +269,9 @@
heartsContainer.addChild(heart);
}
// Position hearts container
heartsContainer.x = 2048 / 2 - (playerLives - 1) * 100 / 2;
- heartsContainer.y = 160;
+ heartsContainer.y = 200;
// Update lives text
livesText.setText('Lives: ' + playerLives);
}
function createMainMenu() {
@@ -311,9 +311,9 @@
}));
menuContainer.addChild(playButton);
// Create instructions text - pixel art style
instructionsText = new Text2('Drag to move and shoot\nDefeat all gangsters to advance waves', {
- size: 56,
+ size: 70,
fill: 0xFFFFFF,
font: "monospace"
});
instructionsText.anchor.set(0.5, 0.5);
This is a score text . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
2d pixel art style orange bullet. In-Game asset. 2d. High contrast. No shadows
2d pixel art style blue bullet. In-Game asset. 2d. High contrast. No shadows
a black barricade with yellow lines on it but pixel art style . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
A wrecked grey car with broken windows and smoke coming from the hood but pixel art style . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
this is a tree but pixel art style. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
This is a play button. No background. Writing the Play But pixel art style Transparent background. Blank background. No shadows. 2d. In-Game asset. flat make it more animation style
this is the street wars article in the main menu but pixel art style . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Draw a Man He Have Baclava mask wearin brown shirt and blue pants He Using Gun with 2 hands in 2D Pixel Art Style and Do It from an Above Perspective.In-Game asset. 2d. High contrast. No shadows
road with yellow lines Let there be a large land area on both sides of the road but pixel art style . Bacground is green. No shadows. 2d. In-Game asset. flat