User prompt
haz que el nivel maximo del bot sea 20 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
crea un boton para subir el nivel del bot y mientras mayor sea el nivel del bot menos tiempo durara para hacer click a la roca ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
haz que el tamaño de la roca no aumente por cada nivel
User prompt
a partir del nivel 5 poner un boton para activar el bot que haga click automaticamente a la roca cada 2 segundos
User prompt
crea 4 evoluciones de roca mas
User prompt
cada vez que evolucione la roca aumenta la cantidad de todos los materiales
User prompt
haz que puedas obtener mas de un material
User prompt
crea un boton para reinicial el progreso ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
haz que cada nivel de roca te de un material diferente
User prompt
en cada nivel de la roca da mas materiales
User prompt
al habrir el menu de updates que vaya a la capa delantera
User prompt
crea asets para los niveles de la roca
User prompt
elimina la funcion de que los materiales se vendadn automaticamente
User prompt
agrega un boton para vender los materiales
User prompt
agrega un boton en upgrades para evolucionar la roca
Code edit (1 edits merged)
Please save this source code
User prompt
Rock Miner Clicker
Initial prompt
crea un juego en el que al hacer click en una roca obtengas materiales que puedes vender a cambio de monedas que puedes utilizar para mejorar la roca
/**** * 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