/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { coins: 0, materialPerClick: 1, coinValue: 1, clickUpgradeCost: 10, valueUpgradeCost: 50, clickUpgradeLevel: 0, valueUpgradeLevel: 0, evolutionUpgradeCost: 100, evolutionLevel: 0, botActive: false, botLevel: 1, botUpgradeCost: 100, debugMode: false, infiniteCoinsMode: false }); /**** * Classes ****/ var CoinParticle = Container.expand(function () { var self = Container.call(this); var coin = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.init = function (startX, startY) { self.x = startX; self.y = startY; // Animate coin floating up tween(self, { y: startY - 200, alpha: 0 }, { duration: 1500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); // Scale animation tween(self, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeIn }); } }); }; return self; }); var DebugMenu = Container.expand(function () { var self = Container.call(this); var panel = self.attachAsset('debugPanel', { anchorX: 0.5, anchorY: 0.5 }); var closeBtn = self.addChild(LK.getAsset('debugCloseButton', { anchorX: 0.5, anchorY: 0.5 })); closeBtn.y = -400; var addCoinsBtn = self.addChild(LK.getAsset('debugActionButton', { anchorX: 0.5, anchorY: 0.5 })); addCoinsBtn.y = -300; var addMaterialsBtn = self.addChild(LK.getAsset('debugActionButton', { anchorX: 0.5, anchorY: 0.5 })); addMaterialsBtn.y = -230; var maxUpgradesBtn = self.addChild(LK.getAsset('debugActionButton', { anchorX: 0.5, anchorY: 0.5 })); maxUpgradesBtn.y = -160; var infiniteCoinsBtn = self.addChild(LK.getAsset('debugInfiniteCoinsButton', { anchorX: 0.5, anchorY: 0.5 })); infiniteCoinsBtn.y = -90; var infoBtn = self.addChild(LK.getAsset('debugActionButton', { anchorX: 0.5, anchorY: 0.5 })); infoBtn.y = -20; var closeText = new Text2('Close', { size: 30, fill: 0xFFFFFF }); closeText.anchor.set(0.5, 0.5); closeText.x = closeBtn.x; closeText.y = closeBtn.y; var addCoinsText = new Text2('Add 1000 Coins', { size: 40, fill: 0xFFFFFF }); addCoinsText.anchor.set(0.5, 0.5); addCoinsText.x = addCoinsBtn.x; addCoinsText.y = addCoinsBtn.y; var addMaterialsText = new Text2('Add Materials', { size: 40, fill: 0xFFFFFF }); addMaterialsText.anchor.set(0.5, 0.5); addMaterialsText.x = addMaterialsBtn.x; addMaterialsText.y = addMaterialsBtn.y; var infiniteCoinsText = new Text2('Infinite Coins: OFF', { size: 40, fill: 0xFFFFFF }); infiniteCoinsText.anchor.set(0.5, 0.5); infiniteCoinsText.x = infiniteCoinsBtn.x; infiniteCoinsText.y = infiniteCoinsBtn.y; var maxUpgradesText = new Text2('Max All Upgrades', { size: 40, fill: 0xFFFFFF }); maxUpgradesText.anchor.set(0.5, 0.5); maxUpgradesText.x = maxUpgradesBtn.x; maxUpgradesText.y = maxUpgradesBtn.y; var infoText = new Text2('Show Game Info', { size: 40, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0.5); infoText.x = infoBtn.x; infoText.y = infoBtn.y; closeBtn.down = function () { debugMenuOpen = false; self.visible = false; }; addCoinsBtn.down = function () { coins += 1000; storage.coins = coins; updateCoinDisplay(); console.log('Added 1000 coins. Total:', coins); }; addMaterialsBtn.down = function () { materials.stone += 100; materials.lava += 50; materials.crystal += 25; materials.magic += 10; materials.diamond += 5; materials.ancient += 3; materials.cosmic += 2; materials.ultimate += 1; updateMaterialDisplay(); console.log('Added materials to inventory'); }; maxUpgradesBtn.down = function () { storage.materialPerClick = 50; storage.clickUpgradeLevel = 10; storage.clickUpgradeCost = 1000000; storage.evolutionLevel = 8; storage.evolutionUpgradeCost = 1000000; storage.botLevel = 5; storage.botUpgradeCost = 1000000; updateRockAppearance(); if (upgradeMenu) { upgradeMenu.updateTexts(); } console.log('Maxed all upgrades'); }; infiniteCoinsBtn.down = function () { infiniteCoinsMode = !infiniteCoinsMode; storage.infiniteCoinsMode = infiniteCoinsMode; if (infiniteCoinsMode) { infiniteCoinsText.setText('Infinite Coins: ON'); infiniteCoinsBtn.tint = 0x00ff00; // Green when active console.log('Infinite coins mode activated'); } else { infiniteCoinsText.setText('Infinite Coins: OFF'); infiniteCoinsBtn.tint = 0xFFFFFF; // White when inactive console.log('Infinite coins mode deactivated'); } }; infoBtn.down = function () { console.log('=== GAME INFO ==='); console.log('Coins:', coins); console.log('Materials:', materials); console.log('Evolution Level:', storage.evolutionLevel); console.log('Bot Level:', storage.botLevel); console.log('Bot Active:', botActive); console.log('Material Per Click:', storage.materialPerClick); console.log('Click Upgrade Cost:', storage.clickUpgradeCost); console.log('Evolution Upgrade Cost:', storage.evolutionUpgradeCost); console.log('Bot Upgrade Cost:', storage.botUpgradeCost); console.log('Debug Mode:', debugMode); console.log('Infinite Coins Mode:', infiniteCoinsMode); }; self.addChild(closeText); self.addChild(addCoinsText); self.addChild(addMaterialsText); self.addChild(infiniteCoinsText); self.addChild(maxUpgradesText); self.addChild(infoText); return self; }); var MaterialParticle = Container.expand(function () { var self = Container.call(this); var particle; self.init = function (startX, startY, materialType) { // Create particle with specific material type var assetName = materialType || 'material_stone'; particle = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); // Start particles outside the rock perimeter (rock radius is approximately 200px) var angle = Math.random() * Math.PI * 2; var rockRadius = 220; // Slightly outside the rock edge var startDistance = rockRadius + Math.random() * 50; // 220-270px from center self.x = startX + Math.cos(angle) * startDistance; self.y = startY + Math.sin(angle) * startDistance; // Random direction for particle movement var moveDistance = 100 + Math.random() * 150; var targetX = self.x + Math.cos(angle) * moveDistance; var targetY = self.y + Math.sin(angle) * moveDistance; // Animate particle tween(self, { x: targetX, y: targetY, alpha: 0 }, { duration: 800, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var UpgradeMenu = Container.expand(function () { var self = Container.call(this); var panel = self.attachAsset('upgradePanel', { anchorX: 0.5, anchorY: 0.5 }); var clickUpgradeBtn = self.addChild(LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5 })); clickUpgradeBtn.y = -200; var evolutionUpgradeBtn = self.addChild(LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5 })); evolutionUpgradeBtn.y = 0; var botUpgradeBtn = self.addChild(LK.getAsset('botUpgradeButton', { anchorX: 0.5, anchorY: 0.5 })); botUpgradeBtn.y = 100; var resetBtn = self.addChild(LK.getAsset('resetButton', { anchorX: 0.5, anchorY: 0.5 })); resetBtn.y = 200; var closeBtn = self.addChild(LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 60 })); closeBtn.y = 300; var clickUpgradeText = new Text2('Upgrade Click\nCost: ' + storage.clickUpgradeCost, { size: 40, fill: 0xFFFFFF }); clickUpgradeText.anchor.set(0.5, 0.5); clickUpgradeText.x = clickUpgradeBtn.x; clickUpgradeText.y = clickUpgradeBtn.y; var evolutionUpgradeText = new Text2('Evolve Rock\nCost: ' + storage.evolutionUpgradeCost, { size: 40, fill: 0xFFFFFF }); evolutionUpgradeText.anchor.set(0.5, 0.5); evolutionUpgradeText.x = evolutionUpgradeBtn.x; evolutionUpgradeText.y = evolutionUpgradeBtn.y; var botUpgradeText = new Text2('Upgrade Bot\nCost: ' + storage.botUpgradeCost, { size: 40, fill: 0xFFFFFF }); botUpgradeText.anchor.set(0.5, 0.5); botUpgradeText.x = botUpgradeBtn.x; botUpgradeText.y = botUpgradeBtn.y; var resetText = new Text2('Reset Progress', { size: 36, fill: 0xFFFFFF }); resetText.anchor.set(0.5, 0.5); resetText.x = resetBtn.x; resetText.y = resetBtn.y; var closeText = new Text2('Close', { size: 36, fill: 0xFFFFFF }); closeText.anchor.set(0.5, 0.5); closeText.x = closeBtn.x; closeText.y = closeBtn.y; self.updateTexts = function () { if (storage.clickUpgradeLevel >= 10) { clickUpgradeText.setText('Click MAX LEVEL'); } else { clickUpgradeText.setText('Upgrade Click (+' + storage.materialPerClick + ')\nCost: ' + storage.clickUpgradeCost); } if (storage.evolutionLevel >= 8) { evolutionUpgradeText.setText('Evolution MAX LEVEL'); } else { evolutionUpgradeText.setText('Evolve Rock (Lvl ' + (storage.evolutionLevel + 1) + ')\nCost: ' + storage.evolutionUpgradeCost); } if (storage.botLevel >= 5) { botUpgradeText.setText('Bot MAX LEVEL'); } else { botUpgradeText.setText('Upgrade Bot (Lvl ' + (storage.botLevel + 1) + ')\nCost: ' + storage.botUpgradeCost); } }; clickUpgradeBtn.down = function () { if ((infiniteCoinsMode || coins >= storage.clickUpgradeCost) && storage.clickUpgradeLevel < 10) { if (!infiniteCoinsMode) { coins -= storage.clickUpgradeCost; storage.coins = coins; } storage.materialPerClick += 1; storage.clickUpgradeLevel += 1; storage.clickUpgradeCost = Math.floor(storage.clickUpgradeCost * 1.5); LK.getSound('upgrade').play(); self.updateTexts(); updateCoinDisplay(); } }; evolutionUpgradeBtn.down = function () { if ((infiniteCoinsMode || coins >= storage.evolutionUpgradeCost) && storage.evolutionLevel < 8) { if (!infiniteCoinsMode) { coins -= storage.evolutionUpgradeCost; storage.coins = coins; } storage.evolutionLevel += 1; storage.evolutionUpgradeCost = Math.floor(storage.evolutionUpgradeCost * 3); LK.getSound('upgrade').play(); self.updateTexts(); updateCoinDisplay(); updateRockAppearance(); } }; botUpgradeBtn.down = function () { if ((infiniteCoinsMode || coins >= storage.botUpgradeCost) && storage.botLevel < 5) { if (!infiniteCoinsMode) { coins -= storage.botUpgradeCost; storage.coins = coins; } storage.botLevel += 1; storage.botUpgradeCost = Math.floor(storage.botUpgradeCost * 2); LK.getSound('upgrade').play(); self.updateTexts(); updateCoinDisplay(); // Restart bot with new timing if it's active if (botActive) { stopBot(); startBot(); } } }; resetBtn.down = function () { // Reset all storage values to defaults storage.coins = 0; storage.materialPerClick = 1; storage.coinValue = 1; storage.clickUpgradeCost = 10; storage.valueUpgradeCost = 50; storage.clickUpgradeLevel = 0; storage.valueUpgradeLevel = 0; storage.evolutionUpgradeCost = 100; storage.evolutionLevel = 0; storage.botActive = false; storage.botLevel = 1; storage.botUpgradeCost = 100; // Reset game variables coins = 0; materials = { stone: 0, lava: 0, crystal: 0, magic: 0, diamond: 0, ancient: 0, cosmic: 0, ultimate: 0 }; // Stop and reset bot if (botActive) { stopBot(); } // Update displays updateCoinDisplay(); updateMaterialDisplay(); updateRockAppearance(); self.updateTexts(); // Close menu upgradeMenuOpen = false; self.visible = false; }; closeBtn.down = function () { upgradeMenuOpen = false; self.visible = false; }; self.addChild(clickUpgradeText); self.addChild(evolutionUpgradeText); self.addChild(botUpgradeText); self.addChild(resetText); self.addChild(closeText); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var coins = storage.coins; var materials = { stone: 0, lava: 0, crystal: 0, magic: 0, diamond: 0, ancient: 0, cosmic: 0, ultimate: 0 }; var upgradeMenuOpen = false; var debugMenuOpen = false; var botActive = storage.botActive; var botTimer = null; var debugMode = storage.debugMode; var infiniteCoinsMode = storage.infiniteCoinsMode; // Debug button var debugBtn = game.addChild(LK.getAsset('debugButton', { anchorX: 0.5, anchorY: 0.5 })); debugBtn.x = 2048 / 2; debugBtn.y = 2732 - 350; debugBtn.visible = true; var debugBtnText = new Text2('DEBUG', { size: 30, fill: 0xFFFFFF }); debugBtnText.anchor.set(0.5, 0.5); debugBtnText.x = debugBtn.x; debugBtnText.y = debugBtn.y; debugBtnText.visible = true; // Create background var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0 })); background.x = 0; background.y = 0; // Add a subtle gradient effect by creating multiple background layers var backgroundGradient = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0 })); backgroundGradient.x = 0; backgroundGradient.y = 0; backgroundGradient.tint = 0x1a1a3a; backgroundGradient.alpha = 0.5; // Create central rock var rock = game.addChild(LK.getAsset('rock', { anchorX: 0.5, anchorY: 0.5 })); rock.x = 2048 / 2; rock.y = 2732 / 2; // Add visual improvements to rock based on upgrade levels function updateRockAppearance() { var totalUpgrades = storage.clickUpgradeLevel + storage.valueUpgradeLevel; var oldRock = rock; var newRockAsset; var newScale = 1; var newTint = 0xFFFFFF; // Evolution changes rock appearance dramatically if (storage.evolutionLevel >= 8) { newRockAsset = 'rock_ultimate'; newTint = 0xFFD700; newScale = 1.2; } else if (storage.evolutionLevel >= 7) { newRockAsset = 'rock_ultimate'; newTint = 0xFFFFFF; } else if (storage.evolutionLevel >= 6) { newRockAsset = 'rock_cosmic'; newTint = 0xFFFFFF; } else if (storage.evolutionLevel >= 5) { newRockAsset = 'rock_ancient'; newTint = 0xFFFFFF; } else if (storage.evolutionLevel >= 4) { newRockAsset = 'rock_diamond'; newTint = 0xFFFFFF; } else if (storage.evolutionLevel >= 3) { newRockAsset = 'rock_magical'; newTint = 0xFFFFFF; } else if (storage.evolutionLevel >= 2) { newRockAsset = 'rock_crystal'; newTint = 0xFFFFFF; } else if (storage.evolutionLevel >= 1) { newRockAsset = 'rock_lava'; newTint = 0xFFFFFF; } else { newRockAsset = 'rock'; if (totalUpgrades > 5) { newTint = 0xFFD700; // Golden color } else if (totalUpgrades > 2) { newTint = 0xC0C0C0; // Silver color } else { newTint = 0xFFFFFF; } } // Replace rock with new evolved version if needed var currentAssetId = rock._assetId || 'rock'; if (currentAssetId !== newRockAsset) { var newRock = game.addChild(LK.getAsset(newRockAsset, { anchorX: 0.5, anchorY: 0.5 })); newRock.x = rock.x; newRock.y = rock.y; newRock._assetId = newRockAsset; // Copy event handlers newRock.down = rock.down; // Remove old rock and replace reference game.removeChild(rock); rock = newRock; } // Apply visual effects - keep scale at 1.0 for all levels rock.scaleX = 1.0; rock.scaleY = 1.0; rock.tint = newTint; // Show/hide bot button based on evolution level if (storage.evolutionLevel >= 5) { botBtn.visible = true; botBtnText.visible = true; if (upgradeMenu) { upgradeMenu.children.forEach(function (child) { if (child.children && child.children[0] && child.children[0].text && child.children[0].text.indexOf('Bot') !== -1) { child.visible = true; } }); } } else { botBtn.visible = false; botBtnText.visible = false; if (upgradeMenu) { upgradeMenu.children.forEach(function (child) { if (child.children && child.children[0] && child.children[0].text && child.children[0].text.indexOf('Bot') !== -1) { child.visible = false; } }); } if (botActive) { // Stop bot if evolution level drops below 5 stopBot(); } } } // Create UI elements var coinText = new Text2('Coins: 0', { size: 80, fill: 0xFFD700 }); coinText.anchor.set(0.5, 0); LK.gui.top.addChild(coinText); var materialText = new Text2('Materials: 0', { size: 60, fill: 0xFFFFFF }); materialText.anchor.set(0, 0); materialText.x = 20; materialText.y = 120; LK.gui.topLeft.addChild(materialText); var upgradeBtn = game.addChild(LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5 })); upgradeBtn.x = 2048 / 2; upgradeBtn.y = 2732 - 150; var upgradeBtnText = new Text2('UPGRADES', { size: 50, fill: 0xFFFFFF }); upgradeBtnText.anchor.set(0.5, 0.5); upgradeBtnText.x = upgradeBtn.x; upgradeBtnText.y = upgradeBtn.y; var sellBtn = game.addChild(LK.getAsset('sellButton', { anchorX: 0.5, anchorY: 0.5 })); sellBtn.x = 2048 / 2; sellBtn.y = 2732 - 250; var sellBtnText = new Text2('SELL MATERIALS', { size: 40, fill: 0xFFFFFF }); sellBtnText.anchor.set(0.5, 0.5); sellBtnText.x = sellBtn.x; sellBtnText.y = sellBtn.y; // Bot button (only visible from evolution level 5+) var botBtn = game.addChild(LK.getAsset('botButton', { anchorX: 0.5, anchorY: 0.5 })); botBtn.x = 2048 / 2; botBtn.y = 2732 - 450; var botBtnText = new Text2('BOT: OFF', { size: 40, fill: 0xFFFFFF }); botBtnText.anchor.set(0.5, 0.5); botBtnText.x = botBtn.x; botBtnText.y = botBtn.y; // Create upgrade menu var upgradeMenu = game.addChild(new UpgradeMenu()); upgradeMenu.x = 2048 / 2; upgradeMenu.y = 2732 / 2; upgradeMenu.visible = false; // Create debug menu var debugMenu = game.addChild(new DebugMenu()); debugMenu.x = 2048 / 2; debugMenu.y = 2732 / 2; debugMenu.visible = false; // Arrays for particles var materialParticles = []; var coinParticles = []; // Add button texts on top of buttons game.addChild(debugBtnText); game.addChild(upgradeBtnText); game.addChild(sellBtnText); game.addChild(botBtnText); // Update functions function updateCoinDisplay() { coinText.setText('Coins: ' + coins); } function updateMaterialDisplay() { var totalMaterials = materials.stone + materials.lava + materials.crystal + materials.magic + materials.diamond + materials.ancient + materials.cosmic + materials.ultimate; var displayText = 'Materials: ' + totalMaterials; if (materials.stone > 0) displayText += '\nStone: ' + materials.stone; if (materials.lava > 0) displayText += '\nLava: ' + materials.lava; if (materials.crystal > 0) displayText += '\nCrystal: ' + materials.crystal; if (materials.magic > 0) displayText += '\nMagic: ' + materials.magic; if (materials.diamond > 0) displayText += '\nDiamond: ' + materials.diamond; if (materials.ancient > 0) displayText += '\nAncient: ' + materials.ancient; if (materials.cosmic > 0) displayText += '\nCosmic: ' + materials.cosmic; if (materials.ultimate > 0) displayText += '\nUltimate: ' + materials.ultimate; materialText.setText(displayText); } function startBot() { if (botTimer) return; // Already running botActive = true; storage.botActive = true; botBtnText.setText('BOT: ON'); botBtn.tint = 0x00ff00; // Green when active // Calculate interval based on bot level - starts at 2000ms, reduces by 400ms per level (minimum 200ms) var interval = Math.max(200, 2000 - (storage.botLevel - 1) * 400); botTimer = LK.setInterval(function () { if (storage.evolutionLevel >= 5 && !upgradeMenuOpen) { // Simulate rock click rock.down(rock.x, rock.y, {}); } }, interval); } function stopBot() { if (botTimer) { LK.clearInterval(botTimer); botTimer = null; } botActive = false; storage.botActive = false; botBtnText.setText('BOT: OFF'); botBtn.tint = 0xFFFFFF; // White when inactive } // Initialize displays updateCoinDisplay(); updateMaterialDisplay(); updateRockAppearance(); // Initialize bot state if (storage.evolutionLevel >= 5) { botBtn.visible = true; if (botActive) { startBot(); } } else { botBtn.visible = false; } // Rock click handler rock.down = function (x, y, obj) { if (upgradeMenuOpen) return; // Calculate base materials per click var baseMaterials = storage.materialPerClick; // Apply evolution level multiplier to all materials var evolutionMultiplier = 1 + storage.evolutionLevel; var totalParticles = 0; // Generate materials based on evolution level - higher levels can produce multiple types if (storage.evolutionLevel >= 8) { // Ultimate level - produces all material types with ultimate bonus materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier; materials.crystal += baseMaterials * evolutionMultiplier; materials.magic += baseMaterials * evolutionMultiplier; materials.diamond += baseMaterials * evolutionMultiplier; materials.ancient += baseMaterials * evolutionMultiplier; materials.cosmic += baseMaterials * evolutionMultiplier; materials.ultimate += baseMaterials * evolutionMultiplier * 3; totalParticles += baseMaterials * 10; for (var i = 0; i < baseMaterials; i++) { var materialTypes = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond', 'material_ancient', 'material_cosmic']; for (var t = 0; t < materialTypes.length; t++) { var particle = new MaterialParticle(); materialParticles.push(particle); game.addChild(particle); particle.init(rock.x, rock.y, materialTypes[t]); } } for (var j = 0; j < baseMaterials * 3; j++) { var ultimateParticle = new MaterialParticle(); materialParticles.push(ultimateParticle); game.addChild(ultimateParticle); ultimateParticle.init(rock.x, rock.y, 'material_ultimate'); } } else if (storage.evolutionLevel >= 7) { // Ultimate level variant - produces all material types with high ultimate bonus materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier; materials.crystal += baseMaterials * evolutionMultiplier; materials.magic += baseMaterials * evolutionMultiplier; materials.diamond += baseMaterials * evolutionMultiplier; materials.ancient += baseMaterials * evolutionMultiplier; materials.cosmic += baseMaterials * evolutionMultiplier; materials.ultimate += baseMaterials * evolutionMultiplier * 2; totalParticles += baseMaterials * 9; for (var i = 0; i < baseMaterials; i++) { var materialTypes = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond', 'material_ancient', 'material_cosmic']; for (var t = 0; t < materialTypes.length; t++) { var particle = new MaterialParticle(); materialParticles.push(particle); game.addChild(particle); particle.init(rock.x, rock.y, materialTypes[t]); } } for (var j = 0; j < baseMaterials * 2; j++) { var ultimateParticle = new MaterialParticle(); materialParticles.push(ultimateParticle); game.addChild(ultimateParticle); ultimateParticle.init(rock.x, rock.y, 'material_ultimate'); } } else if (storage.evolutionLevel >= 6) { // Cosmic level - produces all previous materials plus cosmic materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier; materials.crystal += baseMaterials * evolutionMultiplier; materials.magic += baseMaterials * evolutionMultiplier; materials.diamond += baseMaterials * evolutionMultiplier; materials.ancient += baseMaterials * evolutionMultiplier; materials.cosmic += baseMaterials * evolutionMultiplier * 3; totalParticles += baseMaterials * 9; for (var k = 0; k < baseMaterials; k++) { var materialTypes2 = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond', 'material_ancient']; for (var u = 0; u < materialTypes2.length; u++) { var particle2 = new MaterialParticle(); materialParticles.push(particle2); game.addChild(particle2); particle2.init(rock.x, rock.y, materialTypes2[u]); } } for (var l = 0; l < baseMaterials * 3; l++) { var cosmicParticle = new MaterialParticle(); materialParticles.push(cosmicParticle); game.addChild(cosmicParticle); cosmicParticle.init(rock.x, rock.y, 'material_cosmic'); } } else if (storage.evolutionLevel >= 5) { // Ancient level - produces all previous materials plus ancient materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier; materials.crystal += baseMaterials * evolutionMultiplier; materials.magic += baseMaterials * evolutionMultiplier; materials.diamond += baseMaterials * evolutionMultiplier; materials.ancient += baseMaterials * evolutionMultiplier * 3; totalParticles += baseMaterials * 8; for (var m = 0; m < baseMaterials; m++) { var materialTypes3 = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond']; for (var v = 0; v < materialTypes3.length; v++) { var particle3 = new MaterialParticle(); materialParticles.push(particle3); game.addChild(particle3); particle3.init(rock.x, rock.y, materialTypes3[v]); } } for (var n = 0; n < baseMaterials * 3; n++) { var ancientParticle = new MaterialParticle(); materialParticles.push(ancientParticle); game.addChild(ancientParticle); ancientParticle.init(rock.x, rock.y, 'material_ancient'); } } else if (storage.evolutionLevel >= 4) { // Diamond level - produces all previous materials plus diamond materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier; materials.crystal += baseMaterials * evolutionMultiplier; materials.magic += baseMaterials * evolutionMultiplier; materials.diamond += baseMaterials * evolutionMultiplier * 3; totalParticles += baseMaterials * 7; for (var o = 0; o < baseMaterials; o++) { var materialTypes4 = ['material_stone', 'material_lava', 'material_crystal', 'material_magic']; for (var w = 0; w < materialTypes4.length; w++) { var particle4 = new MaterialParticle(); materialParticles.push(particle4); game.addChild(particle4); particle4.init(rock.x, rock.y, materialTypes4[w]); } } for (var p = 0; p < baseMaterials * 3; p++) { var diamondParticle = new MaterialParticle(); materialParticles.push(diamondParticle); game.addChild(diamondParticle); diamondParticle.init(rock.x, rock.y, 'material_diamond'); } } else if (storage.evolutionLevel >= 3) { // Magic level - produces all material types materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier; materials.crystal += baseMaterials * evolutionMultiplier; materials.magic += baseMaterials * evolutionMultiplier * 2; // More magic materials at highest level totalParticles += baseMaterials * 5; // Create particles for each type for (var i = 0; i < baseMaterials; i++) { var stoneParticle = new MaterialParticle(); materialParticles.push(stoneParticle); game.addChild(stoneParticle); stoneParticle.init(rock.x, rock.y, 'material_stone'); var lavaParticle = new MaterialParticle(); materialParticles.push(lavaParticle); game.addChild(lavaParticle); lavaParticle.init(rock.x, rock.y, 'material_lava'); var crystalParticle = new MaterialParticle(); materialParticles.push(crystalParticle); game.addChild(crystalParticle); crystalParticle.init(rock.x, rock.y, 'material_crystal'); } for (var j = 0; j < baseMaterials * 2; j++) { var magicParticle = new MaterialParticle(); materialParticles.push(magicParticle); game.addChild(magicParticle); magicParticle.init(rock.x, rock.y, 'material_magic'); } } else if (storage.evolutionLevel >= 2) { // Crystal level - produces stone, lava, and crystal materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier; materials.crystal += baseMaterials * evolutionMultiplier * 2; // More crystal materials totalParticles += baseMaterials * 4; for (var k = 0; k < baseMaterials; k++) { var stoneParticle2 = new MaterialParticle(); materialParticles.push(stoneParticle2); game.addChild(stoneParticle2); stoneParticle2.init(rock.x, rock.y, 'material_stone'); var lavaParticle2 = new MaterialParticle(); materialParticles.push(lavaParticle2); game.addChild(lavaParticle2); lavaParticle2.init(rock.x, rock.y, 'material_lava'); } for (var l = 0; l < baseMaterials * 2; l++) { var crystalParticle2 = new MaterialParticle(); materialParticles.push(crystalParticle2); game.addChild(crystalParticle2); crystalParticle2.init(rock.x, rock.y, 'material_crystal'); } } else if (storage.evolutionLevel >= 1) { // Lava level - produces stone and lava materials.stone += baseMaterials * evolutionMultiplier; materials.lava += baseMaterials * evolutionMultiplier * 2; // More lava materials totalParticles += baseMaterials * 3; for (var m = 0; m < baseMaterials; m++) { var stoneParticle3 = new MaterialParticle(); materialParticles.push(stoneParticle3); game.addChild(stoneParticle3); stoneParticle3.init(rock.x, rock.y, 'material_stone'); } for (var n = 0; n < baseMaterials * 2; n++) { var lavaParticle3 = new MaterialParticle(); materialParticles.push(lavaParticle3); game.addChild(lavaParticle3); lavaParticle3.init(rock.x, rock.y, 'material_lava'); } } else { // Basic level - only produces stone materials.stone += baseMaterials * evolutionMultiplier; totalParticles += baseMaterials; for (var o = 0; o < baseMaterials; o++) { var stoneParticle4 = new MaterialParticle(); materialParticles.push(stoneParticle4); game.addChild(stoneParticle4); stoneParticle4.init(rock.x, rock.y, 'material_stone'); } } updateMaterialDisplay(); // Rock animation tween(rock, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(rock, { scaleX: 1, scaleY: 1 }, { duration: 100, easing: tween.easeIn }); } }); LK.getSound('mine').play(); }; // Upgrade button handler upgradeBtn.down = function () { upgradeMenuOpen = !upgradeMenuOpen; upgradeMenu.visible = upgradeMenuOpen; if (upgradeMenuOpen) { upgradeMenu.updateTexts(); // Bring upgrade menu to front game.removeChild(upgradeMenu); game.addChild(upgradeMenu); } }; // Sell button handler sellBtn.down = function () { var totalMaterials = materials.stone + materials.lava + materials.crystal + materials.magic + materials.diamond + materials.ancient + materials.cosmic + materials.ultimate; if (upgradeMenuOpen || totalMaterials <= 0) return; // Convert all materials to coins with different values per type var coinsToAdd = 0; coinsToAdd += materials.stone * storage.coinValue; coinsToAdd += materials.lava * storage.coinValue * 2; coinsToAdd += materials.crystal * storage.coinValue * 3; coinsToAdd += materials.magic * storage.coinValue * 5; coinsToAdd += materials.diamond * storage.coinValue * 8; coinsToAdd += materials.ancient * storage.coinValue * 12; coinsToAdd += materials.cosmic * storage.coinValue * 20; coinsToAdd += materials.ultimate * storage.coinValue * 50; coins += coinsToAdd; storage.coins = coins; // Create coin particles for visual feedback for (var i = 0; i < Math.min(totalMaterials, 5); i++) { var coinParticle = new CoinParticle(); coinParticles.push(coinParticle); game.addChild(coinParticle); coinParticle.init(rock.x + i * 20 - 40, rock.y); } materials = { stone: 0, lava: 0, crystal: 0, magic: 0, diamond: 0, ancient: 0, cosmic: 0, ultimate: 0 }; updateCoinDisplay(); updateMaterialDisplay(); LK.getSound('coin').play(); }; // Debug button handler debugBtn.down = function () { debugMenuOpen = !debugMenuOpen; debugMenu.visible = debugMenuOpen; if (debugMenuOpen) { // Bring debug menu to front game.removeChild(debugMenu); game.addChild(debugMenu); console.log('Debug panel opened'); } else { console.log('Debug panel closed'); } }; // Bot button handler botBtn.down = function () { if (storage.evolutionLevel < 5) return; if (botActive) { stopBot(); } else { startBot(); } }; game.update = function () { // Clean up destroyed particles for (var i = materialParticles.length - 1; i >= 0; i--) { if (materialParticles[i].destroyed) { materialParticles.splice(i, 1); } } for (var j = coinParticles.length - 1; j >= 0; j--) { if (coinParticles[j].destroyed) { coinParticles.splice(j, 1); } } // Update debug button appearance if (debugMode) { debugBtn.tint = 0x00ff00; // Keep green when debug mode is on debugBtnText.setText('DEBUG: ON'); } else { debugBtn.tint = 0xFFFFFF; // Keep white when debug mode is off debugBtnText.setText('DEBUG'); } // Update rock appearance updateRockAppearance(); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
coins: 0,
materialPerClick: 1,
coinValue: 1,
clickUpgradeCost: 10,
valueUpgradeCost: 50,
clickUpgradeLevel: 0,
valueUpgradeLevel: 0,
evolutionUpgradeCost: 100,
evolutionLevel: 0,
botActive: false,
botLevel: 1,
botUpgradeCost: 100,
debugMode: false,
infiniteCoinsMode: false
});
/****
* Classes
****/
var CoinParticle = Container.expand(function () {
var self = Container.call(this);
var coin = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.init = function (startX, startY) {
self.x = startX;
self.y = startY;
// Animate coin floating up
tween(self, {
y: startY - 200,
alpha: 0
}, {
duration: 1500,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
// Scale animation
tween(self, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeIn
});
}
});
};
return self;
});
var DebugMenu = Container.expand(function () {
var self = Container.call(this);
var panel = self.attachAsset('debugPanel', {
anchorX: 0.5,
anchorY: 0.5
});
var closeBtn = self.addChild(LK.getAsset('debugCloseButton', {
anchorX: 0.5,
anchorY: 0.5
}));
closeBtn.y = -400;
var addCoinsBtn = self.addChild(LK.getAsset('debugActionButton', {
anchorX: 0.5,
anchorY: 0.5
}));
addCoinsBtn.y = -300;
var addMaterialsBtn = self.addChild(LK.getAsset('debugActionButton', {
anchorX: 0.5,
anchorY: 0.5
}));
addMaterialsBtn.y = -230;
var maxUpgradesBtn = self.addChild(LK.getAsset('debugActionButton', {
anchorX: 0.5,
anchorY: 0.5
}));
maxUpgradesBtn.y = -160;
var infiniteCoinsBtn = self.addChild(LK.getAsset('debugInfiniteCoinsButton', {
anchorX: 0.5,
anchorY: 0.5
}));
infiniteCoinsBtn.y = -90;
var infoBtn = self.addChild(LK.getAsset('debugActionButton', {
anchorX: 0.5,
anchorY: 0.5
}));
infoBtn.y = -20;
var closeText = new Text2('Close', {
size: 30,
fill: 0xFFFFFF
});
closeText.anchor.set(0.5, 0.5);
closeText.x = closeBtn.x;
closeText.y = closeBtn.y;
var addCoinsText = new Text2('Add 1000 Coins', {
size: 40,
fill: 0xFFFFFF
});
addCoinsText.anchor.set(0.5, 0.5);
addCoinsText.x = addCoinsBtn.x;
addCoinsText.y = addCoinsBtn.y;
var addMaterialsText = new Text2('Add Materials', {
size: 40,
fill: 0xFFFFFF
});
addMaterialsText.anchor.set(0.5, 0.5);
addMaterialsText.x = addMaterialsBtn.x;
addMaterialsText.y = addMaterialsBtn.y;
var infiniteCoinsText = new Text2('Infinite Coins: OFF', {
size: 40,
fill: 0xFFFFFF
});
infiniteCoinsText.anchor.set(0.5, 0.5);
infiniteCoinsText.x = infiniteCoinsBtn.x;
infiniteCoinsText.y = infiniteCoinsBtn.y;
var maxUpgradesText = new Text2('Max All Upgrades', {
size: 40,
fill: 0xFFFFFF
});
maxUpgradesText.anchor.set(0.5, 0.5);
maxUpgradesText.x = maxUpgradesBtn.x;
maxUpgradesText.y = maxUpgradesBtn.y;
var infoText = new Text2('Show Game Info', {
size: 40,
fill: 0xFFFFFF
});
infoText.anchor.set(0.5, 0.5);
infoText.x = infoBtn.x;
infoText.y = infoBtn.y;
closeBtn.down = function () {
debugMenuOpen = false;
self.visible = false;
};
addCoinsBtn.down = function () {
coins += 1000;
storage.coins = coins;
updateCoinDisplay();
console.log('Added 1000 coins. Total:', coins);
};
addMaterialsBtn.down = function () {
materials.stone += 100;
materials.lava += 50;
materials.crystal += 25;
materials.magic += 10;
materials.diamond += 5;
materials.ancient += 3;
materials.cosmic += 2;
materials.ultimate += 1;
updateMaterialDisplay();
console.log('Added materials to inventory');
};
maxUpgradesBtn.down = function () {
storage.materialPerClick = 50;
storage.clickUpgradeLevel = 10;
storage.clickUpgradeCost = 1000000;
storage.evolutionLevel = 8;
storage.evolutionUpgradeCost = 1000000;
storage.botLevel = 5;
storage.botUpgradeCost = 1000000;
updateRockAppearance();
if (upgradeMenu) {
upgradeMenu.updateTexts();
}
console.log('Maxed all upgrades');
};
infiniteCoinsBtn.down = function () {
infiniteCoinsMode = !infiniteCoinsMode;
storage.infiniteCoinsMode = infiniteCoinsMode;
if (infiniteCoinsMode) {
infiniteCoinsText.setText('Infinite Coins: ON');
infiniteCoinsBtn.tint = 0x00ff00; // Green when active
console.log('Infinite coins mode activated');
} else {
infiniteCoinsText.setText('Infinite Coins: OFF');
infiniteCoinsBtn.tint = 0xFFFFFF; // White when inactive
console.log('Infinite coins mode deactivated');
}
};
infoBtn.down = function () {
console.log('=== GAME INFO ===');
console.log('Coins:', coins);
console.log('Materials:', materials);
console.log('Evolution Level:', storage.evolutionLevel);
console.log('Bot Level:', storage.botLevel);
console.log('Bot Active:', botActive);
console.log('Material Per Click:', storage.materialPerClick);
console.log('Click Upgrade Cost:', storage.clickUpgradeCost);
console.log('Evolution Upgrade Cost:', storage.evolutionUpgradeCost);
console.log('Bot Upgrade Cost:', storage.botUpgradeCost);
console.log('Debug Mode:', debugMode);
console.log('Infinite Coins Mode:', infiniteCoinsMode);
};
self.addChild(closeText);
self.addChild(addCoinsText);
self.addChild(addMaterialsText);
self.addChild(infiniteCoinsText);
self.addChild(maxUpgradesText);
self.addChild(infoText);
return self;
});
var MaterialParticle = Container.expand(function () {
var self = Container.call(this);
var particle;
self.init = function (startX, startY, materialType) {
// Create particle with specific material type
var assetName = materialType || 'material_stone';
particle = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
// Start particles outside the rock perimeter (rock radius is approximately 200px)
var angle = Math.random() * Math.PI * 2;
var rockRadius = 220; // Slightly outside the rock edge
var startDistance = rockRadius + Math.random() * 50; // 220-270px from center
self.x = startX + Math.cos(angle) * startDistance;
self.y = startY + Math.sin(angle) * startDistance;
// Random direction for particle movement
var moveDistance = 100 + Math.random() * 150;
var targetX = self.x + Math.cos(angle) * moveDistance;
var targetY = self.y + Math.sin(angle) * moveDistance;
// Animate particle
tween(self, {
x: targetX,
y: targetY,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
var UpgradeMenu = Container.expand(function () {
var self = Container.call(this);
var panel = self.attachAsset('upgradePanel', {
anchorX: 0.5,
anchorY: 0.5
});
var clickUpgradeBtn = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
}));
clickUpgradeBtn.y = -200;
var evolutionUpgradeBtn = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
}));
evolutionUpgradeBtn.y = 0;
var botUpgradeBtn = self.addChild(LK.getAsset('botUpgradeButton', {
anchorX: 0.5,
anchorY: 0.5
}));
botUpgradeBtn.y = 100;
var resetBtn = self.addChild(LK.getAsset('resetButton', {
anchorX: 0.5,
anchorY: 0.5
}));
resetBtn.y = 200;
var closeBtn = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
width: 100,
height: 60
}));
closeBtn.y = 300;
var clickUpgradeText = new Text2('Upgrade Click\nCost: ' + storage.clickUpgradeCost, {
size: 40,
fill: 0xFFFFFF
});
clickUpgradeText.anchor.set(0.5, 0.5);
clickUpgradeText.x = clickUpgradeBtn.x;
clickUpgradeText.y = clickUpgradeBtn.y;
var evolutionUpgradeText = new Text2('Evolve Rock\nCost: ' + storage.evolutionUpgradeCost, {
size: 40,
fill: 0xFFFFFF
});
evolutionUpgradeText.anchor.set(0.5, 0.5);
evolutionUpgradeText.x = evolutionUpgradeBtn.x;
evolutionUpgradeText.y = evolutionUpgradeBtn.y;
var botUpgradeText = new Text2('Upgrade Bot\nCost: ' + storage.botUpgradeCost, {
size: 40,
fill: 0xFFFFFF
});
botUpgradeText.anchor.set(0.5, 0.5);
botUpgradeText.x = botUpgradeBtn.x;
botUpgradeText.y = botUpgradeBtn.y;
var resetText = new Text2('Reset Progress', {
size: 36,
fill: 0xFFFFFF
});
resetText.anchor.set(0.5, 0.5);
resetText.x = resetBtn.x;
resetText.y = resetBtn.y;
var closeText = new Text2('Close', {
size: 36,
fill: 0xFFFFFF
});
closeText.anchor.set(0.5, 0.5);
closeText.x = closeBtn.x;
closeText.y = closeBtn.y;
self.updateTexts = function () {
if (storage.clickUpgradeLevel >= 10) {
clickUpgradeText.setText('Click MAX LEVEL');
} else {
clickUpgradeText.setText('Upgrade Click (+' + storage.materialPerClick + ')\nCost: ' + storage.clickUpgradeCost);
}
if (storage.evolutionLevel >= 8) {
evolutionUpgradeText.setText('Evolution MAX LEVEL');
} else {
evolutionUpgradeText.setText('Evolve Rock (Lvl ' + (storage.evolutionLevel + 1) + ')\nCost: ' + storage.evolutionUpgradeCost);
}
if (storage.botLevel >= 5) {
botUpgradeText.setText('Bot MAX LEVEL');
} else {
botUpgradeText.setText('Upgrade Bot (Lvl ' + (storage.botLevel + 1) + ')\nCost: ' + storage.botUpgradeCost);
}
};
clickUpgradeBtn.down = function () {
if ((infiniteCoinsMode || coins >= storage.clickUpgradeCost) && storage.clickUpgradeLevel < 10) {
if (!infiniteCoinsMode) {
coins -= storage.clickUpgradeCost;
storage.coins = coins;
}
storage.materialPerClick += 1;
storage.clickUpgradeLevel += 1;
storage.clickUpgradeCost = Math.floor(storage.clickUpgradeCost * 1.5);
LK.getSound('upgrade').play();
self.updateTexts();
updateCoinDisplay();
}
};
evolutionUpgradeBtn.down = function () {
if ((infiniteCoinsMode || coins >= storage.evolutionUpgradeCost) && storage.evolutionLevel < 8) {
if (!infiniteCoinsMode) {
coins -= storage.evolutionUpgradeCost;
storage.coins = coins;
}
storage.evolutionLevel += 1;
storage.evolutionUpgradeCost = Math.floor(storage.evolutionUpgradeCost * 3);
LK.getSound('upgrade').play();
self.updateTexts();
updateCoinDisplay();
updateRockAppearance();
}
};
botUpgradeBtn.down = function () {
if ((infiniteCoinsMode || coins >= storage.botUpgradeCost) && storage.botLevel < 5) {
if (!infiniteCoinsMode) {
coins -= storage.botUpgradeCost;
storage.coins = coins;
}
storage.botLevel += 1;
storage.botUpgradeCost = Math.floor(storage.botUpgradeCost * 2);
LK.getSound('upgrade').play();
self.updateTexts();
updateCoinDisplay();
// Restart bot with new timing if it's active
if (botActive) {
stopBot();
startBot();
}
}
};
resetBtn.down = function () {
// Reset all storage values to defaults
storage.coins = 0;
storage.materialPerClick = 1;
storage.coinValue = 1;
storage.clickUpgradeCost = 10;
storage.valueUpgradeCost = 50;
storage.clickUpgradeLevel = 0;
storage.valueUpgradeLevel = 0;
storage.evolutionUpgradeCost = 100;
storage.evolutionLevel = 0;
storage.botActive = false;
storage.botLevel = 1;
storage.botUpgradeCost = 100;
// Reset game variables
coins = 0;
materials = {
stone: 0,
lava: 0,
crystal: 0,
magic: 0,
diamond: 0,
ancient: 0,
cosmic: 0,
ultimate: 0
};
// Stop and reset bot
if (botActive) {
stopBot();
}
// Update displays
updateCoinDisplay();
updateMaterialDisplay();
updateRockAppearance();
self.updateTexts();
// Close menu
upgradeMenuOpen = false;
self.visible = false;
};
closeBtn.down = function () {
upgradeMenuOpen = false;
self.visible = false;
};
self.addChild(clickUpgradeText);
self.addChild(evolutionUpgradeText);
self.addChild(botUpgradeText);
self.addChild(resetText);
self.addChild(closeText);
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var coins = storage.coins;
var materials = {
stone: 0,
lava: 0,
crystal: 0,
magic: 0,
diamond: 0,
ancient: 0,
cosmic: 0,
ultimate: 0
};
var upgradeMenuOpen = false;
var debugMenuOpen = false;
var botActive = storage.botActive;
var botTimer = null;
var debugMode = storage.debugMode;
var infiniteCoinsMode = storage.infiniteCoinsMode;
// Debug button
var debugBtn = game.addChild(LK.getAsset('debugButton', {
anchorX: 0.5,
anchorY: 0.5
}));
debugBtn.x = 2048 / 2;
debugBtn.y = 2732 - 350;
debugBtn.visible = true;
var debugBtnText = new Text2('DEBUG', {
size: 30,
fill: 0xFFFFFF
});
debugBtnText.anchor.set(0.5, 0.5);
debugBtnText.x = debugBtn.x;
debugBtnText.y = debugBtn.y;
debugBtnText.visible = true;
// Create background
var background = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0
}));
background.x = 0;
background.y = 0;
// Add a subtle gradient effect by creating multiple background layers
var backgroundGradient = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0
}));
backgroundGradient.x = 0;
backgroundGradient.y = 0;
backgroundGradient.tint = 0x1a1a3a;
backgroundGradient.alpha = 0.5;
// Create central rock
var rock = game.addChild(LK.getAsset('rock', {
anchorX: 0.5,
anchorY: 0.5
}));
rock.x = 2048 / 2;
rock.y = 2732 / 2;
// Add visual improvements to rock based on upgrade levels
function updateRockAppearance() {
var totalUpgrades = storage.clickUpgradeLevel + storage.valueUpgradeLevel;
var oldRock = rock;
var newRockAsset;
var newScale = 1;
var newTint = 0xFFFFFF;
// Evolution changes rock appearance dramatically
if (storage.evolutionLevel >= 8) {
newRockAsset = 'rock_ultimate';
newTint = 0xFFD700;
newScale = 1.2;
} else if (storage.evolutionLevel >= 7) {
newRockAsset = 'rock_ultimate';
newTint = 0xFFFFFF;
} else if (storage.evolutionLevel >= 6) {
newRockAsset = 'rock_cosmic';
newTint = 0xFFFFFF;
} else if (storage.evolutionLevel >= 5) {
newRockAsset = 'rock_ancient';
newTint = 0xFFFFFF;
} else if (storage.evolutionLevel >= 4) {
newRockAsset = 'rock_diamond';
newTint = 0xFFFFFF;
} else if (storage.evolutionLevel >= 3) {
newRockAsset = 'rock_magical';
newTint = 0xFFFFFF;
} else if (storage.evolutionLevel >= 2) {
newRockAsset = 'rock_crystal';
newTint = 0xFFFFFF;
} else if (storage.evolutionLevel >= 1) {
newRockAsset = 'rock_lava';
newTint = 0xFFFFFF;
} else {
newRockAsset = 'rock';
if (totalUpgrades > 5) {
newTint = 0xFFD700; // Golden color
} else if (totalUpgrades > 2) {
newTint = 0xC0C0C0; // Silver color
} else {
newTint = 0xFFFFFF;
}
}
// Replace rock with new evolved version if needed
var currentAssetId = rock._assetId || 'rock';
if (currentAssetId !== newRockAsset) {
var newRock = game.addChild(LK.getAsset(newRockAsset, {
anchorX: 0.5,
anchorY: 0.5
}));
newRock.x = rock.x;
newRock.y = rock.y;
newRock._assetId = newRockAsset;
// Copy event handlers
newRock.down = rock.down;
// Remove old rock and replace reference
game.removeChild(rock);
rock = newRock;
}
// Apply visual effects - keep scale at 1.0 for all levels
rock.scaleX = 1.0;
rock.scaleY = 1.0;
rock.tint = newTint;
// Show/hide bot button based on evolution level
if (storage.evolutionLevel >= 5) {
botBtn.visible = true;
botBtnText.visible = true;
if (upgradeMenu) {
upgradeMenu.children.forEach(function (child) {
if (child.children && child.children[0] && child.children[0].text && child.children[0].text.indexOf('Bot') !== -1) {
child.visible = true;
}
});
}
} else {
botBtn.visible = false;
botBtnText.visible = false;
if (upgradeMenu) {
upgradeMenu.children.forEach(function (child) {
if (child.children && child.children[0] && child.children[0].text && child.children[0].text.indexOf('Bot') !== -1) {
child.visible = false;
}
});
}
if (botActive) {
// Stop bot if evolution level drops below 5
stopBot();
}
}
}
// Create UI elements
var coinText = new Text2('Coins: 0', {
size: 80,
fill: 0xFFD700
});
coinText.anchor.set(0.5, 0);
LK.gui.top.addChild(coinText);
var materialText = new Text2('Materials: 0', {
size: 60,
fill: 0xFFFFFF
});
materialText.anchor.set(0, 0);
materialText.x = 20;
materialText.y = 120;
LK.gui.topLeft.addChild(materialText);
var upgradeBtn = game.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
}));
upgradeBtn.x = 2048 / 2;
upgradeBtn.y = 2732 - 150;
var upgradeBtnText = new Text2('UPGRADES', {
size: 50,
fill: 0xFFFFFF
});
upgradeBtnText.anchor.set(0.5, 0.5);
upgradeBtnText.x = upgradeBtn.x;
upgradeBtnText.y = upgradeBtn.y;
var sellBtn = game.addChild(LK.getAsset('sellButton', {
anchorX: 0.5,
anchorY: 0.5
}));
sellBtn.x = 2048 / 2;
sellBtn.y = 2732 - 250;
var sellBtnText = new Text2('SELL MATERIALS', {
size: 40,
fill: 0xFFFFFF
});
sellBtnText.anchor.set(0.5, 0.5);
sellBtnText.x = sellBtn.x;
sellBtnText.y = sellBtn.y;
// Bot button (only visible from evolution level 5+)
var botBtn = game.addChild(LK.getAsset('botButton', {
anchorX: 0.5,
anchorY: 0.5
}));
botBtn.x = 2048 / 2;
botBtn.y = 2732 - 450;
var botBtnText = new Text2('BOT: OFF', {
size: 40,
fill: 0xFFFFFF
});
botBtnText.anchor.set(0.5, 0.5);
botBtnText.x = botBtn.x;
botBtnText.y = botBtn.y;
// Create upgrade menu
var upgradeMenu = game.addChild(new UpgradeMenu());
upgradeMenu.x = 2048 / 2;
upgradeMenu.y = 2732 / 2;
upgradeMenu.visible = false;
// Create debug menu
var debugMenu = game.addChild(new DebugMenu());
debugMenu.x = 2048 / 2;
debugMenu.y = 2732 / 2;
debugMenu.visible = false;
// Arrays for particles
var materialParticles = [];
var coinParticles = [];
// Add button texts on top of buttons
game.addChild(debugBtnText);
game.addChild(upgradeBtnText);
game.addChild(sellBtnText);
game.addChild(botBtnText);
// Update functions
function updateCoinDisplay() {
coinText.setText('Coins: ' + coins);
}
function updateMaterialDisplay() {
var totalMaterials = materials.stone + materials.lava + materials.crystal + materials.magic + materials.diamond + materials.ancient + materials.cosmic + materials.ultimate;
var displayText = 'Materials: ' + totalMaterials;
if (materials.stone > 0) displayText += '\nStone: ' + materials.stone;
if (materials.lava > 0) displayText += '\nLava: ' + materials.lava;
if (materials.crystal > 0) displayText += '\nCrystal: ' + materials.crystal;
if (materials.magic > 0) displayText += '\nMagic: ' + materials.magic;
if (materials.diamond > 0) displayText += '\nDiamond: ' + materials.diamond;
if (materials.ancient > 0) displayText += '\nAncient: ' + materials.ancient;
if (materials.cosmic > 0) displayText += '\nCosmic: ' + materials.cosmic;
if (materials.ultimate > 0) displayText += '\nUltimate: ' + materials.ultimate;
materialText.setText(displayText);
}
function startBot() {
if (botTimer) return; // Already running
botActive = true;
storage.botActive = true;
botBtnText.setText('BOT: ON');
botBtn.tint = 0x00ff00; // Green when active
// Calculate interval based on bot level - starts at 2000ms, reduces by 400ms per level (minimum 200ms)
var interval = Math.max(200, 2000 - (storage.botLevel - 1) * 400);
botTimer = LK.setInterval(function () {
if (storage.evolutionLevel >= 5 && !upgradeMenuOpen) {
// Simulate rock click
rock.down(rock.x, rock.y, {});
}
}, interval);
}
function stopBot() {
if (botTimer) {
LK.clearInterval(botTimer);
botTimer = null;
}
botActive = false;
storage.botActive = false;
botBtnText.setText('BOT: OFF');
botBtn.tint = 0xFFFFFF; // White when inactive
}
// Initialize displays
updateCoinDisplay();
updateMaterialDisplay();
updateRockAppearance();
// Initialize bot state
if (storage.evolutionLevel >= 5) {
botBtn.visible = true;
if (botActive) {
startBot();
}
} else {
botBtn.visible = false;
}
// Rock click handler
rock.down = function (x, y, obj) {
if (upgradeMenuOpen) return;
// Calculate base materials per click
var baseMaterials = storage.materialPerClick;
// Apply evolution level multiplier to all materials
var evolutionMultiplier = 1 + storage.evolutionLevel;
var totalParticles = 0;
// Generate materials based on evolution level - higher levels can produce multiple types
if (storage.evolutionLevel >= 8) {
// Ultimate level - produces all material types with ultimate bonus
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier;
materials.crystal += baseMaterials * evolutionMultiplier;
materials.magic += baseMaterials * evolutionMultiplier;
materials.diamond += baseMaterials * evolutionMultiplier;
materials.ancient += baseMaterials * evolutionMultiplier;
materials.cosmic += baseMaterials * evolutionMultiplier;
materials.ultimate += baseMaterials * evolutionMultiplier * 3;
totalParticles += baseMaterials * 10;
for (var i = 0; i < baseMaterials; i++) {
var materialTypes = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond', 'material_ancient', 'material_cosmic'];
for (var t = 0; t < materialTypes.length; t++) {
var particle = new MaterialParticle();
materialParticles.push(particle);
game.addChild(particle);
particle.init(rock.x, rock.y, materialTypes[t]);
}
}
for (var j = 0; j < baseMaterials * 3; j++) {
var ultimateParticle = new MaterialParticle();
materialParticles.push(ultimateParticle);
game.addChild(ultimateParticle);
ultimateParticle.init(rock.x, rock.y, 'material_ultimate');
}
} else if (storage.evolutionLevel >= 7) {
// Ultimate level variant - produces all material types with high ultimate bonus
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier;
materials.crystal += baseMaterials * evolutionMultiplier;
materials.magic += baseMaterials * evolutionMultiplier;
materials.diamond += baseMaterials * evolutionMultiplier;
materials.ancient += baseMaterials * evolutionMultiplier;
materials.cosmic += baseMaterials * evolutionMultiplier;
materials.ultimate += baseMaterials * evolutionMultiplier * 2;
totalParticles += baseMaterials * 9;
for (var i = 0; i < baseMaterials; i++) {
var materialTypes = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond', 'material_ancient', 'material_cosmic'];
for (var t = 0; t < materialTypes.length; t++) {
var particle = new MaterialParticle();
materialParticles.push(particle);
game.addChild(particle);
particle.init(rock.x, rock.y, materialTypes[t]);
}
}
for (var j = 0; j < baseMaterials * 2; j++) {
var ultimateParticle = new MaterialParticle();
materialParticles.push(ultimateParticle);
game.addChild(ultimateParticle);
ultimateParticle.init(rock.x, rock.y, 'material_ultimate');
}
} else if (storage.evolutionLevel >= 6) {
// Cosmic level - produces all previous materials plus cosmic
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier;
materials.crystal += baseMaterials * evolutionMultiplier;
materials.magic += baseMaterials * evolutionMultiplier;
materials.diamond += baseMaterials * evolutionMultiplier;
materials.ancient += baseMaterials * evolutionMultiplier;
materials.cosmic += baseMaterials * evolutionMultiplier * 3;
totalParticles += baseMaterials * 9;
for (var k = 0; k < baseMaterials; k++) {
var materialTypes2 = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond', 'material_ancient'];
for (var u = 0; u < materialTypes2.length; u++) {
var particle2 = new MaterialParticle();
materialParticles.push(particle2);
game.addChild(particle2);
particle2.init(rock.x, rock.y, materialTypes2[u]);
}
}
for (var l = 0; l < baseMaterials * 3; l++) {
var cosmicParticle = new MaterialParticle();
materialParticles.push(cosmicParticle);
game.addChild(cosmicParticle);
cosmicParticle.init(rock.x, rock.y, 'material_cosmic');
}
} else if (storage.evolutionLevel >= 5) {
// Ancient level - produces all previous materials plus ancient
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier;
materials.crystal += baseMaterials * evolutionMultiplier;
materials.magic += baseMaterials * evolutionMultiplier;
materials.diamond += baseMaterials * evolutionMultiplier;
materials.ancient += baseMaterials * evolutionMultiplier * 3;
totalParticles += baseMaterials * 8;
for (var m = 0; m < baseMaterials; m++) {
var materialTypes3 = ['material_stone', 'material_lava', 'material_crystal', 'material_magic', 'material_diamond'];
for (var v = 0; v < materialTypes3.length; v++) {
var particle3 = new MaterialParticle();
materialParticles.push(particle3);
game.addChild(particle3);
particle3.init(rock.x, rock.y, materialTypes3[v]);
}
}
for (var n = 0; n < baseMaterials * 3; n++) {
var ancientParticle = new MaterialParticle();
materialParticles.push(ancientParticle);
game.addChild(ancientParticle);
ancientParticle.init(rock.x, rock.y, 'material_ancient');
}
} else if (storage.evolutionLevel >= 4) {
// Diamond level - produces all previous materials plus diamond
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier;
materials.crystal += baseMaterials * evolutionMultiplier;
materials.magic += baseMaterials * evolutionMultiplier;
materials.diamond += baseMaterials * evolutionMultiplier * 3;
totalParticles += baseMaterials * 7;
for (var o = 0; o < baseMaterials; o++) {
var materialTypes4 = ['material_stone', 'material_lava', 'material_crystal', 'material_magic'];
for (var w = 0; w < materialTypes4.length; w++) {
var particle4 = new MaterialParticle();
materialParticles.push(particle4);
game.addChild(particle4);
particle4.init(rock.x, rock.y, materialTypes4[w]);
}
}
for (var p = 0; p < baseMaterials * 3; p++) {
var diamondParticle = new MaterialParticle();
materialParticles.push(diamondParticle);
game.addChild(diamondParticle);
diamondParticle.init(rock.x, rock.y, 'material_diamond');
}
} else if (storage.evolutionLevel >= 3) {
// Magic level - produces all material types
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier;
materials.crystal += baseMaterials * evolutionMultiplier;
materials.magic += baseMaterials * evolutionMultiplier * 2; // More magic materials at highest level
totalParticles += baseMaterials * 5;
// Create particles for each type
for (var i = 0; i < baseMaterials; i++) {
var stoneParticle = new MaterialParticle();
materialParticles.push(stoneParticle);
game.addChild(stoneParticle);
stoneParticle.init(rock.x, rock.y, 'material_stone');
var lavaParticle = new MaterialParticle();
materialParticles.push(lavaParticle);
game.addChild(lavaParticle);
lavaParticle.init(rock.x, rock.y, 'material_lava');
var crystalParticle = new MaterialParticle();
materialParticles.push(crystalParticle);
game.addChild(crystalParticle);
crystalParticle.init(rock.x, rock.y, 'material_crystal');
}
for (var j = 0; j < baseMaterials * 2; j++) {
var magicParticle = new MaterialParticle();
materialParticles.push(magicParticle);
game.addChild(magicParticle);
magicParticle.init(rock.x, rock.y, 'material_magic');
}
} else if (storage.evolutionLevel >= 2) {
// Crystal level - produces stone, lava, and crystal
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier;
materials.crystal += baseMaterials * evolutionMultiplier * 2; // More crystal materials
totalParticles += baseMaterials * 4;
for (var k = 0; k < baseMaterials; k++) {
var stoneParticle2 = new MaterialParticle();
materialParticles.push(stoneParticle2);
game.addChild(stoneParticle2);
stoneParticle2.init(rock.x, rock.y, 'material_stone');
var lavaParticle2 = new MaterialParticle();
materialParticles.push(lavaParticle2);
game.addChild(lavaParticle2);
lavaParticle2.init(rock.x, rock.y, 'material_lava');
}
for (var l = 0; l < baseMaterials * 2; l++) {
var crystalParticle2 = new MaterialParticle();
materialParticles.push(crystalParticle2);
game.addChild(crystalParticle2);
crystalParticle2.init(rock.x, rock.y, 'material_crystal');
}
} else if (storage.evolutionLevel >= 1) {
// Lava level - produces stone and lava
materials.stone += baseMaterials * evolutionMultiplier;
materials.lava += baseMaterials * evolutionMultiplier * 2; // More lava materials
totalParticles += baseMaterials * 3;
for (var m = 0; m < baseMaterials; m++) {
var stoneParticle3 = new MaterialParticle();
materialParticles.push(stoneParticle3);
game.addChild(stoneParticle3);
stoneParticle3.init(rock.x, rock.y, 'material_stone');
}
for (var n = 0; n < baseMaterials * 2; n++) {
var lavaParticle3 = new MaterialParticle();
materialParticles.push(lavaParticle3);
game.addChild(lavaParticle3);
lavaParticle3.init(rock.x, rock.y, 'material_lava');
}
} else {
// Basic level - only produces stone
materials.stone += baseMaterials * evolutionMultiplier;
totalParticles += baseMaterials;
for (var o = 0; o < baseMaterials; o++) {
var stoneParticle4 = new MaterialParticle();
materialParticles.push(stoneParticle4);
game.addChild(stoneParticle4);
stoneParticle4.init(rock.x, rock.y, 'material_stone');
}
}
updateMaterialDisplay();
// Rock animation
tween(rock, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(rock, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeIn
});
}
});
LK.getSound('mine').play();
};
// Upgrade button handler
upgradeBtn.down = function () {
upgradeMenuOpen = !upgradeMenuOpen;
upgradeMenu.visible = upgradeMenuOpen;
if (upgradeMenuOpen) {
upgradeMenu.updateTexts();
// Bring upgrade menu to front
game.removeChild(upgradeMenu);
game.addChild(upgradeMenu);
}
};
// Sell button handler
sellBtn.down = function () {
var totalMaterials = materials.stone + materials.lava + materials.crystal + materials.magic + materials.diamond + materials.ancient + materials.cosmic + materials.ultimate;
if (upgradeMenuOpen || totalMaterials <= 0) return;
// Convert all materials to coins with different values per type
var coinsToAdd = 0;
coinsToAdd += materials.stone * storage.coinValue;
coinsToAdd += materials.lava * storage.coinValue * 2;
coinsToAdd += materials.crystal * storage.coinValue * 3;
coinsToAdd += materials.magic * storage.coinValue * 5;
coinsToAdd += materials.diamond * storage.coinValue * 8;
coinsToAdd += materials.ancient * storage.coinValue * 12;
coinsToAdd += materials.cosmic * storage.coinValue * 20;
coinsToAdd += materials.ultimate * storage.coinValue * 50;
coins += coinsToAdd;
storage.coins = coins;
// Create coin particles for visual feedback
for (var i = 0; i < Math.min(totalMaterials, 5); i++) {
var coinParticle = new CoinParticle();
coinParticles.push(coinParticle);
game.addChild(coinParticle);
coinParticle.init(rock.x + i * 20 - 40, rock.y);
}
materials = {
stone: 0,
lava: 0,
crystal: 0,
magic: 0,
diamond: 0,
ancient: 0,
cosmic: 0,
ultimate: 0
};
updateCoinDisplay();
updateMaterialDisplay();
LK.getSound('coin').play();
};
// Debug button handler
debugBtn.down = function () {
debugMenuOpen = !debugMenuOpen;
debugMenu.visible = debugMenuOpen;
if (debugMenuOpen) {
// Bring debug menu to front
game.removeChild(debugMenu);
game.addChild(debugMenu);
console.log('Debug panel opened');
} else {
console.log('Debug panel closed');
}
};
// Bot button handler
botBtn.down = function () {
if (storage.evolutionLevel < 5) return;
if (botActive) {
stopBot();
} else {
startBot();
}
};
game.update = function () {
// Clean up destroyed particles
for (var i = materialParticles.length - 1; i >= 0; i--) {
if (materialParticles[i].destroyed) {
materialParticles.splice(i, 1);
}
}
for (var j = coinParticles.length - 1; j >= 0; j--) {
if (coinParticles[j].destroyed) {
coinParticles.splice(j, 1);
}
}
// Update debug button appearance
if (debugMode) {
debugBtn.tint = 0x00ff00; // Keep green when debug mode is on
debugBtnText.setText('DEBUG: ON');
} else {
debugBtn.tint = 0xFFFFFF; // Keep white when debug mode is off
debugBtnText.setText('DEBUG');
}
// Update rock appearance
updateRockAppearance();
};
saco de tierra. In-Game asset. 2d. High contrast. No shadows. pixelart
roca magma. In-Game asset. 2d. High contrast. No shadows. pixelart
roca con trozos de cristal. In-Game asset. 2d. High contrast. No shadows. pixelart
amatista. In-Game asset. 2d. High contrast. No shadows. pixelart
roca gris oscuro con diamantes. In-Game asset. 2d. High contrast. No shadows. pixelart
roca madre. In-Game asset. 2d. High contrast. No shadows. pixelart
lapizlazuli. In-Game asset. 2d. High contrast. No shadows. pixelart
mineral de oro con lapizlazuli incrustado. In-Game asset. 2d. High contrast. No shadows. pixelart
mina abandonada. In-Game asset. 2d. High contrast. No shadows. pixelart