User prompt
görevler düğmesini kara yap ve görevlerin algılama sistemini iyileştir. ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
menüdeki görevleri kaldır ve sağ üstte tek bir düğme olacak oraya basınca görevler gözükecek ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Tekrardan tüm kodları kontrol et, kendini tekrarlayan oyunu bozanları düzelt. Oyundaki görevleri ise bir düğmeye basarak, sağ üstten düğmeye basınca tam ekran olsun. Ve çıkmak için de bir düğme olsun. ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.questProgress = questProgress;' Line Number: 250 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
daha önce yaptığın gibi görevler sistemi ekle ve sağ üstte koy görevler şu kadar level yükselt şu kadar puan topla şu kadar puan harca şu kadar puan biriktir gibi gibi ↪💡 Consider importing and using the following plugins: @upit/storage.v1, @upit/tween.v1
User prompt
Ne eklersen ekle, kodları düzelterek ve hata yapmadan ekle. Şimdi ise düğmeyi daha gerçekçi yap ama dikkatli ol. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
kasmaması için kodları gözden geçir
User prompt
Gereksiz kendini tekrarlayan ve oyunu yavaşlatan kodları tekrar düzelterek kodla.
User prompt
Tüm hataları ve herşeyi sıfırla ve sil. Herkes baştan başlasın. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Herkesin puanlarını sıfırla. Oyuna baştan başlasınlar. Bunun sebebi ise Çok kişinin fazladan puanı olmasının sebebi hataları düzeltmemiz. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Oyun açılmıyor. Açılmasını engelleyen her şeyi sil ve oyundaki her şeyi baştan kodla.
User prompt
kendini tekrarlayan odları tuşları ve oyunu bozan herşeyi sil
User prompt
Gereksiz tuşları kaldırabilir ve hataları silebilirsin.
User prompt
Oyundaki ses dosyalarını silebilir ve gereksiz tüm dosyaları silebilirsin.
User prompt
Oyunun en son çalıştığı ilk sürümlere getirebilirsin fakat görevler, düğmeler ve kazanma sistemlerini değiştirme.
User prompt
Oyunun çalışmasıyla ilgili olan hataları düzelt. Oyun çalışsın.
User prompt
dokuz yüz kodun dokuz yüzünü de kontrol et
User prompt
oyundaki herşeyi eski haline getir ve çalışacağı halde tüm kodları kontrol ederek baştan yaz ve bunu hızlıca yaz
User prompt
Oyunu bozan tüm kolları sil
User prompt
Oyunu düzelt
User prompt
Tüm hataları kontrol edip, silip baştan yaz.
User prompt
Oyunun tüm hatalarını temizle.
User prompt
Please fix the bug: 'storage.clear is not a function' in or related to this line: 'storage.clear();' Line Number: 412
User prompt
Tüm oyuncu verilerini baştan başlat.
User prompt
Tıklama oyununda puan kazanma sistemi, oyuncunun temel olarak ekrandaki ana düğmeye tıklamasıyla gerçekleşir. Her tıklamada kazanılan puan miktarı, oyuncunun sahip olduğu çeşitli yükseltmelere göre dinamik olarak değişmelidir. Oyuncu oyuna başladığında, varsayılan olarak her tıklamada belirli bir başlangıç puanı kazanır. Bu temel puan, "1x Yükseltme" (Power Click) satın alındıkça sabit bir miktar artmalıdır; örneğin, her seviyede tıklama başına kazanca +1, +2 veya daha fazlası gibi doğrusal veya hafif üstel bir değer eklenmelidir. Daha sonra, oyuncu "5x Yükseltme" (Super Click) satın aldığında, mevcut toplam tıklama başına kazancı 5 ile çarpılmalı, böylece daha önce kazandığı temel ve 1x yükseltmelerden gelen puanlar da dahil olmak üzere toplam kazanç 5 katına çıkmalıdır. Benzer şekilde, "10x Yükseltme" (Mega Click) satın alındığında ise, oyuncunun o anki toplam tıklama başına kazancı 10 ile çarpılmalı ve bu da çok daha yüksek bir gelir akışı sağlamalıdır. Bu çarpan yükseltmeler, oyuncunun biriktirdiği puanlarla orantılı olarak daha yüksek maliyetlere sahip olmalı, ancak oyuncunun ilerlemesini engellemeyecek dengeli bir fiyatlandırma eğrisi izlemelidir. Ayrıca, her tıklama arasında 80 milisaniyelik bir gecikme süresi uygulanarak otomatik tıklama veya aşırı hızlı tıklamalar engellenmelidir. Toplamda kazanılan puanlar, 1.000 ve üzeri sayılarda kısaltılmış formatta (örn: 1.1K, 2.5M) gösterilmelidir.
/**** * Plugins ****/ var storage = LK.import("@upit/storage.v1"); var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var QuestItem = Container.expand(function (questData) { var self = Container.call(this); var titleText = new Text2('', { size: 50, fill: 0xFFFFFF }); titleText.anchor.set(0, 0.5); titleText.x = 20; self.addChild(titleText); var progressText = new Text2('', { size: 40, fill: 0xAAAAAA }); progressText.anchor.set(0, 0.5); progressText.x = 20; progressText.y = 60; self.addChild(progressText); var rewardText = new Text2('', { size: 35, fill: 0xFFFF00 }); rewardText.anchor.set(0, 0.5); rewardText.x = 20; rewardText.y = 100; self.addChild(rewardText); self.collectButton = new Container(); var collectGraphics = self.collectButton.attachAsset('collectButton', { anchorX: 0.5, anchorY: 0.5 }); self.collectText = new Text2(translations[currentLanguage].collect, { size: 30, fill: 0xFFFFFF }); self.collectText.anchor.set(0.5, 0.5); self.collectButton.addChild(self.collectText); self.collectButton.x = 520; self.collectButton.y = 50; self.addChild(self.collectButton); self.questData = questData; self.updateDisplay = function () { // Use translated quest name if available var questName = self.questData.nameKey && translations[currentLanguage].questNames[self.questData.nameKey] ? translations[currentLanguage].questNames[self.questData.nameKey] : self.questData.name; // Add level indicator for progressive quests if (self.questData.isProgressive) { var levelText = ' (Seviye ' + (self.questData.currentLevel + 1) + ')'; if (currentLanguage === 'en') { levelText = ' (Level ' + (self.questData.currentLevel + 1) + ')'; } questName += levelText; } titleText.setText(questName); var current = getCurrentProgress(self.questData); var target = self.questData.target; if (self.questData.completed && !self.questData.collected) { progressText.setText(translations[currentLanguage].completed); progressText.fill = "#00ff00"; self.collectButton.visible = true; } else if (self.questData.collected) { progressText.setText(translations[currentLanguage].collected); progressText.fill = "#888888"; self.collectButton.visible = false; } else { progressText.setText(formatNumber(current) + ' / ' + formatNumber(target)); progressText.fill = "#aaaaaa"; self.collectButton.visible = false; } rewardText.setText(translations[currentLanguage].reward + ': +' + formatNumber(self.questData.reward) + ' ' + translations[currentLanguage].points.toLowerCase()); if (self.collectText) { self.collectText.setText(translations[currentLanguage].collect); } }; self.collectButton.down = function (x, y, obj) { if (self.questData.completed && !self.questData.collected) { self.questData.collected = true; points += self.questData.reward; LK.getSound('questComplete').play(); updatePointsDisplay(); // Handle progressive quest advancement if (self.questData.isProgressive && self.questData.questType) { var template = questTemplates[self.questData.questType]; if (template && template.levels) { var nextLevel = self.questData.currentLevel + 1; if (nextLevel < template.levels.length && template.levels[nextLevel]) { // Advance to next level self.questData.currentLevel = nextLevel; self.questData.target = template.levels[nextLevel].target; self.questData.reward = template.levels[nextLevel].reward; self.questData.nameKey = template.levels[nextLevel].nameKey; self.questData.completed = false; self.questData.collected = false; } } } self.updateDisplay(); saveGame(); } }; return self; }); var UpgradeButton = Container.expand(function (upgradeData) { var self = Container.call(this); // Create upgrade text labels (no background) var titleText = new Text2('', { size: 50, fill: 0xFFFFFF }); titleText.anchor.set(0, 0.5); titleText.x = -350; self.addChild(titleText); var costText = new Text2('', { size: 40, fill: 0xFFFF00 }); costText.anchor.set(0, 0.5); costText.x = -350; costText.y = 50; self.addChild(costText); // Create small square upgrade button logo var buttonLogo = self.attachAsset('upgradeButtonLogo', { anchorX: 0.5, anchorY: 0.5, x: 550, y: 25 }); var logoText = new Text2('▲', { size: 40, fill: 0xFFFFFF }); logoText.anchor.set(0.5, 0.5); logoText.x = 550; logoText.y = 25; self.addChild(logoText); self.upgradeData = upgradeData; self.updateDisplay = function () { titleText.setText(self.upgradeData.name + ' (' + translations[currentLanguage].level + self.upgradeData.level + ')'); costText.setText(translations[currentLanguage].cost + ': ' + formatNumber(self.upgradeData.cost)); if (points >= self.upgradeData.cost) { buttonLogo.tint = 0x32CD32; // Bright green when affordable } else { buttonLogo.tint = 0xC0C0C0; // Light gray when not affordable } }; // Only the logo button is clickable buttonLogo.down = function (x, y, obj) { if (points >= self.upgradeData.cost) { points -= self.upgradeData.cost; totalSpent += self.upgradeData.cost; // Increase only this specific upgrade's level by 1 self.upgradeData.level += 1; // Calculate new cost for this specific upgrade using its base cost and multiplier var costMultiplier = self.upgradeData.multiplier; self.upgradeData.cost = Math.floor(self.upgradeData.baseCost * Math.pow(costMultiplier, self.upgradeData.level)); LK.getSound('purchase').play(); updatePointsDisplay(); self.updateDisplay(); updateAllUpgradeButtons(); saveGame(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x4a0080 }); /**** * Game Code ****/ // Create dark to light purple gradient background game.setBackgroundColor(0x1A0B2E); // Create enhanced texture background effect var backgroundTexture = new Container(); for (var i = 0; i < 100; i++) { for (var j = 0; j < 140; j++) { if (Math.random() < 0.15) { var particle = LK.getAsset('textureParticle', { anchorX: 0.5, anchorY: 0.5, scaleX: Math.random() * 0.8 + 0.2, scaleY: Math.random() * 0.8 + 0.2, x: i * 20.5 + Math.random() * 10, y: j * 19.5 + Math.random() * 10 }); particle.alpha = Math.random() * 0.2 + 0.05; particle.tint = Math.random() > 0.5 ? 0x7B68EE : 0x9370DB; backgroundTexture.addChild(particle); } } } game.addChild(backgroundTexture); // Game variables - initialize with default values var points = 0; var totalClicks = 0; var totalSpent = 0; var lastClickTime = 0; var clickDelay = 80; var currentLanguage = 'tr'; // 'tr' for Turkish, 'en' for English // Language translations var translations = { tr: { points: 'Puan', upgrades: { power: '1x Yükseltme (Power Click)', "super": '5x Yükseltme (Super Click)', mega: '10x Yükseltme (Mega Click)' }, cost: 'Maliyet', quests: 'GÖREVLER', questList: 'GÖREV LİSTESİ', completed: 'TAMAMLANDI!', collected: 'TOPLANDI', reward: 'Ödül', collect: 'TOPLA', close: 'KAPAT', level: 'Lv.', questNames: { points1k: '1.000 Puan Biriktir', points10k: '10.000 Puan Biriktir', points100k: '100.000 Puan Biriktir', points1m: '1.000.000 Puan Biriktir', spent500: '500 Puan Harca', spent5k: '5.000 Puan Harca', spent50k: '50.000 Puan Harca', clicks100: '100 Kez Tıkla', clicks1k: '1.000 Kez Tıkla', clicks10k: '10.000 Kez Tıkla', level5: 'Seviye 5\'e Ulaş', level10: 'Seviye 10\'a Ulaş', level25: 'Seviye 25\'e Ulaş' } }, en: { points: 'Points', upgrades: { power: '1x Upgrade (Power Click)', "super": '5x Upgrade (Super Click)', mega: '10x Upgrade (Mega Click)' }, cost: 'Cost', quests: 'QUESTS', questList: 'QUEST LIST', completed: 'COMPLETED!', collected: 'COLLECTED', reward: 'Reward', collect: 'COLLECT', close: 'CLOSE', level: 'Lv.', questNames: { points1k: 'Collect 1,000 Points', points10k: 'Collect 10,000 Points', points100k: 'Collect 100,000 Points', points1m: 'Collect 1,000,000 Points', spent500: 'Spend 500 Points', spent5k: 'Spend 5,000 Points', spent50k: 'Spend 50,000 Points', clicks100: 'Click 100 Times', clicks1k: 'Click 1,000 Times', clicks10k: 'Click 10,000 Times', level5: 'Reach Level 5', level10: 'Reach Level 10', level25: 'Reach Level 25' } } }; // Upgrade system - always start with default upgrades at level 1 var upgrades = [{ name: '1x Yükseltme (Power Click)', level: 1, cost: 50, baseCost: 50, multiplier: 1.15, clickMultiplier: 1, upgradeType: 'additive' }, { name: '5x Yükseltme (Super Click)', level: 1, cost: 300, baseCost: 300, multiplier: 1.22, clickMultiplier: 5, upgradeType: 'multiplicative' }, { name: '10x Yükseltme (Mega Click)', level: 1, cost: 800, baseCost: 800, multiplier: 1.30, clickMultiplier: 10, upgradeType: 'multiplicative' }]; // Progressive quest system - each quest type has multiple levels var questTemplates = { points: { levels: [{ target: 1000, reward: 200, nameKey: 'points1k' }, { target: 10000, reward: 1800, nameKey: 'points10k' }, { target: 100000, reward: 15000, nameKey: 'points100k' }, { target: 1000000, reward: 120000, nameKey: 'points1m' }], type: 'points' }, spent: { levels: [{ target: 500, reward: 60, nameKey: 'spent500' }, { target: 5000, reward: 650, nameKey: 'spent5k' }, { target: 50000, reward: 6000, nameKey: 'spent50k' }], type: 'spent' }, clicks: { levels: [{ target: 100, reward: 50, nameKey: 'clicks100' }, { target: 1000, reward: 300, nameKey: 'clicks1k' }, { target: 10000, reward: 2000, nameKey: 'clicks10k' }], type: 'clicks' }, upgrade: { levels: [{ target: 5, reward: 300, nameKey: 'level5' }, { target: 10, reward: 1800, nameKey: 'level10' }, { target: 25, reward: 12000, nameKey: 'level25' }], type: 'upgrade' } }; // Create initial progressive quests var quests = []; for (var questType in questTemplates) { var template = questTemplates[questType]; if (template && template.levels && template.levels.length > 0) { var quest = { questType: questType, currentLevel: 0, type: template.type, target: template.levels[0].target, reward: template.levels[0].reward, nameKey: template.levels[0].nameKey, name: '', completed: false, collected: false, isProgressive: true }; quests.push(quest); } } // Load saved game data loadGame(); // UI elements var buttonBorder = game.addChild(LK.getAsset('buttonBorder', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1200 })); var mainButton = game.addChild(LK.getAsset('mainButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1200 })); // Language selector button var languageButton = new Container(); var languageBox = languageButton.attachAsset('closeButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); languageBox.tint = 0x4A4A4A; var languageText = new Text2('TR', { size: 40, fill: 0xFFFFFF }); languageText.anchor.set(0.5, 0.5); languageButton.addChild(languageText); languageButton.x = 1024; languageButton.y = 700; game.addChild(languageButton); var pointsText = new Text2('0 Puan', { size: 80, fill: 0xFFFFFF }); pointsText.anchor.set(0.5, 0.5); pointsText.x = 1024; pointsText.y = 800; game.addChild(pointsText); var clickValueText = new Text2('+1 Points', { size: 50, fill: 0xFFFFFF }); clickValueText.anchor.set(0.5, 0.5); clickValueText.x = 1024; clickValueText.y = 1200; game.addChild(clickValueText); // Upgrade buttons var upgradeButtons = []; for (var i = 0; i < upgrades.length; i++) { var upgradeButton = new UpgradeButton(upgrades[i]); upgradeButton.x = 1024; upgradeButton.y = 1600 + i * 160; game.addChild(upgradeButton); upgradeButtons.push(upgradeButton); } // Quest button - positioned safely away from top-left corner var questButton = game.addChild(LK.getAsset('questButton', { anchorX: 0.5, anchorY: 0.5, x: 1750, y: 200 })); var questButtonText = new Text2('GÖREVLER', { size: 32, fill: 0x000000 }); questButtonText.anchor.set(0.5, 0.5); questButtonText.x = 1750; questButtonText.y = 200; game.addChild(questButtonText); // Quest menu var questMenu = null; var questMenuOpen = false; // Helper functions function formatNumber(num) { if (num >= 1000000000) { var formatted = (num / 1000000000).toFixed(1); return formatted.endsWith('.0') ? formatted.slice(0, -2) + 'B' : formatted + 'B'; } else if (num >= 1000000) { var formatted = (num / 1000000).toFixed(1); return formatted.endsWith('.0') ? formatted.slice(0, -2) + 'M' : formatted + 'M'; } else if (num >= 1000) { var formatted = (num / 1000).toFixed(1); return formatted.endsWith('.0') ? formatted.slice(0, -2) + 'K' : formatted + 'K'; } return Math.floor(num).toString(); } function getClickValue() { var baseValue = 1; var totalMultiplier = 1; // First, calculate additive bonuses from Power Click (1x Upgrade) // Level 1 provides base +1, each level adds +1 more for (var i = 0; i < upgrades.length; i++) { if (upgrades[i].upgradeType === 'additive' && upgrades[i].level >= 1) { // Each level adds the clickMultiplier amount to the base value baseValue += upgrades[i].level; } } // Then, apply multiplicative bonuses from Super Click (5x) and Mega Click (10x) // Each level applies the multiplier once (not exponentially) for (var i = 0; i < upgrades.length; i++) { if (upgrades[i].upgradeType === 'multiplicative' && upgrades[i].level >= 1) { // Each level applies the clickMultiplier (5x or 10x) multiplicatively for (var level = 0; level < upgrades[i].level; level++) { totalMultiplier *= upgrades[i].clickMultiplier; } } } return Math.floor(baseValue * totalMultiplier); } function updatePointsDisplay() { pointsText.setText(formatNumber(points) + ' ' + translations[currentLanguage].points); clickValueText.setText('+' + formatNumber(getClickValue()) + ' ' + translations[currentLanguage].points); } function updateAllUpgradeButtons() { for (var i = 0; i < upgradeButtons.length; i++) { upgradeButtons[i].updateDisplay(); } } function getCurrentProgress(quest) { switch (quest.type) { case 'points': return points; case 'clicks': return totalClicks; case 'spent': return totalSpent; case 'upgrade': // Return the average level among all upgrades for quest progress var totalLevels = 0; for (var i = 0; i < upgrades.length; i++) { totalLevels += upgrades[i].level; } return Math.floor(totalLevels / upgrades.length); default: return 0; } } function syncUpgradeLevels() { // No longer sync levels - each upgrade maintains its own level // This function now just ensures costs are properly calculated for (var i = 0; i < upgrades.length; i++) { if (!upgrades[i].baseCost) { upgrades[i].baseCost = upgrades[i].cost; } // Recalculate cost based on current level upgrades[i].cost = Math.floor(upgrades[i].baseCost * Math.pow(upgrades[i].multiplier, upgrades[i].level)); } } function checkQuestCompletion() { for (var i = 0; i < quests.length; i++) { var quest = quests[i]; if (!quest.completed) { var current = getCurrentProgress(quest); if (current >= quest.target) { quest.completed = true; } } } } function saveGame() { storage.points = points; storage.totalClicks = totalClicks; storage.totalSpent = totalSpent; // Convert upgrades to storage-compatible format storage.upgradeNames = []; storage.upgradeLevels = []; storage.upgradeCosts = []; storage.upgradeBaseCosts = []; storage.upgradeMultipliers = []; storage.upgradeClickMultipliers = []; storage.upgradeTypes = []; for (var i = 0; i < upgrades.length; i++) { storage.upgradeNames[i] = upgrades[i].name; storage.upgradeLevels[i] = upgrades[i].level; storage.upgradeCosts[i] = upgrades[i].cost; storage.upgradeBaseCosts[i] = upgrades[i].baseCost; storage.upgradeMultipliers[i] = upgrades[i].multiplier; storage.upgradeClickMultipliers[i] = upgrades[i].clickMultiplier; storage.upgradeTypes[i] = upgrades[i].upgradeType; } // Convert quests to storage-compatible format storage.questNames = []; storage.questTypes = []; storage.questTargets = []; storage.questRewards = []; storage.questCompleted = []; storage.questCollected = []; storage.questCurrentLevels = []; storage.questIsProgressive = []; storage.questQuestTypes = []; for (var i = 0; i < quests.length; i++) { storage.questNames[i] = quests[i].name; storage.questTypes[i] = quests[i].type; storage.questTargets[i] = quests[i].target; storage.questRewards[i] = quests[i].reward; storage.questCompleted[i] = quests[i].completed; storage.questCollected[i] = quests[i].collected; storage.questCurrentLevels[i] = quests[i].currentLevel || 0; storage.questIsProgressive[i] = quests[i].isProgressive || false; storage.questQuestTypes[i] = quests[i].questType || ''; } } function loadGame() { // Load basic game stats if (storage.points !== undefined) { points = storage.points; } if (storage.totalClicks !== undefined) { totalClicks = storage.totalClicks; } if (storage.totalSpent !== undefined) { totalSpent = storage.totalSpent; } // Load upgrades if they exist in storage if (storage.upgradeLevels && storage.upgradeLevels.length > 0) { for (var i = 0; i < upgrades.length && i < storage.upgradeLevels.length; i++) { if (storage.upgradeLevels[i] !== undefined) { upgrades[i].level = storage.upgradeLevels[i]; } if (storage.upgradeCosts[i] !== undefined) { upgrades[i].cost = storage.upgradeCosts[i]; } if (storage.upgradeBaseCosts && storage.upgradeBaseCosts[i] !== undefined) { upgrades[i].baseCost = storage.upgradeBaseCosts[i]; } if (storage.upgradeTypes && storage.upgradeTypes[i] !== undefined) { upgrades[i].upgradeType = storage.upgradeTypes[i]; } } // Ensure proper upgrade costs after loading syncUpgradeLevels(); } // Load quests if they exist in storage if (storage.questCompleted && storage.questCompleted.length > 0) { for (var i = 0; i < quests.length && i < storage.questCompleted.length; i++) { if (storage.questCompleted[i] !== undefined) { quests[i].completed = storage.questCompleted[i]; } if (storage.questCollected[i] !== undefined) { quests[i].collected = storage.questCollected[i]; } if (storage.questCurrentLevels && storage.questCurrentLevels[i] !== undefined) { quests[i].currentLevel = storage.questCurrentLevels[i]; // Update quest properties based on current level if (quests[i].isProgressive && quests[i].questType && questTemplates[quests[i].questType]) { var template = questTemplates[quests[i].questType]; var currentLevel = quests[i].currentLevel; if (currentLevel >= 0 && currentLevel < template.levels.length) { quests[i].target = template.levels[currentLevel].target; quests[i].reward = template.levels[currentLevel].reward; quests[i].nameKey = template.levels[currentLevel].nameKey; } } } if (storage.questQuestTypes && storage.questQuestTypes[i] !== undefined) { quests[i].questType = storage.questQuestTypes[i]; } if (storage.questIsProgressive && storage.questIsProgressive[i] !== undefined) { quests[i].isProgressive = storage.questIsProgressive[i]; } if (storage.questTypes && storage.questTypes[i] !== undefined) { quests[i].type = storage.questTypes[i]; } if (storage.questTargets && storage.questTargets[i] !== undefined) { quests[i].target = storage.questTargets[i]; } if (storage.questRewards && storage.questRewards[i] !== undefined) { quests[i].reward = storage.questRewards[i]; } } } } function createQuestMenu() { questMenu = new Container(); var menuBackground = questMenu.attachAsset('questMenu', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 }); menuBackground.alpha = 0.95; var titleText = new Text2(translations[currentLanguage].questList, { size: 70, fill: 0xFFD700 }); titleText.anchor.set(0.5, 0); titleText.x = 1024; titleText.y = 180; questMenu.addChild(titleText); var closeButton = questMenu.addChild(LK.getAsset('closeButton', { anchorX: 0.5, anchorY: 0.5, x: 1750, y: 250 })); var closeText = new Text2('X', { size: 50, fill: 0xFFFFFF }); closeText.anchor.set(0.5, 0.5); closeText.x = 1750; closeText.y = 250; questMenu.addChild(closeText); closeButton.down = function (x, y, obj) { questMenuOpen = false; game.removeChild(questMenu); questMenu = null; }; // Add prominent close button at bottom var bottomCloseButton = questMenu.addChild(LK.getAsset('collectButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.0, scaleY: 1.5, x: 1024, y: 2600 })); bottomCloseButton.tint = 0xFF6600; var bottomCloseText = new Text2(translations[currentLanguage].close, { size: 40, fill: 0xFFFFFF }); bottomCloseText.anchor.set(0.5, 0.5); bottomCloseText.x = 1024; bottomCloseText.y = 2600; questMenu.addChild(bottomCloseText); bottomCloseButton.down = function (x, y, obj) { questMenuOpen = false; game.removeChild(questMenu); questMenu = null; }; // Add quest items in 2-column layout for (var i = 0; i < quests.length; i++) { var questItem = new QuestItem(quests[i]); var column = i % 2; // 0 for left column, 1 for right column var row = Math.floor(i / 2); // Calculate row number // Position items: left column at x=350, right column at x=1100 questItem.x = column === 0 ? 350 : 1100; questItem.y = 400 + row * 200; // Increased spacing to 200px between rows questMenu.addChild(questItem); questItem.updateDisplay(); } game.addChild(questMenu); } // Add shadow and glow effects to main button tween(buttonBorder, { tint: 0x4A4A4A }, { duration: 200 }); tween(mainButton, { tint: 0xFF4444 }, { duration: 200 }); // Event handlers mainButton.down = function (x, y, obj) { var currentTime = Date.now(); if (currentTime - lastClickTime >= clickDelay) { lastClickTime = currentTime; var clickValue = getClickValue(); points += clickValue; totalClicks++; // Create animated text showing earned points var earnedText = new Text2('+' + formatNumber(clickValue), { size: 60, fill: 0xFFFF00 }); earnedText.anchor.set(0.5, 0.5); earnedText.x = 1024; earnedText.y = 1200; earnedText.alpha = 1.0; game.addChild(earnedText); // Animate the earned points text tween(earnedText, { y: earnedText.y - 100, alpha: 0.0, scaleX: 1.5, scaleY: 1.5 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { game.removeChild(earnedText); } }); // Enhanced visual feedback with glow effects tween(mainButton, { scaleX: 0.85, scaleY: 0.85, tint: 0xFF6666 }, { duration: 80 }); tween(mainButton, { scaleX: 1.05, scaleY: 1.05, tint: 0xDC143C }, { duration: 120, onFinish: function onFinish() { tween(mainButton, { scaleX: 1.0, scaleY: 1.0 }, { duration: 80 }); } }); tween(buttonBorder, { scaleX: 0.85, scaleY: 0.85, tint: 0x2A2A2A }, { duration: 80 }); tween(buttonBorder, { scaleX: 1.0, scaleY: 1.0, tint: 0x4A4A4A }, { duration: 200 }); LK.getSound('click').play(); updatePointsDisplay(); checkQuestCompletion(); saveGame(); } }; languageButton.down = function (x, y, obj) { currentLanguage = currentLanguage === 'tr' ? 'en' : 'tr'; languageText.setText(currentLanguage.toUpperCase()); // Update all visible texts updatePointsDisplay(); updateAllUpgradeButtons(); questButtonText.setText(translations[currentLanguage].quests); // Update upgrade names upgrades[0].name = translations[currentLanguage].upgrades.power; upgrades[1].name = translations[currentLanguage].upgrades["super"]; upgrades[2].name = translations[currentLanguage].upgrades.mega; // Update quest names for (var i = 0; i < quests.length; i++) { if (quests[i].nameKey && translations[currentLanguage].questNames[quests[i].nameKey]) { quests[i].name = translations[currentLanguage].questNames[quests[i].nameKey]; } } // Update quest menu if open if (questMenuOpen && questMenu) { game.removeChild(questMenu); createQuestMenu(); } }; questButton.down = function (x, y, obj) { if (!questMenuOpen) { questMenuOpen = true; createQuestMenu(); } }; // Initialize display updatePointsDisplay(); updateAllUpgradeButtons(); game.update = function () { // Auto-save every 5 seconds if (LK.ticks % 300 === 0) { saveGame(); } };
/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var QuestItem = Container.expand(function (questData) {
var self = Container.call(this);
var titleText = new Text2('', {
size: 50,
fill: 0xFFFFFF
});
titleText.anchor.set(0, 0.5);
titleText.x = 20;
self.addChild(titleText);
var progressText = new Text2('', {
size: 40,
fill: 0xAAAAAA
});
progressText.anchor.set(0, 0.5);
progressText.x = 20;
progressText.y = 60;
self.addChild(progressText);
var rewardText = new Text2('', {
size: 35,
fill: 0xFFFF00
});
rewardText.anchor.set(0, 0.5);
rewardText.x = 20;
rewardText.y = 100;
self.addChild(rewardText);
self.collectButton = new Container();
var collectGraphics = self.collectButton.attachAsset('collectButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.collectText = new Text2(translations[currentLanguage].collect, {
size: 30,
fill: 0xFFFFFF
});
self.collectText.anchor.set(0.5, 0.5);
self.collectButton.addChild(self.collectText);
self.collectButton.x = 520;
self.collectButton.y = 50;
self.addChild(self.collectButton);
self.questData = questData;
self.updateDisplay = function () {
// Use translated quest name if available
var questName = self.questData.nameKey && translations[currentLanguage].questNames[self.questData.nameKey] ? translations[currentLanguage].questNames[self.questData.nameKey] : self.questData.name;
// Add level indicator for progressive quests
if (self.questData.isProgressive) {
var levelText = ' (Seviye ' + (self.questData.currentLevel + 1) + ')';
if (currentLanguage === 'en') {
levelText = ' (Level ' + (self.questData.currentLevel + 1) + ')';
}
questName += levelText;
}
titleText.setText(questName);
var current = getCurrentProgress(self.questData);
var target = self.questData.target;
if (self.questData.completed && !self.questData.collected) {
progressText.setText(translations[currentLanguage].completed);
progressText.fill = "#00ff00";
self.collectButton.visible = true;
} else if (self.questData.collected) {
progressText.setText(translations[currentLanguage].collected);
progressText.fill = "#888888";
self.collectButton.visible = false;
} else {
progressText.setText(formatNumber(current) + ' / ' + formatNumber(target));
progressText.fill = "#aaaaaa";
self.collectButton.visible = false;
}
rewardText.setText(translations[currentLanguage].reward + ': +' + formatNumber(self.questData.reward) + ' ' + translations[currentLanguage].points.toLowerCase());
if (self.collectText) {
self.collectText.setText(translations[currentLanguage].collect);
}
};
self.collectButton.down = function (x, y, obj) {
if (self.questData.completed && !self.questData.collected) {
self.questData.collected = true;
points += self.questData.reward;
LK.getSound('questComplete').play();
updatePointsDisplay();
// Handle progressive quest advancement
if (self.questData.isProgressive && self.questData.questType) {
var template = questTemplates[self.questData.questType];
if (template && template.levels) {
var nextLevel = self.questData.currentLevel + 1;
if (nextLevel < template.levels.length && template.levels[nextLevel]) {
// Advance to next level
self.questData.currentLevel = nextLevel;
self.questData.target = template.levels[nextLevel].target;
self.questData.reward = template.levels[nextLevel].reward;
self.questData.nameKey = template.levels[nextLevel].nameKey;
self.questData.completed = false;
self.questData.collected = false;
}
}
}
self.updateDisplay();
saveGame();
}
};
return self;
});
var UpgradeButton = Container.expand(function (upgradeData) {
var self = Container.call(this);
// Create upgrade text labels (no background)
var titleText = new Text2('', {
size: 50,
fill: 0xFFFFFF
});
titleText.anchor.set(0, 0.5);
titleText.x = -350;
self.addChild(titleText);
var costText = new Text2('', {
size: 40,
fill: 0xFFFF00
});
costText.anchor.set(0, 0.5);
costText.x = -350;
costText.y = 50;
self.addChild(costText);
// Create small square upgrade button logo
var buttonLogo = self.attachAsset('upgradeButtonLogo', {
anchorX: 0.5,
anchorY: 0.5,
x: 550,
y: 25
});
var logoText = new Text2('▲', {
size: 40,
fill: 0xFFFFFF
});
logoText.anchor.set(0.5, 0.5);
logoText.x = 550;
logoText.y = 25;
self.addChild(logoText);
self.upgradeData = upgradeData;
self.updateDisplay = function () {
titleText.setText(self.upgradeData.name + ' (' + translations[currentLanguage].level + self.upgradeData.level + ')');
costText.setText(translations[currentLanguage].cost + ': ' + formatNumber(self.upgradeData.cost));
if (points >= self.upgradeData.cost) {
buttonLogo.tint = 0x32CD32; // Bright green when affordable
} else {
buttonLogo.tint = 0xC0C0C0; // Light gray when not affordable
}
};
// Only the logo button is clickable
buttonLogo.down = function (x, y, obj) {
if (points >= self.upgradeData.cost) {
points -= self.upgradeData.cost;
totalSpent += self.upgradeData.cost;
// Increase only this specific upgrade's level by 1
self.upgradeData.level += 1;
// Calculate new cost for this specific upgrade using its base cost and multiplier
var costMultiplier = self.upgradeData.multiplier;
self.upgradeData.cost = Math.floor(self.upgradeData.baseCost * Math.pow(costMultiplier, self.upgradeData.level));
LK.getSound('purchase').play();
updatePointsDisplay();
self.updateDisplay();
updateAllUpgradeButtons();
saveGame();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4a0080
});
/****
* Game Code
****/
// Create dark to light purple gradient background
game.setBackgroundColor(0x1A0B2E);
// Create enhanced texture background effect
var backgroundTexture = new Container();
for (var i = 0; i < 100; i++) {
for (var j = 0; j < 140; j++) {
if (Math.random() < 0.15) {
var particle = LK.getAsset('textureParticle', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: Math.random() * 0.8 + 0.2,
scaleY: Math.random() * 0.8 + 0.2,
x: i * 20.5 + Math.random() * 10,
y: j * 19.5 + Math.random() * 10
});
particle.alpha = Math.random() * 0.2 + 0.05;
particle.tint = Math.random() > 0.5 ? 0x7B68EE : 0x9370DB;
backgroundTexture.addChild(particle);
}
}
}
game.addChild(backgroundTexture);
// Game variables - initialize with default values
var points = 0;
var totalClicks = 0;
var totalSpent = 0;
var lastClickTime = 0;
var clickDelay = 80;
var currentLanguage = 'tr'; // 'tr' for Turkish, 'en' for English
// Language translations
var translations = {
tr: {
points: 'Puan',
upgrades: {
power: '1x Yükseltme (Power Click)',
"super": '5x Yükseltme (Super Click)',
mega: '10x Yükseltme (Mega Click)'
},
cost: 'Maliyet',
quests: 'GÖREVLER',
questList: 'GÖREV LİSTESİ',
completed: 'TAMAMLANDI!',
collected: 'TOPLANDI',
reward: 'Ödül',
collect: 'TOPLA',
close: 'KAPAT',
level: 'Lv.',
questNames: {
points1k: '1.000 Puan Biriktir',
points10k: '10.000 Puan Biriktir',
points100k: '100.000 Puan Biriktir',
points1m: '1.000.000 Puan Biriktir',
spent500: '500 Puan Harca',
spent5k: '5.000 Puan Harca',
spent50k: '50.000 Puan Harca',
clicks100: '100 Kez Tıkla',
clicks1k: '1.000 Kez Tıkla',
clicks10k: '10.000 Kez Tıkla',
level5: 'Seviye 5\'e Ulaş',
level10: 'Seviye 10\'a Ulaş',
level25: 'Seviye 25\'e Ulaş'
}
},
en: {
points: 'Points',
upgrades: {
power: '1x Upgrade (Power Click)',
"super": '5x Upgrade (Super Click)',
mega: '10x Upgrade (Mega Click)'
},
cost: 'Cost',
quests: 'QUESTS',
questList: 'QUEST LIST',
completed: 'COMPLETED!',
collected: 'COLLECTED',
reward: 'Reward',
collect: 'COLLECT',
close: 'CLOSE',
level: 'Lv.',
questNames: {
points1k: 'Collect 1,000 Points',
points10k: 'Collect 10,000 Points',
points100k: 'Collect 100,000 Points',
points1m: 'Collect 1,000,000 Points',
spent500: 'Spend 500 Points',
spent5k: 'Spend 5,000 Points',
spent50k: 'Spend 50,000 Points',
clicks100: 'Click 100 Times',
clicks1k: 'Click 1,000 Times',
clicks10k: 'Click 10,000 Times',
level5: 'Reach Level 5',
level10: 'Reach Level 10',
level25: 'Reach Level 25'
}
}
};
// Upgrade system - always start with default upgrades at level 1
var upgrades = [{
name: '1x Yükseltme (Power Click)',
level: 1,
cost: 50,
baseCost: 50,
multiplier: 1.15,
clickMultiplier: 1,
upgradeType: 'additive'
}, {
name: '5x Yükseltme (Super Click)',
level: 1,
cost: 300,
baseCost: 300,
multiplier: 1.22,
clickMultiplier: 5,
upgradeType: 'multiplicative'
}, {
name: '10x Yükseltme (Mega Click)',
level: 1,
cost: 800,
baseCost: 800,
multiplier: 1.30,
clickMultiplier: 10,
upgradeType: 'multiplicative'
}];
// Progressive quest system - each quest type has multiple levels
var questTemplates = {
points: {
levels: [{
target: 1000,
reward: 200,
nameKey: 'points1k'
}, {
target: 10000,
reward: 1800,
nameKey: 'points10k'
}, {
target: 100000,
reward: 15000,
nameKey: 'points100k'
}, {
target: 1000000,
reward: 120000,
nameKey: 'points1m'
}],
type: 'points'
},
spent: {
levels: [{
target: 500,
reward: 60,
nameKey: 'spent500'
}, {
target: 5000,
reward: 650,
nameKey: 'spent5k'
}, {
target: 50000,
reward: 6000,
nameKey: 'spent50k'
}],
type: 'spent'
},
clicks: {
levels: [{
target: 100,
reward: 50,
nameKey: 'clicks100'
}, {
target: 1000,
reward: 300,
nameKey: 'clicks1k'
}, {
target: 10000,
reward: 2000,
nameKey: 'clicks10k'
}],
type: 'clicks'
},
upgrade: {
levels: [{
target: 5,
reward: 300,
nameKey: 'level5'
}, {
target: 10,
reward: 1800,
nameKey: 'level10'
}, {
target: 25,
reward: 12000,
nameKey: 'level25'
}],
type: 'upgrade'
}
};
// Create initial progressive quests
var quests = [];
for (var questType in questTemplates) {
var template = questTemplates[questType];
if (template && template.levels && template.levels.length > 0) {
var quest = {
questType: questType,
currentLevel: 0,
type: template.type,
target: template.levels[0].target,
reward: template.levels[0].reward,
nameKey: template.levels[0].nameKey,
name: '',
completed: false,
collected: false,
isProgressive: true
};
quests.push(quest);
}
}
// Load saved game data
loadGame();
// UI elements
var buttonBorder = game.addChild(LK.getAsset('buttonBorder', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1200
}));
var mainButton = game.addChild(LK.getAsset('mainButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1200
}));
// Language selector button
var languageButton = new Container();
var languageBox = languageButton.attachAsset('closeButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
});
languageBox.tint = 0x4A4A4A;
var languageText = new Text2('TR', {
size: 40,
fill: 0xFFFFFF
});
languageText.anchor.set(0.5, 0.5);
languageButton.addChild(languageText);
languageButton.x = 1024;
languageButton.y = 700;
game.addChild(languageButton);
var pointsText = new Text2('0 Puan', {
size: 80,
fill: 0xFFFFFF
});
pointsText.anchor.set(0.5, 0.5);
pointsText.x = 1024;
pointsText.y = 800;
game.addChild(pointsText);
var clickValueText = new Text2('+1 Points', {
size: 50,
fill: 0xFFFFFF
});
clickValueText.anchor.set(0.5, 0.5);
clickValueText.x = 1024;
clickValueText.y = 1200;
game.addChild(clickValueText);
// Upgrade buttons
var upgradeButtons = [];
for (var i = 0; i < upgrades.length; i++) {
var upgradeButton = new UpgradeButton(upgrades[i]);
upgradeButton.x = 1024;
upgradeButton.y = 1600 + i * 160;
game.addChild(upgradeButton);
upgradeButtons.push(upgradeButton);
}
// Quest button - positioned safely away from top-left corner
var questButton = game.addChild(LK.getAsset('questButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1750,
y: 200
}));
var questButtonText = new Text2('GÖREVLER', {
size: 32,
fill: 0x000000
});
questButtonText.anchor.set(0.5, 0.5);
questButtonText.x = 1750;
questButtonText.y = 200;
game.addChild(questButtonText);
// Quest menu
var questMenu = null;
var questMenuOpen = false;
// Helper functions
function formatNumber(num) {
if (num >= 1000000000) {
var formatted = (num / 1000000000).toFixed(1);
return formatted.endsWith('.0') ? formatted.slice(0, -2) + 'B' : formatted + 'B';
} else if (num >= 1000000) {
var formatted = (num / 1000000).toFixed(1);
return formatted.endsWith('.0') ? formatted.slice(0, -2) + 'M' : formatted + 'M';
} else if (num >= 1000) {
var formatted = (num / 1000).toFixed(1);
return formatted.endsWith('.0') ? formatted.slice(0, -2) + 'K' : formatted + 'K';
}
return Math.floor(num).toString();
}
function getClickValue() {
var baseValue = 1;
var totalMultiplier = 1;
// First, calculate additive bonuses from Power Click (1x Upgrade)
// Level 1 provides base +1, each level adds +1 more
for (var i = 0; i < upgrades.length; i++) {
if (upgrades[i].upgradeType === 'additive' && upgrades[i].level >= 1) {
// Each level adds the clickMultiplier amount to the base value
baseValue += upgrades[i].level;
}
}
// Then, apply multiplicative bonuses from Super Click (5x) and Mega Click (10x)
// Each level applies the multiplier once (not exponentially)
for (var i = 0; i < upgrades.length; i++) {
if (upgrades[i].upgradeType === 'multiplicative' && upgrades[i].level >= 1) {
// Each level applies the clickMultiplier (5x or 10x) multiplicatively
for (var level = 0; level < upgrades[i].level; level++) {
totalMultiplier *= upgrades[i].clickMultiplier;
}
}
}
return Math.floor(baseValue * totalMultiplier);
}
function updatePointsDisplay() {
pointsText.setText(formatNumber(points) + ' ' + translations[currentLanguage].points);
clickValueText.setText('+' + formatNumber(getClickValue()) + ' ' + translations[currentLanguage].points);
}
function updateAllUpgradeButtons() {
for (var i = 0; i < upgradeButtons.length; i++) {
upgradeButtons[i].updateDisplay();
}
}
function getCurrentProgress(quest) {
switch (quest.type) {
case 'points':
return points;
case 'clicks':
return totalClicks;
case 'spent':
return totalSpent;
case 'upgrade':
// Return the average level among all upgrades for quest progress
var totalLevels = 0;
for (var i = 0; i < upgrades.length; i++) {
totalLevels += upgrades[i].level;
}
return Math.floor(totalLevels / upgrades.length);
default:
return 0;
}
}
function syncUpgradeLevels() {
// No longer sync levels - each upgrade maintains its own level
// This function now just ensures costs are properly calculated
for (var i = 0; i < upgrades.length; i++) {
if (!upgrades[i].baseCost) {
upgrades[i].baseCost = upgrades[i].cost;
}
// Recalculate cost based on current level
upgrades[i].cost = Math.floor(upgrades[i].baseCost * Math.pow(upgrades[i].multiplier, upgrades[i].level));
}
}
function checkQuestCompletion() {
for (var i = 0; i < quests.length; i++) {
var quest = quests[i];
if (!quest.completed) {
var current = getCurrentProgress(quest);
if (current >= quest.target) {
quest.completed = true;
}
}
}
}
function saveGame() {
storage.points = points;
storage.totalClicks = totalClicks;
storage.totalSpent = totalSpent;
// Convert upgrades to storage-compatible format
storage.upgradeNames = [];
storage.upgradeLevels = [];
storage.upgradeCosts = [];
storage.upgradeBaseCosts = [];
storage.upgradeMultipliers = [];
storage.upgradeClickMultipliers = [];
storage.upgradeTypes = [];
for (var i = 0; i < upgrades.length; i++) {
storage.upgradeNames[i] = upgrades[i].name;
storage.upgradeLevels[i] = upgrades[i].level;
storage.upgradeCosts[i] = upgrades[i].cost;
storage.upgradeBaseCosts[i] = upgrades[i].baseCost;
storage.upgradeMultipliers[i] = upgrades[i].multiplier;
storage.upgradeClickMultipliers[i] = upgrades[i].clickMultiplier;
storage.upgradeTypes[i] = upgrades[i].upgradeType;
}
// Convert quests to storage-compatible format
storage.questNames = [];
storage.questTypes = [];
storage.questTargets = [];
storage.questRewards = [];
storage.questCompleted = [];
storage.questCollected = [];
storage.questCurrentLevels = [];
storage.questIsProgressive = [];
storage.questQuestTypes = [];
for (var i = 0; i < quests.length; i++) {
storage.questNames[i] = quests[i].name;
storage.questTypes[i] = quests[i].type;
storage.questTargets[i] = quests[i].target;
storage.questRewards[i] = quests[i].reward;
storage.questCompleted[i] = quests[i].completed;
storage.questCollected[i] = quests[i].collected;
storage.questCurrentLevels[i] = quests[i].currentLevel || 0;
storage.questIsProgressive[i] = quests[i].isProgressive || false;
storage.questQuestTypes[i] = quests[i].questType || '';
}
}
function loadGame() {
// Load basic game stats
if (storage.points !== undefined) {
points = storage.points;
}
if (storage.totalClicks !== undefined) {
totalClicks = storage.totalClicks;
}
if (storage.totalSpent !== undefined) {
totalSpent = storage.totalSpent;
}
// Load upgrades if they exist in storage
if (storage.upgradeLevels && storage.upgradeLevels.length > 0) {
for (var i = 0; i < upgrades.length && i < storage.upgradeLevels.length; i++) {
if (storage.upgradeLevels[i] !== undefined) {
upgrades[i].level = storage.upgradeLevels[i];
}
if (storage.upgradeCosts[i] !== undefined) {
upgrades[i].cost = storage.upgradeCosts[i];
}
if (storage.upgradeBaseCosts && storage.upgradeBaseCosts[i] !== undefined) {
upgrades[i].baseCost = storage.upgradeBaseCosts[i];
}
if (storage.upgradeTypes && storage.upgradeTypes[i] !== undefined) {
upgrades[i].upgradeType = storage.upgradeTypes[i];
}
}
// Ensure proper upgrade costs after loading
syncUpgradeLevels();
}
// Load quests if they exist in storage
if (storage.questCompleted && storage.questCompleted.length > 0) {
for (var i = 0; i < quests.length && i < storage.questCompleted.length; i++) {
if (storage.questCompleted[i] !== undefined) {
quests[i].completed = storage.questCompleted[i];
}
if (storage.questCollected[i] !== undefined) {
quests[i].collected = storage.questCollected[i];
}
if (storage.questCurrentLevels && storage.questCurrentLevels[i] !== undefined) {
quests[i].currentLevel = storage.questCurrentLevels[i];
// Update quest properties based on current level
if (quests[i].isProgressive && quests[i].questType && questTemplates[quests[i].questType]) {
var template = questTemplates[quests[i].questType];
var currentLevel = quests[i].currentLevel;
if (currentLevel >= 0 && currentLevel < template.levels.length) {
quests[i].target = template.levels[currentLevel].target;
quests[i].reward = template.levels[currentLevel].reward;
quests[i].nameKey = template.levels[currentLevel].nameKey;
}
}
}
if (storage.questQuestTypes && storage.questQuestTypes[i] !== undefined) {
quests[i].questType = storage.questQuestTypes[i];
}
if (storage.questIsProgressive && storage.questIsProgressive[i] !== undefined) {
quests[i].isProgressive = storage.questIsProgressive[i];
}
if (storage.questTypes && storage.questTypes[i] !== undefined) {
quests[i].type = storage.questTypes[i];
}
if (storage.questTargets && storage.questTargets[i] !== undefined) {
quests[i].target = storage.questTargets[i];
}
if (storage.questRewards && storage.questRewards[i] !== undefined) {
quests[i].reward = storage.questRewards[i];
}
}
}
}
function createQuestMenu() {
questMenu = new Container();
var menuBackground = questMenu.attachAsset('questMenu', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
menuBackground.alpha = 0.95;
var titleText = new Text2(translations[currentLanguage].questList, {
size: 70,
fill: 0xFFD700
});
titleText.anchor.set(0.5, 0);
titleText.x = 1024;
titleText.y = 180;
questMenu.addChild(titleText);
var closeButton = questMenu.addChild(LK.getAsset('closeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1750,
y: 250
}));
var closeText = new Text2('X', {
size: 50,
fill: 0xFFFFFF
});
closeText.anchor.set(0.5, 0.5);
closeText.x = 1750;
closeText.y = 250;
questMenu.addChild(closeText);
closeButton.down = function (x, y, obj) {
questMenuOpen = false;
game.removeChild(questMenu);
questMenu = null;
};
// Add prominent close button at bottom
var bottomCloseButton = questMenu.addChild(LK.getAsset('collectButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.0,
scaleY: 1.5,
x: 1024,
y: 2600
}));
bottomCloseButton.tint = 0xFF6600;
var bottomCloseText = new Text2(translations[currentLanguage].close, {
size: 40,
fill: 0xFFFFFF
});
bottomCloseText.anchor.set(0.5, 0.5);
bottomCloseText.x = 1024;
bottomCloseText.y = 2600;
questMenu.addChild(bottomCloseText);
bottomCloseButton.down = function (x, y, obj) {
questMenuOpen = false;
game.removeChild(questMenu);
questMenu = null;
};
// Add quest items in 2-column layout
for (var i = 0; i < quests.length; i++) {
var questItem = new QuestItem(quests[i]);
var column = i % 2; // 0 for left column, 1 for right column
var row = Math.floor(i / 2); // Calculate row number
// Position items: left column at x=350, right column at x=1100
questItem.x = column === 0 ? 350 : 1100;
questItem.y = 400 + row * 200; // Increased spacing to 200px between rows
questMenu.addChild(questItem);
questItem.updateDisplay();
}
game.addChild(questMenu);
}
// Add shadow and glow effects to main button
tween(buttonBorder, {
tint: 0x4A4A4A
}, {
duration: 200
});
tween(mainButton, {
tint: 0xFF4444
}, {
duration: 200
});
// Event handlers
mainButton.down = function (x, y, obj) {
var currentTime = Date.now();
if (currentTime - lastClickTime >= clickDelay) {
lastClickTime = currentTime;
var clickValue = getClickValue();
points += clickValue;
totalClicks++;
// Create animated text showing earned points
var earnedText = new Text2('+' + formatNumber(clickValue), {
size: 60,
fill: 0xFFFF00
});
earnedText.anchor.set(0.5, 0.5);
earnedText.x = 1024;
earnedText.y = 1200;
earnedText.alpha = 1.0;
game.addChild(earnedText);
// Animate the earned points text
tween(earnedText, {
y: earnedText.y - 100,
alpha: 0.0,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 1000,
easing: tween.easeOut,
onFinish: function onFinish() {
game.removeChild(earnedText);
}
});
// Enhanced visual feedback with glow effects
tween(mainButton, {
scaleX: 0.85,
scaleY: 0.85,
tint: 0xFF6666
}, {
duration: 80
});
tween(mainButton, {
scaleX: 1.05,
scaleY: 1.05,
tint: 0xDC143C
}, {
duration: 120,
onFinish: function onFinish() {
tween(mainButton, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 80
});
}
});
tween(buttonBorder, {
scaleX: 0.85,
scaleY: 0.85,
tint: 0x2A2A2A
}, {
duration: 80
});
tween(buttonBorder, {
scaleX: 1.0,
scaleY: 1.0,
tint: 0x4A4A4A
}, {
duration: 200
});
LK.getSound('click').play();
updatePointsDisplay();
checkQuestCompletion();
saveGame();
}
};
languageButton.down = function (x, y, obj) {
currentLanguage = currentLanguage === 'tr' ? 'en' : 'tr';
languageText.setText(currentLanguage.toUpperCase());
// Update all visible texts
updatePointsDisplay();
updateAllUpgradeButtons();
questButtonText.setText(translations[currentLanguage].quests);
// Update upgrade names
upgrades[0].name = translations[currentLanguage].upgrades.power;
upgrades[1].name = translations[currentLanguage].upgrades["super"];
upgrades[2].name = translations[currentLanguage].upgrades.mega;
// Update quest names
for (var i = 0; i < quests.length; i++) {
if (quests[i].nameKey && translations[currentLanguage].questNames[quests[i].nameKey]) {
quests[i].name = translations[currentLanguage].questNames[quests[i].nameKey];
}
}
// Update quest menu if open
if (questMenuOpen && questMenu) {
game.removeChild(questMenu);
createQuestMenu();
}
};
questButton.down = function (x, y, obj) {
if (!questMenuOpen) {
questMenuOpen = true;
createQuestMenu();
}
};
// Initialize display
updatePointsDisplay();
updateAllUpgradeButtons();
game.update = function () {
// Auto-save every 5 seconds
if (LK.ticks % 300 === 0) {
saveGame();
}
};