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); // Pick a random color asset for this civilian var civAssetIdx = 1 + Math.floor(Math.random() * 6); var civAssetName = 'civilian' + civAssetIdx; self.asset = self.attachAsset(civAssetName, { anchorX: 0.5, anchorY: 0.5 }); self.asset.alpha = 0.7; // Add 'npc' label above the civilian self.npcLabel = new Text2('npc', { size: 38, fill: 0xFFFFFF }); self.npcLabel.anchor.set(0.5, 1); self.npcLabel.y = -40; self.addChild(self.npcLabel); self.speed = 2 + Math.random() * 2; 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; // Police shooters do not target the player anymore self.target = null; 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; } // Police shooters do not fire at the player anymore }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ // No title, no description // Always backgroundColor is black backgroundColor: 0x000000 }); /**** * Game Code ****/ // --- City Map Setup --- // City block (road) - gray box // Building - blue box // Player (hero) - red ellipse // Car - yellow box // Police car - white box with blue // Mission marker - green ellipse var cityCols = 9; var cityRows = 13; 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 center of the world var player = new Player(); player.x = cityOffsetX + Math.floor(cityCols / 2) * blockSize + blockSize / 2; player.y = cityOffsetY + Math.floor(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 do not chase the player anymore police.target = null; 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); // --- Money on ground --- var moneyPickups = []; function spawnMoney(x, y) { var m = new Container(); m.asset = m.attachAsset('mission', { anchorX: 0.5, anchorY: 0.5 }); m.x = x; m.y = y; m.value = 50; moneyPickups.push(m); game.addChild(m); return m; } // Place 15 money pickups at random road blocks for (var i = 0; i < 15; i++) { var roadBlocks = []; for (var j = 0; j < cityBlocks.length; j++) { if (cityBlocks[j].type === 'road') roadBlocks.push(cityBlocks[j]); } if (roadBlocks.length > 0) { var idx = Math.floor(Math.random() * roadBlocks.length); var b = roadBlocks[idx]; var mx = b.x + (Math.random() - 0.5) * (blockSize - 100); var my = b.y + (Math.random() - 0.5) * (blockSize - 100); spawnMoney(mx, my); } } // --- 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; // Money system var playerMoney = 0; var moneyTxt = new Text2('₺ 0', { size: 70, fill: 0x44FF44 }); moneyTxt.anchor.set(0, 0); moneyTxt.x = 100; moneyTxt.y = 90; LK.gui.addChild(moneyTxt); 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); } function updateMoneyDisplay() { moneyTxt.setText('₺ ' + playerMoney); } 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); // No police aggro or wanted level increase when shooting police } // --- 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]; // Police patrol logic: move randomly on roads if not chasing if (!policeAggro) { if (typeof police.patrolTarget === "undefined" || !police.patrolTarget) { // Pick a random road block as patrol target var roadBlocks = []; for (var k = 0; k < cityBlocks.length; k++) { if (cityBlocks[k].type === 'road') roadBlocks.push(cityBlocks[k]); } if (roadBlocks.length > 0) { var idx = Math.floor(Math.random() * roadBlocks.length); police.patrolTarget = { x: roadBlocks[idx].x + (Math.random() - 0.5) * 100, y: roadBlocks[idx].y + (Math.random() - 0.5) * 100 }; } } if (police.patrolTarget) { var dx = police.patrolTarget.x - police.x; var dy = police.patrolTarget.y - police.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 10) { police.direction = Math.atan2(dy, dx); police.speed = police.maxSpeed * 0.5; police.x += Math.cos(police.direction) * police.speed; police.y += Math.sin(police.direction) * police.speed; } else { // Arrived at patrol target, pick a new one next frame police.patrolTarget = null; police.speed = 0; } } } else { police.update(); } // Clamp police to road if (!isOnRoad(police.x, police.y)) { police.speed = 0; } // Police catch player // (Disabled: police do not kill the player anymore) // var target = police.target; // if (policeAggro && 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; } // Remove all logic for shooting and killing police cars and shooters } // 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--; if (typeof policeHitCount === "undefined") policeHitCount = 0; policeHitCount++; updateHealthDisplay(); b.destroy(); policeBullets.splice(i, 1); if (policeHitCount >= 5) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } if (playerHealth <= 0) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } } // Player update player.update(); // Civilians update and check for being shot by player for (var i = civilians.length - 1; i >= 0; i--) { var civ = civilians[i]; civ.update(); // Check if hit by any player bullet for (var j = bullets.length - 1; j >= 0; j--) { var b = bullets[j]; if (Math.abs(civ.x - b.x) < 60 && Math.abs(civ.y - b.y) < 60) { // Civilian killed // Drop money at civilian's position spawnMoney(civ.x, civ.y); // Respawn civilian at random road block var roadBlocks = []; for (var k = 0; k < cityBlocks.length; k++) { if (cityBlocks[k].type === 'road') roadBlocks.push(cityBlocks[k]); } if (roadBlocks.length > 0) { var idx = Math.floor(Math.random() * roadBlocks.length); var newCiv = new Civilian(); newCiv.x = roadBlocks[idx].x + (Math.random() - 0.5) * 100; newCiv.y = roadBlocks[idx].y + (Math.random() - 0.5) * 100; civilians.push(newCiv); game.addChild(newCiv); } civ.destroy(); civilians.splice(i, 1); b.destroy(); bullets.splice(j, 1); addScore(10); break; } } } // Money pickup check var px = player.inCar ? player.inCar.x : player.x; var py = player.inCar ? player.inCar.y : player.y; for (var i = moneyPickups.length - 1; i >= 0; i--) { var m = moneyPickups[i]; if (Math.abs(m.x - px) < 60 && Math.abs(m.y - py) < 60) { playerMoney += m.value; updateMoneyDisplay(); m.destroy(); moneyPickups.splice(i, 1); } } // 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(); playerMoney = 0; updateMoneyDisplay(); policeAggro = false; var policeHitCount = 0; ; ;
===================================================================
--- original.js
+++ change.js
@@ -594,10 +594,40 @@
}
// Police movement
for (var i = 0; i < policeCars.length; i++) {
var police = policeCars[i];
- // Only chase if aggro is true (player shot at police)
- if (policeAggro) {
+ // Police patrol logic: move randomly on roads if not chasing
+ if (!policeAggro) {
+ if (typeof police.patrolTarget === "undefined" || !police.patrolTarget) {
+ // Pick a random road block as patrol target
+ var roadBlocks = [];
+ for (var k = 0; k < cityBlocks.length; k++) {
+ if (cityBlocks[k].type === 'road') roadBlocks.push(cityBlocks[k]);
+ }
+ if (roadBlocks.length > 0) {
+ var idx = Math.floor(Math.random() * roadBlocks.length);
+ police.patrolTarget = {
+ x: roadBlocks[idx].x + (Math.random() - 0.5) * 100,
+ y: roadBlocks[idx].y + (Math.random() - 0.5) * 100
+ };
+ }
+ }
+ if (police.patrolTarget) {
+ var dx = police.patrolTarget.x - police.x;
+ var dy = police.patrolTarget.y - police.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist > 10) {
+ police.direction = Math.atan2(dy, dx);
+ police.speed = police.maxSpeed * 0.5;
+ police.x += Math.cos(police.direction) * police.speed;
+ police.y += Math.sin(police.direction) * police.speed;
+ } else {
+ // Arrived at patrol target, pick a new one next frame
+ police.patrolTarget = null;
+ police.speed = 0;
+ }
+ }
+ } else {
police.update();
}
// Clamp police to road
if (!isOnRoad(police.x, police.y)) {
@@ -676,8 +706,23 @@
for (var j = bullets.length - 1; j >= 0; j--) {
var b = bullets[j];
if (Math.abs(civ.x - b.x) < 60 && Math.abs(civ.y - b.y) < 60) {
// Civilian killed
+ // Drop money at civilian's position
+ spawnMoney(civ.x, civ.y);
+ // Respawn civilian at random road block
+ var roadBlocks = [];
+ for (var k = 0; k < cityBlocks.length; k++) {
+ if (cityBlocks[k].type === 'road') roadBlocks.push(cityBlocks[k]);
+ }
+ if (roadBlocks.length > 0) {
+ var idx = Math.floor(Math.random() * roadBlocks.length);
+ var newCiv = new Civilian();
+ newCiv.x = roadBlocks[idx].x + (Math.random() - 0.5) * 100;
+ newCiv.y = roadBlocks[idx].y + (Math.random() - 0.5) * 100;
+ civilians.push(newCiv);
+ game.addChild(newCiv);
+ }
civ.destroy();
civilians.splice(i, 1);
b.destroy();
bullets.splice(j, 1);