User prompt
Add ganymade because of the planets to destroy (Deals 100% health and Cooldown is 15 second)
User prompt
Add gneymade because of the planets to destroy (Deals 100% health and Cooldown is 15 second)
User prompt
INCREASE THE HEALTH OF THE SUN FROM 100% TO 1000% WITHOUT "%"
User prompt
Again, put the start game and store text at the bottom
User prompt
I CANT SEE SUNS "50 LEVEL" WRİTİNG
User prompt
Under the sun's "50 level" inscription
User prompt
The level of the sun is 50 and write it.
User prompt
Take the start game and store text down a little bit and put jupiter's text at the Under again
User prompt
Writing of the Sun and Jupiter Put it on top
User prompt
Write on Jupiter in 10 levels. Write on sun in 50 levels
User prompt
Take the start game button down a little bit, put the store under it
User prompt
Divide into Planets and Stars, planets. Add stars to stars (Sun)
User prompt
Add sun (Opens At 50 level and gives 50 Levels And Health is 1000)
User prompt
Add max level (50) if we reach max level we get 3500 coins.and we played a game we cant get level but we can get coins
User prompt
Delete load and save
User prompt
Let Mars give 2 levels,Mercury give 1 level,venus give 3 level,Earth Give 5 level,Jupiter 10 level
User prompt
Add mercury (Health is 60%)
User prompt
Even though I closed and opened the game, our money is still there. When I close and open the game, everything is reset. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
When we buy something in the store, we run out of money
User prompt
I still see store load save at the game. Not just on the home screen, not in the game ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
When destroying the planet, load, save, store appear. Just get it on the planet selection screen ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
I cant see load, save, store ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
As soon as I start the game from the beginning, my level still appears, when I close and open the game, everything is reset. But add the Save button and let's save ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
The Store still appears when the game starts
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'visible')' in or related to this line: 'startButton.visible = true;' Line Number: 827
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Bomb = Container.expand(function () { var self = Container.call(this); var bombGraphics = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); self.timer = 120; // 2 seconds at 60fps self.active = false; self.activate = function () { self.active = true; }; self.update = function () { if (!self.active) return; self.timer--; if (self.timer <= 0) { self.active = false; onBombExplode(self.x, self.y); } }; return self; }); var Explosion = Container.expand(function () { var self = Container.call(this); var explosionGraphics = self.attachAsset('explosion', { anchorX: 0.5, anchorY: 0.5 }); self.lifetime = 60; // 1 second self.maxLifetime = 60; self.update = function () { self.lifetime--; var alpha = self.lifetime / self.maxLifetime; explosionGraphics.alpha = alpha; if (self.lifetime <= 0) { self.destroy(); var index = explosions.indexOf(self); if (index > -1) explosions.splice(index, 1); } }; return self; }); var Ganymede = Container.expand(function () { var self = Container.call(this); var ganymedeGraphics = self.attachAsset('ganymede', { anchorX: 0.5, anchorY: 0.5 }); self.targetX = 0; self.targetY = 0; self.speed = 4; self.active = false; self.launch = function (targetX, targetY) { self.targetX = targetX; self.targetY = targetY; self.active = true; var angle = Math.atan2(targetY - self.y, targetX - self.x); self.velocityX = Math.cos(angle) * self.speed; self.velocityY = Math.sin(angle) * self.speed; }; self.update = function () { if (!self.active) return; self.x += self.velocityX; self.y += self.velocityY; var distance = Math.sqrt(Math.pow(self.targetX - self.x, 2) + Math.pow(self.targetY - self.y, 2)); if (distance < 50) { self.active = false; onGanymedeHit(self.x, self.y); } }; return self; }); var Meteor = Container.expand(function () { var self = Container.call(this); var meteorGraphics = self.attachAsset('meteor', { anchorX: 0.5, anchorY: 0.5 }); self.targetX = 0; self.targetY = 0; self.speed = 8; self.active = false; self.launch = function (targetX, targetY) { self.targetX = targetX; self.targetY = targetY; self.active = true; var angle = Math.atan2(targetY - self.y, targetX - self.x); self.velocityX = Math.cos(angle) * self.speed; self.velocityY = Math.sin(angle) * self.speed; }; self.update = function () { if (!self.active) return; self.x += self.velocityX; self.y += self.velocityY; var distance = Math.sqrt(Math.pow(self.targetX - self.x, 2) + Math.pow(self.targetY - self.y, 2)); if (distance < 30) { self.active = false; onMeteorHit(self.x, self.y); } }; return self; }); var Moon = Container.expand(function () { var self = Container.call(this); var moonGraphics = self.attachAsset('moon', { anchorX: 0.5, anchorY: 0.5 }); self.targetX = 0; self.targetY = 0; self.speed = 6; self.active = false; self.launch = function (targetX, targetY) { self.targetX = targetX; self.targetY = targetY; self.active = true; var angle = Math.atan2(targetY - self.y, targetX - self.x); self.velocityX = Math.cos(angle) * self.speed; self.velocityY = Math.sin(angle) * self.speed; }; self.update = function () { if (!self.active) return; self.x += self.velocityX; self.y += self.velocityY; var distance = Math.sqrt(Math.pow(self.targetX - self.x, 2) + Math.pow(self.targetY - self.y, 2)); if (distance < 40) { self.active = false; onMoonHit(self.x, self.y); } }; return self; }); var Planet = Container.expand(function (planetType) { var self = Container.call(this); self.planetType = planetType || 'planet'; var planetGraphics = self.attachAsset(self.planetType, { anchorX: 0.5, anchorY: 0.5 }); // Different planets have different health values switch (self.planetType) { case 'mercury': self.health = 60; self.maxHealth = 100; break; case 'venus': self.health = 95; self.maxHealth = 100; break; case 'mars': self.health = 85; self.maxHealth = 100; break; case 'jupiter': self.health = 350; self.maxHealth = 350; break; case 'sun': self.health = 10000; self.maxHealth = 10000; break; default: self.health = 100; self.maxHealth = 100; break; } self.destructionZones = []; self.takeDamage = function (amount, x, y) { self.health -= amount; var isDestroyed = self.health <= 0; if (isDestroyed) { self.health = 0; } // Add destruction zone var destructionZone = { x: x - self.x, y: y - self.y, size: amount * 2 }; self.destructionZones.push(destructionZone); // Update planet appearance based on health var healthPercent = self.health / self.maxHealth; if (isDestroyed) { planetGraphics.tint = 0x8D6E63; // Brown for destroyed } else if (healthPercent > 0.7) { planetGraphics.tint = 0x4CAF50; // Green } else if (healthPercent > 0.4) { planetGraphics.tint = 0xFFEB3B; // Yellow } else { planetGraphics.tint = 0xFF5722; // Orange } return isDestroyed; }; return self; }); var PlanetButton = Container.expand(function (planetType) { var self = Container.call(this); var buttonGraphics = self.attachAsset('planetButton', { anchorX: 0.5, anchorY: 0.5 }); self.planetType = planetType; self.selected = false; // Add planet icon var planetIcon = self.attachAsset(planetType, { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3 }); // Add planet name text var planetName = planetType.charAt(0).toUpperCase() + planetType.slice(1); var nameText = new Text2(planetName, { size: 30, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0); nameText.y = 80; self.addChild(nameText); self.setSelected = function (selected) { self.selected = selected; if (selected) { buttonGraphics.tint = 0xFFFFFF; } else { buttonGraphics.tint = 0x888888; } }; self.down = function (x, y, obj) { selectPlanet(self.planetType); }; return self; }); var WeaponButton = Container.expand(function (weaponType) { var self = Container.call(this); var buttonGraphics = self.attachAsset('weaponButton', { anchorX: 0.5, anchorY: 0.5 }); self.weaponType = weaponType; self.selected = false; // Add weapon icon var iconAsset; switch (weaponType) { case 'meteor': iconAsset = 'meteor'; break; case 'bomb': iconAsset = 'bomb'; break; case 'laser': iconAsset = 'laser'; break; case 'blackhole': iconAsset = 'blackhole'; break; case 'moon': iconAsset = 'moon'; break; case 'ganymede': iconAsset = 'ganymede'; break; } var icon = self.attachAsset(iconAsset, { anchorX: 0.5, anchorY: 0.5, scaleX: 0.7, scaleY: 0.7 }); self.setSelected = function (selected) { self.selected = selected; if (selected) { buttonGraphics.tint = 0xFFFFFF; } else { buttonGraphics.tint = 0x888888; } }; self.down = function (x, y, obj) { selectWeapon(self.weaponType); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000011 }); /**** * Game Code ****/ var planet; var meteors = []; var moons = []; var ganymedes = []; var bombs = []; var explosions = []; var weaponButtons = []; var planetButtons = []; var selectedWeapon = 'meteor'; var selectedPlanetType = 'earth'; var planetDestroyed = false; var gameStarted = false; var level = 0; // Always start at 0, load from storage only when explicitly saved var jupiterRegenTimer = 0; var jupiterRegenInterval = 60; // 1 second at 60fps // Base weapon cooldowns (in ticks at 60fps) var baseCooldowns = { meteor: 120, // 2 seconds bomb: 180, // 3 seconds laser: 150, // 2.5 seconds blackhole: 300, // 5 seconds moon: 420, // 7 seconds ganymede: 900 // 15 seconds }; var lastWeaponUse = { meteor: -999, bomb: -999, laser: -999, blackhole: -999, moon: -999, ganymede: -999 }; var gameTicks = 0; var coins = 0; var storeOpen = false; var storeElements = []; // Weapon upgrade levels and costs var weaponUpgrades = { meteor: 0, bomb: 0, laser: 0, blackhole: 0, moon: 0, ganymede: 0 }; // Upgrade costs (increases with each level) var upgradeCosts = { meteor: [100, 200, 300, 500, 800], bomb: [150, 300, 450, 750, 1200], laser: [125, 250, 375, 625, 1000], blackhole: [250, 500, 750, 1250, 2000], moon: [300, 600, 900, 1500, 2400], ganymede: [500, 1000, 1500, 2500, 4000] }; // Calculate actual cooldowns based on upgrades var weaponCooldowns = { meteor: Math.max(30, baseCooldowns.meteor - weaponUpgrades.meteor * 15), bomb: Math.max(45, baseCooldowns.bomb - weaponUpgrades.bomb * 25), laser: Math.max(30, baseCooldowns.laser - weaponUpgrades.laser * 20), blackhole: Math.max(90, baseCooldowns.blackhole - weaponUpgrades.blackhole * 40), moon: Math.max(120, baseCooldowns.moon - weaponUpgrades.moon * 50), ganymede: Math.max(300, baseCooldowns.ganymede - weaponUpgrades.ganymede * 100) }; // UI Elements var healthTxt = new Text2('Planet Health: 100%', { size: 60, fill: 0xFFFFFF }); healthTxt.anchor.set(0.5, 0); LK.gui.top.addChild(healthTxt); // Level display var levelTxt = new Text2('Level: 0', { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); levelTxt.y = 70; LK.gui.top.addChild(levelTxt); // Coins display var coinsTxt = new Text2('Coins: 0', { size: 60, fill: 0xFFD700 }); coinsTxt.anchor.set(0.5, 0); coinsTxt.y = 140; LK.gui.top.addChild(coinsTxt); // Create planet selection title var planetSelectTitle = new Text2('Select Planet to Destroy', { size: 80, fill: 0xFFFFFF }); planetSelectTitle.anchor.set(0.5, 0.5); planetSelectTitle.x = 2048 / 2; planetSelectTitle.y = 400; game.addChild(planetSelectTitle); // Create planets section title var planetsTitle = new Text2('PLANETS', { size: 60, fill: 0xFFFFFF }); planetsTitle.anchor.set(0.5, 0.5); planetsTitle.x = 2048 / 2; planetsTitle.y = 2732 / 2 - 200; game.addChild(planetsTitle); // Create planet selection buttons var planetTypes = ['earth', 'mercury', 'venus', 'mars', 'jupiter']; var starTypes = ['sun']; for (var i = 0; i < planetTypes.length; i++) { var planetButton = new PlanetButton(planetTypes[i]); planetButton.x = 2048 / 2 + (i - 2) * 200; planetButton.y = 2732 / 2 - 100; // Add level reward text for Jupiter if (planetTypes[i] === 'jupiter') { var jupiterRewardText = new Text2('10 levels', { size: 25, fill: 0xFFD700 }); jupiterRewardText.anchor.set(0.5, 0); jupiterRewardText.y = 120; planetButton.addChild(jupiterRewardText); } // Lock Jupiter if level is less than 10 if (planetTypes[i] === 'jupiter' && level < 10) { planetButton.alpha = 0.3; planetButton.interactive = false; } planetButtons.push(planetButton); game.addChild(planetButton); } // Create stars section title var starsTitle = new Text2('STARS', { size: 60, fill: 0xFFD700 }); starsTitle.anchor.set(0.5, 0.5); starsTitle.x = 2048 / 2; starsTitle.y = 2732 / 2 + 50; game.addChild(starsTitle); // Create star selection buttons for (var i = 0; i < starTypes.length; i++) { var starButton = new PlanetButton(starTypes[i]); starButton.x = 2048 / 2 + (i - 0) * 200; starButton.y = 2732 / 2 + 150; // Add level reward text for Sun if (starTypes[i] === 'sun') { var sunRewardText = new Text2('50 levels', { size: 30, fill: 0xFFD700 }); sunRewardText.anchor.set(0.5, 0); sunRewardText.y = 120; starButton.addChild(sunRewardText); } // Lock Sun if level is less than 50 if (starTypes[i] === 'sun' && level < 50) { starButton.alpha = 0.3; starButton.interactive = false; } planetButtons.push(starButton); game.addChild(starButton); } // Initial planet selection will be done by player // Initialize UI displays with stored values levelTxt.setText('Level: ' + level); coinsTxt.setText('Coins: ' + coins); // Create start game button var startButton = new Text2('START GAME', { size: 60, fill: 0x00FF00 }); startButton.anchor.set(0.5, 0.5); startButton.x = 2048 / 2; startButton.y = 2732 / 2 + 350; game.addChild(startButton); startButton.down = function (x, y, obj) { if (selectedPlanetType && !gameStarted) { startGame(); } }; // Create store button var storeButton = new Text2('STORE', { size: 60, fill: 0xFFD700 }); storeButton.anchor.set(0.5, 0.5); storeButton.x = 2048 / 2; storeButton.y = 2732 / 2 + 450; game.addChild(storeButton); storeButton.down = function (x, y, obj) { if (!gameStarted) { openStore(); } }; // Create weapon selection buttons var weaponTypes = ['meteor', 'bomb', 'laser', 'blackhole', 'moon', 'ganymede']; for (var i = 0; i < weaponTypes.length; i++) { var button = new WeaponButton(weaponTypes[i]); button.x = 150 + i * 140; button.y = 2732 - 150; weaponButtons.push(button); game.addChild(button); } // Select initial weapon selectWeapon('meteor'); // Don't load game data automatically on startup - players must click LOAD // Show main menu elements after all UI elements are created showMainMenu(); function selectPlanet(planetType) { // Check if Jupiter is locked if (planetType === 'jupiter' && level < 10) { return; // Don't select if locked } // Check if Sun is locked if (planetType === 'sun' && level < 50) { return; // Don't select if locked } selectedPlanetType = planetType; for (var i = 0; i < planetButtons.length; i++) { planetButtons[i].setSelected(planetButtons[i].planetType === planetType); } } function startGame() { gameStarted = true; // Hide planet selection UI for (var i = 0; i < planetButtons.length; i++) { planetButtons[i].visible = false; } // Remove title and start button planetSelectTitle.visible = false; planetsTitle.visible = false; starsTitle.visible = false; startButton.visible = false; // Hide store button during gameplay storeButton.visible = false; // Create selected planet planet = game.addChild(new Planet(selectedPlanetType)); planet.x = 2048 / 2; planet.y = 2732 / 2; // Reset Jupiter regeneration timer jupiterRegenTimer = 0; } function selectWeapon(weaponType) { selectedWeapon = weaponType; for (var i = 0; i < weaponButtons.length; i++) { weaponButtons[i].setSelected(weaponButtons[i].weaponType === weaponType); } } function onMeteorHit(x, y) { LK.getSound('meteorHit').play(); var destroyed = planet.takeDamage(15, x, y); createExplosion(x, y); if (destroyed && !planetDestroyed) { planetDestroyed = true; // Add levels based on planet type var levelsGained = 0; if (planet.planetType === 'earth') { levelsGained = 5; } else if (planet.planetType === 'mercury') { levelsGained = 1; } else if (planet.planetType === 'venus') { levelsGained = 3; } else if (planet.planetType === 'mars') { levelsGained = 2; } else if (planet.planetType === 'jupiter') { levelsGained = 10; } else if (planet.planetType === 'sun') { levelsGained = 50; } // Check if player reaches max level (50) with this gain var maxLevel = 50; var oldLevel = level; if (level < maxLevel) { var actualLevelsGained = Math.min(levelsGained, maxLevel - level); level += actualLevelsGained; // If we just reached max level, award bonus coins if (oldLevel < maxLevel && level >= maxLevel) { coins += 3500; // Max level bonus } // Award normal coins for levels gained coins += actualLevelsGained * 100; } else { // Already at max level, only award coins (no level progression) coins += levelsGained * 100; } storage.coins = coins; storage.level = level; // Update health display immediately when game is over var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1); healthTxt.setText(planetName + ': 0% Health'); LK.setTimeout(function () { resetToLevelSelection(); }, 2000); } } function onMoonHit(x, y) { LK.getSound('moonHit').play(); var destroyed = planet.takeDamage(50, x, y); createExplosion(x, y); if (destroyed && !planetDestroyed) { planetDestroyed = true; // Add levels based on planet type var levelsGained = 0; if (planet.planetType === 'earth') { levelsGained = 5; } else if (planet.planetType === 'mercury') { levelsGained = 1; } else if (planet.planetType === 'venus') { levelsGained = 3; } else if (planet.planetType === 'mars') { levelsGained = 2; } else if (planet.planetType === 'jupiter') { levelsGained = 10; } else if (planet.planetType === 'sun') { levelsGained = 50; } // Check if player reaches max level (50) with this gain var maxLevel = 50; var oldLevel = level; if (level < maxLevel) { var actualLevelsGained = Math.min(levelsGained, maxLevel - level); level += actualLevelsGained; // If we just reached max level, award bonus coins if (oldLevel < maxLevel && level >= maxLevel) { coins += 3500; // Max level bonus } // Award normal coins for levels gained coins += actualLevelsGained * 100; } else { // Already at max level, only award coins (no level progression) coins += levelsGained * 100; } storage.coins = coins; storage.level = level; // Update health display immediately when game is over var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1); healthTxt.setText(planetName + ': 0% Health'); LK.setTimeout(function () { resetToLevelSelection(); }, 2000); } } function onBombExplode(x, y) { LK.getSound('bombExplode').play(); var destroyed = planet.takeDamage(25, x, y); createExplosion(x, y); // Create multiple smaller explosions for effect for (var i = 0; i < 3; i++) { var offsetX = (Math.random() - 0.5) * 100; var offsetY = (Math.random() - 0.5) * 100; createExplosion(x + offsetX, y + offsetY); } if (destroyed && !planetDestroyed) { planetDestroyed = true; // Add levels based on planet type var levelsGained = 0; if (planet.planetType === 'earth') { levelsGained = 5; } else if (planet.planetType === 'mercury') { levelsGained = 1; } else if (planet.planetType === 'venus') { levelsGained = 3; } else if (planet.planetType === 'mars') { levelsGained = 2; } else if (planet.planetType === 'jupiter') { levelsGained = 10; } else if (planet.planetType === 'sun') { levelsGained = 50; } // Check if player reaches max level (50) with this gain var maxLevel = 50; var oldLevel = level; if (level < maxLevel) { var actualLevelsGained = Math.min(levelsGained, maxLevel - level); level += actualLevelsGained; // If we just reached max level, award bonus coins if (oldLevel < maxLevel && level >= maxLevel) { coins += 3500; // Max level bonus } // Award normal coins for levels gained coins += actualLevelsGained * 100; } else { // Already at max level, only award coins (no level progression) coins += levelsGained * 100; } storage.coins = coins; storage.level = level; // Update health display immediately when game is over var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1); healthTxt.setText(planetName + ': 0% Health'); LK.setTimeout(function () { resetToLevelSelection(); }, 2000); } } function onLaserFire(startX, startY, endX, endY) { LK.getSound('laserFire').play(); var destroyed = planet.takeDamage(20, endX, endY); createExplosion(endX, endY); if (destroyed && !planetDestroyed) { planetDestroyed = true; // Add levels based on planet type var levelsGained = 0; if (planet.planetType === 'earth') { levelsGained = 5; } else if (planet.planetType === 'mercury') { levelsGained = 1; } else if (planet.planetType === 'venus') { levelsGained = 3; } else if (planet.planetType === 'mars') { levelsGained = 2; } else if (planet.planetType === 'jupiter') { levelsGained = 10; } else if (planet.planetType === 'sun') { levelsGained = 50; } // Check if player reaches max level (50) with this gain var maxLevel = 50; var oldLevel = level; if (level < maxLevel) { var actualLevelsGained = Math.min(levelsGained, maxLevel - level); level += actualLevelsGained; // If we just reached max level, award bonus coins if (oldLevel < maxLevel && level >= maxLevel) { coins += 3500; // Max level bonus } // Award normal coins for levels gained coins += actualLevelsGained * 100; } else { // Already at max level, only award coins (no level progression) coins += levelsGained * 100; } storage.coins = coins; storage.level = level; // Update health display immediately when game is over var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1); healthTxt.setText(planetName + ': 0% Health'); LK.setTimeout(function () { resetToLevelSelection(); }, 2000); } } function onGanymedeHit(x, y) { LK.getSound('moonHit').play(); // Deal 100% of planet's current health as damage var destroyed = planet.takeDamage(planet.health, x, y); createExplosion(x, y); if (destroyed && !planetDestroyed) { planetDestroyed = true; // Add levels based on planet type var levelsGained = 0; if (planet.planetType === 'earth') { levelsGained = 5; } else if (planet.planetType === 'mercury') { levelsGained = 1; } else if (planet.planetType === 'venus') { levelsGained = 3; } else if (planet.planetType === 'mars') { levelsGained = 2; } else if (planet.planetType === 'jupiter') { levelsGained = 10; } else if (planet.planetType === 'sun') { levelsGained = 50; } // Check if player reaches max level (50) with this gain var maxLevel = 50; var oldLevel = level; if (level < maxLevel) { var actualLevelsGained = Math.min(levelsGained, maxLevel - level); level += actualLevelsGained; // If we just reached max level, award bonus coins if (oldLevel < maxLevel && level >= maxLevel) { coins += 3500; // Max level bonus } // Award normal coins for levels gained coins += actualLevelsGained * 100; } else { // Already at max level, only award coins (no level progression) coins += levelsGained * 100; } storage.coins = coins; storage.level = level; // Update health display immediately when game is over var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1); healthTxt.setText(planetName + ': 0 Health'); LK.setTimeout(function () { resetToLevelSelection(); }, 2000); } } function onBlackholeActivate(x, y) { LK.getSound('blackholeActivate').play(); var destroyed = planet.takeDamage(30, x, y); createExplosion(x, y); if (destroyed && !planetDestroyed) { planetDestroyed = true; // Add levels based on planet type var levelsGained = 0; if (planet.planetType === 'earth') { levelsGained = 5; } else if (planet.planetType === 'mercury') { levelsGained = 1; } else if (planet.planetType === 'venus') { levelsGained = 3; } else if (planet.planetType === 'mars') { levelsGained = 2; } else if (planet.planetType === 'jupiter') { levelsGained = 10; } else if (planet.planetType === 'sun') { levelsGained = 50; } // Check if player reaches max level (50) with this gain var maxLevel = 50; var oldLevel = level; if (level < maxLevel) { var actualLevelsGained = Math.min(levelsGained, maxLevel - level); level += actualLevelsGained; // If we just reached max level, award bonus coins if (oldLevel < maxLevel && level >= maxLevel) { coins += 3500; // Max level bonus } // Award normal coins for levels gained coins += actualLevelsGained * 100; } else { // Already at max level, only award coins (no level progression) coins += levelsGained * 100; } storage.coins = coins; storage.level = level; // Update health display immediately when game is over var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1); healthTxt.setText(planetName + ': 0% Health'); LK.setTimeout(function () { resetToLevelSelection(); }, 2000); } } function createExplosion(x, y) { var explosion = new Explosion(); explosion.x = x; explosion.y = y; explosions.push(explosion); game.addChild(explosion); } function openStore() { storeOpen = true; hideMainMenu(); // Create store background var storeBg = LK.getAsset('planetButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 12, scaleY: 15 }); storeBg.x = 2048 / 2; storeBg.y = 2732 / 2; storeBg.tint = 0x333366; game.addChild(storeBg); storeElements.push(storeBg); // Store title var storeTitle = new Text2('WEAPON UPGRADES', { size: 80, fill: 0xFFFFFF }); storeTitle.anchor.set(0.5, 0.5); storeTitle.x = 2048 / 2; storeTitle.y = 300; game.addChild(storeTitle); storeElements.push(storeTitle); // Create upgrade buttons for each weapon var weaponNames = ['meteor', 'bomb', 'laser', 'blackhole', 'moon', 'ganymede']; for (var i = 0; i < weaponNames.length; i++) { createUpgradeButton(weaponNames[i], i); } // Close store button var closeButton = new Text2('CLOSE', { size: 60, fill: 0xFF5555 }); closeButton.anchor.set(0.5, 0.5); closeButton.x = 2048 / 2; closeButton.y = 2400; game.addChild(closeButton); storeElements.push(closeButton); closeButton.down = function () { closeStore(); }; } function createUpgradeButton(weaponType, index) { var yPos = 600 + index * 300; var currentLevel = weaponUpgrades[weaponType]; var maxLevel = 5; var cost = currentLevel < maxLevel ? upgradeCosts[weaponType][currentLevel] : 0; // Weapon icon var icon = LK.getAsset(weaponType, { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); icon.x = 400; icon.y = yPos; game.addChild(icon); storeElements.push(icon); // Weapon name and level var weaponName = weaponType.charAt(0).toUpperCase() + weaponType.slice(1); var nameText = new Text2(weaponName + ' (Level ' + currentLevel + '/' + maxLevel + ')', { size: 50, fill: 0xFFFFFF }); nameText.anchor.set(0, 0.5); nameText.x = 550; nameText.y = yPos - 30; game.addChild(nameText); storeElements.push(nameText); // Cooldown info var currentCooldown = Math.max(30, baseCooldowns[weaponType] - currentLevel * getUpgradeReduction(weaponType)); var nextCooldown = currentLevel < maxLevel ? Math.max(30, baseCooldowns[weaponType] - (currentLevel + 1) * getUpgradeReduction(weaponType)) : currentCooldown; var cooldownText = new Text2('Cooldown: ' + (currentCooldown / 60).toFixed(1) + 's', { size: 40, fill: 0xCCCCCC }); cooldownText.anchor.set(0, 0.5); cooldownText.x = 550; cooldownText.y = yPos + 30; game.addChild(cooldownText); storeElements.push(cooldownText); // Upgrade button if (currentLevel < maxLevel) { var upgradeBtn = LK.getAsset('weaponButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.2, scaleY: 0.8 }); upgradeBtn.x = 1400; upgradeBtn.y = yPos; upgradeBtn.tint = coins >= cost ? 0x00AA00 : 0x666666; game.addChild(upgradeBtn); storeElements.push(upgradeBtn); var btnText = new Text2('UPGRADE\n' + cost + ' coins', { size: 30, fill: 0xFFFFFF }); btnText.anchor.set(0.5, 0.5); btnText.x = upgradeBtn.x; btnText.y = upgradeBtn.y; game.addChild(btnText); storeElements.push(btnText); if (coins >= cost) { upgradeBtn.down = function () { upgradeWeapon(weaponType); }; } } else { var maxText = new Text2('MAX LEVEL', { size: 40, fill: 0xFFD700 }); maxText.anchor.set(0.5, 0.5); maxText.x = 1400; maxText.y = yPos; game.addChild(maxText); storeElements.push(maxText); } } function getUpgradeReduction(weaponType) { switch (weaponType) { case 'meteor': return 15; case 'bomb': return 25; case 'laser': return 20; case 'blackhole': return 40; case 'moon': return 50; case 'ganymede': return 100; default: return 15; } } function upgradeWeapon(weaponType) { var cost = upgradeCosts[weaponType][weaponUpgrades[weaponType]]; if (coins >= cost && weaponUpgrades[weaponType] < 5) { coins -= cost; weaponUpgrades[weaponType]++; // Update storage immediately to persist the purchase storage.coins = coins; storage[weaponType + 'Upgrade'] = weaponUpgrades[weaponType]; // Update cooldowns weaponCooldowns[weaponType] = Math.max(30, baseCooldowns[weaponType] - weaponUpgrades[weaponType] * getUpgradeReduction(weaponType)); // Update coins display immediately coinsTxt.setText('Coins: ' + coins); // Refresh store display closeStore(); openStore(); } } function closeStore() { storeOpen = false; for (var i = 0; i < storeElements.length; i++) { storeElements[i].destroy(); } storeElements = []; showMainMenu(); } function hideMainMenu() { for (var i = 0; i < planetButtons.length; i++) { planetButtons[i].visible = false; } planetSelectTitle.visible = false; planetsTitle.visible = false; starsTitle.visible = false; startButton.visible = false; storeButton.visible = false; } function showMainMenu() { for (var i = 0; i < planetButtons.length; i++) { planetButtons[i].visible = true; } planetSelectTitle.visible = true; planetsTitle.visible = true; starsTitle.visible = true; startButton.visible = true; // Always show store button - players should be able to see upgrade options storeButton.visible = true; } function resetToLevelSelection() { // Reset game state gameStarted = false; planetDestroyed = false; // Clear all saved data to ensure fresh start on next game session storage.coins = 0; storage.level = 0; storage.meteorUpgrade = 0; storage.bombUpgrade = 0; storage.laserUpgrade = 0; storage.blackholeUpgrade = 0; storage.moonUpgrade = 0; storage.ganymedeUpgrade = 0; storage.gameSaved = false; // Clean up game objects if (planet) { planet.destroy(); planet = null; } // Clear arrays and destroy objects for (var i = meteors.length - 1; i >= 0; i--) { meteors[i].destroy(); } meteors = []; for (var i = moons.length - 1; i >= 0; i--) { moons[i].destroy(); } moons = []; for (var i = ganymedes.length - 1; i >= 0; i--) { ganymedes[i].destroy(); } ganymedes = []; for (var i = bombs.length - 1; i >= 0; i--) { bombs[i].destroy(); } bombs = []; for (var i = explosions.length - 1; i >= 0; i--) { explosions[i].destroy(); } explosions = []; // Close store if open if (storeOpen) { closeStore(); } // Show planet selection UI again for (var i = 0; i < planetButtons.length; i++) { planetButtons[i].visible = true; // Update Jupiter unlock status if (planetButtons[i].planetType === 'jupiter') { if (level >= 10) { planetButtons[i].alpha = 1.0; planetButtons[i].interactive = true; } else { planetButtons[i].alpha = 0.3; planetButtons[i].interactive = false; } } // Update Sun unlock status if (planetButtons[i].planetType === 'sun') { if (level >= 50) { planetButtons[i].alpha = 1.0; planetButtons[i].interactive = true; } else { planetButtons[i].alpha = 0.3; planetButtons[i].interactive = false; } } } planetSelectTitle.visible = true; planetsTitle.visible = true; starsTitle.visible = true; startButton.visible = true; storeButton.visible = true; // Reset planet selection selectedPlanetType = 'earth'; for (var i = 0; i < planetButtons.length; i++) { planetButtons[i].setSelected(false); } // Update UI displays with current values levelTxt.setText('Level: ' + level); coinsTxt.setText('Coins: ' + coins); } function isPlanetClick(x, y) { var distance = Math.sqrt(Math.pow(x - planet.x, 2) + Math.pow(y - planet.y, 2)); return distance < 200; } function canUseWeapon(weaponType) { var timeSinceLastUse = gameTicks - lastWeaponUse[weaponType]; return timeSinceLastUse >= weaponCooldowns[weaponType]; } function useWeapon(weaponType) { lastWeaponUse[weaponType] = gameTicks; } game.down = function (x, y, obj) { if (!gameStarted || planetDestroyed) return; if (isPlanetClick(x, y)) { // Check if weapon is on cooldown if (!canUseWeapon(selectedWeapon)) { return; // Weapon is on cooldown, do nothing } switch (selectedWeapon) { case 'meteor': var meteor = new Meteor(); meteor.x = Math.random() * 2048; meteor.y = -100; meteor.launch(x, y); meteors.push(meteor); game.addChild(meteor); useWeapon('meteor'); break; case 'bomb': var bomb = new Bomb(); bomb.x = x; bomb.y = y; bomb.activate(); bombs.push(bomb); game.addChild(bomb); useWeapon('bomb'); break; case 'laser': onLaserFire(x, 0, x, y); useWeapon('laser'); break; case 'blackhole': onBlackholeActivate(x, y); useWeapon('blackhole'); break; case 'moon': var moon = new Moon(); moon.x = Math.random() * 2048; moon.y = -100; moon.launch(x, y); moons.push(moon); game.addChild(moon); useWeapon('moon'); break; case 'ganymede': var ganymede = new Ganymede(); ganymede.x = Math.random() * 2048; ganymede.y = -100; ganymede.launch(x, y); ganymedes.push(ganymede); game.addChild(ganymede); useWeapon('ganymede'); break; } } }; game.update = function () { if (!gameStarted || planetDestroyed) return; // Increment game ticks for cooldown tracking gameTicks++; // Update meteors for (var i = meteors.length - 1; i >= 0; i--) { var meteor = meteors[i]; if (!meteor.active) { meteor.destroy(); meteors.splice(i, 1); } } // Update moons for (var i = moons.length - 1; i >= 0; i--) { var moon = moons[i]; if (!moon.active) { moon.destroy(); moons.splice(i, 1); } } // Update ganymedes for (var i = ganymedes.length - 1; i >= 0; i--) { var ganymede = ganymedes[i]; if (!ganymede.active) { ganymede.destroy(); ganymedes.splice(i, 1); } } // Update bombs for (var i = bombs.length - 1; i >= 0; i--) { var bomb = bombs[i]; if (!bomb.active) { bomb.destroy(); bombs.splice(i, 1); } } // Jupiter regeneration if (planet.planetType === 'jupiter' && planet.health > 0 && planet.health < planet.maxHealth) { jupiterRegenTimer++; if (jupiterRegenTimer >= jupiterRegenInterval) { jupiterRegenTimer = 0; // Reduce max health by 5 when regenerating planet.maxHealth -= 5; if (planet.maxHealth < 0) planet.maxHealth = 0; var regenAmount = planet.maxHealth * 0.05; // 5% of new max health var targetHealth = Math.min(planet.health + regenAmount, planet.maxHealth); // Use tween to smoothly animate health recovery tween(planet, { health: targetHealth }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { // Update planet appearance based on new health var healthPercent = planet.health / planet.maxHealth; var planetGraphics = planet.children[0]; // Get the planet graphics if (healthPercent > 0.7) { planetGraphics.tint = 0x4CAF50; // Green } else if (healthPercent > 0.4) { planetGraphics.tint = 0xFFEB3B; // Yellow } else { planetGraphics.tint = 0xFF5722; // Orange } } }); } } // Update UI var healthPercent = Math.round(planet.health / planet.maxHealth * 100); var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1); if (planet.planetType === 'jupiter') { healthTxt.setText(planetName + ': ' + Math.round(planet.health) + ' Health'); } else if (planet.planetType === 'sun') { healthTxt.setText(planetName + ': ' + Math.round(planet.health) + ' Health'); } else { healthTxt.setText(planetName + ': ' + healthPercent + '% Health'); } levelTxt.setText('Level: ' + level); coinsTxt.setText('Coins: ' + coins); };
===================================================================
--- original.js
+++ change.js
@@ -47,17 +47,17 @@
}
};
return self;
});
-var Gneymade = Container.expand(function () {
+var Ganymede = Container.expand(function () {
var self = Container.call(this);
- var gneymadeGraphics = self.attachAsset('gneymade', {
+ var ganymedeGraphics = self.attachAsset('ganymede', {
anchorX: 0.5,
anchorY: 0.5
});
self.targetX = 0;
self.targetY = 0;
- self.speed = 10;
+ self.speed = 4;
self.active = false;
self.launch = function (targetX, targetY) {
self.targetX = targetX;
self.targetY = targetY;
@@ -70,11 +70,11 @@
if (!self.active) return;
self.x += self.velocityX;
self.y += self.velocityY;
var distance = Math.sqrt(Math.pow(self.targetX - self.x, 2) + Math.pow(self.targetY - self.y, 2));
- if (distance < 35) {
+ if (distance < 50) {
self.active = false;
- onGneymadeHit(self.x, self.y);
+ onGanymedeHit(self.x, self.y);
}
};
return self;
});
@@ -263,8 +263,11 @@
break;
case 'moon':
iconAsset = 'moon';
break;
+ case 'ganymede':
+ iconAsset = 'ganymede';
+ break;
}
var icon = self.attachAsset(iconAsset, {
anchorX: 0.5,
anchorY: 0.5,
@@ -297,10 +300,10 @@
****/
var planet;
var meteors = [];
var moons = [];
+var ganymedes = [];
var bombs = [];
-var gneymades = [];
var explosions = [];
var weaponButtons = [];
var planetButtons = [];
var selectedWeapon = 'meteor';
@@ -321,17 +324,17 @@
blackhole: 300,
// 5 seconds
moon: 420,
// 7 seconds
- gneymade: 900 // 15 seconds
+ ganymede: 900 // 15 seconds
};
var lastWeaponUse = {
meteor: -999,
bomb: -999,
laser: -999,
blackhole: -999,
moon: -999,
- gneymade: -999
+ ganymede: -999
};
var gameTicks = 0;
var coins = 0;
var storeOpen = false;
@@ -342,27 +345,27 @@
bomb: 0,
laser: 0,
blackhole: 0,
moon: 0,
- gneymade: 0
+ ganymede: 0
};
// Upgrade costs (increases with each level)
var upgradeCosts = {
meteor: [100, 200, 300, 500, 800],
bomb: [150, 300, 450, 750, 1200],
laser: [125, 250, 375, 625, 1000],
blackhole: [250, 500, 750, 1250, 2000],
moon: [300, 600, 900, 1500, 2400],
- gneymade: [500, 1000, 1500, 2500, 4000]
+ ganymede: [500, 1000, 1500, 2500, 4000]
};
// Calculate actual cooldowns based on upgrades
var weaponCooldowns = {
meteor: Math.max(30, baseCooldowns.meteor - weaponUpgrades.meteor * 15),
bomb: Math.max(45, baseCooldowns.bomb - weaponUpgrades.bomb * 25),
laser: Math.max(30, baseCooldowns.laser - weaponUpgrades.laser * 20),
blackhole: Math.max(90, baseCooldowns.blackhole - weaponUpgrades.blackhole * 40),
moon: Math.max(120, baseCooldowns.moon - weaponUpgrades.moon * 50),
- gneymade: Math.max(300, baseCooldowns.gneymade - weaponUpgrades.gneymade * 100)
+ ganymede: Math.max(300, baseCooldowns.ganymede - weaponUpgrades.ganymede * 100)
};
// UI Elements
var healthTxt = new Text2('Planet Health: 100%', {
size: 60,
@@ -493,9 +496,9 @@
openStore();
}
};
// Create weapon selection buttons
-var weaponTypes = ['meteor', 'bomb', 'laser', 'blackhole', 'moon', 'gneymade'];
+var weaponTypes = ['meteor', 'bomb', 'laser', 'blackhole', 'moon', 'ganymede'];
for (var i = 0; i < weaponTypes.length; i++) {
var button = new WeaponButton(weaponTypes[i]);
button.x = 150 + i * 140;
button.y = 2732 - 150;
@@ -740,11 +743,12 @@
resetToLevelSelection();
}, 2000);
}
}
-function onBlackholeActivate(x, y) {
- LK.getSound('blackholeActivate').play();
- var destroyed = planet.takeDamage(30, x, y);
+function onGanymedeHit(x, y) {
+ LK.getSound('moonHit').play();
+ // Deal 100% of planet's current health as damage
+ var destroyed = planet.takeDamage(planet.health, x, y);
createExplosion(x, y);
if (destroyed && !planetDestroyed) {
planetDestroyed = true;
// Add levels based on planet type
@@ -781,24 +785,18 @@
storage.coins = coins;
storage.level = level;
// Update health display immediately when game is over
var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1);
- healthTxt.setText(planetName + ': 0% Health');
+ healthTxt.setText(planetName + ': 0 Health');
LK.setTimeout(function () {
resetToLevelSelection();
}, 2000);
}
}
-function onGneymadeHit(x, y) {
- LK.getSound('gneymadeActivate').play();
- var destroyed = planet.takeDamage(planet.health, x, y); // Deals 100% of current health
+function onBlackholeActivate(x, y) {
+ LK.getSound('blackholeActivate').play();
+ var destroyed = planet.takeDamage(30, x, y);
createExplosion(x, y);
- // Create multiple large explosions for dramatic effect
- for (var i = 0; i < 5; i++) {
- var offsetX = (Math.random() - 0.5) * 200;
- var offsetY = (Math.random() - 0.5) * 200;
- createExplosion(x + offsetX, y + offsetY);
- }
if (destroyed && !planetDestroyed) {
planetDestroyed = true;
// Add levels based on planet type
var levelsGained = 0;
@@ -834,9 +832,9 @@
storage.coins = coins;
storage.level = level;
// Update health display immediately when game is over
var planetName = planet.planetType === 'earth' ? 'Earth' : planet.planetType.charAt(0).toUpperCase() + planet.planetType.slice(1);
- healthTxt.setText(planetName + ': 0 Health');
+ healthTxt.setText(planetName + ': 0% Health');
LK.setTimeout(function () {
resetToLevelSelection();
}, 2000);
}
@@ -873,9 +871,9 @@
storeTitle.y = 300;
game.addChild(storeTitle);
storeElements.push(storeTitle);
// Create upgrade buttons for each weapon
- var weaponNames = ['meteor', 'bomb', 'laser', 'blackhole', 'moon', 'gneymade'];
+ var weaponNames = ['meteor', 'bomb', 'laser', 'blackhole', 'moon', 'ganymede'];
for (var i = 0; i < weaponNames.length; i++) {
createUpgradeButton(weaponNames[i], i);
}
// Close store button
@@ -981,9 +979,9 @@
case 'blackhole':
return 40;
case 'moon':
return 50;
- case 'gneymade':
+ case 'ganymede':
return 100;
default:
return 15;
}
@@ -1045,9 +1043,9 @@
storage.bombUpgrade = 0;
storage.laserUpgrade = 0;
storage.blackholeUpgrade = 0;
storage.moonUpgrade = 0;
- storage.gneymadeUpgrade = 0;
+ storage.ganymedeUpgrade = 0;
storage.gameSaved = false;
// Clean up game objects
if (planet) {
planet.destroy();
@@ -1061,16 +1059,16 @@
for (var i = moons.length - 1; i >= 0; i--) {
moons[i].destroy();
}
moons = [];
+ for (var i = ganymedes.length - 1; i >= 0; i--) {
+ ganymedes[i].destroy();
+ }
+ ganymedes = [];
for (var i = bombs.length - 1; i >= 0; i--) {
bombs[i].destroy();
}
bombs = [];
- for (var i = gneymades.length - 1; i >= 0; i--) {
- gneymades[i].destroy();
- }
- gneymades = [];
for (var i = explosions.length - 1; i >= 0; i--) {
explosions[i].destroy();
}
explosions = [];
@@ -1169,16 +1167,16 @@
moons.push(moon);
game.addChild(moon);
useWeapon('moon');
break;
- case 'gneymade':
- var gneymade = new Gneymade();
- gneymade.x = Math.random() * 2048;
- gneymade.y = -100;
- gneymade.launch(x, y);
- gneymades.push(gneymade);
- game.addChild(gneymade);
- useWeapon('gneymade');
+ case 'ganymede':
+ var ganymede = new Ganymede();
+ ganymede.x = Math.random() * 2048;
+ ganymede.y = -100;
+ ganymede.launch(x, y);
+ ganymedes.push(ganymede);
+ game.addChild(ganymede);
+ useWeapon('ganymede');
break;
}
}
};
@@ -1201,24 +1199,24 @@
moon.destroy();
moons.splice(i, 1);
}
}
+ // Update ganymedes
+ for (var i = ganymedes.length - 1; i >= 0; i--) {
+ var ganymede = ganymedes[i];
+ if (!ganymede.active) {
+ ganymede.destroy();
+ ganymedes.splice(i, 1);
+ }
+ }
// Update bombs
for (var i = bombs.length - 1; i >= 0; i--) {
var bomb = bombs[i];
if (!bomb.active) {
bomb.destroy();
bombs.splice(i, 1);
}
}
- // Update gneymades
- for (var i = gneymades.length - 1; i >= 0; i--) {
- var gneymade = gneymades[i];
- if (!gneymade.active) {
- gneymade.destroy();
- gneymades.splice(i, 1);
- }
- }
// Jupiter regeneration
if (planet.planetType === 'jupiter' && planet.health > 0 && planet.health < planet.maxHealth) {
jupiterRegenTimer++;
if (jupiterRegenTimer >= jupiterRegenInterval) {
Earth. In-Game asset. 2d. High contrast. No shadows
Moon. In-Game asset. 2d. High contrast. No shadows
Meteor. In-Game asset. 2d. High contrast. No shadows
Explosion. In-Game asset. 2d. High contrast. No shadows
Black hole. In-Game asset. 2d. High contrast. No shadows
Laser only. In-Game asset. 2d. High contrast. No shadows
Bomb. In-Game asset. 2d. High contrast. No shadows
Mars. In-Game asset. 2d. High contrast. No shadows
Venus. In-Game asset. 2d. High contrast. No shadows
Jupiter. In-Game asset. 2d. High contrast. No shadows
Mercury. In-Game asset. 2d. High contrast. No shadows
Sun. In-Game asset. 2d. High contrast. No shadows
Saturn. In-Game asset. 2d. High contrast. No shadows
Just laser, but ice. In-Game asset. 2d. High contrast. No shadows
İce Explosion. In-Game asset. 2d. High contrast. No shadows
Uranus. In-Game asset. 2d. High contrast. No shadows
Fireball. In-Game asset. 2d. High contrast. No shadows
Planet of fire, volcano, magma, lava. In-Game asset. 2d. High contrast. No shadows