User prompt
when game over start losing
User prompt
give gun to player hand
User prompt
make gun to player
User prompt
when mission is success start tick
User prompt
make pedestrian slower
User prompt
when game started start BackgroundMusic
User prompt
the car sound is infinite
User prompt
when game started start sound car
User prompt
make car slower
User prompt
make the police car slower
User prompt
when we collect 6 missionItem we won game
User prompt
make another level harder
User prompt
when we won make another level
User prompt
when we collect missionItem game will end
User prompt
make missionItem collectable
User prompt
make the police car slower
User prompt
make the police car slower
Code edit (1 edits merged)
Please save this source code
User prompt
Grand Tiny Auto: Micro City Mayhem
Initial prompt
make me GTA7
/**** * 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); } } };
===================================================================
--- original.js
+++ change.js
@@ -476,8 +476,11 @@
// 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;
}
}
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