/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var BitcoinParticle = Container.expand(function () { var self = Container.call(this); var particle = self.attachAsset('bitcoinIcon', { anchorX: 0.5, anchorY: 0.5 }); self.startY = 0; self.targetY = 0; self.animate = function (startY, targetY) { self.y = startY; self.startY = startY; self.targetY = targetY; tween(self, { y: targetY, alpha: 0 }, { duration: 2000, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var MiningRig = Container.expand(function (rigType) { var self = Container.call(this); // Rig properties based on type var rigStats = { basic: { hashRate: 0.01, powerCost: 0.5, price: 2500 }, advanced: { hashRate: 0.4, powerCost: 1.5, price: 1500 }, professional: { hashRate: 2.25, powerCost: 5.0, price: 7500 } }; self.rigType = rigType || 'basic'; self.stats = rigStats[self.rigType]; self.lastMineTime = Date.now(); var rigGraphics = self.attachAsset('miningRig', { anchorX: 0.5, anchorY: 0.5 }); // Add visual indicator for rig type if (self.rigType === 'advanced') { rigGraphics.tint = 0x8e44ad; } else if (self.rigType === 'professional') { rigGraphics.tint = 0xe67e22; } // Mining animation self.animate = function () { tween(rigGraphics, { scaleX: 1.1, scaleY: 1.1 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(rigGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 500, easing: tween.easeInOut }); } }); }; self.update = function () { var currentTime = Date.now(); if (currentTime - self.lastMineTime >= 10000) { // Mine every 10 seconds self.lastMineTime = currentTime; self.animate(); // Generate bitcoin based on hash rate with prestige multiplier var prestigeMultiplier = Math.pow(1.2, prestigePoints); bitcoin += self.stats.hashRate * prestigeMultiplier; // Power usage is calculated globally, not per rig // Play mining sound occasionally if (Math.random() < 0.1 && settings.effectsEnabled) { LK.getSound('mining').play(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // Add background image var backgroundImage = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); backgroundImage.x = 0; backgroundImage.y = 0; game.addChild(backgroundImage); // Game state variables var bitcoin = storage.bitcoin || 0; var cash = storage.cash || 1000; var miningRigs = []; var powerCapacity = storage.powerCapacity || 10; var coolingCapacity = storage.coolingCapacity || 10; var powerUsage = 0; var bitcoinPrice = 45000 + Math.random() * 10000; // Starting price between 45k-55k var lastPriceUpdate = Date.now(); var prestigePoints = storage.prestigePoints || 0; var showingPrestige = false; // UI Elements var bitcoinDisplay = new Text2('₿ 0.00000', { size: 50, fill: 0xF39C12 }); bitcoinDisplay.anchor.set(0, 0); bitcoinDisplay.x = 150; bitcoinDisplay.y = 50; LK.gui.topLeft.addChild(bitcoinDisplay); var cashDisplay = new Text2('$ 1,000', { size: 50, fill: 0x27AE60 }); cashDisplay.anchor.set(0, 0); cashDisplay.x = 150; cashDisplay.y = 120; LK.gui.topLeft.addChild(cashDisplay); var priceDisplay = new Text2('BTC: $45,000', { size: 40, fill: 0xFFFFFF }); priceDisplay.anchor.set(1, 0); LK.gui.topRight.addChild(priceDisplay); var powerDisplay = new Text2('Power: 0/10', { size: 35, fill: 0xE74C3C }); powerDisplay.anchor.set(0.5, 0); powerDisplay.y = 50; LK.gui.top.addChild(powerDisplay); // Power meter visual var powerMeterBg = LK.getAsset('powerMeter', { anchorX: 0.5, anchorY: 0.5 }); powerMeterBg.tint = 0x34495e; powerMeterBg.x = 1024; powerMeterBg.y = 150; game.addChild(powerMeterBg); var powerMeterFill = LK.getAsset('powerMeter', { anchorX: 0, anchorY: 0.5, scaleX: 0 }); powerMeterFill.x = powerMeterBg.x - powerMeterBg.width / 2; powerMeterFill.y = powerMeterBg.y; game.addChild(powerMeterFill); // Upgrade buttons var rigUpgradeButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); rigUpgradeButton.x = 300; rigUpgradeButton.y = 2600; game.addChild(rigUpgradeButton); var rigUpgradeText = new Text2('Buy Mining Rig - $100', { size: 50, fill: 0xFFFFFF }); rigUpgradeText.anchor.set(0.5, 0.5); rigUpgradeText.x = rigUpgradeButton.x; rigUpgradeText.y = rigUpgradeButton.y; game.addChild(rigUpgradeText); var powerUpgradeButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); powerUpgradeButton.x = 850; powerUpgradeButton.y = 2600; game.addChild(powerUpgradeButton); var powerUpgradeText = new Text2('Upgrade Power - $200', { size: 50, fill: 0xFFFFFF }); powerUpgradeText.anchor.set(0.5, 0.5); powerUpgradeText.x = powerUpgradeButton.x; powerUpgradeText.y = powerUpgradeButton.y; game.addChild(powerUpgradeText); var sellButton = LK.getAsset('sellButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); sellButton.x = 1300; sellButton.y = 2600; game.addChild(sellButton); var sellButtonText = new Text2(' SELL ', { size: 50, fill: 0xFFFFFF }); sellButtonText.anchor.set(0.5, 0.5); sellButtonText.x = sellButton.x; sellButtonText.y = sellButton.y; game.addChild(sellButtonText); // Mining rig types and costs - only basic rigs available var rigTypes = ['basic']; var currentRigType = 0; // Starting mining rigs if (storage.rigCount === undefined) { var startingRig = new MiningRig('basic'); startingRig.x = 400; startingRig.y = 400; game.addChild(startingRig); miningRigs.push(startingRig); storage.rigCount = 1; storage.rigTypes = ['basic']; } else { // Restore saved rigs var savedRigTypes = storage.rigTypes || []; for (var i = 0; i < storage.rigCount; i++) { var rigType = savedRigTypes[i] || 'basic'; var rig = new MiningRig(rigType); rig.x = 400 + i % 10 * 140; rig.y = 400 + Math.floor(i / 10) * 120; game.addChild(rig); miningRigs.push(rig); } } // Number formatting utility function formatNumber(num) { if (num < 1000) { return num.toFixed(0); } else if (num < 1000000) { return (num / 1000).toFixed(1) + 'K'; } else if (num < 1000000000) { return (num / 1000000).toFixed(1) + 'M'; } else if (num < 1000000000000) { return (num / 1000000000).toFixed(1) + 'B'; } else if (num < 1000000000000000) { return (num / 1000000000000).toFixed(1) + 'T'; } else if (num < 1000000000000000000) { return (num / 1000000000000000).toFixed(1) + 'Qa'; } else { return (num / 1000000000000000000).toFixed(1) + 'Qi'; } } // Utility functions function updateUI() { bitcoinDisplay.setText(texts[settings.language].bitcoin + ' ' + bitcoin.toFixed(5)); cashDisplay.setText(texts[settings.language].cash + ' ' + formatNumber(cash)); priceDisplay.setText(texts[settings.language].btcPrice + formatNumber(bitcoinPrice)); powerDisplay.setText(texts[settings.language].power + powerUsage.toFixed(1) + '/' + powerCapacity); // Update power meter var powerRatio = Math.min(powerUsage / powerCapacity, 1); powerMeterFill.scaleX = powerRatio; if (powerRatio > 0.9) { powerMeterFill.tint = 0xe74c3c; // Red when near capacity } else if (powerRatio > 0.7) { powerMeterFill.tint = 0xf39c12; // Orange when high } else { powerMeterFill.tint = 0x27ae60; // Green when safe } // Update upgrade button costs - only basic rigs var rigType = 'basic'; var baseCost = 2500; var rigCost = baseCost * Math.pow(1.3, Math.floor(miningRigs.length / 3)); var rigName = 'Basic'; rigUpgradeText.setText(texts[settings.language].buyRig + rigName + texts[settings.language].rig + formatNumber(rigCost)); var powerCost = 500 * Math.pow(1.5, (powerCapacity - 10) / 1); powerUpgradeText.setText(texts[settings.language].upgradePower + formatNumber(powerCost)); } function spawnBitcoinParticle() { if (Math.random() < 0.002) { // 0.2% chance per frame when mining var particle = new BitcoinParticle(); particle.x = 400 + Math.random() * 800; particle.animate(300, 150); game.addChild(particle); } } // Function to calculate total power requirement function calculateTotalPowerUsage() { var totalPower = 0; for (var i = 0; i < miningRigs.length; i++) { totalPower += miningRigs[i].stats.powerCost; } return totalPower; } // Settings state var settings = storage.settings || { musicEnabled: true, effectsEnabled: true, language: 'en' }; var showingSettings = false; // Admin state var adminMode = false; var showingAdmin = false; var unlimitedMoney = false; // Language texts var texts = { en: { bitcoin: '₿', cash: '$', btcPrice: 'BTC: $', power: 'Power: ', buyRig: 'Buy ', rig: ' Rig - $', upgradePower: 'Upgrade Power - $', sellBitcoin: 'Sell Bitcoin', settings: 'Settings', music: 'Music', effects: 'Effects', language: 'Language', reset: 'Reset Game', on: 'ON', off: 'OFF', english: 'English', turkish: 'Turkish', close: 'Close' }, tr: { bitcoin: '₿', cash: '$', btcPrice: 'BTC: $', power: 'Güç: ', buyRig: 'Al ', rig: ' Cihaz - $', upgradePower: 'Güç Yükselt - $', sellBitcoin: 'Bitcoin Sat', settings: 'Ayarlar', music: 'Müzik', effects: 'Efektler', language: 'Dil', reset: 'Oyunu Sıfırla', on: 'AÇIK', off: 'KAPALI', english: 'İngilizce', turkish: 'Türkçe', close: 'Kapat' } }; // Settings button var settingsButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); settingsButton.interactive = true; settingsButton.x = 1800; settingsButton.y = 2600; game.addChild(settingsButton); var settingsButtonText = new Text2(texts[settings.language].settings, { size: 50, fill: 0xFFFFFF }); settingsButtonText.anchor.set(0.5, 0.5); settingsButtonText.x = settingsButton.x; settingsButtonText.y = settingsButton.y; game.addChild(settingsButtonText); // Admin button (hidden by default) var adminButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); adminButton.interactive = true; adminButton.tint = 0xFF0000; adminButton.x = 1224; adminButton.y = 500; adminButton.visible = adminMode; game.addChild(adminButton); var adminButtonText = new Text2('ADMIN', { size: 30, fill: 0xFFFFFF }); adminButtonText.anchor.set(0.5, 0.5); adminButtonText.x = adminButton.x; adminButtonText.y = adminButton.y; adminButtonText.visible = adminMode; game.addChild(adminButtonText); // Settings panel var settingsPanel = new Container(); settingsPanel.visible = false; var panelBg = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 6, scaleY: 10 }); panelBg.tint = 0x2c3e50; panelBg.x = 0; panelBg.y = 0; settingsPanel.x = 2048 / 2; settingsPanel.y = 2732 / 2; settingsPanel.addChild(panelBg); // Music toggle var musicToggle = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 1.2 }); musicToggle.interactive = true; musicToggle.x = 0; musicToggle.y = -266; settingsPanel.addChild(musicToggle); var musicText = new Text2(texts[settings.language].music + ': ' + (settings.musicEnabled ? texts[settings.language].on : texts[settings.language].off), { size: 60, fill: 0xFFFFFF }); musicText.anchor.set(0.5, 0.5); musicText.x = musicToggle.x; musicText.y = musicToggle.y; settingsPanel.addChild(musicText); // Effects toggle var effectsToggle = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 1.2 }); effectsToggle.interactive = true; effectsToggle.x = 0; effectsToggle.y = -116; settingsPanel.addChild(effectsToggle); var effectsText = new Text2(texts[settings.language].effects + ': ' + (settings.effectsEnabled ? texts[settings.language].on : texts[settings.language].off), { size: 60, fill: 0xFFFFFF }); effectsText.anchor.set(0.5, 0.5); effectsText.x = effectsToggle.x; effectsText.y = effectsToggle.y; settingsPanel.addChild(effectsText); // Language toggle var languageToggle = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 1.2 }); languageToggle.interactive = true; languageToggle.x = 0; languageToggle.y = 34; settingsPanel.addChild(languageToggle); var languageText = new Text2(texts[settings.language].language + ': ' + (settings.language === 'en' ? texts[settings.language].english : texts[settings.language].turkish), { size: 60, fill: 0xFFFFFF }); languageText.anchor.set(0.5, 0.5); languageText.x = languageToggle.x; languageText.y = languageToggle.y; settingsPanel.addChild(languageText); // Reset button var resetButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 1.2 }); resetButton.interactive = true; resetButton.tint = 0xe74c3c; resetButton.x = 0; resetButton.y = 184; settingsPanel.addChild(resetButton); var resetText = new Text2(texts[settings.language].reset, { size: 60, fill: 0xFFFFFF }); resetText.anchor.set(0.5, 0.5); resetText.x = resetButton.x; resetText.y = resetButton.y; settingsPanel.addChild(resetText); // Reset button var resetButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 1.2 }); resetButton.interactive = true; resetButton.tint = 0xe74c3c; resetButton.x = 0; resetButton.y = 184; settingsPanel.addChild(resetButton); var resetText = new Text2(texts[settings.language].reset, { size: 60, fill: 0xFFFFFF }); resetText.anchor.set(0.5, 0.5); resetText.x = resetButton.x; resetText.y = resetButton.y; settingsPanel.addChild(resetText); // Close button var closeButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.2, scaleY: 1.2 }); closeButton.interactive = true; closeButton.x = 0; closeButton.y = 484; settingsPanel.addChild(closeButton); var closeText = new Text2(texts[settings.language].close, { size: 60, fill: 0xFFFFFF }); closeText.anchor.set(0.5, 0.5); closeText.x = closeButton.x; closeText.y = closeButton.y; settingsPanel.addChild(closeText); LK.gui.addChild(settingsPanel); // Prestige panel var prestigePanel = new Container(); prestigePanel.visible = false; var prestigePanelBg = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 6, scaleY: 8 }); prestigePanelBg.tint = 0x8e44ad; prestigePanelBg.x = 0; prestigePanelBg.y = 0; prestigePanel.x = 1024; prestigePanel.y = 1366; prestigePanel.addChild(prestigePanelBg); // Prestige title var prestigeTitle = new Text2('PRESTIGE AVAILABLE!', { size: 80, fill: 0xFFFFFF }); prestigeTitle.anchor.set(0.5, 0.5); prestigeTitle.x = 0; prestigeTitle.y = -250; prestigePanel.addChild(prestigeTitle); // Prestige info var prestigeInfo = new Text2('You have reached 100 rigs!\nPrestige to reset progress\nand gain permanent bonuses', { size: 50, fill: 0xFFFFFF }); prestigeInfo.anchor.set(0.5, 0.5); prestigeInfo.x = 0; prestigeInfo.y = -100; prestigePanel.addChild(prestigeInfo); // Current prestige points display var currentPrestigeText = new Text2('Current Prestige Points: ' + prestigePoints, { size: 45, fill: 0xF39C12 }); currentPrestigeText.anchor.set(0.5, 0.5); currentPrestigeText.x = 0; currentPrestigeText.y = 0; prestigePanel.addChild(currentPrestigeText); // Prestige multiplier display var multiplierText = new Text2('Current Multiplier: ' + Math.pow(1.2, prestigePoints).toFixed(2) + 'x', { size: 45, fill: 0x27AE60 }); multiplierText.anchor.set(0.5, 0.5); multiplierText.x = 0; multiplierText.y = 70; prestigePanel.addChild(multiplierText); // Prestige button var prestigeButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 1.5 }); prestigeButton.interactive = true; prestigeButton.tint = 0x8e44ad; prestigeButton.x = 0; prestigeButton.y = 180; prestigePanel.addChild(prestigeButton); var prestigeButtonText = new Text2('PRESTIGE (+1 Point)', { size: 55, fill: 0xFFFFFF }); prestigeButtonText.anchor.set(0.5, 0.5); prestigeButtonText.x = prestigeButton.x; prestigeButtonText.y = prestigeButton.y; prestigePanel.addChild(prestigeButtonText); LK.gui.addChild(prestigePanel); // Admin panel var adminPanel = new Container(); adminPanel.visible = false; var adminPanelBg = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 6, scaleY: 6 }); adminPanelBg.tint = 0x2c3e50; adminPanelBg.x = 0; adminPanelBg.y = 0; adminPanel.x = 1024; adminPanel.y = 1366; adminPanel.addChild(adminPanelBg); // Admin title var adminTitle = new Text2('ADMIN PANEL', { size: 80, fill: 0xFF0000 }); adminTitle.anchor.set(0.5, 0.5); adminTitle.x = 0; adminTitle.y = -200; adminPanel.addChild(adminTitle); // Unlimited money toggle var unlimitedMoneyToggle = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 1.2 }); unlimitedMoneyToggle.interactive = true; unlimitedMoneyToggle.x = 0; unlimitedMoneyToggle.y = -50; adminPanel.addChild(unlimitedMoneyToggle); var unlimitedMoneyText = new Text2('Unlimited Money: ' + (unlimitedMoney ? 'ON' : 'OFF'), { size: 50, fill: 0xFFFFFF }); unlimitedMoneyText.anchor.set(0.5, 0.5); unlimitedMoneyText.x = unlimitedMoneyToggle.x; unlimitedMoneyText.y = unlimitedMoneyToggle.y; adminPanel.addChild(unlimitedMoneyText); // Admin close button var adminCloseButton = LK.getAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.2, scaleY: 1.2 }); adminCloseButton.interactive = true; adminCloseButton.x = 0; adminCloseButton.y = 100; adminPanel.addChild(adminCloseButton); var adminCloseText = new Text2('Close', { size: 60, fill: 0xFFFFFF }); adminCloseText.anchor.set(0.5, 0.5); adminCloseText.x = adminCloseButton.x; adminCloseText.y = adminCloseButton.y; adminPanel.addChild(adminCloseText); LK.gui.addChild(adminPanel); // Function to update language texts function updateLanguageTexts() { settingsButtonText.setText(texts[settings.language].settings); musicText.setText(texts[settings.language].music + ': ' + (settings.musicEnabled ? texts[settings.language].on : texts[settings.language].off)); effectsText.setText(texts[settings.language].effects + ': ' + (settings.effectsEnabled ? texts[settings.language].on : texts[settings.language].off)); languageText.setText(texts[settings.language].language + ': ' + (settings.language === 'en' ? texts[settings.language].english : texts[settings.language].turkish)); resetText.setText(texts[settings.language].reset); closeText.setText(texts[settings.language].close); sellButtonText.setText(texts[settings.language].sellBitcoin); } // Settings button handler settingsButton.down = function (x, y, obj) { showingSettings = !showingSettings; settingsPanel.visible = showingSettings; if (settings.effectsEnabled) { LK.effects.flashObject(settingsButton, 0x3498db, 300); } }; // Music toggle handler musicToggle.down = function (x, y, obj) { settings.musicEnabled = !settings.musicEnabled; storage.settings = settings; updateLanguageTexts(); // Control music playback based on setting if (settings.musicEnabled) { LK.playMusic('Music'); } else { LK.stopMusic(); } if (settings.effectsEnabled) { LK.effects.flashObject(musicToggle, 0x27ae60, 300); } }; // Effects toggle handler effectsToggle.down = function (x, y, obj) { settings.effectsEnabled = !settings.effectsEnabled; storage.settings = settings; updateLanguageTexts(); LK.effects.flashObject(effectsToggle, 0x27ae60, 300); }; // Language toggle handler languageToggle.down = function (x, y, obj) { settings.language = settings.language === 'en' ? 'tr' : 'en'; storage.settings = settings; updateLanguageTexts(); if (settings.effectsEnabled) { LK.effects.flashObject(languageToggle, 0x27ae60, 300); } }; // Reset button handler resetButton.down = function (x, y, obj) { // Clear all storage storage.bitcoin = 0; storage.cash = 1000; storage.powerCapacity = 10; delete storage.rigCount; delete storage.rigTypes; storage.settings = { musicEnabled: true, effectsEnabled: true, language: 'en' }; if (settings.effectsEnabled) { LK.effects.flashObject(resetButton, 0xe74c3c, 500); } // Show game over to restart LK.setTimeout(function () { LK.showGameOver(); }, 600); }; // Close button handler closeButton.down = function (x, y, obj) { showingSettings = false; settingsPanel.visible = false; if (settings.effectsEnabled) { LK.effects.flashObject(closeButton, 0x95a5a6, 300); } }; // Prestige button handler prestigeButton.down = function (x, y, obj) { prestigePoints += 1; storage.prestigePoints = prestigePoints; // Reset game state bitcoin = 0; cash = 1000; powerCapacity = 10; // Clear all rigs for (var i = 0; i < miningRigs.length; i++) { miningRigs[i].destroy(); } miningRigs = []; // Reset storage storage.bitcoin = 0; storage.cash = 1000; storage.powerCapacity = 10; storage.rigCount = 0; storage.rigTypes = []; // Hide prestige panel showingPrestige = false; prestigePanel.visible = false; if (settings.effectsEnabled) { LK.effects.flashObject(prestigeButton, 0x8e44ad, 500); } // Create starting rig var startingRig = new MiningRig('basic'); startingRig.x = 400; startingRig.y = 400; game.addChild(startingRig); miningRigs.push(startingRig); storage.rigCount = 1; storage.rigTypes = ['basic']; }; // Admin button handler adminButton.down = function (x, y, obj) { showingAdmin = !showingAdmin; adminPanel.visible = showingAdmin; if (settings.effectsEnabled) { LK.effects.flashObject(adminButton, 0xFF0000, 300); } }; // Unlimited money toggle handler unlimitedMoneyToggle.down = function (x, y, obj) { unlimitedMoney = !unlimitedMoney; unlimitedMoneyText.setText('Unlimited Money: ' + (unlimitedMoney ? 'ON' : 'OFF')); if (settings.effectsEnabled) { LK.effects.flashObject(unlimitedMoneyToggle, 0x27ae60, 300); } }; // Admin close button handler adminCloseButton.down = function (x, y, obj) { showingAdmin = false; adminPanel.visible = false; if (settings.effectsEnabled) { LK.effects.flashObject(adminCloseButton, 0x95a5a6, 300); } }; // Admin mode activation (secret tap sequence on bitcoin display) var adminTapCount = 0; var lastAdminTap = 0; bitcoinDisplay.interactive = true; bitcoinDisplay.down = function (x, y, obj) { var currentTime = Date.now(); if (currentTime - lastAdminTap < 1000) { adminTapCount++; if (adminTapCount >= 5) { adminMode = true; adminButton.visible = true; adminButtonText.visible = true; adminTapCount = 0; if (settings.effectsEnabled) { LK.effects.flashObject(bitcoinDisplay, 0xFF0000, 500); } } } else { adminTapCount = 1; } lastAdminTap = currentTime; }; // Event handlers rigUpgradeButton.down = function (x, y, obj) { var rigType = 'basic'; var baseCost = 2500; var rigCost = baseCost * Math.pow(1.3, Math.floor(miningRigs.length / 3)); var powerRequired = 0.5; var currentTotalPower = calculateTotalPowerUsage(); if ((cash >= rigCost || unlimitedMoney) && currentTotalPower + powerRequired <= powerCapacity && miningRigs.length < 100) { if (!unlimitedMoney) { cash -= rigCost; } else { cash = Math.max(cash, 999999999); // Ensure cash stays high in unlimited mode } var newRig = new MiningRig(rigType); newRig.x = 400 + miningRigs.length % 10 * 140; newRig.y = 400 + Math.floor(miningRigs.length / 10) * 120; game.addChild(newRig); miningRigs.push(newRig); // Save rig types if (!storage.rigTypes) { storage.rigTypes = []; } storage.rigTypes.push(rigType); storage.rigCount = miningRigs.length; if (settings.effectsEnabled) { LK.getSound('purchase').play(); // Flash effect LK.effects.flashObject(rigUpgradeButton, 0x27ae60, 300); } } }; powerUpgradeButton.down = function (x, y, obj) { var powerCost = 500 * Math.pow(1.5, (powerCapacity - 10) / 1); if ((cash >= powerCost || unlimitedMoney) && powerCapacity < 50) { if (!unlimitedMoney) { cash -= powerCost; } else { cash = Math.max(cash, 999999999); // Ensure cash stays high in unlimited mode } powerCapacity += 1; storage.powerCapacity = powerCapacity; if (settings.effectsEnabled) { LK.getSound('purchase').play(); // Flash effect LK.effects.flashObject(powerUpgradeButton, 0x27ae60, 300); } } }; sellButton.down = function (x, y, obj) { if (bitcoin >= 0.01) { var sellAmount = bitcoin; var earnings = sellAmount * bitcoinPrice; cash += earnings; bitcoin = 0; if (settings.effectsEnabled) { LK.getSound('coin').play(); // Flash effect LK.effects.flashObject(sellButton, 0xf39c12, 500); } // Show earnings popup var earningsText = new Text2('+$' + formatNumber(earnings), { size: 60, fill: 0xF39C12 }); earningsText.anchor.set(0.5, 0.5); earningsText.x = sellButton.x; earningsText.y = sellButton.y - 100; game.addChild(earningsText); tween(earningsText, { y: earningsText.y - 100, alpha: 0 }, { duration: 2000, easing: tween.easeOut, onFinish: function onFinish() { earningsText.destroy(); } }); } }; // Start playing background music if (settings.musicEnabled) { LK.playMusic('Music'); } game.update = function () { powerUsage = calculateTotalPowerUsage(); // Calculate total power usage from all rigs // Update bitcoin price periodically if (Date.now() - lastPriceUpdate > 5000) { // Every 5 seconds lastPriceUpdate = Date.now(); var priceChange = (Math.random() - 0.5) * 0.1; // ±5% change bitcoinPrice = Math.max(10000, bitcoinPrice * (1 + priceChange)); } // Spawn bitcoin particles when mining if (miningRigs.length > 0) { spawnBitcoinParticle(); } // Check for prestige availability if (miningRigs.length >= 100 && !showingPrestige) { showingPrestige = true; prestigePanel.visible = true; // Update prestige panel text currentPrestigeText.setText('Current Prestige Points: ' + prestigePoints); multiplierText.setText('Current Multiplier: ' + Math.pow(1.2, prestigePoints).toFixed(2) + 'x'); } updateUI(); // Save progress periodically if (LK.ticks % 300 === 0) { // Every 5 seconds storage.bitcoin = bitcoin; storage.cash = cash; storage.powerCapacity = powerCapacity; storage.rigCount = miningRigs.length; // Save rig types var rigTypesToSave = []; for (var i = 0; i < miningRigs.length; i++) { rigTypesToSave.push(miningRigs[i].rigType); } storage.rigTypes = rigTypesToSave; } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BitcoinParticle = Container.expand(function () {
var self = Container.call(this);
var particle = self.attachAsset('bitcoinIcon', {
anchorX: 0.5,
anchorY: 0.5
});
self.startY = 0;
self.targetY = 0;
self.animate = function (startY, targetY) {
self.y = startY;
self.startY = startY;
self.targetY = targetY;
tween(self, {
y: targetY,
alpha: 0
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
var MiningRig = Container.expand(function (rigType) {
var self = Container.call(this);
// Rig properties based on type
var rigStats = {
basic: {
hashRate: 0.01,
powerCost: 0.5,
price: 2500
},
advanced: {
hashRate: 0.4,
powerCost: 1.5,
price: 1500
},
professional: {
hashRate: 2.25,
powerCost: 5.0,
price: 7500
}
};
self.rigType = rigType || 'basic';
self.stats = rigStats[self.rigType];
self.lastMineTime = Date.now();
var rigGraphics = self.attachAsset('miningRig', {
anchorX: 0.5,
anchorY: 0.5
});
// Add visual indicator for rig type
if (self.rigType === 'advanced') {
rigGraphics.tint = 0x8e44ad;
} else if (self.rigType === 'professional') {
rigGraphics.tint = 0xe67e22;
}
// Mining animation
self.animate = function () {
tween(rigGraphics, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(rigGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 500,
easing: tween.easeInOut
});
}
});
};
self.update = function () {
var currentTime = Date.now();
if (currentTime - self.lastMineTime >= 10000) {
// Mine every 10 seconds
self.lastMineTime = currentTime;
self.animate();
// Generate bitcoin based on hash rate with prestige multiplier
var prestigeMultiplier = Math.pow(1.2, prestigePoints);
bitcoin += self.stats.hashRate * prestigeMultiplier;
// Power usage is calculated globally, not per rig
// Play mining sound occasionally
if (Math.random() < 0.1 && settings.effectsEnabled) {
LK.getSound('mining').play();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Add background image
var backgroundImage = LK.getAsset('background', {
anchorX: 0,
anchorY: 0
});
backgroundImage.x = 0;
backgroundImage.y = 0;
game.addChild(backgroundImage);
// Game state variables
var bitcoin = storage.bitcoin || 0;
var cash = storage.cash || 1000;
var miningRigs = [];
var powerCapacity = storage.powerCapacity || 10;
var coolingCapacity = storage.coolingCapacity || 10;
var powerUsage = 0;
var bitcoinPrice = 45000 + Math.random() * 10000; // Starting price between 45k-55k
var lastPriceUpdate = Date.now();
var prestigePoints = storage.prestigePoints || 0;
var showingPrestige = false;
// UI Elements
var bitcoinDisplay = new Text2('₿ 0.00000', {
size: 50,
fill: 0xF39C12
});
bitcoinDisplay.anchor.set(0, 0);
bitcoinDisplay.x = 150;
bitcoinDisplay.y = 50;
LK.gui.topLeft.addChild(bitcoinDisplay);
var cashDisplay = new Text2('$ 1,000', {
size: 50,
fill: 0x27AE60
});
cashDisplay.anchor.set(0, 0);
cashDisplay.x = 150;
cashDisplay.y = 120;
LK.gui.topLeft.addChild(cashDisplay);
var priceDisplay = new Text2('BTC: $45,000', {
size: 40,
fill: 0xFFFFFF
});
priceDisplay.anchor.set(1, 0);
LK.gui.topRight.addChild(priceDisplay);
var powerDisplay = new Text2('Power: 0/10', {
size: 35,
fill: 0xE74C3C
});
powerDisplay.anchor.set(0.5, 0);
powerDisplay.y = 50;
LK.gui.top.addChild(powerDisplay);
// Power meter visual
var powerMeterBg = LK.getAsset('powerMeter', {
anchorX: 0.5,
anchorY: 0.5
});
powerMeterBg.tint = 0x34495e;
powerMeterBg.x = 1024;
powerMeterBg.y = 150;
game.addChild(powerMeterBg);
var powerMeterFill = LK.getAsset('powerMeter', {
anchorX: 0,
anchorY: 0.5,
scaleX: 0
});
powerMeterFill.x = powerMeterBg.x - powerMeterBg.width / 2;
powerMeterFill.y = powerMeterBg.y;
game.addChild(powerMeterFill);
// Upgrade buttons
var rigUpgradeButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
rigUpgradeButton.x = 300;
rigUpgradeButton.y = 2600;
game.addChild(rigUpgradeButton);
var rigUpgradeText = new Text2('Buy Mining Rig - $100', {
size: 50,
fill: 0xFFFFFF
});
rigUpgradeText.anchor.set(0.5, 0.5);
rigUpgradeText.x = rigUpgradeButton.x;
rigUpgradeText.y = rigUpgradeButton.y;
game.addChild(rigUpgradeText);
var powerUpgradeButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
powerUpgradeButton.x = 850;
powerUpgradeButton.y = 2600;
game.addChild(powerUpgradeButton);
var powerUpgradeText = new Text2('Upgrade Power - $200', {
size: 50,
fill: 0xFFFFFF
});
powerUpgradeText.anchor.set(0.5, 0.5);
powerUpgradeText.x = powerUpgradeButton.x;
powerUpgradeText.y = powerUpgradeButton.y;
game.addChild(powerUpgradeText);
var sellButton = LK.getAsset('sellButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
sellButton.x = 1300;
sellButton.y = 2600;
game.addChild(sellButton);
var sellButtonText = new Text2(' SELL ', {
size: 50,
fill: 0xFFFFFF
});
sellButtonText.anchor.set(0.5, 0.5);
sellButtonText.x = sellButton.x;
sellButtonText.y = sellButton.y;
game.addChild(sellButtonText);
// Mining rig types and costs - only basic rigs available
var rigTypes = ['basic'];
var currentRigType = 0;
// Starting mining rigs
if (storage.rigCount === undefined) {
var startingRig = new MiningRig('basic');
startingRig.x = 400;
startingRig.y = 400;
game.addChild(startingRig);
miningRigs.push(startingRig);
storage.rigCount = 1;
storage.rigTypes = ['basic'];
} else {
// Restore saved rigs
var savedRigTypes = storage.rigTypes || [];
for (var i = 0; i < storage.rigCount; i++) {
var rigType = savedRigTypes[i] || 'basic';
var rig = new MiningRig(rigType);
rig.x = 400 + i % 10 * 140;
rig.y = 400 + Math.floor(i / 10) * 120;
game.addChild(rig);
miningRigs.push(rig);
}
}
// Number formatting utility
function formatNumber(num) {
if (num < 1000) {
return num.toFixed(0);
} else if (num < 1000000) {
return (num / 1000).toFixed(1) + 'K';
} else if (num < 1000000000) {
return (num / 1000000).toFixed(1) + 'M';
} else if (num < 1000000000000) {
return (num / 1000000000).toFixed(1) + 'B';
} else if (num < 1000000000000000) {
return (num / 1000000000000).toFixed(1) + 'T';
} else if (num < 1000000000000000000) {
return (num / 1000000000000000).toFixed(1) + 'Qa';
} else {
return (num / 1000000000000000000).toFixed(1) + 'Qi';
}
}
// Utility functions
function updateUI() {
bitcoinDisplay.setText(texts[settings.language].bitcoin + ' ' + bitcoin.toFixed(5));
cashDisplay.setText(texts[settings.language].cash + ' ' + formatNumber(cash));
priceDisplay.setText(texts[settings.language].btcPrice + formatNumber(bitcoinPrice));
powerDisplay.setText(texts[settings.language].power + powerUsage.toFixed(1) + '/' + powerCapacity);
// Update power meter
var powerRatio = Math.min(powerUsage / powerCapacity, 1);
powerMeterFill.scaleX = powerRatio;
if (powerRatio > 0.9) {
powerMeterFill.tint = 0xe74c3c; // Red when near capacity
} else if (powerRatio > 0.7) {
powerMeterFill.tint = 0xf39c12; // Orange when high
} else {
powerMeterFill.tint = 0x27ae60; // Green when safe
}
// Update upgrade button costs - only basic rigs
var rigType = 'basic';
var baseCost = 2500;
var rigCost = baseCost * Math.pow(1.3, Math.floor(miningRigs.length / 3));
var rigName = 'Basic';
rigUpgradeText.setText(texts[settings.language].buyRig + rigName + texts[settings.language].rig + formatNumber(rigCost));
var powerCost = 500 * Math.pow(1.5, (powerCapacity - 10) / 1);
powerUpgradeText.setText(texts[settings.language].upgradePower + formatNumber(powerCost));
}
function spawnBitcoinParticle() {
if (Math.random() < 0.002) {
// 0.2% chance per frame when mining
var particle = new BitcoinParticle();
particle.x = 400 + Math.random() * 800;
particle.animate(300, 150);
game.addChild(particle);
}
}
// Function to calculate total power requirement
function calculateTotalPowerUsage() {
var totalPower = 0;
for (var i = 0; i < miningRigs.length; i++) {
totalPower += miningRigs[i].stats.powerCost;
}
return totalPower;
}
// Settings state
var settings = storage.settings || {
musicEnabled: true,
effectsEnabled: true,
language: 'en'
};
var showingSettings = false;
// Admin state
var adminMode = false;
var showingAdmin = false;
var unlimitedMoney = false;
// Language texts
var texts = {
en: {
bitcoin: '₿',
cash: '$',
btcPrice: 'BTC: $',
power: 'Power: ',
buyRig: 'Buy ',
rig: ' Rig - $',
upgradePower: 'Upgrade Power - $',
sellBitcoin: 'Sell Bitcoin',
settings: 'Settings',
music: 'Music',
effects: 'Effects',
language: 'Language',
reset: 'Reset Game',
on: 'ON',
off: 'OFF',
english: 'English',
turkish: 'Turkish',
close: 'Close'
},
tr: {
bitcoin: '₿',
cash: '$',
btcPrice: 'BTC: $',
power: 'Güç: ',
buyRig: 'Al ',
rig: ' Cihaz - $',
upgradePower: 'Güç Yükselt - $',
sellBitcoin: 'Bitcoin Sat',
settings: 'Ayarlar',
music: 'Müzik',
effects: 'Efektler',
language: 'Dil',
reset: 'Oyunu Sıfırla',
on: 'AÇIK',
off: 'KAPALI',
english: 'İngilizce',
turkish: 'Türkçe',
close: 'Kapat'
}
};
// Settings button
var settingsButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
settingsButton.interactive = true;
settingsButton.x = 1800;
settingsButton.y = 2600;
game.addChild(settingsButton);
var settingsButtonText = new Text2(texts[settings.language].settings, {
size: 50,
fill: 0xFFFFFF
});
settingsButtonText.anchor.set(0.5, 0.5);
settingsButtonText.x = settingsButton.x;
settingsButtonText.y = settingsButton.y;
game.addChild(settingsButtonText);
// Admin button (hidden by default)
var adminButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
adminButton.interactive = true;
adminButton.tint = 0xFF0000;
adminButton.x = 1224;
adminButton.y = 500;
adminButton.visible = adminMode;
game.addChild(adminButton);
var adminButtonText = new Text2('ADMIN', {
size: 30,
fill: 0xFFFFFF
});
adminButtonText.anchor.set(0.5, 0.5);
adminButtonText.x = adminButton.x;
adminButtonText.y = adminButton.y;
adminButtonText.visible = adminMode;
game.addChild(adminButtonText);
// Settings panel
var settingsPanel = new Container();
settingsPanel.visible = false;
var panelBg = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 6,
scaleY: 10
});
panelBg.tint = 0x2c3e50;
panelBg.x = 0;
panelBg.y = 0;
settingsPanel.x = 2048 / 2;
settingsPanel.y = 2732 / 2;
settingsPanel.addChild(panelBg);
// Music toggle
var musicToggle = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 1.2
});
musicToggle.interactive = true;
musicToggle.x = 0;
musicToggle.y = -266;
settingsPanel.addChild(musicToggle);
var musicText = new Text2(texts[settings.language].music + ': ' + (settings.musicEnabled ? texts[settings.language].on : texts[settings.language].off), {
size: 60,
fill: 0xFFFFFF
});
musicText.anchor.set(0.5, 0.5);
musicText.x = musicToggle.x;
musicText.y = musicToggle.y;
settingsPanel.addChild(musicText);
// Effects toggle
var effectsToggle = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 1.2
});
effectsToggle.interactive = true;
effectsToggle.x = 0;
effectsToggle.y = -116;
settingsPanel.addChild(effectsToggle);
var effectsText = new Text2(texts[settings.language].effects + ': ' + (settings.effectsEnabled ? texts[settings.language].on : texts[settings.language].off), {
size: 60,
fill: 0xFFFFFF
});
effectsText.anchor.set(0.5, 0.5);
effectsText.x = effectsToggle.x;
effectsText.y = effectsToggle.y;
settingsPanel.addChild(effectsText);
// Language toggle
var languageToggle = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 1.2
});
languageToggle.interactive = true;
languageToggle.x = 0;
languageToggle.y = 34;
settingsPanel.addChild(languageToggle);
var languageText = new Text2(texts[settings.language].language + ': ' + (settings.language === 'en' ? texts[settings.language].english : texts[settings.language].turkish), {
size: 60,
fill: 0xFFFFFF
});
languageText.anchor.set(0.5, 0.5);
languageText.x = languageToggle.x;
languageText.y = languageToggle.y;
settingsPanel.addChild(languageText);
// Reset button
var resetButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 1.2
});
resetButton.interactive = true;
resetButton.tint = 0xe74c3c;
resetButton.x = 0;
resetButton.y = 184;
settingsPanel.addChild(resetButton);
var resetText = new Text2(texts[settings.language].reset, {
size: 60,
fill: 0xFFFFFF
});
resetText.anchor.set(0.5, 0.5);
resetText.x = resetButton.x;
resetText.y = resetButton.y;
settingsPanel.addChild(resetText);
// Reset button
var resetButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 1.2
});
resetButton.interactive = true;
resetButton.tint = 0xe74c3c;
resetButton.x = 0;
resetButton.y = 184;
settingsPanel.addChild(resetButton);
var resetText = new Text2(texts[settings.language].reset, {
size: 60,
fill: 0xFFFFFF
});
resetText.anchor.set(0.5, 0.5);
resetText.x = resetButton.x;
resetText.y = resetButton.y;
settingsPanel.addChild(resetText);
// Close button
var closeButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.2,
scaleY: 1.2
});
closeButton.interactive = true;
closeButton.x = 0;
closeButton.y = 484;
settingsPanel.addChild(closeButton);
var closeText = new Text2(texts[settings.language].close, {
size: 60,
fill: 0xFFFFFF
});
closeText.anchor.set(0.5, 0.5);
closeText.x = closeButton.x;
closeText.y = closeButton.y;
settingsPanel.addChild(closeText);
LK.gui.addChild(settingsPanel);
// Prestige panel
var prestigePanel = new Container();
prestigePanel.visible = false;
var prestigePanelBg = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 6,
scaleY: 8
});
prestigePanelBg.tint = 0x8e44ad;
prestigePanelBg.x = 0;
prestigePanelBg.y = 0;
prestigePanel.x = 1024;
prestigePanel.y = 1366;
prestigePanel.addChild(prestigePanelBg);
// Prestige title
var prestigeTitle = new Text2('PRESTIGE AVAILABLE!', {
size: 80,
fill: 0xFFFFFF
});
prestigeTitle.anchor.set(0.5, 0.5);
prestigeTitle.x = 0;
prestigeTitle.y = -250;
prestigePanel.addChild(prestigeTitle);
// Prestige info
var prestigeInfo = new Text2('You have reached 100 rigs!\nPrestige to reset progress\nand gain permanent bonuses', {
size: 50,
fill: 0xFFFFFF
});
prestigeInfo.anchor.set(0.5, 0.5);
prestigeInfo.x = 0;
prestigeInfo.y = -100;
prestigePanel.addChild(prestigeInfo);
// Current prestige points display
var currentPrestigeText = new Text2('Current Prestige Points: ' + prestigePoints, {
size: 45,
fill: 0xF39C12
});
currentPrestigeText.anchor.set(0.5, 0.5);
currentPrestigeText.x = 0;
currentPrestigeText.y = 0;
prestigePanel.addChild(currentPrestigeText);
// Prestige multiplier display
var multiplierText = new Text2('Current Multiplier: ' + Math.pow(1.2, prestigePoints).toFixed(2) + 'x', {
size: 45,
fill: 0x27AE60
});
multiplierText.anchor.set(0.5, 0.5);
multiplierText.x = 0;
multiplierText.y = 70;
prestigePanel.addChild(multiplierText);
// Prestige button
var prestigeButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 1.5
});
prestigeButton.interactive = true;
prestigeButton.tint = 0x8e44ad;
prestigeButton.x = 0;
prestigeButton.y = 180;
prestigePanel.addChild(prestigeButton);
var prestigeButtonText = new Text2('PRESTIGE (+1 Point)', {
size: 55,
fill: 0xFFFFFF
});
prestigeButtonText.anchor.set(0.5, 0.5);
prestigeButtonText.x = prestigeButton.x;
prestigeButtonText.y = prestigeButton.y;
prestigePanel.addChild(prestigeButtonText);
LK.gui.addChild(prestigePanel);
// Admin panel
var adminPanel = new Container();
adminPanel.visible = false;
var adminPanelBg = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 6,
scaleY: 6
});
adminPanelBg.tint = 0x2c3e50;
adminPanelBg.x = 0;
adminPanelBg.y = 0;
adminPanel.x = 1024;
adminPanel.y = 1366;
adminPanel.addChild(adminPanelBg);
// Admin title
var adminTitle = new Text2('ADMIN PANEL', {
size: 80,
fill: 0xFF0000
});
adminTitle.anchor.set(0.5, 0.5);
adminTitle.x = 0;
adminTitle.y = -200;
adminPanel.addChild(adminTitle);
// Unlimited money toggle
var unlimitedMoneyToggle = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 1.2
});
unlimitedMoneyToggle.interactive = true;
unlimitedMoneyToggle.x = 0;
unlimitedMoneyToggle.y = -50;
adminPanel.addChild(unlimitedMoneyToggle);
var unlimitedMoneyText = new Text2('Unlimited Money: ' + (unlimitedMoney ? 'ON' : 'OFF'), {
size: 50,
fill: 0xFFFFFF
});
unlimitedMoneyText.anchor.set(0.5, 0.5);
unlimitedMoneyText.x = unlimitedMoneyToggle.x;
unlimitedMoneyText.y = unlimitedMoneyToggle.y;
adminPanel.addChild(unlimitedMoneyText);
// Admin close button
var adminCloseButton = LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.2,
scaleY: 1.2
});
adminCloseButton.interactive = true;
adminCloseButton.x = 0;
adminCloseButton.y = 100;
adminPanel.addChild(adminCloseButton);
var adminCloseText = new Text2('Close', {
size: 60,
fill: 0xFFFFFF
});
adminCloseText.anchor.set(0.5, 0.5);
adminCloseText.x = adminCloseButton.x;
adminCloseText.y = adminCloseButton.y;
adminPanel.addChild(adminCloseText);
LK.gui.addChild(adminPanel);
// Function to update language texts
function updateLanguageTexts() {
settingsButtonText.setText(texts[settings.language].settings);
musicText.setText(texts[settings.language].music + ': ' + (settings.musicEnabled ? texts[settings.language].on : texts[settings.language].off));
effectsText.setText(texts[settings.language].effects + ': ' + (settings.effectsEnabled ? texts[settings.language].on : texts[settings.language].off));
languageText.setText(texts[settings.language].language + ': ' + (settings.language === 'en' ? texts[settings.language].english : texts[settings.language].turkish));
resetText.setText(texts[settings.language].reset);
closeText.setText(texts[settings.language].close);
sellButtonText.setText(texts[settings.language].sellBitcoin);
}
// Settings button handler
settingsButton.down = function (x, y, obj) {
showingSettings = !showingSettings;
settingsPanel.visible = showingSettings;
if (settings.effectsEnabled) {
LK.effects.flashObject(settingsButton, 0x3498db, 300);
}
};
// Music toggle handler
musicToggle.down = function (x, y, obj) {
settings.musicEnabled = !settings.musicEnabled;
storage.settings = settings;
updateLanguageTexts();
// Control music playback based on setting
if (settings.musicEnabled) {
LK.playMusic('Music');
} else {
LK.stopMusic();
}
if (settings.effectsEnabled) {
LK.effects.flashObject(musicToggle, 0x27ae60, 300);
}
};
// Effects toggle handler
effectsToggle.down = function (x, y, obj) {
settings.effectsEnabled = !settings.effectsEnabled;
storage.settings = settings;
updateLanguageTexts();
LK.effects.flashObject(effectsToggle, 0x27ae60, 300);
};
// Language toggle handler
languageToggle.down = function (x, y, obj) {
settings.language = settings.language === 'en' ? 'tr' : 'en';
storage.settings = settings;
updateLanguageTexts();
if (settings.effectsEnabled) {
LK.effects.flashObject(languageToggle, 0x27ae60, 300);
}
};
// Reset button handler
resetButton.down = function (x, y, obj) {
// Clear all storage
storage.bitcoin = 0;
storage.cash = 1000;
storage.powerCapacity = 10;
delete storage.rigCount;
delete storage.rigTypes;
storage.settings = {
musicEnabled: true,
effectsEnabled: true,
language: 'en'
};
if (settings.effectsEnabled) {
LK.effects.flashObject(resetButton, 0xe74c3c, 500);
}
// Show game over to restart
LK.setTimeout(function () {
LK.showGameOver();
}, 600);
};
// Close button handler
closeButton.down = function (x, y, obj) {
showingSettings = false;
settingsPanel.visible = false;
if (settings.effectsEnabled) {
LK.effects.flashObject(closeButton, 0x95a5a6, 300);
}
};
// Prestige button handler
prestigeButton.down = function (x, y, obj) {
prestigePoints += 1;
storage.prestigePoints = prestigePoints;
// Reset game state
bitcoin = 0;
cash = 1000;
powerCapacity = 10;
// Clear all rigs
for (var i = 0; i < miningRigs.length; i++) {
miningRigs[i].destroy();
}
miningRigs = [];
// Reset storage
storage.bitcoin = 0;
storage.cash = 1000;
storage.powerCapacity = 10;
storage.rigCount = 0;
storage.rigTypes = [];
// Hide prestige panel
showingPrestige = false;
prestigePanel.visible = false;
if (settings.effectsEnabled) {
LK.effects.flashObject(prestigeButton, 0x8e44ad, 500);
}
// Create starting rig
var startingRig = new MiningRig('basic');
startingRig.x = 400;
startingRig.y = 400;
game.addChild(startingRig);
miningRigs.push(startingRig);
storage.rigCount = 1;
storage.rigTypes = ['basic'];
};
// Admin button handler
adminButton.down = function (x, y, obj) {
showingAdmin = !showingAdmin;
adminPanel.visible = showingAdmin;
if (settings.effectsEnabled) {
LK.effects.flashObject(adminButton, 0xFF0000, 300);
}
};
// Unlimited money toggle handler
unlimitedMoneyToggle.down = function (x, y, obj) {
unlimitedMoney = !unlimitedMoney;
unlimitedMoneyText.setText('Unlimited Money: ' + (unlimitedMoney ? 'ON' : 'OFF'));
if (settings.effectsEnabled) {
LK.effects.flashObject(unlimitedMoneyToggle, 0x27ae60, 300);
}
};
// Admin close button handler
adminCloseButton.down = function (x, y, obj) {
showingAdmin = false;
adminPanel.visible = false;
if (settings.effectsEnabled) {
LK.effects.flashObject(adminCloseButton, 0x95a5a6, 300);
}
};
// Admin mode activation (secret tap sequence on bitcoin display)
var adminTapCount = 0;
var lastAdminTap = 0;
bitcoinDisplay.interactive = true;
bitcoinDisplay.down = function (x, y, obj) {
var currentTime = Date.now();
if (currentTime - lastAdminTap < 1000) {
adminTapCount++;
if (adminTapCount >= 5) {
adminMode = true;
adminButton.visible = true;
adminButtonText.visible = true;
adminTapCount = 0;
if (settings.effectsEnabled) {
LK.effects.flashObject(bitcoinDisplay, 0xFF0000, 500);
}
}
} else {
adminTapCount = 1;
}
lastAdminTap = currentTime;
};
// Event handlers
rigUpgradeButton.down = function (x, y, obj) {
var rigType = 'basic';
var baseCost = 2500;
var rigCost = baseCost * Math.pow(1.3, Math.floor(miningRigs.length / 3));
var powerRequired = 0.5;
var currentTotalPower = calculateTotalPowerUsage();
if ((cash >= rigCost || unlimitedMoney) && currentTotalPower + powerRequired <= powerCapacity && miningRigs.length < 100) {
if (!unlimitedMoney) {
cash -= rigCost;
} else {
cash = Math.max(cash, 999999999); // Ensure cash stays high in unlimited mode
}
var newRig = new MiningRig(rigType);
newRig.x = 400 + miningRigs.length % 10 * 140;
newRig.y = 400 + Math.floor(miningRigs.length / 10) * 120;
game.addChild(newRig);
miningRigs.push(newRig);
// Save rig types
if (!storage.rigTypes) {
storage.rigTypes = [];
}
storage.rigTypes.push(rigType);
storage.rigCount = miningRigs.length;
if (settings.effectsEnabled) {
LK.getSound('purchase').play();
// Flash effect
LK.effects.flashObject(rigUpgradeButton, 0x27ae60, 300);
}
}
};
powerUpgradeButton.down = function (x, y, obj) {
var powerCost = 500 * Math.pow(1.5, (powerCapacity - 10) / 1);
if ((cash >= powerCost || unlimitedMoney) && powerCapacity < 50) {
if (!unlimitedMoney) {
cash -= powerCost;
} else {
cash = Math.max(cash, 999999999); // Ensure cash stays high in unlimited mode
}
powerCapacity += 1;
storage.powerCapacity = powerCapacity;
if (settings.effectsEnabled) {
LK.getSound('purchase').play();
// Flash effect
LK.effects.flashObject(powerUpgradeButton, 0x27ae60, 300);
}
}
};
sellButton.down = function (x, y, obj) {
if (bitcoin >= 0.01) {
var sellAmount = bitcoin;
var earnings = sellAmount * bitcoinPrice;
cash += earnings;
bitcoin = 0;
if (settings.effectsEnabled) {
LK.getSound('coin').play();
// Flash effect
LK.effects.flashObject(sellButton, 0xf39c12, 500);
}
// Show earnings popup
var earningsText = new Text2('+$' + formatNumber(earnings), {
size: 60,
fill: 0xF39C12
});
earningsText.anchor.set(0.5, 0.5);
earningsText.x = sellButton.x;
earningsText.y = sellButton.y - 100;
game.addChild(earningsText);
tween(earningsText, {
y: earningsText.y - 100,
alpha: 0
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
earningsText.destroy();
}
});
}
};
// Start playing background music
if (settings.musicEnabled) {
LK.playMusic('Music');
}
game.update = function () {
powerUsage = calculateTotalPowerUsage(); // Calculate total power usage from all rigs
// Update bitcoin price periodically
if (Date.now() - lastPriceUpdate > 5000) {
// Every 5 seconds
lastPriceUpdate = Date.now();
var priceChange = (Math.random() - 0.5) * 0.1; // ±5% change
bitcoinPrice = Math.max(10000, bitcoinPrice * (1 + priceChange));
}
// Spawn bitcoin particles when mining
if (miningRigs.length > 0) {
spawnBitcoinParticle();
}
// Check for prestige availability
if (miningRigs.length >= 100 && !showingPrestige) {
showingPrestige = true;
prestigePanel.visible = true;
// Update prestige panel text
currentPrestigeText.setText('Current Prestige Points: ' + prestigePoints);
multiplierText.setText('Current Multiplier: ' + Math.pow(1.2, prestigePoints).toFixed(2) + 'x');
}
updateUI();
// Save progress periodically
if (LK.ticks % 300 === 0) {
// Every 5 seconds
storage.bitcoin = bitcoin;
storage.cash = cash;
storage.powerCapacity = powerCapacity;
storage.rigCount = miningRigs.length;
// Save rig types
var rigTypesToSave = [];
for (var i = 0; i < miningRigs.length; i++) {
rigTypesToSave.push(miningRigs[i].rigType);
}
storage.rigTypes = rigTypesToSave;
}
};