User prompt
Create a special space where we can fill our souls
User prompt
Create a beautiful background.
User prompt
Enemies only come from above
User prompt
Please fix the bug: 'TypeError: taskTexts[i].setColor is not a function' in or related to this line: 'taskTexts[i].setColor(color);' Line Number: 334
User prompt
Put the character's health bar under
User prompt
give us some tasks and show these tasks on top
User prompt
Reduces enemies' health and range
Code edit (1 edits merged)
Please save this source code
User prompt
Top Cop: Police Pursuit
Initial prompt
make a gun game and um top top camera and then uh and then and then uh sound effects and uh police and uh and
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 12; self.direction = { x: 0, y: -1 }; // Default upward self.lifespan = 120; // 2 seconds at 60fps self.age = 0; self.damage = 1; self.update = function () { self.x += self.direction.x * self.speed; self.y += self.direction.y * self.speed; self.age++; if (self.age > self.lifespan) { self.markForDeletion = true; } }; return self; }); var Criminal = Container.expand(function () { var self = Container.call(this); var criminalGraphics = self.attachAsset('criminal', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.health = 2; // Reduced from 3 self.shootCooldown = 0; self.shootDelay = 120; // Frames between shots self.attackRange = 300; // Reduced from 500 self.movePattern = Math.floor(Math.random() * 3); // 0: direct, 1: zigzag, 2: circle self.moveTimer = 0; self.update = function () { // Target the player var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); // Movement based on pattern if (distance > 100) { // Keep some distance var moveX = 0; var moveY = 0; switch (self.movePattern) { case 0: // Direct moveX = dx / distance; moveY = dy / distance; break; case 1: // Zigzag self.moveTimer++; moveX = dx / distance + Math.sin(self.moveTimer * 0.1) * 0.5; moveY = dy / distance; break; case 2: // Circle self.moveTimer++; moveX = dx / distance + Math.sin(self.moveTimer * 0.05) * 0.8; moveY = dy / distance + Math.cos(self.moveTimer * 0.05) * 0.8; break; } self.x += moveX * self.speed; self.y += moveY * self.speed; } // Shooting logic if (distance < self.attackRange) { if (self.shootCooldown <= 0) { // Create enemy bullet var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; // Calculate direction toward player var dirX = dx / distance; var dirY = dy / distance; bullet.direction = { x: dirX, y: dirY }; // Mark as enemy bullet bullet.isEnemyBullet = true; // Add to game's bullets array bullets.push(bullet); game.addChild(bullet); // Reset cooldown with some randomness self.shootCooldown = self.shootDelay + Math.random() * 60; } } if (self.shootCooldown > 0) { self.shootCooldown--; } }; self.takeDamage = function () { self.health--; LK.effects.flashObject(self, 0xFF0000, 300); if (self.health <= 0) { LK.getSound('criminal_down').play(); LK.setScore(LK.getScore() + 1); self.markForDeletion = true; } }; return self; }); var EmergencyCall = Container.expand(function () { var self = Container.call(this); var callGraphics = self.attachAsset('emergencyCall', { anchorX: 0.5, anchorY: 0.5 }); self.lifetime = 600; // 10 seconds at 60fps self.age = 0; self.flashInterval = 30; self.update = function () { self.age++; // Flash effect if (self.age % self.flashInterval === 0) { if (callGraphics.alpha === 1) { tween(callGraphics, { alpha: 0.3 }, { duration: 500 }); } else { tween(callGraphics, { alpha: 1 }, { duration: 500 }); } } // Expire after lifetime if (self.age > self.lifetime) { self.markForDeletion = true; } }; self.down = function () { // Responding to call LK.getSound('radiochatter').play(); spawnCriminals(self.x, self.y, 2 + Math.floor(Math.random() * 3)); self.markForDeletion = true; // Increase score for responding LK.setScore(LK.getScore() + 2); }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.health = 100; self.maxHealth = 100; self.shootCooldown = 0; self.shootDelay = 15; // Frames between shots self.canMove = true; // Health bar setup var healthBarBg = self.attachAsset('healthBarBackground', { anchorX: 0.5, anchorY: 0, y: -70 }); var healthBarFill = self.attachAsset('healthBar', { anchorX: 0.5, anchorY: 0, y: -68 }); self.updateHealthBar = function () { var healthPercentage = self.health / self.maxHealth; healthBarFill.scale.x = healthPercentage; // Center the health bar healthBarFill.x = -100 * (1 - healthPercentage); }; self.takeDamage = function (amount) { self.health -= amount; if (self.health <= 0) { self.health = 0; LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } self.updateHealthBar(); }; self.shoot = function () { if (self.shootCooldown <= 0) { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y - 40; // Add to game's bullets array bullets.push(bullet); game.addChild(bullet); // Play gun sound LK.getSound('gunshot').play(); // Reset cooldown self.shootCooldown = self.shootDelay; } }; self.update = function () { if (self.shootCooldown > 0) { self.shootCooldown--; } }; self.down = function (x, y, obj) { self.shoot(); }; // Initialize health bar self.updateHealthBar(); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x333333 }); /**** * Game Code ****/ // Game variables var player; var bullets = []; var criminals = []; var emergencyCalls = []; var gameActive = true; var dragOffset = { x: 0, y: 0 }; var gameLevel = 1; var spawnTimer = 0; var maxCriminals = 10; var emergencyCallTimer = 0; // Setup UI var scoreTxt = new Text2('Score: 0', { size: 70, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var levelTxt = new Text2('Level: 1', { size: 70, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); levelTxt.y = 80; LK.gui.top.addChild(levelTxt); // Initialize player player = new Player(); player.x = 2048 / 2; player.y = 2732 / 2; game.addChild(player); // Play background music LK.playMusic('background_music'); // Spawn criminals at a position function spawnCriminals(x, y, count) { for (var i = 0; i < count; i++) { if (criminals.length < maxCriminals) { var criminal = new Criminal(); // Randomize spawn position around the target var angle = Math.random() * Math.PI * 2; var distance = 300 + Math.random() * 200; criminal.x = x + Math.cos(angle) * distance; criminal.y = y + Math.sin(angle) * distance; // Adjust spawn if out of bounds criminal.x = Math.max(50, Math.min(2048 - 50, criminal.x)); criminal.y = Math.max(50, Math.min(2732 - 50, criminal.y)); criminals.push(criminal); game.addChild(criminal); } } } // Create an emergency call at a random position function createEmergencyCall() { var call = new EmergencyCall(); call.x = Math.random() * (2048 - 200) + 100; // Keep away from edges call.y = Math.random() * (2732 - 200) + 100; // Keep away from edges emergencyCalls.push(call); game.addChild(call); // Play siren sound LK.getSound('siren').play(); } // Check if a level up should occur function checkLevelUp() { var score = LK.getScore(); var newLevel = Math.floor(score / 10) + 1; if (newLevel > gameLevel) { gameLevel = newLevel; levelTxt.setText('Level: ' + gameLevel); // Increase difficulty maxCriminals = 10 + gameLevel * 2; // Bonus for reaching new level player.health = Math.min(player.maxHealth, player.health + 20); player.updateHealthBar(); // Visual feedback LK.effects.flashScreen(0x00FF00, 500); } } // Game drag handling game.down = function (x, y, obj) { if (!player.canMove) return; // Calculate offset for dragging dragOffset.x = player.x - x; dragOffset.y = player.y - y; player.shoot(); }; game.move = function (x, y, obj) { if (!player.canMove) return; // Move player with drag player.x = x + dragOffset.x; player.y = y + dragOffset.y; // Keep player in bounds player.x = Math.max(50, Math.min(2048 - 50, player.x)); player.y = Math.max(50, Math.min(2732 - 50, player.y)); }; game.up = function () { // Add any logic needed when touch/click is released }; // Game update loop game.update = function () { if (!gameActive) return; // Update score display scoreTxt.setText('Score: ' + LK.getScore()); // Update player player.update(); // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; bullet.update(); // Check for off-screen bullets if (bullet.x < 0 || bullet.x > 2048 || bullet.y < 0 || bullet.y > 2732 || bullet.markForDeletion) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check for bullet collisions if (bullet.isEnemyBullet) { // Enemy bullets hit player if (bullet.intersects(player)) { player.takeDamage(10); bullet.destroy(); bullets.splice(i, 1); continue; } } else { // Player bullets hit criminals for (var j = criminals.length - 1; j >= 0; j--) { if (bullet.intersects(criminals[j])) { criminals[j].takeDamage(); bullet.destroy(); bullets.splice(i, 1); break; } } } } // Update criminals for (var k = criminals.length - 1; k >= 0; k--) { var criminal = criminals[k]; criminal.update(); // Check for criminal-player collision if (criminal.intersects(player)) { player.takeDamage(5); LK.effects.flashObject(player, 0xFF0000, 500); // Push player away from criminal var dx = player.x - criminal.x; var dy = player.y - criminal.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 0) { player.x += dx / dist * 30; player.y += dy / dist * 30; } } // Remove dead criminals if (criminal.markForDeletion) { criminal.destroy(); criminals.splice(k, 1); } } // Update emergency calls for (var m = emergencyCalls.length - 1; m >= 0; m--) { emergencyCalls[m].update(); if (emergencyCalls[m].markForDeletion) { emergencyCalls[m].destroy(); emergencyCalls.splice(m, 1); } } // Spawn logic spawnTimer++; if (spawnTimer > 180 && criminals.length < maxCriminals) { // Every 3 seconds spawnCriminals(Math.random() * 2048, Math.random() * 2732, 1 + Math.floor(Math.random() * gameLevel)); spawnTimer = 0; } // Emergency call logic emergencyCallTimer++; if (emergencyCallTimer > 600 && emergencyCalls.length < 3) { // Every 10 seconds createEmergencyCall(); emergencyCallTimer = 0; } // Check for level up checkLevelUp(); };
===================================================================
--- original.js
+++ change.js
@@ -37,12 +37,12 @@
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
- self.health = 3;
+ self.health = 2; // Reduced from 3
self.shootCooldown = 0;
self.shootDelay = 120; // Frames between shots
- self.attackRange = 500;
+ self.attackRange = 300; // Reduced from 500
self.movePattern = Math.floor(Math.random() * 3); // 0: direct, 1: zigzag, 2: circle
self.moveTimer = 0;
self.update = function () {
// Target the player