User prompt
Npcler ölünce yeniden doğusun polisler dolaşsın yerden para toplıyalım npc leri öldürünce para düşsün
User prompt
Polisler bizi kovalamasın biz npc leri öldürelim
User prompt
Polisler bize ateş etmesin
User prompt
Polislerbizi öldürmesin yerlerde para olsun
User prompt
Polisler doğudumuzda gelmesin
User prompt
Biz dünyanın ortasında olalım polisler bize ateş etsin polisler bize 5 kez ateş ederse
User prompt
Diğer insanların üstünde npc yazsın
User prompt
Ve diğer insanlar yavaş yürüsün ve bir polis ölünce yeni polis doğusun ve harita büyük olsun yerde para olun cn barımızın altında para barımız olsun yerdeki paraları alınca para barına artı 50 para gelsin polis öldürünce yıldızlar artsın
User prompt
Oyundaki insanların renkleri farklı olsun hepsininki
User prompt
Oyundaki diğer insanlar farklı renkte olsun polislerin bizi kovalaması için onlara ateş etmemiz gereksin
User prompt
Oyunda ki en büyük hata doğudumuz an polis bizi öldürüyor bu olmasın başka insanlar olsun can barımız sol üst köşede olsun
User prompt
Silahımız olsun ekranın neresine tıklarsak oraya ateş etsin polisin bizi kovalaması için ona ateş etmemiz gereksin ve 5 canımız olsun polise her ateş ettiğimizde yeni polis arabayla gelsin ve arabadan inip bize ateş etsin polisten kaçmak için ateş etmememiz gerekiyor
Code edit (1 edits merged)
Please save this source code
User prompt
Mini City Heist
Initial prompt
GTA 6 ya benziyen oyun yap pls
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('mission', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 48;
self.dir = 0;
self.owner = null; // 'player' or 'police'
self.update = function () {
self.x += Math.cos(self.dir) * self.speed;
self.y += Math.sin(self.dir) * self.speed;
};
return self;
});
// Car (stealable)
var Car = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.maxSpeed = 24;
self.direction = 0; // radians
self.driver = null; // player if inside
self.isPolice = false;
self.update = function () {
if (self.driver) {
// Move in direction
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
}
};
return self;
});
// CityBlock: road or building
var CityBlock = Container.expand(function () {
var self = Container.call(this);
self.type = 'road'; // or 'building'
self.setType = function (type) {
self.type = type;
if (self.asset) {
self.removeChild(self.asset);
}
if (type === 'road') {
self.asset = self.attachAsset('road', {
anchorX: 0.5,
anchorY: 0.5
});
} else {
self.asset = self.attachAsset('building', {
anchorX: 0.5,
anchorY: 0.5
});
}
};
return self;
});
var Civilian = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.asset.alpha = 0.5;
self.speed = 8 + Math.random() * 8;
self.direction = Math.random() * Math.PI * 2;
self.update = function () {
// Move in direction, bounce off buildings
var nx = self.x + Math.cos(self.direction) * self.speed;
var ny = self.y + Math.sin(self.direction) * self.speed;
var onRoad = false;
for (var i = 0; i < cityBlocks.length; i++) {
var b = cityBlocks[i];
if (b.type === 'road') {
var left = b.x - blockSize / 2;
var right = b.x + blockSize / 2;
var top = b.y - blockSize / 2;
var bottom = b.y + blockSize / 2;
if (nx >= left && nx <= right && ny >= top && ny <= bottom) {
onRoad = true;
break;
}
}
}
if (onRoad) {
self.x = nx;
self.y = ny;
} else {
self.direction = Math.random() * Math.PI * 2;
}
};
return self;
});
// Spawn 6 civilians at random road blocks (not near player or police)
// Mission marker
var Mission = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('mission', {
anchorX: 0.5,
anchorY: 0.5
});
self.active = true;
return self;
});
// Player character
var Player = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 16;
self.inCar = null; // reference to car if inside
self.direction = 0; // radians, 0 = right
self.update = function () {
// If in car, follow car
if (self.inCar) {
self.x = self.inCar.x;
self.y = self.inCar.y;
self.visible = false;
} else {
self.visible = true;
}
};
return self;
});
// Police car
var PoliceCar = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('police', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
self.maxSpeed = 20;
self.direction = 0;
self.target = null; // player or car
self.isPolice = true;
self.update = function () {
if (self.target) {
// Simple chase logic
var dx = self.target.x - self.x;
var dy = self.target.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 10) {
self.direction = Math.atan2(dy, dx);
self.speed = self.maxSpeed;
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
} else {
self.speed = 0;
}
}
};
return self;
});
// Police shooter class (policeman on foot)
var PoliceShooter = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('police', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 12;
self.target = player;
self.lastShotTick = 0;
self.update = function () {
// Move toward player
var dx = self.target.x - self.x;
var dy = self.target.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 120) {
self.x += dx / dist * self.speed;
self.y += dy / dist * self.speed;
}
// Shoot at player every 40 ticks if close enough
if (dist < 600 && LK.ticks - self.lastShotTick > 40) {
var b = new Bullet();
b.x = self.x;
b.y = self.y;
b.dir = Math.atan2(dy, dx);
b.owner = 'police';
policeBullets.push(b);
game.addChild(b);
self.lastShotTick = LK.ticks;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
// No title, no description
// Always backgroundColor is black
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Mission marker - green ellipse
// Police car - white box with blue
// Car - yellow box
// Player (hero) - red ellipse
// Building - blue box
// City block (road) - gray box
// --- City Map Setup ---
var cityCols = 5;
var cityRows = 7;
var blockSize = 400;
var cityBlocks = [];
var cityOffsetX = (2048 - cityCols * blockSize) / 2;
var cityOffsetY = (2732 - cityRows * blockSize) / 2;
// Generate city grid: roads and buildings
for (var row = 0; row < cityRows; row++) {
for (var col = 0; col < cityCols; col++) {
var block = new CityBlock();
// Make a cross pattern of roads, rest buildings
if (row === Math.floor(cityRows / 2) || col === Math.floor(cityCols / 2)) {
block.setType('road');
} else {
block.setType('building');
}
block.x = cityOffsetX + col * blockSize + blockSize / 2;
block.y = cityOffsetY + row * blockSize + blockSize / 2;
cityBlocks.push(block);
game.addChild(block);
}
}
// --- Player Setup ---
// Spawn player at bottom center road, away from police
var player = new Player();
player.x = cityOffsetX + Math.floor(cityCols / 2) * blockSize + blockSize / 2;
player.y = cityOffsetY + (cityRows - 2) * blockSize + blockSize / 2;
game.addChild(player);
// --- Civilians Setup ---
var civilians = [];
// Spawn 6 civilians at random road blocks (not near player or police)
for (var i = 0; i < 6; i++) {
var roadBlocks = [];
for (var j = 0; j < cityBlocks.length; j++) {
var b = cityBlocks[j];
if (b.type === 'road') {
// Avoid spawn near player or police
var distToPlayer = Math.sqrt(Math.pow(b.x - player.x, 2) + Math.pow(b.y - player.y, 2));
var distToPolice = Math.sqrt(Math.pow(b.x - (cityOffsetX + blockSize / 2), 2) + Math.pow(b.y - (cityOffsetY + blockSize / 2), 2));
if (distToPlayer > 400 && distToPolice > 400) {
roadBlocks.push(b);
}
}
}
if (roadBlocks.length > 0) {
var idx = Math.floor(Math.random() * roadBlocks.length);
var civ = new Civilian();
civ.x = roadBlocks[idx].x + (Math.random() - 0.5) * 100;
civ.y = roadBlocks[idx].y + (Math.random() - 0.5) * 100;
civilians.push(civ);
game.addChild(civ);
}
}
// --- Cars Setup ---
var cars = [];
function spawnCar(x, y) {
var car = new Car();
car.x = x;
car.y = y;
car.direction = Math.random() * Math.PI * 2;
cars.push(car);
game.addChild(car);
return car;
}
// Place a few cars on roads
for (var i = 0; i < 4; i++) {
var col = Math.floor(cityCols / 2);
var row = 1 + i;
var x = cityOffsetX + col * blockSize + blockSize / 2;
var y = cityOffsetY + row * blockSize + blockSize / 2;
spawnCar(x, y);
}
// --- Police Setup ---
var policeCars = [];
function spawnPolice(x, y) {
var police = new PoliceCar();
police.x = x;
police.y = y;
police.direction = 0;
police.target = player;
policeCars.push(police);
game.addChild(police);
return police;
}
// Start with one police car
var policeStartX = cityOffsetX + blockSize / 2;
var policeStartY = cityOffsetY + blockSize / 2;
spawnPolice(policeStartX, policeStartY);
// --- Mission Setup ---
var mission = new Mission();
mission.x = cityOffsetX + (cityCols - 1) * blockSize + blockSize / 2;
mission.y = cityOffsetY + (cityRows - 1) * blockSize + blockSize / 2;
game.addChild(mission);
// --- Score and Wanted Level ---
var score = 0;
var wantedLevel = 1; // 1-5
var scoreTxt = new Text2('Score: 0', {
size: 90,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var wantedTxt = new Text2('★', {
size: 80,
fill: "#ff0"
});
wantedTxt.anchor.set(0.5, 0);
LK.gui.topRight.addChild(wantedTxt);
// --- Timer ---
var timeLeft = 60; // seconds
var timerTxt = new Text2('60', {
size: 80,
fill: "#fff"
});
timerTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(timerTxt);
// --- Touch Controls ---
var dragDir = null; // {dx,dy}
var dragStart = null;
var dragNode = null;
var lastTouchX = 0,
lastTouchY = 0;
// --- Shooting & Health ---
var bullets = [];
var policeBullets = [];
var playerHealth = 5;
var healthTxt = new Text2('♥♥♥♥♥', {
size: 80,
fill: 0xFF4444
});
healthTxt.anchor.set(0, 0); // anchor top left
// Place health bar at (100,0) to avoid platform menu
healthTxt.x = 100;
healthTxt.y = 0;
LK.gui.addChild(healthTxt);
// Track if police are aggressive (chasing) or passive
var policeAggro = false;
// Helper to update health display
function updateHealthDisplay() {
var hearts = '';
for (var i = 0; i < playerHealth; i++) hearts += '♥';
healthTxt.setText(hearts);
}
var policeShooters = [];
// --- Helper Functions ---
function isOnRoad(x, y) {
// Returns true if (x,y) is on a road block
for (var i = 0; i < cityBlocks.length; i++) {
var b = cityBlocks[i];
if (b.type === 'road') {
var left = b.x - blockSize / 2;
var right = b.x + blockSize / 2;
var top = b.y - blockSize / 2;
var bottom = b.y + blockSize / 2;
if (x >= left && x <= right && y >= top && y <= bottom) {
return true;
}
}
}
return false;
}
function clampToRoad(x, y) {
// Snap to nearest road block center if not on road
var minDist = 99999,
best = null;
for (var i = 0; i < cityBlocks.length; i++) {
var b = cityBlocks[i];
if (b.type === 'road') {
var dx = b.x - x;
var dy = b.y - y;
var d = dx * dx + dy * dy;
if (d < minDist) {
minDist = d;
best = b;
}
}
}
if (best) return {
x: best.x,
y: best.y
};
return {
x: x,
y: y
};
}
function updateWantedDisplay() {
var stars = '';
for (var i = 0; i < wantedLevel; i++) stars += '★';
wantedTxt.setText(stars);
}
function addScore(amt) {
score += amt;
scoreTxt.setText('Score: ' + score);
LK.setScore(score);
}
function resetMission() {
// Place mission at random road block
var roadBlocks = [];
for (var i = 0; i < cityBlocks.length; i++) {
if (cityBlocks[i].type === 'road') roadBlocks.push(cityBlocks[i]);
}
var idx = Math.floor(Math.random() * roadBlocks.length);
mission.x = roadBlocks[idx].x;
mission.y = roadBlocks[idx].y;
mission.active = true;
mission.visible = true;
}
// --- Game Touch Controls ---
// Drag to move (swipe in direction to move)
game.down = function (x, y, obj) {
// Don't allow drag from top left 100x100
if (x < 100 && y < 100) return;
// --- SHOOTING LOGIC ---
// If not dragging, treat as tap to shoot
if (!dragNode && !dragDir) {
// Player shoots toward (x, y)
var b = new Bullet();
b.x = player.inCar ? player.inCar.x : player.x;
b.y = player.inCar ? player.inCar.y : player.y;
b.dir = Math.atan2(y - b.y, x - b.x);
b.owner = 'player';
bullets.push(b);
game.addChild(b);
// If bullet would hit a police car or shooter, aggro police and spawn new police
var hitPolice = false;
for (var i = 0; i < policeCars.length; i++) {
var pc = policeCars[i];
var dx = pc.x - b.x;
var dy = pc.y - b.y;
if (Math.abs(dx) < 100 && Math.abs(dy) < 60) {
hitPolice = true;
break;
}
}
for (var i = 0; i < policeShooters.length; i++) {
var ps = policeShooters[i];
var dx = ps.x - b.x;
var dy = ps.y - b.y;
if (Math.abs(dx) < 80 && Math.abs(dy) < 80) {
hitPolice = true;
break;
}
}
if (hitPolice) {
policeAggro = true;
// All police target player or player's car
for (var i = 0; i < policeCars.length; i++) {
policeCars[i].target = player.inCar ? player.inCar : player;
}
// Spawn new police car and shooter at random road
var roadBlocks = [];
for (var i = 0; i < cityBlocks.length; i++) {
if (cityBlocks[i].type === 'road') roadBlocks.push(cityBlocks[i]);
}
var idx = Math.floor(Math.random() * roadBlocks.length);
var bblock = roadBlocks[idx];
var newPolice = spawnPolice(bblock.x, bblock.y);
// Spawn police shooter next to car
var shooter = new PoliceShooter();
shooter.x = bblock.x + 80;
shooter.y = bblock.y;
policeShooters.push(shooter);
game.addChild(shooter);
}
}
// --- DRAG LOGIC (movement) ---
dragStart = {
x: x,
y: y
};
lastTouchX = x;
lastTouchY = y;
dragDir = null;
dragNode = player;
};
game.move = function (x, y, obj) {
if (!dragNode) return;
var dx = x - dragStart.x;
var dy = y - dragStart.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 30) {
dragDir = {
dx: dx,
dy: dy
};
}
lastTouchX = x;
lastTouchY = y;
};
game.up = function (x, y, obj) {
dragNode = null;
dragDir = null;
dragStart = null;
};
// Tap on car to enter/exit
game.on('down', function (x, y, obj) {
// If player is not in car, check if tap is on car
if (!player.inCar) {
for (var i = 0; i < cars.length; i++) {
var car = cars[i];
var dx = car.x - x;
var dy = car.y - y;
if (Math.abs(dx) < 80 && Math.abs(dy) < 50) {
// Enter car
if (Math.abs(player.x - car.x) < 100 && Math.abs(player.y - car.y) < 100) {
player.inCar = car;
car.driver = player;
car.speed = car.maxSpeed;
car.direction = 0;
// Increase wanted level
wantedLevel = Math.min(5, wantedLevel + 1);
updateWantedDisplay();
// Police target car
for (var j = 0; j < policeCars.length; j++) {
policeCars[j].target = car;
}
}
}
}
} else {
// Exit car
var car = player.inCar;
player.inCar = null;
car.driver = null;
car.speed = 0;
// Place player next to car
player.x = car.x + 80;
player.y = car.y;
// Police target player
for (var j = 0; j < policeCars.length; j++) {
policeCars[j].target = player;
}
}
});
// --- Game Update Loop ---
game.update = function () {
// Timer
if (LK.ticks % 60 === 0 && timeLeft > 0) {
timeLeft--;
timerTxt.setText(timeLeft + '');
if (timeLeft === 0) {
LK.showGameOver();
return;
}
}
// Player movement
if (!player.inCar && dragDir) {
// Move player in drag direction, but only on road
var angle = Math.atan2(dragDir.dy, dragDir.dx);
var nx = player.x + Math.cos(angle) * player.speed;
var ny = player.y + Math.sin(angle) * player.speed;
if (isOnRoad(nx, ny)) {
player.x = nx;
player.y = ny;
}
}
// Car movement (if player in car)
for (var i = 0; i < cars.length; i++) {
var car = cars[i];
car.update();
// Clamp car to road
if (car.driver) {
if (!isOnRoad(car.x, car.y)) {
// Stop car at edge
car.speed = 0;
}
}
}
// Police movement
for (var i = 0; i < policeCars.length; i++) {
var police = policeCars[i];
// Only chase if aggro or wantedLevel > 1
if (policeAggro || wantedLevel > 1) {
police.update();
}
// Clamp police to road
if (!isOnRoad(police.x, police.y)) {
police.speed = 0;
}
// Police catch player
var target = police.target;
if (target && Math.abs(police.x - target.x) < 80 && Math.abs(police.y - target.y) < 80) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Police shooters update
for (var i = policeShooters.length - 1; i >= 0; i--) {
var shooter = policeShooters[i];
shooter.update();
// Remove if off map
if (shooter.x < 0 || shooter.x > 2048 || shooter.y < 0 || shooter.y > 2732) {
shooter.destroy();
policeShooters.splice(i, 1);
}
}
// Bullets update (player)
for (var i = bullets.length - 1; i >= 0; i--) {
var b = bullets[i];
b.update();
// Remove if off screen
if (b.x < 0 || b.x > 2048 || b.y < 0 || b.y > 2732) {
b.destroy();
bullets.splice(i, 1);
continue;
}
// Check hit police car
for (var j = 0; j < policeCars.length; j++) {
var pc = policeCars[j];
if (Math.abs(pc.x - b.x) < 100 && Math.abs(pc.y - b.y) < 60) {
// Remove police car and bullet
pc.destroy();
policeCars.splice(j, 1);
b.destroy();
bullets.splice(i, 1);
break;
}
}
// Check hit police shooter
for (var j = 0; j < policeShooters.length; j++) {
var ps = policeShooters[j];
if (Math.abs(ps.x - b.x) < 80 && Math.abs(ps.y - b.y) < 80) {
ps.destroy();
policeShooters.splice(j, 1);
b.destroy();
bullets.splice(i, 1);
break;
}
}
}
// Bullets update (police)
for (var i = policeBullets.length - 1; i >= 0; i--) {
var b = policeBullets[i];
b.update();
// Remove if off screen
if (b.x < 0 || b.x > 2048 || b.y < 0 || b.y > 2732) {
b.destroy();
policeBullets.splice(i, 1);
continue;
}
// Check hit player
var px = player.inCar ? player.inCar.x : player.x;
var py = player.inCar ? player.inCar.y : player.y;
if (Math.abs(px - b.x) < 60 && Math.abs(py - b.y) < 60) {
playerHealth--;
updateHealthDisplay();
b.destroy();
policeBullets.splice(i, 1);
if (playerHealth <= 0) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
}
// Player update
player.update();
// Civilians update
for (var i = 0; i < civilians.length; i++) {
civilians[i].update();
}
// Mission check
if (mission.active) {
var px = player.inCar ? player.inCar.x : player.x;
var py = player.inCar ? player.inCar.y : player.y;
if (Math.abs(mission.x - px) < 80 && Math.abs(mission.y - py) < 80) {
// Complete mission
addScore(10 * wantedLevel);
mission.active = false;
mission.visible = false;
// Increase wanted level, spawn more police
wantedLevel = Math.min(5, wantedLevel + 1);
updateWantedDisplay();
if (wantedLevel > policeCars.length) {
// Spawn new police at random road
var roadBlocks = [];
for (var i = 0; i < cityBlocks.length; i++) {
if (cityBlocks[i].type === 'road') roadBlocks.push(cityBlocks[i]);
}
var idx = Math.floor(Math.random() * roadBlocks.length);
var b = roadBlocks[idx];
spawnPolice(b.x, b.y);
}
// Next mission after short delay
LK.setTimeout(function () {
resetMission();
}, 1200);
}
}
// Win condition: score >= 100
if (score >= 100) {
LK.showYouWin();
return;
}
};
// --- Start State ---
addScore(0);
updateWantedDisplay();
timerTxt.setText(timeLeft + '');
resetMission();
playerHealth = 5;
updateHealthDisplay();
policeAggro = false; ===================================================================
--- original.js
+++ change.js
@@ -65,8 +65,45 @@
}
};
return self;
});
+var Civilian = Container.expand(function () {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.asset.alpha = 0.5;
+ self.speed = 8 + Math.random() * 8;
+ self.direction = Math.random() * Math.PI * 2;
+ self.update = function () {
+ // Move in direction, bounce off buildings
+ var nx = self.x + Math.cos(self.direction) * self.speed;
+ var ny = self.y + Math.sin(self.direction) * self.speed;
+ var onRoad = false;
+ for (var i = 0; i < cityBlocks.length; i++) {
+ var b = cityBlocks[i];
+ if (b.type === 'road') {
+ var left = b.x - blockSize / 2;
+ var right = b.x + blockSize / 2;
+ var top = b.y - blockSize / 2;
+ var bottom = b.y + blockSize / 2;
+ if (nx >= left && nx <= right && ny >= top && ny <= bottom) {
+ onRoad = true;
+ break;
+ }
+ }
+ }
+ if (onRoad) {
+ self.x = nx;
+ self.y = ny;
+ } else {
+ self.direction = Math.random() * Math.PI * 2;
+ }
+ };
+ return self;
+});
+// Spawn 6 civilians at random road blocks (not near player or police)
// Mission marker
var Mission = Container.expand(function () {
var self = Container.call(this);
self.asset = self.attachAsset('mission', {
@@ -203,12 +240,38 @@
game.addChild(block);
}
}
// --- Player Setup ---
+// Spawn player at bottom center road, away from police
var player = new Player();
player.x = cityOffsetX + Math.floor(cityCols / 2) * blockSize + blockSize / 2;
-player.y = cityOffsetY + Math.floor(cityRows / 2) * blockSize + blockSize / 2;
+player.y = cityOffsetY + (cityRows - 2) * blockSize + blockSize / 2;
game.addChild(player);
+// --- Civilians Setup ---
+var civilians = [];
+// Spawn 6 civilians at random road blocks (not near player or police)
+for (var i = 0; i < 6; i++) {
+ var roadBlocks = [];
+ for (var j = 0; j < cityBlocks.length; j++) {
+ var b = cityBlocks[j];
+ if (b.type === 'road') {
+ // Avoid spawn near player or police
+ var distToPlayer = Math.sqrt(Math.pow(b.x - player.x, 2) + Math.pow(b.y - player.y, 2));
+ var distToPolice = Math.sqrt(Math.pow(b.x - (cityOffsetX + blockSize / 2), 2) + Math.pow(b.y - (cityOffsetY + blockSize / 2), 2));
+ if (distToPlayer > 400 && distToPolice > 400) {
+ roadBlocks.push(b);
+ }
+ }
+ }
+ if (roadBlocks.length > 0) {
+ var idx = Math.floor(Math.random() * roadBlocks.length);
+ var civ = new Civilian();
+ civ.x = roadBlocks[idx].x + (Math.random() - 0.5) * 100;
+ civ.y = roadBlocks[idx].y + (Math.random() - 0.5) * 100;
+ civilians.push(civ);
+ game.addChild(civ);
+ }
+}
// --- Cars Setup ---
var cars = [];
function spawnCar(x, y) {
var car = new Car();
@@ -284,10 +347,13 @@
var healthTxt = new Text2('♥♥♥♥♥', {
size: 80,
fill: 0xFF4444
});
-healthTxt.anchor.set(0.5, 0);
-LK.gui.left.addChild(healthTxt);
+healthTxt.anchor.set(0, 0); // anchor top left
+// Place health bar at (100,0) to avoid platform menu
+healthTxt.x = 100;
+healthTxt.y = 0;
+LK.gui.addChild(healthTxt);
// Track if police are aggressive (chasing) or passive
var policeAggro = false;
// Helper to update health display
function updateHealthDisplay() {
@@ -610,8 +676,12 @@
}
}
// Player update
player.update();
+ // Civilians update
+ for (var i = 0; i < civilians.length; i++) {
+ civilians[i].update();
+ }
// Mission check
if (mission.active) {
var px = player.inCar ? player.inCar.x : player.x;
var py = player.inCar ? player.inCar.y : player.y;