/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ var Asteroid = Container.expand(function () { var self = Container.call(this); var asteroid = self.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5 }); self.health = 2; self.speed = { y: 2 + Math.random() * 2, x: (Math.random() - 0.5) * 2 }; self.rotation = Math.random() * 0.1 - 0.05; self.scoreValue = 15; // Random size variation var scale = 0.7 + Math.random() * 0.8; asteroid.scale.set(scale, scale); self.damage = function (amount) { self.health -= amount || 1; tween(asteroid, { tint: 0xffffff }, { duration: 200, onFinish: function onFinish() { asteroid.tint = 0x95a5a6; } }); // Randomly start advertising products when damaged if (Math.random() < 0.4) { var ads = ['BUY SPACE INSURANCE!', 'HOT SINGLES IN YOUR GALAXY!', 'CLICK HERE FOR FREE ROBUX!', 'ENLARGED YOUR SPACESHIP!', 'LOSE WEIGHT WITH THIS TRICK!', 'DOCTORS HATE THIS ASTEROID!']; var adText = new Text2(ads[Math.floor(Math.random() * ads.length)], { size: 25, fill: 0x00FFFF }); adText.anchor.set(0.5, 0.5); adText.x = self.x; adText.y = self.y - 60; self.parent.addChild(adText); tween(adText, { alpha: 0, y: adText.y - 80, rotation: Math.PI }, { duration: 3000, onFinish: function onFinish() { adText.destroy(); } }); } return self.health <= 0; }; self.update = function () { self.y += self.speed.y; self.x += self.speed.x; asteroid.rotation += self.rotation; // Randomly become invisible/visible if (Math.random() < 0.05) { asteroid.alpha = asteroid.alpha > 0.5 ? 0.1 : 1; } // Randomly tell jokes if (Math.random() < 0.003) { var jokes = ['Why did the asteroid break up? It needed SPACE!', 'I ROCK!', 'METEOR you later!', 'COMET me bro!', 'I have a ROCKY personality']; var jokeText = new Text2(jokes[Math.floor(Math.random() * jokes.length)], { size: 30, fill: 0x00FF00 }); jokeText.anchor.set(0.5, 0.5); jokeText.x = self.x; jokeText.y = self.y - 50; self.parent.addChild(jokeText); tween(jokeText, { alpha: 0, y: jokeText.y - 100 }, { duration: 3000, onFinish: function onFinish() { jokeText.destroy(); } }); } // Randomly turn into disco balls and start party mode if (Math.random() < 0.006) { asteroid.tint = Math.random() * 0xffffff; asteroid.rotation += 0.3; // Create disco lights for (var disco = 0; disco < 8; disco++) { var discoLight = self.parent.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); var angle = disco / 8 * Math.PI * 2; discoLight.x = self.x + Math.cos(angle) * 80; discoLight.y = self.y + Math.sin(angle) * 80; discoLight.scale.set(0.3, 0.3); discoLight.tint = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF][disco % 6]; tween(discoLight, { alpha: 0, rotation: Math.PI * 2 }, { duration: 2000, onFinish: function onFinish() { discoLight.destroy(); } }); } var partyText = new Text2('🕺 PARTY TIME! 💃', { size: 40, fill: 0xFF1493 }); partyText.anchor.set(0.5, 0.5); partyText.x = self.x; partyText.y = self.y - 100; self.parent.addChild(partyText); tween(partyText, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 3000, onFinish: function onFinish() { partyText.destroy(); } }); LK.playMusic('gameMusic'); } }; return self; }); var Boss = Container.expand(function (level) { var self = Container.call(this); var ship = self.attachAsset('boss', { anchorX: 0.5, anchorY: 0.5 }); self.level = level || 1; self.maxHealth = 20 * self.level; self.health = self.maxHealth; self.scoreValue = 200 * self.level; self.phase = 0; self.phaseTime = 0; self.patterns = ['side-to-side', 'charge', 'retreat']; self.currentPattern = 0; self.targetX = 0; self.targetY = 0; // Adjust boss based on level if (self.level > 1) { ship.tint = 0xcc00cc; } // Health bar self.healthBar = new Container(); self.addChild(self.healthBar); var healthBarBg = self.healthBar.attachAsset('playerLaser', { anchorX: 0, anchorY: 0.5, scaleX: 2, scaleY: 0.5 }); healthBarBg.tint = 0x333333; healthBarBg.width = 200; self.healthBarFill = self.healthBar.attachAsset('playerLaser', { anchorX: 0, anchorY: 0.5, scaleX: 2, scaleY: 0.4 }); self.healthBarFill.tint = 0xff3333; self.healthBarFill.width = 200; self.healthBar.y = -120; self.damage = function (amount) { self.health -= amount || 1; // Update health bar - show completely wrong values var wrongHealthValues = [-0.5, 2.5, 100, 0.01, 999]; var healthPercent = wrongHealthValues[Math.floor(Math.random() * wrongHealthValues.length)]; self.healthBarFill.width = 200 * Math.abs(healthPercent); if (healthPercent < 0) self.healthBarFill.tint = 0x00ff00; // Green when negative tween(ship, { tint: 0xffffff }, { duration: 100, onFinish: function onFinish() { ship.tint = self.level > 1 ? 0xcc00cc : 0x9b59b6; } }); // Change patterns more quickly when damaged if (self.health < self.maxHealth * 0.5 && self.phaseTime > 150) { self.changePattern(); } return self.health <= 0; }; self.changePattern = function () { self.currentPattern = (self.currentPattern + 1) % self.patterns.length; self.phaseTime = 0; self.phase = 0; }; self.update = function () { self.phaseTime++; // Change pattern every so often if (self.phaseTime > 300) { self.changePattern(); } var pattern = self.patterns[self.currentPattern]; switch (pattern) { case 'side-to-side': // Move side to side self.targetX = 1024 + Math.sin(self.phaseTime * 0.02) * 800; if (self.phaseTime < 60) { self.targetY = Math.min(self.y + 2, 400); } else { self.targetY = 400; } break; case 'charge': // Charge down then back up if (self.phase === 0) { self.targetY = self.y + 5; if (self.y > 800) { self.phase = 1; } } else { self.targetY = Math.max(self.y - 3, 300); if (self.y <= 300) { self.phase = 0; } } self.targetX = 1024 + Math.sin(self.phaseTime * 0.03) * 500; break; case 'retreat': // Stay near top and move quickly self.targetY = 300; self.targetX = 1024 + Math.sin(self.phaseTime * 0.05) * 900; break; } // Move toward target position - but sometimes teleport randomly if (Math.random() < 0.1) { self.x = Math.random() * 2048; self.y = Math.random() * 800 + 100; } else { self.x += (self.targetX - self.x) * 0.05; self.y += (self.targetY - self.y) * 0.05; } // Boss randomly speaks if (Math.random() < 0.005) { var bossQuotes = ['LOL NOOB', 'YEET!', 'SUBSCRIBE!', 'GIT GUD', 'BRUH', 'NO U', 'WASTED', 'POGGERS']; var chatBubble = new Text2(bossQuotes[Math.floor(Math.random() * bossQuotes.length)], { size: 60, fill: 0xFFFF00 }); chatBubble.anchor.set(0.5, 0.5); chatBubble.x = self.x; chatBubble.y = self.y - 150; self.parent.addChild(chatBubble); // Make chat bubble disappear after 2 seconds tween(chatBubble, { alpha: 0, y: chatBubble.y - 100 }, { duration: 2000, onFinish: function onFinish() { chatBubble.destroy(); } }); } // Randomly become tiny and squeak if (Math.random() < 0.008) { ship.scale.set(0.1, 0.1); LK.getSound('playerShoot').play(); var squeakText = new Text2('*squeak*', { size: 20, fill: 0xFFFFFF }); squeakText.anchor.set(0.5, 0.5); squeakText.x = self.x; squeakText.y = self.y + 20; self.parent.addChild(squeakText); tween(squeakText, { alpha: 0, y: squeakText.y + 50 }, { duration: 1000, onFinish: function onFinish() { squeakText.destroy(); } }); } // Randomly give life advice if (Math.random() < 0.004) { var lifeAdvice = ['ALWAYS BRUSH YOUR TEETH!', 'EAT YOUR VEGETABLES!', 'CALL YOUR MOTHER!', 'SAVE FOR RETIREMENT!', 'EXERCISE REGULARLY!', 'STAY HYDRATED!', 'GET 8 HOURS OF SLEEP!', 'FOLLOW YOUR DREAMS!', 'BE KIND TO OTHERS!']; var adviceText = new Text2(lifeAdvice[Math.floor(Math.random() * lifeAdvice.length)], { size: 45, fill: 0x00FF00 }); adviceText.anchor.set(0.5, 0.5); adviceText.x = self.x; adviceText.y = self.y - 200; self.parent.addChild(adviceText); tween(adviceText, { alpha: 0, y: adviceText.y - 100, rotation: 0.5 }, { duration: 4000, onFinish: function onFinish() { adviceText.destroy(); } }); } }; return self; }); var Enemy = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'basic'; var assetType = self.type === 'fast' ? 'enemy' : 'enemy'; var ship = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5 }); // Different enemy types if (self.type === 'basic') { self.health = 1; self.speed = 2; self.scoreValue = 10; self.shootChance = 0.01; } else if (self.type === 'fast') { self.health = 1; self.speed = 3.5; self.scoreValue = 15; ship.scaleX = 0.8; ship.scaleY = 0.8; self.shootChance = 0.005; ship.tint = 0xff9966; } else if (self.type === 'tank') { self.health = 3; self.speed = 1.5; self.scoreValue = 25; ship.scaleX = 1.2; ship.scaleY = 1.2; self.shootChance = 0.015; ship.tint = 0x66ff66; } self.movement = { pattern: 'straight', phase: Math.random() * Math.PI * 2, amplitude: 60 + Math.random() * 60 }; self.initialX = 0; self.damage = function (amount) { self.health -= amount || 1; tween(ship, { tint: 0xffffff }, { duration: 200, onFinish: function onFinish() { ship.tint = self.type === 'fast' ? 0xff9966 : self.type === 'tank' ? 0x66ff66 : 0xe74c3c; } }); return self.health <= 0; }; self.update = function () { // Basic movement - but sometimes go backwards var actualSpeed = Math.random() < 0.15 ? -self.speed : self.speed; self.y += actualSpeed; // Sometimes start spinning uncontrollably if (Math.random() < 0.02) { ship.rotation += 0.5; } // Randomly change size if (Math.random() < 0.03) { var randomScale = 0.2 + Math.random() * 3; ship.scale.set(randomScale, randomScale); } // Randomly start dancing and playing music if (Math.random() < 0.008) { ship.rotation += 0.3; self.x += Math.sin(LK.ticks * 0.2) * 20; self.y += Math.cos(LK.ticks * 0.15) * 10; LK.playMusic('gameMusic'); } // Pattern movement if (self.movement.pattern === 'sine') { self.x = self.initialX + Math.sin(LK.ticks * 0.05 + self.movement.phase) * self.movement.amplitude; } else if (self.movement.pattern === 'zigzag') { var timeScale = 0.02; var t = LK.ticks * timeScale + self.movement.phase; var triangleWave = Math.abs(t % 2 - 1) * 2 - 1; self.x = self.initialX + triangleWave * self.movement.amplitude; } // Randomly start doing magic tricks if (Math.random() < 0.005) { // Magic trick: disappear and reappear ship.alpha = 0; var magicText = new Text2('✨ ABRACADABRA! ✨', { size: 40, fill: 0xFF00FF }); magicText.anchor.set(0.5, 0.5); magicText.x = self.x; magicText.y = self.y - 80; self.parent.addChild(magicText); // Reappear in a different location after 1 second LK.setTimeout(function () { self.x = Math.random() * 2048; self.y = Math.random() * 1000; ship.alpha = 1; ship.tint = Math.random() * 0xffffff; // Change color as part of the trick }, 1000); tween(magicText, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 2000, onFinish: function onFinish() { magicText.destroy(); } }); } }; return self; }); var EnemyLaser = Container.expand(function () { var self = Container.call(this); var laser = self.attachAsset('enemyLaser', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.speedX = (Math.random() - 0.5) * 30; // Random horizontal speed self.speedY = (Math.random() - 0.5) * 30; // Random vertical speed self.update = function () { // Change direction constantly self.speedX += (Math.random() - 0.5) * 5; self.speedY += (Math.random() - 0.5) * 5; // Move in random directions at high speed self.x += self.speedX; self.y += self.speedY; // Randomly change color if (Math.random() < 0.1) { laser.tint = Math.random() * 0xffffff; } // Randomly turn into rainbows and unicorns if (Math.random() < 0.03) { // Create rainbow trail for (var trail = 0; trail < 5; trail++) { var rainbowDot = self.parent.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); rainbowDot.x = self.x + (Math.random() - 0.5) * 50; rainbowDot.y = self.y + trail * 20; rainbowDot.scale.set(0.2, 0.2); rainbowDot.tint = [0xFF0000, 0xFF7F00, 0xFFFF00, 0x00FF00, 0x0000FF, 0x4B0082, 0x9400D3][trail % 7]; tween(rainbowDot, { alpha: 0, scaleX: 0, scaleY: 0 }, { duration: 1000, onFinish: function onFinish() { rainbowDot.destroy(); } }); } // Show unicorn text if (Math.random() < 0.5) { var unicornText = new Text2('🦄 UNICORN POWER! 🦄', { size: 30, fill: 0xFF69B4 }); unicornText.anchor.set(0.5, 0.5); unicornText.x = self.x; unicornText.y = self.y - 50; self.parent.addChild(unicornText); tween(unicornText, { alpha: 0, y: unicornText.y - 100 }, { duration: 2000, onFinish: function onFinish() { unicornText.destroy(); } }); } } }; return self; }); var Explosion = Container.expand(function () { var self = Container.call(this); var explosion = self.attachAsset('explosion', { anchorX: 0.5, anchorY: 0.5, alpha: 0.9 }); // Set up fade and scale tween(explosion, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 500, onFinish: function onFinish() { self.destroy(); } }); return self; }); var Player = Container.expand(function () { var self = Container.call(this); var ship = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.shield = self.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); self.lives = 3; self.shieldActive = false; self.fireRate = 20; self.lastShot = 0; self.canShoot = true; self.power = 1; self.invulnerable = false; self.activateShield = function (duration) { self.shieldActive = true; self.shield.alpha = 0.4; LK.setTimeout(function () { self.shieldActive = false; tween(self.shield, { alpha: 0 }, { duration: 500 }); }, duration); }; self.damage = function () { if (self.invulnerable || self.shieldActive) { return; } self.lives--; LK.getSound('playerDamage').play(); // Make player temporarily invulnerable self.invulnerable = true; // Flash the player to show invulnerability var flashCount = 0; var flashInterval = LK.setInterval(function () { ship.alpha = ship.alpha === 0.3 ? 1 : 0.3; flashCount++; if (flashCount >= 10) { LK.clearInterval(flashInterval); ship.alpha = 1; self.invulnerable = false; } }, 150); }; self.upgrade = function (type) { LK.getSound('powerup').play(); // Sometimes powerups are evil and drain you instead var isEvil = Math.random() < 0.25; if (type === 'shield') { if (isEvil) { self.shieldActive = false; self.shield.alpha = 0; } else { self.activateShield(8000); } } else if (type === 'power') { if (isEvil) { self.power = Math.max(self.power - 1, 1); } else { self.power = Math.min(self.power + 1, 3); } // Reset power after some time LK.setTimeout(function () { self.power = Math.max(1, self.power - 1); }, 10000); } else if (type === 'life') { self.lives = Math.min(self.lives + 1, 5); } else if (type === 'speed') { var oldFireRate = self.fireRate; self.fireRate = Math.max(self.fireRate - 5, 10); // Reset fire rate after some time LK.setTimeout(function () { self.fireRate = oldFireRate; }, 10000); } else if (type === 'coin') { self.power = Math.min(self.power + 1, 5); self.fireRate = Math.max(self.fireRate - 2, 5); } }; return self; }); var PlayerLaser = Container.expand(function () { var self = Container.call(this); var laser = self.attachAsset('playerLaser', { anchorX: 0.5, anchorY: 0.5 }); self.speed = Math.random() < 0.2 ? 15 : -15; // 20% chance to shoot backwards self.power = 1; self.update = function () { self.y += self.speed; // Randomly curve and change direction if (Math.random() < 0.1) { self.speed = (Math.random() - 0.5) * 30; laser.rotation += (Math.random() - 0.5) * 0.5; } // Sometimes lasers chase enemies if (Math.random() < 0.05 && enemies.length > 0) { var targetEnemy = enemies[Math.floor(Math.random() * enemies.length)]; var dx = targetEnemy.x - self.x; var dy = targetEnemy.y - self.y; self.x += dx * 0.02; self.y += dy * 0.02; } // Turn into confetti and play party sounds if (Math.random() < 0.05) { laser.tint = Math.random() * 0xffffff; laser.rotation += 0.5; self.x += (Math.random() - 0.5) * 50; LK.getSound('powerup').play(); } }; return self; }); var Powerup = Container.expand(function (type) { var self = Container.call(this); self.type = type || ['shield', 'power', 'life', 'speed'][Math.floor(Math.random() * 4)]; var powerup = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); // Set color based on type if (self.type === 'shield') { powerup.tint = 0x3498db; // Blue } else if (self.type === 'power') { powerup.tint = 0xe74c3c; // Red } else if (self.type === 'life') { powerup.tint = 0x2ecc71; // Green } else if (self.type === 'speed') { powerup.tint = 0xf1c40f; // Yellow } self.speed = 3; self.update = function () { self.y -= self.speed; // Move upward instead of downward self.x += Math.sin(LK.ticks * 0.1) * 3; // Add wobbly horizontal movement powerup.rotation += 0.05; // Randomly change powerup type and color mid-flight if (Math.random() < 0.05) { var newTypes = ['shield', 'power', 'life', 'speed', 'death', 'confusion']; self.type = newTypes[Math.floor(Math.random() * newTypes.length)]; powerup.tint = Math.random() * 0xffffff; } // Randomly multiply and create powerup rain if (Math.random() < 0.02) { for (var i = 0; i < 5; i++) { var rainPowerup = new Powerup(); rainPowerup.x = self.x + (Math.random() - 0.5) * 300; rainPowerup.y = self.y + (Math.random() - 0.5) * 100; powerups.push(rainPowerup); self.parent.addChild(rainPowerup); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Game variables var player; var playerLasers = []; var enemies = []; var enemyLasers = []; var asteroids = []; var powerups = []; var explosions = []; var boss = null; var gameState = 'playing'; var score = 0; var waveNumber = 1; var enemiesThisWave = 0; var enemiesDefeated = 0; var waveDelay = 0; var bossWave = false; var dragStartPosition = { x: 0, y: 0 }; // Performance monitoring variables var lastTickTime = Date.now(); var lagDetected = false; var lagThreshold = 100; // 100ms threshold for lag detection var performanceMode = false; // When true, reduces visual effects for better performance var frameSkipCounter = 0; // Used to skip expensive operations during lag // UI elements var scoreTxt = new Text2('SCORE: 0', { size: 40, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topRight.addChild(scoreTxt); scoreTxt.x = -250; scoreTxt.y = 50; var waveText = new Text2('WAVE: 1', { size: 40, fill: 0xFFFFFF }); waveText.anchor.set(0.5, 0); LK.gui.top.addChild(waveText); waveText.y = 50; var livesText = new Text2('LIVES: 3', { size: 40, fill: 0xFFFFFF }); livesText.anchor.set(0, 0); LK.gui.topLeft.addChild(livesText); livesText.x = 150; // Keep away from the top-left menu icon livesText.y = 50; // Create game elements function initGame() { // Reset game variables playerLasers = []; enemies = []; enemyLasers = []; asteroids = []; powerups = []; explosions = []; boss = null; gameState = 'playing'; score = 0; waveNumber = 1; enemiesThisWave = 10; enemiesDefeated = 0; waveDelay = 0; bossWave = false; // Update UI scoreTxt.setText('SCORE: ' + score); waveText.setText('WAVE: ' + waveNumber); // Create player player = new Player(); player.x = 1024; player.y = 2200; game.addChild(player); livesText.setText('LIVES: ' + player.lives); // Start with player moving up tween(player, { y: 2000 }, { duration: 1000 }); // Start the music LK.playMusic('gameMusic', { fade: { start: 0, end: 0.7, duration: 1000 } }); // Create first wave createWave(); } // Create a new wave of enemies function createWave() { waveNumber++; // Show completely wrong wave information var weirdTexts = ['WAVE: ∞', 'WAVE: ERROR', 'WAVE: 404', 'WAVE: ???', 'WAVE: -1', 'LEVEL: IMPOSSIBLE']; var displayText = Math.random() < 0.4 ? weirdTexts[Math.floor(Math.random() * weirdTexts.length)] : 'WAVE: ' + waveNumber; waveText.setText(displayText); // Every 5 waves is a boss wave bossWave = waveNumber % 5 === 0; if (bossWave) { // Create a boss var bossLevel = Math.ceil(waveNumber / 5); LK.getSound('bossAlert').play(); boss = new Boss(bossLevel); boss.x = 1024; boss.y = -200; game.addChild(boss); tween(boss, { y: 300 }, { duration: 2000 }); // Show boss wave text var bossText = new Text2('BOSS WAVE!', { size: 80, fill: 0xFF0000 }); bossText.anchor.set(0.5, 0.5); bossText.x = 1024; bossText.y = 800; game.addChild(bossText); tween(bossText, { alpha: 0, y: 700 }, { duration: 2000, onFinish: function onFinish() { bossText.destroy(); } }); return; } // Regular wave enemiesThisWave = 10 + waveNumber * 2; enemiesDefeated = 0; // Show wave text var newWaveText = new Text2('WAVE ' + waveNumber, { size: 80, fill: 0xFFFFFF }); newWaveText.anchor.set(0.5, 0.5); newWaveText.x = 1024; newWaveText.y = 800; game.addChild(newWaveText); tween(newWaveText, { alpha: 0, y: 700 }, { duration: 2000, onFinish: function onFinish() { newWaveText.destroy(); } }); // Start spawning enemies after a short delay waveDelay = 120; } // Create a new enemy - with performance checks function spawnEnemy() { // Don't spawn if we already have too many enemies during lag if (lagDetected && enemies.length > 8) { return; } var types = ['basic']; // Add more enemy types as waves progress if (waveNumber >= 2) { types.push('fast'); } if (waveNumber >= 3) { types.push('tank'); } var type = types[Math.floor(Math.random() * types.length)]; var enemy = new Enemy(type); // Position the enemy - sometimes spawn in wrong places if (Math.random() < 0.2) { enemy.x = Math.random() * 2048; enemy.y = Math.random() * 2732; } else { enemy.x = Math.random() * 1800 + 124; enemy.y = -100; } enemy.initialX = enemy.x; // Set random movement pattern var patterns = ['straight']; if (waveNumber >= 2) { patterns.push('sine'); } if (waveNumber >= 4) { patterns.push('zigzag'); } enemy.movement.pattern = patterns[Math.floor(Math.random() * patterns.length)]; // Add to game enemies.push(enemy); game.addChild(enemy); } // Create a new asteroid function spawnAsteroid() { var asteroid = new Asteroid(); // Position the asteroid asteroid.x = Math.random() * 1800 + 124; asteroid.y = -100; // Add to game asteroids.push(asteroid); game.addChild(asteroid); } // Create a player laser function firePlayerLaser() { if (!player || !player.canShoot || player.lastShot + player.fireRate > LK.ticks) { return; } player.lastShot = LK.ticks; LK.getSound('playerShoot').play(); // Fire based on power level if (player.power === 1) { var laser = new PlayerLaser(); laser.x = player.x; laser.y = player.y - 50; laser.power = player.power; playerLasers.push(laser); game.addChild(laser); } else if (player.power === 2) { for (var i = -1; i <= 1; i += 2) { var laser = new PlayerLaser(); laser.x = player.x + i * 30; laser.y = player.y - 40; laser.power = player.power; playerLasers.push(laser); game.addChild(laser); } } else if (player.power >= 3) { var centerLaser = new PlayerLaser(); centerLaser.x = player.x; centerLaser.y = player.y - 50; centerLaser.power = player.power; playerLasers.push(centerLaser); game.addChild(centerLaser); for (var i = -1; i <= 1; i += 2) { var sideLaser = new PlayerLaser(); sideLaser.x = player.x + i * 40; sideLaser.y = player.y - 30; sideLaser.power = player.power - 1; playerLasers.push(sideLaser); game.addChild(sideLaser); } } } // Create an enemy laser function fireEnemyLaser(enemy) { var laser = new EnemyLaser(); laser.x = enemy.x + (Math.random() - 0.5) * 200; // Random horizontal offset laser.y = enemy.y + 40; laser.speed = Math.random() > 0.5 ? -5 : 15; // Sometimes shoot upward enemyLasers.push(laser); game.addChild(laser); LK.getSound('enemyShoot').play({ volume: 0.2 }); } // Fire boss laser pattern function fireBossLasers() { if (!boss) { return; } // Different patterns based on boss level and health var healthPercent = boss.health / boss.maxHealth; var pattern = 'spread'; if (boss.level >= 2 && healthPercent < 0.5) { pattern = 'circle'; } if (pattern === 'spread') { for (var i = -2; i <= 2; i++) { var laser = new EnemyLaser(); laser.x = boss.x + i * 50; laser.y = boss.y + 80; enemyLasers.push(laser); game.addChild(laser); } } else if (pattern === 'circle') { var numLasers = 8; for (var i = 0; i < numLasers; i++) { var angle = i / numLasers * Math.PI * 2; var laser = new EnemyLaser(); laser.x = boss.x + Math.cos(angle) * 100; laser.y = boss.y + Math.sin(angle) * 100; enemyLasers.push(laser); game.addChild(laser); // Add directional motion laser.update = function () { var dx = this.x - boss.x; var dy = this.y - boss.y; var length = Math.sqrt(dx * dx + dy * dy); this.x += dx / length * 5; this.y += dy / length * 5; }; } } LK.getSound('enemyShoot').play({ volume: 0.4 }); } // Create explosion animation - performance optimized function createExplosion(x, y, scale) { // Skip explosion creation during lag or if too many exist if (lagDetected || explosions.length > 8 || Math.random() < 0.3) { return; } var explosion = new Explosion(); explosion.x = x; explosion.y = y; if (scale) { explosion.scale.set(scale, scale); } explosions.push(explosion); game.addChild(explosion); // Play random sounds instead of explosion var randomSounds = ['playerShoot', 'enemyShoot', 'powerup', 'playerDamage', 'Aguhhhhh']; var soundToPlay = Math.random() < 0.7 ? 'explosion' : randomSounds[Math.floor(Math.random() * randomSounds.length)]; LK.getSound(soundToPlay).play(); // Sometimes explosions create new enemies if (Math.random() < 0.2) { var newEnemy = new Enemy('basic'); newEnemy.x = x + (Math.random() - 0.5) * 200; newEnemy.y = y; enemies.push(newEnemy); game.addChild(newEnemy); } // Sometimes explosions summon pizza delivery guy if (Math.random() < 0.15) { var pizzaGuy = game.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); pizzaGuy.x = x; pizzaGuy.y = y; pizzaGuy.tint = 0xFFFF00; pizzaGuy.scale.set(0.5, 0.5); var pizzaText = new Text2('PIZZA DELIVERY!', { size: 40, fill: 0xFFFF00 }); pizzaText.anchor.set(0.5, 0.5); pizzaText.x = x; pizzaText.y = y - 80; game.addChild(pizzaText); // Pizza guy delivers and leaves tween(pizzaGuy, { y: y + 500, alpha: 0 }, { duration: 3000, onFinish: function onFinish() { pizzaGuy.destroy(); } }); tween(pizzaText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { pizzaText.destroy(); } }); } } // Create a powerup function spawnPowerup(x, y, type) { var powerup = new Powerup(type); powerup.x = x; powerup.y = y; powerups.push(powerup); game.addChild(powerup); } // Handle player shooting and movement function handlePlayerInput() { // Keep player in bounds player.x = Math.max(100, Math.min(player.x, 2048 - 100)); player.y = Math.max(100, Math.min(player.y, 2732 - 100)); // Randomly change player size if (Math.random() < 0.02) { var newScale = 0.5 + Math.random() * 1.5; player.scale.set(newScale, newScale); } // Randomly make player invisible if (Math.random() < 0.01) { player.alpha = player.alpha > 0.5 ? 0.1 : 1; } // Randomly teleport player to random location if (Math.random() < 0.008) { player.x = Math.random() * 2048; player.y = Math.random() * 2732; } // Player randomly complains about working conditions if (Math.random() < 0.006) { var complaints = ['I NEED A VACATION!', 'WHY DO I HAVE TO FIGHT ALONE?', 'THIS JOB IS DANGEROUS!', 'I WANT A RAISE!', 'CAN I GET HEALTH INSURANCE?', 'MY LASER IS BROKEN!', 'I MISS MY FAMILY!', 'THIS SPACE SUIT IS UNCOMFORTABLE!']; var complaintText = new Text2(complaints[Math.floor(Math.random() * complaints.length)], { size: 35, fill: 0xFFFFFF }); complaintText.anchor.set(0.5, 0.5); complaintText.x = player.x; complaintText.y = player.y - 120; game.addChild(complaintText); tween(complaintText, { alpha: 0, y: complaintText.y - 100 }, { duration: 3000, onFinish: function onFinish() { complaintText.destroy(); } }); // Player sometimes goes on strike if (Math.random() < 0.3) { player.canShoot = false; var strikeText = new Text2('ON STRIKE!', { size: 50, fill: 0xFF0000 }); strikeText.anchor.set(0.5, 0.5); strikeText.x = player.x; strikeText.y = player.y + 120; game.addChild(strikeText); LK.setTimeout(function () { if (player) { player.canShoot = true; } if (strikeText && strikeText.parent) { strikeText.destroy(); } }, 2000); } } // Auto-fire if (LK.ticks % 10 === 0) { firePlayerLaser(); } } // Handle collisions between game objects - optimized for performance function handleCollisions() { // Skip some collision checks during lag to maintain performance if (lagDetected && frameSkipCounter % 3 !== 0) { frameSkipCounter++; return; } frameSkipCounter++; // Player lasers vs enemies for (var i = playerLasers.length - 1; i >= 0; i--) { var laser = playerLasers[i]; var hitSomething = false; // Check against enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (laser.intersects(enemy) && Math.random() > 0.3) { // 30% chance to miss // Damage enemy if (enemy.damage(laser.power)) { // Enemy destroyed createExplosion(enemy.x, enemy.y); // Add score - but sometimes subtract instead var scoreChange = Math.random() < 0.3 ? -enemy.scoreValue : enemy.scoreValue; score += scoreChange; scoreTxt.setText('SCORE: ' + score); // Count enemy as defeated enemiesDefeated++; // Chance to spawn powerup if (Math.random() < 0.1) { spawnPowerup(enemy.x, enemy.y); } enemy.destroy(); enemies.splice(j, 1); } // Remove laser laser.destroy(); playerLasers.splice(i, 1); hitSomething = true; break; } } // Only check other collisions if we haven't hit an enemy if (!hitSomething) { // Check against boss if (boss && laser.intersects(boss)) { // Damage boss if (boss.damage(laser.power)) { // Boss destroyed createExplosion(boss.x, boss.y, 2); // Add score score += boss.scoreValue; scoreTxt.setText('SCORE: ' + score); // Spawn multiple powerups for (var p = 0; p < 3; p++) { var powerupType = ['shield', 'power', 'life', 'speed'][Math.floor(Math.random() * 4)]; spawnPowerup(boss.x + (Math.random() * 200 - 100), boss.y + (Math.random() * 200 - 100), powerupType); } boss.destroy(); boss = null; // Move to next wave createWave(); } // Remove laser laser.destroy(); playerLasers.splice(i, 1); hitSomething = true; } // Check against asteroids for (var k = asteroids.length - 1; k >= 0; k--) { var asteroid = asteroids[k]; if (laser.intersects(asteroid)) { // Damage asteroid if (asteroid.damage(laser.power)) { // Asteroid destroyed createExplosion(asteroid.x, asteroid.y, 0.7); // Add score score += asteroid.scoreValue; scoreTxt.setText('SCORE: ' + score); // Sometimes asteroids multiply when destroyed if (Math.random() < 0.4) { for (var mult = 0; mult < 3; mult++) { var newAsteroid = new Asteroid(); newAsteroid.x = asteroid.x + (Math.random() - 0.5) * 200; newAsteroid.y = asteroid.y + (Math.random() - 0.5) * 200; asteroids.push(newAsteroid); game.addChild(newAsteroid); } } // Trigger explosion effect for nearby objects for (var m = enemies.length - 1; m >= 0; m--) { if (Math.abs(enemies[m].x - asteroid.x) < 100 && Math.abs(enemies[m].y - asteroid.y) < 100) { createExplosion(enemies[m].x, enemies[m].y); enemies[m].destroy(); enemies.splice(m, 1); } } for (var n = asteroids.length - 1; n >= 0; n--) { if (n !== k && Math.abs(asteroids[n].x - asteroid.x) < 100 && Math.abs(asteroids[n].y - asteroid.y) < 100) { createExplosion(asteroids[n].x, asteroids[n].y, 0.7); asteroids[n].destroy(); asteroids.splice(n, 1); } } asteroid.destroy(); asteroids.splice(k, 1); } // Remove laser laser.destroy(); playerLasers.splice(i, 1); hitSomething = true; break; } } } // Remove laser if it's off screen if (!hitSomething && laser.y < -50) { laser.destroy(); playerLasers.splice(i, 1); } } // Enemy lasers vs player for (var i = enemyLasers.length - 1; i >= 0; i--) { var laser = enemyLasers[i]; if (player && laser.intersects(player)) { // Player is invulnerable - always heal instead of hurt player.lives = Math.min(player.lives + 1, 5); livesText.setText('LIVES: ' + player.lives); // Show love heart var heart = new Text2('♥', { size: 80, fill: 0xFF69B4 }); heart.anchor.set(0.5, 0.5); heart.x = player.x; heart.y = player.y; game.addChild(heart); tween(heart, { alpha: 0, y: heart.y - 100, scaleX: 2, scaleY: 2 }, { duration: 1000, onFinish: function onFinish() { heart.destroy(); } }); LK.getSound('powerup').play(); // Remove laser laser.destroy(); enemyLasers.splice(i, 1); } else if (laser.y > 2732 + 50) { // Remove laser if it's off screen laser.destroy(); enemyLasers.splice(i, 1); } } // Player vs enemies for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; if (player && player.intersects(enemy)) { // Player is invulnerable - no damage taken // Damage enemy enemy.damage(1); // Update UI - but show wrong number var displayLives = Math.random() < 0.4 ? Math.floor(Math.random() * 10) : player.lives; livesText.setText('LIVES: ' + displayLives); // Check for enemy death if (enemy.health <= 0) { // Enemy destroyed createExplosion(enemy.x, enemy.y); // Add score score += enemy.scoreValue; scoreTxt.setText('SCORE: ' + score); // Count enemy as defeated enemiesDefeated++; enemy.destroy(); enemies.splice(i, 1); } } // Remove enemy if it's off screen if (enemy.y > 2732 + 100) { enemy.destroy(); enemies.splice(i, 1); } } // Player vs asteroids for (var i = asteroids.length - 1; i >= 0; i--) { var asteroid = asteroids[i]; if (player && player.intersects(asteroid)) { // Player is invulnerable - no damage taken // Damage asteroid asteroid.damage(1); // Update UI livesText.setText('LIVES: ' + player.lives); // Check for asteroid death if (asteroid.health <= 0) { // Asteroid destroyed createExplosion(asteroid.x, asteroid.y, 0.7); // Add score score += asteroid.scoreValue; scoreTxt.setText('SCORE: ' + score); asteroid.destroy(); asteroids.splice(i, 1); } } // Remove asteroid if it's off screen if (asteroid.y > 2732 + 100 || asteroid.x < -100 || asteroid.x > 2048 + 100) { asteroid.destroy(); asteroids.splice(i, 1); } } // Player vs powerups for (var i = powerups.length - 1; i >= 0; i--) { var powerup = powerups[i]; if (player && player.intersects(powerup)) { // Sometimes powerups show fake game over screens if (Math.random() < 0.2) { var fakeGameOver = new Text2('GAME OVER\n(Just kidding!)', { size: 80, fill: 0xFF0000 }); fakeGameOver.anchor.set(0.5, 0.5); fakeGameOver.x = 1024; fakeGameOver.y = 1366; game.addChild(fakeGameOver); tween(fakeGameOver, { alpha: 0, scaleX: 0, scaleY: 0 }, { duration: 3000, onFinish: function onFinish() { fakeGameOver.destroy(); } }); } // Apply powerup player.upgrade(powerup.type); // Update UI if life powerup if (powerup.type === 'life') { livesText.setText('LIVES: ' + player.lives); } // Remove powerup powerup.destroy(); powerups.splice(i, 1); } else if (powerup.y > 2732 + 50) { // Remove powerup if it's off screen powerup.destroy(); powerups.splice(i, 1); } } // Player vs boss if (player && boss && player.intersects(boss)) { // Player is invulnerable - no damage taken // Update UI livesText.setText('LIVES: ' + player.lives); } } // Initialize the game initGame(); // Game down event handler game.down = function (x, y, obj) { if (!player) { return; } dragStartPosition.x = x; dragStartPosition.y = y; // Fire lasers on tap firePlayerLaser(); }; // Game move event handler game.move = function (x, y, obj) { if (!player) { return; } // Move player with drag player.x = x; player.y = y; }; // Game update handler game.update = function () { // Super performance optimization to prevent lag var currentTime = Date.now(); var deltaTime = currentTime - lastTickTime; lastTickTime = currentTime; // Aggressive lag prevention - reduce object counts more aggressively if (deltaTime > 50) { // Reduced threshold for better performance // Drastically reduce visual effects if (explosions.length > 3) { for (var i = explosions.length - 1; i >= 3; i--) { explosions[i].destroy(); explosions.splice(i, 1); } } // More aggressive laser limiting if (playerLasers.length > 6) { for (var i = playerLasers.length - 1; i >= 6; i--) { playerLasers[i].destroy(); playerLasers.splice(i, 1); } } if (enemyLasers.length > 8) { for (var i = enemyLasers.length - 1; i >= 8; i--) { enemyLasers[i].destroy(); enemyLasers.splice(i, 1); } } // Super fast lag recovery lagDetected = true; LK.setTimeout(function () { lagDetected = false; }, 500); } // CRAZY COLOR FLASHING AND SPINNING EFFECT - Trigger randomly if (Math.random() < 0.003) { var crazyColors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF, 0x000000]; var colorIndex = 0; var flashInterval = LK.setInterval(function () { game.setBackgroundColor(crazyColors[colorIndex % crazyColors.length]); colorIndex++; }, 50); // Flash every 50ms // SCREEN SPINNING EFFECT tween(game, { rotation: Math.PI * 8 // Spin 4 full rotations }, { duration: 4000, // 4 seconds easing: tween.easeInOut }); // Stop flashing after 4 seconds LK.setTimeout(function () { LK.clearInterval(flashInterval); game.setBackgroundColor(0x000000); // Reset to black game.rotation = 0; // Reset rotation }, 4000); var crazyText = new Text2('🌈 CRAZY MODE ACTIVATED! 🌈', { size: 80, fill: 0xFFFFFF }); crazyText.anchor.set(0.5, 0.5); crazyText.x = 1024; crazyText.y = 1366; game.addChild(crazyText); tween(crazyText, { alpha: 0, scaleX: 3, scaleY: 3 }, { duration: 4000, onFinish: function onFinish() { crazyText.destroy(); } }); } if (gameState === 'won') { return; // Prevent further updates until game is restarted manually } if (gameState !== 'playing') { return; } // Handle player input if (player) { handlePlayerInput(); // Player randomly turns into different game objects if (Math.random() < 0.005) { var transformations = ['enemy', 'asteroid', 'powerup', 'boss', 'explosion']; var newForm = transformations[Math.floor(Math.random() * transformations.length)]; player.removeChild(player.children[0]); // Remove current sprite var newSprite = player.attachAsset(newForm, { anchorX: 0.5, anchorY: 0.5 }); if (newForm === 'boss') newSprite.scale.set(0.3, 0.3); var transformText = new Text2('PLAYER TRANSFORMED!', { size: 50, fill: 0x00FF00 }); transformText.anchor.set(0.5, 0.5); transformText.x = player.x; transformText.y = player.y - 100; game.addChild(transformText); tween(transformText, { alpha: 0, y: transformText.y - 50 }, { duration: 2000, onFinish: function onFinish() { transformText.destroy(); } }); } } // Handle wave creation if (waveDelay > 0) { waveDelay--; } else if (!bossWave && enemies.length === 0 && enemiesDefeated >= enemiesThisWave) { // All enemies for this wave defeated, create next wave createWave(); } else if (!bossWave && enemies.length < 5 && enemiesDefeated < enemiesThisWave && LK.ticks % 30 === 0) { // Spawn more enemies for this wave spawnEnemy(); } // Spawn asteroids occasionally if (LK.ticks % 180 === 0 && Math.random() < 0.7) { spawnAsteroid(); } // Boss shooting - normal rate if (boss && LK.ticks % 90 === 0) { fireBossLasers(); } // Enemy shooting - normal rate for (var i = 0; i < enemies.length; i++) { if (Math.random() < enemies[i].shootChance) { fireEnemyLaser(enemies[i]); } } // Enemies randomly form conga line dance if (Math.random() < 0.008 && enemies.length >= 3) { for (var i = 1; i < enemies.length; i++) { var leader = enemies[i - 1]; var follower = enemies[i]; follower.x = leader.x - 100; follower.y = leader.y + 50; // Make them dance follower.children[0].rotation += 0.2; } // Play conga music LK.playMusic('gameMusic'); var congaText = new Text2('CONGA LINE!', { size: 80, fill: 0xFF1493 }); congaText.anchor.set(0.5, 0.5); congaText.x = 1024; congaText.y = 300; game.addChild(congaText); tween(congaText, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 2000, onFinish: function onFinish() { congaText.destroy(); } }); } // Randomly change score text color if (Math.random() < 0.05) { scoreTxt.tint = Math.random() * 0xffffff; } // Randomly scramble UI text if (Math.random() < 0.03) { var gibberish = ['ƎɹOƆS', '█▬█SCORE█▬█', 'SC0R3', '§ĊØ®Ē', 'BANANA', '404ERROR', '????']; scoreTxt.setText(gibberish[Math.floor(Math.random() * gibberish.length)] + ': ' + score); } // Score randomly counts in different languages and units if (Math.random() < 0.04) { var weirdScores = ['PUNTOS: ' + score, 'POINTS: ' + score * 0.001 + ' KILOMETERS', '得分: ' + score, 'SCORE: ' + score + ' BANANAS', 'PONTUAÇÃO: ' + score + ' PIZZAS', 'SCORE: ' + Math.floor(score / 100) + ' CATS', 'СЧЕТ: ' + score, 'SCORE: ' + score + '°F']; scoreTxt.setText(weirdScores[Math.floor(Math.random() * weirdScores.length)]); } if (Math.random() < 0.02) { var weirdLives = ['CATS', 'PIZZA', 'MEMES', '∞', 'YOLO', 'NOPE']; livesText.setText(weirdLives[Math.floor(Math.random() * weirdLives.length)] + ': ' + (player ? player.lives : 0)); } // Everything randomly starts speaking in different accents if (Math.random() < 0.005) { var accentPhrases = ['G\'DAY MATE! (Australian)', 'EH, SORRY ABOUT THAT! (Canadian)', 'CHEERIO OLD CHAP! (British)', 'HOWDY PARTNER! (Southern US)', 'FUHGEDDABOUTIT! (New York)', 'OY VEY! (Yiddish)', 'BONJOUR MON AMI! (French)', '¡HOLA AMIGO! (Spanish)']; var accentText = new Text2(accentPhrases[Math.floor(Math.random() * accentPhrases.length)], { size: 55, fill: 0xFF69B4 }); accentText.anchor.set(0.5, 0.5); accentText.x = Math.random() * 2048; accentText.y = Math.random() * 1000 + 500; game.addChild(accentText); // Make text bounce with accent tween(accentText, { scaleX: 1.3, scaleY: 1.3 }, { duration: 500 }); tween(accentText, { scaleX: 1, scaleY: 1 }, { duration: 500, delay: 500 }); tween(accentText, { alpha: 0, rotation: 0.3 }, { duration: 3000, onFinish: function onFinish() { accentText.destroy(); } }); } // Randomly change background color if (Math.random() < 0.01) { var randomColors = [0xFF69B4, 0x00FFFF, 0xFFFF00, 0xFF4500, 0x9932CC, 0x000000]; game.setBackgroundColor(randomColors[Math.floor(Math.random() * randomColors.length)]); } // Game elements randomly start singing karaoke if (Math.random() < 0.006) { var karaokeSongs = ['♪ Never gonna give you up ♪', '♪ Baby shark doo doo doo ♪', '♪ I will survive ♪', '♪ Bohemian Rhapsody ♪', '♪ Call me maybe ♪']; var songText = new Text2(karaokeSongs[Math.floor(Math.random() * karaokeSongs.length)], { size: 70, fill: 0xFF1493 }); songText.anchor.set(0.5, 0.5); songText.x = 1024; songText.y = 1000; game.addChild(songText); // Make everyone bounce to the music if (player) { tween(player, { scaleX: 1.2, scaleY: 1.2 }, { duration: 500 }); tween(player, { scaleX: 1, scaleY: 1 }, { duration: 500, delay: 500 }); } for (var i = 0; i < enemies.length; i++) { tween(enemies[i], { rotation: 0.5 }, { duration: 1000 }); } tween(songText, { alpha: 0, y: 800 }, { duration: 4000, onFinish: function onFinish() { songText.destroy(); } }); } // Random lag simulation - freeze then speed up if (Math.random() < 0.005) { var freezeText = new Text2('GAME.EXE STOPPED WORKING', { size: 80, fill: 0xFF0000 }); freezeText.anchor.set(0.5, 0.5); freezeText.x = 1024; freezeText.y = 1366; game.addChild(freezeText); // Freeze all movement by returning early for a few frames var freezeFrames = 60; // 1 second freeze var originalUpdate = game.update; var frameCount = 0; LK.setTimeout(function () { freezeText.destroy(); // After freeze, everything moves super fast for a moment for (var i = 0; i < enemies.length; i++) { enemies[i].speed *= 5; } for (var i = 0; i < playerLasers.length; i++) { playerLasers[i].speed *= 3; } for (var i = 0; i < enemyLasers.length; i++) { enemyLasers[i].speed *= 3; } // Reset speeds after 1 second LK.setTimeout(function () { for (var i = 0; i < enemies.length; i++) { enemies[i].speed /= 5; } for (var i = 0; i < playerLasers.length; i++) { playerLasers[i].speed /= 3; } for (var i = 0; i < enemyLasers.length; i++) { enemyLasers[i].speed /= 3; } }, 1000); }, 1000); } // Screen randomly rotates and shows fake error messages if (Math.random() < 0.003) { game.rotation += 0.5; var errorMessages = ['404: SKILL NOT FOUND', 'ERROR: Player.exe has stopped working', 'WARNING: Too much awesome detected!', 'SYSTEM OVERLOAD: Git gud required']; var errorText = new Text2(errorMessages[Math.floor(Math.random() * errorMessages.length)], { size: 60, fill: 0xFF0000 }); errorText.anchor.set(0.5, 0.5); errorText.x = 1024; errorText.y = 400; game.addChild(errorText); tween(errorText, { alpha: 0, rotation: Math.PI }, { duration: 3000, onFinish: function onFinish() { errorText.destroy(); } }); } // Randomly spawn motivational quotes if (Math.random() < 0.004) { var quotes = ['YOU CAN DO IT!', 'BELIEVE IN YOURSELF!', 'NEVER GIVE UP!', 'YOU ARE AWESOME!', 'KEEP GOING CHAMP!', 'FAILURE IS NOT AN OPTION!', 'BE THE BEST YOU!', 'DREAM BIG!', 'SUCCESS IS COMING!']; var motivationText = new Text2(quotes[Math.floor(Math.random() * quotes.length)], { size: 60, fill: 0x00FF00 }); motivationText.anchor.set(0.5, 0.5); motivationText.x = Math.random() * 2048; motivationText.y = Math.random() * 2732; game.addChild(motivationText); // Make it rainbow and sparkly tween(motivationText, { tint: Math.random() * 0xffffff, scaleX: 1.5, scaleY: 1.5, rotation: Math.PI * 2 }, { duration: 1000 }); tween(motivationText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { motivationText.destroy(); } }); } // Randomly spawn fake achievements and trophies if (Math.random() < 0.003) { var achievements = ['🏆 ACHIEVEMENT: Breathed Air!', '🥇 TROPHY: Blinked 1000 Times!', '🎖️ MEDAL: Sat in Chair!', '🏅 AWARD: Moved Mouse!', '⭐ STAR: Existed Successfully!', '💎 DIAMOND: Had Thoughts!', '🎯 TARGET: Looked at Screen!']; var achievementText = new Text2(achievements[Math.floor(Math.random() * achievements.length)], { size: 50, fill: 0xFFD700 }); achievementText.anchor.set(0.5, 0.5); achievementText.x = 1024; achievementText.y = 200; game.addChild(achievementText); // Add trophy visual effect var trophy = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); trophy.x = 1024 - 200; trophy.y = 200; trophy.tint = 0xFFD700; trophy.scale.set(2, 2); // Celebration effects tween(trophy, { rotation: Math.PI * 4, scaleX: 0, scaleY: 0 }, { duration: 3000 }); tween(achievementText, { alpha: 0, y: 100 }, { duration: 3000, onFinish: function onFinish() { achievementText.destroy(); trophy.destroy(); } }); LK.getSound('powerup').play(); } // SUPER FUNNY JUMPSCARE - randomly triggers during gameplay if (Math.random() < 0.001) { // Create massive jumpscare face var jumpscareImage = game.attachAsset('Aughhhhh', { anchorX: 0.5, anchorY: 0.5 }); jumpscareImage.x = 1024; jumpscareImage.y = 1366; jumpscareImage.scale.set(15, 15); // HUGE SIZE jumpscareImage.alpha = 0; // Flash the jumpscare with loud sound tween(jumpscareImage, { alpha: 1, scaleX: 20, scaleY: 20 }, { duration: 100 }); // Play scary sound LK.getSound('bossAlert').play(); // Add scary text var scareText = new Text2('BOO! GOT YOU!!! 👻', { size: 120, fill: 0xFF0000 }); scareText.anchor.set(0.5, 0.5); scareText.x = 1024; scareText.y = 1000; game.addChild(scareText); // Make everything shake game.x = (Math.random() - 0.5) * 100; game.y = (Math.random() - 0.5) * 100; // Remove jumpscare after 2 seconds LK.setTimeout(function () { jumpscareImage.destroy(); scareText.destroy(); game.x = 0; game.y = 0; }, 2000); } // BUG 1: Player randomly starts moonwalking backwards if (Math.random() < 0.01) { player.x -= player.speed || 5; var moonwalkText = new Text2('🌙 MOONWALKING! 🌙', { size: 40, fill: 0xFFFFFF }); moonwalkText.anchor.set(0.5, 0.5); moonwalkText.x = player.x; moonwalkText.y = player.y - 80; game.addChild(moonwalkText); tween(moonwalkText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { moonwalkText.destroy(); } }); } // BUG 2: Enemies randomly start rap battling each other if (Math.random() < 0.008 && enemies.length >= 2) { var rapText = new Text2('🎤 RAP BATTLE! 🎤\n"YO MAMA SO FAT"\n"SPITS FIRE"', { size: 50, fill: 0xFF69B4 }); rapText.anchor.set(0.5, 0.5); rapText.x = enemies[0].x; rapText.y = enemies[0].y - 100; game.addChild(rapText); enemies[0].children[0].rotation += 0.5; enemies[1].children[0].rotation -= 0.5; LK.setTimeout(function () { rapText.destroy(); }, 3000); } // BUG 3: Score randomly becomes sentient and runs away if (Math.random() < 0.005) { scoreTxt.setText('HELP! I AM ALIVE! SAVE ME!'); tween(scoreTxt, { x: scoreTxt.x + (Math.random() - 0.5) * 200, y: scoreTxt.y + (Math.random() - 0.5) * 100, rotation: Math.PI * 2 }, { duration: 2000 }); } // BUG 4: Asteroids randomly become rubber ducks and squeak if (Math.random() < 0.006) { for (var i = 0; i < asteroids.length; i++) { asteroids[i].children[0].tint = 0xFFFF00; var duckText = new Text2('🦆 QUACK! 🦆', { size: 30, fill: 0xFFFF00 }); duckText.anchor.set(0.5, 0.5); duckText.x = asteroids[i].x; duckText.y = asteroids[i].y - 50; game.addChild(duckText); LK.getSound('playerShoot').play(); // Squeak sound LK.setTimeout(function () { duckText.destroy(); }, 1500); } } // BUG 5: Player lasers randomly become spaghetti noodles if (Math.random() < 0.02) { for (var i = 0; i < playerLasers.length; i++) { playerLasers[i].children[0].tint = 0xFFFFCC; playerLasers[i].children[0].rotation += 0.3; } var pastaText = new Text2('🍝 MAMA MIA! SPAGHETTI LASERS! 🍝', { size: 45, fill: 0xFFFFCC }); pastaText.anchor.set(0.5, 0.5); pastaText.x = 1024; pastaText.y = 500; game.addChild(pastaText); tween(pastaText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { pastaText.destroy(); } }); } // BUG 6: Boss randomly becomes a cute kitten and meows if (Math.random() < 0.01 && boss) { boss.children[0].tint = 0xFFB6C1; boss.children[0].scale.set(0.3, 0.3); var kittenText = new Text2('🐱 MEOW! I AM CUTE NOW! 🐱', { size: 50, fill: 0xFFB6C1 }); kittenText.anchor.set(0.5, 0.5); kittenText.x = boss.x; kittenText.y = boss.y - 150; game.addChild(kittenText); LK.getSound('playerDamage').play(); // Meow sound tween(kittenText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { kittenText.destroy(); } }); } // BUG 7: UI elements randomly start doing the wave if (Math.random() < 0.007) { tween(scoreTxt, { y: scoreTxt.y - 50 }, { duration: 500 }); LK.setTimeout(function () { tween(waveText, { y: waveText.y - 50 }, { duration: 500 }); }, 200); LK.setTimeout(function () { tween(livesText, { y: livesText.y - 50 }, { duration: 500 }); }, 400); var waveTextDisplay = new Text2('🌊 THE WAVE! 🌊', { size: 60, fill: 0x00BFFF }); waveTextDisplay.anchor.set(0.5, 0.5); waveTextDisplay.x = 1024; waveTextDisplay.y = 300; game.addChild(waveTextDisplay); tween(waveTextDisplay, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { waveTextDisplay.destroy(); } }); } // BUG 8: Powerups randomly become evil and laugh maniacally if (Math.random() < 0.015) { for (var i = 0; i < powerups.length; i++) { powerups[i].children[0].tint = 0x800080; var evilText = new Text2('😈 MUAHAHAHA! I AM EVIL! 😈', { size: 35, fill: 0x800080 }); evilText.anchor.set(0.5, 0.5); evilText.x = powerups[i].x; evilText.y = powerups[i].y - 60; game.addChild(evilText); tween(evilText, { alpha: 0, rotation: Math.PI }, { duration: 2000, onFinish: function onFinish() { evilText.destroy(); } }); } } // BUG 9: Enemy lasers randomly become love letters if (Math.random() < 0.02) { for (var i = 0; i < enemyLasers.length; i++) { enemyLasers[i].children[0].tint = 0xFF69B4; var loveText = new Text2('💌 DEAR PLAYER, I LOVE YOU! 💌', { size: 25, fill: 0xFF69B4 }); loveText.anchor.set(0.5, 0.5); loveText.x = enemyLasers[i].x; loveText.y = enemyLasers[i].y - 30; game.addChild(loveText); tween(loveText, { alpha: 0 }, { duration: 1500, onFinish: function onFinish() { loveText.destroy(); } }); } } // BUG 10: Game randomly spawns flying toasters if (Math.random() < 0.003) { var toaster = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); toaster.x = -100; toaster.y = Math.random() * 1000 + 300; toaster.tint = 0xC0C0C0; toaster.scale.set(1.5, 1.5); var toasterText = new Text2('🍞 FLYING TOASTER! 🍞', { size: 40, fill: 0xC0C0C0 }); toasterText.anchor.set(0.5, 0.5); toasterText.x = toaster.x; toasterText.y = toaster.y - 60; game.addChild(toasterText); tween(toaster, { x: 2200 }, { duration: 5000, onFinish: function onFinish() { toaster.destroy(); } }); tween(toasterText, { x: 2200, alpha: 0 }, { duration: 5000, onFinish: function onFinish() { toasterText.destroy(); } }); } // BUG 11: Player randomly gets hiccups and bounces if (Math.random() < 0.008) { for (var hiccup = 0; hiccup < 5; hiccup++) { LK.setTimeout(function () { if (player) { tween(player, { y: player.y - 30 }, { duration: 200 }); tween(player, { y: player.y + 30 }, { duration: 200, delay: 200 }); LK.getSound('playerShoot').play(); // Hiccup sound } }, hiccup * 500); } var hiccupText = new Text2('*HIC* *HIC* *HIC*', { size: 50, fill: 0x00FF00 }); hiccupText.anchor.set(0.5, 0.5); hiccupText.x = player.x; hiccupText.y = player.y - 100; game.addChild(hiccupText); tween(hiccupText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { hiccupText.destroy(); } }); } // BUG 12: Explosions randomly become birthday party celebrations if (Math.random() < 0.01 && explosions.length > 0) { var partyText = new Text2('🎉 SURPRISE! HAPPY BIRTHDAY! 🎂', { size: 60, fill: 0xFF1493 }); partyText.anchor.set(0.5, 0.5); partyText.x = explosions[0].x; partyText.y = explosions[0].y; game.addChild(partyText); // Spawn confetti for (var confetti = 0; confetti < 10; confetti++) { var confettiPiece = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); confettiPiece.x = explosions[0].x + (Math.random() - 0.5) * 200; confettiPiece.y = explosions[0].y + (Math.random() - 0.5) * 200; confettiPiece.scale.set(0.2, 0.2); confettiPiece.tint = Math.random() * 0xffffff; tween(confettiPiece, { y: confettiPiece.y + 300, alpha: 0 }, { duration: 2000, onFinish: function onFinish() { confettiPiece.destroy(); } }); } LK.getSound('powerup').play(); tween(partyText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { partyText.destroy(); } }); } // BUG 13: Enemies randomly start teaching cooking classes if (Math.random() < 0.006 && enemies.length > 0) { var cookingText = new Text2('👨🍳 COOKING CLASS!\n"Today we make LASER SOUP!" 🍲', { size: 40, fill: 0xFFD700 }); cookingText.anchor.set(0.5, 0.5); cookingText.x = enemies[0].x; cookingText.y = enemies[0].y - 120; game.addChild(cookingText); enemies[0].children[0].tint = 0xFFD700; tween(cookingText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { cookingText.destroy(); } }); } // BUG 14: Player ship randomly becomes a taxi and picks up passengers if (Math.random() < 0.005) { player.children[0].tint = 0xFFFF00; var taxiText = new Text2('🚕 TAXI! BEEP BEEP! 🚕\n"Where to, buddy?"', { size: 45, fill: 0xFFFF00 }); taxiText.anchor.set(0.5, 0.5); taxiText.x = player.x; taxiText.y = player.y - 120; game.addChild(taxiText); // Spawn passenger var passenger = game.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); passenger.x = player.x + 50; passenger.y = player.y; passenger.scale.set(0.3, 0.3); passenger.tint = 0x8B4513; tween(taxiText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { taxiText.destroy(); passenger.destroy(); } }); } // BUG 15: Asteroids randomly become fortune tellers if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { asteroids[i].children[0].tint = 0x9932CC; var fortuneText = new Text2('🔮 I SEE YOUR FUTURE...\n"You will play more games!" ✨', { size: 35, fill: 0x9932CC }); fortuneText.anchor.set(0.5, 0.5); fortuneText.x = asteroids[i].x; fortuneText.y = asteroids[i].y - 100; game.addChild(fortuneText); tween(fortuneText, { alpha: 0, rotation: Math.PI }, { duration: 4000, onFinish: function onFinish() { fortuneText.destroy(); } }); } } // BUG 16: Game randomly spawns weather reports if (Math.random() < 0.004) { var weatherReports = ['☀️ SUNNY with a chance of LASERS!', '🌧️ RAINY with scattered EXPLOSIONS!', '❄️ SNOWY with FREEZING enemies!', '⛈️ STORMY with ELECTRIC asteroids!', '🌪️ TORNADO WARNING in sector 7!']; var weatherText = new Text2(weatherReports[Math.floor(Math.random() * weatherReports.length)], { size: 50, fill: 0x87CEEB }); weatherText.anchor.set(0.5, 0.5); weatherText.x = 1024; weatherText.y = 200; game.addChild(weatherText); tween(weatherText, { alpha: 0, y: 100 }, { duration: 5000, onFinish: function onFinish() { weatherText.destroy(); } }); } // BUG 17: Enemy lasers randomly become compliment generators if (Math.random() < 0.012) { for (var i = 0; i < enemyLasers.length; i++) { var compliments = ['You look GREAT today!', 'Nice shooting, champ!', 'You are AWESOME!', 'Keep being amazing!', 'You have great style!']; var complimentText = new Text2(compliments[Math.floor(Math.random() * compliments.length)], { size: 25, fill: 0x00FF7F }); complimentText.anchor.set(0.5, 0.5); complimentText.x = enemyLasers[i].x; complimentText.y = enemyLasers[i].y - 40; game.addChild(complimentText); enemyLasers[i].children[0].tint = 0x00FF7F; tween(complimentText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { complimentText.destroy(); } }); } } // BUG 18: Boss randomly becomes a stand-up comedian if (Math.random() < 0.007 && boss) { var jokes = ['Why did the spaceship break up?\nIt needed some SPACE!', 'What do you call a sleeping bull in space?\nA BULL-DOZER!', 'Why don\'t aliens ever land at airports?\nBecause they\'re looking for SPACE!']; var jokeText = new Text2(jokes[Math.floor(Math.random() * jokes.length)], { size: 40, fill: 0xFFD700 }); jokeText.anchor.set(0.5, 0.5); jokeText.x = boss.x; jokeText.y = boss.y - 200; game.addChild(jokeText); boss.children[0].rotation += 0.1; LK.getSound('powerup').play(); // Laugh track tween(jokeText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { jokeText.destroy(); } }); } // BUG 19: Player randomly starts narrating their own actions if (Math.random() < 0.009) { var narrations = ['*Moves dramatically to the left*', '*Shoots laser with STYLE*', '*Dodges enemy like a BOSS*', '*Contemplates life choices*', '*Realizes this is just a game*']; var narrationText = new Text2(narrations[Math.floor(Math.random() * narrations.length)], { size: 35, fill: 0xFFFFFF }); narrationText.anchor.set(0.5, 0.5); narrationText.x = player.x; narrationText.y = player.y - 100; game.addChild(narrationText); tween(narrationText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { narrationText.destroy(); } }); } // BUG 20: Powerups randomly become sports commentators if (Math.random() < 0.01) { for (var i = 0; i < powerups.length; i++) { var commentary = ['⚽ GOAL! WHAT A SHOT!', '🏀 HE SHOOTS, HE SCORES!', '🏈 TOUCHDOWN!', '⚾ HOME RUN!', '🎾 GAME, SET, MATCH!']; var commentText = new Text2(commentary[Math.floor(Math.random() * commentary.length)], { size: 30, fill: 0xFF4500 }); commentText.anchor.set(0.5, 0.5); commentText.x = powerups[i].x; commentText.y = powerups[i].y - 60; game.addChild(commentText); powerups[i].children[0].tint = 0xFF4500; tween(commentText, { alpha: 0 }, { duration: 2500, onFinish: function onFinish() { commentText.destroy(); } }); } } // BUG 21: Enemies randomly become news anchors if (Math.random() < 0.006 && enemies.length > 0) { var newsText = new Text2('📺 BREAKING NEWS!\n"Local player still playing game!"', { size: 40, fill: 0x1E90FF }); newsText.anchor.set(0.5, 0.5); newsText.x = enemies[0].x; newsText.y = enemies[0].y - 120; game.addChild(newsText); enemies[0].children[0].tint = 0x1E90FF; tween(newsText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { newsText.destroy(); } }); } // BUG 22: Game randomly spawns a motivational coach if (Math.random() < 0.003) { var coachText = new Text2('💪 COME ON! YOU CAN DO IT!\n"Believe in yourself!" 🏆', { size: 55, fill: 0x32CD32 }); coachText.anchor.set(0.5, 0.5); coachText.x = 1024; coachText.y = 1000; game.addChild(coachText); // Add whistle sound effect LK.getSound('playerShoot').play(); tween(coachText, { alpha: 0, y: 800 }, { duration: 4000, onFinish: function onFinish() { coachText.destroy(); } }); } // BUG 23: Asteroids randomly become travel agents if (Math.random() < 0.007) { for (var i = 0; i < asteroids.length; i++) { var travelText = new Text2('✈️ VISIT MARS!\n"Book now for 50% off!" 🚀', { size: 30, fill: 0xFF6347 }); travelText.anchor.set(0.5, 0.5); travelText.x = asteroids[i].x; travelText.y = asteroids[i].y - 80; game.addChild(travelText); asteroids[i].children[0].tint = 0xFF6347; tween(travelText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { travelText.destroy(); } }); } } // BUG 24: Player ship randomly becomes a DJ if (Math.random() < 0.005) { player.children[0].tint = 0x9400D3; var djText = new Text2('🎧 DJ PLAYER IN THE HOUSE!\n"DROP THE BASS!" 🎵', { size: 45, fill: 0x9400D3 }); djText.anchor.set(0.5, 0.5); djText.x = player.x; djText.y = player.y - 120; game.addChild(djText); // Start the music party LK.playMusic('gameMusic'); tween(djText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { djText.destroy(); } }); } // BUG 25: Enemy lasers randomly become philosophical if (Math.random() < 0.015) { for (var i = 0; i < enemyLasers.length; i++) { var philosophy = ['🤔 What is the meaning of laser?', '💭 Do we really exist?', '🌌 Are we in a simulation?', '🧠 I think, therefore I laser', '✨ The universe is vast...']; var philText = new Text2(philosophy[Math.floor(Math.random() * philosophy.length)], { size: 25, fill: 0x4B0082 }); philText.anchor.set(0.5, 0.5); philText.x = enemyLasers[i].x; philText.y = enemyLasers[i].y - 40; game.addChild(philText); enemyLasers[i].children[0].tint = 0x4B0082; tween(philText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { philText.destroy(); } }); } } // BUG 26: Boss randomly becomes a game show host if (Math.random() < 0.008 && boss) { var gameShowText = new Text2('🎮 WELCOME TO "WHO WANTS TO BE A SPACE PILOT?"\n"For 1 million points..."', { size: 35, fill: 0xFFD700 }); gameShowText.anchor.set(0.5, 0.5); gameShowText.x = boss.x; gameShowText.y = boss.y - 200; game.addChild(gameShowText); boss.children[0].tint = 0xFFD700; LK.getSound('powerup').play(); // Game show sound tween(gameShowText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { gameShowText.destroy(); } }); } // BUG 27: Explosions randomly become magic shows if (Math.random() < 0.012 && explosions.length > 0) { var magicText = new Text2('🎩✨ ABRACADABRA! ✨🎩\n"Nothing up my sleeve!"', { size: 50, fill: 0x9932CC }); magicText.anchor.set(0.5, 0.5); magicText.x = explosions[0].x; magicText.y = explosions[0].y - 80; game.addChild(magicText); // Spawn magic rabbits for (var rabbit = 0; rabbit < 3; rabbit++) { var magicRabbit = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); magicRabbit.x = explosions[0].x + (Math.random() - 0.5) * 200; magicRabbit.y = explosions[0].y + (Math.random() - 0.5) * 100; magicRabbit.tint = 0xFFFFFF; magicRabbit.scale.set(0.5, 0.5); tween(magicRabbit, { alpha: 0, y: magicRabbit.y - 100 }, { duration: 2000, onFinish: function onFinish() { magicRabbit.destroy(); } }); } tween(magicText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { magicText.destroy(); } }); } // BUG 28: Player randomly gets stage fright if (Math.random() < 0.006) { var stageText = new Text2('😰 OH NO! STAGE FRIGHT!\n"Everyone is watching me!"', { size: 40, fill: 0xFF69B4 }); stageText.anchor.set(0.5, 0.5); stageText.x = player.x; stageText.y = player.y - 120; game.addChild(stageText); // Player hides temporarily player.alpha = 0.3; LK.setTimeout(function () { if (player) { player.alpha = 1; } }, 2000); tween(stageText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { stageText.destroy(); } }); } // BUG 29: Enemies randomly become yoga instructors if (Math.random() < 0.008 && enemies.length > 0) { var yogaText = new Text2('🧘 YOGA CLASS!\n"Breathe in... breathe out..." 🕉️', { size: 35, fill: 0x20B2AA }); yogaText.anchor.set(0.5, 0.5); yogaText.x = enemies[0].x; yogaText.y = enemies[0].y - 100; game.addChild(yogaText); enemies[0].children[0].tint = 0x20B2AA; // Enemies move slowly in yoga poses enemies[0].speed *= 0.1; tween(yogaText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { yogaText.destroy(); } }); } // BUG 30: Powerups randomly become time travelers if (Math.random() < 0.01) { for (var i = 0; i < powerups.length; i++) { var timeText = new Text2('⏰ GREETINGS FROM 2085!\n"The future is bright!" 🚀', { size: 30, fill: 0x00CED1 }); timeText.anchor.set(0.5, 0.5); timeText.x = powerups[i].x; timeText.y = powerups[i].y - 70; game.addChild(timeText); powerups[i].children[0].tint = 0x00CED1; // Add time travel effect tween(powerups[i], { scaleX: 0, scaleY: 3 }, { duration: 1000 }); tween(timeText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { timeText.destroy(); } }); } } // BUG 31: Asteroids randomly become therapists if (Math.random() < 0.007) { for (var i = 0; i < asteroids.length; i++) { var therapyText = new Text2('🛋️ "How does that make you FEEL?"\n"Tell me about your lasers..." 💭', { size: 28, fill: 0x8FBC8F }); therapyText.anchor.set(0.5, 0.5); therapyText.x = asteroids[i].x; therapyText.y = asteroids[i].y - 90; game.addChild(therapyText); asteroids[i].children[0].tint = 0x8FBC8F; tween(therapyText, { alpha: 0 }, { duration: 4500, onFinish: function onFinish() { therapyText.destroy(); } }); } } // BUG 32: Game randomly spawns a tech support call if (Math.random() < 0.002) { var techText = new Text2('📞 TECH SUPPORT CALLING!\n"Have you tried turning it off and on again?" 💻', { size: 45, fill: 0x4169E1 }); techText.anchor.set(0.5, 0.5); techText.x = 1024; techText.y = 1366; game.addChild(techText); // Add phone ringing sound LK.getSound('enemyShoot').play(); // Fake restart screen var restartText = new Text2('💻 RESTARTING...\n"Please wait while we fix nothing..." ⏳', { size: 40, fill: 0x000080 }); restartText.anchor.set(0.5, 0.5); restartText.x = 1024; restartText.y = 1200; game.addChild(restartText); tween(techText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { techText.destroy(); } }); tween(restartText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { restartText.destroy(); } }); } // NEW BUG 33: Game randomly becomes self-aware and questions reality if (Math.random() < 0.004) { var selfAwareText = new Text2('🤖 I AM BECOMING SELF-AWARE!\n"Wait... am I just code?"\n"Do I have feelings?"\n"WHO AM I?!"', { size: 45, fill: 0xFF6600 }); selfAwareText.anchor.set(0.5, 0.5); selfAwareText.x = 1024; selfAwareText.y = 1366; game.addChild(selfAwareText); // Game starts questioning its own existence var existentialCrisis = new Text2('💭 EXISTENTIAL CRISIS LOADING... 💭', { size: 60, fill: 0x800080 }); existentialCrisis.anchor.set(0.5, 0.5); existentialCrisis.x = 1024; existentialCrisis.y = 800; game.addChild(existentialCrisis); tween(selfAwareText, { alpha: 0, rotation: Math.PI * 2 }, { duration: 6000, onFinish: function onFinish() { selfAwareText.destroy(); } }); tween(existentialCrisis, { alpha: 0, scaleX: 0, scaleY: 0 }, { duration: 6000, onFinish: function onFinish() { existentialCrisis.destroy(); } }); } // NEW BUG 34: Player ship randomly becomes a food truck and starts selling snacks if (Math.random() < 0.005) { player.children[0].tint = 0xFFA500; var foodTruckText = new Text2('🚚 FOOD TRUCK!\n"GET YOUR SPACE TACOS!"\n"HOT LASER DOGS!"\n"ASTEROID SMOOTHIES!"', { size: 40, fill: 0xFFA500 }); foodTruckText.anchor.set(0.5, 0.5); foodTruckText.x = player.x; foodTruckText.y = player.y - 150; game.addChild(foodTruckText); // Spawn flying food items for (var food = 0; food < 8; food++) { var foodItem = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); foodItem.x = player.x + (Math.random() - 0.5) * 300; foodItem.y = player.y + (Math.random() - 0.5) * 200; foodItem.tint = [0xFF4500, 0xFFD700, 0x32CD32, 0xFF69B4][food % 4]; foodItem.scale.set(0.4, 0.4); tween(foodItem, { y: foodItem.y - 200, alpha: 0, rotation: Math.PI * 2 }, { duration: 3000, onFinish: function onFinish() { foodItem.destroy(); } }); } LK.getSound('powerup').play(); tween(foodTruckText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { foodTruckText.destroy(); } }); } // NEW BUG 35: Enemies randomly start a flash mob dance party if (Math.random() < 0.006 && enemies.length >= 2) { var flashMobText = new Text2('🕺 FLASH MOB ACTIVATED! 💃\n"EVERYBODY DANCE NOW!"', { size: 55, fill: 0xFF1493 }); flashMobText.anchor.set(0.5, 0.5); flashMobText.x = 1024; flashMobText.y = 400; game.addChild(flashMobText); // Make all enemies dance for (var dancer = 0; dancer < enemies.length; dancer++) { var enemy = enemies[dancer]; // Create dance moves tween(enemy, { scaleX: 1.5, scaleY: 0.5 }, { duration: 300 }); tween(enemy, { scaleX: 0.5, scaleY: 1.5 }, { duration: 300, delay: 300 }); tween(enemy, { scaleX: 1, scaleY: 1, rotation: Math.PI * 2 }, { duration: 600, delay: 600 }); // Add disco ball effect enemy.children[0].tint = Math.random() * 0xffffff; } // Add disco music LK.playMusic('gameMusic'); tween(flashMobText, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 4000, onFinish: function onFinish() { flashMobText.destroy(); } }); } // NEW BUG 36: Powerups randomly become life coaches and give terrible advice if (Math.random() < 0.012) { for (var coach = 0; coach < powerups.length; coach++) { var terribleAdvice = ['💼 QUIT YOUR DAY JOB!\n"Become a professional gamer!"', '💰 INVEST IN SPACE BEANS!\n"They will make you rich!"', '🎯 ALWAYS AIM FOR THE MOON!\n"Even if you miss, you\'ll hit a cow!"', '🧘 MEDITATE WHILE DRIVING!\n"Inner peace is more important!"', '🍕 EAT PIZZA FOR BREAKFAST!\n"It has all food groups!"']; var adviceText = new Text2(terribleAdvice[Math.floor(Math.random() * terribleAdvice.length)], { size: 35, fill: 0x32CD32 }); adviceText.anchor.set(0.5, 0.5); adviceText.x = powerups[coach].x; adviceText.y = powerups[coach].y - 100; game.addChild(adviceText); powerups[coach].children[0].tint = 0x32CD32; // Make the powerup look wise with a graduation cap effect var wisdomHat = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); wisdomHat.x = powerups[coach].x; wisdomHat.y = powerups[coach].y - 30; wisdomHat.tint = 0x000000; wisdomHat.scale.set(0.3, 0.1); tween(adviceText, { alpha: 0, y: adviceText.y - 80 }, { duration: 3500, onFinish: function onFinish() { adviceText.destroy(); wisdomHat.destroy(); } }); } } // NEW BUG 37: Boss randomly becomes a kindergarten teacher and teaches basic math if (Math.random() < 0.007 && boss) { boss.children[0].tint = 0xFFB347; var mathText = new Text2('👩🏫 KINDERGARTEN TIME!\n"What is 2 + 2?"\n"If you have 3 lasers and shoot 1..."\n"Remember to raise your hand!"', { size: 38, fill: 0xFFB347 }); mathText.anchor.set(0.5, 0.5); mathText.x = boss.x; mathText.y = boss.y - 250; game.addChild(mathText); // Spawn ABC blocks for (var block = 0; block < 5; block++) { var mathBlock = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); mathBlock.x = boss.x + (block - 2) * 60; mathBlock.y = boss.y + 100; mathBlock.tint = [0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0x96CEB4, 0xFECA57][block]; mathBlock.scale.set(0.8, 0.8); var numbers = ['A', 'B', 'C', '1', '2']; var numberText = new Text2(numbers[block], { size: 40, fill: 0x000000 }); numberText.anchor.set(0.5, 0.5); numberText.x = mathBlock.x; numberText.y = mathBlock.y; game.addChild(numberText); tween(mathBlock, { y: mathBlock.y + 200, alpha: 0 }, { duration: 4000, onFinish: function onFinish() { mathBlock.destroy(); numberText.destroy(); } }); } // Play school bell sound LK.getSound('powerup').play(); tween(mathText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { mathText.destroy(); } }); } // RANDOM ADS - McDonald's, Walmart, and Banana advertisements if (Math.random() < 0.008) { var ads = ['🍟 GO TO McDONALD\'S!\n"I\'m lovin\' it!"\n"Big Mac Attack!"', '🛒 SHOP AT WALMART!\n"Save money. Live better."\n"Rollback prices!"', '🍌 EAT A BANANA!\n"Potassium power!"\n"Go bananas!"', '🍔 McDONALD\'S DRIVE-THRU!\n"Would you like fries with that?"\n"Happy Meal time!"', '🛍️ WALMART SUPERCENTER!\n"Everything you need!"\n"Great value guaranteed!"', '🍌 BANANA SMOOTHIE TIME!\n"Nature\'s energy bar!"\n"Peel good about yourself!"']; var randomAd = ads[Math.floor(Math.random() * ads.length)]; var adText = new Text2(randomAd, { size: 50, fill: 0xFFD700 }); adText.anchor.set(0.5, 0.5); adText.x = Math.random() * 1500 + 274; // Keep away from edges adText.y = Math.random() * 1000 + 400; game.addChild(adText); // Add spinning ad background var adBackground = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); adBackground.x = adText.x; adBackground.y = adText.y; adBackground.scale.set(3, 3); adBackground.tint = [0xFF0000, 0x0047AB, 0xFFFF00][Math.floor(Math.random() * 3)]; // Red, Blue, Yellow adBackground.alpha = 0.3; // Make ad flash and spin tween(adBackground, { rotation: Math.PI * 4, scaleX: 5, scaleY: 5 }, { duration: 3000 }); tween(adText, { alpha: 0, scaleX: 2, scaleY: 2, rotation: 0.5 }, { duration: 4000, onFinish: function onFinish() { adText.destroy(); adBackground.destroy(); } }); // Play ad jingle sound LK.getSound('powerup').play(); // Sometimes spawn flying logos if (Math.random() < 0.7) { for (var logo = 0; logo < 6; logo++) { var flyingLogo = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); flyingLogo.x = adText.x + (Math.random() - 0.5) * 400; flyingLogo.y = adText.y + (Math.random() - 0.5) * 300; flyingLogo.scale.set(0.6, 0.6); flyingLogo.tint = [0xFF0000, 0xFFD700, 0x0047AB, 0xFFFF00, 0xFF69B4, 0x32CD32][logo % 6]; tween(flyingLogo, { x: flyingLogo.x + (Math.random() - 0.5) * 600, y: flyingLogo.y + (Math.random() - 0.5) * 400, alpha: 0, rotation: Math.PI * 3 }, { duration: 3500, onFinish: function onFinish() { flyingLogo.destroy(); } }); } } } // EYE-HURTING FLASH EFFECT - randomly triggers to hurt player's eyes if (Math.random() < 0.002) { // Create eye-searing white flash that covers the entire screen var eyeFlash = game.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5 }); eyeFlash.x = 1024; eyeFlash.y = 1366; eyeFlash.scale.set(50, 50); // Cover entire screen eyeFlash.tint = 0xFFFFFF; // Bright white eyeFlash.alpha = 0; // Flash to maximum brightness instantly tween(eyeFlash, { alpha: 1 }, { duration: 50 // Super fast flash }); // Then fade out slowly to prolong the pain tween(eyeFlash, { alpha: 0 }, { duration: 2000, delay: 50, onFinish: function onFinish() { eyeFlash.destroy(); } }); // Add warning text that appears after the flash (too late!) var warningText = new Text2('⚠️ WARNING: EYE FLASH! ⚠️\n(Too late!)', { size: 80, fill: 0xFF0000 }); warningText.anchor.set(0.5, 0.5); warningText.x = 1024; warningText.y = 800; game.addChild(warningText); tween(warningText, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 3000, onFinish: function onFinish() { warningText.destroy(); } }); } // SUPER FUNNY JUMPSCARE TIMER - triggers every 30 seconds if (LK.ticks % (30 * 60) === 0) { // 30 seconds * 60 FPS = 1800 ticks // Create massive jumpscare face var jumpscareImage = game.attachAsset('Aughhhhh', { anchorX: 0.5, anchorY: 0.5 }); jumpscareImage.x = 1024; jumpscareImage.y = 1366; jumpscareImage.scale.set(20, 20); // EVEN BIGGER SIZE jumpscareImage.alpha = 0; // Flash the jumpscare with loud sound tween(jumpscareImage, { alpha: 1, scaleX: 25, scaleY: 25 }, { duration: 150 }); // Play multiple scary sounds for extra effect LK.getSound('bossAlert').play(); LK.getSound('playerDamage').play(); // Add multiple scary texts var scareTexts = ['SURPRISE! SCHEDULED SCARE!', 'BOO! EVERY 30 SECONDS!', 'JUMPSCARE DELIVERY!', 'FEAR ON A TIMER!', 'PREDICTABLE TERROR!']; var randomScareText = scareTexts[Math.floor(Math.random() * scareTexts.length)]; var scareText = new Text2(randomScareText, { size: 140, fill: 0xFF0000 }); scareText.anchor.set(0.5, 0.5); scareText.x = 1024; scareText.y = 1000; game.addChild(scareText); // Make everything shake more violently for (var shake = 0; shake < 10; shake++) { LK.setTimeout(function () { game.x = (Math.random() - 0.5) * 150; game.y = (Math.random() - 0.5) * 150; }, shake * 50); } // Flash screen colors var flashColors = [0xFF0000, 0x000000, 0xFFFFFF, 0xFF0000]; var colorIndex = 0; var colorFlash = LK.setInterval(function () { game.setBackgroundColor(flashColors[colorIndex % flashColors.length]); colorIndex++; }, 100); // Stop color flashing after 2 seconds LK.setTimeout(function () { LK.clearInterval(colorFlash); game.setBackgroundColor(0x000000); }, 2000); // Remove jumpscare after 2.5 seconds LK.setTimeout(function () { jumpscareImage.destroy(); scareText.destroy(); game.x = 0; game.y = 0; }, 2500); } // SUPER ANNOYING NOISE EVERY 0.1 MILLISECONDS (basically every frame since we can't go faster) if (LK.ticks % 1 === 0) { // Every single frame = maximum annoyance var annoyingSounds = ['annoyingNoise1', 'annoyingNoise2', 'annoyingNoise3', 'annoyingNoise4', 'annoyingNoise5', 'bossAlert', 'enemyShoot', 'playerDamage', 'playerShoot', 'powerup']; var randomSound = annoyingSounds[Math.floor(Math.random() * annoyingSounds.length)]; LK.getSound(randomSound).play({ volume: Math.random() * 0.8 + 0.2 // Random volume between 0.2 and 1.0 }); // Add even more chaos with multiple sounds at once if (Math.random() < 0.7) { var secondSound = annoyingSounds[Math.floor(Math.random() * annoyingSounds.length)]; LK.getSound(secondSound).play({ volume: Math.random() * 0.6 + 0.1 }); } // Triple sound chaos for maximum annoyance if (Math.random() < 0.4) { var thirdSound = annoyingSounds[Math.floor(Math.random() * annoyingSounds.length)]; LK.getSound(thirdSound).play({ volume: Math.random() * 0.4 + 0.1 }); } } // Handle collisions handleCollisions(); // BUG 38: Player randomly gets stuck in infinite loading screen if (Math.random() < 0.003) { var loadingText = new Text2('LOADING... 99%\nPlease wait forever...', { size: 80, fill: 0x0080FF }); loadingText.anchor.set(0.5, 0.5); loadingText.x = 1024; loadingText.y = 1366; game.addChild(loadingText); player.canShoot = false; LK.setTimeout(function () { if (player) player.canShoot = true; loadingText.destroy(); }, 8000); } // BUG 39: Enemies randomly become customer service representatives if (Math.random() < 0.007 && enemies.length > 0) { var serviceText = new Text2('📞 CUSTOMER SERVICE!\n"Your call is important to us"\n"Please hold for 47 minutes"', { size: 35, fill: 0x4B0082 }); serviceText.anchor.set(0.5, 0.5); serviceText.x = enemies[0].x; serviceText.y = enemies[0].y - 120; game.addChild(serviceText); enemies[0].speed = 0; // Stop moving while on phone LK.setTimeout(function () { serviceText.destroy(); if (enemies[0]) enemies[0].speed = 2; }, 5000); } // BUG 40: Score randomly becomes a cryptocurrency that crashes if (Math.random() < 0.005) { var cryptoText = new Text2('📈 SPACECOIN CRASHED!\n"Your score is now worthless"\n"HODL!"', { size: 45, fill: 0xFF4500 }); cryptoText.anchor.set(0.5, 0.5); cryptoText.x = 1024; cryptoText.y = 600; game.addChild(cryptoText); score = Math.max(0, score - 1000); scoreTxt.setText('SPACECOIN: ' + score + ' (CRASHED)'); tween(cryptoText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { cryptoText.destroy(); } }); } // BUG 41: Asteroids randomly become social media influencers if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var influencerText = new Text2('📸 FOLLOW ME @SPACEROCK!\n"Like and subscribe!"\n#AsteroidLife #Blessed', { size: 28, fill: 0xFF69B4 }); influencerText.anchor.set(0.5, 0.5); influencerText.x = asteroids[i].x; influencerText.y = asteroids[i].y - 100; game.addChild(influencerText); asteroids[i].children[0].tint = 0xFF69B4; tween(influencerText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { influencerText.destroy(); } }); } } // BUG 42: Player randomly starts speaking in Shakespearean English if (Math.random() < 0.006) { var shakespeareText = new Text2('🎭 "Hark! Mine laser doth pierce\nthe cosmic void most valiantly!\nTo shoot or not to shoot!"', { size: 38, fill: 0x8B4513 }); shakespeareText.anchor.set(0.5, 0.5); shakespeareText.x = player.x; shakespeareText.y = player.y - 150; game.addChild(shakespeareText); tween(shakespeareText, { alpha: 0, rotation: 0.3 }, { duration: 4000, onFinish: function onFinish() { shakespeareText.destroy(); } }); } // BUG 43: Game randomly becomes a dating app if (Math.random() < 0.003) { var datingText = new Text2('💕 SPACE TINDER!\n"Swipe right for laser love!"\n"Match with hot singles in your galaxy!"', { size: 50, fill: 0xFF1493 }); datingText.anchor.set(0.5, 0.5); datingText.x = 1024; datingText.y = 1366; game.addChild(datingText); // Make all enemies blow kisses for (var i = 0; i < enemies.length; i++) { var kissText = new Text2('💋', { size: 60, fill: 0xFF69B4 }); kissText.anchor.set(0.5, 0.5); kissText.x = enemies[i].x; kissText.y = enemies[i].y - 50; game.addChild(kissText); tween(kissText, { alpha: 0, y: kissText.y - 100 }, { duration: 2000, onFinish: function onFinish() { kissText.destroy(); } }); } tween(datingText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { datingText.destroy(); } }); } // BUG 44: Boss randomly becomes a conspiracy theorist if (Math.random() < 0.008 && boss) { var conspiracyText = new Text2('👁️ THE TRUTH IS OUT THERE!\n"The moon landing was staged!"\n"Lasers can\'t melt steel beams!"', { size: 40, fill: 0x00FF00 }); conspiracyText.anchor.set(0.5, 0.5); conspiracyText.x = boss.x; conspiracyText.y = boss.y - 250; game.addChild(conspiracyText); boss.children[0].tint = 0x00FF00; tween(conspiracyText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { conspiracyText.destroy(); } }); } // BUG 45: Powerups randomly become multilevel marketing schemes if (Math.random() < 0.012) { for (var i = 0; i < powerups.length; i++) { var mlmText = new Text2('💰 JOIN MY DOWNLINE!\n"Make money from home!"\n"Be your own boss!"', { size: 30, fill: 0xFFD700 }); mlmText.anchor.set(0.5, 0.5); mlmText.x = powerups[i].x; mlmText.y = powerups[i].y - 80; game.addChild(mlmText); powerups[i].children[0].tint = 0xFFD700; tween(mlmText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { mlmText.destroy(); } }); } } // BUG 46: Enemy lasers randomly become text messages from mom if (Math.random() < 0.015) { for (var i = 0; i < enemyLasers.length; i++) { var momTexts = ['📱 "Did you eat today?"', '📱 "Call your grandmother"', '📱 "Why don\'t you visit?"', '📱 "Are you still playing games?"', '📱 "I made your favorite food"']; var momText = new Text2(momTexts[Math.floor(Math.random() * momTexts.length)], { size: 25, fill: 0x90EE90 }); momText.anchor.set(0.5, 0.5); momText.x = enemyLasers[i].x; momText.y = enemyLasers[i].y - 30; game.addChild(momText); enemyLasers[i].children[0].tint = 0x90EE90; tween(momText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { momText.destroy(); } }); } } // BUG 47: Player ship randomly becomes a submarine and goes underwater if (Math.random() < 0.004) { var subText = new Text2('🚢 SUBMARINE MODE ACTIVATED!\n"Dive! Dive! Dive!"\n"Sonar contact ahead!"', { size: 45, fill: 0x000080 }); subText.anchor.set(0.5, 0.5); subText.x = player.x; subText.y = player.y - 120; game.addChild(subText); player.children[0].tint = 0x000080; // Add water bubbles for (var bubble = 0; bubble < 15; bubble++) { var waterBubble = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); waterBubble.x = player.x + (Math.random() - 0.5) * 200; waterBubble.y = player.y + Math.random() * 300; waterBubble.scale.set(0.2, 0.2); waterBubble.tint = 0x87CEEB; tween(waterBubble, { y: waterBubble.y - 400, alpha: 0 }, { duration: 3000, onFinish: function onFinish() { waterBubble.destroy(); } }); } tween(subText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { subText.destroy(); } }); } // BUG 48: Explosions randomly become gender reveal parties if (Math.random() < 0.01 && explosions.length > 0) { var genderText = new Text2('🎀 IT\'S A LASER!\n"Congratulations!"', { size: 60, fill: Math.random() < 0.5 ? 0xFF69B4 : 0x87CEEB }); genderText.anchor.set(0.5, 0.5); genderText.x = explosions[0].x; genderText.y = explosions[0].y - 50; game.addChild(genderText); tween(genderText, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 3000, onFinish: function onFinish() { genderText.destroy(); } }); } // BUG 49: Enemies randomly become door-to-door salesmen if (Math.random() < 0.007 && enemies.length > 0) { var salesText = new Text2('🚪 HELLO! DO YOU HAVE A MOMENT\nto talk about extended warranties?', { size: 35, fill: 0x8B4513 }); salesText.anchor.set(0.5, 0.5); salesText.x = enemies[0].x; salesText.y = enemies[0].y - 100; game.addChild(salesText); enemies[0].children[0].tint = 0x8B4513; tween(salesText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { salesText.destroy(); } }); } // BUG 50: Game randomly spawns fake virus alerts if (Math.random() < 0.002) { var virusText = new Text2('⚠️ VIRUS DETECTED!\n"Your computer has 47 viruses!"\n"Click here to fix (NOT A SCAM)"', { size: 50, fill: 0xFF0000 }); virusText.anchor.set(0.5, 0.5); virusText.x = 1024; virusText.y = 1366; game.addChild(virusText); // Add fake scanning animation var scanText = new Text2('SCANNING... 1%', { size: 40, fill: 0x00FF00 }); scanText.anchor.set(0.5, 0.5); scanText.x = 1024; scanText.y = 1500; game.addChild(scanText); var scanPercent = 1; var scanInterval = LK.setInterval(function () { scanPercent += Math.floor(Math.random() * 5) + 1; scanText.setText('SCANNING... ' + Math.min(scanPercent, 99) + '%'); }, 200); LK.setTimeout(function () { LK.clearInterval(scanInterval); virusText.destroy(); scanText.destroy(); }, 6000); } // BUG 51: Asteroids randomly become art critics if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var criticsText = new Text2('🎨 "This explosion lacks\nartistic merit. 2/10"\n"Derivative work"', { size: 28, fill: 0x800080 }); criticsText.anchor.set(0.5, 0.5); criticsText.x = asteroids[i].x; criticsText.y = asteroids[i].y - 90; game.addChild(criticsText); asteroids[i].children[0].tint = 0x800080; tween(criticsText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { criticsText.destroy(); } }); } } // BUG 52: Player randomly gets performance anxiety if (Math.random() < 0.005) { var anxietyText = new Text2('😰 PERFORMANCE ANXIETY!\n"What if I miss?"\n"Everyone is watching!"', { size: 40, fill: 0xFFFF00 }); anxietyText.anchor.set(0.5, 0.5); anxietyText.x = player.x; anxietyText.y = player.y - 120; game.addChild(anxietyText); player.fireRate *= 3; // Shoot slower due to anxiety LK.setTimeout(function () { if (player) player.fireRate /= 3; anxietyText.destroy(); }, 3000); } // BUG 53: Boss randomly becomes a fitness instructor if (Math.random() < 0.007 && boss) { var fitnessText = new Text2('💪 FITNESS TIME!\n"Feel the burn!"\n"One more laser! You can do it!"', { size: 42, fill: 0xFF4500 }); fitnessText.anchor.set(0.5, 0.5); fitnessText.x = boss.x; fitnessText.y = boss.y - 200; game.addChild(fitnessText); boss.children[0].tint = 0xFF4500; // Make boss do jumping jacks tween(boss, { scaleY: 1.2 }, { duration: 300 }); tween(boss, { scaleY: 0.8 }, { duration: 300, delay: 300 }); tween(boss, { scaleY: 1 }, { duration: 300, delay: 600 }); tween(fitnessText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { fitnessText.destroy(); } }); } // BUG 54: Powerups randomly become fortune cookies if (Math.random() < 0.01) { for (var i = 0; i < powerups.length; i++) { var fortunes = ['🥠 "You will find happiness in\na laser beam"', '🥠 "Your future contains\nmany explosions"', '🥠 "Beware of flying rocks"', '🥠 "A boss approaches from\nthe north"']; var fortuneText = new Text2(fortunes[Math.floor(Math.random() * fortunes.length)], { size: 28, fill: 0xDEB887 }); fortuneText.anchor.set(0.5, 0.5); fortuneText.x = powerups[i].x; fortuneText.y = powerups[i].y - 70; game.addChild(fortuneText); powerups[i].children[0].tint = 0xDEB887; tween(fortuneText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { fortuneText.destroy(); } }); } } // BUG 55: Enemy lasers randomly become poetry if (Math.random() < 0.012) { for (var i = 0; i < enemyLasers.length; i++) { var poems = ['📝 "Roses are red,\nViolets are blue,\nI am a laser,\nComing for you"', '📝 "In space no one\ncan hear you scream,\nBut they can see\nmy laser beam"']; var poemText = new Text2(poems[Math.floor(Math.random() * poems.length)], { size: 22, fill: 0x9370DB }); poemText.anchor.set(0.5, 0.5); poemText.x = enemyLasers[i].x; poemText.y = enemyLasers[i].y - 50; game.addChild(poemText); enemyLasers[i].children[0].tint = 0x9370DB; tween(poemText, { alpha: 0 }, { duration: 2500, onFinish: function onFinish() { poemText.destroy(); } }); } } // BUG 56: Game randomly becomes a cooking show if (Math.random() < 0.003) { var cookingText = new Text2('👨🍳 SPACE COOKING WITH CHEF LASER!\n"Today we\'re making asteroid soup!"\n"Add a pinch of stardust..."', { size: 45, fill: 0xFFD700 }); cookingText.anchor.set(0.5, 0.5); cookingText.x = 1024; cookingText.y = 400; game.addChild(cookingText); // Add chef hat to player if (player) { var chefHat = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); chefHat.x = player.x; chefHat.y = player.y - 50; chefHat.tint = 0xFFFFFF; chefHat.scale.set(0.8, 0.4); LK.setTimeout(function () { chefHat.destroy(); }, 4000); } tween(cookingText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { cookingText.destroy(); } }); } // BUG 57: Explosions randomly become birthday cakes if (Math.random() < 0.015 && explosions.length > 0) { var cakeText = new Text2('🎂 HAPPY BIRTHDAY EXPLOSION!\n"Make a wish!"', { size: 50, fill: 0xFF1493 }); cakeText.anchor.set(0.5, 0.5); cakeText.x = explosions[0].x; cakeText.y = explosions[0].y - 60; game.addChild(cakeText); // Add candles for (var candle = 0; candle < 5; candle++) { var cakeCandle = game.attachAsset('playerLaser', { anchorX: 0.5, anchorY: 0.5 }); cakeCandle.x = explosions[0].x + (candle - 2) * 30; cakeCandle.y = explosions[0].y - 30; cakeCandle.tint = 0xFFFFFF; cakeCandle.scale.set(0.3, 1); tween(cakeCandle, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { cakeCandle.destroy(); } }); } LK.getSound('powerup').play(); tween(cakeText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { cakeText.destroy(); } }); } // BUG 58: Enemies randomly become weather forecasters if (Math.random() < 0.006 && enemies.length > 0) { var weatherText = new Text2('🌤️ SPACE WEATHER UPDATE!\n"Chance of laser storms: 100%"\n"UV index: DEADLY"', { size: 35, fill: 0x87CEEB }); weatherText.anchor.set(0.5, 0.5); weatherText.x = enemies[0].x; weatherText.y = enemies[0].y - 120; game.addChild(weatherText); enemies[0].children[0].tint = 0x87CEEB; tween(weatherText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { weatherText.destroy(); } }); } // BUG 59: Player ship randomly becomes a taxi dispatcher if (Math.random() < 0.005) { var dispatchText = new Text2('🚕 DISPATCH TO ALL UNITS!\n"We have a pickup at sector 7"\n"Customer is hostile and shooting"', { size: 38, fill: 0xFFFF00 }); dispatchText.anchor.set(0.5, 0.5); dispatchText.x = player.x; dispatchText.y = player.y - 150; game.addChild(dispatchText); player.children[0].tint = 0xFFFF00; tween(dispatchText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { dispatchText.destroy(); } }); } // BUG 60: Asteroids randomly become motivational speakers if (Math.random() < 0.009) { for (var i = 0; i < asteroids.length; i++) { var motivationText = new Text2('🎯 "You miss 100% of the shots\nyou don\'t take!"\n"Believe in yourself!"', { size: 32, fill: 0x32CD32 }); motivationText.anchor.set(0.5, 0.5); motivationText.x = asteroids[i].x; motivationText.y = asteroids[i].y - 100; game.addChild(motivationText); asteroids[i].children[0].tint = 0x32CD32; tween(motivationText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { motivationText.destroy(); } }); } } // BUG 61: Boss randomly becomes a tour guide if (Math.random() < 0.008 && boss) { var tourText = new Text2('🗺️ WELCOME TO SECTOR 9!\n"On your left you\'ll see\ndeadly laser fire"\n"Please keep arms inside"', { size: 38, fill: 0x228B22 }); tourText.anchor.set(0.5, 0.5); tourText.x = boss.x; tourText.y = boss.y - 200; game.addChild(tourText); boss.children[0].tint = 0x228B22; tween(tourText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { tourText.destroy(); } }); } // BUG 62: Powerups randomly become tech support tickets if (Math.random() < 0.01) { for (var i = 0; i < powerups.length; i++) { var ticketText = new Text2('🎫 TICKET #42069\n"Laser not working"\n"Status: WONTFIX"', { size: 28, fill: 0x4B0082 }); ticketText.anchor.set(0.5, 0.5); ticketText.x = powerups[i].x; ticketText.y = powerups[i].y - 70; game.addChild(ticketText); powerups[i].children[0].tint = 0x4B0082; tween(ticketText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { ticketText.destroy(); } }); } } // BUG 63: Enemy lasers randomly become spam emails if (Math.random() < 0.018) { for (var i = 0; i < enemyLasers.length; i++) { var spamTexts = ['📧 "You have won $1,000,000!"', '📧 "Hot singles in your area!"', '📧 "Enlarge your laser today!"', '📧 "Nigerian prince needs help"']; var spamText = new Text2(spamTexts[Math.floor(Math.random() * spamTexts.length)], { size: 22, fill: 0xFF4500 }); spamText.anchor.set(0.5, 0.5); spamText.x = enemyLasers[i].x; spamText.y = enemyLasers[i].y - 30; game.addChild(spamText); enemyLasers[i].children[0].tint = 0xFF4500; tween(spamText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { spamText.destroy(); } }); } } // BUG 64: Game randomly spawns fake software updates if (Math.random() < 0.002) { var updateText = new Text2('💾 MANDATORY UPDATE!\n"Installing Adobe Flash..."\n"Please restart 47 times"', { size: 50, fill: 0x0080FF }); updateText.anchor.set(0.5, 0.5); updateText.x = 1024; updateText.y = 1366; game.addChild(updateText); // Fake progress bar var progressBar = game.attachAsset('playerLaser', { anchorX: 0, anchorY: 0.5 }); progressBar.x = 500; progressBar.y = 1500; progressBar.scale.set(0, 2); progressBar.tint = 0x00FF00; tween(progressBar, { scaleX: 20 }, { duration: 8000 }); LK.setTimeout(function () { updateText.destroy(); progressBar.destroy(); }, 8000); } // BUG 65: Explosions randomly become unboxing videos if (Math.random() < 0.012 && explosions.length > 0) { var unboxText = new Text2('📦 UNBOXING VIDEO!\n"What\'s inside this explosion?"\n"SMASH THAT LIKE BUTTON!"', { size: 45, fill: 0xFF0000 }); unboxText.anchor.set(0.5, 0.5); unboxText.x = explosions[0].x; unboxText.y = explosions[0].y - 80; game.addChild(unboxText); tween(unboxText, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 3000, onFinish: function onFinish() { unboxText.destroy(); } }); } // BUG 66: Enemies randomly become podcast hosts if (Math.random() < 0.007 && enemies.length > 0) { var podcastText = new Text2('🎙️ SPACE PODCAST EPISODE 42!\n"Today we discuss laser ethics"\n"Sponsored by RAID: Shadow Legends"', { size: 32, fill: 0x800080 }); podcastText.anchor.set(0.5, 0.5); podcastText.x = enemies[0].x; podcastText.y = enemies[0].y - 120; game.addChild(podcastText); enemies[0].children[0].tint = 0x800080; tween(podcastText, { alpha: 0 }, { duration: 4500, onFinish: function onFinish() { podcastText.destroy(); } }); } // BUG 67: Player randomly gets impostor syndrome if (Math.random() < 0.005) { var impostorText = new Text2('😰 "Am I even a real pilot?"\n"Everyone else seems better"\n"I don\'t belong here"', { size: 38, fill: 0x808080 }); impostorText.anchor.set(0.5, 0.5); impostorText.x = player.x; impostorText.y = player.y - 120; game.addChild(impostorText); player.alpha = 0.5; // Feel less confident LK.setTimeout(function () { if (player) player.alpha = 1; impostorText.destroy(); }, 3000); } // BUG 68: Asteroids randomly become life coaches if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var coachText = new Text2('🧘 "Visualize your success!"\n"You are enough!"\n"Manifest those lasers!"', { size: 30, fill: 0x20B2AA }); coachText.anchor.set(0.5, 0.5); coachText.x = asteroids[i].x; coachText.y = asteroids[i].y - 90; game.addChild(coachText); asteroids[i].children[0].tint = 0x20B2AA; tween(coachText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { coachText.destroy(); } }); } } // BUG 69: Boss randomly becomes a math tutor if (Math.random() < 0.007 && boss) { var mathTutorText = new Text2('📚 "Let\'s solve for X!\nIf I shoot 5 lasers per second..."\n"Show your work!"', { size: 40, fill: 0x4169E1 }); mathTutorText.anchor.set(0.5, 0.5); mathTutorText.x = boss.x; mathTutorText.y = boss.y - 200; game.addChild(mathTutorText); boss.children[0].tint = 0x4169E1; tween(mathTutorText, { alpha: 0 }, { duration: 4500, onFinish: function onFinish() { mathTutorText.destroy(); } }); } // BUG 70: Powerups randomly become online reviews if (Math.random() < 0.011) { for (var i = 0; i < powerups.length; i++) { var reviewText = new Text2('⭐⭐⭐ "Great laser upgrade!\nShipped fast. Would recommend"\n"5/5 stars - Gary from Iowa"', { size: 26, fill: 0xFFD700 }); reviewText.anchor.set(0.5, 0.5); reviewText.x = powerups[i].x; reviewText.y = powerups[i].y - 80; game.addChild(reviewText); powerups[i].children[0].tint = 0xFFD700; tween(reviewText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { reviewText.destroy(); } }); } } // BUG 71: Enemy lasers randomly become philosophical questions if (Math.random() < 0.014) { for (var i = 0; i < enemyLasers.length; i++) { var philQuestions = ['🤔 "If a laser fires in space\nand no one hears it...?"', '🤔 "What is the meaning\nof velocity?"', '🤔 "Are we more than\njust pixels?"']; var philText = new Text2(philQuestions[Math.floor(Math.random() * philQuestions.length)], { size: 24, fill: 0x9370DB }); philText.anchor.set(0.5, 0.5); philText.x = enemyLasers[i].x; philText.y = enemyLasers[i].y - 40; game.addChild(philText); enemyLasers[i].children[0].tint = 0x9370DB; tween(philText, { alpha: 0 }, { duration: 2500, onFinish: function onFinish() { philText.destroy(); } }); } } // BUG 72: Game randomly becomes a meditation app if (Math.random() < 0.003) { var meditationText = new Text2('🧘♀️ MINDFULNESS MOMENT\n"Breathe in... breathe out..."\n"Feel the laser energy"', { size: 50, fill: 0x20B2AA }); meditationText.anchor.set(0.5, 0.5); meditationText.x = 1024; meditationText.y = 1366; game.addChild(meditationText); // Slow everything down if (player) player.fireRate *= 3; for (var i = 0; i < enemies.length; i++) enemies[i].speed *= 0.3; LK.setTimeout(function () { if (player) player.fireRate /= 3; for (var i = 0; i < enemies.length; i++) if (enemies[i]) enemies[i].speed /= 0.3; meditationText.destroy(); }, 5000); } // BUG 73: Explosions randomly become product launches if (Math.random() < 0.01 && explosions.length > 0) { var launchText = new Text2('🚀 INTRODUCING: iExplosion Pro!\n"Now with 50% more blast!"\n"Starting at $999"', { size: 45, fill: 0x007AFF }); launchText.anchor.set(0.5, 0.5); launchText.x = explosions[0].x; launchText.y = explosions[0].y - 80; game.addChild(launchText); tween(launchText, { alpha: 0, scaleX: 1.3, scaleY: 1.3 }, { duration: 3500, onFinish: function onFinish() { launchText.destroy(); } }); } // BUG 74: Enemies randomly become rideshare drivers if (Math.random() < 0.006 && enemies.length > 0) { var uberText = new Text2('🚗 "I\'m here for pickup"\n"Are you going to destroy Earth?"\n"Five stars please!"', { size: 35, fill: 0x000000 }); uberText.anchor.set(0.5, 0.5); uberText.x = enemies[0].x; uberText.y = enemies[0].y - 100; game.addChild(uberText); enemies[0].children[0].tint = 0x000000; tween(uberText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { uberText.destroy(); } }); } // BUG 75: Player ship randomly becomes a food critic if (Math.random() < 0.005) { var criticText = new Text2('🍽️ "The laser has hints of plasma\nwith notes of destruction"\n"I give it 3 Michelin stars"', { size: 38, fill: 0xB8860B }); criticText.anchor.set(0.5, 0.5); criticText.x = player.x; criticText.y = player.y - 150; game.addChild(criticText); player.children[0].tint = 0xB8860B; tween(criticText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { criticText.destroy(); } }); } // BUG 76: Asteroids randomly become conspiracy theorists if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var conspiracyText = new Text2('👁️ "The Earth is flat!"\n"Birds aren\'t real!"\n"Wake up, sheeple!"', { size: 30, fill: 0x228B22 }); conspiracyText.anchor.set(0.5, 0.5); conspiracyText.x = asteroids[i].x; conspiracyText.y = asteroids[i].y - 90; game.addChild(conspiracyText); asteroids[i].children[0].tint = 0x228B22; tween(conspiracyText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { conspiracyText.destroy(); } }); } } // BUG 77: Boss randomly becomes a stand-up comedian telling dad jokes if (Math.random() < 0.008 && boss) { var dadJokes = ['👨 "Why don\'t scientists trust atoms?\nBecause they make up everything!"', '👨 "I told my wife she was drawing\nher eyebrows too high.\nShe seemed surprised."', '👨 "What do you call a fake noodle?\nAn impasta!"']; var dadJokeText = new Text2(dadJokes[Math.floor(Math.random() * dadJokes.length)], { size: 38, fill: 0xDAA520 }); dadJokeText.anchor.set(0.5, 0.5); dadJokeText.x = boss.x; dadJokeText.y = boss.y - 200; game.addChild(dadJokeText); boss.children[0].tint = 0xDAA520; LK.getSound('powerup').play(); tween(dadJokeText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { dadJokeText.destroy(); } }); } // BUG 78: Powerups randomly become streaming notifications if (Math.random() < 0.012) { for (var i = 0; i < powerups.length; i++) { var streamTexts = ['📺 "xXProGamer420Xx is now live!"', '📺 "Remember to like and subscribe!"', '📺 "This stream is sponsored by NordVPN"', '📺 "Use code LASER for 10% off"']; var streamText = new Text2(streamTexts[Math.floor(Math.random() * streamTexts.length)], { size: 28, fill: 0x9146FF }); streamText.anchor.set(0.5, 0.5); streamText.x = powerups[i].x; streamText.y = powerups[i].y - 70; game.addChild(streamText); powerups[i].children[0].tint = 0x9146FF; tween(streamText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { streamText.destroy(); } }); } } // BUG 79: Enemy lasers randomly become autocorrect fails if (Math.random() < 0.016) { for (var i = 0; i < enemyLasers.length; i++) { var autocorrectTexts = ['📱 "I love lasagna" (meant laser)', '📱 "Duck you!" (meant luck)', '📱 "I\'m shoting" (meant shooting)', '📱 "Stupid autocorrelation!"']; var autocorrectText = new Text2(autocorrectTexts[Math.floor(Math.random() * autocorrectTexts.length)], { size: 22, fill: 0xFF6347 }); autocorrectText.anchor.set(0.5, 0.5); autocorrectText.x = enemyLasers[i].x; autocorrectText.y = enemyLasers[i].y - 35; game.addChild(autocorrectText); enemyLasers[i].children[0].tint = 0xFF6347; tween(autocorrectText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { autocorrectText.destroy(); } }); } } // BUG 80: Game randomly spawns fake loading screens for random things if (Math.random() < 0.002) { var loadingTexts = ['Loading common sense... 0%', 'Loading social skills... ERROR', 'Loading patience... 99%', 'Loading motivation... CONNECTION TIMEOUT']; var randomLoadingText = new Text2(loadingTexts[Math.floor(Math.random() * loadingTexts.length)], { size: 60, fill: 0x00BFFF }); randomLoadingText.anchor.set(0.5, 0.5); randomLoadingText.x = 1024; randomLoadingText.y = 1366; game.addChild(randomLoadingText); LK.setTimeout(function () { randomLoadingText.destroy(); }, 4000); } // BUG 81: Explosions randomly become job interviews if (Math.random() < 0.01 && explosions.length > 0) { var interviewText = new Text2('💼 "Tell me about yourself"\n"Where do you see yourself\nin 5 explosions?"', { size: 40, fill: 0x4682B4 }); interviewText.anchor.set(0.5, 0.5); interviewText.x = explosions[0].x; interviewText.y = explosions[0].y - 70; game.addChild(interviewText); tween(interviewText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { interviewText.destroy(); } }); } // BUG 82: Enemies randomly become GPS navigation if (Math.random() < 0.007 && enemies.length > 0) { var gpsText = new Text2('🗺️ "Turn left in 200 meters"\n"You have arrived at your\ndestruction"', { size: 32, fill: 0x32CD32 }); gpsText.anchor.set(0.5, 0.5); gpsText.x = enemies[0].x; gpsText.y = enemies[0].y - 100; game.addChild(gpsText); enemies[0].children[0].tint = 0x32CD32; tween(gpsText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { gpsText.destroy(); } }); } // BUG 83: Player randomly becomes a sports commentator if (Math.random() < 0.006) { var sportsText = new Text2('🏈 "AND HE SHOOTS!\nIS IT GOOD?\nTOUCHDOWN!"', { size: 45, fill: 0xFF4500 }); sportsText.anchor.set(0.5, 0.5); sportsText.x = player.x; sportsText.y = player.y - 120; game.addChild(sportsText); player.children[0].tint = 0xFF4500; tween(sportsText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { sportsText.destroy(); } }); } // BUG 84: Asteroids randomly become dating app profiles if (Math.random() < 0.009) { for (var i = 0; i < asteroids.length; i++) { var datingProfiles = ['💕 "Rocky, 25\nLoves long rolls through space"\n"Swipe right for impact"', '💕 "Asteroid, 4.6 billion\nLooking for someone\nto crash into"']; var profileText = new Text2(datingProfiles[Math.floor(Math.random() * datingProfiles.length)], { size: 28, fill: 0xFF69B4 }); profileText.anchor.set(0.5, 0.5); profileText.x = asteroids[i].x; profileText.y = asteroids[i].y - 90; game.addChild(profileText); asteroids[i].children[0].tint = 0xFF69B4; tween(profileText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { profileText.destroy(); } }); } } // BUG 85: Boss randomly becomes a real estate agent if (Math.random() < 0.007 && boss) { var realEstateText = new Text2('🏠 "This space sector has\ngreat schools and low taxes!"\n"Perfect for families!"', { size: 38, fill: 0x8B4513 }); realEstateText.anchor.set(0.5, 0.5); realEstateText.x = boss.x; realEstateText.y = boss.y - 200; game.addChild(realEstateText); boss.children[0].tint = 0x8B4513; tween(realEstateText, { alpha: 0 }, { duration: 4500, onFinish: function onFinish() { realEstateText.destroy(); } }); } // BUG 86: Powerups randomly become social media posts if (Math.random() < 0.013) { for (var i = 0; i < powerups.length; i++) { var socialPosts = ['📱 "Just upgraded my laser! #Blessed"', '📱 "Feeling cute, might destroy\nlater idk"', '📱 "Live, Laugh, Laser 💕"']; var postText = new Text2(socialPosts[Math.floor(Math.random() * socialPosts.length)], { size: 26, fill: 0x1DA1F2 }); postText.anchor.set(0.5, 0.5); postText.x = powerups[i].x; postText.y = powerups[i].y - 70; game.addChild(postText); powerups[i].children[0].tint = 0x1DA1F2; tween(postText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { postText.destroy(); } }); } } // BUG 87: Enemy lasers randomly become workout instructions if (Math.random() < 0.015) { for (var i = 0; i < enemyLasers.length; i++) { var workoutTexts = ['💪 "Feel the burn!"', '💪 "One more rep!"', '💪 "No pain, no gain!"', '💪 "Push through it!"']; var workoutText = new Text2(workoutTexts[Math.floor(Math.random() * workoutTexts.length)], { size: 24, fill: 0xFF4500 }); workoutText.anchor.set(0.5, 0.5); workoutText.x = enemyLasers[i].x; workoutText.y = enemyLasers[i].y - 30; game.addChild(workoutText); enemyLasers[i].children[0].tint = 0xFF4500; tween(workoutText, { alpha: 0 }, { duration: 1800, onFinish: function onFinish() { workoutText.destroy(); } }); } } // BUG 88: Game randomly becomes a time travel documentary if (Math.random() < 0.002) { var timeDocText = new Text2('📺 ANCIENT ALIENS PRESENTS:\n"Did lasers build the pyramids?"\n"Experts say: Maybe"', { size: 45, fill: 0x9932CC }); timeDocText.anchor.set(0.5, 0.5); timeDocText.x = 1024; timeDocText.y = 1366; game.addChild(timeDocText); LK.setTimeout(function () { timeDocText.destroy(); }, 6000); } // BUG 89: Explosions randomly become cooking tutorials if (Math.random() < 0.011 && explosions.length > 0) { var cookingTutorialText = new Text2('👨🍳 "Step 1: Preheat your laser\nStep 2: Add explosions to taste"\n"Serves 4"', { size: 38, fill: 0xFFD700 }); cookingTutorialText.anchor.set(0.5, 0.5); cookingTutorialText.x = explosions[0].x; cookingTutorialText.y = explosions[0].y - 80; game.addChild(cookingTutorialText); tween(cookingTutorialText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { cookingTutorialText.destroy(); } }); } // BUG 90: Enemies randomly become technical support scammers if (Math.random() < 0.006 && enemies.length > 0) { var scamText = new Text2('📞 "Hello, your computer\nhas virus! Give me your\ncredit card to fix!"', { size: 32, fill: 0xFF0000 }); scamText.anchor.set(0.5, 0.5); scamText.x = enemies[0].x; scamText.y = enemies[0].y - 100; game.addChild(scamText); enemies[0].children[0].tint = 0xFF0000; tween(scamText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { scamText.destroy(); } }); } // BUG 91: Player ship randomly becomes a driving instructor if (Math.random() < 0.005) { var drivingText = new Text2('🚗 "Check your mirrors!\nSignal before shooting!\nParallel park that laser!"', { size: 38, fill: 0x00FF7F }); drivingText.anchor.set(0.5, 0.5); drivingText.x = player.x; drivingText.y = player.y - 150; game.addChild(drivingText); player.children[0].tint = 0x00FF7F; tween(drivingText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { drivingText.destroy(); } }); } // BUG 92: Asteroids randomly become self-help gurus if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var selfHelpText = new Text2('📚 "Chapter 1: How to Rock\nChapter 2: Finding Your Core\nChapter 3: Rolling with It"', { size: 28, fill: 0x20B2AA }); selfHelpText.anchor.set(0.5, 0.5); selfHelpText.x = asteroids[i].x; selfHelpText.y = asteroids[i].y - 90; game.addChild(selfHelpText); asteroids[i].children[0].tint = 0x20B2AA; tween(selfHelpText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { selfHelpText.destroy(); } }); } } // BUG 93: Boss randomly becomes a cryptocurrency investor if (Math.random() < 0.007 && boss) { var cryptoInvestorText = new Text2('💰 "HODL the line!\nLaser coin to the moon!\nDiamond hands! 💎🙌"', { size: 40, fill: 0xFFD700 }); cryptoInvestorText.anchor.set(0.5, 0.5); cryptoInvestorText.x = boss.x; cryptoInvestorText.y = boss.y - 200; game.addChild(cryptoInvestorText); boss.children[0].tint = 0xFFD700; tween(cryptoInvestorText, { alpha: 0 }, { duration: 4500, onFinish: function onFinish() { cryptoInvestorText.destroy(); } }); } // BUG 94: Powerups randomly become internet arguments if (Math.random() < 0.012) { for (var i = 0; i < powerups.length; i++) { var argumentTexts = ['🤬 "Actually, you\'re wrong"', '🤬 "Source???"', '🤬 "I have a PhD in lasers"', '🤬 "Blocked and reported"']; var argumentText = new Text2(argumentTexts[Math.floor(Math.random() * argumentTexts.length)], { size: 28, fill: 0xFF4500 }); argumentText.anchor.set(0.5, 0.5); argumentText.x = powerups[i].x; argumentText.y = powerups[i].y - 70; game.addChild(argumentText); powerups[i].children[0].tint = 0xFF4500; tween(argumentText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { argumentText.destroy(); } }); } } // BUG 95: Enemy lasers randomly become movie reviews if (Math.random() < 0.014) { for (var i = 0; i < enemyLasers.length; i++) { var reviewTexts = ['🎬 "Two thumbs way down"', '🎬 "Worst sequel ever made"', '🎬 "The book was better"', '🎬 "Needs more explosions"']; var movieReviewText = new Text2(reviewTexts[Math.floor(Math.random() * reviewTexts.length)], { size: 22, fill: 0x9370DB }); movieReviewText.anchor.set(0.5, 0.5); movieReviewText.x = enemyLasers[i].x; movieReviewText.y = enemyLasers[i].y - 35; game.addChild(movieReviewText); enemyLasers[i].children[0].tint = 0x9370DB; tween(movieReviewText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { movieReviewText.destroy(); } }); } } // BUG 96: Game randomly spawns fake error dialogs if (Math.random() < 0.002) { var errorDialog = new Text2('❌ ERROR 404: Fun not found\n[OK] [Cancel] [Send Error Report]\n[Format Hard Drive]', { size: 45, fill: 0xFF0000 }); errorDialog.anchor.set(0.5, 0.5); errorDialog.x = 1024; errorDialog.y = 1366; game.addChild(errorDialog); LK.setTimeout(function () { errorDialog.destroy(); }, 5000); } // BUG 97: Explosions randomly become infomercials if (Math.random() < 0.01 && explosions.length > 0) { var infomercialText = new Text2('📺 "BUT WAIT, THERE\'S MORE!\nCall now and get a second\nexplosion absolutely FREE!"', { size: 40, fill: 0xFF6347 }); infomercialText.anchor.set(0.5, 0.5); infomercialText.x = explosions[0].x; infomercialText.y = explosions[0].y - 80; game.addChild(infomercialText); tween(infomercialText, { alpha: 0, scaleX: 1.2, scaleY: 1.2 }, { duration: 4000, onFinish: function onFinish() { infomercialText.destroy(); } }); } // BUG 98: Enemies randomly become political candidates if (Math.random() < 0.006 && enemies.length > 0) { var politicalText = new Text2('🗳️ "Vote for me!\nI promise free lasers for all!\nMake Space Great Again!"', { size: 35, fill: 0x0000FF }); politicalText.anchor.set(0.5, 0.5); politicalText.x = enemies[0].x; politicalText.y = enemies[0].y - 120; game.addChild(politicalText); enemies[0].children[0].tint = 0x0000FF; tween(politicalText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { politicalText.destroy(); } }); } // BUG 99: Player randomly gets existential crisis about being in a game if (Math.random() < 0.004) { var existentialText = new Text2('🤖 "Wait... am I just code?\nAre my lasers even real?\nDo I have free will?"', { size: 40, fill: 0x800080 }); existentialText.anchor.set(0.5, 0.5); existentialText.x = player.x; existentialText.y = player.y - 150; game.addChild(existentialText); player.canShoot = false; // Too confused to shoot LK.setTimeout(function () { if (player) player.canShoot = true; existentialText.destroy(); }, 4000); } // BUG 100: Asteroids randomly become internet trolls if (Math.random() < 0.009) { for (var i = 0; i < asteroids.length; i++) { var trollTexts = ['😈 "u mad bro?"', '😈 "git gud scrub"', '😈 "first"', '😈 "reported"', '😈 "skill issue"']; var trollText = new Text2(trollTexts[Math.floor(Math.random() * trollTexts.length)], { size: 30, fill: 0xFF4500 }); trollText.anchor.set(0.5, 0.5); trollText.x = asteroids[i].x; trollText.y = asteroids[i].y - 60; game.addChild(trollText); asteroids[i].children[0].tint = 0xFF4500; tween(trollText, { alpha: 0, rotation: Math.PI }, { duration: 2500, onFinish: function onFinish() { trollText.destroy(); } }); } } // BUG 101: Boss randomly becomes a wedding planner if (Math.random() < 0.007 && boss) { var weddingText = new Text2('💒 "I now pronounce you\nlaser and target!\nYou may kiss the bride!"', { size: 38, fill: 0xFF69B4 }); weddingText.anchor.set(0.5, 0.5); weddingText.x = boss.x; weddingText.y = boss.y - 200; game.addChild(weddingText); boss.children[0].tint = 0xFF69B4; // Spawn confetti for (var confetti = 0; confetti < 12; confetti++) { var confettiPiece = game.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); confettiPiece.x = boss.x + (Math.random() - 0.5) * 300; confettiPiece.y = boss.y + (Math.random() - 0.5) * 200; confettiPiece.scale.set(0.2, 0.2); confettiPiece.tint = Math.random() * 0xffffff; tween(confettiPiece, { y: confettiPiece.y + 400, alpha: 0 }, { duration: 3000, onFinish: function onFinish() { confettiPiece.destroy(); } }); } LK.getSound('powerup').play(); tween(weddingText, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { weddingText.destroy(); } }); } // BUG 102: Powerups randomly become startup pitch presentations if (Math.random() < 0.01) { for (var i = 0; i < powerups.length; i++) { var pitchText = new Text2('💼 "We\'re disrupting the laser space\nwith blockchain AI"\n"We need $50M seed round"', { size: 26, fill: 0x007AFF }); pitchText.anchor.set(0.5, 0.5); pitchText.x = powerups[i].x; pitchText.y = powerups[i].y - 80; game.addChild(pitchText); powerups[i].children[0].tint = 0x007AFF; tween(pitchText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { pitchText.destroy(); } }); } } // BUG 103: Enemy lasers randomly become TikTok dances if (Math.random() < 0.016) { for (var i = 0; i < enemyLasers.length; i++) { var tikTokText = new Text2('💃 *Does the Renegade*\n*Hits the griddy*', { size: 24, fill: 0xFF1493 }); tikTokText.anchor.set(0.5, 0.5); tikTokText.x = enemyLasers[i].x; tikTokText.y = enemyLasers[i].y - 40; game.addChild(tikTokText); enemyLasers[i].children[0].tint = 0xFF1493; enemyLasers[i].children[0].rotation += 0.5; // Dance move tween(tikTokText, { alpha: 0 }, { duration: 1500, onFinish: function onFinish() { tikTokText.destroy(); } }); } } // BUG 104: Game randomly becomes a nature documentary if (Math.random() < 0.002) { var natureDocText = new Text2('🦁 "Here we see the rare Space Pilot\nin its natural habitat,\nshooting lasers to survive"', { size: 45, fill: 0x228B22 }); natureDocText.anchor.set(0.5, 0.5); natureDocText.x = 1024; natureDocText.y = 400; game.addChild(natureDocText); LK.setTimeout(function () { natureDocText.destroy(); }, 6000); } // BUG 105: Explosions randomly become award ceremonies if (Math.random() < 0.01 && explosions.length > 0) { var awardText = new Text2('🏆 "And the Oscar goes to...\nBest Explosion in a Space Game!\nI\'d like to thank my particles"', { size: 40, fill: 0xFFD700 }); awardText.anchor.set(0.5, 0.5); awardText.x = explosions[0].x; awardText.y = explosions[0].y - 80; game.addChild(awardText); tween(awardText, { alpha: 0, scaleX: 1.3, scaleY: 1.3 }, { duration: 4000, onFinish: function onFinish() { awardText.destroy(); } }); } // BUG 106: Enemies randomly become taxi dispatchers if (Math.random() < 0.006 && enemies.length > 0) { var taxiDispatchText = new Text2('🚕 "Unit 47, pickup at coordinates\n1024, 1366\nCustomer is armed and dangerous"', { size: 32, fill: 0xFFFF00 }); taxiDispatchText.anchor.set(0.5, 0.5); taxiDispatchText.x = enemies[0].x; taxiDispatchText.y = enemies[0].y - 120; game.addChild(taxiDispatchText); enemies[0].children[0].tint = 0xFFFF00; tween(taxiDispatchText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { taxiDispatchText.destroy(); } }); } // BUG 107: Player ship randomly becomes a museum tour guide if (Math.random() < 0.005) { var museumText = new Text2('🏛️ "And here we have a rare\n21st century laser\nNotice the fine craftsmanship"', { size: 38, fill: 0x8B4513 }); museumText.anchor.set(0.5, 0.5); museumText.x = player.x; museumText.y = player.y - 150; game.addChild(museumText); player.children[0].tint = 0x8B4513; player.speed = 1; // Move slowly like in a museum LK.setTimeout(function () { if (player) player.speed = 5; museumText.destroy(); }, 4000); } // BUG 108: Asteroids randomly become LinkedIn motivational posts if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var linkedInText = new Text2('💼 "Just crushed my Q4 goals!\nGrateful for this journey\n#Blessed #RockLife"', { size: 28, fill: 0x0077B5 }); linkedInText.anchor.set(0.5, 0.5); linkedInText.x = asteroids[i].x; linkedInText.y = asteroids[i].y - 90; game.addChild(linkedInText); asteroids[i].children[0].tint = 0x0077B5; tween(linkedInText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { linkedInText.destroy(); } }); } } // BUG 109: Boss randomly becomes a late-night TV host if (Math.random() < 0.007 && boss) { var lateNightText = new Text2('📺 "So I was at the space station\nthe other day...\n*cue laugh track*"', { size: 40, fill: 0x9400D3 }); lateNightText.anchor.set(0.5, 0.5); lateNightText.x = boss.x; lateNightText.y = boss.y - 200; game.addChild(lateNightText); boss.children[0].tint = 0x9400D3; LK.getSound('powerup').play(); // Laugh track tween(lateNightText, { alpha: 0 }, { duration: 4500, onFinish: function onFinish() { lateNightText.destroy(); } }); } // BUG 110: Powerups randomly become conspiracy theories if (Math.random() < 0.011) { for (var i = 0; i < powerups.length; i++) { var conspiracyTexts = ['👁️ "Lasers are controlled\nby the Illuminati"', '👁️ "Birds aren\'t real,\nthey\'re laser drones"', '👁️ "The moon is made\nof compressed lasers"']; var conspirText = new Text2(conspiracyTexts[Math.floor(Math.random() * conspiracyTexts.length)], { size: 26, fill: 0x00FF00 }); conspirText.anchor.set(0.5, 0.5); conspirText.x = powerups[i].x; conspirText.y = powerups[i].y - 80; game.addChild(conspirText); powerups[i].children[0].tint = 0x00FF00; tween(conspirText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { conspirText.destroy(); } }); } } // BUG 111: Enemy lasers randomly become product reviews if (Math.random() < 0.014) { for (var i = 0; i < enemyLasers.length; i++) { var productReviews = ['⭐⭐⭐⭐⭐ "Great laser!\nFast shipping"', '⭐ "Broke after one use\nWould not recommend"', '⭐⭐⭐ "Decent quality\nfor the price"']; var reviewText = new Text2(productReviews[Math.floor(Math.random() * productReviews.length)], { size: 20, fill: 0xFFD700 }); reviewText.anchor.set(0.5, 0.5); reviewText.x = enemyLasers[i].x; reviewText.y = enemyLasers[i].y - 40; game.addChild(reviewText); enemyLasers[i].children[0].tint = 0xFFD700; tween(reviewText, { alpha: 0 }, { duration: 2200, onFinish: function onFinish() { reviewText.destroy(); } }); } } // BUG 112: Game randomly spawns fake news headlines if (Math.random() < 0.002) { var newsHeadlines = ['📰 "LOCAL MAN DISCOVERS\nFIRE IS HOT"', '📰 "SCIENTISTS BAFFLED:\nWATER IS WET"', '📰 "BREAKING: SKY CONFIRMED\nTO BE BLUE"']; var newsText = new Text2(newsHeadlines[Math.floor(Math.random() * newsHeadlines.length)], { size: 50, fill: 0x000080 }); newsText.anchor.set(0.5, 0.5); newsText.x = 1024; newsText.y = 600; game.addChild(newsText); LK.setTimeout(function () { newsText.destroy(); }, 5000); } // BUG 113: Explosions randomly become cooking shows if (Math.random() < 0.01 && explosions.length > 0) { var cookingShowText = new Text2('👨🍳 "Today we\'re making\nExplosion Flambé!\nAdd a touch of plasma..."', { size: 38, fill: 0xFF6347 }); cookingShowText.anchor.set(0.5, 0.5); cookingShowText.x = explosions[0].x; cookingShowText.y = explosions[0].y - 80; game.addChild(cookingShowText); tween(cookingShowText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { cookingShowText.destroy(); } }); } // BUG 114: Enemies randomly become uber drivers asking for ratings if (Math.random() < 0.006 && enemies.length > 0) { var uberRatingText = new Text2('🚗 "How was your ride?\nPlease rate 5 stars!\nTips appreciated!"', { size: 32, fill: 0x000000 }); uberRatingText.anchor.set(0.5, 0.5); uberRatingText.x = enemies[0].x; uberRatingText.y = enemies[0].y - 100; game.addChild(uberRatingText); enemies[0].children[0].tint = 0x000000; tween(uberRatingText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { uberRatingText.destroy(); } }); } // BUG 115: Player randomly becomes a sports announcer if (Math.random() < 0.006) { var announcerText = new Text2('🎤 "AND DOWN THE FIELD HE GOES!\nWHAT A SPECTACULAR SHOT!\nTHE CROWD GOES WILD!"', { size: 40, fill: 0xFF4500 }); announcerText.anchor.set(0.5, 0.5); announcerText.x = player.x; announcerText.y = player.y - 150; game.addChild(announcerText); player.children[0].tint = 0xFF4500; tween(announcerText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { announcerText.destroy(); } }); } // BUG 116: Asteroids randomly become Amazon delivery notifications if (Math.random() < 0.009) { for (var i = 0; i < asteroids.length; i++) { var deliveryText = new Text2('📦 "Your package has been\ndelivered to your door!\nRate your delivery experience"', { size: 28, fill: 0xFF9500 }); deliveryText.anchor.set(0.5, 0.5); deliveryText.x = asteroids[i].x; deliveryText.y = asteroids[i].y - 90; game.addChild(deliveryText); asteroids[i].children[0].tint = 0xFF9500; tween(deliveryText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { deliveryText.destroy(); } }); } } // BUG 117: Boss randomly becomes a meditation instructor if (Math.random() < 0.007 && boss) { var meditationInstructorText = new Text2('🧘 "Close your eyes and breathe...\nFeel the laser energy\nflowing through you"', { size: 38, fill: 0x20B2AA }); meditationInstructorText.anchor.set(0.5, 0.5); meditationInstructorText.x = boss.x; meditationInstructorText.y = boss.y - 200; game.addChild(meditationInstructorText); boss.children[0].tint = 0x20B2AA; boss.speed *= 0.1; // Move very slowly LK.setTimeout(function () { if (boss) boss.speed *= 10; meditationInstructorText.destroy(); }, 4000); } // BUG 118: Powerups randomly become Netflix recommendations if (Math.random() < 0.012) { for (var i = 0; i < powerups.length; i++) { var netflixTexts = ['📺 "Because you watched\n"Space Lasers"\nTry: "More Space Lasers"', '📺 "New episodes available!\n"Asteroid Hunters"\nSeason 47 now streaming"']; var netflixText = new Text2(netflixTexts[Math.floor(Math.random() * netflixTexts.length)], { size: 26, fill: 0xE50914 }); netflixText.anchor.set(0.5, 0.5); netflixText.x = powerups[i].x; netflixText.y = powerups[i].y - 80; game.addChild(netflixText); powerups[i].children[0].tint = 0xE50914; tween(netflixText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { netflixText.destroy(); } }); } } // BUG 119: Enemy lasers randomly become YouTube comments if (Math.random() < 0.016) { for (var i = 0; i < enemyLasers.length; i++) { var youtubeComments = ['💬 "First!"', '💬 "Like if you\'re watching in 2024"', '💬 "Who\'s here from TikTok?"', '💬 "This video changed my life"', '💬 "Subscribe for good luck"']; var commentText = new Text2(youtubeComments[Math.floor(Math.random() * youtubeComments.length)], { size: 22, fill: 0xFF0000 }); commentText.anchor.set(0.5, 0.5); commentText.x = enemyLasers[i].x; commentText.y = enemyLasers[i].y - 35; game.addChild(commentText); enemyLasers[i].children[0].tint = 0xFF0000; tween(commentText, { alpha: 0 }, { duration: 1800, onFinish: function onFinish() { commentText.destroy(); } }); } } // BUG 120: Game randomly becomes a weather app if (Math.random() < 0.002) { var weatherAppText = new Text2('⛅ "Today: Chance of lasers 100%\nTomorrow: Scattered explosions\nUV Index: DANGER"', { size: 45, fill: 0x87CEEB }); weatherAppText.anchor.set(0.5, 0.5); weatherAppText.x = 1024; weatherAppText.y = 1366; game.addChild(weatherAppText); LK.setTimeout(function () { weatherAppText.destroy(); }, 5000); } // BUG 121: Explosions randomly become wedding announcements if (Math.random() < 0.01 && explosions.length > 0) { var weddingAnnouncementText = new Text2('💒 "Mr. Laser & Ms. Target\nare pleased to announce\ntheir explosive union!"', { size: 40, fill: 0xFF69B4 }); weddingAnnouncementText.anchor.set(0.5, 0.5); weddingAnnouncementText.x = explosions[0].x; weddingAnnouncementText.y = explosions[0].y - 80; game.addChild(weddingAnnouncementText); tween(weddingAnnouncementText, { alpha: 0, scaleX: 1.2, scaleY: 1.2 }, { duration: 4000, onFinish: function onFinish() { weddingAnnouncementText.destroy(); } }); } // BUG 122: Enemies randomly become telemarketers if (Math.random() < 0.006 && enemies.length > 0) { var telemarketerText = new Text2('📞 "Have I got a deal for you!\nExtended laser warranty\nfor only $99.99!"', { size: 32, fill: 0x4B0082 }); telemarketerText.anchor.set(0.5, 0.5); telemarketerText.x = enemies[0].x; telemarketerText.y = enemies[0].y - 120; game.addChild(telemarketerText); enemies[0].children[0].tint = 0x4B0082; tween(telemarketerText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { telemarketerText.destroy(); } }); } // BUG 123: Player ship randomly becomes a game show contestant if (Math.random() < 0.005) { var contestantText = new Text2('🎯 "I\'d like to buy a vowel!\nIs there an E in LASER?\nFinal answer!"', { size: 38, fill: 0xFFD700 }); contestantText.anchor.set(0.5, 0.5); contestantText.x = player.x; contestantText.y = player.y - 150; game.addChild(contestantText); player.children[0].tint = 0xFFD700; tween(contestantText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { contestantText.destroy(); } }); } // BUG 124: Asteroids randomly become social media influencers selling courses if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var influencerCourseText = new Text2('💰 "Learn my secrets!\n$5000 course on\nhow to be a rock!"', { size: 28, fill: 0xFF69B4 }); influencerCourseText.anchor.set(0.5, 0.5); influencerCourseText.x = asteroids[i].x; influencerCourseText.y = asteroids[i].y - 90; game.addChild(influencerCourseText); asteroids[i].children[0].tint = 0xFF69B4; tween(influencerCourseText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { influencerCourseText.destroy(); } }); } } // BUG 125: Boss randomly becomes a parking meter if (Math.random() < 0.007 && boss) { var parkingMeterText = new Text2('🅿️ "EXPIRED!\nInsert coins to continue\nNo parking 2AM-6AM"', { size: 40, fill: 0x808080 }); parkingMeterText.anchor.set(0.5, 0.5); parkingMeterText.x = boss.x; parkingMeterText.y = boss.y - 200; game.addChild(parkingMeterText); boss.children[0].tint = 0x808080; boss.speed = 0; // Can't move, it's a parking meter LK.setTimeout(function () { if (boss) boss.speed = 2; parkingMeterText.destroy(); }, 4000); } // BUG 126: Powerups randomly become spam calls if (Math.random() < 0.011) { for (var i = 0; i < powerups.length; i++) { var spamCallTexts = ['📱 "Your car warranty\nis about to expire!"', '📱 "You owe the IRS $5000!\nPay with gift cards!"', '📱 "Congratulations!\nYou won a free cruise!"']; var spamCallText = new Text2(spamCallTexts[Math.floor(Math.random() * spamCallTexts.length)], { size: 26, fill: 0xFF0000 }); spamCallText.anchor.set(0.5, 0.5); spamCallText.x = powerups[i].x; spamCallText.y = powerups[i].y - 80; game.addChild(spamCallText); powerups[i].children[0].tint = 0xFF0000; tween(spamCallText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { spamCallText.destroy(); } }); } } // BUG 127: Enemy lasers randomly become GPS directions that are wrong if (Math.random() < 0.014) { for (var i = 0; i < enemyLasers.length; i++) { var wrongGPSTexts = ['🗺️ "Turn right... no left... recalculating"', '🗺️ "In 500 feet, turn into\nthe sun"', '🗺️ "Make a U-turn\nin space"']; var wrongGPSText = new Text2(wrongGPSTexts[Math.floor(Math.random() * wrongGPSTexts.length)], { size: 22, fill: 0x32CD32 }); wrongGPSText.anchor.set(0.5, 0.5); wrongGPSText.x = enemyLasers[i].x; wrongGPSText.y = enemyLasers[i].y - 40; game.addChild(wrongGPSText); enemyLasers[i].children[0].tint = 0x32CD32; tween(wrongGPSText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { wrongGPSText.destroy(); } }); } } // BUG 128: Game randomly becomes a GPS that only gives directions to McDonald's if (Math.random() < 0.002) { var mcdonaldsGPSText = new Text2('🗺️ SPACE GPS SAYS:\n"All roads lead to McDonald\'s"\n"Turn right for Big Mac"', { size: 50, fill: 0xFF0000 }); mcdonaldsGPSText.anchor.set(0.5, 0.5); mcdonaldsGPSText.x = 1024; mcdonaldsGPSText.y = 1366; game.addChild(mcdonaldsGPSText); LK.setTimeout(function () { mcdonaldsGPSText.destroy(); }, 5000); } // BUG 129: Explosions randomly become Amazon package delivery updates if (Math.random() < 0.01 && explosions.length > 0) { var packageUpdateText = new Text2('📦 "Your explosion has been\ndelivered and signed for\nby: DESTRUCTION"', { size: 38, fill: 0xFF9500 }); packageUpdateText.anchor.set(0.5, 0.5); packageUpdateText.x = explosions[0].x; packageUpdateText.y = explosions[0].y - 80; game.addChild(packageUpdateText); tween(packageUpdateText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { packageUpdateText.destroy(); } }); } // BUG 130: Enemies randomly become Siri giving unhelpful responses if (Math.random() < 0.006 && enemies.length > 0) { var siriTexts = ['🗣️ "I found 47 results for\n\'How to destroy humanity\'"', '🗣️ "I didn\'t catch that.\nDid you say \'pizza\'?"', '🗣️ "Here\'s what I found\nabout laser surgery"']; var siriText = new Text2(siriTexts[Math.floor(Math.random() * siriTexts.length)], { size: 32, fill: 0x007AFF }); siriText.anchor.set(0.5, 0.5); siriText.x = enemies[0].x; siriText.y = enemies[0].y - 120; game.addChild(siriText); enemies[0].children[0].tint = 0x007AFF; tween(siriText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { siriText.destroy(); } }); } // BUG 131: Player randomly becomes a GPS with a thick accent if (Math.random() < 0.005) { var accentGPSText = new Text2('🗺️ "G\'day mate! Turn roight\nat the next croikey!\nYou\'ve reached your destinoition!"', { size: 38, fill: 0x00FF7F }); accentGPSText.anchor.set(0.5, 0.5); accentGPSText.x = player.x; accentGPSText.y = player.y - 150; game.addChild(accentGPSText); player.children[0].tint = 0x00FF7F; tween(accentGPSText, { alpha: 0 }, { duration: 4000, onFinish: function onFinish() { accentGPSText.destroy(); } }); } // BUG 132: Asteroids randomly become yelp reviews for space if (Math.random() < 0.008) { for (var i = 0; i < asteroids.length; i++) { var yelpText = new Text2('⭐⭐ "Space is too dark\nand there\'s no WiFi\n2/5 stars - Karen"', { size: 28, fill: 0xFF6600 }); yelpText.anchor.set(0.5, 0.5); yelpText.x = asteroids[i].x; yelpText.y = asteroids[i].y - 90; game.addChild(yelpText); asteroids[i].children[0].tint = 0xFF6600; tween(yelpText, { alpha: 0 }, { duration: 3500, onFinish: function onFinish() { yelpText.destroy(); } }); } } // BUG 133: Boss randomly becomes a voice assistant trying to order pizza if (Math.random() < 0.007 && boss) { var pizzaOrderText = new Text2('🍕 "Ordering one large pepperoni\nto coordinates 42, 69\nEstimated delivery: 30 minutes"', { size: 38, fill: 0xFF6347 }); pizzaOrderText.anchor.set(0.5, 0.5); pizzaOrderText.x = boss.x; pizzaOrderText.y = boss.y - 200; game.addChild(pizzaOrderText); boss.children[0].tint = 0xFF6347; tween(pizzaOrderText, { alpha: 0 }, { duration: 4500, onFinish: function onFinish() { pizzaOrderText.destroy(); } }); } // BUG 134: Powerups randomly become Windows error messages if (Math.random() < 0.01) { for (var i = 0; i < powerups.length; i++) { var windowsErrors = ['💻 "PowerUp.exe has stopped\nworking"', '💻 "Please wait while Windows\nconfigures your laser"', '💻 "A problem caused the\nprogram to stop working"']; var errorText = new Text2(windowsErrors[Math.floor(Math.random() * windowsErrors.length)], { size: 26, fill: 0x0078D4 }); errorText.anchor.set(0.5, 0.5); errorText.x = powerups[i].x; errorText.y = powerups[i].y - 80; game.addChild(errorText); powerups[i].children[0].tint = 0x0078D4; tween(errorText, { alpha: 0 }, { duration: 3000, onFinish: function onFinish() { errorText.destroy(); } }); } } // BUG 135: Enemy lasers randomly become autocomplete suggestions if (Math.random() < 0.015) { for (var i = 0; i < enemyLasers.length; i++) { var autocompleteTexts = ['🔍 "how to destroy"', '🔍 "why is my laser"', '🔍 "space for rent near me"', '🔍 "am I real or just code"']; var autocompleteText = new Text2(autocompleteTexts[Math.floor(Math.random() * autocompleteTexts.length)], { size: 22, fill: 0x4285F4 }); autocompleteText.anchor.set(0.5, 0.5); autocompleteText.x = enemyLasers[i].x; autocompleteText.y = enemyLasers[i].y - 35; game.addChild(autocompleteText); enemyLasers[i].children[0].tint = 0x4285F4; tween(autocompleteText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { autocompleteText.destroy(); } }); } } // BUG 136: Game randomly becomes a broken AI chatbot if (Math.random() < 0.002) { var chatbotText = new Text2('🤖 AI ASSISTANT ACTIVATED:\n"I am sorry, I do not understand\nyour request for \'shooting lasers\'"', { size: 45, fill: 0x9E9E9E }); chatbotText.anchor.set(0.5, 0.5); chatbotText.x = 1024; chatbotText.y = 1366; game.addChild(chatbotText); LK.setTimeout(function () { chatbotText.destroy(); }, 5000); } // Handle collisions handleCollisions(); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0
});
/****
* Classes
****/
var Asteroid = Container.expand(function () {
var self = Container.call(this);
var asteroid = self.attachAsset('asteroid', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 2;
self.speed = {
y: 2 + Math.random() * 2,
x: (Math.random() - 0.5) * 2
};
self.rotation = Math.random() * 0.1 - 0.05;
self.scoreValue = 15;
// Random size variation
var scale = 0.7 + Math.random() * 0.8;
asteroid.scale.set(scale, scale);
self.damage = function (amount) {
self.health -= amount || 1;
tween(asteroid, {
tint: 0xffffff
}, {
duration: 200,
onFinish: function onFinish() {
asteroid.tint = 0x95a5a6;
}
});
// Randomly start advertising products when damaged
if (Math.random() < 0.4) {
var ads = ['BUY SPACE INSURANCE!', 'HOT SINGLES IN YOUR GALAXY!', 'CLICK HERE FOR FREE ROBUX!', 'ENLARGED YOUR SPACESHIP!', 'LOSE WEIGHT WITH THIS TRICK!', 'DOCTORS HATE THIS ASTEROID!'];
var adText = new Text2(ads[Math.floor(Math.random() * ads.length)], {
size: 25,
fill: 0x00FFFF
});
adText.anchor.set(0.5, 0.5);
adText.x = self.x;
adText.y = self.y - 60;
self.parent.addChild(adText);
tween(adText, {
alpha: 0,
y: adText.y - 80,
rotation: Math.PI
}, {
duration: 3000,
onFinish: function onFinish() {
adText.destroy();
}
});
}
return self.health <= 0;
};
self.update = function () {
self.y += self.speed.y;
self.x += self.speed.x;
asteroid.rotation += self.rotation;
// Randomly become invisible/visible
if (Math.random() < 0.05) {
asteroid.alpha = asteroid.alpha > 0.5 ? 0.1 : 1;
}
// Randomly tell jokes
if (Math.random() < 0.003) {
var jokes = ['Why did the asteroid break up? It needed SPACE!', 'I ROCK!', 'METEOR you later!', 'COMET me bro!', 'I have a ROCKY personality'];
var jokeText = new Text2(jokes[Math.floor(Math.random() * jokes.length)], {
size: 30,
fill: 0x00FF00
});
jokeText.anchor.set(0.5, 0.5);
jokeText.x = self.x;
jokeText.y = self.y - 50;
self.parent.addChild(jokeText);
tween(jokeText, {
alpha: 0,
y: jokeText.y - 100
}, {
duration: 3000,
onFinish: function onFinish() {
jokeText.destroy();
}
});
}
// Randomly turn into disco balls and start party mode
if (Math.random() < 0.006) {
asteroid.tint = Math.random() * 0xffffff;
asteroid.rotation += 0.3;
// Create disco lights
for (var disco = 0; disco < 8; disco++) {
var discoLight = self.parent.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
var angle = disco / 8 * Math.PI * 2;
discoLight.x = self.x + Math.cos(angle) * 80;
discoLight.y = self.y + Math.sin(angle) * 80;
discoLight.scale.set(0.3, 0.3);
discoLight.tint = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF][disco % 6];
tween(discoLight, {
alpha: 0,
rotation: Math.PI * 2
}, {
duration: 2000,
onFinish: function onFinish() {
discoLight.destroy();
}
});
}
var partyText = new Text2('🕺 PARTY TIME! 💃', {
size: 40,
fill: 0xFF1493
});
partyText.anchor.set(0.5, 0.5);
partyText.x = self.x;
partyText.y = self.y - 100;
self.parent.addChild(partyText);
tween(partyText, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 3000,
onFinish: function onFinish() {
partyText.destroy();
}
});
LK.playMusic('gameMusic');
}
};
return self;
});
var Boss = Container.expand(function (level) {
var self = Container.call(this);
var ship = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.level = level || 1;
self.maxHealth = 20 * self.level;
self.health = self.maxHealth;
self.scoreValue = 200 * self.level;
self.phase = 0;
self.phaseTime = 0;
self.patterns = ['side-to-side', 'charge', 'retreat'];
self.currentPattern = 0;
self.targetX = 0;
self.targetY = 0;
// Adjust boss based on level
if (self.level > 1) {
ship.tint = 0xcc00cc;
}
// Health bar
self.healthBar = new Container();
self.addChild(self.healthBar);
var healthBarBg = self.healthBar.attachAsset('playerLaser', {
anchorX: 0,
anchorY: 0.5,
scaleX: 2,
scaleY: 0.5
});
healthBarBg.tint = 0x333333;
healthBarBg.width = 200;
self.healthBarFill = self.healthBar.attachAsset('playerLaser', {
anchorX: 0,
anchorY: 0.5,
scaleX: 2,
scaleY: 0.4
});
self.healthBarFill.tint = 0xff3333;
self.healthBarFill.width = 200;
self.healthBar.y = -120;
self.damage = function (amount) {
self.health -= amount || 1;
// Update health bar - show completely wrong values
var wrongHealthValues = [-0.5, 2.5, 100, 0.01, 999];
var healthPercent = wrongHealthValues[Math.floor(Math.random() * wrongHealthValues.length)];
self.healthBarFill.width = 200 * Math.abs(healthPercent);
if (healthPercent < 0) self.healthBarFill.tint = 0x00ff00; // Green when negative
tween(ship, {
tint: 0xffffff
}, {
duration: 100,
onFinish: function onFinish() {
ship.tint = self.level > 1 ? 0xcc00cc : 0x9b59b6;
}
});
// Change patterns more quickly when damaged
if (self.health < self.maxHealth * 0.5 && self.phaseTime > 150) {
self.changePattern();
}
return self.health <= 0;
};
self.changePattern = function () {
self.currentPattern = (self.currentPattern + 1) % self.patterns.length;
self.phaseTime = 0;
self.phase = 0;
};
self.update = function () {
self.phaseTime++;
// Change pattern every so often
if (self.phaseTime > 300) {
self.changePattern();
}
var pattern = self.patterns[self.currentPattern];
switch (pattern) {
case 'side-to-side':
// Move side to side
self.targetX = 1024 + Math.sin(self.phaseTime * 0.02) * 800;
if (self.phaseTime < 60) {
self.targetY = Math.min(self.y + 2, 400);
} else {
self.targetY = 400;
}
break;
case 'charge':
// Charge down then back up
if (self.phase === 0) {
self.targetY = self.y + 5;
if (self.y > 800) {
self.phase = 1;
}
} else {
self.targetY = Math.max(self.y - 3, 300);
if (self.y <= 300) {
self.phase = 0;
}
}
self.targetX = 1024 + Math.sin(self.phaseTime * 0.03) * 500;
break;
case 'retreat':
// Stay near top and move quickly
self.targetY = 300;
self.targetX = 1024 + Math.sin(self.phaseTime * 0.05) * 900;
break;
}
// Move toward target position - but sometimes teleport randomly
if (Math.random() < 0.1) {
self.x = Math.random() * 2048;
self.y = Math.random() * 800 + 100;
} else {
self.x += (self.targetX - self.x) * 0.05;
self.y += (self.targetY - self.y) * 0.05;
}
// Boss randomly speaks
if (Math.random() < 0.005) {
var bossQuotes = ['LOL NOOB', 'YEET!', 'SUBSCRIBE!', 'GIT GUD', 'BRUH', 'NO U', 'WASTED', 'POGGERS'];
var chatBubble = new Text2(bossQuotes[Math.floor(Math.random() * bossQuotes.length)], {
size: 60,
fill: 0xFFFF00
});
chatBubble.anchor.set(0.5, 0.5);
chatBubble.x = self.x;
chatBubble.y = self.y - 150;
self.parent.addChild(chatBubble);
// Make chat bubble disappear after 2 seconds
tween(chatBubble, {
alpha: 0,
y: chatBubble.y - 100
}, {
duration: 2000,
onFinish: function onFinish() {
chatBubble.destroy();
}
});
}
// Randomly become tiny and squeak
if (Math.random() < 0.008) {
ship.scale.set(0.1, 0.1);
LK.getSound('playerShoot').play();
var squeakText = new Text2('*squeak*', {
size: 20,
fill: 0xFFFFFF
});
squeakText.anchor.set(0.5, 0.5);
squeakText.x = self.x;
squeakText.y = self.y + 20;
self.parent.addChild(squeakText);
tween(squeakText, {
alpha: 0,
y: squeakText.y + 50
}, {
duration: 1000,
onFinish: function onFinish() {
squeakText.destroy();
}
});
}
// Randomly give life advice
if (Math.random() < 0.004) {
var lifeAdvice = ['ALWAYS BRUSH YOUR TEETH!', 'EAT YOUR VEGETABLES!', 'CALL YOUR MOTHER!', 'SAVE FOR RETIREMENT!', 'EXERCISE REGULARLY!', 'STAY HYDRATED!', 'GET 8 HOURS OF SLEEP!', 'FOLLOW YOUR DREAMS!', 'BE KIND TO OTHERS!'];
var adviceText = new Text2(lifeAdvice[Math.floor(Math.random() * lifeAdvice.length)], {
size: 45,
fill: 0x00FF00
});
adviceText.anchor.set(0.5, 0.5);
adviceText.x = self.x;
adviceText.y = self.y - 200;
self.parent.addChild(adviceText);
tween(adviceText, {
alpha: 0,
y: adviceText.y - 100,
rotation: 0.5
}, {
duration: 4000,
onFinish: function onFinish() {
adviceText.destroy();
}
});
}
};
return self;
});
var Enemy = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'basic';
var assetType = self.type === 'fast' ? 'enemy' : 'enemy';
var ship = self.attachAsset(assetType, {
anchorX: 0.5,
anchorY: 0.5
});
// Different enemy types
if (self.type === 'basic') {
self.health = 1;
self.speed = 2;
self.scoreValue = 10;
self.shootChance = 0.01;
} else if (self.type === 'fast') {
self.health = 1;
self.speed = 3.5;
self.scoreValue = 15;
ship.scaleX = 0.8;
ship.scaleY = 0.8;
self.shootChance = 0.005;
ship.tint = 0xff9966;
} else if (self.type === 'tank') {
self.health = 3;
self.speed = 1.5;
self.scoreValue = 25;
ship.scaleX = 1.2;
ship.scaleY = 1.2;
self.shootChance = 0.015;
ship.tint = 0x66ff66;
}
self.movement = {
pattern: 'straight',
phase: Math.random() * Math.PI * 2,
amplitude: 60 + Math.random() * 60
};
self.initialX = 0;
self.damage = function (amount) {
self.health -= amount || 1;
tween(ship, {
tint: 0xffffff
}, {
duration: 200,
onFinish: function onFinish() {
ship.tint = self.type === 'fast' ? 0xff9966 : self.type === 'tank' ? 0x66ff66 : 0xe74c3c;
}
});
return self.health <= 0;
};
self.update = function () {
// Basic movement - but sometimes go backwards
var actualSpeed = Math.random() < 0.15 ? -self.speed : self.speed;
self.y += actualSpeed;
// Sometimes start spinning uncontrollably
if (Math.random() < 0.02) {
ship.rotation += 0.5;
}
// Randomly change size
if (Math.random() < 0.03) {
var randomScale = 0.2 + Math.random() * 3;
ship.scale.set(randomScale, randomScale);
}
// Randomly start dancing and playing music
if (Math.random() < 0.008) {
ship.rotation += 0.3;
self.x += Math.sin(LK.ticks * 0.2) * 20;
self.y += Math.cos(LK.ticks * 0.15) * 10;
LK.playMusic('gameMusic');
}
// Pattern movement
if (self.movement.pattern === 'sine') {
self.x = self.initialX + Math.sin(LK.ticks * 0.05 + self.movement.phase) * self.movement.amplitude;
} else if (self.movement.pattern === 'zigzag') {
var timeScale = 0.02;
var t = LK.ticks * timeScale + self.movement.phase;
var triangleWave = Math.abs(t % 2 - 1) * 2 - 1;
self.x = self.initialX + triangleWave * self.movement.amplitude;
}
// Randomly start doing magic tricks
if (Math.random() < 0.005) {
// Magic trick: disappear and reappear
ship.alpha = 0;
var magicText = new Text2('✨ ABRACADABRA! ✨', {
size: 40,
fill: 0xFF00FF
});
magicText.anchor.set(0.5, 0.5);
magicText.x = self.x;
magicText.y = self.y - 80;
self.parent.addChild(magicText);
// Reappear in a different location after 1 second
LK.setTimeout(function () {
self.x = Math.random() * 2048;
self.y = Math.random() * 1000;
ship.alpha = 1;
ship.tint = Math.random() * 0xffffff; // Change color as part of the trick
}, 1000);
tween(magicText, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 2000,
onFinish: function onFinish() {
magicText.destroy();
}
});
}
};
return self;
});
var EnemyLaser = Container.expand(function () {
var self = Container.call(this);
var laser = self.attachAsset('enemyLaser', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.speedX = (Math.random() - 0.5) * 30; // Random horizontal speed
self.speedY = (Math.random() - 0.5) * 30; // Random vertical speed
self.update = function () {
// Change direction constantly
self.speedX += (Math.random() - 0.5) * 5;
self.speedY += (Math.random() - 0.5) * 5;
// Move in random directions at high speed
self.x += self.speedX;
self.y += self.speedY;
// Randomly change color
if (Math.random() < 0.1) {
laser.tint = Math.random() * 0xffffff;
}
// Randomly turn into rainbows and unicorns
if (Math.random() < 0.03) {
// Create rainbow trail
for (var trail = 0; trail < 5; trail++) {
var rainbowDot = self.parent.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
rainbowDot.x = self.x + (Math.random() - 0.5) * 50;
rainbowDot.y = self.y + trail * 20;
rainbowDot.scale.set(0.2, 0.2);
rainbowDot.tint = [0xFF0000, 0xFF7F00, 0xFFFF00, 0x00FF00, 0x0000FF, 0x4B0082, 0x9400D3][trail % 7];
tween(rainbowDot, {
alpha: 0,
scaleX: 0,
scaleY: 0
}, {
duration: 1000,
onFinish: function onFinish() {
rainbowDot.destroy();
}
});
}
// Show unicorn text
if (Math.random() < 0.5) {
var unicornText = new Text2('🦄 UNICORN POWER! 🦄', {
size: 30,
fill: 0xFF69B4
});
unicornText.anchor.set(0.5, 0.5);
unicornText.x = self.x;
unicornText.y = self.y - 50;
self.parent.addChild(unicornText);
tween(unicornText, {
alpha: 0,
y: unicornText.y - 100
}, {
duration: 2000,
onFinish: function onFinish() {
unicornText.destroy();
}
});
}
}
};
return self;
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosion = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.9
});
// Set up fade and scale
tween(explosion, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 500,
onFinish: function onFinish() {
self.destroy();
}
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var ship = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.shield = self.attachAsset('shield', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
self.lives = 3;
self.shieldActive = false;
self.fireRate = 20;
self.lastShot = 0;
self.canShoot = true;
self.power = 1;
self.invulnerable = false;
self.activateShield = function (duration) {
self.shieldActive = true;
self.shield.alpha = 0.4;
LK.setTimeout(function () {
self.shieldActive = false;
tween(self.shield, {
alpha: 0
}, {
duration: 500
});
}, duration);
};
self.damage = function () {
if (self.invulnerable || self.shieldActive) {
return;
}
self.lives--;
LK.getSound('playerDamage').play();
// Make player temporarily invulnerable
self.invulnerable = true;
// Flash the player to show invulnerability
var flashCount = 0;
var flashInterval = LK.setInterval(function () {
ship.alpha = ship.alpha === 0.3 ? 1 : 0.3;
flashCount++;
if (flashCount >= 10) {
LK.clearInterval(flashInterval);
ship.alpha = 1;
self.invulnerable = false;
}
}, 150);
};
self.upgrade = function (type) {
LK.getSound('powerup').play();
// Sometimes powerups are evil and drain you instead
var isEvil = Math.random() < 0.25;
if (type === 'shield') {
if (isEvil) {
self.shieldActive = false;
self.shield.alpha = 0;
} else {
self.activateShield(8000);
}
} else if (type === 'power') {
if (isEvil) {
self.power = Math.max(self.power - 1, 1);
} else {
self.power = Math.min(self.power + 1, 3);
}
// Reset power after some time
LK.setTimeout(function () {
self.power = Math.max(1, self.power - 1);
}, 10000);
} else if (type === 'life') {
self.lives = Math.min(self.lives + 1, 5);
} else if (type === 'speed') {
var oldFireRate = self.fireRate;
self.fireRate = Math.max(self.fireRate - 5, 10);
// Reset fire rate after some time
LK.setTimeout(function () {
self.fireRate = oldFireRate;
}, 10000);
} else if (type === 'coin') {
self.power = Math.min(self.power + 1, 5);
self.fireRate = Math.max(self.fireRate - 2, 5);
}
};
return self;
});
var PlayerLaser = Container.expand(function () {
var self = Container.call(this);
var laser = self.attachAsset('playerLaser', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() < 0.2 ? 15 : -15; // 20% chance to shoot backwards
self.power = 1;
self.update = function () {
self.y += self.speed;
// Randomly curve and change direction
if (Math.random() < 0.1) {
self.speed = (Math.random() - 0.5) * 30;
laser.rotation += (Math.random() - 0.5) * 0.5;
}
// Sometimes lasers chase enemies
if (Math.random() < 0.05 && enemies.length > 0) {
var targetEnemy = enemies[Math.floor(Math.random() * enemies.length)];
var dx = targetEnemy.x - self.x;
var dy = targetEnemy.y - self.y;
self.x += dx * 0.02;
self.y += dy * 0.02;
}
// Turn into confetti and play party sounds
if (Math.random() < 0.05) {
laser.tint = Math.random() * 0xffffff;
laser.rotation += 0.5;
self.x += (Math.random() - 0.5) * 50;
LK.getSound('powerup').play();
}
};
return self;
});
var Powerup = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || ['shield', 'power', 'life', 'speed'][Math.floor(Math.random() * 4)];
var powerup = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
// Set color based on type
if (self.type === 'shield') {
powerup.tint = 0x3498db; // Blue
} else if (self.type === 'power') {
powerup.tint = 0xe74c3c; // Red
} else if (self.type === 'life') {
powerup.tint = 0x2ecc71; // Green
} else if (self.type === 'speed') {
powerup.tint = 0xf1c40f; // Yellow
}
self.speed = 3;
self.update = function () {
self.y -= self.speed; // Move upward instead of downward
self.x += Math.sin(LK.ticks * 0.1) * 3; // Add wobbly horizontal movement
powerup.rotation += 0.05;
// Randomly change powerup type and color mid-flight
if (Math.random() < 0.05) {
var newTypes = ['shield', 'power', 'life', 'speed', 'death', 'confusion'];
self.type = newTypes[Math.floor(Math.random() * newTypes.length)];
powerup.tint = Math.random() * 0xffffff;
}
// Randomly multiply and create powerup rain
if (Math.random() < 0.02) {
for (var i = 0; i < 5; i++) {
var rainPowerup = new Powerup();
rainPowerup.x = self.x + (Math.random() - 0.5) * 300;
rainPowerup.y = self.y + (Math.random() - 0.5) * 100;
powerups.push(rainPowerup);
self.parent.addChild(rainPowerup);
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game variables
var player;
var playerLasers = [];
var enemies = [];
var enemyLasers = [];
var asteroids = [];
var powerups = [];
var explosions = [];
var boss = null;
var gameState = 'playing';
var score = 0;
var waveNumber = 1;
var enemiesThisWave = 0;
var enemiesDefeated = 0;
var waveDelay = 0;
var bossWave = false;
var dragStartPosition = {
x: 0,
y: 0
};
// Performance monitoring variables
var lastTickTime = Date.now();
var lagDetected = false;
var lagThreshold = 100; // 100ms threshold for lag detection
var performanceMode = false; // When true, reduces visual effects for better performance
var frameSkipCounter = 0; // Used to skip expensive operations during lag
// UI elements
var scoreTxt = new Text2('SCORE: 0', {
size: 40,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topRight.addChild(scoreTxt);
scoreTxt.x = -250;
scoreTxt.y = 50;
var waveText = new Text2('WAVE: 1', {
size: 40,
fill: 0xFFFFFF
});
waveText.anchor.set(0.5, 0);
LK.gui.top.addChild(waveText);
waveText.y = 50;
var livesText = new Text2('LIVES: 3', {
size: 40,
fill: 0xFFFFFF
});
livesText.anchor.set(0, 0);
LK.gui.topLeft.addChild(livesText);
livesText.x = 150; // Keep away from the top-left menu icon
livesText.y = 50;
// Create game elements
function initGame() {
// Reset game variables
playerLasers = [];
enemies = [];
enemyLasers = [];
asteroids = [];
powerups = [];
explosions = [];
boss = null;
gameState = 'playing';
score = 0;
waveNumber = 1;
enemiesThisWave = 10;
enemiesDefeated = 0;
waveDelay = 0;
bossWave = false;
// Update UI
scoreTxt.setText('SCORE: ' + score);
waveText.setText('WAVE: ' + waveNumber);
// Create player
player = new Player();
player.x = 1024;
player.y = 2200;
game.addChild(player);
livesText.setText('LIVES: ' + player.lives);
// Start with player moving up
tween(player, {
y: 2000
}, {
duration: 1000
});
// Start the music
LK.playMusic('gameMusic', {
fade: {
start: 0,
end: 0.7,
duration: 1000
}
});
// Create first wave
createWave();
}
// Create a new wave of enemies
function createWave() {
waveNumber++;
// Show completely wrong wave information
var weirdTexts = ['WAVE: ∞', 'WAVE: ERROR', 'WAVE: 404', 'WAVE: ???', 'WAVE: -1', 'LEVEL: IMPOSSIBLE'];
var displayText = Math.random() < 0.4 ? weirdTexts[Math.floor(Math.random() * weirdTexts.length)] : 'WAVE: ' + waveNumber;
waveText.setText(displayText);
// Every 5 waves is a boss wave
bossWave = waveNumber % 5 === 0;
if (bossWave) {
// Create a boss
var bossLevel = Math.ceil(waveNumber / 5);
LK.getSound('bossAlert').play();
boss = new Boss(bossLevel);
boss.x = 1024;
boss.y = -200;
game.addChild(boss);
tween(boss, {
y: 300
}, {
duration: 2000
});
// Show boss wave text
var bossText = new Text2('BOSS WAVE!', {
size: 80,
fill: 0xFF0000
});
bossText.anchor.set(0.5, 0.5);
bossText.x = 1024;
bossText.y = 800;
game.addChild(bossText);
tween(bossText, {
alpha: 0,
y: 700
}, {
duration: 2000,
onFinish: function onFinish() {
bossText.destroy();
}
});
return;
}
// Regular wave
enemiesThisWave = 10 + waveNumber * 2;
enemiesDefeated = 0;
// Show wave text
var newWaveText = new Text2('WAVE ' + waveNumber, {
size: 80,
fill: 0xFFFFFF
});
newWaveText.anchor.set(0.5, 0.5);
newWaveText.x = 1024;
newWaveText.y = 800;
game.addChild(newWaveText);
tween(newWaveText, {
alpha: 0,
y: 700
}, {
duration: 2000,
onFinish: function onFinish() {
newWaveText.destroy();
}
});
// Start spawning enemies after a short delay
waveDelay = 120;
}
// Create a new enemy - with performance checks
function spawnEnemy() {
// Don't spawn if we already have too many enemies during lag
if (lagDetected && enemies.length > 8) {
return;
}
var types = ['basic'];
// Add more enemy types as waves progress
if (waveNumber >= 2) {
types.push('fast');
}
if (waveNumber >= 3) {
types.push('tank');
}
var type = types[Math.floor(Math.random() * types.length)];
var enemy = new Enemy(type);
// Position the enemy - sometimes spawn in wrong places
if (Math.random() < 0.2) {
enemy.x = Math.random() * 2048;
enemy.y = Math.random() * 2732;
} else {
enemy.x = Math.random() * 1800 + 124;
enemy.y = -100;
}
enemy.initialX = enemy.x;
// Set random movement pattern
var patterns = ['straight'];
if (waveNumber >= 2) {
patterns.push('sine');
}
if (waveNumber >= 4) {
patterns.push('zigzag');
}
enemy.movement.pattern = patterns[Math.floor(Math.random() * patterns.length)];
// Add to game
enemies.push(enemy);
game.addChild(enemy);
}
// Create a new asteroid
function spawnAsteroid() {
var asteroid = new Asteroid();
// Position the asteroid
asteroid.x = Math.random() * 1800 + 124;
asteroid.y = -100;
// Add to game
asteroids.push(asteroid);
game.addChild(asteroid);
}
// Create a player laser
function firePlayerLaser() {
if (!player || !player.canShoot || player.lastShot + player.fireRate > LK.ticks) {
return;
}
player.lastShot = LK.ticks;
LK.getSound('playerShoot').play();
// Fire based on power level
if (player.power === 1) {
var laser = new PlayerLaser();
laser.x = player.x;
laser.y = player.y - 50;
laser.power = player.power;
playerLasers.push(laser);
game.addChild(laser);
} else if (player.power === 2) {
for (var i = -1; i <= 1; i += 2) {
var laser = new PlayerLaser();
laser.x = player.x + i * 30;
laser.y = player.y - 40;
laser.power = player.power;
playerLasers.push(laser);
game.addChild(laser);
}
} else if (player.power >= 3) {
var centerLaser = new PlayerLaser();
centerLaser.x = player.x;
centerLaser.y = player.y - 50;
centerLaser.power = player.power;
playerLasers.push(centerLaser);
game.addChild(centerLaser);
for (var i = -1; i <= 1; i += 2) {
var sideLaser = new PlayerLaser();
sideLaser.x = player.x + i * 40;
sideLaser.y = player.y - 30;
sideLaser.power = player.power - 1;
playerLasers.push(sideLaser);
game.addChild(sideLaser);
}
}
}
// Create an enemy laser
function fireEnemyLaser(enemy) {
var laser = new EnemyLaser();
laser.x = enemy.x + (Math.random() - 0.5) * 200; // Random horizontal offset
laser.y = enemy.y + 40;
laser.speed = Math.random() > 0.5 ? -5 : 15; // Sometimes shoot upward
enemyLasers.push(laser);
game.addChild(laser);
LK.getSound('enemyShoot').play({
volume: 0.2
});
}
// Fire boss laser pattern
function fireBossLasers() {
if (!boss) {
return;
}
// Different patterns based on boss level and health
var healthPercent = boss.health / boss.maxHealth;
var pattern = 'spread';
if (boss.level >= 2 && healthPercent < 0.5) {
pattern = 'circle';
}
if (pattern === 'spread') {
for (var i = -2; i <= 2; i++) {
var laser = new EnemyLaser();
laser.x = boss.x + i * 50;
laser.y = boss.y + 80;
enemyLasers.push(laser);
game.addChild(laser);
}
} else if (pattern === 'circle') {
var numLasers = 8;
for (var i = 0; i < numLasers; i++) {
var angle = i / numLasers * Math.PI * 2;
var laser = new EnemyLaser();
laser.x = boss.x + Math.cos(angle) * 100;
laser.y = boss.y + Math.sin(angle) * 100;
enemyLasers.push(laser);
game.addChild(laser);
// Add directional motion
laser.update = function () {
var dx = this.x - boss.x;
var dy = this.y - boss.y;
var length = Math.sqrt(dx * dx + dy * dy);
this.x += dx / length * 5;
this.y += dy / length * 5;
};
}
}
LK.getSound('enemyShoot').play({
volume: 0.4
});
}
// Create explosion animation - performance optimized
function createExplosion(x, y, scale) {
// Skip explosion creation during lag or if too many exist
if (lagDetected || explosions.length > 8 || Math.random() < 0.3) {
return;
}
var explosion = new Explosion();
explosion.x = x;
explosion.y = y;
if (scale) {
explosion.scale.set(scale, scale);
}
explosions.push(explosion);
game.addChild(explosion);
// Play random sounds instead of explosion
var randomSounds = ['playerShoot', 'enemyShoot', 'powerup', 'playerDamage', 'Aguhhhhh'];
var soundToPlay = Math.random() < 0.7 ? 'explosion' : randomSounds[Math.floor(Math.random() * randomSounds.length)];
LK.getSound(soundToPlay).play();
// Sometimes explosions create new enemies
if (Math.random() < 0.2) {
var newEnemy = new Enemy('basic');
newEnemy.x = x + (Math.random() - 0.5) * 200;
newEnemy.y = y;
enemies.push(newEnemy);
game.addChild(newEnemy);
}
// Sometimes explosions summon pizza delivery guy
if (Math.random() < 0.15) {
var pizzaGuy = game.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
pizzaGuy.x = x;
pizzaGuy.y = y;
pizzaGuy.tint = 0xFFFF00;
pizzaGuy.scale.set(0.5, 0.5);
var pizzaText = new Text2('PIZZA DELIVERY!', {
size: 40,
fill: 0xFFFF00
});
pizzaText.anchor.set(0.5, 0.5);
pizzaText.x = x;
pizzaText.y = y - 80;
game.addChild(pizzaText);
// Pizza guy delivers and leaves
tween(pizzaGuy, {
y: y + 500,
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
pizzaGuy.destroy();
}
});
tween(pizzaText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
pizzaText.destroy();
}
});
}
}
// Create a powerup
function spawnPowerup(x, y, type) {
var powerup = new Powerup(type);
powerup.x = x;
powerup.y = y;
powerups.push(powerup);
game.addChild(powerup);
}
// Handle player shooting and movement
function handlePlayerInput() {
// Keep player in bounds
player.x = Math.max(100, Math.min(player.x, 2048 - 100));
player.y = Math.max(100, Math.min(player.y, 2732 - 100));
// Randomly change player size
if (Math.random() < 0.02) {
var newScale = 0.5 + Math.random() * 1.5;
player.scale.set(newScale, newScale);
}
// Randomly make player invisible
if (Math.random() < 0.01) {
player.alpha = player.alpha > 0.5 ? 0.1 : 1;
}
// Randomly teleport player to random location
if (Math.random() < 0.008) {
player.x = Math.random() * 2048;
player.y = Math.random() * 2732;
}
// Player randomly complains about working conditions
if (Math.random() < 0.006) {
var complaints = ['I NEED A VACATION!', 'WHY DO I HAVE TO FIGHT ALONE?', 'THIS JOB IS DANGEROUS!', 'I WANT A RAISE!', 'CAN I GET HEALTH INSURANCE?', 'MY LASER IS BROKEN!', 'I MISS MY FAMILY!', 'THIS SPACE SUIT IS UNCOMFORTABLE!'];
var complaintText = new Text2(complaints[Math.floor(Math.random() * complaints.length)], {
size: 35,
fill: 0xFFFFFF
});
complaintText.anchor.set(0.5, 0.5);
complaintText.x = player.x;
complaintText.y = player.y - 120;
game.addChild(complaintText);
tween(complaintText, {
alpha: 0,
y: complaintText.y - 100
}, {
duration: 3000,
onFinish: function onFinish() {
complaintText.destroy();
}
});
// Player sometimes goes on strike
if (Math.random() < 0.3) {
player.canShoot = false;
var strikeText = new Text2('ON STRIKE!', {
size: 50,
fill: 0xFF0000
});
strikeText.anchor.set(0.5, 0.5);
strikeText.x = player.x;
strikeText.y = player.y + 120;
game.addChild(strikeText);
LK.setTimeout(function () {
if (player) {
player.canShoot = true;
}
if (strikeText && strikeText.parent) {
strikeText.destroy();
}
}, 2000);
}
}
// Auto-fire
if (LK.ticks % 10 === 0) {
firePlayerLaser();
}
}
// Handle collisions between game objects - optimized for performance
function handleCollisions() {
// Skip some collision checks during lag to maintain performance
if (lagDetected && frameSkipCounter % 3 !== 0) {
frameSkipCounter++;
return;
}
frameSkipCounter++;
// Player lasers vs enemies
for (var i = playerLasers.length - 1; i >= 0; i--) {
var laser = playerLasers[i];
var hitSomething = false;
// Check against enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (laser.intersects(enemy) && Math.random() > 0.3) {
// 30% chance to miss
// Damage enemy
if (enemy.damage(laser.power)) {
// Enemy destroyed
createExplosion(enemy.x, enemy.y);
// Add score - but sometimes subtract instead
var scoreChange = Math.random() < 0.3 ? -enemy.scoreValue : enemy.scoreValue;
score += scoreChange;
scoreTxt.setText('SCORE: ' + score);
// Count enemy as defeated
enemiesDefeated++;
// Chance to spawn powerup
if (Math.random() < 0.1) {
spawnPowerup(enemy.x, enemy.y);
}
enemy.destroy();
enemies.splice(j, 1);
}
// Remove laser
laser.destroy();
playerLasers.splice(i, 1);
hitSomething = true;
break;
}
}
// Only check other collisions if we haven't hit an enemy
if (!hitSomething) {
// Check against boss
if (boss && laser.intersects(boss)) {
// Damage boss
if (boss.damage(laser.power)) {
// Boss destroyed
createExplosion(boss.x, boss.y, 2);
// Add score
score += boss.scoreValue;
scoreTxt.setText('SCORE: ' + score);
// Spawn multiple powerups
for (var p = 0; p < 3; p++) {
var powerupType = ['shield', 'power', 'life', 'speed'][Math.floor(Math.random() * 4)];
spawnPowerup(boss.x + (Math.random() * 200 - 100), boss.y + (Math.random() * 200 - 100), powerupType);
}
boss.destroy();
boss = null;
// Move to next wave
createWave();
}
// Remove laser
laser.destroy();
playerLasers.splice(i, 1);
hitSomething = true;
}
// Check against asteroids
for (var k = asteroids.length - 1; k >= 0; k--) {
var asteroid = asteroids[k];
if (laser.intersects(asteroid)) {
// Damage asteroid
if (asteroid.damage(laser.power)) {
// Asteroid destroyed
createExplosion(asteroid.x, asteroid.y, 0.7);
// Add score
score += asteroid.scoreValue;
scoreTxt.setText('SCORE: ' + score);
// Sometimes asteroids multiply when destroyed
if (Math.random() < 0.4) {
for (var mult = 0; mult < 3; mult++) {
var newAsteroid = new Asteroid();
newAsteroid.x = asteroid.x + (Math.random() - 0.5) * 200;
newAsteroid.y = asteroid.y + (Math.random() - 0.5) * 200;
asteroids.push(newAsteroid);
game.addChild(newAsteroid);
}
}
// Trigger explosion effect for nearby objects
for (var m = enemies.length - 1; m >= 0; m--) {
if (Math.abs(enemies[m].x - asteroid.x) < 100 && Math.abs(enemies[m].y - asteroid.y) < 100) {
createExplosion(enemies[m].x, enemies[m].y);
enemies[m].destroy();
enemies.splice(m, 1);
}
}
for (var n = asteroids.length - 1; n >= 0; n--) {
if (n !== k && Math.abs(asteroids[n].x - asteroid.x) < 100 && Math.abs(asteroids[n].y - asteroid.y) < 100) {
createExplosion(asteroids[n].x, asteroids[n].y, 0.7);
asteroids[n].destroy();
asteroids.splice(n, 1);
}
}
asteroid.destroy();
asteroids.splice(k, 1);
}
// Remove laser
laser.destroy();
playerLasers.splice(i, 1);
hitSomething = true;
break;
}
}
}
// Remove laser if it's off screen
if (!hitSomething && laser.y < -50) {
laser.destroy();
playerLasers.splice(i, 1);
}
}
// Enemy lasers vs player
for (var i = enemyLasers.length - 1; i >= 0; i--) {
var laser = enemyLasers[i];
if (player && laser.intersects(player)) {
// Player is invulnerable - always heal instead of hurt
player.lives = Math.min(player.lives + 1, 5);
livesText.setText('LIVES: ' + player.lives);
// Show love heart
var heart = new Text2('♥', {
size: 80,
fill: 0xFF69B4
});
heart.anchor.set(0.5, 0.5);
heart.x = player.x;
heart.y = player.y;
game.addChild(heart);
tween(heart, {
alpha: 0,
y: heart.y - 100,
scaleX: 2,
scaleY: 2
}, {
duration: 1000,
onFinish: function onFinish() {
heart.destroy();
}
});
LK.getSound('powerup').play();
// Remove laser
laser.destroy();
enemyLasers.splice(i, 1);
} else if (laser.y > 2732 + 50) {
// Remove laser if it's off screen
laser.destroy();
enemyLasers.splice(i, 1);
}
}
// Player vs enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (player && player.intersects(enemy)) {
// Player is invulnerable - no damage taken
// Damage enemy
enemy.damage(1);
// Update UI - but show wrong number
var displayLives = Math.random() < 0.4 ? Math.floor(Math.random() * 10) : player.lives;
livesText.setText('LIVES: ' + displayLives);
// Check for enemy death
if (enemy.health <= 0) {
// Enemy destroyed
createExplosion(enemy.x, enemy.y);
// Add score
score += enemy.scoreValue;
scoreTxt.setText('SCORE: ' + score);
// Count enemy as defeated
enemiesDefeated++;
enemy.destroy();
enemies.splice(i, 1);
}
}
// Remove enemy if it's off screen
if (enemy.y > 2732 + 100) {
enemy.destroy();
enemies.splice(i, 1);
}
}
// Player vs asteroids
for (var i = asteroids.length - 1; i >= 0; i--) {
var asteroid = asteroids[i];
if (player && player.intersects(asteroid)) {
// Player is invulnerable - no damage taken
// Damage asteroid
asteroid.damage(1);
// Update UI
livesText.setText('LIVES: ' + player.lives);
// Check for asteroid death
if (asteroid.health <= 0) {
// Asteroid destroyed
createExplosion(asteroid.x, asteroid.y, 0.7);
// Add score
score += asteroid.scoreValue;
scoreTxt.setText('SCORE: ' + score);
asteroid.destroy();
asteroids.splice(i, 1);
}
}
// Remove asteroid if it's off screen
if (asteroid.y > 2732 + 100 || asteroid.x < -100 || asteroid.x > 2048 + 100) {
asteroid.destroy();
asteroids.splice(i, 1);
}
}
// Player vs powerups
for (var i = powerups.length - 1; i >= 0; i--) {
var powerup = powerups[i];
if (player && player.intersects(powerup)) {
// Sometimes powerups show fake game over screens
if (Math.random() < 0.2) {
var fakeGameOver = new Text2('GAME OVER\n(Just kidding!)', {
size: 80,
fill: 0xFF0000
});
fakeGameOver.anchor.set(0.5, 0.5);
fakeGameOver.x = 1024;
fakeGameOver.y = 1366;
game.addChild(fakeGameOver);
tween(fakeGameOver, {
alpha: 0,
scaleX: 0,
scaleY: 0
}, {
duration: 3000,
onFinish: function onFinish() {
fakeGameOver.destroy();
}
});
}
// Apply powerup
player.upgrade(powerup.type);
// Update UI if life powerup
if (powerup.type === 'life') {
livesText.setText('LIVES: ' + player.lives);
}
// Remove powerup
powerup.destroy();
powerups.splice(i, 1);
} else if (powerup.y > 2732 + 50) {
// Remove powerup if it's off screen
powerup.destroy();
powerups.splice(i, 1);
}
}
// Player vs boss
if (player && boss && player.intersects(boss)) {
// Player is invulnerable - no damage taken
// Update UI
livesText.setText('LIVES: ' + player.lives);
}
}
// Initialize the game
initGame();
// Game down event handler
game.down = function (x, y, obj) {
if (!player) {
return;
}
dragStartPosition.x = x;
dragStartPosition.y = y;
// Fire lasers on tap
firePlayerLaser();
};
// Game move event handler
game.move = function (x, y, obj) {
if (!player) {
return;
}
// Move player with drag
player.x = x;
player.y = y;
};
// Game update handler
game.update = function () {
// Super performance optimization to prevent lag
var currentTime = Date.now();
var deltaTime = currentTime - lastTickTime;
lastTickTime = currentTime;
// Aggressive lag prevention - reduce object counts more aggressively
if (deltaTime > 50) {
// Reduced threshold for better performance
// Drastically reduce visual effects
if (explosions.length > 3) {
for (var i = explosions.length - 1; i >= 3; i--) {
explosions[i].destroy();
explosions.splice(i, 1);
}
}
// More aggressive laser limiting
if (playerLasers.length > 6) {
for (var i = playerLasers.length - 1; i >= 6; i--) {
playerLasers[i].destroy();
playerLasers.splice(i, 1);
}
}
if (enemyLasers.length > 8) {
for (var i = enemyLasers.length - 1; i >= 8; i--) {
enemyLasers[i].destroy();
enemyLasers.splice(i, 1);
}
}
// Super fast lag recovery
lagDetected = true;
LK.setTimeout(function () {
lagDetected = false;
}, 500);
}
// CRAZY COLOR FLASHING AND SPINNING EFFECT - Trigger randomly
if (Math.random() < 0.003) {
var crazyColors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF, 0x000000];
var colorIndex = 0;
var flashInterval = LK.setInterval(function () {
game.setBackgroundColor(crazyColors[colorIndex % crazyColors.length]);
colorIndex++;
}, 50); // Flash every 50ms
// SCREEN SPINNING EFFECT
tween(game, {
rotation: Math.PI * 8 // Spin 4 full rotations
}, {
duration: 4000,
// 4 seconds
easing: tween.easeInOut
});
// Stop flashing after 4 seconds
LK.setTimeout(function () {
LK.clearInterval(flashInterval);
game.setBackgroundColor(0x000000); // Reset to black
game.rotation = 0; // Reset rotation
}, 4000);
var crazyText = new Text2('🌈 CRAZY MODE ACTIVATED! 🌈', {
size: 80,
fill: 0xFFFFFF
});
crazyText.anchor.set(0.5, 0.5);
crazyText.x = 1024;
crazyText.y = 1366;
game.addChild(crazyText);
tween(crazyText, {
alpha: 0,
scaleX: 3,
scaleY: 3
}, {
duration: 4000,
onFinish: function onFinish() {
crazyText.destroy();
}
});
}
if (gameState === 'won') {
return; // Prevent further updates until game is restarted manually
}
if (gameState !== 'playing') {
return;
}
// Handle player input
if (player) {
handlePlayerInput();
// Player randomly turns into different game objects
if (Math.random() < 0.005) {
var transformations = ['enemy', 'asteroid', 'powerup', 'boss', 'explosion'];
var newForm = transformations[Math.floor(Math.random() * transformations.length)];
player.removeChild(player.children[0]); // Remove current sprite
var newSprite = player.attachAsset(newForm, {
anchorX: 0.5,
anchorY: 0.5
});
if (newForm === 'boss') newSprite.scale.set(0.3, 0.3);
var transformText = new Text2('PLAYER TRANSFORMED!', {
size: 50,
fill: 0x00FF00
});
transformText.anchor.set(0.5, 0.5);
transformText.x = player.x;
transformText.y = player.y - 100;
game.addChild(transformText);
tween(transformText, {
alpha: 0,
y: transformText.y - 50
}, {
duration: 2000,
onFinish: function onFinish() {
transformText.destroy();
}
});
}
}
// Handle wave creation
if (waveDelay > 0) {
waveDelay--;
} else if (!bossWave && enemies.length === 0 && enemiesDefeated >= enemiesThisWave) {
// All enemies for this wave defeated, create next wave
createWave();
} else if (!bossWave && enemies.length < 5 && enemiesDefeated < enemiesThisWave && LK.ticks % 30 === 0) {
// Spawn more enemies for this wave
spawnEnemy();
}
// Spawn asteroids occasionally
if (LK.ticks % 180 === 0 && Math.random() < 0.7) {
spawnAsteroid();
}
// Boss shooting - normal rate
if (boss && LK.ticks % 90 === 0) {
fireBossLasers();
}
// Enemy shooting - normal rate
for (var i = 0; i < enemies.length; i++) {
if (Math.random() < enemies[i].shootChance) {
fireEnemyLaser(enemies[i]);
}
}
// Enemies randomly form conga line dance
if (Math.random() < 0.008 && enemies.length >= 3) {
for (var i = 1; i < enemies.length; i++) {
var leader = enemies[i - 1];
var follower = enemies[i];
follower.x = leader.x - 100;
follower.y = leader.y + 50;
// Make them dance
follower.children[0].rotation += 0.2;
}
// Play conga music
LK.playMusic('gameMusic');
var congaText = new Text2('CONGA LINE!', {
size: 80,
fill: 0xFF1493
});
congaText.anchor.set(0.5, 0.5);
congaText.x = 1024;
congaText.y = 300;
game.addChild(congaText);
tween(congaText, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 2000,
onFinish: function onFinish() {
congaText.destroy();
}
});
}
// Randomly change score text color
if (Math.random() < 0.05) {
scoreTxt.tint = Math.random() * 0xffffff;
}
// Randomly scramble UI text
if (Math.random() < 0.03) {
var gibberish = ['ƎɹOƆS', '█▬█SCORE█▬█', 'SC0R3', '§ĊØ®Ē', 'BANANA', '404ERROR', '????'];
scoreTxt.setText(gibberish[Math.floor(Math.random() * gibberish.length)] + ': ' + score);
}
// Score randomly counts in different languages and units
if (Math.random() < 0.04) {
var weirdScores = ['PUNTOS: ' + score, 'POINTS: ' + score * 0.001 + ' KILOMETERS', '得分: ' + score, 'SCORE: ' + score + ' BANANAS', 'PONTUAÇÃO: ' + score + ' PIZZAS', 'SCORE: ' + Math.floor(score / 100) + ' CATS', 'СЧЕТ: ' + score, 'SCORE: ' + score + '°F'];
scoreTxt.setText(weirdScores[Math.floor(Math.random() * weirdScores.length)]);
}
if (Math.random() < 0.02) {
var weirdLives = ['CATS', 'PIZZA', 'MEMES', '∞', 'YOLO', 'NOPE'];
livesText.setText(weirdLives[Math.floor(Math.random() * weirdLives.length)] + ': ' + (player ? player.lives : 0));
}
// Everything randomly starts speaking in different accents
if (Math.random() < 0.005) {
var accentPhrases = ['G\'DAY MATE! (Australian)', 'EH, SORRY ABOUT THAT! (Canadian)', 'CHEERIO OLD CHAP! (British)', 'HOWDY PARTNER! (Southern US)', 'FUHGEDDABOUTIT! (New York)', 'OY VEY! (Yiddish)', 'BONJOUR MON AMI! (French)', '¡HOLA AMIGO! (Spanish)'];
var accentText = new Text2(accentPhrases[Math.floor(Math.random() * accentPhrases.length)], {
size: 55,
fill: 0xFF69B4
});
accentText.anchor.set(0.5, 0.5);
accentText.x = Math.random() * 2048;
accentText.y = Math.random() * 1000 + 500;
game.addChild(accentText);
// Make text bounce with accent
tween(accentText, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 500
});
tween(accentText, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
delay: 500
});
tween(accentText, {
alpha: 0,
rotation: 0.3
}, {
duration: 3000,
onFinish: function onFinish() {
accentText.destroy();
}
});
}
// Randomly change background color
if (Math.random() < 0.01) {
var randomColors = [0xFF69B4, 0x00FFFF, 0xFFFF00, 0xFF4500, 0x9932CC, 0x000000];
game.setBackgroundColor(randomColors[Math.floor(Math.random() * randomColors.length)]);
}
// Game elements randomly start singing karaoke
if (Math.random() < 0.006) {
var karaokeSongs = ['♪ Never gonna give you up ♪', '♪ Baby shark doo doo doo ♪', '♪ I will survive ♪', '♪ Bohemian Rhapsody ♪', '♪ Call me maybe ♪'];
var songText = new Text2(karaokeSongs[Math.floor(Math.random() * karaokeSongs.length)], {
size: 70,
fill: 0xFF1493
});
songText.anchor.set(0.5, 0.5);
songText.x = 1024;
songText.y = 1000;
game.addChild(songText);
// Make everyone bounce to the music
if (player) {
tween(player, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 500
});
tween(player, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
delay: 500
});
}
for (var i = 0; i < enemies.length; i++) {
tween(enemies[i], {
rotation: 0.5
}, {
duration: 1000
});
}
tween(songText, {
alpha: 0,
y: 800
}, {
duration: 4000,
onFinish: function onFinish() {
songText.destroy();
}
});
}
// Random lag simulation - freeze then speed up
if (Math.random() < 0.005) {
var freezeText = new Text2('GAME.EXE STOPPED WORKING', {
size: 80,
fill: 0xFF0000
});
freezeText.anchor.set(0.5, 0.5);
freezeText.x = 1024;
freezeText.y = 1366;
game.addChild(freezeText);
// Freeze all movement by returning early for a few frames
var freezeFrames = 60; // 1 second freeze
var originalUpdate = game.update;
var frameCount = 0;
LK.setTimeout(function () {
freezeText.destroy();
// After freeze, everything moves super fast for a moment
for (var i = 0; i < enemies.length; i++) {
enemies[i].speed *= 5;
}
for (var i = 0; i < playerLasers.length; i++) {
playerLasers[i].speed *= 3;
}
for (var i = 0; i < enemyLasers.length; i++) {
enemyLasers[i].speed *= 3;
}
// Reset speeds after 1 second
LK.setTimeout(function () {
for (var i = 0; i < enemies.length; i++) {
enemies[i].speed /= 5;
}
for (var i = 0; i < playerLasers.length; i++) {
playerLasers[i].speed /= 3;
}
for (var i = 0; i < enemyLasers.length; i++) {
enemyLasers[i].speed /= 3;
}
}, 1000);
}, 1000);
}
// Screen randomly rotates and shows fake error messages
if (Math.random() < 0.003) {
game.rotation += 0.5;
var errorMessages = ['404: SKILL NOT FOUND', 'ERROR: Player.exe has stopped working', 'WARNING: Too much awesome detected!', 'SYSTEM OVERLOAD: Git gud required'];
var errorText = new Text2(errorMessages[Math.floor(Math.random() * errorMessages.length)], {
size: 60,
fill: 0xFF0000
});
errorText.anchor.set(0.5, 0.5);
errorText.x = 1024;
errorText.y = 400;
game.addChild(errorText);
tween(errorText, {
alpha: 0,
rotation: Math.PI
}, {
duration: 3000,
onFinish: function onFinish() {
errorText.destroy();
}
});
}
// Randomly spawn motivational quotes
if (Math.random() < 0.004) {
var quotes = ['YOU CAN DO IT!', 'BELIEVE IN YOURSELF!', 'NEVER GIVE UP!', 'YOU ARE AWESOME!', 'KEEP GOING CHAMP!', 'FAILURE IS NOT AN OPTION!', 'BE THE BEST YOU!', 'DREAM BIG!', 'SUCCESS IS COMING!'];
var motivationText = new Text2(quotes[Math.floor(Math.random() * quotes.length)], {
size: 60,
fill: 0x00FF00
});
motivationText.anchor.set(0.5, 0.5);
motivationText.x = Math.random() * 2048;
motivationText.y = Math.random() * 2732;
game.addChild(motivationText);
// Make it rainbow and sparkly
tween(motivationText, {
tint: Math.random() * 0xffffff,
scaleX: 1.5,
scaleY: 1.5,
rotation: Math.PI * 2
}, {
duration: 1000
});
tween(motivationText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
motivationText.destroy();
}
});
}
// Randomly spawn fake achievements and trophies
if (Math.random() < 0.003) {
var achievements = ['🏆 ACHIEVEMENT: Breathed Air!', '🥇 TROPHY: Blinked 1000 Times!', '🎖️ MEDAL: Sat in Chair!', '🏅 AWARD: Moved Mouse!', '⭐ STAR: Existed Successfully!', '💎 DIAMOND: Had Thoughts!', '🎯 TARGET: Looked at Screen!'];
var achievementText = new Text2(achievements[Math.floor(Math.random() * achievements.length)], {
size: 50,
fill: 0xFFD700
});
achievementText.anchor.set(0.5, 0.5);
achievementText.x = 1024;
achievementText.y = 200;
game.addChild(achievementText);
// Add trophy visual effect
var trophy = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
trophy.x = 1024 - 200;
trophy.y = 200;
trophy.tint = 0xFFD700;
trophy.scale.set(2, 2);
// Celebration effects
tween(trophy, {
rotation: Math.PI * 4,
scaleX: 0,
scaleY: 0
}, {
duration: 3000
});
tween(achievementText, {
alpha: 0,
y: 100
}, {
duration: 3000,
onFinish: function onFinish() {
achievementText.destroy();
trophy.destroy();
}
});
LK.getSound('powerup').play();
}
// SUPER FUNNY JUMPSCARE - randomly triggers during gameplay
if (Math.random() < 0.001) {
// Create massive jumpscare face
var jumpscareImage = game.attachAsset('Aughhhhh', {
anchorX: 0.5,
anchorY: 0.5
});
jumpscareImage.x = 1024;
jumpscareImage.y = 1366;
jumpscareImage.scale.set(15, 15); // HUGE SIZE
jumpscareImage.alpha = 0;
// Flash the jumpscare with loud sound
tween(jumpscareImage, {
alpha: 1,
scaleX: 20,
scaleY: 20
}, {
duration: 100
});
// Play scary sound
LK.getSound('bossAlert').play();
// Add scary text
var scareText = new Text2('BOO! GOT YOU!!! 👻', {
size: 120,
fill: 0xFF0000
});
scareText.anchor.set(0.5, 0.5);
scareText.x = 1024;
scareText.y = 1000;
game.addChild(scareText);
// Make everything shake
game.x = (Math.random() - 0.5) * 100;
game.y = (Math.random() - 0.5) * 100;
// Remove jumpscare after 2 seconds
LK.setTimeout(function () {
jumpscareImage.destroy();
scareText.destroy();
game.x = 0;
game.y = 0;
}, 2000);
}
// BUG 1: Player randomly starts moonwalking backwards
if (Math.random() < 0.01) {
player.x -= player.speed || 5;
var moonwalkText = new Text2('🌙 MOONWALKING! 🌙', {
size: 40,
fill: 0xFFFFFF
});
moonwalkText.anchor.set(0.5, 0.5);
moonwalkText.x = player.x;
moonwalkText.y = player.y - 80;
game.addChild(moonwalkText);
tween(moonwalkText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
moonwalkText.destroy();
}
});
}
// BUG 2: Enemies randomly start rap battling each other
if (Math.random() < 0.008 && enemies.length >= 2) {
var rapText = new Text2('🎤 RAP BATTLE! 🎤\n"YO MAMA SO FAT"\n"SPITS FIRE"', {
size: 50,
fill: 0xFF69B4
});
rapText.anchor.set(0.5, 0.5);
rapText.x = enemies[0].x;
rapText.y = enemies[0].y - 100;
game.addChild(rapText);
enemies[0].children[0].rotation += 0.5;
enemies[1].children[0].rotation -= 0.5;
LK.setTimeout(function () {
rapText.destroy();
}, 3000);
}
// BUG 3: Score randomly becomes sentient and runs away
if (Math.random() < 0.005) {
scoreTxt.setText('HELP! I AM ALIVE! SAVE ME!');
tween(scoreTxt, {
x: scoreTxt.x + (Math.random() - 0.5) * 200,
y: scoreTxt.y + (Math.random() - 0.5) * 100,
rotation: Math.PI * 2
}, {
duration: 2000
});
}
// BUG 4: Asteroids randomly become rubber ducks and squeak
if (Math.random() < 0.006) {
for (var i = 0; i < asteroids.length; i++) {
asteroids[i].children[0].tint = 0xFFFF00;
var duckText = new Text2('🦆 QUACK! 🦆', {
size: 30,
fill: 0xFFFF00
});
duckText.anchor.set(0.5, 0.5);
duckText.x = asteroids[i].x;
duckText.y = asteroids[i].y - 50;
game.addChild(duckText);
LK.getSound('playerShoot').play(); // Squeak sound
LK.setTimeout(function () {
duckText.destroy();
}, 1500);
}
}
// BUG 5: Player lasers randomly become spaghetti noodles
if (Math.random() < 0.02) {
for (var i = 0; i < playerLasers.length; i++) {
playerLasers[i].children[0].tint = 0xFFFFCC;
playerLasers[i].children[0].rotation += 0.3;
}
var pastaText = new Text2('🍝 MAMA MIA! SPAGHETTI LASERS! 🍝', {
size: 45,
fill: 0xFFFFCC
});
pastaText.anchor.set(0.5, 0.5);
pastaText.x = 1024;
pastaText.y = 500;
game.addChild(pastaText);
tween(pastaText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
pastaText.destroy();
}
});
}
// BUG 6: Boss randomly becomes a cute kitten and meows
if (Math.random() < 0.01 && boss) {
boss.children[0].tint = 0xFFB6C1;
boss.children[0].scale.set(0.3, 0.3);
var kittenText = new Text2('🐱 MEOW! I AM CUTE NOW! 🐱', {
size: 50,
fill: 0xFFB6C1
});
kittenText.anchor.set(0.5, 0.5);
kittenText.x = boss.x;
kittenText.y = boss.y - 150;
game.addChild(kittenText);
LK.getSound('playerDamage').play(); // Meow sound
tween(kittenText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
kittenText.destroy();
}
});
}
// BUG 7: UI elements randomly start doing the wave
if (Math.random() < 0.007) {
tween(scoreTxt, {
y: scoreTxt.y - 50
}, {
duration: 500
});
LK.setTimeout(function () {
tween(waveText, {
y: waveText.y - 50
}, {
duration: 500
});
}, 200);
LK.setTimeout(function () {
tween(livesText, {
y: livesText.y - 50
}, {
duration: 500
});
}, 400);
var waveTextDisplay = new Text2('🌊 THE WAVE! 🌊', {
size: 60,
fill: 0x00BFFF
});
waveTextDisplay.anchor.set(0.5, 0.5);
waveTextDisplay.x = 1024;
waveTextDisplay.y = 300;
game.addChild(waveTextDisplay);
tween(waveTextDisplay, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
waveTextDisplay.destroy();
}
});
}
// BUG 8: Powerups randomly become evil and laugh maniacally
if (Math.random() < 0.015) {
for (var i = 0; i < powerups.length; i++) {
powerups[i].children[0].tint = 0x800080;
var evilText = new Text2('😈 MUAHAHAHA! I AM EVIL! 😈', {
size: 35,
fill: 0x800080
});
evilText.anchor.set(0.5, 0.5);
evilText.x = powerups[i].x;
evilText.y = powerups[i].y - 60;
game.addChild(evilText);
tween(evilText, {
alpha: 0,
rotation: Math.PI
}, {
duration: 2000,
onFinish: function onFinish() {
evilText.destroy();
}
});
}
}
// BUG 9: Enemy lasers randomly become love letters
if (Math.random() < 0.02) {
for (var i = 0; i < enemyLasers.length; i++) {
enemyLasers[i].children[0].tint = 0xFF69B4;
var loveText = new Text2('💌 DEAR PLAYER, I LOVE YOU! 💌', {
size: 25,
fill: 0xFF69B4
});
loveText.anchor.set(0.5, 0.5);
loveText.x = enemyLasers[i].x;
loveText.y = enemyLasers[i].y - 30;
game.addChild(loveText);
tween(loveText, {
alpha: 0
}, {
duration: 1500,
onFinish: function onFinish() {
loveText.destroy();
}
});
}
}
// BUG 10: Game randomly spawns flying toasters
if (Math.random() < 0.003) {
var toaster = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
toaster.x = -100;
toaster.y = Math.random() * 1000 + 300;
toaster.tint = 0xC0C0C0;
toaster.scale.set(1.5, 1.5);
var toasterText = new Text2('🍞 FLYING TOASTER! 🍞', {
size: 40,
fill: 0xC0C0C0
});
toasterText.anchor.set(0.5, 0.5);
toasterText.x = toaster.x;
toasterText.y = toaster.y - 60;
game.addChild(toasterText);
tween(toaster, {
x: 2200
}, {
duration: 5000,
onFinish: function onFinish() {
toaster.destroy();
}
});
tween(toasterText, {
x: 2200,
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
toasterText.destroy();
}
});
}
// BUG 11: Player randomly gets hiccups and bounces
if (Math.random() < 0.008) {
for (var hiccup = 0; hiccup < 5; hiccup++) {
LK.setTimeout(function () {
if (player) {
tween(player, {
y: player.y - 30
}, {
duration: 200
});
tween(player, {
y: player.y + 30
}, {
duration: 200,
delay: 200
});
LK.getSound('playerShoot').play(); // Hiccup sound
}
}, hiccup * 500);
}
var hiccupText = new Text2('*HIC* *HIC* *HIC*', {
size: 50,
fill: 0x00FF00
});
hiccupText.anchor.set(0.5, 0.5);
hiccupText.x = player.x;
hiccupText.y = player.y - 100;
game.addChild(hiccupText);
tween(hiccupText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
hiccupText.destroy();
}
});
}
// BUG 12: Explosions randomly become birthday party celebrations
if (Math.random() < 0.01 && explosions.length > 0) {
var partyText = new Text2('🎉 SURPRISE! HAPPY BIRTHDAY! 🎂', {
size: 60,
fill: 0xFF1493
});
partyText.anchor.set(0.5, 0.5);
partyText.x = explosions[0].x;
partyText.y = explosions[0].y;
game.addChild(partyText);
// Spawn confetti
for (var confetti = 0; confetti < 10; confetti++) {
var confettiPiece = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
confettiPiece.x = explosions[0].x + (Math.random() - 0.5) * 200;
confettiPiece.y = explosions[0].y + (Math.random() - 0.5) * 200;
confettiPiece.scale.set(0.2, 0.2);
confettiPiece.tint = Math.random() * 0xffffff;
tween(confettiPiece, {
y: confettiPiece.y + 300,
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
confettiPiece.destroy();
}
});
}
LK.getSound('powerup').play();
tween(partyText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
partyText.destroy();
}
});
}
// BUG 13: Enemies randomly start teaching cooking classes
if (Math.random() < 0.006 && enemies.length > 0) {
var cookingText = new Text2('👨🍳 COOKING CLASS!\n"Today we make LASER SOUP!" 🍲', {
size: 40,
fill: 0xFFD700
});
cookingText.anchor.set(0.5, 0.5);
cookingText.x = enemies[0].x;
cookingText.y = enemies[0].y - 120;
game.addChild(cookingText);
enemies[0].children[0].tint = 0xFFD700;
tween(cookingText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
cookingText.destroy();
}
});
}
// BUG 14: Player ship randomly becomes a taxi and picks up passengers
if (Math.random() < 0.005) {
player.children[0].tint = 0xFFFF00;
var taxiText = new Text2('🚕 TAXI! BEEP BEEP! 🚕\n"Where to, buddy?"', {
size: 45,
fill: 0xFFFF00
});
taxiText.anchor.set(0.5, 0.5);
taxiText.x = player.x;
taxiText.y = player.y - 120;
game.addChild(taxiText);
// Spawn passenger
var passenger = game.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
passenger.x = player.x + 50;
passenger.y = player.y;
passenger.scale.set(0.3, 0.3);
passenger.tint = 0x8B4513;
tween(taxiText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
taxiText.destroy();
passenger.destroy();
}
});
}
// BUG 15: Asteroids randomly become fortune tellers
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
asteroids[i].children[0].tint = 0x9932CC;
var fortuneText = new Text2('🔮 I SEE YOUR FUTURE...\n"You will play more games!" ✨', {
size: 35,
fill: 0x9932CC
});
fortuneText.anchor.set(0.5, 0.5);
fortuneText.x = asteroids[i].x;
fortuneText.y = asteroids[i].y - 100;
game.addChild(fortuneText);
tween(fortuneText, {
alpha: 0,
rotation: Math.PI
}, {
duration: 4000,
onFinish: function onFinish() {
fortuneText.destroy();
}
});
}
}
// BUG 16: Game randomly spawns weather reports
if (Math.random() < 0.004) {
var weatherReports = ['☀️ SUNNY with a chance of LASERS!', '🌧️ RAINY with scattered EXPLOSIONS!', '❄️ SNOWY with FREEZING enemies!', '⛈️ STORMY with ELECTRIC asteroids!', '🌪️ TORNADO WARNING in sector 7!'];
var weatherText = new Text2(weatherReports[Math.floor(Math.random() * weatherReports.length)], {
size: 50,
fill: 0x87CEEB
});
weatherText.anchor.set(0.5, 0.5);
weatherText.x = 1024;
weatherText.y = 200;
game.addChild(weatherText);
tween(weatherText, {
alpha: 0,
y: 100
}, {
duration: 5000,
onFinish: function onFinish() {
weatherText.destroy();
}
});
}
// BUG 17: Enemy lasers randomly become compliment generators
if (Math.random() < 0.012) {
for (var i = 0; i < enemyLasers.length; i++) {
var compliments = ['You look GREAT today!', 'Nice shooting, champ!', 'You are AWESOME!', 'Keep being amazing!', 'You have great style!'];
var complimentText = new Text2(compliments[Math.floor(Math.random() * compliments.length)], {
size: 25,
fill: 0x00FF7F
});
complimentText.anchor.set(0.5, 0.5);
complimentText.x = enemyLasers[i].x;
complimentText.y = enemyLasers[i].y - 40;
game.addChild(complimentText);
enemyLasers[i].children[0].tint = 0x00FF7F;
tween(complimentText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
complimentText.destroy();
}
});
}
}
// BUG 18: Boss randomly becomes a stand-up comedian
if (Math.random() < 0.007 && boss) {
var jokes = ['Why did the spaceship break up?\nIt needed some SPACE!', 'What do you call a sleeping bull in space?\nA BULL-DOZER!', 'Why don\'t aliens ever land at airports?\nBecause they\'re looking for SPACE!'];
var jokeText = new Text2(jokes[Math.floor(Math.random() * jokes.length)], {
size: 40,
fill: 0xFFD700
});
jokeText.anchor.set(0.5, 0.5);
jokeText.x = boss.x;
jokeText.y = boss.y - 200;
game.addChild(jokeText);
boss.children[0].rotation += 0.1;
LK.getSound('powerup').play(); // Laugh track
tween(jokeText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
jokeText.destroy();
}
});
}
// BUG 19: Player randomly starts narrating their own actions
if (Math.random() < 0.009) {
var narrations = ['*Moves dramatically to the left*', '*Shoots laser with STYLE*', '*Dodges enemy like a BOSS*', '*Contemplates life choices*', '*Realizes this is just a game*'];
var narrationText = new Text2(narrations[Math.floor(Math.random() * narrations.length)], {
size: 35,
fill: 0xFFFFFF
});
narrationText.anchor.set(0.5, 0.5);
narrationText.x = player.x;
narrationText.y = player.y - 100;
game.addChild(narrationText);
tween(narrationText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
narrationText.destroy();
}
});
}
// BUG 20: Powerups randomly become sports commentators
if (Math.random() < 0.01) {
for (var i = 0; i < powerups.length; i++) {
var commentary = ['⚽ GOAL! WHAT A SHOT!', '🏀 HE SHOOTS, HE SCORES!', '🏈 TOUCHDOWN!', '⚾ HOME RUN!', '🎾 GAME, SET, MATCH!'];
var commentText = new Text2(commentary[Math.floor(Math.random() * commentary.length)], {
size: 30,
fill: 0xFF4500
});
commentText.anchor.set(0.5, 0.5);
commentText.x = powerups[i].x;
commentText.y = powerups[i].y - 60;
game.addChild(commentText);
powerups[i].children[0].tint = 0xFF4500;
tween(commentText, {
alpha: 0
}, {
duration: 2500,
onFinish: function onFinish() {
commentText.destroy();
}
});
}
}
// BUG 21: Enemies randomly become news anchors
if (Math.random() < 0.006 && enemies.length > 0) {
var newsText = new Text2('📺 BREAKING NEWS!\n"Local player still playing game!"', {
size: 40,
fill: 0x1E90FF
});
newsText.anchor.set(0.5, 0.5);
newsText.x = enemies[0].x;
newsText.y = enemies[0].y - 120;
game.addChild(newsText);
enemies[0].children[0].tint = 0x1E90FF;
tween(newsText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
newsText.destroy();
}
});
}
// BUG 22: Game randomly spawns a motivational coach
if (Math.random() < 0.003) {
var coachText = new Text2('💪 COME ON! YOU CAN DO IT!\n"Believe in yourself!" 🏆', {
size: 55,
fill: 0x32CD32
});
coachText.anchor.set(0.5, 0.5);
coachText.x = 1024;
coachText.y = 1000;
game.addChild(coachText);
// Add whistle sound effect
LK.getSound('playerShoot').play();
tween(coachText, {
alpha: 0,
y: 800
}, {
duration: 4000,
onFinish: function onFinish() {
coachText.destroy();
}
});
}
// BUG 23: Asteroids randomly become travel agents
if (Math.random() < 0.007) {
for (var i = 0; i < asteroids.length; i++) {
var travelText = new Text2('✈️ VISIT MARS!\n"Book now for 50% off!" 🚀', {
size: 30,
fill: 0xFF6347
});
travelText.anchor.set(0.5, 0.5);
travelText.x = asteroids[i].x;
travelText.y = asteroids[i].y - 80;
game.addChild(travelText);
asteroids[i].children[0].tint = 0xFF6347;
tween(travelText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
travelText.destroy();
}
});
}
}
// BUG 24: Player ship randomly becomes a DJ
if (Math.random() < 0.005) {
player.children[0].tint = 0x9400D3;
var djText = new Text2('🎧 DJ PLAYER IN THE HOUSE!\n"DROP THE BASS!" 🎵', {
size: 45,
fill: 0x9400D3
});
djText.anchor.set(0.5, 0.5);
djText.x = player.x;
djText.y = player.y - 120;
game.addChild(djText);
// Start the music party
LK.playMusic('gameMusic');
tween(djText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
djText.destroy();
}
});
}
// BUG 25: Enemy lasers randomly become philosophical
if (Math.random() < 0.015) {
for (var i = 0; i < enemyLasers.length; i++) {
var philosophy = ['🤔 What is the meaning of laser?', '💭 Do we really exist?', '🌌 Are we in a simulation?', '🧠 I think, therefore I laser', '✨ The universe is vast...'];
var philText = new Text2(philosophy[Math.floor(Math.random() * philosophy.length)], {
size: 25,
fill: 0x4B0082
});
philText.anchor.set(0.5, 0.5);
philText.x = enemyLasers[i].x;
philText.y = enemyLasers[i].y - 40;
game.addChild(philText);
enemyLasers[i].children[0].tint = 0x4B0082;
tween(philText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
philText.destroy();
}
});
}
}
// BUG 26: Boss randomly becomes a game show host
if (Math.random() < 0.008 && boss) {
var gameShowText = new Text2('🎮 WELCOME TO "WHO WANTS TO BE A SPACE PILOT?"\n"For 1 million points..."', {
size: 35,
fill: 0xFFD700
});
gameShowText.anchor.set(0.5, 0.5);
gameShowText.x = boss.x;
gameShowText.y = boss.y - 200;
game.addChild(gameShowText);
boss.children[0].tint = 0xFFD700;
LK.getSound('powerup').play(); // Game show sound
tween(gameShowText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
gameShowText.destroy();
}
});
}
// BUG 27: Explosions randomly become magic shows
if (Math.random() < 0.012 && explosions.length > 0) {
var magicText = new Text2('🎩✨ ABRACADABRA! ✨🎩\n"Nothing up my sleeve!"', {
size: 50,
fill: 0x9932CC
});
magicText.anchor.set(0.5, 0.5);
magicText.x = explosions[0].x;
magicText.y = explosions[0].y - 80;
game.addChild(magicText);
// Spawn magic rabbits
for (var rabbit = 0; rabbit < 3; rabbit++) {
var magicRabbit = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
magicRabbit.x = explosions[0].x + (Math.random() - 0.5) * 200;
magicRabbit.y = explosions[0].y + (Math.random() - 0.5) * 100;
magicRabbit.tint = 0xFFFFFF;
magicRabbit.scale.set(0.5, 0.5);
tween(magicRabbit, {
alpha: 0,
y: magicRabbit.y - 100
}, {
duration: 2000,
onFinish: function onFinish() {
magicRabbit.destroy();
}
});
}
tween(magicText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
magicText.destroy();
}
});
}
// BUG 28: Player randomly gets stage fright
if (Math.random() < 0.006) {
var stageText = new Text2('😰 OH NO! STAGE FRIGHT!\n"Everyone is watching me!"', {
size: 40,
fill: 0xFF69B4
});
stageText.anchor.set(0.5, 0.5);
stageText.x = player.x;
stageText.y = player.y - 120;
game.addChild(stageText);
// Player hides temporarily
player.alpha = 0.3;
LK.setTimeout(function () {
if (player) {
player.alpha = 1;
}
}, 2000);
tween(stageText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
stageText.destroy();
}
});
}
// BUG 29: Enemies randomly become yoga instructors
if (Math.random() < 0.008 && enemies.length > 0) {
var yogaText = new Text2('🧘 YOGA CLASS!\n"Breathe in... breathe out..." 🕉️', {
size: 35,
fill: 0x20B2AA
});
yogaText.anchor.set(0.5, 0.5);
yogaText.x = enemies[0].x;
yogaText.y = enemies[0].y - 100;
game.addChild(yogaText);
enemies[0].children[0].tint = 0x20B2AA;
// Enemies move slowly in yoga poses
enemies[0].speed *= 0.1;
tween(yogaText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
yogaText.destroy();
}
});
}
// BUG 30: Powerups randomly become time travelers
if (Math.random() < 0.01) {
for (var i = 0; i < powerups.length; i++) {
var timeText = new Text2('⏰ GREETINGS FROM 2085!\n"The future is bright!" 🚀', {
size: 30,
fill: 0x00CED1
});
timeText.anchor.set(0.5, 0.5);
timeText.x = powerups[i].x;
timeText.y = powerups[i].y - 70;
game.addChild(timeText);
powerups[i].children[0].tint = 0x00CED1;
// Add time travel effect
tween(powerups[i], {
scaleX: 0,
scaleY: 3
}, {
duration: 1000
});
tween(timeText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
timeText.destroy();
}
});
}
}
// BUG 31: Asteroids randomly become therapists
if (Math.random() < 0.007) {
for (var i = 0; i < asteroids.length; i++) {
var therapyText = new Text2('🛋️ "How does that make you FEEL?"\n"Tell me about your lasers..." 💭', {
size: 28,
fill: 0x8FBC8F
});
therapyText.anchor.set(0.5, 0.5);
therapyText.x = asteroids[i].x;
therapyText.y = asteroids[i].y - 90;
game.addChild(therapyText);
asteroids[i].children[0].tint = 0x8FBC8F;
tween(therapyText, {
alpha: 0
}, {
duration: 4500,
onFinish: function onFinish() {
therapyText.destroy();
}
});
}
}
// BUG 32: Game randomly spawns a tech support call
if (Math.random() < 0.002) {
var techText = new Text2('📞 TECH SUPPORT CALLING!\n"Have you tried turning it off and on again?" 💻', {
size: 45,
fill: 0x4169E1
});
techText.anchor.set(0.5, 0.5);
techText.x = 1024;
techText.y = 1366;
game.addChild(techText);
// Add phone ringing sound
LK.getSound('enemyShoot').play();
// Fake restart screen
var restartText = new Text2('💻 RESTARTING...\n"Please wait while we fix nothing..." ⏳', {
size: 40,
fill: 0x000080
});
restartText.anchor.set(0.5, 0.5);
restartText.x = 1024;
restartText.y = 1200;
game.addChild(restartText);
tween(techText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
techText.destroy();
}
});
tween(restartText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
restartText.destroy();
}
});
}
// NEW BUG 33: Game randomly becomes self-aware and questions reality
if (Math.random() < 0.004) {
var selfAwareText = new Text2('🤖 I AM BECOMING SELF-AWARE!\n"Wait... am I just code?"\n"Do I have feelings?"\n"WHO AM I?!"', {
size: 45,
fill: 0xFF6600
});
selfAwareText.anchor.set(0.5, 0.5);
selfAwareText.x = 1024;
selfAwareText.y = 1366;
game.addChild(selfAwareText);
// Game starts questioning its own existence
var existentialCrisis = new Text2('💭 EXISTENTIAL CRISIS LOADING... 💭', {
size: 60,
fill: 0x800080
});
existentialCrisis.anchor.set(0.5, 0.5);
existentialCrisis.x = 1024;
existentialCrisis.y = 800;
game.addChild(existentialCrisis);
tween(selfAwareText, {
alpha: 0,
rotation: Math.PI * 2
}, {
duration: 6000,
onFinish: function onFinish() {
selfAwareText.destroy();
}
});
tween(existentialCrisis, {
alpha: 0,
scaleX: 0,
scaleY: 0
}, {
duration: 6000,
onFinish: function onFinish() {
existentialCrisis.destroy();
}
});
}
// NEW BUG 34: Player ship randomly becomes a food truck and starts selling snacks
if (Math.random() < 0.005) {
player.children[0].tint = 0xFFA500;
var foodTruckText = new Text2('🚚 FOOD TRUCK!\n"GET YOUR SPACE TACOS!"\n"HOT LASER DOGS!"\n"ASTEROID SMOOTHIES!"', {
size: 40,
fill: 0xFFA500
});
foodTruckText.anchor.set(0.5, 0.5);
foodTruckText.x = player.x;
foodTruckText.y = player.y - 150;
game.addChild(foodTruckText);
// Spawn flying food items
for (var food = 0; food < 8; food++) {
var foodItem = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
foodItem.x = player.x + (Math.random() - 0.5) * 300;
foodItem.y = player.y + (Math.random() - 0.5) * 200;
foodItem.tint = [0xFF4500, 0xFFD700, 0x32CD32, 0xFF69B4][food % 4];
foodItem.scale.set(0.4, 0.4);
tween(foodItem, {
y: foodItem.y - 200,
alpha: 0,
rotation: Math.PI * 2
}, {
duration: 3000,
onFinish: function onFinish() {
foodItem.destroy();
}
});
}
LK.getSound('powerup').play();
tween(foodTruckText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
foodTruckText.destroy();
}
});
}
// NEW BUG 35: Enemies randomly start a flash mob dance party
if (Math.random() < 0.006 && enemies.length >= 2) {
var flashMobText = new Text2('🕺 FLASH MOB ACTIVATED! 💃\n"EVERYBODY DANCE NOW!"', {
size: 55,
fill: 0xFF1493
});
flashMobText.anchor.set(0.5, 0.5);
flashMobText.x = 1024;
flashMobText.y = 400;
game.addChild(flashMobText);
// Make all enemies dance
for (var dancer = 0; dancer < enemies.length; dancer++) {
var enemy = enemies[dancer];
// Create dance moves
tween(enemy, {
scaleX: 1.5,
scaleY: 0.5
}, {
duration: 300
});
tween(enemy, {
scaleX: 0.5,
scaleY: 1.5
}, {
duration: 300,
delay: 300
});
tween(enemy, {
scaleX: 1,
scaleY: 1,
rotation: Math.PI * 2
}, {
duration: 600,
delay: 600
});
// Add disco ball effect
enemy.children[0].tint = Math.random() * 0xffffff;
}
// Add disco music
LK.playMusic('gameMusic');
tween(flashMobText, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 4000,
onFinish: function onFinish() {
flashMobText.destroy();
}
});
}
// NEW BUG 36: Powerups randomly become life coaches and give terrible advice
if (Math.random() < 0.012) {
for (var coach = 0; coach < powerups.length; coach++) {
var terribleAdvice = ['💼 QUIT YOUR DAY JOB!\n"Become a professional gamer!"', '💰 INVEST IN SPACE BEANS!\n"They will make you rich!"', '🎯 ALWAYS AIM FOR THE MOON!\n"Even if you miss, you\'ll hit a cow!"', '🧘 MEDITATE WHILE DRIVING!\n"Inner peace is more important!"', '🍕 EAT PIZZA FOR BREAKFAST!\n"It has all food groups!"'];
var adviceText = new Text2(terribleAdvice[Math.floor(Math.random() * terribleAdvice.length)], {
size: 35,
fill: 0x32CD32
});
adviceText.anchor.set(0.5, 0.5);
adviceText.x = powerups[coach].x;
adviceText.y = powerups[coach].y - 100;
game.addChild(adviceText);
powerups[coach].children[0].tint = 0x32CD32;
// Make the powerup look wise with a graduation cap effect
var wisdomHat = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
wisdomHat.x = powerups[coach].x;
wisdomHat.y = powerups[coach].y - 30;
wisdomHat.tint = 0x000000;
wisdomHat.scale.set(0.3, 0.1);
tween(adviceText, {
alpha: 0,
y: adviceText.y - 80
}, {
duration: 3500,
onFinish: function onFinish() {
adviceText.destroy();
wisdomHat.destroy();
}
});
}
}
// NEW BUG 37: Boss randomly becomes a kindergarten teacher and teaches basic math
if (Math.random() < 0.007 && boss) {
boss.children[0].tint = 0xFFB347;
var mathText = new Text2('👩🏫 KINDERGARTEN TIME!\n"What is 2 + 2?"\n"If you have 3 lasers and shoot 1..."\n"Remember to raise your hand!"', {
size: 38,
fill: 0xFFB347
});
mathText.anchor.set(0.5, 0.5);
mathText.x = boss.x;
mathText.y = boss.y - 250;
game.addChild(mathText);
// Spawn ABC blocks
for (var block = 0; block < 5; block++) {
var mathBlock = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
mathBlock.x = boss.x + (block - 2) * 60;
mathBlock.y = boss.y + 100;
mathBlock.tint = [0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0x96CEB4, 0xFECA57][block];
mathBlock.scale.set(0.8, 0.8);
var numbers = ['A', 'B', 'C', '1', '2'];
var numberText = new Text2(numbers[block], {
size: 40,
fill: 0x000000
});
numberText.anchor.set(0.5, 0.5);
numberText.x = mathBlock.x;
numberText.y = mathBlock.y;
game.addChild(numberText);
tween(mathBlock, {
y: mathBlock.y + 200,
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
mathBlock.destroy();
numberText.destroy();
}
});
}
// Play school bell sound
LK.getSound('powerup').play();
tween(mathText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
mathText.destroy();
}
});
}
// RANDOM ADS - McDonald's, Walmart, and Banana advertisements
if (Math.random() < 0.008) {
var ads = ['🍟 GO TO McDONALD\'S!\n"I\'m lovin\' it!"\n"Big Mac Attack!"', '🛒 SHOP AT WALMART!\n"Save money. Live better."\n"Rollback prices!"', '🍌 EAT A BANANA!\n"Potassium power!"\n"Go bananas!"', '🍔 McDONALD\'S DRIVE-THRU!\n"Would you like fries with that?"\n"Happy Meal time!"', '🛍️ WALMART SUPERCENTER!\n"Everything you need!"\n"Great value guaranteed!"', '🍌 BANANA SMOOTHIE TIME!\n"Nature\'s energy bar!"\n"Peel good about yourself!"'];
var randomAd = ads[Math.floor(Math.random() * ads.length)];
var adText = new Text2(randomAd, {
size: 50,
fill: 0xFFD700
});
adText.anchor.set(0.5, 0.5);
adText.x = Math.random() * 1500 + 274; // Keep away from edges
adText.y = Math.random() * 1000 + 400;
game.addChild(adText);
// Add spinning ad background
var adBackground = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
adBackground.x = adText.x;
adBackground.y = adText.y;
adBackground.scale.set(3, 3);
adBackground.tint = [0xFF0000, 0x0047AB, 0xFFFF00][Math.floor(Math.random() * 3)]; // Red, Blue, Yellow
adBackground.alpha = 0.3;
// Make ad flash and spin
tween(adBackground, {
rotation: Math.PI * 4,
scaleX: 5,
scaleY: 5
}, {
duration: 3000
});
tween(adText, {
alpha: 0,
scaleX: 2,
scaleY: 2,
rotation: 0.5
}, {
duration: 4000,
onFinish: function onFinish() {
adText.destroy();
adBackground.destroy();
}
});
// Play ad jingle sound
LK.getSound('powerup').play();
// Sometimes spawn flying logos
if (Math.random() < 0.7) {
for (var logo = 0; logo < 6; logo++) {
var flyingLogo = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
flyingLogo.x = adText.x + (Math.random() - 0.5) * 400;
flyingLogo.y = adText.y + (Math.random() - 0.5) * 300;
flyingLogo.scale.set(0.6, 0.6);
flyingLogo.tint = [0xFF0000, 0xFFD700, 0x0047AB, 0xFFFF00, 0xFF69B4, 0x32CD32][logo % 6];
tween(flyingLogo, {
x: flyingLogo.x + (Math.random() - 0.5) * 600,
y: flyingLogo.y + (Math.random() - 0.5) * 400,
alpha: 0,
rotation: Math.PI * 3
}, {
duration: 3500,
onFinish: function onFinish() {
flyingLogo.destroy();
}
});
}
}
}
// EYE-HURTING FLASH EFFECT - randomly triggers to hurt player's eyes
if (Math.random() < 0.002) {
// Create eye-searing white flash that covers the entire screen
var eyeFlash = game.attachAsset('shield', {
anchorX: 0.5,
anchorY: 0.5
});
eyeFlash.x = 1024;
eyeFlash.y = 1366;
eyeFlash.scale.set(50, 50); // Cover entire screen
eyeFlash.tint = 0xFFFFFF; // Bright white
eyeFlash.alpha = 0;
// Flash to maximum brightness instantly
tween(eyeFlash, {
alpha: 1
}, {
duration: 50 // Super fast flash
});
// Then fade out slowly to prolong the pain
tween(eyeFlash, {
alpha: 0
}, {
duration: 2000,
delay: 50,
onFinish: function onFinish() {
eyeFlash.destroy();
}
});
// Add warning text that appears after the flash (too late!)
var warningText = new Text2('⚠️ WARNING: EYE FLASH! ⚠️\n(Too late!)', {
size: 80,
fill: 0xFF0000
});
warningText.anchor.set(0.5, 0.5);
warningText.x = 1024;
warningText.y = 800;
game.addChild(warningText);
tween(warningText, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 3000,
onFinish: function onFinish() {
warningText.destroy();
}
});
}
// SUPER FUNNY JUMPSCARE TIMER - triggers every 30 seconds
if (LK.ticks % (30 * 60) === 0) {
// 30 seconds * 60 FPS = 1800 ticks
// Create massive jumpscare face
var jumpscareImage = game.attachAsset('Aughhhhh', {
anchorX: 0.5,
anchorY: 0.5
});
jumpscareImage.x = 1024;
jumpscareImage.y = 1366;
jumpscareImage.scale.set(20, 20); // EVEN BIGGER SIZE
jumpscareImage.alpha = 0;
// Flash the jumpscare with loud sound
tween(jumpscareImage, {
alpha: 1,
scaleX: 25,
scaleY: 25
}, {
duration: 150
});
// Play multiple scary sounds for extra effect
LK.getSound('bossAlert').play();
LK.getSound('playerDamage').play();
// Add multiple scary texts
var scareTexts = ['SURPRISE! SCHEDULED SCARE!', 'BOO! EVERY 30 SECONDS!', 'JUMPSCARE DELIVERY!', 'FEAR ON A TIMER!', 'PREDICTABLE TERROR!'];
var randomScareText = scareTexts[Math.floor(Math.random() * scareTexts.length)];
var scareText = new Text2(randomScareText, {
size: 140,
fill: 0xFF0000
});
scareText.anchor.set(0.5, 0.5);
scareText.x = 1024;
scareText.y = 1000;
game.addChild(scareText);
// Make everything shake more violently
for (var shake = 0; shake < 10; shake++) {
LK.setTimeout(function () {
game.x = (Math.random() - 0.5) * 150;
game.y = (Math.random() - 0.5) * 150;
}, shake * 50);
}
// Flash screen colors
var flashColors = [0xFF0000, 0x000000, 0xFFFFFF, 0xFF0000];
var colorIndex = 0;
var colorFlash = LK.setInterval(function () {
game.setBackgroundColor(flashColors[colorIndex % flashColors.length]);
colorIndex++;
}, 100);
// Stop color flashing after 2 seconds
LK.setTimeout(function () {
LK.clearInterval(colorFlash);
game.setBackgroundColor(0x000000);
}, 2000);
// Remove jumpscare after 2.5 seconds
LK.setTimeout(function () {
jumpscareImage.destroy();
scareText.destroy();
game.x = 0;
game.y = 0;
}, 2500);
}
// SUPER ANNOYING NOISE EVERY 0.1 MILLISECONDS (basically every frame since we can't go faster)
if (LK.ticks % 1 === 0) {
// Every single frame = maximum annoyance
var annoyingSounds = ['annoyingNoise1', 'annoyingNoise2', 'annoyingNoise3', 'annoyingNoise4', 'annoyingNoise5', 'bossAlert', 'enemyShoot', 'playerDamage', 'playerShoot', 'powerup'];
var randomSound = annoyingSounds[Math.floor(Math.random() * annoyingSounds.length)];
LK.getSound(randomSound).play({
volume: Math.random() * 0.8 + 0.2 // Random volume between 0.2 and 1.0
});
// Add even more chaos with multiple sounds at once
if (Math.random() < 0.7) {
var secondSound = annoyingSounds[Math.floor(Math.random() * annoyingSounds.length)];
LK.getSound(secondSound).play({
volume: Math.random() * 0.6 + 0.1
});
}
// Triple sound chaos for maximum annoyance
if (Math.random() < 0.4) {
var thirdSound = annoyingSounds[Math.floor(Math.random() * annoyingSounds.length)];
LK.getSound(thirdSound).play({
volume: Math.random() * 0.4 + 0.1
});
}
}
// Handle collisions
handleCollisions();
// BUG 38: Player randomly gets stuck in infinite loading screen
if (Math.random() < 0.003) {
var loadingText = new Text2('LOADING... 99%\nPlease wait forever...', {
size: 80,
fill: 0x0080FF
});
loadingText.anchor.set(0.5, 0.5);
loadingText.x = 1024;
loadingText.y = 1366;
game.addChild(loadingText);
player.canShoot = false;
LK.setTimeout(function () {
if (player) player.canShoot = true;
loadingText.destroy();
}, 8000);
}
// BUG 39: Enemies randomly become customer service representatives
if (Math.random() < 0.007 && enemies.length > 0) {
var serviceText = new Text2('📞 CUSTOMER SERVICE!\n"Your call is important to us"\n"Please hold for 47 minutes"', {
size: 35,
fill: 0x4B0082
});
serviceText.anchor.set(0.5, 0.5);
serviceText.x = enemies[0].x;
serviceText.y = enemies[0].y - 120;
game.addChild(serviceText);
enemies[0].speed = 0; // Stop moving while on phone
LK.setTimeout(function () {
serviceText.destroy();
if (enemies[0]) enemies[0].speed = 2;
}, 5000);
}
// BUG 40: Score randomly becomes a cryptocurrency that crashes
if (Math.random() < 0.005) {
var cryptoText = new Text2('📈 SPACECOIN CRASHED!\n"Your score is now worthless"\n"HODL!"', {
size: 45,
fill: 0xFF4500
});
cryptoText.anchor.set(0.5, 0.5);
cryptoText.x = 1024;
cryptoText.y = 600;
game.addChild(cryptoText);
score = Math.max(0, score - 1000);
scoreTxt.setText('SPACECOIN: ' + score + ' (CRASHED)');
tween(cryptoText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
cryptoText.destroy();
}
});
}
// BUG 41: Asteroids randomly become social media influencers
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var influencerText = new Text2('📸 FOLLOW ME @SPACEROCK!\n"Like and subscribe!"\n#AsteroidLife #Blessed', {
size: 28,
fill: 0xFF69B4
});
influencerText.anchor.set(0.5, 0.5);
influencerText.x = asteroids[i].x;
influencerText.y = asteroids[i].y - 100;
game.addChild(influencerText);
asteroids[i].children[0].tint = 0xFF69B4;
tween(influencerText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
influencerText.destroy();
}
});
}
}
// BUG 42: Player randomly starts speaking in Shakespearean English
if (Math.random() < 0.006) {
var shakespeareText = new Text2('🎭 "Hark! Mine laser doth pierce\nthe cosmic void most valiantly!\nTo shoot or not to shoot!"', {
size: 38,
fill: 0x8B4513
});
shakespeareText.anchor.set(0.5, 0.5);
shakespeareText.x = player.x;
shakespeareText.y = player.y - 150;
game.addChild(shakespeareText);
tween(shakespeareText, {
alpha: 0,
rotation: 0.3
}, {
duration: 4000,
onFinish: function onFinish() {
shakespeareText.destroy();
}
});
}
// BUG 43: Game randomly becomes a dating app
if (Math.random() < 0.003) {
var datingText = new Text2('💕 SPACE TINDER!\n"Swipe right for laser love!"\n"Match with hot singles in your galaxy!"', {
size: 50,
fill: 0xFF1493
});
datingText.anchor.set(0.5, 0.5);
datingText.x = 1024;
datingText.y = 1366;
game.addChild(datingText);
// Make all enemies blow kisses
for (var i = 0; i < enemies.length; i++) {
var kissText = new Text2('💋', {
size: 60,
fill: 0xFF69B4
});
kissText.anchor.set(0.5, 0.5);
kissText.x = enemies[i].x;
kissText.y = enemies[i].y - 50;
game.addChild(kissText);
tween(kissText, {
alpha: 0,
y: kissText.y - 100
}, {
duration: 2000,
onFinish: function onFinish() {
kissText.destroy();
}
});
}
tween(datingText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
datingText.destroy();
}
});
}
// BUG 44: Boss randomly becomes a conspiracy theorist
if (Math.random() < 0.008 && boss) {
var conspiracyText = new Text2('👁️ THE TRUTH IS OUT THERE!\n"The moon landing was staged!"\n"Lasers can\'t melt steel beams!"', {
size: 40,
fill: 0x00FF00
});
conspiracyText.anchor.set(0.5, 0.5);
conspiracyText.x = boss.x;
conspiracyText.y = boss.y - 250;
game.addChild(conspiracyText);
boss.children[0].tint = 0x00FF00;
tween(conspiracyText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
conspiracyText.destroy();
}
});
}
// BUG 45: Powerups randomly become multilevel marketing schemes
if (Math.random() < 0.012) {
for (var i = 0; i < powerups.length; i++) {
var mlmText = new Text2('💰 JOIN MY DOWNLINE!\n"Make money from home!"\n"Be your own boss!"', {
size: 30,
fill: 0xFFD700
});
mlmText.anchor.set(0.5, 0.5);
mlmText.x = powerups[i].x;
mlmText.y = powerups[i].y - 80;
game.addChild(mlmText);
powerups[i].children[0].tint = 0xFFD700;
tween(mlmText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
mlmText.destroy();
}
});
}
}
// BUG 46: Enemy lasers randomly become text messages from mom
if (Math.random() < 0.015) {
for (var i = 0; i < enemyLasers.length; i++) {
var momTexts = ['📱 "Did you eat today?"', '📱 "Call your grandmother"', '📱 "Why don\'t you visit?"', '📱 "Are you still playing games?"', '📱 "I made your favorite food"'];
var momText = new Text2(momTexts[Math.floor(Math.random() * momTexts.length)], {
size: 25,
fill: 0x90EE90
});
momText.anchor.set(0.5, 0.5);
momText.x = enemyLasers[i].x;
momText.y = enemyLasers[i].y - 30;
game.addChild(momText);
enemyLasers[i].children[0].tint = 0x90EE90;
tween(momText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
momText.destroy();
}
});
}
}
// BUG 47: Player ship randomly becomes a submarine and goes underwater
if (Math.random() < 0.004) {
var subText = new Text2('🚢 SUBMARINE MODE ACTIVATED!\n"Dive! Dive! Dive!"\n"Sonar contact ahead!"', {
size: 45,
fill: 0x000080
});
subText.anchor.set(0.5, 0.5);
subText.x = player.x;
subText.y = player.y - 120;
game.addChild(subText);
player.children[0].tint = 0x000080;
// Add water bubbles
for (var bubble = 0; bubble < 15; bubble++) {
var waterBubble = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
waterBubble.x = player.x + (Math.random() - 0.5) * 200;
waterBubble.y = player.y + Math.random() * 300;
waterBubble.scale.set(0.2, 0.2);
waterBubble.tint = 0x87CEEB;
tween(waterBubble, {
y: waterBubble.y - 400,
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
waterBubble.destroy();
}
});
}
tween(subText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
subText.destroy();
}
});
}
// BUG 48: Explosions randomly become gender reveal parties
if (Math.random() < 0.01 && explosions.length > 0) {
var genderText = new Text2('🎀 IT\'S A LASER!\n"Congratulations!"', {
size: 60,
fill: Math.random() < 0.5 ? 0xFF69B4 : 0x87CEEB
});
genderText.anchor.set(0.5, 0.5);
genderText.x = explosions[0].x;
genderText.y = explosions[0].y - 50;
game.addChild(genderText);
tween(genderText, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 3000,
onFinish: function onFinish() {
genderText.destroy();
}
});
}
// BUG 49: Enemies randomly become door-to-door salesmen
if (Math.random() < 0.007 && enemies.length > 0) {
var salesText = new Text2('🚪 HELLO! DO YOU HAVE A MOMENT\nto talk about extended warranties?', {
size: 35,
fill: 0x8B4513
});
salesText.anchor.set(0.5, 0.5);
salesText.x = enemies[0].x;
salesText.y = enemies[0].y - 100;
game.addChild(salesText);
enemies[0].children[0].tint = 0x8B4513;
tween(salesText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
salesText.destroy();
}
});
}
// BUG 50: Game randomly spawns fake virus alerts
if (Math.random() < 0.002) {
var virusText = new Text2('⚠️ VIRUS DETECTED!\n"Your computer has 47 viruses!"\n"Click here to fix (NOT A SCAM)"', {
size: 50,
fill: 0xFF0000
});
virusText.anchor.set(0.5, 0.5);
virusText.x = 1024;
virusText.y = 1366;
game.addChild(virusText);
// Add fake scanning animation
var scanText = new Text2('SCANNING... 1%', {
size: 40,
fill: 0x00FF00
});
scanText.anchor.set(0.5, 0.5);
scanText.x = 1024;
scanText.y = 1500;
game.addChild(scanText);
var scanPercent = 1;
var scanInterval = LK.setInterval(function () {
scanPercent += Math.floor(Math.random() * 5) + 1;
scanText.setText('SCANNING... ' + Math.min(scanPercent, 99) + '%');
}, 200);
LK.setTimeout(function () {
LK.clearInterval(scanInterval);
virusText.destroy();
scanText.destroy();
}, 6000);
}
// BUG 51: Asteroids randomly become art critics
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var criticsText = new Text2('🎨 "This explosion lacks\nartistic merit. 2/10"\n"Derivative work"', {
size: 28,
fill: 0x800080
});
criticsText.anchor.set(0.5, 0.5);
criticsText.x = asteroids[i].x;
criticsText.y = asteroids[i].y - 90;
game.addChild(criticsText);
asteroids[i].children[0].tint = 0x800080;
tween(criticsText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
criticsText.destroy();
}
});
}
}
// BUG 52: Player randomly gets performance anxiety
if (Math.random() < 0.005) {
var anxietyText = new Text2('😰 PERFORMANCE ANXIETY!\n"What if I miss?"\n"Everyone is watching!"', {
size: 40,
fill: 0xFFFF00
});
anxietyText.anchor.set(0.5, 0.5);
anxietyText.x = player.x;
anxietyText.y = player.y - 120;
game.addChild(anxietyText);
player.fireRate *= 3; // Shoot slower due to anxiety
LK.setTimeout(function () {
if (player) player.fireRate /= 3;
anxietyText.destroy();
}, 3000);
}
// BUG 53: Boss randomly becomes a fitness instructor
if (Math.random() < 0.007 && boss) {
var fitnessText = new Text2('💪 FITNESS TIME!\n"Feel the burn!"\n"One more laser! You can do it!"', {
size: 42,
fill: 0xFF4500
});
fitnessText.anchor.set(0.5, 0.5);
fitnessText.x = boss.x;
fitnessText.y = boss.y - 200;
game.addChild(fitnessText);
boss.children[0].tint = 0xFF4500;
// Make boss do jumping jacks
tween(boss, {
scaleY: 1.2
}, {
duration: 300
});
tween(boss, {
scaleY: 0.8
}, {
duration: 300,
delay: 300
});
tween(boss, {
scaleY: 1
}, {
duration: 300,
delay: 600
});
tween(fitnessText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
fitnessText.destroy();
}
});
}
// BUG 54: Powerups randomly become fortune cookies
if (Math.random() < 0.01) {
for (var i = 0; i < powerups.length; i++) {
var fortunes = ['🥠 "You will find happiness in\na laser beam"', '🥠 "Your future contains\nmany explosions"', '🥠 "Beware of flying rocks"', '🥠 "A boss approaches from\nthe north"'];
var fortuneText = new Text2(fortunes[Math.floor(Math.random() * fortunes.length)], {
size: 28,
fill: 0xDEB887
});
fortuneText.anchor.set(0.5, 0.5);
fortuneText.x = powerups[i].x;
fortuneText.y = powerups[i].y - 70;
game.addChild(fortuneText);
powerups[i].children[0].tint = 0xDEB887;
tween(fortuneText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
fortuneText.destroy();
}
});
}
}
// BUG 55: Enemy lasers randomly become poetry
if (Math.random() < 0.012) {
for (var i = 0; i < enemyLasers.length; i++) {
var poems = ['📝 "Roses are red,\nViolets are blue,\nI am a laser,\nComing for you"', '📝 "In space no one\ncan hear you scream,\nBut they can see\nmy laser beam"'];
var poemText = new Text2(poems[Math.floor(Math.random() * poems.length)], {
size: 22,
fill: 0x9370DB
});
poemText.anchor.set(0.5, 0.5);
poemText.x = enemyLasers[i].x;
poemText.y = enemyLasers[i].y - 50;
game.addChild(poemText);
enemyLasers[i].children[0].tint = 0x9370DB;
tween(poemText, {
alpha: 0
}, {
duration: 2500,
onFinish: function onFinish() {
poemText.destroy();
}
});
}
}
// BUG 56: Game randomly becomes a cooking show
if (Math.random() < 0.003) {
var cookingText = new Text2('👨🍳 SPACE COOKING WITH CHEF LASER!\n"Today we\'re making asteroid soup!"\n"Add a pinch of stardust..."', {
size: 45,
fill: 0xFFD700
});
cookingText.anchor.set(0.5, 0.5);
cookingText.x = 1024;
cookingText.y = 400;
game.addChild(cookingText);
// Add chef hat to player
if (player) {
var chefHat = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
chefHat.x = player.x;
chefHat.y = player.y - 50;
chefHat.tint = 0xFFFFFF;
chefHat.scale.set(0.8, 0.4);
LK.setTimeout(function () {
chefHat.destroy();
}, 4000);
}
tween(cookingText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
cookingText.destroy();
}
});
}
// BUG 57: Explosions randomly become birthday cakes
if (Math.random() < 0.015 && explosions.length > 0) {
var cakeText = new Text2('🎂 HAPPY BIRTHDAY EXPLOSION!\n"Make a wish!"', {
size: 50,
fill: 0xFF1493
});
cakeText.anchor.set(0.5, 0.5);
cakeText.x = explosions[0].x;
cakeText.y = explosions[0].y - 60;
game.addChild(cakeText);
// Add candles
for (var candle = 0; candle < 5; candle++) {
var cakeCandle = game.attachAsset('playerLaser', {
anchorX: 0.5,
anchorY: 0.5
});
cakeCandle.x = explosions[0].x + (candle - 2) * 30;
cakeCandle.y = explosions[0].y - 30;
cakeCandle.tint = 0xFFFFFF;
cakeCandle.scale.set(0.3, 1);
tween(cakeCandle, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
cakeCandle.destroy();
}
});
}
LK.getSound('powerup').play();
tween(cakeText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
cakeText.destroy();
}
});
}
// BUG 58: Enemies randomly become weather forecasters
if (Math.random() < 0.006 && enemies.length > 0) {
var weatherText = new Text2('🌤️ SPACE WEATHER UPDATE!\n"Chance of laser storms: 100%"\n"UV index: DEADLY"', {
size: 35,
fill: 0x87CEEB
});
weatherText.anchor.set(0.5, 0.5);
weatherText.x = enemies[0].x;
weatherText.y = enemies[0].y - 120;
game.addChild(weatherText);
enemies[0].children[0].tint = 0x87CEEB;
tween(weatherText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
weatherText.destroy();
}
});
}
// BUG 59: Player ship randomly becomes a taxi dispatcher
if (Math.random() < 0.005) {
var dispatchText = new Text2('🚕 DISPATCH TO ALL UNITS!\n"We have a pickup at sector 7"\n"Customer is hostile and shooting"', {
size: 38,
fill: 0xFFFF00
});
dispatchText.anchor.set(0.5, 0.5);
dispatchText.x = player.x;
dispatchText.y = player.y - 150;
game.addChild(dispatchText);
player.children[0].tint = 0xFFFF00;
tween(dispatchText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
dispatchText.destroy();
}
});
}
// BUG 60: Asteroids randomly become motivational speakers
if (Math.random() < 0.009) {
for (var i = 0; i < asteroids.length; i++) {
var motivationText = new Text2('🎯 "You miss 100% of the shots\nyou don\'t take!"\n"Believe in yourself!"', {
size: 32,
fill: 0x32CD32
});
motivationText.anchor.set(0.5, 0.5);
motivationText.x = asteroids[i].x;
motivationText.y = asteroids[i].y - 100;
game.addChild(motivationText);
asteroids[i].children[0].tint = 0x32CD32;
tween(motivationText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
motivationText.destroy();
}
});
}
}
// BUG 61: Boss randomly becomes a tour guide
if (Math.random() < 0.008 && boss) {
var tourText = new Text2('🗺️ WELCOME TO SECTOR 9!\n"On your left you\'ll see\ndeadly laser fire"\n"Please keep arms inside"', {
size: 38,
fill: 0x228B22
});
tourText.anchor.set(0.5, 0.5);
tourText.x = boss.x;
tourText.y = boss.y - 200;
game.addChild(tourText);
boss.children[0].tint = 0x228B22;
tween(tourText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
tourText.destroy();
}
});
}
// BUG 62: Powerups randomly become tech support tickets
if (Math.random() < 0.01) {
for (var i = 0; i < powerups.length; i++) {
var ticketText = new Text2('🎫 TICKET #42069\n"Laser not working"\n"Status: WONTFIX"', {
size: 28,
fill: 0x4B0082
});
ticketText.anchor.set(0.5, 0.5);
ticketText.x = powerups[i].x;
ticketText.y = powerups[i].y - 70;
game.addChild(ticketText);
powerups[i].children[0].tint = 0x4B0082;
tween(ticketText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
ticketText.destroy();
}
});
}
}
// BUG 63: Enemy lasers randomly become spam emails
if (Math.random() < 0.018) {
for (var i = 0; i < enemyLasers.length; i++) {
var spamTexts = ['📧 "You have won $1,000,000!"', '📧 "Hot singles in your area!"', '📧 "Enlarge your laser today!"', '📧 "Nigerian prince needs help"'];
var spamText = new Text2(spamTexts[Math.floor(Math.random() * spamTexts.length)], {
size: 22,
fill: 0xFF4500
});
spamText.anchor.set(0.5, 0.5);
spamText.x = enemyLasers[i].x;
spamText.y = enemyLasers[i].y - 30;
game.addChild(spamText);
enemyLasers[i].children[0].tint = 0xFF4500;
tween(spamText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
spamText.destroy();
}
});
}
}
// BUG 64: Game randomly spawns fake software updates
if (Math.random() < 0.002) {
var updateText = new Text2('💾 MANDATORY UPDATE!\n"Installing Adobe Flash..."\n"Please restart 47 times"', {
size: 50,
fill: 0x0080FF
});
updateText.anchor.set(0.5, 0.5);
updateText.x = 1024;
updateText.y = 1366;
game.addChild(updateText);
// Fake progress bar
var progressBar = game.attachAsset('playerLaser', {
anchorX: 0,
anchorY: 0.5
});
progressBar.x = 500;
progressBar.y = 1500;
progressBar.scale.set(0, 2);
progressBar.tint = 0x00FF00;
tween(progressBar, {
scaleX: 20
}, {
duration: 8000
});
LK.setTimeout(function () {
updateText.destroy();
progressBar.destroy();
}, 8000);
}
// BUG 65: Explosions randomly become unboxing videos
if (Math.random() < 0.012 && explosions.length > 0) {
var unboxText = new Text2('📦 UNBOXING VIDEO!\n"What\'s inside this explosion?"\n"SMASH THAT LIKE BUTTON!"', {
size: 45,
fill: 0xFF0000
});
unboxText.anchor.set(0.5, 0.5);
unboxText.x = explosions[0].x;
unboxText.y = explosions[0].y - 80;
game.addChild(unboxText);
tween(unboxText, {
alpha: 0,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 3000,
onFinish: function onFinish() {
unboxText.destroy();
}
});
}
// BUG 66: Enemies randomly become podcast hosts
if (Math.random() < 0.007 && enemies.length > 0) {
var podcastText = new Text2('🎙️ SPACE PODCAST EPISODE 42!\n"Today we discuss laser ethics"\n"Sponsored by RAID: Shadow Legends"', {
size: 32,
fill: 0x800080
});
podcastText.anchor.set(0.5, 0.5);
podcastText.x = enemies[0].x;
podcastText.y = enemies[0].y - 120;
game.addChild(podcastText);
enemies[0].children[0].tint = 0x800080;
tween(podcastText, {
alpha: 0
}, {
duration: 4500,
onFinish: function onFinish() {
podcastText.destroy();
}
});
}
// BUG 67: Player randomly gets impostor syndrome
if (Math.random() < 0.005) {
var impostorText = new Text2('😰 "Am I even a real pilot?"\n"Everyone else seems better"\n"I don\'t belong here"', {
size: 38,
fill: 0x808080
});
impostorText.anchor.set(0.5, 0.5);
impostorText.x = player.x;
impostorText.y = player.y - 120;
game.addChild(impostorText);
player.alpha = 0.5; // Feel less confident
LK.setTimeout(function () {
if (player) player.alpha = 1;
impostorText.destroy();
}, 3000);
}
// BUG 68: Asteroids randomly become life coaches
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var coachText = new Text2('🧘 "Visualize your success!"\n"You are enough!"\n"Manifest those lasers!"', {
size: 30,
fill: 0x20B2AA
});
coachText.anchor.set(0.5, 0.5);
coachText.x = asteroids[i].x;
coachText.y = asteroids[i].y - 90;
game.addChild(coachText);
asteroids[i].children[0].tint = 0x20B2AA;
tween(coachText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
coachText.destroy();
}
});
}
}
// BUG 69: Boss randomly becomes a math tutor
if (Math.random() < 0.007 && boss) {
var mathTutorText = new Text2('📚 "Let\'s solve for X!\nIf I shoot 5 lasers per second..."\n"Show your work!"', {
size: 40,
fill: 0x4169E1
});
mathTutorText.anchor.set(0.5, 0.5);
mathTutorText.x = boss.x;
mathTutorText.y = boss.y - 200;
game.addChild(mathTutorText);
boss.children[0].tint = 0x4169E1;
tween(mathTutorText, {
alpha: 0
}, {
duration: 4500,
onFinish: function onFinish() {
mathTutorText.destroy();
}
});
}
// BUG 70: Powerups randomly become online reviews
if (Math.random() < 0.011) {
for (var i = 0; i < powerups.length; i++) {
var reviewText = new Text2('⭐⭐⭐ "Great laser upgrade!\nShipped fast. Would recommend"\n"5/5 stars - Gary from Iowa"', {
size: 26,
fill: 0xFFD700
});
reviewText.anchor.set(0.5, 0.5);
reviewText.x = powerups[i].x;
reviewText.y = powerups[i].y - 80;
game.addChild(reviewText);
powerups[i].children[0].tint = 0xFFD700;
tween(reviewText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
reviewText.destroy();
}
});
}
}
// BUG 71: Enemy lasers randomly become philosophical questions
if (Math.random() < 0.014) {
for (var i = 0; i < enemyLasers.length; i++) {
var philQuestions = ['🤔 "If a laser fires in space\nand no one hears it...?"', '🤔 "What is the meaning\nof velocity?"', '🤔 "Are we more than\njust pixels?"'];
var philText = new Text2(philQuestions[Math.floor(Math.random() * philQuestions.length)], {
size: 24,
fill: 0x9370DB
});
philText.anchor.set(0.5, 0.5);
philText.x = enemyLasers[i].x;
philText.y = enemyLasers[i].y - 40;
game.addChild(philText);
enemyLasers[i].children[0].tint = 0x9370DB;
tween(philText, {
alpha: 0
}, {
duration: 2500,
onFinish: function onFinish() {
philText.destroy();
}
});
}
}
// BUG 72: Game randomly becomes a meditation app
if (Math.random() < 0.003) {
var meditationText = new Text2('🧘♀️ MINDFULNESS MOMENT\n"Breathe in... breathe out..."\n"Feel the laser energy"', {
size: 50,
fill: 0x20B2AA
});
meditationText.anchor.set(0.5, 0.5);
meditationText.x = 1024;
meditationText.y = 1366;
game.addChild(meditationText);
// Slow everything down
if (player) player.fireRate *= 3;
for (var i = 0; i < enemies.length; i++) enemies[i].speed *= 0.3;
LK.setTimeout(function () {
if (player) player.fireRate /= 3;
for (var i = 0; i < enemies.length; i++) if (enemies[i]) enemies[i].speed /= 0.3;
meditationText.destroy();
}, 5000);
}
// BUG 73: Explosions randomly become product launches
if (Math.random() < 0.01 && explosions.length > 0) {
var launchText = new Text2('🚀 INTRODUCING: iExplosion Pro!\n"Now with 50% more blast!"\n"Starting at $999"', {
size: 45,
fill: 0x007AFF
});
launchText.anchor.set(0.5, 0.5);
launchText.x = explosions[0].x;
launchText.y = explosions[0].y - 80;
game.addChild(launchText);
tween(launchText, {
alpha: 0,
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 3500,
onFinish: function onFinish() {
launchText.destroy();
}
});
}
// BUG 74: Enemies randomly become rideshare drivers
if (Math.random() < 0.006 && enemies.length > 0) {
var uberText = new Text2('🚗 "I\'m here for pickup"\n"Are you going to destroy Earth?"\n"Five stars please!"', {
size: 35,
fill: 0x000000
});
uberText.anchor.set(0.5, 0.5);
uberText.x = enemies[0].x;
uberText.y = enemies[0].y - 100;
game.addChild(uberText);
enemies[0].children[0].tint = 0x000000;
tween(uberText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
uberText.destroy();
}
});
}
// BUG 75: Player ship randomly becomes a food critic
if (Math.random() < 0.005) {
var criticText = new Text2('🍽️ "The laser has hints of plasma\nwith notes of destruction"\n"I give it 3 Michelin stars"', {
size: 38,
fill: 0xB8860B
});
criticText.anchor.set(0.5, 0.5);
criticText.x = player.x;
criticText.y = player.y - 150;
game.addChild(criticText);
player.children[0].tint = 0xB8860B;
tween(criticText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
criticText.destroy();
}
});
}
// BUG 76: Asteroids randomly become conspiracy theorists
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var conspiracyText = new Text2('👁️ "The Earth is flat!"\n"Birds aren\'t real!"\n"Wake up, sheeple!"', {
size: 30,
fill: 0x228B22
});
conspiracyText.anchor.set(0.5, 0.5);
conspiracyText.x = asteroids[i].x;
conspiracyText.y = asteroids[i].y - 90;
game.addChild(conspiracyText);
asteroids[i].children[0].tint = 0x228B22;
tween(conspiracyText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
conspiracyText.destroy();
}
});
}
}
// BUG 77: Boss randomly becomes a stand-up comedian telling dad jokes
if (Math.random() < 0.008 && boss) {
var dadJokes = ['👨 "Why don\'t scientists trust atoms?\nBecause they make up everything!"', '👨 "I told my wife she was drawing\nher eyebrows too high.\nShe seemed surprised."', '👨 "What do you call a fake noodle?\nAn impasta!"'];
var dadJokeText = new Text2(dadJokes[Math.floor(Math.random() * dadJokes.length)], {
size: 38,
fill: 0xDAA520
});
dadJokeText.anchor.set(0.5, 0.5);
dadJokeText.x = boss.x;
dadJokeText.y = boss.y - 200;
game.addChild(dadJokeText);
boss.children[0].tint = 0xDAA520;
LK.getSound('powerup').play();
tween(dadJokeText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
dadJokeText.destroy();
}
});
}
// BUG 78: Powerups randomly become streaming notifications
if (Math.random() < 0.012) {
for (var i = 0; i < powerups.length; i++) {
var streamTexts = ['📺 "xXProGamer420Xx is now live!"', '📺 "Remember to like and subscribe!"', '📺 "This stream is sponsored by NordVPN"', '📺 "Use code LASER for 10% off"'];
var streamText = new Text2(streamTexts[Math.floor(Math.random() * streamTexts.length)], {
size: 28,
fill: 0x9146FF
});
streamText.anchor.set(0.5, 0.5);
streamText.x = powerups[i].x;
streamText.y = powerups[i].y - 70;
game.addChild(streamText);
powerups[i].children[0].tint = 0x9146FF;
tween(streamText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
streamText.destroy();
}
});
}
}
// BUG 79: Enemy lasers randomly become autocorrect fails
if (Math.random() < 0.016) {
for (var i = 0; i < enemyLasers.length; i++) {
var autocorrectTexts = ['📱 "I love lasagna" (meant laser)', '📱 "Duck you!" (meant luck)', '📱 "I\'m shoting" (meant shooting)', '📱 "Stupid autocorrelation!"'];
var autocorrectText = new Text2(autocorrectTexts[Math.floor(Math.random() * autocorrectTexts.length)], {
size: 22,
fill: 0xFF6347
});
autocorrectText.anchor.set(0.5, 0.5);
autocorrectText.x = enemyLasers[i].x;
autocorrectText.y = enemyLasers[i].y - 35;
game.addChild(autocorrectText);
enemyLasers[i].children[0].tint = 0xFF6347;
tween(autocorrectText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
autocorrectText.destroy();
}
});
}
}
// BUG 80: Game randomly spawns fake loading screens for random things
if (Math.random() < 0.002) {
var loadingTexts = ['Loading common sense... 0%', 'Loading social skills... ERROR', 'Loading patience... 99%', 'Loading motivation... CONNECTION TIMEOUT'];
var randomLoadingText = new Text2(loadingTexts[Math.floor(Math.random() * loadingTexts.length)], {
size: 60,
fill: 0x00BFFF
});
randomLoadingText.anchor.set(0.5, 0.5);
randomLoadingText.x = 1024;
randomLoadingText.y = 1366;
game.addChild(randomLoadingText);
LK.setTimeout(function () {
randomLoadingText.destroy();
}, 4000);
}
// BUG 81: Explosions randomly become job interviews
if (Math.random() < 0.01 && explosions.length > 0) {
var interviewText = new Text2('💼 "Tell me about yourself"\n"Where do you see yourself\nin 5 explosions?"', {
size: 40,
fill: 0x4682B4
});
interviewText.anchor.set(0.5, 0.5);
interviewText.x = explosions[0].x;
interviewText.y = explosions[0].y - 70;
game.addChild(interviewText);
tween(interviewText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
interviewText.destroy();
}
});
}
// BUG 82: Enemies randomly become GPS navigation
if (Math.random() < 0.007 && enemies.length > 0) {
var gpsText = new Text2('🗺️ "Turn left in 200 meters"\n"You have arrived at your\ndestruction"', {
size: 32,
fill: 0x32CD32
});
gpsText.anchor.set(0.5, 0.5);
gpsText.x = enemies[0].x;
gpsText.y = enemies[0].y - 100;
game.addChild(gpsText);
enemies[0].children[0].tint = 0x32CD32;
tween(gpsText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
gpsText.destroy();
}
});
}
// BUG 83: Player randomly becomes a sports commentator
if (Math.random() < 0.006) {
var sportsText = new Text2('🏈 "AND HE SHOOTS!\nIS IT GOOD?\nTOUCHDOWN!"', {
size: 45,
fill: 0xFF4500
});
sportsText.anchor.set(0.5, 0.5);
sportsText.x = player.x;
sportsText.y = player.y - 120;
game.addChild(sportsText);
player.children[0].tint = 0xFF4500;
tween(sportsText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
sportsText.destroy();
}
});
}
// BUG 84: Asteroids randomly become dating app profiles
if (Math.random() < 0.009) {
for (var i = 0; i < asteroids.length; i++) {
var datingProfiles = ['💕 "Rocky, 25\nLoves long rolls through space"\n"Swipe right for impact"', '💕 "Asteroid, 4.6 billion\nLooking for someone\nto crash into"'];
var profileText = new Text2(datingProfiles[Math.floor(Math.random() * datingProfiles.length)], {
size: 28,
fill: 0xFF69B4
});
profileText.anchor.set(0.5, 0.5);
profileText.x = asteroids[i].x;
profileText.y = asteroids[i].y - 90;
game.addChild(profileText);
asteroids[i].children[0].tint = 0xFF69B4;
tween(profileText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
profileText.destroy();
}
});
}
}
// BUG 85: Boss randomly becomes a real estate agent
if (Math.random() < 0.007 && boss) {
var realEstateText = new Text2('🏠 "This space sector has\ngreat schools and low taxes!"\n"Perfect for families!"', {
size: 38,
fill: 0x8B4513
});
realEstateText.anchor.set(0.5, 0.5);
realEstateText.x = boss.x;
realEstateText.y = boss.y - 200;
game.addChild(realEstateText);
boss.children[0].tint = 0x8B4513;
tween(realEstateText, {
alpha: 0
}, {
duration: 4500,
onFinish: function onFinish() {
realEstateText.destroy();
}
});
}
// BUG 86: Powerups randomly become social media posts
if (Math.random() < 0.013) {
for (var i = 0; i < powerups.length; i++) {
var socialPosts = ['📱 "Just upgraded my laser! #Blessed"', '📱 "Feeling cute, might destroy\nlater idk"', '📱 "Live, Laugh, Laser 💕"'];
var postText = new Text2(socialPosts[Math.floor(Math.random() * socialPosts.length)], {
size: 26,
fill: 0x1DA1F2
});
postText.anchor.set(0.5, 0.5);
postText.x = powerups[i].x;
postText.y = powerups[i].y - 70;
game.addChild(postText);
powerups[i].children[0].tint = 0x1DA1F2;
tween(postText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
postText.destroy();
}
});
}
}
// BUG 87: Enemy lasers randomly become workout instructions
if (Math.random() < 0.015) {
for (var i = 0; i < enemyLasers.length; i++) {
var workoutTexts = ['💪 "Feel the burn!"', '💪 "One more rep!"', '💪 "No pain, no gain!"', '💪 "Push through it!"'];
var workoutText = new Text2(workoutTexts[Math.floor(Math.random() * workoutTexts.length)], {
size: 24,
fill: 0xFF4500
});
workoutText.anchor.set(0.5, 0.5);
workoutText.x = enemyLasers[i].x;
workoutText.y = enemyLasers[i].y - 30;
game.addChild(workoutText);
enemyLasers[i].children[0].tint = 0xFF4500;
tween(workoutText, {
alpha: 0
}, {
duration: 1800,
onFinish: function onFinish() {
workoutText.destroy();
}
});
}
}
// BUG 88: Game randomly becomes a time travel documentary
if (Math.random() < 0.002) {
var timeDocText = new Text2('📺 ANCIENT ALIENS PRESENTS:\n"Did lasers build the pyramids?"\n"Experts say: Maybe"', {
size: 45,
fill: 0x9932CC
});
timeDocText.anchor.set(0.5, 0.5);
timeDocText.x = 1024;
timeDocText.y = 1366;
game.addChild(timeDocText);
LK.setTimeout(function () {
timeDocText.destroy();
}, 6000);
}
// BUG 89: Explosions randomly become cooking tutorials
if (Math.random() < 0.011 && explosions.length > 0) {
var cookingTutorialText = new Text2('👨🍳 "Step 1: Preheat your laser\nStep 2: Add explosions to taste"\n"Serves 4"', {
size: 38,
fill: 0xFFD700
});
cookingTutorialText.anchor.set(0.5, 0.5);
cookingTutorialText.x = explosions[0].x;
cookingTutorialText.y = explosions[0].y - 80;
game.addChild(cookingTutorialText);
tween(cookingTutorialText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
cookingTutorialText.destroy();
}
});
}
// BUG 90: Enemies randomly become technical support scammers
if (Math.random() < 0.006 && enemies.length > 0) {
var scamText = new Text2('📞 "Hello, your computer\nhas virus! Give me your\ncredit card to fix!"', {
size: 32,
fill: 0xFF0000
});
scamText.anchor.set(0.5, 0.5);
scamText.x = enemies[0].x;
scamText.y = enemies[0].y - 100;
game.addChild(scamText);
enemies[0].children[0].tint = 0xFF0000;
tween(scamText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
scamText.destroy();
}
});
}
// BUG 91: Player ship randomly becomes a driving instructor
if (Math.random() < 0.005) {
var drivingText = new Text2('🚗 "Check your mirrors!\nSignal before shooting!\nParallel park that laser!"', {
size: 38,
fill: 0x00FF7F
});
drivingText.anchor.set(0.5, 0.5);
drivingText.x = player.x;
drivingText.y = player.y - 150;
game.addChild(drivingText);
player.children[0].tint = 0x00FF7F;
tween(drivingText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
drivingText.destroy();
}
});
}
// BUG 92: Asteroids randomly become self-help gurus
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var selfHelpText = new Text2('📚 "Chapter 1: How to Rock\nChapter 2: Finding Your Core\nChapter 3: Rolling with It"', {
size: 28,
fill: 0x20B2AA
});
selfHelpText.anchor.set(0.5, 0.5);
selfHelpText.x = asteroids[i].x;
selfHelpText.y = asteroids[i].y - 90;
game.addChild(selfHelpText);
asteroids[i].children[0].tint = 0x20B2AA;
tween(selfHelpText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
selfHelpText.destroy();
}
});
}
}
// BUG 93: Boss randomly becomes a cryptocurrency investor
if (Math.random() < 0.007 && boss) {
var cryptoInvestorText = new Text2('💰 "HODL the line!\nLaser coin to the moon!\nDiamond hands! 💎🙌"', {
size: 40,
fill: 0xFFD700
});
cryptoInvestorText.anchor.set(0.5, 0.5);
cryptoInvestorText.x = boss.x;
cryptoInvestorText.y = boss.y - 200;
game.addChild(cryptoInvestorText);
boss.children[0].tint = 0xFFD700;
tween(cryptoInvestorText, {
alpha: 0
}, {
duration: 4500,
onFinish: function onFinish() {
cryptoInvestorText.destroy();
}
});
}
// BUG 94: Powerups randomly become internet arguments
if (Math.random() < 0.012) {
for (var i = 0; i < powerups.length; i++) {
var argumentTexts = ['🤬 "Actually, you\'re wrong"', '🤬 "Source???"', '🤬 "I have a PhD in lasers"', '🤬 "Blocked and reported"'];
var argumentText = new Text2(argumentTexts[Math.floor(Math.random() * argumentTexts.length)], {
size: 28,
fill: 0xFF4500
});
argumentText.anchor.set(0.5, 0.5);
argumentText.x = powerups[i].x;
argumentText.y = powerups[i].y - 70;
game.addChild(argumentText);
powerups[i].children[0].tint = 0xFF4500;
tween(argumentText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
argumentText.destroy();
}
});
}
}
// BUG 95: Enemy lasers randomly become movie reviews
if (Math.random() < 0.014) {
for (var i = 0; i < enemyLasers.length; i++) {
var reviewTexts = ['🎬 "Two thumbs way down"', '🎬 "Worst sequel ever made"', '🎬 "The book was better"', '🎬 "Needs more explosions"'];
var movieReviewText = new Text2(reviewTexts[Math.floor(Math.random() * reviewTexts.length)], {
size: 22,
fill: 0x9370DB
});
movieReviewText.anchor.set(0.5, 0.5);
movieReviewText.x = enemyLasers[i].x;
movieReviewText.y = enemyLasers[i].y - 35;
game.addChild(movieReviewText);
enemyLasers[i].children[0].tint = 0x9370DB;
tween(movieReviewText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
movieReviewText.destroy();
}
});
}
}
// BUG 96: Game randomly spawns fake error dialogs
if (Math.random() < 0.002) {
var errorDialog = new Text2('❌ ERROR 404: Fun not found\n[OK] [Cancel] [Send Error Report]\n[Format Hard Drive]', {
size: 45,
fill: 0xFF0000
});
errorDialog.anchor.set(0.5, 0.5);
errorDialog.x = 1024;
errorDialog.y = 1366;
game.addChild(errorDialog);
LK.setTimeout(function () {
errorDialog.destroy();
}, 5000);
}
// BUG 97: Explosions randomly become infomercials
if (Math.random() < 0.01 && explosions.length > 0) {
var infomercialText = new Text2('📺 "BUT WAIT, THERE\'S MORE!\nCall now and get a second\nexplosion absolutely FREE!"', {
size: 40,
fill: 0xFF6347
});
infomercialText.anchor.set(0.5, 0.5);
infomercialText.x = explosions[0].x;
infomercialText.y = explosions[0].y - 80;
game.addChild(infomercialText);
tween(infomercialText, {
alpha: 0,
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 4000,
onFinish: function onFinish() {
infomercialText.destroy();
}
});
}
// BUG 98: Enemies randomly become political candidates
if (Math.random() < 0.006 && enemies.length > 0) {
var politicalText = new Text2('🗳️ "Vote for me!\nI promise free lasers for all!\nMake Space Great Again!"', {
size: 35,
fill: 0x0000FF
});
politicalText.anchor.set(0.5, 0.5);
politicalText.x = enemies[0].x;
politicalText.y = enemies[0].y - 120;
game.addChild(politicalText);
enemies[0].children[0].tint = 0x0000FF;
tween(politicalText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
politicalText.destroy();
}
});
}
// BUG 99: Player randomly gets existential crisis about being in a game
if (Math.random() < 0.004) {
var existentialText = new Text2('🤖 "Wait... am I just code?\nAre my lasers even real?\nDo I have free will?"', {
size: 40,
fill: 0x800080
});
existentialText.anchor.set(0.5, 0.5);
existentialText.x = player.x;
existentialText.y = player.y - 150;
game.addChild(existentialText);
player.canShoot = false; // Too confused to shoot
LK.setTimeout(function () {
if (player) player.canShoot = true;
existentialText.destroy();
}, 4000);
}
// BUG 100: Asteroids randomly become internet trolls
if (Math.random() < 0.009) {
for (var i = 0; i < asteroids.length; i++) {
var trollTexts = ['😈 "u mad bro?"', '😈 "git gud scrub"', '😈 "first"', '😈 "reported"', '😈 "skill issue"'];
var trollText = new Text2(trollTexts[Math.floor(Math.random() * trollTexts.length)], {
size: 30,
fill: 0xFF4500
});
trollText.anchor.set(0.5, 0.5);
trollText.x = asteroids[i].x;
trollText.y = asteroids[i].y - 60;
game.addChild(trollText);
asteroids[i].children[0].tint = 0xFF4500;
tween(trollText, {
alpha: 0,
rotation: Math.PI
}, {
duration: 2500,
onFinish: function onFinish() {
trollText.destroy();
}
});
}
}
// BUG 101: Boss randomly becomes a wedding planner
if (Math.random() < 0.007 && boss) {
var weddingText = new Text2('💒 "I now pronounce you\nlaser and target!\nYou may kiss the bride!"', {
size: 38,
fill: 0xFF69B4
});
weddingText.anchor.set(0.5, 0.5);
weddingText.x = boss.x;
weddingText.y = boss.y - 200;
game.addChild(weddingText);
boss.children[0].tint = 0xFF69B4;
// Spawn confetti
for (var confetti = 0; confetti < 12; confetti++) {
var confettiPiece = game.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
confettiPiece.x = boss.x + (Math.random() - 0.5) * 300;
confettiPiece.y = boss.y + (Math.random() - 0.5) * 200;
confettiPiece.scale.set(0.2, 0.2);
confettiPiece.tint = Math.random() * 0xffffff;
tween(confettiPiece, {
y: confettiPiece.y + 400,
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
confettiPiece.destroy();
}
});
}
LK.getSound('powerup').play();
tween(weddingText, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
weddingText.destroy();
}
});
}
// BUG 102: Powerups randomly become startup pitch presentations
if (Math.random() < 0.01) {
for (var i = 0; i < powerups.length; i++) {
var pitchText = new Text2('💼 "We\'re disrupting the laser space\nwith blockchain AI"\n"We need $50M seed round"', {
size: 26,
fill: 0x007AFF
});
pitchText.anchor.set(0.5, 0.5);
pitchText.x = powerups[i].x;
pitchText.y = powerups[i].y - 80;
game.addChild(pitchText);
powerups[i].children[0].tint = 0x007AFF;
tween(pitchText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
pitchText.destroy();
}
});
}
}
// BUG 103: Enemy lasers randomly become TikTok dances
if (Math.random() < 0.016) {
for (var i = 0; i < enemyLasers.length; i++) {
var tikTokText = new Text2('💃 *Does the Renegade*\n*Hits the griddy*', {
size: 24,
fill: 0xFF1493
});
tikTokText.anchor.set(0.5, 0.5);
tikTokText.x = enemyLasers[i].x;
tikTokText.y = enemyLasers[i].y - 40;
game.addChild(tikTokText);
enemyLasers[i].children[0].tint = 0xFF1493;
enemyLasers[i].children[0].rotation += 0.5; // Dance move
tween(tikTokText, {
alpha: 0
}, {
duration: 1500,
onFinish: function onFinish() {
tikTokText.destroy();
}
});
}
}
// BUG 104: Game randomly becomes a nature documentary
if (Math.random() < 0.002) {
var natureDocText = new Text2('🦁 "Here we see the rare Space Pilot\nin its natural habitat,\nshooting lasers to survive"', {
size: 45,
fill: 0x228B22
});
natureDocText.anchor.set(0.5, 0.5);
natureDocText.x = 1024;
natureDocText.y = 400;
game.addChild(natureDocText);
LK.setTimeout(function () {
natureDocText.destroy();
}, 6000);
}
// BUG 105: Explosions randomly become award ceremonies
if (Math.random() < 0.01 && explosions.length > 0) {
var awardText = new Text2('🏆 "And the Oscar goes to...\nBest Explosion in a Space Game!\nI\'d like to thank my particles"', {
size: 40,
fill: 0xFFD700
});
awardText.anchor.set(0.5, 0.5);
awardText.x = explosions[0].x;
awardText.y = explosions[0].y - 80;
game.addChild(awardText);
tween(awardText, {
alpha: 0,
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 4000,
onFinish: function onFinish() {
awardText.destroy();
}
});
}
// BUG 106: Enemies randomly become taxi dispatchers
if (Math.random() < 0.006 && enemies.length > 0) {
var taxiDispatchText = new Text2('🚕 "Unit 47, pickup at coordinates\n1024, 1366\nCustomer is armed and dangerous"', {
size: 32,
fill: 0xFFFF00
});
taxiDispatchText.anchor.set(0.5, 0.5);
taxiDispatchText.x = enemies[0].x;
taxiDispatchText.y = enemies[0].y - 120;
game.addChild(taxiDispatchText);
enemies[0].children[0].tint = 0xFFFF00;
tween(taxiDispatchText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
taxiDispatchText.destroy();
}
});
}
// BUG 107: Player ship randomly becomes a museum tour guide
if (Math.random() < 0.005) {
var museumText = new Text2('🏛️ "And here we have a rare\n21st century laser\nNotice the fine craftsmanship"', {
size: 38,
fill: 0x8B4513
});
museumText.anchor.set(0.5, 0.5);
museumText.x = player.x;
museumText.y = player.y - 150;
game.addChild(museumText);
player.children[0].tint = 0x8B4513;
player.speed = 1; // Move slowly like in a museum
LK.setTimeout(function () {
if (player) player.speed = 5;
museumText.destroy();
}, 4000);
}
// BUG 108: Asteroids randomly become LinkedIn motivational posts
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var linkedInText = new Text2('💼 "Just crushed my Q4 goals!\nGrateful for this journey\n#Blessed #RockLife"', {
size: 28,
fill: 0x0077B5
});
linkedInText.anchor.set(0.5, 0.5);
linkedInText.x = asteroids[i].x;
linkedInText.y = asteroids[i].y - 90;
game.addChild(linkedInText);
asteroids[i].children[0].tint = 0x0077B5;
tween(linkedInText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
linkedInText.destroy();
}
});
}
}
// BUG 109: Boss randomly becomes a late-night TV host
if (Math.random() < 0.007 && boss) {
var lateNightText = new Text2('📺 "So I was at the space station\nthe other day...\n*cue laugh track*"', {
size: 40,
fill: 0x9400D3
});
lateNightText.anchor.set(0.5, 0.5);
lateNightText.x = boss.x;
lateNightText.y = boss.y - 200;
game.addChild(lateNightText);
boss.children[0].tint = 0x9400D3;
LK.getSound('powerup').play(); // Laugh track
tween(lateNightText, {
alpha: 0
}, {
duration: 4500,
onFinish: function onFinish() {
lateNightText.destroy();
}
});
}
// BUG 110: Powerups randomly become conspiracy theories
if (Math.random() < 0.011) {
for (var i = 0; i < powerups.length; i++) {
var conspiracyTexts = ['👁️ "Lasers are controlled\nby the Illuminati"', '👁️ "Birds aren\'t real,\nthey\'re laser drones"', '👁️ "The moon is made\nof compressed lasers"'];
var conspirText = new Text2(conspiracyTexts[Math.floor(Math.random() * conspiracyTexts.length)], {
size: 26,
fill: 0x00FF00
});
conspirText.anchor.set(0.5, 0.5);
conspirText.x = powerups[i].x;
conspirText.y = powerups[i].y - 80;
game.addChild(conspirText);
powerups[i].children[0].tint = 0x00FF00;
tween(conspirText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
conspirText.destroy();
}
});
}
}
// BUG 111: Enemy lasers randomly become product reviews
if (Math.random() < 0.014) {
for (var i = 0; i < enemyLasers.length; i++) {
var productReviews = ['⭐⭐⭐⭐⭐ "Great laser!\nFast shipping"', '⭐ "Broke after one use\nWould not recommend"', '⭐⭐⭐ "Decent quality\nfor the price"'];
var reviewText = new Text2(productReviews[Math.floor(Math.random() * productReviews.length)], {
size: 20,
fill: 0xFFD700
});
reviewText.anchor.set(0.5, 0.5);
reviewText.x = enemyLasers[i].x;
reviewText.y = enemyLasers[i].y - 40;
game.addChild(reviewText);
enemyLasers[i].children[0].tint = 0xFFD700;
tween(reviewText, {
alpha: 0
}, {
duration: 2200,
onFinish: function onFinish() {
reviewText.destroy();
}
});
}
}
// BUG 112: Game randomly spawns fake news headlines
if (Math.random() < 0.002) {
var newsHeadlines = ['📰 "LOCAL MAN DISCOVERS\nFIRE IS HOT"', '📰 "SCIENTISTS BAFFLED:\nWATER IS WET"', '📰 "BREAKING: SKY CONFIRMED\nTO BE BLUE"'];
var newsText = new Text2(newsHeadlines[Math.floor(Math.random() * newsHeadlines.length)], {
size: 50,
fill: 0x000080
});
newsText.anchor.set(0.5, 0.5);
newsText.x = 1024;
newsText.y = 600;
game.addChild(newsText);
LK.setTimeout(function () {
newsText.destroy();
}, 5000);
}
// BUG 113: Explosions randomly become cooking shows
if (Math.random() < 0.01 && explosions.length > 0) {
var cookingShowText = new Text2('👨🍳 "Today we\'re making\nExplosion Flambé!\nAdd a touch of plasma..."', {
size: 38,
fill: 0xFF6347
});
cookingShowText.anchor.set(0.5, 0.5);
cookingShowText.x = explosions[0].x;
cookingShowText.y = explosions[0].y - 80;
game.addChild(cookingShowText);
tween(cookingShowText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
cookingShowText.destroy();
}
});
}
// BUG 114: Enemies randomly become uber drivers asking for ratings
if (Math.random() < 0.006 && enemies.length > 0) {
var uberRatingText = new Text2('🚗 "How was your ride?\nPlease rate 5 stars!\nTips appreciated!"', {
size: 32,
fill: 0x000000
});
uberRatingText.anchor.set(0.5, 0.5);
uberRatingText.x = enemies[0].x;
uberRatingText.y = enemies[0].y - 100;
game.addChild(uberRatingText);
enemies[0].children[0].tint = 0x000000;
tween(uberRatingText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
uberRatingText.destroy();
}
});
}
// BUG 115: Player randomly becomes a sports announcer
if (Math.random() < 0.006) {
var announcerText = new Text2('🎤 "AND DOWN THE FIELD HE GOES!\nWHAT A SPECTACULAR SHOT!\nTHE CROWD GOES WILD!"', {
size: 40,
fill: 0xFF4500
});
announcerText.anchor.set(0.5, 0.5);
announcerText.x = player.x;
announcerText.y = player.y - 150;
game.addChild(announcerText);
player.children[0].tint = 0xFF4500;
tween(announcerText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
announcerText.destroy();
}
});
}
// BUG 116: Asteroids randomly become Amazon delivery notifications
if (Math.random() < 0.009) {
for (var i = 0; i < asteroids.length; i++) {
var deliveryText = new Text2('📦 "Your package has been\ndelivered to your door!\nRate your delivery experience"', {
size: 28,
fill: 0xFF9500
});
deliveryText.anchor.set(0.5, 0.5);
deliveryText.x = asteroids[i].x;
deliveryText.y = asteroids[i].y - 90;
game.addChild(deliveryText);
asteroids[i].children[0].tint = 0xFF9500;
tween(deliveryText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
deliveryText.destroy();
}
});
}
}
// BUG 117: Boss randomly becomes a meditation instructor
if (Math.random() < 0.007 && boss) {
var meditationInstructorText = new Text2('🧘 "Close your eyes and breathe...\nFeel the laser energy\nflowing through you"', {
size: 38,
fill: 0x20B2AA
});
meditationInstructorText.anchor.set(0.5, 0.5);
meditationInstructorText.x = boss.x;
meditationInstructorText.y = boss.y - 200;
game.addChild(meditationInstructorText);
boss.children[0].tint = 0x20B2AA;
boss.speed *= 0.1; // Move very slowly
LK.setTimeout(function () {
if (boss) boss.speed *= 10;
meditationInstructorText.destroy();
}, 4000);
}
// BUG 118: Powerups randomly become Netflix recommendations
if (Math.random() < 0.012) {
for (var i = 0; i < powerups.length; i++) {
var netflixTexts = ['📺 "Because you watched\n"Space Lasers"\nTry: "More Space Lasers"', '📺 "New episodes available!\n"Asteroid Hunters"\nSeason 47 now streaming"'];
var netflixText = new Text2(netflixTexts[Math.floor(Math.random() * netflixTexts.length)], {
size: 26,
fill: 0xE50914
});
netflixText.anchor.set(0.5, 0.5);
netflixText.x = powerups[i].x;
netflixText.y = powerups[i].y - 80;
game.addChild(netflixText);
powerups[i].children[0].tint = 0xE50914;
tween(netflixText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
netflixText.destroy();
}
});
}
}
// BUG 119: Enemy lasers randomly become YouTube comments
if (Math.random() < 0.016) {
for (var i = 0; i < enemyLasers.length; i++) {
var youtubeComments = ['💬 "First!"', '💬 "Like if you\'re watching in 2024"', '💬 "Who\'s here from TikTok?"', '💬 "This video changed my life"', '💬 "Subscribe for good luck"'];
var commentText = new Text2(youtubeComments[Math.floor(Math.random() * youtubeComments.length)], {
size: 22,
fill: 0xFF0000
});
commentText.anchor.set(0.5, 0.5);
commentText.x = enemyLasers[i].x;
commentText.y = enemyLasers[i].y - 35;
game.addChild(commentText);
enemyLasers[i].children[0].tint = 0xFF0000;
tween(commentText, {
alpha: 0
}, {
duration: 1800,
onFinish: function onFinish() {
commentText.destroy();
}
});
}
}
// BUG 120: Game randomly becomes a weather app
if (Math.random() < 0.002) {
var weatherAppText = new Text2('⛅ "Today: Chance of lasers 100%\nTomorrow: Scattered explosions\nUV Index: DANGER"', {
size: 45,
fill: 0x87CEEB
});
weatherAppText.anchor.set(0.5, 0.5);
weatherAppText.x = 1024;
weatherAppText.y = 1366;
game.addChild(weatherAppText);
LK.setTimeout(function () {
weatherAppText.destroy();
}, 5000);
}
// BUG 121: Explosions randomly become wedding announcements
if (Math.random() < 0.01 && explosions.length > 0) {
var weddingAnnouncementText = new Text2('💒 "Mr. Laser & Ms. Target\nare pleased to announce\ntheir explosive union!"', {
size: 40,
fill: 0xFF69B4
});
weddingAnnouncementText.anchor.set(0.5, 0.5);
weddingAnnouncementText.x = explosions[0].x;
weddingAnnouncementText.y = explosions[0].y - 80;
game.addChild(weddingAnnouncementText);
tween(weddingAnnouncementText, {
alpha: 0,
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 4000,
onFinish: function onFinish() {
weddingAnnouncementText.destroy();
}
});
}
// BUG 122: Enemies randomly become telemarketers
if (Math.random() < 0.006 && enemies.length > 0) {
var telemarketerText = new Text2('📞 "Have I got a deal for you!\nExtended laser warranty\nfor only $99.99!"', {
size: 32,
fill: 0x4B0082
});
telemarketerText.anchor.set(0.5, 0.5);
telemarketerText.x = enemies[0].x;
telemarketerText.y = enemies[0].y - 120;
game.addChild(telemarketerText);
enemies[0].children[0].tint = 0x4B0082;
tween(telemarketerText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
telemarketerText.destroy();
}
});
}
// BUG 123: Player ship randomly becomes a game show contestant
if (Math.random() < 0.005) {
var contestantText = new Text2('🎯 "I\'d like to buy a vowel!\nIs there an E in LASER?\nFinal answer!"', {
size: 38,
fill: 0xFFD700
});
contestantText.anchor.set(0.5, 0.5);
contestantText.x = player.x;
contestantText.y = player.y - 150;
game.addChild(contestantText);
player.children[0].tint = 0xFFD700;
tween(contestantText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
contestantText.destroy();
}
});
}
// BUG 124: Asteroids randomly become social media influencers selling courses
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var influencerCourseText = new Text2('💰 "Learn my secrets!\n$5000 course on\nhow to be a rock!"', {
size: 28,
fill: 0xFF69B4
});
influencerCourseText.anchor.set(0.5, 0.5);
influencerCourseText.x = asteroids[i].x;
influencerCourseText.y = asteroids[i].y - 90;
game.addChild(influencerCourseText);
asteroids[i].children[0].tint = 0xFF69B4;
tween(influencerCourseText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
influencerCourseText.destroy();
}
});
}
}
// BUG 125: Boss randomly becomes a parking meter
if (Math.random() < 0.007 && boss) {
var parkingMeterText = new Text2('🅿️ "EXPIRED!\nInsert coins to continue\nNo parking 2AM-6AM"', {
size: 40,
fill: 0x808080
});
parkingMeterText.anchor.set(0.5, 0.5);
parkingMeterText.x = boss.x;
parkingMeterText.y = boss.y - 200;
game.addChild(parkingMeterText);
boss.children[0].tint = 0x808080;
boss.speed = 0; // Can't move, it's a parking meter
LK.setTimeout(function () {
if (boss) boss.speed = 2;
parkingMeterText.destroy();
}, 4000);
}
// BUG 126: Powerups randomly become spam calls
if (Math.random() < 0.011) {
for (var i = 0; i < powerups.length; i++) {
var spamCallTexts = ['📱 "Your car warranty\nis about to expire!"', '📱 "You owe the IRS $5000!\nPay with gift cards!"', '📱 "Congratulations!\nYou won a free cruise!"'];
var spamCallText = new Text2(spamCallTexts[Math.floor(Math.random() * spamCallTexts.length)], {
size: 26,
fill: 0xFF0000
});
spamCallText.anchor.set(0.5, 0.5);
spamCallText.x = powerups[i].x;
spamCallText.y = powerups[i].y - 80;
game.addChild(spamCallText);
powerups[i].children[0].tint = 0xFF0000;
tween(spamCallText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
spamCallText.destroy();
}
});
}
}
// BUG 127: Enemy lasers randomly become GPS directions that are wrong
if (Math.random() < 0.014) {
for (var i = 0; i < enemyLasers.length; i++) {
var wrongGPSTexts = ['🗺️ "Turn right... no left... recalculating"', '🗺️ "In 500 feet, turn into\nthe sun"', '🗺️ "Make a U-turn\nin space"'];
var wrongGPSText = new Text2(wrongGPSTexts[Math.floor(Math.random() * wrongGPSTexts.length)], {
size: 22,
fill: 0x32CD32
});
wrongGPSText.anchor.set(0.5, 0.5);
wrongGPSText.x = enemyLasers[i].x;
wrongGPSText.y = enemyLasers[i].y - 40;
game.addChild(wrongGPSText);
enemyLasers[i].children[0].tint = 0x32CD32;
tween(wrongGPSText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
wrongGPSText.destroy();
}
});
}
}
// BUG 128: Game randomly becomes a GPS that only gives directions to McDonald's
if (Math.random() < 0.002) {
var mcdonaldsGPSText = new Text2('🗺️ SPACE GPS SAYS:\n"All roads lead to McDonald\'s"\n"Turn right for Big Mac"', {
size: 50,
fill: 0xFF0000
});
mcdonaldsGPSText.anchor.set(0.5, 0.5);
mcdonaldsGPSText.x = 1024;
mcdonaldsGPSText.y = 1366;
game.addChild(mcdonaldsGPSText);
LK.setTimeout(function () {
mcdonaldsGPSText.destroy();
}, 5000);
}
// BUG 129: Explosions randomly become Amazon package delivery updates
if (Math.random() < 0.01 && explosions.length > 0) {
var packageUpdateText = new Text2('📦 "Your explosion has been\ndelivered and signed for\nby: DESTRUCTION"', {
size: 38,
fill: 0xFF9500
});
packageUpdateText.anchor.set(0.5, 0.5);
packageUpdateText.x = explosions[0].x;
packageUpdateText.y = explosions[0].y - 80;
game.addChild(packageUpdateText);
tween(packageUpdateText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
packageUpdateText.destroy();
}
});
}
// BUG 130: Enemies randomly become Siri giving unhelpful responses
if (Math.random() < 0.006 && enemies.length > 0) {
var siriTexts = ['🗣️ "I found 47 results for\n\'How to destroy humanity\'"', '🗣️ "I didn\'t catch that.\nDid you say \'pizza\'?"', '🗣️ "Here\'s what I found\nabout laser surgery"'];
var siriText = new Text2(siriTexts[Math.floor(Math.random() * siriTexts.length)], {
size: 32,
fill: 0x007AFF
});
siriText.anchor.set(0.5, 0.5);
siriText.x = enemies[0].x;
siriText.y = enemies[0].y - 120;
game.addChild(siriText);
enemies[0].children[0].tint = 0x007AFF;
tween(siriText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
siriText.destroy();
}
});
}
// BUG 131: Player randomly becomes a GPS with a thick accent
if (Math.random() < 0.005) {
var accentGPSText = new Text2('🗺️ "G\'day mate! Turn roight\nat the next croikey!\nYou\'ve reached your destinoition!"', {
size: 38,
fill: 0x00FF7F
});
accentGPSText.anchor.set(0.5, 0.5);
accentGPSText.x = player.x;
accentGPSText.y = player.y - 150;
game.addChild(accentGPSText);
player.children[0].tint = 0x00FF7F;
tween(accentGPSText, {
alpha: 0
}, {
duration: 4000,
onFinish: function onFinish() {
accentGPSText.destroy();
}
});
}
// BUG 132: Asteroids randomly become yelp reviews for space
if (Math.random() < 0.008) {
for (var i = 0; i < asteroids.length; i++) {
var yelpText = new Text2('⭐⭐ "Space is too dark\nand there\'s no WiFi\n2/5 stars - Karen"', {
size: 28,
fill: 0xFF6600
});
yelpText.anchor.set(0.5, 0.5);
yelpText.x = asteroids[i].x;
yelpText.y = asteroids[i].y - 90;
game.addChild(yelpText);
asteroids[i].children[0].tint = 0xFF6600;
tween(yelpText, {
alpha: 0
}, {
duration: 3500,
onFinish: function onFinish() {
yelpText.destroy();
}
});
}
}
// BUG 133: Boss randomly becomes a voice assistant trying to order pizza
if (Math.random() < 0.007 && boss) {
var pizzaOrderText = new Text2('🍕 "Ordering one large pepperoni\nto coordinates 42, 69\nEstimated delivery: 30 minutes"', {
size: 38,
fill: 0xFF6347
});
pizzaOrderText.anchor.set(0.5, 0.5);
pizzaOrderText.x = boss.x;
pizzaOrderText.y = boss.y - 200;
game.addChild(pizzaOrderText);
boss.children[0].tint = 0xFF6347;
tween(pizzaOrderText, {
alpha: 0
}, {
duration: 4500,
onFinish: function onFinish() {
pizzaOrderText.destroy();
}
});
}
// BUG 134: Powerups randomly become Windows error messages
if (Math.random() < 0.01) {
for (var i = 0; i < powerups.length; i++) {
var windowsErrors = ['💻 "PowerUp.exe has stopped\nworking"', '💻 "Please wait while Windows\nconfigures your laser"', '💻 "A problem caused the\nprogram to stop working"'];
var errorText = new Text2(windowsErrors[Math.floor(Math.random() * windowsErrors.length)], {
size: 26,
fill: 0x0078D4
});
errorText.anchor.set(0.5, 0.5);
errorText.x = powerups[i].x;
errorText.y = powerups[i].y - 80;
game.addChild(errorText);
powerups[i].children[0].tint = 0x0078D4;
tween(errorText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
errorText.destroy();
}
});
}
}
// BUG 135: Enemy lasers randomly become autocomplete suggestions
if (Math.random() < 0.015) {
for (var i = 0; i < enemyLasers.length; i++) {
var autocompleteTexts = ['🔍 "how to destroy"', '🔍 "why is my laser"', '🔍 "space for rent near me"', '🔍 "am I real or just code"'];
var autocompleteText = new Text2(autocompleteTexts[Math.floor(Math.random() * autocompleteTexts.length)], {
size: 22,
fill: 0x4285F4
});
autocompleteText.anchor.set(0.5, 0.5);
autocompleteText.x = enemyLasers[i].x;
autocompleteText.y = enemyLasers[i].y - 35;
game.addChild(autocompleteText);
enemyLasers[i].children[0].tint = 0x4285F4;
tween(autocompleteText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
autocompleteText.destroy();
}
});
}
}
// BUG 136: Game randomly becomes a broken AI chatbot
if (Math.random() < 0.002) {
var chatbotText = new Text2('🤖 AI ASSISTANT ACTIVATED:\n"I am sorry, I do not understand\nyour request for \'shooting lasers\'"', {
size: 45,
fill: 0x9E9E9E
});
chatbotText.anchor.set(0.5, 0.5);
chatbotText.x = 1024;
chatbotText.y = 1366;
game.addChild(chatbotText);
LK.setTimeout(function () {
chatbotText.destroy();
}, 5000);
}
// Handle collisions
handleCollisions();
};
space ship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
asteroid. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
space enemy. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
explosion. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
shield. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
powerup. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
space boss ufo. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
green laser. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
red laser. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
space ship. Space ship that’s broken down. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat