User prompt
Oyuncuya hasar aldığında bir hasar alma animasyonu ekle. Düşmanlara da öldüklerinde hafif bir yok olma animasyonu ekle. Ayrıca, oyuncu bir güçlendirme aldığında, karaktere hafif bir büyüyüp küçülme animasyonu ekle. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Speed değeri 10 olduktan sonra artmasın ve bu noktadan sonra Speed güçlendirmesi artık düşmesin. Ayrıca, düşmanlar en alt çizgiye gelirlerse oyuncu hasar alsın.
User prompt
Please fix the bug: 'ReferenceError: AttackSpeedUpgrade is not defined' in or related to this line: 'var attackUpgrade = new AttackSpeedUpgrade();' Line Number: 418
User prompt
Normal düşmanların boyutunu ve her 2 dakikada bir gelen güçlü düşmanın boyutunu artır. Ayrıca, her özellik için güçlendirmeleri ayır ve her birinin farklı renkte güçlendirmesi olsun: Damage güçlendirmesi sarı, Speed mavi, Multishot bordo, Fire Rate turuncu olsun. Fire Rate 8'e ulaştıktan sonra artık bu güçlendirme düşmesin.
User prompt
Bazen güçlendirme aldığımda hasarımda bir anda çok fazla artış gözlemliyorum, bunu istemiyorum. Hasar artışı bir bir olsun.
User prompt
Düşmanların her 30 saniyede bir canlarının 10 artması kalsın, ama buna ek olarak her 1 dakikada bir canlarının ayrıca 20 artmasını istiyorum. Ayrıca, her 2 dakikada bir aşırı yüksek cana sahip bir düşman eklensin; bu düşmanın başlangıç canı 250 olsun ve her gelişinde (her 2 dakikada bir) +250 can eklenerek gelsin.
User prompt
Skor sürekli artmasın biz düşman öldürünce artsın istiyorum ve distance kaldır
User prompt
Düşmanlar çok kenarlara yaklaşmasınlar 25 piksel sınır koymanı istiyorum sınırlara hem güçlendirmeler için hemde düşmanlar için
User prompt
Güçlendirmeler aşağı doğru çok yavaş geliyor onların hızını 2 katına çıkar
User prompt
Güçlendirmeler çok yavaş düşüyor onları hızlandır
User prompt
Saldırı hızımın üst değeri 8 olsun ve 8'e ulaştıktan sonra artık hiç artmasın. Ayrıca, düşmanların güçlenme aralığını 30 saniyede bir olacak şekilde değiştirmeni istiyorum.
User prompt
Saldırı hızı değerim azaldıkça saldırı hızım artıyor; ben bunu istemiyorum. Saldırı hızım 1 olarak başlasın ve her bir tane aldığımda bir artsın; yani saldırı hızım gerçekten artsın istiyorum.
User prompt
Saldırı hızım azaldıkça değil, arttıkça hızlansın. Ayrıca, Multishot 5'e ulaştıktan sonra 6. kez Multishot güçlendirmesi alındığında, mermi sayısı 1'e düşsün ama hasara +3 eklensin şeklinde ayarla.
User prompt
Güçlendirme düşme olasılıkları şöyle olsun: Multishot %10, Speed %20, Damage %20, Fire Rate %25. Ekstra can güçlendirmesi de eklensin, bu yeşil olsun ve düşme oranı %5 olsun.
User prompt
Düşmanlardan düşen güçlendirme olasılığını düşür ve her 1 dakikada bir güçlenen düşmanların can miktarını on on artır.
User prompt
Güçlendirmeleri, düşmanlar öldükten sonra belli bir oranda düşecek şekilde ayarla. Ayrıca, her 1 dakikada bir düşmanların canı artsın. Canavarlardan düşen güçlendirmelerin yanında, çok daha nadir bir şekilde güçlendirmelerin normal yolla da gelmesini istiyorum. Güçlendirmeler rastgele bir değer vermek yerine, belli oranlarla artış sağlasın. Aldığım her güçlendirmenin etkisi kalıcı olsun ve beni yavaş yavaş güçlendirsin.
User prompt
Orta çizgiyi kaldırmanı istiyorum ve düşmanlarla güçlendirmelerin aynı yerden, karışık olarak gelmesini istiyorum. Bir de, sahip olduğum güçlendirmelerin görünmesi için, sağda canımın göründüğü yere sahip olduğum güçlendirmeleri de ekle. Ayrıca, gelen güçlendirmelerin miktarını azalt.
User prompt
Tamam, şimdi gelen düşmanları ve gelen güçlendirme özelliklerini geldikleri tarafların ortasında yapma. Mesela, sol taraftan gelen düşmanlar sol tarafın içinde kalmak şartıyla herhangi bir yerinden gelsin. Aynı şey güçlendirmeler için de geçerli olsun.
User prompt
Saldırı hızı azalt ve saldırı hızını artıran eklentiler ekle (mor olsun). Ayrıca, düşmanların can seviyeleri üstlerinde gösterilsin.
User prompt
Tamam, şimdi karakterimizin ateş etmesini sağla ve gelen düşmanların sağlıkları olsun. Sağ taraftaki geliştirmelere ise ateş özellikleri ekle; örneğin daha fazla mermi ateş etmesi, daha hızlı ateş etmesi gibi özellikler ekle. Ayrıca karakterin sadece sola ve sağa gitmesini ayarlama, serbest bir şekilde geçiş yapma imkânı sağla. Karakteri ben kendim sürüklemek istiyorum.
Code edit (1 edits merged)
Please save this source code
User prompt
Corridor Runner
Initial prompt
Uzun bir koridor olsun ve bu koridorda 2 farklı yol bulunsun; sağ ve sol olarak ikiye ayrılmış olsun. Bu koridorların arasında ince bir duvar bulunsun. Soldaki koridordan sürekli düşman gelsin, sağdaki koridordan ise karakterimizi geliştirme özellikleri gelsin.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Boss = Container.expand(function () { var self = Container.call(this); var bossGraphics = self.attachAsset('boss', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.health = 1000; self.maxHealth = 1000; self.lastY = 0; self.healthText = new Text2(self.health.toString(), { size: 60, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 3 }); self.healthText.anchor.set(0.5, 0.5); self.healthText.x = 0; self.healthText.y = -100; self.addChild(self.healthText); self.takeDamage = function (damage) { self.health -= damage; self.healthText.setText(self.health.toString()); LK.effects.flashObject(self, 0xFFFFFF, 200); if (self.health <= 0) { // Create particle explosion effect for (var p = 0; p < 10; p++) { var particle = new Particle(); particle.x = self.x; particle.y = self.y; var angle = p / 10 * Math.PI * 2; var speed = 4 + Math.random() * 3; particle.vx = Math.cos(angle) * speed; particle.vy = Math.sin(angle) * speed; particle.tint = 0x8B0000; self.parent.addChild(particle); } // Add death animation tween(self, { scaleX: 0.1, scaleY: 0.1, alpha: 0 }, { duration: 500, easing: tween.easeOut }); return true; // Boss is dead } return false; }; self.update = function () { self.y += self.speed; }; 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 = 1; self.lastY = 0; self.update = function () { self.y -= self.speed; }; return self; }); var DamageUpgrade = Container.expand(function () { var self = Container.call(this); var upgradeGraphics = self.attachAsset('damageUpgrade', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; self.lastY = 0; self.update = function () { self.y += self.speed; self.rotation += 0.03; }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 4; self.health = 3; self.maxHealth = 3; self.lastY = 0; self.healthText = new Text2(self.health.toString(), { size: 45, fill: 0xFFFFFF, stroke: 0x000000, strokeThickness: 2 }); self.healthText.anchor.set(0.5, 0.5); self.healthText.x = 0; self.healthText.y = -60; self.addChild(self.healthText); self.takeDamage = function (damage) { self.health -= damage; self.healthText.setText(self.health.toString()); LK.effects.flashObject(self, 0xFFFFFF, 200); if (self.health <= 0) { // Create particle explosion effect for (var p = 0; p < 6; p++) { var particle = new Particle(); particle.x = self.x; particle.y = self.y; var angle = p / 6 * Math.PI * 2; var speed = 3 + Math.random() * 2; particle.vx = Math.cos(angle) * speed; particle.vy = Math.sin(angle) * speed; particle.tint = 0xff4444; self.parent.addChild(particle); } // Add death animation tween(self, { scaleX: 0.1, scaleY: 0.1, alpha: 0 }, { duration: 300, easing: tween.easeOut }); return true; // Enemy is dead } return false; }; self.update = function () { self.y += self.speed; }; return self; }); var FireRateUpgrade = Container.expand(function () { var self = Container.call(this); var upgradeGraphics = self.attachAsset('fireRateUpgrade', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; self.lastY = 0; self.update = function () { self.y += self.speed; self.rotation += 0.03; }; return self; }); var HealthBoost = Container.expand(function () { var self = Container.call(this); var boostGraphics = self.attachAsset('healthBoost', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; self.lastY = 0; self.update = function () { self.y += self.speed; self.rotation += 0.03; }; return self; }); var HealthUpgrade = Container.expand(function () { var self = Container.call(this); var upgradeGraphics = self.attachAsset('healthUpgrade', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; self.lastY = 0; self.update = function () { self.y += self.speed; self.rotation += 0.03; }; return self; }); var MultishotUpgrade = Container.expand(function () { var self = Container.call(this); var upgradeGraphics = self.attachAsset('multishotUpgrade', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; self.lastY = 0; self.update = function () { self.y += self.speed; self.rotation += 0.03; }; return self; }); var Particle = Container.expand(function () { var self = Container.call(this); var particleGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); particleGraphics.scaleX = 0.3; particleGraphics.scaleY = 0.3; particleGraphics.tint = 0xffffff; self.vx = 0; self.vy = 0; self.life = 1.0; self.update = function () { self.x += self.vx; self.y += self.vy; self.life -= 0.02; self.alpha = self.life; if (self.life <= 0) { self.destroy(); } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.health = 3; self.maxHealth = Math.min(3, 10); self.speed = 5; self.fireRate = 1; // Start at 1 and increment up self.bulletDamage = 1; self.multiShot = 1; // Number of bullets per shot self.lastShot = 0; self.shoot = function () { if (LK.ticks - self.lastShot >= Math.floor(60 / self.fireRate)) { self.lastShot = LK.ticks; LK.getSound('shoot').play(); for (var i = 0; i < self.multiShot; i++) { var bullet = new Bullet(); bullet.x = self.x + (i - (self.multiShot - 1) / 2) * 20; bullet.y = self.y - 40; bullet.damage = self.bulletDamage + extraDamageFromBosses; bullet.lastY = bullet.y; bullets.push(bullet); game.addChild(bullet); } } }; self.upgradeFireRate = function () { if (self.fireRate < 8) { self.fireRate += 1; } }; self.upgradeDamage = function () { self.bulletDamage += 1; }; self.upgradeMultiShot = function () { if (self.multiShot >= 5) { // Reset multishot to 1 and add 1 damage self.multiShot = 1; self.bulletDamage += 1; } else { self.multiShot += 1; } }; self.takeDamage = function () { self.health--; LK.getSound('damage').play(); // Add red tint animation to player tween(self, { tint: 0xFF0000 }, { duration: 200, onFinish: function onFinish() { tween(self, { tint: 0xFFFFFF }, { duration: 200 }); } }); if (self.health <= 0) { LK.showGameOver(); } }; self.heal = function () { if (self.health < 10) { var healAmount = 1 + healthRegenLevel; self.health = Math.min(self.health + healAmount, 10); } }; self.upgradeHealthRegen = function () { if (healthRegenLevel < 3) { healthRegenLevel++; } if (healthRegenLevel >= 3) { extraDamageFromBosses += 5; } }; self.upgradeSpeed = function () { if (self.speed < 10) { self.speed = Math.min(Math.floor(self.speed * 1.15) + 1, 10); } }; return self; }); var SpeedUpgrade = Container.expand(function () { var self = Container.call(this); var upgradeGraphics = self.attachAsset('speedUpgrade', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; self.lastY = 0; self.update = function () { self.y += self.speed; self.rotation += 0.03; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // Game dimensions and layout - no lanes, full width spawning var gameWidth = 2048; // Background scrolling setup var background1 = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 })); var background2 = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: -2732 })); var backgroundSpeed = 2; // Create player var player = game.addChild(new Player()); player.x = gameWidth / 2; player.y = 2732 - 200; // Game arrays var enemies = []; var bullets = []; var fireRateUpgrades = []; var healthUpgrades = []; var damageUpgrades = []; var speedUpgrades = []; var multishotUpgrades = []; var bosses = []; var bossSpawnCounter = 0; var healthBoosts = []; var healthRegenLevel = 0; // 0 = +1, 1 = +2, 2 = +3 var extraDamageFromBosses = 0; // Dragging variables var isDragging = false; var dragOffset = { x: 0, y: 0 }; // Game variables var gameSpeed = 1; var enemySpawnRate = 120; // UI Elements var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0, 1); scoreText.x = 50; scoreText.y = -50; LK.gui.bottomLeft.addChild(scoreText); var healthText = new Text2('Health: 3', { size: 60, fill: 0xFF0000 }); healthText.anchor.set(1, 0); LK.gui.topRight.addChild(healthText); // Player upgrades display var upgradesText = new Text2('Upgrades:\nDamage: 1\nSpeed: 5\nMultiShot: 1\nFireRate: 30', { size: 40, fill: 0x00FFFF }); upgradesText.anchor.set(1, 0); upgradesText.x = -10; upgradesText.y = 80; LK.gui.topRight.addChild(upgradesText); // Game timer display var timerText = new Text2('Time: 00:00', { size: 50, fill: 0xFFFFFF }); timerText.anchor.set(0.5, 0); LK.gui.top.addChild(timerText); // Input handling - drag mechanics game.down = function (x, y, obj) { isDragging = true; dragOffset.x = x - player.x; dragOffset.y = y - player.y; }; game.move = function (x, y, obj) { if (isDragging) { player.x = Math.max(50, Math.min(2048 - 50, x - dragOffset.x)); player.y = Math.max(50, Math.min(2732 - 50, y - dragOffset.y)); } }; game.up = function (x, y, obj) { isDragging = false; }; // Main game loop game.update = function () { // Update scrolling background background1.y += backgroundSpeed; background2.y += backgroundSpeed; // Reset background positions when they go off screen if (background1.y >= 2732) { background1.y = background2.y - 2732; } if (background2.y >= 2732) { background2.y = background1.y - 2732; } // Update game speed gameSpeed += 0.001; // Update score and UI scoreText.setText('Score: ' + LK.getScore()); healthText.setText('Health: ' + player.health); upgradesText.setText('Upgrades:\nDamage: ' + player.bulletDamage + '\nSpeed: ' + player.speed + '\nMultiShot: ' + player.multiShot + '\nFireRate: ' + player.fireRate); // Update timer display var minutes = Math.floor(LK.ticks / 3600); var seconds = Math.floor(LK.ticks % 3600 / 60); var timeString = (minutes < 10 ? '0' : '') + minutes + ':' + (seconds < 10 ? '0' : '') + seconds; timerText.setText('Time: ' + timeString); // Calculate enemy health based on time // Every 30 seconds = 1800 ticks at 60fps (+10 health) // Every 60 seconds = 3600 ticks at 60fps (+20 health) var enemyHealthBonus30s = Math.floor(LK.ticks / 1800) * 10; var enemyHealthBonus60s = Math.floor(LK.ticks / 3600) * 20; var enemyHealthBonus = enemyHealthBonus30s + enemyHealthBonus60s; // Spawn enemies across full width if (LK.ticks % Math.max(30, enemySpawnRate - Math.floor(LK.ticks / 100)) == 0) { var enemy = new Enemy(); enemy.x = 25 + Math.random() * (gameWidth - 50); // Random position with 25px boundaries enemy.y = -50; enemy.speed = 4 + gameSpeed; enemy.health = 3 + enemyHealthBonus; enemy.maxHealth = 3 + enemyHealthBonus; enemy.healthText.setText(enemy.health.toString()); enemy.lastY = enemy.y; enemies.push(enemy); game.addChild(enemy); } // Spawn fire rate upgrades across full width (much reduced rate for natural spawns) if (LK.ticks % Math.max(1800, 2400 - Math.floor(LK.ticks / 20)) == 0) { var fireRateUpgrade = new FireRateUpgrade(); fireRateUpgrade.x = 25 + Math.random() * (gameWidth - 50); // Random position with 25px boundaries fireRateUpgrade.y = -50; fireRateUpgrade.speed = 6 + gameSpeed; fireRateUpgrade.lastY = fireRateUpgrade.y; fireRateUpgrades.push(fireRateUpgrade); game.addChild(fireRateUpgrade); } // Spawn boss every 2 minutes (7200 ticks at 60fps) if (LK.ticks > 0 && LK.ticks % 7200 == 0) { var boss = new Boss(); boss.x = gameWidth / 2; boss.y = -75; boss.speed = 2 + gameSpeed * 0.5; // Increase health by 1000 each time boss.health = 1000 + bossSpawnCounter * 1000; boss.maxHealth = boss.health; boss.healthText.setText(boss.health.toString()); boss.lastY = boss.y; bosses.push(boss); game.addChild(boss); bossSpawnCounter++; } // Auto shooting player.shoot(); // Update and check bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; // Check if bullet went off screen if (bullet.lastY > -50 && bullet.y <= -50) { bullet.destroy(); bullets.splice(i, 1); continue; } bullet.lastY = bullet.y; } // Check bullet-enemy collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { var enemyDead = enemy.takeDamage(bullet.damage); bullet.destroy(); bullets.splice(i, 1); if (enemyDead) { LK.setScore(LK.getScore() + 1); // Drop upgrade chance when enemy dies - total 80% chance var dropChance = Math.random(); if (dropChance < 0.25 && player.fireRate < 8) { // 25% Fire Rate upgrade (only if fireRate < 8) var droppedUpgrade = new FireRateUpgrade(); droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x)); droppedUpgrade.y = enemy.y; droppedUpgrade.speed = 4; droppedUpgrade.lastY = droppedUpgrade.y; fireRateUpgrades.push(droppedUpgrade); game.addChild(droppedUpgrade); } else if (dropChance < 0.45) { // 20% Damage upgrade var droppedUpgrade = new DamageUpgrade(); droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x)); droppedUpgrade.y = enemy.y; droppedUpgrade.speed = 4; droppedUpgrade.lastY = droppedUpgrade.y; damageUpgrades.push(droppedUpgrade); game.addChild(droppedUpgrade); } else if (dropChance < 0.65 && player.speed < 10) { // 20% Speed upgrade (only if speed < 10) var droppedUpgrade = new SpeedUpgrade(); droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x)); droppedUpgrade.y = enemy.y; droppedUpgrade.speed = 4; droppedUpgrade.lastY = droppedUpgrade.y; speedUpgrades.push(droppedUpgrade); game.addChild(droppedUpgrade); } else if (dropChance < 0.75) { // 10% Multishot upgrade var droppedUpgrade = new MultishotUpgrade(); droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x)); droppedUpgrade.y = enemy.y; droppedUpgrade.speed = 4; droppedUpgrade.lastY = droppedUpgrade.y; multishotUpgrades.push(droppedUpgrade); game.addChild(droppedUpgrade); } else if (dropChance < 0.80) { // 5% Health upgrade var droppedUpgrade = new HealthUpgrade(); droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x)); droppedUpgrade.y = enemy.y; droppedUpgrade.speed = 4; droppedUpgrade.lastY = droppedUpgrade.y; healthUpgrades.push(droppedUpgrade); game.addChild(droppedUpgrade); } // Remove enemy from array and destroy immediately enemies.splice(j, 1); enemy.destroy(); } break; } } } // Check bullet-boss collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = bosses.length - 1; j >= 0; j--) { var boss = bosses[j]; if (bullet.intersects(boss)) { var bossDead = boss.takeDamage(bullet.damage); bullet.destroy(); bullets.splice(i, 1); if (bossDead) { LK.setScore(LK.getScore() + 100); // Boss always drops health boost var healthBoost = new HealthBoost(); healthBoost.x = boss.x; healthBoost.y = boss.y; healthBoost.speed = 4; healthBoost.lastY = healthBoost.y; healthBoosts.push(healthBoost); game.addChild(healthBoost); // Boss always drops 3 random upgrades for (var k = 0; k < 3; k++) { var dropChance = Math.random(); var droppedUpgrade; if (dropChance < 0.3) { droppedUpgrade = new FireRateUpgrade(); fireRateUpgrades.push(droppedUpgrade); } else if (dropChance < 0.5) { droppedUpgrade = new DamageUpgrade(); damageUpgrades.push(droppedUpgrade); } else if (dropChance < 0.7) { droppedUpgrade = new SpeedUpgrade(); speedUpgrades.push(droppedUpgrade); } else if (dropChance < 0.85) { droppedUpgrade = new MultishotUpgrade(); multishotUpgrades.push(droppedUpgrade); } else { droppedUpgrade = new HealthUpgrade(); healthUpgrades.push(droppedUpgrade); } droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, boss.x + (k - 1) * 60)); droppedUpgrade.y = boss.y; droppedUpgrade.speed = 4; droppedUpgrade.lastY = droppedUpgrade.y; game.addChild(droppedUpgrade); } // Remove boss from array and destroy immediately bosses.splice(j, 1); boss.destroy(); } break; } } } // Update and check enemies for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; // Check if enemy went off screen if (enemy.lastY < 2732 + 50 && enemy.y >= 2732 + 50) { player.takeDamage(); // Player takes damage when enemy reaches bottom enemy.destroy(); enemies.splice(i, 1); continue; } // Check collision with player if (enemy.intersects(player)) { player.takeDamage(); enemy.destroy(); enemies.splice(i, 1); continue; } enemy.lastY = enemy.y; } // Update and check bosses for (var i = bosses.length - 1; i >= 0; i--) { var boss = bosses[i]; // Check if boss went off screen if (boss.lastY < 2732 + 75 && boss.y >= 2732 + 75) { player.takeDamage(); // Player takes damage when boss reaches bottom boss.destroy(); bosses.splice(i, 1); continue; } // Check collision with player if (boss.intersects(player)) { player.takeDamage(); boss.destroy(); bosses.splice(i, 1); continue; } boss.lastY = boss.y; } // Update and check fire rate upgrades for (var i = fireRateUpgrades.length - 1; i >= 0; i--) { var fireRateUpgrade = fireRateUpgrades[i]; // Check if upgrade went off screen if (fireRateUpgrade.lastY < 2732 + 50 && fireRateUpgrade.y >= 2732 + 50) { fireRateUpgrade.destroy(); fireRateUpgrades.splice(i, 1); continue; } // Check collection by player if (fireRateUpgrade.intersects(player)) { LK.getSound('collect').play(); player.upgradeFireRate(); // Add player upgrade animation tween(player, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, onFinish: function onFinish() { tween(player, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150 }); } }); LK.effects.flashObject(fireRateUpgrade, 0xffa500, 300); fireRateUpgrade.destroy(); fireRateUpgrades.splice(i, 1); continue; } fireRateUpgrade.lastY = fireRateUpgrade.y; } // Update and check damage upgrades for (var i = damageUpgrades.length - 1; i >= 0; i--) { var damageUpgrade = damageUpgrades[i]; // Check if upgrade went off screen if (damageUpgrade.lastY < 2732 + 50 && damageUpgrade.y >= 2732 + 50) { damageUpgrade.destroy(); damageUpgrades.splice(i, 1); continue; } // Check collection by player if (damageUpgrade.intersects(player)) { LK.getSound('collect').play(); player.upgradeDamage(); // Add player upgrade animation tween(player, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, onFinish: function onFinish() { tween(player, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150 }); } }); LK.effects.flashObject(damageUpgrade, 0xffff00, 300); damageUpgrade.destroy(); damageUpgrades.splice(i, 1); continue; } damageUpgrade.lastY = damageUpgrade.y; } // Update and check speed upgrades for (var i = speedUpgrades.length - 1; i >= 0; i--) { var speedUpgrade = speedUpgrades[i]; // Check if upgrade went off screen if (speedUpgrade.lastY < 2732 + 50 && speedUpgrade.y >= 2732 + 50) { speedUpgrade.destroy(); speedUpgrades.splice(i, 1); continue; } // Check collection by player if (speedUpgrade.intersects(player)) { LK.getSound('collect').play(); player.upgradeSpeed(); // Add player upgrade animation tween(player, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, onFinish: function onFinish() { tween(player, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150 }); } }); LK.effects.flashObject(speedUpgrade, 0x0000ff, 300); speedUpgrade.destroy(); speedUpgrades.splice(i, 1); continue; } speedUpgrade.lastY = speedUpgrade.y; } // Update and check multishot upgrades for (var i = multishotUpgrades.length - 1; i >= 0; i--) { var multishotUpgrade = multishotUpgrades[i]; // Check if upgrade went off screen if (multishotUpgrade.lastY < 2732 + 50 && multishotUpgrade.y >= 2732 + 50) { multishotUpgrade.destroy(); multishotUpgrades.splice(i, 1); continue; } // Check collection by player if (multishotUpgrade.intersects(player)) { LK.getSound('collect').play(); player.upgradeMultiShot(); // Add player upgrade animation tween(player, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, onFinish: function onFinish() { tween(player, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150 }); } }); LK.effects.flashObject(multishotUpgrade, 0x800000, 300); multishotUpgrade.destroy(); multishotUpgrades.splice(i, 1); continue; } multishotUpgrade.lastY = multishotUpgrade.y; } // Update and check health upgrades for (var i = healthUpgrades.length - 1; i >= 0; i--) { var healthUpgrade = healthUpgrades[i]; // Check if upgrade went off screen if (healthUpgrade.lastY < 2732 + 50 && healthUpgrade.y >= 2732 + 50) { healthUpgrade.destroy(); healthUpgrades.splice(i, 1); continue; } // Check collection by player if (healthUpgrade.intersects(player)) { LK.getSound('collect').play(); player.maxHealth = Math.min(Math.floor(player.maxHealth * 1.2) + 1, 10); player.heal(); // Add player upgrade animation tween(player, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, onFinish: function onFinish() { tween(player, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150 }); } }); LK.effects.flashObject(healthUpgrade, 0x4caf50, 300); healthUpgrade.destroy(); healthUpgrades.splice(i, 1); continue; } healthUpgrade.lastY = healthUpgrade.y; } // Update and check health boosts for (var i = healthBoosts.length - 1; i >= 0; i--) { var healthBoost = healthBoosts[i]; // Check if boost went off screen if (healthBoost.lastY < 2732 + 50 && healthBoost.y >= 2732 + 50) { healthBoost.destroy(); healthBoosts.splice(i, 1); continue; } // Check collection by player if (healthBoost.intersects(player)) { LK.getSound('collect').play(); player.upgradeHealthRegen(); // Add player upgrade animation tween(player, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, onFinish: function onFinish() { tween(player, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150 }); } }); LK.effects.flashObject(healthBoost, 0x00ff80, 300); healthBoost.destroy(); healthBoosts.splice(i, 1); continue; } healthBoost.lastY = healthBoost.y; } }; // Start background music LK.playMusic('background');
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.health = 1000;
self.maxHealth = 1000;
self.lastY = 0;
self.healthText = new Text2(self.health.toString(), {
size: 60,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 3
});
self.healthText.anchor.set(0.5, 0.5);
self.healthText.x = 0;
self.healthText.y = -100;
self.addChild(self.healthText);
self.takeDamage = function (damage) {
self.health -= damage;
self.healthText.setText(self.health.toString());
LK.effects.flashObject(self, 0xFFFFFF, 200);
if (self.health <= 0) {
// Create particle explosion effect
for (var p = 0; p < 10; p++) {
var particle = new Particle();
particle.x = self.x;
particle.y = self.y;
var angle = p / 10 * Math.PI * 2;
var speed = 4 + Math.random() * 3;
particle.vx = Math.cos(angle) * speed;
particle.vy = Math.sin(angle) * speed;
particle.tint = 0x8B0000;
self.parent.addChild(particle);
}
// Add death animation
tween(self, {
scaleX: 0.1,
scaleY: 0.1,
alpha: 0
}, {
duration: 500,
easing: tween.easeOut
});
return true; // Boss is dead
}
return false;
};
self.update = function () {
self.y += self.speed;
};
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 = 1;
self.lastY = 0;
self.update = function () {
self.y -= self.speed;
};
return self;
});
var DamageUpgrade = Container.expand(function () {
var self = Container.call(this);
var upgradeGraphics = self.attachAsset('damageUpgrade', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.lastY = 0;
self.update = function () {
self.y += self.speed;
self.rotation += 0.03;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.health = 3;
self.maxHealth = 3;
self.lastY = 0;
self.healthText = new Text2(self.health.toString(), {
size: 45,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 2
});
self.healthText.anchor.set(0.5, 0.5);
self.healthText.x = 0;
self.healthText.y = -60;
self.addChild(self.healthText);
self.takeDamage = function (damage) {
self.health -= damage;
self.healthText.setText(self.health.toString());
LK.effects.flashObject(self, 0xFFFFFF, 200);
if (self.health <= 0) {
// Create particle explosion effect
for (var p = 0; p < 6; p++) {
var particle = new Particle();
particle.x = self.x;
particle.y = self.y;
var angle = p / 6 * Math.PI * 2;
var speed = 3 + Math.random() * 2;
particle.vx = Math.cos(angle) * speed;
particle.vy = Math.sin(angle) * speed;
particle.tint = 0xff4444;
self.parent.addChild(particle);
}
// Add death animation
tween(self, {
scaleX: 0.1,
scaleY: 0.1,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut
});
return true; // Enemy is dead
}
return false;
};
self.update = function () {
self.y += self.speed;
};
return self;
});
var FireRateUpgrade = Container.expand(function () {
var self = Container.call(this);
var upgradeGraphics = self.attachAsset('fireRateUpgrade', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.lastY = 0;
self.update = function () {
self.y += self.speed;
self.rotation += 0.03;
};
return self;
});
var HealthBoost = Container.expand(function () {
var self = Container.call(this);
var boostGraphics = self.attachAsset('healthBoost', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.lastY = 0;
self.update = function () {
self.y += self.speed;
self.rotation += 0.03;
};
return self;
});
var HealthUpgrade = Container.expand(function () {
var self = Container.call(this);
var upgradeGraphics = self.attachAsset('healthUpgrade', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.lastY = 0;
self.update = function () {
self.y += self.speed;
self.rotation += 0.03;
};
return self;
});
var MultishotUpgrade = Container.expand(function () {
var self = Container.call(this);
var upgradeGraphics = self.attachAsset('multishotUpgrade', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.lastY = 0;
self.update = function () {
self.y += self.speed;
self.rotation += 0.03;
};
return self;
});
var Particle = Container.expand(function () {
var self = Container.call(this);
var particleGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
particleGraphics.scaleX = 0.3;
particleGraphics.scaleY = 0.3;
particleGraphics.tint = 0xffffff;
self.vx = 0;
self.vy = 0;
self.life = 1.0;
self.update = function () {
self.x += self.vx;
self.y += self.vy;
self.life -= 0.02;
self.alpha = self.life;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 3;
self.maxHealth = Math.min(3, 10);
self.speed = 5;
self.fireRate = 1; // Start at 1 and increment up
self.bulletDamage = 1;
self.multiShot = 1; // Number of bullets per shot
self.lastShot = 0;
self.shoot = function () {
if (LK.ticks - self.lastShot >= Math.floor(60 / self.fireRate)) {
self.lastShot = LK.ticks;
LK.getSound('shoot').play();
for (var i = 0; i < self.multiShot; i++) {
var bullet = new Bullet();
bullet.x = self.x + (i - (self.multiShot - 1) / 2) * 20;
bullet.y = self.y - 40;
bullet.damage = self.bulletDamage + extraDamageFromBosses;
bullet.lastY = bullet.y;
bullets.push(bullet);
game.addChild(bullet);
}
}
};
self.upgradeFireRate = function () {
if (self.fireRate < 8) {
self.fireRate += 1;
}
};
self.upgradeDamage = function () {
self.bulletDamage += 1;
};
self.upgradeMultiShot = function () {
if (self.multiShot >= 5) {
// Reset multishot to 1 and add 1 damage
self.multiShot = 1;
self.bulletDamage += 1;
} else {
self.multiShot += 1;
}
};
self.takeDamage = function () {
self.health--;
LK.getSound('damage').play();
// Add red tint animation to player
tween(self, {
tint: 0xFF0000
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
tint: 0xFFFFFF
}, {
duration: 200
});
}
});
if (self.health <= 0) {
LK.showGameOver();
}
};
self.heal = function () {
if (self.health < 10) {
var healAmount = 1 + healthRegenLevel;
self.health = Math.min(self.health + healAmount, 10);
}
};
self.upgradeHealthRegen = function () {
if (healthRegenLevel < 3) {
healthRegenLevel++;
}
if (healthRegenLevel >= 3) {
extraDamageFromBosses += 5;
}
};
self.upgradeSpeed = function () {
if (self.speed < 10) {
self.speed = Math.min(Math.floor(self.speed * 1.15) + 1, 10);
}
};
return self;
});
var SpeedUpgrade = Container.expand(function () {
var self = Container.call(this);
var upgradeGraphics = self.attachAsset('speedUpgrade', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.lastY = 0;
self.update = function () {
self.y += self.speed;
self.rotation += 0.03;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game dimensions and layout - no lanes, full width spawning
var gameWidth = 2048;
// Background scrolling setup
var background1 = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
}));
var background2 = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: -2732
}));
var backgroundSpeed = 2;
// Create player
var player = game.addChild(new Player());
player.x = gameWidth / 2;
player.y = 2732 - 200;
// Game arrays
var enemies = [];
var bullets = [];
var fireRateUpgrades = [];
var healthUpgrades = [];
var damageUpgrades = [];
var speedUpgrades = [];
var multishotUpgrades = [];
var bosses = [];
var bossSpawnCounter = 0;
var healthBoosts = [];
var healthRegenLevel = 0; // 0 = +1, 1 = +2, 2 = +3
var extraDamageFromBosses = 0;
// Dragging variables
var isDragging = false;
var dragOffset = {
x: 0,
y: 0
};
// Game variables
var gameSpeed = 1;
var enemySpawnRate = 120;
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0, 1);
scoreText.x = 50;
scoreText.y = -50;
LK.gui.bottomLeft.addChild(scoreText);
var healthText = new Text2('Health: 3', {
size: 60,
fill: 0xFF0000
});
healthText.anchor.set(1, 0);
LK.gui.topRight.addChild(healthText);
// Player upgrades display
var upgradesText = new Text2('Upgrades:\nDamage: 1\nSpeed: 5\nMultiShot: 1\nFireRate: 30', {
size: 40,
fill: 0x00FFFF
});
upgradesText.anchor.set(1, 0);
upgradesText.x = -10;
upgradesText.y = 80;
LK.gui.topRight.addChild(upgradesText);
// Game timer display
var timerText = new Text2('Time: 00:00', {
size: 50,
fill: 0xFFFFFF
});
timerText.anchor.set(0.5, 0);
LK.gui.top.addChild(timerText);
// Input handling - drag mechanics
game.down = function (x, y, obj) {
isDragging = true;
dragOffset.x = x - player.x;
dragOffset.y = y - player.y;
};
game.move = function (x, y, obj) {
if (isDragging) {
player.x = Math.max(50, Math.min(2048 - 50, x - dragOffset.x));
player.y = Math.max(50, Math.min(2732 - 50, y - dragOffset.y));
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
// Main game loop
game.update = function () {
// Update scrolling background
background1.y += backgroundSpeed;
background2.y += backgroundSpeed;
// Reset background positions when they go off screen
if (background1.y >= 2732) {
background1.y = background2.y - 2732;
}
if (background2.y >= 2732) {
background2.y = background1.y - 2732;
}
// Update game speed
gameSpeed += 0.001;
// Update score and UI
scoreText.setText('Score: ' + LK.getScore());
healthText.setText('Health: ' + player.health);
upgradesText.setText('Upgrades:\nDamage: ' + player.bulletDamage + '\nSpeed: ' + player.speed + '\nMultiShot: ' + player.multiShot + '\nFireRate: ' + player.fireRate);
// Update timer display
var minutes = Math.floor(LK.ticks / 3600);
var seconds = Math.floor(LK.ticks % 3600 / 60);
var timeString = (minutes < 10 ? '0' : '') + minutes + ':' + (seconds < 10 ? '0' : '') + seconds;
timerText.setText('Time: ' + timeString);
// Calculate enemy health based on time
// Every 30 seconds = 1800 ticks at 60fps (+10 health)
// Every 60 seconds = 3600 ticks at 60fps (+20 health)
var enemyHealthBonus30s = Math.floor(LK.ticks / 1800) * 10;
var enemyHealthBonus60s = Math.floor(LK.ticks / 3600) * 20;
var enemyHealthBonus = enemyHealthBonus30s + enemyHealthBonus60s;
// Spawn enemies across full width
if (LK.ticks % Math.max(30, enemySpawnRate - Math.floor(LK.ticks / 100)) == 0) {
var enemy = new Enemy();
enemy.x = 25 + Math.random() * (gameWidth - 50); // Random position with 25px boundaries
enemy.y = -50;
enemy.speed = 4 + gameSpeed;
enemy.health = 3 + enemyHealthBonus;
enemy.maxHealth = 3 + enemyHealthBonus;
enemy.healthText.setText(enemy.health.toString());
enemy.lastY = enemy.y;
enemies.push(enemy);
game.addChild(enemy);
}
// Spawn fire rate upgrades across full width (much reduced rate for natural spawns)
if (LK.ticks % Math.max(1800, 2400 - Math.floor(LK.ticks / 20)) == 0) {
var fireRateUpgrade = new FireRateUpgrade();
fireRateUpgrade.x = 25 + Math.random() * (gameWidth - 50); // Random position with 25px boundaries
fireRateUpgrade.y = -50;
fireRateUpgrade.speed = 6 + gameSpeed;
fireRateUpgrade.lastY = fireRateUpgrade.y;
fireRateUpgrades.push(fireRateUpgrade);
game.addChild(fireRateUpgrade);
}
// Spawn boss every 2 minutes (7200 ticks at 60fps)
if (LK.ticks > 0 && LK.ticks % 7200 == 0) {
var boss = new Boss();
boss.x = gameWidth / 2;
boss.y = -75;
boss.speed = 2 + gameSpeed * 0.5;
// Increase health by 1000 each time
boss.health = 1000 + bossSpawnCounter * 1000;
boss.maxHealth = boss.health;
boss.healthText.setText(boss.health.toString());
boss.lastY = boss.y;
bosses.push(boss);
game.addChild(boss);
bossSpawnCounter++;
}
// Auto shooting
player.shoot();
// Update and check bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
// Check if bullet went off screen
if (bullet.lastY > -50 && bullet.y <= -50) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
bullet.lastY = bullet.y;
}
// Check bullet-enemy collisions
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
var enemyDead = enemy.takeDamage(bullet.damage);
bullet.destroy();
bullets.splice(i, 1);
if (enemyDead) {
LK.setScore(LK.getScore() + 1);
// Drop upgrade chance when enemy dies - total 80% chance
var dropChance = Math.random();
if (dropChance < 0.25 && player.fireRate < 8) {
// 25% Fire Rate upgrade (only if fireRate < 8)
var droppedUpgrade = new FireRateUpgrade();
droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x));
droppedUpgrade.y = enemy.y;
droppedUpgrade.speed = 4;
droppedUpgrade.lastY = droppedUpgrade.y;
fireRateUpgrades.push(droppedUpgrade);
game.addChild(droppedUpgrade);
} else if (dropChance < 0.45) {
// 20% Damage upgrade
var droppedUpgrade = new DamageUpgrade();
droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x));
droppedUpgrade.y = enemy.y;
droppedUpgrade.speed = 4;
droppedUpgrade.lastY = droppedUpgrade.y;
damageUpgrades.push(droppedUpgrade);
game.addChild(droppedUpgrade);
} else if (dropChance < 0.65 && player.speed < 10) {
// 20% Speed upgrade (only if speed < 10)
var droppedUpgrade = new SpeedUpgrade();
droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x));
droppedUpgrade.y = enemy.y;
droppedUpgrade.speed = 4;
droppedUpgrade.lastY = droppedUpgrade.y;
speedUpgrades.push(droppedUpgrade);
game.addChild(droppedUpgrade);
} else if (dropChance < 0.75) {
// 10% Multishot upgrade
var droppedUpgrade = new MultishotUpgrade();
droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x));
droppedUpgrade.y = enemy.y;
droppedUpgrade.speed = 4;
droppedUpgrade.lastY = droppedUpgrade.y;
multishotUpgrades.push(droppedUpgrade);
game.addChild(droppedUpgrade);
} else if (dropChance < 0.80) {
// 5% Health upgrade
var droppedUpgrade = new HealthUpgrade();
droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, enemy.x));
droppedUpgrade.y = enemy.y;
droppedUpgrade.speed = 4;
droppedUpgrade.lastY = droppedUpgrade.y;
healthUpgrades.push(droppedUpgrade);
game.addChild(droppedUpgrade);
}
// Remove enemy from array and destroy immediately
enemies.splice(j, 1);
enemy.destroy();
}
break;
}
}
}
// Check bullet-boss collisions
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
for (var j = bosses.length - 1; j >= 0; j--) {
var boss = bosses[j];
if (bullet.intersects(boss)) {
var bossDead = boss.takeDamage(bullet.damage);
bullet.destroy();
bullets.splice(i, 1);
if (bossDead) {
LK.setScore(LK.getScore() + 100);
// Boss always drops health boost
var healthBoost = new HealthBoost();
healthBoost.x = boss.x;
healthBoost.y = boss.y;
healthBoost.speed = 4;
healthBoost.lastY = healthBoost.y;
healthBoosts.push(healthBoost);
game.addChild(healthBoost);
// Boss always drops 3 random upgrades
for (var k = 0; k < 3; k++) {
var dropChance = Math.random();
var droppedUpgrade;
if (dropChance < 0.3) {
droppedUpgrade = new FireRateUpgrade();
fireRateUpgrades.push(droppedUpgrade);
} else if (dropChance < 0.5) {
droppedUpgrade = new DamageUpgrade();
damageUpgrades.push(droppedUpgrade);
} else if (dropChance < 0.7) {
droppedUpgrade = new SpeedUpgrade();
speedUpgrades.push(droppedUpgrade);
} else if (dropChance < 0.85) {
droppedUpgrade = new MultishotUpgrade();
multishotUpgrades.push(droppedUpgrade);
} else {
droppedUpgrade = new HealthUpgrade();
healthUpgrades.push(droppedUpgrade);
}
droppedUpgrade.x = Math.max(25, Math.min(gameWidth - 25, boss.x + (k - 1) * 60));
droppedUpgrade.y = boss.y;
droppedUpgrade.speed = 4;
droppedUpgrade.lastY = droppedUpgrade.y;
game.addChild(droppedUpgrade);
}
// Remove boss from array and destroy immediately
bosses.splice(j, 1);
boss.destroy();
}
break;
}
}
}
// Update and check enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
// Check if enemy went off screen
if (enemy.lastY < 2732 + 50 && enemy.y >= 2732 + 50) {
player.takeDamage(); // Player takes damage when enemy reaches bottom
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
player.takeDamage();
enemy.destroy();
enemies.splice(i, 1);
continue;
}
enemy.lastY = enemy.y;
}
// Update and check bosses
for (var i = bosses.length - 1; i >= 0; i--) {
var boss = bosses[i];
// Check if boss went off screen
if (boss.lastY < 2732 + 75 && boss.y >= 2732 + 75) {
player.takeDamage(); // Player takes damage when boss reaches bottom
boss.destroy();
bosses.splice(i, 1);
continue;
}
// Check collision with player
if (boss.intersects(player)) {
player.takeDamage();
boss.destroy();
bosses.splice(i, 1);
continue;
}
boss.lastY = boss.y;
}
// Update and check fire rate upgrades
for (var i = fireRateUpgrades.length - 1; i >= 0; i--) {
var fireRateUpgrade = fireRateUpgrades[i];
// Check if upgrade went off screen
if (fireRateUpgrade.lastY < 2732 + 50 && fireRateUpgrade.y >= 2732 + 50) {
fireRateUpgrade.destroy();
fireRateUpgrades.splice(i, 1);
continue;
}
// Check collection by player
if (fireRateUpgrade.intersects(player)) {
LK.getSound('collect').play();
player.upgradeFireRate();
// Add player upgrade animation
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
onFinish: function onFinish() {
tween(player, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
LK.effects.flashObject(fireRateUpgrade, 0xffa500, 300);
fireRateUpgrade.destroy();
fireRateUpgrades.splice(i, 1);
continue;
}
fireRateUpgrade.lastY = fireRateUpgrade.y;
}
// Update and check damage upgrades
for (var i = damageUpgrades.length - 1; i >= 0; i--) {
var damageUpgrade = damageUpgrades[i];
// Check if upgrade went off screen
if (damageUpgrade.lastY < 2732 + 50 && damageUpgrade.y >= 2732 + 50) {
damageUpgrade.destroy();
damageUpgrades.splice(i, 1);
continue;
}
// Check collection by player
if (damageUpgrade.intersects(player)) {
LK.getSound('collect').play();
player.upgradeDamage();
// Add player upgrade animation
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
onFinish: function onFinish() {
tween(player, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
LK.effects.flashObject(damageUpgrade, 0xffff00, 300);
damageUpgrade.destroy();
damageUpgrades.splice(i, 1);
continue;
}
damageUpgrade.lastY = damageUpgrade.y;
}
// Update and check speed upgrades
for (var i = speedUpgrades.length - 1; i >= 0; i--) {
var speedUpgrade = speedUpgrades[i];
// Check if upgrade went off screen
if (speedUpgrade.lastY < 2732 + 50 && speedUpgrade.y >= 2732 + 50) {
speedUpgrade.destroy();
speedUpgrades.splice(i, 1);
continue;
}
// Check collection by player
if (speedUpgrade.intersects(player)) {
LK.getSound('collect').play();
player.upgradeSpeed();
// Add player upgrade animation
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
onFinish: function onFinish() {
tween(player, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
LK.effects.flashObject(speedUpgrade, 0x0000ff, 300);
speedUpgrade.destroy();
speedUpgrades.splice(i, 1);
continue;
}
speedUpgrade.lastY = speedUpgrade.y;
}
// Update and check multishot upgrades
for (var i = multishotUpgrades.length - 1; i >= 0; i--) {
var multishotUpgrade = multishotUpgrades[i];
// Check if upgrade went off screen
if (multishotUpgrade.lastY < 2732 + 50 && multishotUpgrade.y >= 2732 + 50) {
multishotUpgrade.destroy();
multishotUpgrades.splice(i, 1);
continue;
}
// Check collection by player
if (multishotUpgrade.intersects(player)) {
LK.getSound('collect').play();
player.upgradeMultiShot();
// Add player upgrade animation
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
onFinish: function onFinish() {
tween(player, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
LK.effects.flashObject(multishotUpgrade, 0x800000, 300);
multishotUpgrade.destroy();
multishotUpgrades.splice(i, 1);
continue;
}
multishotUpgrade.lastY = multishotUpgrade.y;
}
// Update and check health upgrades
for (var i = healthUpgrades.length - 1; i >= 0; i--) {
var healthUpgrade = healthUpgrades[i];
// Check if upgrade went off screen
if (healthUpgrade.lastY < 2732 + 50 && healthUpgrade.y >= 2732 + 50) {
healthUpgrade.destroy();
healthUpgrades.splice(i, 1);
continue;
}
// Check collection by player
if (healthUpgrade.intersects(player)) {
LK.getSound('collect').play();
player.maxHealth = Math.min(Math.floor(player.maxHealth * 1.2) + 1, 10);
player.heal();
// Add player upgrade animation
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
onFinish: function onFinish() {
tween(player, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
LK.effects.flashObject(healthUpgrade, 0x4caf50, 300);
healthUpgrade.destroy();
healthUpgrades.splice(i, 1);
continue;
}
healthUpgrade.lastY = healthUpgrade.y;
}
// Update and check health boosts
for (var i = healthBoosts.length - 1; i >= 0; i--) {
var healthBoost = healthBoosts[i];
// Check if boost went off screen
if (healthBoost.lastY < 2732 + 50 && healthBoost.y >= 2732 + 50) {
healthBoost.destroy();
healthBoosts.splice(i, 1);
continue;
}
// Check collection by player
if (healthBoost.intersects(player)) {
LK.getSound('collect').play();
player.upgradeHealthRegen();
// Add player upgrade animation
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
onFinish: function onFinish() {
tween(player, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
LK.effects.flashObject(healthBoost, 0x00ff80, 300);
healthBoost.destroy();
healthBoosts.splice(i, 1);
continue;
}
healthBoost.lastY = healthBoost.y;
}
};
// Start background music
LK.playMusic('background');
Aşırı kızgın, hatta kafasından alevler çıkan, kübizm tarzında bir canavar çiz.. In-Game asset. 2d. High contrast. No shadows
kübizm tarzında düz bir mermi. In-Game asset. 2d. High contrast. No shadows
Aşırı kızgın, kübizm tarzında bir canavar çiz.. In-Game asset. 2d. High contrast. No shadows
Bir iyileşme efekti çiz kübizm tarzında. In-Game asset. 2d. High contrast. No shadows
Ortaçağ tarzında bir uzay gemisi çiz ve çizim tarzıda kübizm olsun. In-Game asset. 2d. High contrast. No shadows
Bir iyileşme efekti çiz sade olsun In-Game asset. 2d. High contrast. No shadows
saldırı hızını artışını gösteren bir çizim In-Game asset. 2d. High contrast. No shadows
hız artışını görselleştir ve mavi olsun In-Game asset. 2d. High contrast. No shadows
Birden fazla mermi, üzerinde + işareti olsun ve mavi olsun In-Game asset. 2d. High contrast. No shadows
Kaslı bir kol üstünde de + işareti olan bir çizim yap mavi olsun In-Game asset. 2d. High contrast. No shadows
Tekrar eden başlangıç ve son noktası aynı olan bir uzay arkaplan olarak yapmak istiyorum In-Game asset. 2d. High contrast.