User prompt
Görev veren NPC'ye tıkladığımız zaman Karakterin yukarısında Görev hakkında ''Kabul Et - Reddet'' butonları olsun. Ona göre etkileşimde olalım ve ona göre görevi yapalım veya yapmayalım. Verdiğimiz yanıta göre yapay zeka cevap versin ve verdiği görev hakkında işlem yapsın.
User prompt
NPC'ye tıkladığım zaman NPC görevi veya bulunduğum etkileşim Level altında küçük şekilde ve bir süre spawn olsun ve ne konuda etkileşimde bulundum ise bileyim.
User prompt
NPC soru sorduğunda, tıkladığım zaman NPC bir süre dursun.
User prompt
NPC Trade sorusu soruyor. tıkla diyor. Tıklıyorum, ticaret paneli açılmıyor.
User prompt
NPC'ye yaklaşıyorum ama hiçbirşey olmuyor. Ne çıkıyor ise, NPC üzerinde çıksın yaklaşınca.
User prompt
Haritada unsurların spawn olma oranını genel olarak ortalama %10 oranında artır. (Korsanlar hariç)
User prompt
Wave altına, Level ve EXP sistemi ekle, oyundaki RPG görevlerinden EXP kazanalım. RPG Macera oyunu olarak sistemi kur.
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'indexOf')' in or related to this line: 'if (!npcActive && tradeText.text.indexOf("Trade:") !== 0 && tradeText.text.indexOf("Special:") !== 0) {' Line Number: 1428
User prompt
NPC'ler ile ilgili etkileşim kuralım ve birçok RPG ve macera konusu ekle. Bazen de ticaret yapalım. NPC'ler yapay zeka oyuncuları tarafından yönetilsin.
User prompt
Kod içinde olan veya olmayan, oyuna uygun birçok özelliği veya mekaniği aktif et. Uyumsuz ise ekleme. Birbirinden farklı, Ticaret ve RPG katacak mekanik ve özellik ekle.
User prompt
Haritada unsurların spawn olma oranını genel olarak ortalama %10 oranında artır.
User prompt
''Reduce spawn rate of all entities and asteroids by 80%'' bunu %70 olarak değiştir. Ama korsanlar için %85 olsun. Çünkü korsan çok.
User prompt
Kod içinde olan veya olmayan, oyuna uygun birçok özelliği veya mekaniği aktif et. Uyumsuz ise ekleme. Birbirinden farklı, eğlence katacak mekanik ve özellik ekle.
User prompt
Asteroid'lere de otomatik ateş olsun. Ancak şuan haritada spawn olan unsur oranını %80 oranında azalt. Çok fazla unsur var.
User prompt
Kod içinde olan veya olmayan, oyuna uygun birçok özelliği veya mekaniği aktif et. Uyumsuz ise ekleme. Birbirinden farklı, eğlence katacak mekanik ve özellik ekle.
User prompt
Coins ve hammadde sayıları ekranda görünmüyor. Görünecek şekilde ekranda ki dış alanları sola kaydır.
User prompt
Düşmana, çok yaklaşırsak bize saldırsın ve biz ona çok yaklaşırsak saldıralım. Yoksa normal seyrinde devam etsinler.
User prompt
Haritada ki unsurlar otomatik spawn olma sistemini kaldır. İlerledikçe harita dışından spawn olarak gelsinler veya rastgele dolaşsınlar. sabit durmasın hiç birşey. Bir akış olsun.
User prompt
Harita sürekli aşağı doğru kaymasın, Karakterin gittiği yöne doğru haritada gidelim.
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'healthText.style.fill = "#00ff00";' Line Number: 255
Code edit (1 edits merged)
Please save this source code
User prompt
Galactic Trader: Sonsuz Görevler
Initial prompt
Oyuncu, haritanın merkezinde bir uzay mekiğini joystick ile kontrol eder. Sonsuz bir galakside rastgele NPC’ler belirir ve oyuncuya görevler ile ticaret fırsatları sunar. Korsan savaş gemileriyle karşılaşılır; savaşarak coin ve hammadde toplanır. Toplanan kaynaklar ticaretle satılır, yeni yükseltmeler ve ekipmanlar alınır. Görevler ve ticaret ilerledikçe yeni bölgeler ve zorluklar açılır. Oyun, sonsuz ilerleme ve sürekli gelişen görevlerle devam eder.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Asteroid = Container.expand(function () { var self = Container.call(this); var asteroidGraphics = self.attachAsset('resource', { anchorX: 0.5, anchorY: 0.5, tint: 0x8B4513, scaleX: 2, scaleY: 2 }); self.health = 50; self.resources = Math.floor(Math.random() * 10) + 5; self.vx = (Math.random() - 0.5) * 0.5; self.vy = (Math.random() - 0.5) * 0.5; self.rotationSpeed = (Math.random() - 0.5) * 0.02; self.takeDamage = function (amount) { self.health -= amount; LK.effects.flashObject(self, 0xffffff, 100); }; self.update = function () { self.x += self.vx; self.y += self.vy; self.rotation += self.rotationSpeed; }; return self; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 15; self.damage = 10; self.directionX = 0; self.directionY = -1; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; }; return self; }); var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.value = Math.floor(Math.random() * 10) + 5; self.update = function () { self.rotation += 0.05; }; return self; }); var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('enemyBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.damage = 5; self.directionX = 0; self.directionY = 0; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; }; return self; }); var NPC = Container.expand(function () { var self = Container.call(this); var npcGraphics = self.attachAsset('npc', { anchorX: 0.5, anchorY: 0.5 }); self.questType = Math.random() < 0.5 ? 'trade' : 'delivery'; self.reward = Math.floor(Math.random() * 50) + 20; self.baseY = 0; self.moveSpeed = 1 + Math.random() * 2; self.moveAngle = Math.random() * Math.PI * 2; self.wanderTimer = 0; self.update = function () { // Wander movement self.wanderTimer++; if (self.wanderTimer > 120 + Math.random() * 120) { self.moveAngle = Math.random() * Math.PI * 2; self.wanderTimer = 0; } self.x += Math.cos(self.moveAngle) * self.moveSpeed; self.y += Math.sin(self.moveAngle) * self.moveSpeed; // Float animation on top of movement self.y += Math.sin(LK.ticks * 0.05) * 0.5; }; return self; }); var Pirate = Container.expand(function () { var self = Container.call(this); var pirateGraphics = self.attachAsset('pirate', { anchorX: 0.5, anchorY: 0.5 }); self.health = 30; self.speed = 2; self.fireRate = 60; self.lastFire = 0; self.loot = Math.floor(Math.random() * 30) + 10; self.moveAngle = Math.random() * Math.PI * 2; self.patrolTimer = 0; self.aggroRange = 600; self.takeDamage = function (amount) { self.health -= amount; LK.effects.flashObject(self, 0xffffff, 100); }; self.update = function () { // Movement AI self.patrolTimer++; if (self.patrolTimer > 180) { self.moveAngle = Math.random() * Math.PI * 2; self.patrolTimer = 0; } // Patrol movement self.x += Math.cos(self.moveAngle) * self.speed * 0.5; self.y += Math.sin(self.moveAngle) * self.speed * 0.5; }; return self; }); var Resource = Container.expand(function () { var self = Container.call(this); var resourceGraphics = self.attachAsset('resource', { anchorX: 0.5, anchorY: 0.5 }); self.type = Math.random() < 0.5 ? 'metal' : 'energy'; self.amount = Math.floor(Math.random() * 5) + 1; self.update = function () { self.rotation += 0.03; }; return self; }); var Ship = Container.expand(function () { var self = Container.call(this); var shipGraphics = self.attachAsset('ship', { anchorX: 0.5, anchorY: 0.5 }); self.health = 100; self.maxHealth = 100; self.shield = 50; self.maxShield = 50; self.shieldRegenDelay = 0; self.speed = 5; self.fireRate = 10; self.damage = 10; self.lastFire = 0; self.boostSpeed = 0; self.boostCooldown = 0; self.takeDamage = function (amount) { // Shield absorbs damage first if (self.shield > 0) { var shieldDamage = Math.min(amount, self.shield); self.shield -= shieldDamage; amount -= shieldDamage; LK.effects.flashObject(self, 0x0088ff, 100); self.shieldRegenDelay = 180; // 3 seconds delay before shield regen } if (amount > 0) { self.health -= amount; LK.effects.flashObject(self, 0xff0000, 200); } if (self.health <= 0) { self.health = 0; LK.showGameOver(); } }; self.update = function () { // Shield regeneration if (self.shieldRegenDelay > 0) { self.shieldRegenDelay--; } else if (self.shield < self.maxShield) { self.shield = Math.min(self.shield + 0.1, self.maxShield); } // Boost cooldown if (self.boostCooldown > 0) { self.boostCooldown--; } if (self.boostSpeed > 0) { self.boostSpeed -= 0.2; } }; return self; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.speed = Math.random() * 2 + 0.5; starGraphics.alpha = Math.random() * 0.8 + 0.2; self.vx = (Math.random() - 0.5) * 0.5; self.vy = (Math.random() - 0.5) * 0.5; self.update = function () { // Slow floating movement self.x += self.vx; self.y += self.vy; }; return self; }); var UpgradeStation = Container.expand(function () { var self = Container.call(this); var stationGraphics = self.attachAsset('pirate', { anchorX: 0.5, anchorY: 0.5, tint: 0x00ffff, scaleX: 1.5, scaleY: 1.5 }); self.type = 'upgrade'; self.upgrades = [{ name: 'health', cost: 100, metalCost: 10 }, { name: 'shield', cost: 150, metalCost: 15 }, { name: 'damage', cost: 200, energyCost: 20 }, { name: 'speed', cost: 120, energyCost: 10 }]; self.currentUpgrade = 0; self.rotationSpeed = 0.01; self.update = function () { self.rotation += self.rotationSpeed; // Pulse effect var scale = 1.5 + Math.sin(LK.ticks * 0.05) * 0.1; stationGraphics.scaleX = scale; stationGraphics.scaleY = scale; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000033 }); /**** * Game Code ****/ // Game variables var ship; var joystickBase; var joystickHandle; var isDragging = false; var bullets = []; var enemyBullets = []; var npcs = []; var pirates = []; var coins = []; var resources = []; var stars = []; var asteroids = []; var upgradeStations = []; var boostParticles = []; var explosions = []; var camera = { x: 0, y: 0 }; var waveNumber = 0; var enemiesKilled = 0; var totalDistance = 0; // Player stats var playerCoins = storage.coins || 0; var playerMetal = storage.metal || 0; var playerEnergy = storage.energy || 0; var questsCompleted = storage.questsCompleted || 0; // UI Elements var coinText = new Text2('Coins: ' + playerCoins, { size: 50, fill: 0xFFFF00 }); coinText.anchor.set(0, 0); coinText.x = 120; coinText.y = 20; LK.gui.topLeft.addChild(coinText); var resourceText = new Text2('Metal: ' + playerMetal + ' Energy: ' + playerEnergy, { size: 40, fill: 0xFFFFFF }); resourceText.anchor.set(0, 0); resourceText.x = 120; resourceText.y = 80; LK.gui.topLeft.addChild(resourceText); var healthText = new Text2('Health: 100/100', { size: 50, fill: 0x00FF00 }); healthText.anchor.set(0.5, 0); LK.gui.top.addChild(healthText); var shieldText = new Text2('Shield: 50/50', { size: 40, fill: 0x0088FF }); shieldText.anchor.set(0.5, 0); shieldText.y = 60; LK.gui.top.addChild(shieldText); var boostText = new Text2('BOOST READY', { size: 35, fill: 0x00FFFF }); boostText.anchor.set(0.5, 0); boostText.y = 110; LK.gui.top.addChild(boostText); var waveText = new Text2('Wave: 1', { size: 45, fill: 0xFFFFFF }); waveText.anchor.set(1, 0); waveText.x = -20; waveText.y = 20; LK.gui.topRight.addChild(waveText); // Create joystick joystickBase = game.addChild(LK.getAsset('joystickBase', { anchorX: 0.5, anchorY: 0.5, x: 300, y: 2432 })); joystickBase.alpha = 0.5; joystickHandle = game.addChild(LK.getAsset('joystickHandle', { anchorX: 0.5, anchorY: 0.5, x: 300, y: 2432 })); joystickHandle.alpha = 0.7; // Create ship ship = game.addChild(new Ship()); ship.x = 1024; ship.y = 1366; // Start background music LK.playMusic('bgmusic'); // Initialize star field for (var i = 0; i < 50; i++) { spawnStar(); } // Helper functions function spawnStar() { var star = new Star(); // Spawn from edges of visible area var edge = Math.floor(Math.random() * 4); switch (edge) { case 0: // Top star.x = ship.x + (Math.random() - 0.5) * 2500; star.y = ship.y - 1500; break; case 1: // Right star.x = ship.x + 1500; star.y = ship.y + (Math.random() - 0.5) * 2500; break; case 2: // Bottom star.x = ship.x + (Math.random() - 0.5) * 2500; star.y = ship.y + 1500; break; case 3: // Left star.x = ship.x - 1500; star.y = ship.y + (Math.random() - 0.5) * 2500; break; } stars.push(star); game.addChild(star); } function spawnNPC() { var npc = new NPC(); // Spawn from edges of visible area var edge = Math.floor(Math.random() * 4); switch (edge) { case 0: // Top npc.x = ship.x + (Math.random() - 0.5) * 2000; npc.y = ship.y - 1500; break; case 1: // Right npc.x = ship.x + 1500; npc.y = ship.y + (Math.random() - 0.5) * 2000; break; case 2: // Bottom npc.x = ship.x + (Math.random() - 0.5) * 2000; npc.y = ship.y + 1500; break; case 3: // Left npc.x = ship.x - 1500; npc.y = ship.y + (Math.random() - 0.5) * 2000; break; } npc.baseY = npc.y; npcs.push(npc); game.addChild(npc); } function spawnPirate() { var pirate = new Pirate(); // Spawn from edges of visible area var edge = Math.floor(Math.random() * 4); switch (edge) { case 0: // Top pirate.x = ship.x + (Math.random() - 0.5) * 1800; pirate.y = ship.y - 1400; break; case 1: // Right pirate.x = ship.x + 1400; pirate.y = ship.y + (Math.random() - 0.5) * 1800; break; case 2: // Bottom pirate.x = ship.x + (Math.random() - 0.5) * 1800; pirate.y = ship.y + 1400; break; case 3: // Left pirate.x = ship.x - 1400; pirate.y = ship.y + (Math.random() - 0.5) * 1800; break; } // Scale pirate stats based on wave pirate.health = 30 + waveNumber * 10; pirate.damage = 5 + Math.floor(waveNumber / 2); pirates.push(pirate); game.addChild(pirate); } function spawnAsteroid() { var asteroid = new Asteroid(); var edge = Math.floor(Math.random() * 4); switch (edge) { case 0: asteroid.x = ship.x + (Math.random() - 0.5) * 2200; asteroid.y = ship.y - 1600; break; case 1: asteroid.x = ship.x + 1600; asteroid.y = ship.y + (Math.random() - 0.5) * 2200; break; case 2: asteroid.x = ship.x + (Math.random() - 0.5) * 2200; asteroid.y = ship.y + 1600; break; case 3: asteroid.x = ship.x - 1600; asteroid.y = ship.y + (Math.random() - 0.5) * 2200; break; } asteroids.push(asteroid); game.addChild(asteroid); } function spawnUpgradeStation() { var station = new UpgradeStation(); station.x = ship.x + (Math.random() - 0.5) * 3000; station.y = ship.y + (Math.random() - 0.5) * 3000; upgradeStations.push(station); game.addChild(station); } function createExplosion(x, y) { for (var i = 0; i < 8; i++) { var particle = LK.getAsset('explosion', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); particle.vx = (Math.random() - 0.5) * 10; particle.vy = (Math.random() - 0.5) * 10; particle.life = 30; explosions.push(particle); game.addChild(particle); } } function createBoostParticle() { var particle = LK.getAsset('boostParticle', { anchorX: 0.5, anchorY: 0.5, x: ship.x - Math.cos(ship.rotation - Math.PI / 2) * 50, y: ship.y - Math.sin(ship.rotation - Math.PI / 2) * 50 }); particle.vx = -Math.cos(ship.rotation - Math.PI / 2) * 5 + (Math.random() - 0.5) * 2; particle.vy = -Math.sin(ship.rotation - Math.PI / 2) * 5 + (Math.random() - 0.5) * 2; particle.life = 20; boostParticles.push(particle); game.addChild(particle); } function updateUI() { coinText.setText('Coins: ' + playerCoins); resourceText.setText('Metal: ' + playerMetal + ' Energy: ' + playerEnergy); healthText.setText('Health: ' + ship.health + '/' + ship.maxHealth); shieldText.setText('Shield: ' + Math.floor(ship.shield) + '/' + ship.maxShield); waveText.setText('Wave: ' + (waveNumber + 1)); // Update health text color if (ship.health > 60) { healthText.fill = 0x00ff00; } else if (ship.health > 30) { healthText.fill = 0xffff00; } else { healthText.fill = 0xff0000; } // Update shield text color if (ship.shield > 30) { shieldText.fill = 0x0088ff; } else if (ship.shield > 10) { shieldText.fill = 0xffff00; } else { shieldText.fill = 0xff0000; } // Update boost text if (ship.boostCooldown <= 0) { boostText.setText('BOOST READY'); boostText.fill = 0x00ffff; } else { boostText.setText('BOOST: ' + Math.ceil(ship.boostCooldown / 60) + 's'); boostText.fill = 0x888888; } } function saveProgress() { storage.coins = playerCoins; storage.metal = playerMetal; storage.energy = playerEnergy; storage.questsCompleted = questsCompleted; } // Event handlers game.down = function (x, y, obj) { if (Math.sqrt(Math.pow(x - joystickBase.x, 2) + Math.pow(y - joystickBase.y, 2)) < 100) { isDragging = true; joystickHandle.x = x; joystickHandle.y = y; } else if (y < 300 && ship.boostCooldown <= 0) { // Boost when tapping upper area of screen ship.boostSpeed = 10; ship.boostCooldown = 300; // 5 seconds cooldown if (LK.getSound('boost')) { LK.getSound('boost').play(); } } }; game.move = function (x, y, obj) { if (isDragging) { var dx = x - joystickBase.x; var dy = y - joystickBase.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 100) { dx = dx / distance * 100; dy = dy / distance * 100; } joystickHandle.x = joystickBase.x + dx; joystickHandle.y = joystickBase.y + dy; } }; game.up = function (x, y, obj) { isDragging = false; joystickHandle.x = joystickBase.x; joystickHandle.y = joystickBase.y; }; // Main game loop game.update = function () { // Ship movement var shipDX = 0; var shipDY = 0; if (isDragging) { var dx = joystickHandle.x - joystickBase.x; var dy = joystickHandle.y - joystickBase.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 10) { var effectiveSpeed = ship.speed + ship.boostSpeed; shipDX = dx / 100 * effectiveSpeed; shipDY = dy / 100 * effectiveSpeed; ship.rotation = Math.atan2(dy, dx) + Math.PI / 2; // Create boost particles when boosting if (ship.boostSpeed > 0 && LK.ticks % 2 === 0) { createBoostParticle(); } } } // Track total distance traveled totalDistance += Math.sqrt(shipDX * shipDX + shipDY * shipDY); // Update camera to follow ship movement camera.x += shipDX; camera.y += shipDY; // Move all world objects opposite to ship movement to create camera effect for (var i = 0; i < stars.length; i++) { stars[i].x -= shipDX; stars[i].y -= shipDY; } for (var i = 0; i < npcs.length; i++) { npcs[i].x -= shipDX; npcs[i].y -= shipDY; } for (var i = 0; i < pirates.length; i++) { pirates[i].x -= shipDX; pirates[i].y -= shipDY; } for (var i = 0; i < coins.length; i++) { coins[i].x -= shipDX; coins[i].y -= shipDY; } for (var i = 0; i < resources.length; i++) { resources[i].x -= shipDX; resources[i].y -= shipDY; } for (var i = 0; i < bullets.length; i++) { bullets[i].x -= shipDX; bullets[i].y -= shipDY; } for (var i = 0; i < enemyBullets.length; i++) { enemyBullets[i].x -= shipDX; enemyBullets[i].y -= shipDY; } for (var i = 0; i < asteroids.length; i++) { asteroids[i].x -= shipDX; asteroids[i].y -= shipDY; } for (var i = 0; i < upgradeStations.length; i++) { upgradeStations[i].x -= shipDX; upgradeStations[i].y -= shipDY; } for (var i = 0; i < boostParticles.length; i++) { boostParticles[i].x -= shipDX; boostParticles[i].y -= shipDY; } for (var i = 0; i < explosions.length; i++) { explosions[i].x -= shipDX; explosions[i].y -= shipDY; } // Auto fire only at very close pirates if (LK.ticks - ship.lastFire > ship.fireRate && pirates.length > 0) { // Find nearest pirate within 200 pixels var nearestPirate = null; var nearestDistance = Infinity; for (var i = 0; i < pirates.length; i++) { var dist = Math.sqrt(Math.pow(pirates[i].x - ship.x, 2) + Math.pow(pirates[i].y - ship.y, 2)); if (dist < 200 && dist < nearestDistance) { nearestDistance = dist; nearestPirate = pirates[i]; } } if (nearestPirate) { var bullet = new Bullet(); bullet.x = ship.x; bullet.y = ship.y; var angle = Math.atan2(nearestPirate.y - ship.y, nearestPirate.x - ship.x); bullet.directionX = Math.cos(angle); bullet.directionY = Math.sin(angle); bullet.rotation = angle + Math.PI / 2; bullets.push(bullet); game.addChild(bullet); ship.lastFire = LK.ticks; LK.getSound('shoot').play(); } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check collision with pirates for (var j = pirates.length - 1; j >= 0; j--) { if (bullet.intersects(pirates[j])) { pirates[j].takeDamage(bullet.damage); if (pirates[j].health <= 0) { enemiesKilled++; createExplosion(pirates[j].x, pirates[j].y); // Drop loot var coin = new Coin(); coin.x = pirates[j].x; coin.y = pirates[j].y; coin.value = coin.value * (1 + Math.floor(waveNumber / 3)); coins.push(coin); game.addChild(coin); if (Math.random() < 0.3) { var resource = new Resource(); resource.x = pirates[j].x + (Math.random() - 0.5) * 50; resource.y = pirates[j].y + (Math.random() - 0.5) * 50; resources.push(resource); game.addChild(resource); } pirates[j].destroy(); pirates.splice(j, 1); // Check for wave completion if (enemiesKilled >= 10 + waveNumber * 5) { waveNumber++; enemiesKilled = 0; // Spawn upgrade station every 3 waves if (waveNumber % 3 === 0) { spawnUpgradeStation(); } } } bullet.destroy(); bullets.splice(i, 1); LK.getSound('hit').play(); break; } } // Check collision with asteroids for (var j = asteroids.length - 1; j >= 0; j--) { if (bullet.intersects(asteroids[j])) { asteroids[j].takeDamage(bullet.damage); if (asteroids[j].health <= 0) { // Drop multiple resources for (var k = 0; k < asteroids[j].resources; k++) { var resource = new Resource(); resource.x = asteroids[j].x + (Math.random() - 0.5) * 100; resource.y = asteroids[j].y + (Math.random() - 0.5) * 100; resource.amount = Math.floor(Math.random() * 3) + 1; resources.push(resource); game.addChild(resource); } createExplosion(asteroids[j].x, asteroids[j].y); asteroids[j].destroy(); asteroids.splice(j, 1); } bullet.destroy(); bullets.splice(i, 1); LK.getSound('hit').play(); break; } } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { var bullet = enemyBullets[i]; if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); enemyBullets.splice(i, 1); continue; } if (bullet.intersects(ship)) { ship.takeDamage(bullet.damage); updateUI(); bullet.destroy(); enemyBullets.splice(i, 1); LK.getSound('hit').play(); } } // Update pirates for (var i = 0; i < pirates.length; i++) { var pirate = pirates[i]; // Update pirate AI var dist = Math.sqrt(Math.pow(ship.x - pirate.x, 2) + Math.pow(ship.y - pirate.y, 2)); // Only chase and attack when very close (within 200 pixels) if (dist < 200) { // Chase ship when very close var angle = Math.atan2(ship.y - pirate.y, ship.x - pirate.x); pirate.x += Math.cos(angle) * pirate.speed; pirate.y += Math.sin(angle) * pirate.speed; pirate.rotation = angle + Math.PI / 2; // Pirate shooting when very close if (LK.ticks - pirate.lastFire > pirate.fireRate) { var bullet = new EnemyBullet(); bullet.x = pirate.x; bullet.y = pirate.y; bullet.directionX = Math.cos(angle); bullet.directionY = Math.sin(angle); enemyBullets.push(bullet); game.addChild(bullet); pirate.lastFire = LK.ticks; } } if (dist > 2000) { pirate.destroy(); pirates.splice(i, 1); i--; } } // Update NPCs for (var i = npcs.length - 1; i >= 0; i--) { var npc = npcs[i]; // Remove NPCs that are too far away var dist = Math.sqrt(Math.pow(npc.x - ship.x, 2) + Math.pow(npc.y - ship.y, 2)); if (dist > 2500) { npc.destroy(); npcs.splice(i, 1); } } // Update asteroids for (var i = asteroids.length - 1; i >= 0; i--) { var asteroid = asteroids[i]; var dist = Math.sqrt(Math.pow(asteroid.x - ship.x, 2) + Math.pow(asteroid.y - ship.y, 2)); if (dist > 2500) { asteroid.destroy(); asteroids.splice(i, 1); } } // Update upgrade stations for (var i = upgradeStations.length - 1; i >= 0; i--) { var station = upgradeStations[i]; var dist = Math.sqrt(Math.pow(station.x - ship.x, 2) + Math.pow(station.y - ship.y, 2)); if (dist < 100 && playerCoins >= 100) { // Apply random upgrade var upgrade = station.upgrades[Math.floor(Math.random() * station.upgrades.length)]; if (upgrade.name === 'health' && playerMetal >= (upgrade.metalCost || 0)) { ship.maxHealth += 20; ship.health = ship.maxHealth; playerCoins -= upgrade.cost; playerMetal -= upgrade.metalCost || 0; } else if (upgrade.name === 'shield' && playerMetal >= (upgrade.metalCost || 0)) { ship.maxShield += 10; ship.shield = ship.maxShield; playerCoins -= upgrade.cost; playerMetal -= upgrade.metalCost || 0; } else if (upgrade.name === 'damage' && playerEnergy >= (upgrade.energyCost || 0)) { ship.damage += 5; playerCoins -= upgrade.cost; playerEnergy -= upgrade.energyCost || 0; } else if (upgrade.name === 'speed' && playerEnergy >= (upgrade.energyCost || 0)) { ship.speed += 1; playerCoins -= upgrade.cost; playerEnergy -= upgrade.energyCost || 0; } if (LK.getSound('upgrade')) { LK.getSound('upgrade').play(); } updateUI(); saveProgress(); station.destroy(); upgradeStations.splice(i, 1); } if (dist > 3000) { station.destroy(); upgradeStations.splice(i, 1); } } // Update boost particles for (var i = boostParticles.length - 1; i >= 0; i--) { var particle = boostParticles[i]; particle.x += particle.vx; particle.y += particle.vy; particle.life--; particle.alpha = particle.life / 20; if (particle.life <= 0) { particle.destroy(); boostParticles.splice(i, 1); } } // Update explosion particles for (var i = explosions.length - 1; i >= 0; i--) { var particle = explosions[i]; particle.x += particle.vx; particle.y += particle.vy; particle.vx *= 0.9; particle.vy *= 0.9; particle.life--; particle.alpha = particle.life / 30; particle.scaleX = particle.scaleY = 1 + (30 - particle.life) / 10; if (particle.life <= 0) { particle.destroy(); explosions.splice(i, 1); } } // Collect items for (var i = coins.length - 1; i >= 0; i--) { if (coins[i].intersects(ship)) { playerCoins += coins[i].value; coins[i].destroy(); coins.splice(i, 1); LK.getSound('collect').play(); updateUI(); saveProgress(); } } for (var i = resources.length - 1; i >= 0; i--) { if (resources[i].intersects(ship)) { if (resources[i].type === 'metal') { playerMetal += resources[i].amount; } else { playerEnergy += resources[i].amount; } resources[i].destroy(); resources.splice(i, 1); LK.getSound('collect').play(); updateUI(); saveProgress(); } } // Update stars for (var i = stars.length - 1; i >= 0; i--) { var dist = Math.sqrt(Math.pow(stars[i].x - ship.x, 2) + Math.pow(stars[i].y - ship.y, 2)); if (dist > 2000) { stars[i].destroy(); stars.splice(i, 1); } } // Spawn entities if (LK.ticks % 20 === 0) { spawnStar(); } if (LK.ticks % 180 === 0) { var spawnRoll = Math.random(); if (spawnRoll < 0.5) { spawnPirate(); } else if (spawnRoll < 0.8) { spawnNPC(); } else { // Spawn multiple entities occasionally spawnPirate(); spawnNPC(); } } // Spawn asteroids if (LK.ticks % 300 === 0) { spawnAsteroid(); } // Wave-based pirate spawning if (LK.ticks % (180 - Math.min(waveNumber * 10, 100)) === 0) { var piratesInWave = 1 + Math.floor(waveNumber / 2); for (var j = 0; j < piratesInWave; j++) { spawnPirate(); } } // Boss wave every 5 waves if (waveNumber > 0 && waveNumber % 5 === 0 && pirates.length === 0) { var bossPirate = new Pirate(); bossPirate.x = ship.x + 1000; bossPirate.y = ship.y; bossPirate.health = 200 + waveNumber * 20; bossPirate.damage = 10 + waveNumber; bossPirate.loot = 200 + waveNumber * 50; bossPirate.speed = 3; var bossGraphics = bossPirate.children[0]; bossGraphics.tint = 0xff00ff; bossGraphics.scaleX = 2; bossGraphics.scaleY = 2; pirates.push(bossPirate); game.addChild(bossPirate); } // Update score LK.setScore(playerCoins + questsCompleted * 100 + enemiesKilled * 10 + Math.floor(totalDistance / 100)); updateUI(); };
===================================================================
--- original.js
+++ change.js
@@ -6,8 +6,33 @@
/****
* Classes
****/
+var Asteroid = Container.expand(function () {
+ var self = Container.call(this);
+ var asteroidGraphics = self.attachAsset('resource', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ tint: 0x8B4513,
+ scaleX: 2,
+ scaleY: 2
+ });
+ self.health = 50;
+ self.resources = Math.floor(Math.random() * 10) + 5;
+ self.vx = (Math.random() - 0.5) * 0.5;
+ self.vy = (Math.random() - 0.5) * 0.5;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.02;
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ LK.effects.flashObject(self, 0xffffff, 100);
+ };
+ self.update = function () {
+ self.x += self.vx;
+ self.y += self.vy;
+ self.rotation += self.rotationSpeed;
+ };
+ return self;
+});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
@@ -128,20 +153,50 @@
anchorY: 0.5
});
self.health = 100;
self.maxHealth = 100;
+ self.shield = 50;
+ self.maxShield = 50;
+ self.shieldRegenDelay = 0;
self.speed = 5;
self.fireRate = 10;
self.damage = 10;
self.lastFire = 0;
+ self.boostSpeed = 0;
+ self.boostCooldown = 0;
self.takeDamage = function (amount) {
- self.health -= amount;
- LK.effects.flashObject(self, 0xff0000, 200);
+ // Shield absorbs damage first
+ if (self.shield > 0) {
+ var shieldDamage = Math.min(amount, self.shield);
+ self.shield -= shieldDamage;
+ amount -= shieldDamage;
+ LK.effects.flashObject(self, 0x0088ff, 100);
+ self.shieldRegenDelay = 180; // 3 seconds delay before shield regen
+ }
+ if (amount > 0) {
+ self.health -= amount;
+ LK.effects.flashObject(self, 0xff0000, 200);
+ }
if (self.health <= 0) {
self.health = 0;
LK.showGameOver();
}
};
+ self.update = function () {
+ // Shield regeneration
+ if (self.shieldRegenDelay > 0) {
+ self.shieldRegenDelay--;
+ } else if (self.shield < self.maxShield) {
+ self.shield = Math.min(self.shield + 0.1, self.maxShield);
+ }
+ // Boost cooldown
+ if (self.boostCooldown > 0) {
+ self.boostCooldown--;
+ }
+ if (self.boostSpeed > 0) {
+ self.boostSpeed -= 0.2;
+ }
+ };
return self;
});
var Star = Container.expand(function () {
var self = Container.call(this);
@@ -159,8 +214,46 @@
self.y += self.vy;
};
return self;
});
+var UpgradeStation = Container.expand(function () {
+ var self = Container.call(this);
+ var stationGraphics = self.attachAsset('pirate', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ tint: 0x00ffff,
+ scaleX: 1.5,
+ scaleY: 1.5
+ });
+ self.type = 'upgrade';
+ self.upgrades = [{
+ name: 'health',
+ cost: 100,
+ metalCost: 10
+ }, {
+ name: 'shield',
+ cost: 150,
+ metalCost: 15
+ }, {
+ name: 'damage',
+ cost: 200,
+ energyCost: 20
+ }, {
+ name: 'speed',
+ cost: 120,
+ energyCost: 10
+ }];
+ self.currentUpgrade = 0;
+ self.rotationSpeed = 0.01;
+ self.update = function () {
+ self.rotation += self.rotationSpeed;
+ // Pulse effect
+ var scale = 1.5 + Math.sin(LK.ticks * 0.05) * 0.1;
+ stationGraphics.scaleX = scale;
+ stationGraphics.scaleY = scale;
+ };
+ return self;
+});
/****
* Initialize Game
****/
@@ -182,12 +275,19 @@
var pirates = [];
var coins = [];
var resources = [];
var stars = [];
+var asteroids = [];
+var upgradeStations = [];
+var boostParticles = [];
+var explosions = [];
var camera = {
x: 0,
y: 0
};
+var waveNumber = 0;
+var enemiesKilled = 0;
+var totalDistance = 0;
// Player stats
var playerCoins = storage.coins || 0;
var playerMetal = storage.metal || 0;
var playerEnergy = storage.energy || 0;
@@ -214,8 +314,30 @@
fill: 0x00FF00
});
healthText.anchor.set(0.5, 0);
LK.gui.top.addChild(healthText);
+var shieldText = new Text2('Shield: 50/50', {
+ size: 40,
+ fill: 0x0088FF
+});
+shieldText.anchor.set(0.5, 0);
+shieldText.y = 60;
+LK.gui.top.addChild(shieldText);
+var boostText = new Text2('BOOST READY', {
+ size: 35,
+ fill: 0x00FFFF
+});
+boostText.anchor.set(0.5, 0);
+boostText.y = 110;
+LK.gui.top.addChild(boostText);
+var waveText = new Text2('Wave: 1', {
+ size: 45,
+ fill: 0xFFFFFF
+});
+waveText.anchor.set(1, 0);
+waveText.x = -20;
+waveText.y = 20;
+LK.gui.topRight.addChild(waveText);
// Create joystick
joystickBase = game.addChild(LK.getAsset('joystickBase', {
anchorX: 0.5,
anchorY: 0.5,
@@ -325,23 +447,103 @@
pirate.x = ship.x - 1400;
pirate.y = ship.y + (Math.random() - 0.5) * 1800;
break;
}
+ // Scale pirate stats based on wave
+ pirate.health = 30 + waveNumber * 10;
+ pirate.damage = 5 + Math.floor(waveNumber / 2);
pirates.push(pirate);
game.addChild(pirate);
}
+function spawnAsteroid() {
+ var asteroid = new Asteroid();
+ var edge = Math.floor(Math.random() * 4);
+ switch (edge) {
+ case 0:
+ asteroid.x = ship.x + (Math.random() - 0.5) * 2200;
+ asteroid.y = ship.y - 1600;
+ break;
+ case 1:
+ asteroid.x = ship.x + 1600;
+ asteroid.y = ship.y + (Math.random() - 0.5) * 2200;
+ break;
+ case 2:
+ asteroid.x = ship.x + (Math.random() - 0.5) * 2200;
+ asteroid.y = ship.y + 1600;
+ break;
+ case 3:
+ asteroid.x = ship.x - 1600;
+ asteroid.y = ship.y + (Math.random() - 0.5) * 2200;
+ break;
+ }
+ asteroids.push(asteroid);
+ game.addChild(asteroid);
+}
+function spawnUpgradeStation() {
+ var station = new UpgradeStation();
+ station.x = ship.x + (Math.random() - 0.5) * 3000;
+ station.y = ship.y + (Math.random() - 0.5) * 3000;
+ upgradeStations.push(station);
+ game.addChild(station);
+}
+function createExplosion(x, y) {
+ for (var i = 0; i < 8; i++) {
+ var particle = LK.getAsset('explosion', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: x,
+ y: y
+ });
+ particle.vx = (Math.random() - 0.5) * 10;
+ particle.vy = (Math.random() - 0.5) * 10;
+ particle.life = 30;
+ explosions.push(particle);
+ game.addChild(particle);
+ }
+}
+function createBoostParticle() {
+ var particle = LK.getAsset('boostParticle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: ship.x - Math.cos(ship.rotation - Math.PI / 2) * 50,
+ y: ship.y - Math.sin(ship.rotation - Math.PI / 2) * 50
+ });
+ particle.vx = -Math.cos(ship.rotation - Math.PI / 2) * 5 + (Math.random() - 0.5) * 2;
+ particle.vy = -Math.sin(ship.rotation - Math.PI / 2) * 5 + (Math.random() - 0.5) * 2;
+ particle.life = 20;
+ boostParticles.push(particle);
+ game.addChild(particle);
+}
function updateUI() {
coinText.setText('Coins: ' + playerCoins);
resourceText.setText('Metal: ' + playerMetal + ' Energy: ' + playerEnergy);
healthText.setText('Health: ' + ship.health + '/' + ship.maxHealth);
+ shieldText.setText('Shield: ' + Math.floor(ship.shield) + '/' + ship.maxShield);
+ waveText.setText('Wave: ' + (waveNumber + 1));
// Update health text color
if (ship.health > 60) {
healthText.fill = 0x00ff00;
} else if (ship.health > 30) {
healthText.fill = 0xffff00;
} else {
healthText.fill = 0xff0000;
}
+ // Update shield text color
+ if (ship.shield > 30) {
+ shieldText.fill = 0x0088ff;
+ } else if (ship.shield > 10) {
+ shieldText.fill = 0xffff00;
+ } else {
+ shieldText.fill = 0xff0000;
+ }
+ // Update boost text
+ if (ship.boostCooldown <= 0) {
+ boostText.setText('BOOST READY');
+ boostText.fill = 0x00ffff;
+ } else {
+ boostText.setText('BOOST: ' + Math.ceil(ship.boostCooldown / 60) + 's');
+ boostText.fill = 0x888888;
+ }
}
function saveProgress() {
storage.coins = playerCoins;
storage.metal = playerMetal;
@@ -353,8 +555,15 @@
if (Math.sqrt(Math.pow(x - joystickBase.x, 2) + Math.pow(y - joystickBase.y, 2)) < 100) {
isDragging = true;
joystickHandle.x = x;
joystickHandle.y = y;
+ } else if (y < 300 && ship.boostCooldown <= 0) {
+ // Boost when tapping upper area of screen
+ ship.boostSpeed = 10;
+ ship.boostCooldown = 300; // 5 seconds cooldown
+ if (LK.getSound('boost')) {
+ LK.getSound('boost').play();
+ }
}
};
game.move = function (x, y, obj) {
if (isDragging) {
@@ -383,13 +592,20 @@
var dx = joystickHandle.x - joystickBase.x;
var dy = joystickHandle.y - joystickBase.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 10) {
- shipDX = dx / 100 * ship.speed;
- shipDY = dy / 100 * ship.speed;
+ var effectiveSpeed = ship.speed + ship.boostSpeed;
+ shipDX = dx / 100 * effectiveSpeed;
+ shipDY = dy / 100 * effectiveSpeed;
ship.rotation = Math.atan2(dy, dx) + Math.PI / 2;
+ // Create boost particles when boosting
+ if (ship.boostSpeed > 0 && LK.ticks % 2 === 0) {
+ createBoostParticle();
+ }
}
}
+ // Track total distance traveled
+ totalDistance += Math.sqrt(shipDX * shipDX + shipDY * shipDY);
// Update camera to follow ship movement
camera.x += shipDX;
camera.y += shipDY;
// Move all world objects opposite to ship movement to create camera effect
@@ -420,8 +636,24 @@
for (var i = 0; i < enemyBullets.length; i++) {
enemyBullets[i].x -= shipDX;
enemyBullets[i].y -= shipDY;
}
+ for (var i = 0; i < asteroids.length; i++) {
+ asteroids[i].x -= shipDX;
+ asteroids[i].y -= shipDY;
+ }
+ for (var i = 0; i < upgradeStations.length; i++) {
+ upgradeStations[i].x -= shipDX;
+ upgradeStations[i].y -= shipDY;
+ }
+ for (var i = 0; i < boostParticles.length; i++) {
+ boostParticles[i].x -= shipDX;
+ boostParticles[i].y -= shipDY;
+ }
+ for (var i = 0; i < explosions.length; i++) {
+ explosions[i].x -= shipDX;
+ explosions[i].y -= shipDY;
+ }
// Auto fire only at very close pirates
if (LK.ticks - ship.lastFire > ship.fireRate && pirates.length > 0) {
// Find nearest pirate within 200 pixels
var nearestPirate = null;
@@ -459,12 +691,15 @@
for (var j = pirates.length - 1; j >= 0; j--) {
if (bullet.intersects(pirates[j])) {
pirates[j].takeDamage(bullet.damage);
if (pirates[j].health <= 0) {
+ enemiesKilled++;
+ createExplosion(pirates[j].x, pirates[j].y);
// Drop loot
var coin = new Coin();
coin.x = pirates[j].x;
coin.y = pirates[j].y;
+ coin.value = coin.value * (1 + Math.floor(waveNumber / 3));
coins.push(coin);
game.addChild(coin);
if (Math.random() < 0.3) {
var resource = new Resource();
@@ -474,15 +709,48 @@
game.addChild(resource);
}
pirates[j].destroy();
pirates.splice(j, 1);
+ // Check for wave completion
+ if (enemiesKilled >= 10 + waveNumber * 5) {
+ waveNumber++;
+ enemiesKilled = 0;
+ // Spawn upgrade station every 3 waves
+ if (waveNumber % 3 === 0) {
+ spawnUpgradeStation();
+ }
+ }
}
bullet.destroy();
bullets.splice(i, 1);
LK.getSound('hit').play();
break;
}
}
+ // Check collision with asteroids
+ for (var j = asteroids.length - 1; j >= 0; j--) {
+ if (bullet.intersects(asteroids[j])) {
+ asteroids[j].takeDamage(bullet.damage);
+ if (asteroids[j].health <= 0) {
+ // Drop multiple resources
+ for (var k = 0; k < asteroids[j].resources; k++) {
+ var resource = new Resource();
+ resource.x = asteroids[j].x + (Math.random() - 0.5) * 100;
+ resource.y = asteroids[j].y + (Math.random() - 0.5) * 100;
+ resource.amount = Math.floor(Math.random() * 3) + 1;
+ resources.push(resource);
+ game.addChild(resource);
+ }
+ createExplosion(asteroids[j].x, asteroids[j].y);
+ asteroids[j].destroy();
+ asteroids.splice(j, 1);
+ }
+ bullet.destroy();
+ bullets.splice(i, 1);
+ LK.getSound('hit').play();
+ break;
+ }
+ }
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
@@ -538,8 +806,83 @@
npc.destroy();
npcs.splice(i, 1);
}
}
+ // Update asteroids
+ for (var i = asteroids.length - 1; i >= 0; i--) {
+ var asteroid = asteroids[i];
+ var dist = Math.sqrt(Math.pow(asteroid.x - ship.x, 2) + Math.pow(asteroid.y - ship.y, 2));
+ if (dist > 2500) {
+ asteroid.destroy();
+ asteroids.splice(i, 1);
+ }
+ }
+ // Update upgrade stations
+ for (var i = upgradeStations.length - 1; i >= 0; i--) {
+ var station = upgradeStations[i];
+ var dist = Math.sqrt(Math.pow(station.x - ship.x, 2) + Math.pow(station.y - ship.y, 2));
+ if (dist < 100 && playerCoins >= 100) {
+ // Apply random upgrade
+ var upgrade = station.upgrades[Math.floor(Math.random() * station.upgrades.length)];
+ if (upgrade.name === 'health' && playerMetal >= (upgrade.metalCost || 0)) {
+ ship.maxHealth += 20;
+ ship.health = ship.maxHealth;
+ playerCoins -= upgrade.cost;
+ playerMetal -= upgrade.metalCost || 0;
+ } else if (upgrade.name === 'shield' && playerMetal >= (upgrade.metalCost || 0)) {
+ ship.maxShield += 10;
+ ship.shield = ship.maxShield;
+ playerCoins -= upgrade.cost;
+ playerMetal -= upgrade.metalCost || 0;
+ } else if (upgrade.name === 'damage' && playerEnergy >= (upgrade.energyCost || 0)) {
+ ship.damage += 5;
+ playerCoins -= upgrade.cost;
+ playerEnergy -= upgrade.energyCost || 0;
+ } else if (upgrade.name === 'speed' && playerEnergy >= (upgrade.energyCost || 0)) {
+ ship.speed += 1;
+ playerCoins -= upgrade.cost;
+ playerEnergy -= upgrade.energyCost || 0;
+ }
+ if (LK.getSound('upgrade')) {
+ LK.getSound('upgrade').play();
+ }
+ updateUI();
+ saveProgress();
+ station.destroy();
+ upgradeStations.splice(i, 1);
+ }
+ if (dist > 3000) {
+ station.destroy();
+ upgradeStations.splice(i, 1);
+ }
+ }
+ // Update boost particles
+ for (var i = boostParticles.length - 1; i >= 0; i--) {
+ var particle = boostParticles[i];
+ particle.x += particle.vx;
+ particle.y += particle.vy;
+ particle.life--;
+ particle.alpha = particle.life / 20;
+ if (particle.life <= 0) {
+ particle.destroy();
+ boostParticles.splice(i, 1);
+ }
+ }
+ // Update explosion particles
+ for (var i = explosions.length - 1; i >= 0; i--) {
+ var particle = explosions[i];
+ particle.x += particle.vx;
+ particle.y += particle.vy;
+ particle.vx *= 0.9;
+ particle.vy *= 0.9;
+ particle.life--;
+ particle.alpha = particle.life / 30;
+ particle.scaleX = particle.scaleY = 1 + (30 - particle.life) / 10;
+ if (particle.life <= 0) {
+ particle.destroy();
+ explosions.splice(i, 1);
+ }
+ }
// Collect items
for (var i = coins.length - 1; i >= 0; i--) {
if (coins[i].intersects(ship)) {
playerCoins += coins[i].value;
@@ -587,13 +930,35 @@
spawnPirate();
spawnNPC();
}
}
- if (LK.ticks % 240 === 0 && Math.random() < 0.3) {
- // Extra pirate wave
- for (var j = 0; j < 2 + Math.floor(Math.random() * 2); j++) {
+ // Spawn asteroids
+ if (LK.ticks % 300 === 0) {
+ spawnAsteroid();
+ }
+ // Wave-based pirate spawning
+ if (LK.ticks % (180 - Math.min(waveNumber * 10, 100)) === 0) {
+ var piratesInWave = 1 + Math.floor(waveNumber / 2);
+ for (var j = 0; j < piratesInWave; j++) {
spawnPirate();
}
}
+ // Boss wave every 5 waves
+ if (waveNumber > 0 && waveNumber % 5 === 0 && pirates.length === 0) {
+ var bossPirate = new Pirate();
+ bossPirate.x = ship.x + 1000;
+ bossPirate.y = ship.y;
+ bossPirate.health = 200 + waveNumber * 20;
+ bossPirate.damage = 10 + waveNumber;
+ bossPirate.loot = 200 + waveNumber * 50;
+ bossPirate.speed = 3;
+ var bossGraphics = bossPirate.children[0];
+ bossGraphics.tint = 0xff00ff;
+ bossGraphics.scaleX = 2;
+ bossGraphics.scaleY = 2;
+ pirates.push(bossPirate);
+ game.addChild(bossPirate);
+ }
// Update score
- LK.setScore(playerCoins + questsCompleted * 100);
+ LK.setScore(playerCoins + questsCompleted * 100 + enemiesKilled * 10 + Math.floor(totalDistance / 100));
+ updateUI();
};
\ No newline at end of file
Uzay temalı global Cevher ticareti, gerçekçi, Altında "Trade" yazsın. In-Game asset. High contrast. No shadows
Uzay temalı global Cevher ticareti, uzay istasyonu, gerçekçi, Altında "Space Stations" yazsın. In-Game asset. High contrast. No shadows
Uzay temalı global Cevher deposu, uzay kargosu, gerçekçi, Altında "Storage" yazsın. In-Game asset. High contrast. No shadows
Uzay temalı Gemi Geliştirme, Tamirci İstasyonu, gerçekçi, Altında "Upgrade" yazsın. In-Game asset. High contrast. No shadows
Uzay temalı global Achievements, gerçekçi, Altında "Achievements" yazsın. In-Game asset. High contrast. No shadows
Uzay temalı, içi altın dolu kapağı açık kasa, gerçekçi, In-Game asset. High contrast. No shadows
Uzay temalı Spaceship Crew, gerçekçi, Altında "crew" yazsın. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı altın coin, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı Savaş Gemisi, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows
Uzay temalı asteroid, üzerinde cevherler bulunsun, gerçekçi, yazısız üstten görünüm. In-Game asset. High contrast. No shadows