/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Car class (stealable) var Car = Container.expand(function () { var self = Container.call(this); var carSprite = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.occupied = false; // If player is in car self.isPolice = false; // Not a police car self.speed = 4 + Math.floor(Math.random() * 4); // Slower random speed for traffic self.dir = Math.random() < 0.5 ? 1 : -1; // Direction: 1=right/down, -1=left/up self.axis = Math.random() < 0.5 ? 'x' : 'y'; // Move horizontally or vertically // Update per tick self.update = function () { if (self.occupied) return; // Don't move if player is in car if (self.axis === 'x') { self.x += self.speed * self.dir; if (self.x < -200) self.x = 2048 + 200; if (self.x > 2048 + 200) self.x = -200; } else { self.y += self.speed * self.dir; if (self.y < -200) self.y = 2732 + 200; if (self.y > 2732 + 200) self.y = -200; } }; return self; }); // Gun class (for player hand) var Gun = Container.expand(function () { var self = Container.call(this); var gunSprite = self.attachAsset('gun', { anchorX: 0.1, // grip of gun in hand anchorY: 0.7 }); // Gun always follows player hand, so no update logic here return self; }); // Mission item class var MissionItem = Container.expand(function () { var self = Container.call(this); var itemSprite = self.attachAsset('missionItem', { anchorX: 0.5, anchorY: 0.5 }); self.collected = false; return self; }); // Pedestrian class var Pedestrian = Container.expand(function () { var self = Container.call(this); var pedSprite = self.attachAsset('pedestrian', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2 + Math.floor(Math.random() * 2); self.dir = Math.random() < 0.5 ? 1 : -1; self.axis = Math.random() < 0.5 ? 'x' : 'y'; self.update = function () { if (self.axis === 'x') { self.x += self.speed * self.dir; if (self.x < -100) self.x = 2048 + 100; if (self.x > 2048 + 100) self.x = -100; } else { self.y += self.speed * self.dir; if (self.y < -100) self.y = 2732 + 100; if (self.y > 2732 + 100) self.y = -100; } }; return self; }); // Player class (on foot or in car) var Player = Container.expand(function () { var self = Container.call(this); // State: 'foot' or 'car' self.mode = 'foot'; self.speed = 12; // On foot speed self.carSpeed = 24; // In car speed self.direction = { x: 0, y: 0 }; // Movement direction self.inCar = null; // Reference to car if in car // Attach player asset var playerSprite = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // Attach gun to player hand self.gun = new Gun(); self.gun.x = 40; // offset to right hand self.gun.y = 20; // offset slightly down self.addChild(self.gun); // Switch to car mode self.enterCar = function (car) { self.mode = 'car'; self.inCar = car; playerSprite.visible = false; self.gun.visible = false; car.occupied = true; self.x = car.x; self.y = car.y; }; // Exit car self.exitCar = function () { if (self.inCar) { self.inCar.occupied = false; self.x = self.inCar.x + 80; self.y = self.inCar.y; self.inCar = null; } self.mode = 'foot'; playerSprite.visible = true; self.gun.visible = true; }; // Update per tick self.update = function () { // Move player if (self.mode === 'foot') { self.x += self.direction.x * self.speed; self.y += self.direction.y * self.speed; } else if (self.mode === 'car' && self.inCar) { self.x += self.direction.x * self.carSpeed; self.y += self.direction.y * self.carSpeed; self.inCar.x = self.x; self.inCar.y = self.y; } // Clamp to city bounds if (self.x < 0) self.x = 0; if (self.x > 2048) self.x = 2048; if (self.y < 0) self.y = 0; if (self.y > 2732) self.y = 2732; }; return self; }); // Police car class var PoliceCar = Container.expand(function () { var self = Container.call(this); var policeSprite = self.attachAsset('policeCar', { anchorX: 0.5, anchorY: 0.5 }); self.occupied = false; self.isPolice = true; self.speed = 3; self.target = null; // Player to chase // Update per tick self.update = function () { if (!self.target) return; // Move towards 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 > 0) { self.x += dx / dist * self.speed; self.y += dy / dist * self.speed; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // --- City Layout --- // City block (background tile) // Road (horizontal) // Road (vertical) // Player on foot // Car (stealable) // Police car // Mission item (pickup) // Pedestrian var cityBlocks = []; var roads = []; var blockSize = 400; var roadW = 120; var cityCols = 5; var cityRows = 6; // Draw city grid (blocks and roads) for (var i = 0; i < cityCols; i++) { for (var j = 0; j < cityRows; j++) { var bx = i * blockSize; var by = j * blockSize; // Block var block = LK.getAsset('cityBlock', { x: bx, y: by, anchorX: 0, anchorY: 0 }); cityBlocks.push(block); game.addChild(block); // Horizontal road if (j < cityRows - 1) { var roadH = LK.getAsset('roadH', { x: bx, y: by + blockSize - roadW / 2, anchorX: 0, anchorY: 0.5 }); roads.push(roadH); game.addChild(roadH); } // Vertical road if (i < cityCols - 1) { var roadV = LK.getAsset('roadV', { x: bx + blockSize - roadW / 2, y: by, anchorX: 0.5, anchorY: 0 }); roads.push(roadV); game.addChild(roadV); } } } // --- Game State --- var player = new Player(); player.x = 2048 / 2; player.y = 2732 / 2; game.addChild(player); var cars = []; var policeCars = []; var pedestrians = []; var missionItems = []; var missionActive = false; var missionTarget = null; var missionTimer = null; var missionTimeLeft = 0; var missionText = null; var score = 0; var missionCollectedCount = 0; // Track how many mission items collected var missionWinCount = 6; // How many to win var scoreTxt = new Text2('0', { size: 100, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // --- Spawn cars --- for (var i = 0; i < 7; i++) { var car = new Car(); car.x = 300 + Math.random() * (2048 - 600); car.y = 300 + Math.random() * (2732 - 600); cars.push(car); game.addChild(car); } // --- Spawn police car --- var police = new PoliceCar(); police.x = 200; police.y = 200; police.target = player; policeCars.push(police); game.addChild(police); // --- Spawn pedestrians --- for (var i = 0; i < 8; i++) { var ped = new Pedestrian(); ped.x = 200 + Math.random() * (2048 - 400); ped.y = 200 + Math.random() * (2732 - 400); pedestrians.push(ped); game.addChild(ped); } // --- Mission UI --- missionText = new Text2('', { size: 80, fill: 0xFFFF00 }); missionText.anchor.set(0.5, 0); LK.gui.top.addChild(missionText); // --- Mission System --- function startMission() { // Randomly pick a block for item var col = 1 + Math.floor(Math.random() * (cityCols - 2)); var row = 1 + Math.floor(Math.random() * (cityRows - 2)); var mx = col * blockSize + blockSize / 2; var my = row * blockSize + blockSize / 2; var item = new MissionItem(); item.x = mx; item.y = my; missionItems.push(item); game.addChild(item); missionActive = true; missionTarget = item; missionTimeLeft = 20 * 60; // 20 seconds (in ticks) missionText.setText("Mission: Collect the green item!"); } function endMission(success) { missionActive = false; if (missionTarget) { missionTarget.destroy(); missionTarget = null; } for (var i = 0; i < missionItems.length; i++) { missionItems[i].destroy(); } missionItems = []; if (success) { LK.getSound('tick').play(); score += 100; scoreTxt.setText(score); missionCollectedCount++; if (missionCollectedCount >= missionWinCount) { missionText.setText("You collected all items!"); LK.effects.flashObject(player, 0x00ff00, 800); LK.setTimeout(function () { LK.showYouWin(); }, 1000); return; } missionText.setText("Success! Next mission soon..."); LK.effects.flashObject(player, 0x00ff00, 800); // Make next level harder: add another police car and increase police speed var newPolice = new PoliceCar(); newPolice.x = Math.random() * 2048; newPolice.y = Math.random() * 2732; newPolice.target = player; newPolice.speed = 3 + policeCars.length * 1; // Each level, police get a little faster policeCars.push(newPolice); game.addChild(newPolice); for (var i = 0; i < policeCars.length; i++) { policeCars[i].speed = 3 + i * 1; } LK.setTimeout(function () { missionText.setText(''); // Add more cars for next level var extraCar = new Car(); extraCar.x = 300 + Math.random() * (2048 - 600); extraCar.y = 300 + Math.random() * (2732 - 600); cars.push(extraCar); game.addChild(extraCar); // Add more pedestrians for next level var extraPed = new Pedestrian(); extraPed.x = 200 + Math.random() * (2048 - 400); extraPed.y = 200 + Math.random() * (2732 - 400); pedestrians.push(extraPed); game.addChild(extraPed); startMission(); }, 1200); } else { missionText.setText("Mission Failed!"); LK.effects.flashScreen(0xff0000, 1000); LK.setTimeout(function () { missionText.setText(''); startMission(); }, 1200); } } // Start first mission missionCollectedCount = 0; // Play car sound at game start (looping infinitely) LK.getSound('car').play({ loop: true }); // Play background music at game start (looping infinitely) LK.playMusic('BackgroundMusic', { loop: true }); startMission(); // --- Touch/Drag Controls --- var dragDir = { x: 0, y: 0 }; var dragActive = false; var dragStart = { x: 0, y: 0 }; var dragLast = { x: 0, y: 0 }; var dragThreshold = 30; // px function getDir(dx, dy) { var mag = Math.sqrt(dx * dx + dy * dy); if (mag < dragThreshold) return { x: 0, y: 0 }; return { x: dx / mag, y: dy / mag }; } game.down = function (x, y, obj) { // Don't allow drag from top left 100x100 if (x < 100 && y < 100) return; dragActive = true; dragStart.x = x; dragStart.y = y; dragLast.x = x; dragLast.y = y; }; game.move = function (x, y, obj) { if (!dragActive) return; var dx = x - dragStart.x; var dy = y - dragStart.y; dragDir = getDir(dx, dy); player.direction = dragDir; dragLast.x = x; dragLast.y = y; }; game.up = function (x, y, obj) { dragActive = false; player.direction = { x: 0, y: 0 }; }; // --- Tap to enter/exit car or collect item --- game.on('down', function (x, y, obj) { // If in car, tap to exit if (player.mode === 'car') { player.exitCar(); return; } // If near a car, enter it for (var i = 0; i < cars.length; i++) { var car = cars[i]; if (!car.occupied && player.intersects(car)) { player.enterCar(car); return; } } // If on mission item, collect // (Handled by collision in update loop now) }); // --- Game Update Loop --- game.update = function () { // Update player player.update(); // Update cars for (var i = 0; i < cars.length; i++) { cars[i].update(); } // Update police for (var i = 0; i < policeCars.length; i++) { policeCars[i].update(); } // Update pedestrians for (var i = 0; i < pedestrians.length; i++) { pedestrians[i].update(); } // Update mission timer if (missionActive) { missionTimeLeft--; if (missionTimeLeft % 60 === 0) { missionText.setText("Mission: Collect the green item! " + Math.ceil(missionTimeLeft / 60) + "s"); } if (missionTimeLeft <= 0) { endMission(false); } // Make missionItem collectable by collision if (missionTarget && player.intersects(missionTarget)) { // Instead of showing win, start next level endMission(true); return; } } // Police catch player for (var i = 0; i < policeCars.length; i++) { if (player.intersects(policeCars[i])) { LK.effects.flashScreen(0xff0000, 1000); LK.playMusic('losing', { loop: false }); LK.showGameOver(); return; } } // Collide with pedestrians (lose points) for (var i = 0; i < pedestrians.length; i++) { if (player.intersects(pedestrians[i])) { score = Math.max(0, score - 20); scoreTxt.setText(score); LK.effects.flashObject(pedestrians[i], 0xff0000, 400); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Car class (stealable)
var Car = Container.expand(function () {
var self = Container.call(this);
var carSprite = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
self.occupied = false; // If player is in car
self.isPolice = false; // Not a police car
self.speed = 4 + Math.floor(Math.random() * 4); // Slower random speed for traffic
self.dir = Math.random() < 0.5 ? 1 : -1; // Direction: 1=right/down, -1=left/up
self.axis = Math.random() < 0.5 ? 'x' : 'y'; // Move horizontally or vertically
// Update per tick
self.update = function () {
if (self.occupied) return; // Don't move if player is in car
if (self.axis === 'x') {
self.x += self.speed * self.dir;
if (self.x < -200) self.x = 2048 + 200;
if (self.x > 2048 + 200) self.x = -200;
} else {
self.y += self.speed * self.dir;
if (self.y < -200) self.y = 2732 + 200;
if (self.y > 2732 + 200) self.y = -200;
}
};
return self;
});
// Gun class (for player hand)
var Gun = Container.expand(function () {
var self = Container.call(this);
var gunSprite = self.attachAsset('gun', {
anchorX: 0.1,
// grip of gun in hand
anchorY: 0.7
});
// Gun always follows player hand, so no update logic here
return self;
});
// Mission item class
var MissionItem = Container.expand(function () {
var self = Container.call(this);
var itemSprite = self.attachAsset('missionItem', {
anchorX: 0.5,
anchorY: 0.5
});
self.collected = false;
return self;
});
// Pedestrian class
var Pedestrian = Container.expand(function () {
var self = Container.call(this);
var pedSprite = self.attachAsset('pedestrian', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2 + Math.floor(Math.random() * 2);
self.dir = Math.random() < 0.5 ? 1 : -1;
self.axis = Math.random() < 0.5 ? 'x' : 'y';
self.update = function () {
if (self.axis === 'x') {
self.x += self.speed * self.dir;
if (self.x < -100) self.x = 2048 + 100;
if (self.x > 2048 + 100) self.x = -100;
} else {
self.y += self.speed * self.dir;
if (self.y < -100) self.y = 2732 + 100;
if (self.y > 2732 + 100) self.y = -100;
}
};
return self;
});
// Player class (on foot or in car)
var Player = Container.expand(function () {
var self = Container.call(this);
// State: 'foot' or 'car'
self.mode = 'foot';
self.speed = 12; // On foot speed
self.carSpeed = 24; // In car speed
self.direction = {
x: 0,
y: 0
}; // Movement direction
self.inCar = null; // Reference to car if in car
// Attach player asset
var playerSprite = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
// Attach gun to player hand
self.gun = new Gun();
self.gun.x = 40; // offset to right hand
self.gun.y = 20; // offset slightly down
self.addChild(self.gun);
// Switch to car mode
self.enterCar = function (car) {
self.mode = 'car';
self.inCar = car;
playerSprite.visible = false;
self.gun.visible = false;
car.occupied = true;
self.x = car.x;
self.y = car.y;
};
// Exit car
self.exitCar = function () {
if (self.inCar) {
self.inCar.occupied = false;
self.x = self.inCar.x + 80;
self.y = self.inCar.y;
self.inCar = null;
}
self.mode = 'foot';
playerSprite.visible = true;
self.gun.visible = true;
};
// Update per tick
self.update = function () {
// Move player
if (self.mode === 'foot') {
self.x += self.direction.x * self.speed;
self.y += self.direction.y * self.speed;
} else if (self.mode === 'car' && self.inCar) {
self.x += self.direction.x * self.carSpeed;
self.y += self.direction.y * self.carSpeed;
self.inCar.x = self.x;
self.inCar.y = self.y;
}
// Clamp to city bounds
if (self.x < 0) self.x = 0;
if (self.x > 2048) self.x = 2048;
if (self.y < 0) self.y = 0;
if (self.y > 2732) self.y = 2732;
};
return self;
});
// Police car class
var PoliceCar = Container.expand(function () {
var self = Container.call(this);
var policeSprite = self.attachAsset('policeCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.occupied = false;
self.isPolice = true;
self.speed = 3;
self.target = null; // Player to chase
// Update per tick
self.update = function () {
if (!self.target) return;
// Move towards 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 > 0) {
self.x += dx / dist * self.speed;
self.y += dy / dist * self.speed;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// --- City Layout ---
// City block (background tile)
// Road (horizontal)
// Road (vertical)
// Player on foot
// Car (stealable)
// Police car
// Mission item (pickup)
// Pedestrian
var cityBlocks = [];
var roads = [];
var blockSize = 400;
var roadW = 120;
var cityCols = 5;
var cityRows = 6;
// Draw city grid (blocks and roads)
for (var i = 0; i < cityCols; i++) {
for (var j = 0; j < cityRows; j++) {
var bx = i * blockSize;
var by = j * blockSize;
// Block
var block = LK.getAsset('cityBlock', {
x: bx,
y: by,
anchorX: 0,
anchorY: 0
});
cityBlocks.push(block);
game.addChild(block);
// Horizontal road
if (j < cityRows - 1) {
var roadH = LK.getAsset('roadH', {
x: bx,
y: by + blockSize - roadW / 2,
anchorX: 0,
anchorY: 0.5
});
roads.push(roadH);
game.addChild(roadH);
}
// Vertical road
if (i < cityCols - 1) {
var roadV = LK.getAsset('roadV', {
x: bx + blockSize - roadW / 2,
y: by,
anchorX: 0.5,
anchorY: 0
});
roads.push(roadV);
game.addChild(roadV);
}
}
}
// --- Game State ---
var player = new Player();
player.x = 2048 / 2;
player.y = 2732 / 2;
game.addChild(player);
var cars = [];
var policeCars = [];
var pedestrians = [];
var missionItems = [];
var missionActive = false;
var missionTarget = null;
var missionTimer = null;
var missionTimeLeft = 0;
var missionText = null;
var score = 0;
var missionCollectedCount = 0; // Track how many mission items collected
var missionWinCount = 6; // How many to win
var scoreTxt = new Text2('0', {
size: 100,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// --- Spawn cars ---
for (var i = 0; i < 7; i++) {
var car = new Car();
car.x = 300 + Math.random() * (2048 - 600);
car.y = 300 + Math.random() * (2732 - 600);
cars.push(car);
game.addChild(car);
}
// --- Spawn police car ---
var police = new PoliceCar();
police.x = 200;
police.y = 200;
police.target = player;
policeCars.push(police);
game.addChild(police);
// --- Spawn pedestrians ---
for (var i = 0; i < 8; i++) {
var ped = new Pedestrian();
ped.x = 200 + Math.random() * (2048 - 400);
ped.y = 200 + Math.random() * (2732 - 400);
pedestrians.push(ped);
game.addChild(ped);
}
// --- Mission UI ---
missionText = new Text2('', {
size: 80,
fill: 0xFFFF00
});
missionText.anchor.set(0.5, 0);
LK.gui.top.addChild(missionText);
// --- Mission System ---
function startMission() {
// Randomly pick a block for item
var col = 1 + Math.floor(Math.random() * (cityCols - 2));
var row = 1 + Math.floor(Math.random() * (cityRows - 2));
var mx = col * blockSize + blockSize / 2;
var my = row * blockSize + blockSize / 2;
var item = new MissionItem();
item.x = mx;
item.y = my;
missionItems.push(item);
game.addChild(item);
missionActive = true;
missionTarget = item;
missionTimeLeft = 20 * 60; // 20 seconds (in ticks)
missionText.setText("Mission: Collect the green item!");
}
function endMission(success) {
missionActive = false;
if (missionTarget) {
missionTarget.destroy();
missionTarget = null;
}
for (var i = 0; i < missionItems.length; i++) {
missionItems[i].destroy();
}
missionItems = [];
if (success) {
LK.getSound('tick').play();
score += 100;
scoreTxt.setText(score);
missionCollectedCount++;
if (missionCollectedCount >= missionWinCount) {
missionText.setText("You collected all items!");
LK.effects.flashObject(player, 0x00ff00, 800);
LK.setTimeout(function () {
LK.showYouWin();
}, 1000);
return;
}
missionText.setText("Success! Next mission soon...");
LK.effects.flashObject(player, 0x00ff00, 800);
// Make next level harder: add another police car and increase police speed
var newPolice = new PoliceCar();
newPolice.x = Math.random() * 2048;
newPolice.y = Math.random() * 2732;
newPolice.target = player;
newPolice.speed = 3 + policeCars.length * 1; // Each level, police get a little faster
policeCars.push(newPolice);
game.addChild(newPolice);
for (var i = 0; i < policeCars.length; i++) {
policeCars[i].speed = 3 + i * 1;
}
LK.setTimeout(function () {
missionText.setText('');
// Add more cars for next level
var extraCar = new Car();
extraCar.x = 300 + Math.random() * (2048 - 600);
extraCar.y = 300 + Math.random() * (2732 - 600);
cars.push(extraCar);
game.addChild(extraCar);
// Add more pedestrians for next level
var extraPed = new Pedestrian();
extraPed.x = 200 + Math.random() * (2048 - 400);
extraPed.y = 200 + Math.random() * (2732 - 400);
pedestrians.push(extraPed);
game.addChild(extraPed);
startMission();
}, 1200);
} else {
missionText.setText("Mission Failed!");
LK.effects.flashScreen(0xff0000, 1000);
LK.setTimeout(function () {
missionText.setText('');
startMission();
}, 1200);
}
}
// Start first mission
missionCollectedCount = 0;
// Play car sound at game start (looping infinitely)
LK.getSound('car').play({
loop: true
});
// Play background music at game start (looping infinitely)
LK.playMusic('BackgroundMusic', {
loop: true
});
startMission();
// --- Touch/Drag Controls ---
var dragDir = {
x: 0,
y: 0
};
var dragActive = false;
var dragStart = {
x: 0,
y: 0
};
var dragLast = {
x: 0,
y: 0
};
var dragThreshold = 30; // px
function getDir(dx, dy) {
var mag = Math.sqrt(dx * dx + dy * dy);
if (mag < dragThreshold) return {
x: 0,
y: 0
};
return {
x: dx / mag,
y: dy / mag
};
}
game.down = function (x, y, obj) {
// Don't allow drag from top left 100x100
if (x < 100 && y < 100) return;
dragActive = true;
dragStart.x = x;
dragStart.y = y;
dragLast.x = x;
dragLast.y = y;
};
game.move = function (x, y, obj) {
if (!dragActive) return;
var dx = x - dragStart.x;
var dy = y - dragStart.y;
dragDir = getDir(dx, dy);
player.direction = dragDir;
dragLast.x = x;
dragLast.y = y;
};
game.up = function (x, y, obj) {
dragActive = false;
player.direction = {
x: 0,
y: 0
};
};
// --- Tap to enter/exit car or collect item ---
game.on('down', function (x, y, obj) {
// If in car, tap to exit
if (player.mode === 'car') {
player.exitCar();
return;
}
// If near a car, enter it
for (var i = 0; i < cars.length; i++) {
var car = cars[i];
if (!car.occupied && player.intersects(car)) {
player.enterCar(car);
return;
}
}
// If on mission item, collect
// (Handled by collision in update loop now)
});
// --- Game Update Loop ---
game.update = function () {
// Update player
player.update();
// Update cars
for (var i = 0; i < cars.length; i++) {
cars[i].update();
}
// Update police
for (var i = 0; i < policeCars.length; i++) {
policeCars[i].update();
}
// Update pedestrians
for (var i = 0; i < pedestrians.length; i++) {
pedestrians[i].update();
}
// Update mission timer
if (missionActive) {
missionTimeLeft--;
if (missionTimeLeft % 60 === 0) {
missionText.setText("Mission: Collect the green item! " + Math.ceil(missionTimeLeft / 60) + "s");
}
if (missionTimeLeft <= 0) {
endMission(false);
}
// Make missionItem collectable by collision
if (missionTarget && player.intersects(missionTarget)) {
// Instead of showing win, start next level
endMission(true);
return;
}
}
// Police catch player
for (var i = 0; i < policeCars.length; i++) {
if (player.intersects(policeCars[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.playMusic('losing', {
loop: false
});
LK.showGameOver();
return;
}
}
// Collide with pedestrians (lose points)
for (var i = 0; i < pedestrians.length; i++) {
if (player.intersects(pedestrians[i])) {
score = Math.max(0, score - 20);
scoreTxt.setText(score);
LK.effects.flashObject(pedestrians[i], 0xff0000, 400);
}
}
};
yellow car. In-Game asset. 2d. High contrast. No shadows
Modern Building. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
money. In-Game asset. 2d. High contrast. No shadows
people. In-Game asset. 2d. High contrast. No shadows
one people. In-Game asset. 2d. High contrast. No shadows
police car. In-Game asset. 2d. High contrast. No shadows
road. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
road. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
gun. In-Game asset. 2d. High contrast. No shadows
bullet. In-Game asset. 2d. High contrast. No shadows