User prompt
paramız yetmediğinde tıkladığımızda çıkan kırmızı uyarılı şey eğer eklenti ise onu animasyonla değiştir eklenti bu şeyde on şeyde istemiyorum bu level adlı
User prompt
olması gereken tek eklenti oyunda seviye atladığımızda kayıt etmesi ve tıkladıktan sonra biriken puan ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Fakat bunu eklenti ile değil, normal biz oynarken etkilenmesi için küçük animasyonlarla ya da eklentilere kaldırdık.
User prompt
biriktirdiğimiz puan yetmediğinde kırmızı bir yazıyla yukarıdan bir uyarı gelsin ya da yeşil düğmeden bir kırmızı uyarı çıkabilir paran yetmiyor puanın yetmiyor gibi ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
o zaman tek ekleyeceğin eklenti kaydetme sistemi olsun ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
tüm eklentileri kaldır onun yerine küçük animasyonlar ekle
User prompt
düğmeyi sanki 3 boyutluymuş gibi göstermeye çalış ama saçmalama
User prompt
daha önce kullandığın fakat şu an hiç kullanmadığın kodları sil oyunu bozma
User prompt
oyunu hiç bozmadan daha önce kullandığın fakat şu an hiç kullanmadığın kodları seç oyunu bozma
User prompt
ilk yükseltme yüz yüz pointle başlayıp her seferinde yüzde yirmi beş yani bir nokta yirmi beş fiyat artışı olacaktır.
User prompt
Fiyat artışının ne hızlı ne yavaş dengeli ama bir yandan da yavaş yavaş artsın yani level atlaması gitgide zorlaşsın yani
User prompt
Fiyat artışı her zaman çok az olmasın, dengeli ama oyunu pahalılaştırmayacak, dengeli tutacak şekilde.
User prompt
Göze çarpan hataları düzelt, oyunu bozma.
User prompt
Tek tıklamada daha çok sayıda puan kazanmamız dışındaki tüm yükseltmeleri kaldır.
User prompt
Levellarda fiyat artışını dengele ne hızlı artsın ne yavaş artsın kullanıcıyı oyunda tutsun
User prompt
Yaptığımız yükseltmelerle ilgili ve topladığımız bu anlarla ilgili kalıcı bellek yani toplama verileri yanlış, yani veriler sürekli sıfırlanıyor. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Yaptığımız yükseltmeler ve topladığımız puanlar hiç silinmesin. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Her Tıkladığımızda Ekrana Çıkan Flashback'i Kaldır Göz Yoruyor
User prompt
Please fix the bug: 'Uncaught TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 286
User prompt
düğmede herhangi bir hata varsa onu düzelt ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Düğmeyi aşırı gerçekçi yap. Aşırı, aşırı aşırı. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Görev sistemindeki herşeyi sil, görevleri kaldır.
User prompt
görevleri toplama yani bitirdikten sonra toplama düğmesiyle görevlerin logosu neden aynı
User prompt
Gerçek düğme tıklama oyunu yani clicker oyunlarından esinlenerek bu oyunu düzelt, gözden geçir ve iyileştirmeler yap. ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
görevler tuşunu kare yap
/**** * Plugins ****/ var storage = LK.import("@upit/storage.v1"); var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Quest = Container.expand(function (id, description, target, reward, type) { var self = Container.call(this); var background = self.attachAsset('questButton', { anchorX: 0.5, anchorY: 0.5 }); var descText = new Text2(description, { size: 28, fill: 0xFFFFFF }); descText.anchor.set(0.5, 0.5); descText.y = -15; self.addChild(descText); var progressText = new Text2('', { size: 24, fill: 0xFFFF00 }); progressText.anchor.set(0.5, 0.5); progressText.y = 15; self.addChild(progressText); self.id = id; self.description = description; self.target = target; self.reward = reward; self.type = type; self.completed = false; self.claimed = false; self.updateProgress = function () { var current = 0; // Enhanced progress tracking with better detection if (self.type === 'clicks') { current = totalClicks; } else if (self.type === 'points') { current = points; } else if (self.type === 'level') { current = upgradeButton ? upgradeButton.level : 1; } else if (self.type === 'spend') { current = storage.totalSpent || 0; } // Better completion detection - check if we just completed var wasCompleted = self.completed; if (current >= self.target && !self.completed) { self.completed = true; background.tint = 0x00FF00; progressText.setText('COMPLETED! Click to claim ' + formatNumber(self.reward) + ' points'); // Save immediately when quest is completed saveGame(); // Visual feedback for completion if (!wasCompleted) { tween(background, { scaleX: 1.1, scaleY: 1.1 }, { duration: 200, easing: tween.bounceOut, onFinish: function onFinish() { tween(background, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.bounceOut }); } }); } } else if (!self.completed) { progressText.setText(formatNumber(current) + ' / ' + formatNumber(self.target)); } else if (self.claimed) { progressText.setText('CLAIMED!'); background.tint = 0x666666; } }; self.down = function (x, y, obj) { if (self.completed && !self.claimed) { self.claimed = true; points += self.reward; updatePointsDisplay(); saveGame(); self.updateProgress(); // Completion animation tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.bounceOut, onFinish: function onFinish() { tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.bounceOut }); } }); } }; return self; }); var Upgrade = Container.expand(function (name, baseCost, multiplier) { var self = Container.call(this); var background = self.attachAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5 }); var nameText = new Text2(name, { size: 40, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0.5); nameText.y = -20; self.addChild(nameText); var costText = new Text2('', { size: 32, fill: 0xFFFF00 }); costText.anchor.set(0.5, 0.5); costText.y = 20; self.addChild(costText); self.name = name; self.level = 1; self.baseCost = baseCost; self.cost = baseCost; self.multiplier = multiplier; self.updateDisplay = function () { nameText.setText(self.name + ' (Lv.' + self.level + ')'); costText.setText('Cost: ' + formatNumber(self.cost)); background.tint = points >= self.cost ? 0x4CAF50 : 0x888888; }; self.down = function (x, y, obj) { if (points >= self.cost) { var spent = self.cost; points -= spent; storage.totalSpent = (storage.totalSpent || 0) + spent; self.level++; self.cost = Math.floor(self.baseCost * Math.pow(self.multiplier, self.level - 1)); self.updateDisplay(); updatePointsDisplay(); saveGame(); // Update quest progress immediately for instant detection for (var i = 0; i < quests.length; i++) { quests[i].updateProgress(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2E1065 }); /**** * Game Code ****/ // Game variables var points = 0; var totalClicks = 0; var clickPower = 1; var quests = []; var questData = [{ id: 'clicks_10', description: 'Click 10 times', target: 10, reward: 50, type: 'clicks' }, { id: 'clicks_100', description: 'Click 100 times', target: 100, reward: 200, type: 'clicks' }, { id: 'clicks_1000', description: 'Click 1000 times', target: 1000, reward: 1000, type: 'clicks' }, { id: 'points_100', description: 'Collect 100 points', target: 100, reward: 100, type: 'points' }, { id: 'points_1000', description: 'Collect 1000 points', target: 1000, reward: 500, type: 'points' }, { id: 'points_10000', description: 'Collect 10000 points', target: 10000, reward: 2000, type: 'points' }, { id: 'level_5', description: 'Reach upgrade level 5', target: 5, reward: 300, type: 'level' }, { id: 'level_10', description: 'Reach upgrade level 10', target: 10, reward: 800, type: 'level' }, { id: 'spend_500', description: 'Spend 500 points', target: 500, reward: 250, type: 'spend' }, { id: 'spend_2000', description: 'Spend 2000 points', target: 2000, reward: 1000, type: 'spend' }]; // Helper functions function formatNumber(num) { if (num >= 1000000000) { return (num / 1000000000).toFixed(1) + 'B'; } else if (num >= 1000000) { return (num / 1000000).toFixed(1) + 'M'; } else if (num >= 1000) { return (num / 1000).toFixed(1) + 'K'; } ; return Math.floor(num).toString(); } function updatePointsDisplay() { pointsText.setText(formatNumber(points) + ' Points'); } function saveGame() { storage.points = points; storage.totalClicks = totalClicks; storage.clickPower = clickPower; if (upgradeButton) { storage.upgradeLevel = upgradeButton.level; storage.upgradeCost = upgradeButton.cost; } // Save quest progress as flattened arrays var questCompleted = []; var questClaimed = []; for (var i = 0; i < quests.length; i++) { var quest = quests[i]; questCompleted.push(quest.completed); questClaimed.push(quest.claimed); } storage.questCompleted = questCompleted; storage.questClaimed = questClaimed; } function loadGame() { points = Number(storage.points) || 0; totalClicks = Number(storage.totalClicks) || 0; clickPower = Number(storage.clickPower) || 1; if (upgradeButton) { upgradeButton.level = Number(storage.upgradeLevel) || 1; upgradeButton.cost = Number(storage.upgradeCost) || 10; } } // Load saved game data loadGame(); // Create realistic button with shadow and highlight var buttonShadow = game.addChild(LK.getAsset('buttonShadow', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1371 })); buttonShadow.alpha = 0.3; var mainButton = game.addChild(LK.getAsset('redButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 })); var buttonHighlight = game.addChild(LK.getAsset('buttonHighlight', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1361 })); buttonHighlight.alpha = 0.4; // Create points display var pointsText = new Text2('0 Points', { size: 80, fill: 0xFFFFFF }); pointsText.anchor.set(0.5, 0.5); pointsText.x = 1024; pointsText.y = 600; game.addChild(pointsText); // Create upgrade button var upgradeButton = new Upgrade('Click Power', 10, 1.5); upgradeButton.x = 1024; upgradeButton.y = 1800; game.addChild(upgradeButton); // Click power calculation function getClickValue() { return clickPower * upgradeButton.level; } // Event handlers mainButton.down = function (x, y, obj) { var clickValue = getClickValue(); points += clickValue; totalClicks++; // Realistic button press animation with shadow and highlight tween.stop(mainButton); tween.stop(buttonShadow); tween.stop(buttonHighlight); // Press down effect mainButton.scaleX = 0.92; mainButton.scaleY = 0.92; mainButton.y = 1368; buttonShadow.scaleX = 0.95; buttonShadow.scaleY = 0.95; buttonShadow.y = 1370; buttonHighlight.scaleX = 0.88; buttonHighlight.scaleY = 0.88; buttonHighlight.y = 1363; buttonHighlight.alpha = 0.2; // Return to normal with bounce effect tween(mainButton, { scaleX: 1.0, scaleY: 1.0, y: 1366 }, { duration: 150, easing: tween.bounceOut }); tween(buttonShadow, { scaleX: 1.0, scaleY: 1.0, y: 1371 }, { duration: 150, easing: tween.bounceOut }); tween(buttonHighlight, { scaleX: 1.0, scaleY: 1.0, y: 1361, alpha: 0.4 }, { duration: 150, easing: tween.bounceOut }); updatePointsDisplay(); // Update quest progress immediately for instant detection for (var i = 0; i < quests.length; i++) { quests[i].updateProgress(); } }; // Create quest system function createQuests() { if (quests.length > 0) return; // Avoid creating quests multiple times var questCompleted = storage.questCompleted || []; var questClaimed = storage.questClaimed || []; for (var i = 0; i < questData.length; i++) { var qData = questData[i]; var quest = new Quest(qData.id, qData.description, qData.target, qData.reward, qData.type); // Load saved quest progress from flattened arrays if (i < questCompleted.length) { quest.completed = questCompleted[i]; } if (i < questClaimed.length) { quest.claimed = questClaimed[i]; } quests.push(quest); // Don't add to game directly - only show in panel } } // Quest panel system variables var questPanel = null; var questButton = null; var questPanelVisible = false; // Create quest panel button in top right questButton = game.addChild(LK.getAsset('questButton', { anchorX: 1.0, anchorY: 0.0, x: 2048 - 20, y: 120 })); var questButtonText = new Text2('Q', { size: 40, fill: 0xFFFFFF }); questButtonText.anchor.set(0.5, 0.5); questButton.addChild(questButtonText); questButton.down = function (x, y, obj) { if (questPanelVisible) { hideQuestPanel(); } else { showQuestPanel(); } }; function showQuestPanel() { if (questPanel) return; questPanelVisible = true; // Create dark overlay var overlay = game.addChild(LK.getAsset('questComplete', { anchorX: 0.0, anchorY: 0.0, x: 0, y: 0, width: 2048, height: 2732 })); overlay.tint = 0x000000; overlay.alpha = 0.7; // Create quest panel container questPanel = new Container(); questPanel.x = 1024; questPanel.y = 1366; game.addChild(questPanel); // Panel background var panelBg = questPanel.attachAsset('questComplete', { anchorX: 0.5, anchorY: 0.5, width: 1800, height: 2400 }); panelBg.tint = 0x333333; // Panel title var panelTitle = new Text2('QUESTS', { size: 60, fill: 0xFFFFFF }); panelTitle.anchor.set(0.5, 0.5); panelTitle.y = -1100; questPanel.addChild(panelTitle); // Close button var closeBtn = questPanel.attachAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5, y: 1000, width: 400, height: 80 }); closeBtn.tint = 0xff4444; var closeBtnText = new Text2('CLOSE', { size: 36, fill: 0xFFFFFF }); closeBtnText.anchor.set(0.5, 0.5); closeBtnText.y = 1000; questPanel.addChild(closeBtnText); closeBtn.down = function (x, y, obj) { hideQuestPanel(); }; // Add quests to panel for (var i = 0; i < quests.length; i++) { var quest = quests[i]; quest.x = 0; quest.y = -800 + i * 120; questPanel.addChild(quest); } // Store overlay reference questPanel.overlay = overlay; // Animation questPanel.scaleX = 0.1; questPanel.scaleY = 0.1; questPanel.alpha = 0; tween(questPanel, { scaleX: 1.0, scaleY: 1.0, alpha: 1.0 }, { duration: 300, easing: tween.bounceOut }); } function hideQuestPanel() { if (!questPanel) return; questPanelVisible = false; tween(questPanel, { scaleX: 0.1, scaleY: 0.1, alpha: 0 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { // Remove overlay if (questPanel.overlay) { questPanel.overlay.destroy(); } // Destroy quest panel questPanel.destroy(); questPanel = null; } }); } createQuests(); // Initialize display updatePointsDisplay(); upgradeButton.updateDisplay(); // Auto-save every 60 seconds to reduce performance impact game.update = function () { // Auto-save less frequently to improve performance if (LK.ticks % 3600 === 0) { saveGame(); } // Update upgrade button display less frequently if (LK.ticks % 60 === 0) { upgradeButton.updateDisplay(); } // Update quest progress every 30 ticks for better detection if (LK.ticks % 30 === 0) { for (var i = 0; i < quests.length; i++) { quests[i].updateProgress(); } } };
/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Quest = Container.expand(function (id, description, target, reward, type) {
var self = Container.call(this);
var background = self.attachAsset('questButton', {
anchorX: 0.5,
anchorY: 0.5
});
var descText = new Text2(description, {
size: 28,
fill: 0xFFFFFF
});
descText.anchor.set(0.5, 0.5);
descText.y = -15;
self.addChild(descText);
var progressText = new Text2('', {
size: 24,
fill: 0xFFFF00
});
progressText.anchor.set(0.5, 0.5);
progressText.y = 15;
self.addChild(progressText);
self.id = id;
self.description = description;
self.target = target;
self.reward = reward;
self.type = type;
self.completed = false;
self.claimed = false;
self.updateProgress = function () {
var current = 0;
// Enhanced progress tracking with better detection
if (self.type === 'clicks') {
current = totalClicks;
} else if (self.type === 'points') {
current = points;
} else if (self.type === 'level') {
current = upgradeButton ? upgradeButton.level : 1;
} else if (self.type === 'spend') {
current = storage.totalSpent || 0;
}
// Better completion detection - check if we just completed
var wasCompleted = self.completed;
if (current >= self.target && !self.completed) {
self.completed = true;
background.tint = 0x00FF00;
progressText.setText('COMPLETED! Click to claim ' + formatNumber(self.reward) + ' points');
// Save immediately when quest is completed
saveGame();
// Visual feedback for completion
if (!wasCompleted) {
tween(background, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 200,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(background, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.bounceOut
});
}
});
}
} else if (!self.completed) {
progressText.setText(formatNumber(current) + ' / ' + formatNumber(self.target));
} else if (self.claimed) {
progressText.setText('CLAIMED!');
background.tint = 0x666666;
}
};
self.down = function (x, y, obj) {
if (self.completed && !self.claimed) {
self.claimed = true;
points += self.reward;
updatePointsDisplay();
saveGame();
self.updateProgress();
// Completion animation
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.bounceOut
});
}
});
}
};
return self;
});
var Upgrade = Container.expand(function (name, baseCost, multiplier) {
var self = Container.call(this);
var background = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var nameText = new Text2(name, {
size: 40,
fill: 0xFFFFFF
});
nameText.anchor.set(0.5, 0.5);
nameText.y = -20;
self.addChild(nameText);
var costText = new Text2('', {
size: 32,
fill: 0xFFFF00
});
costText.anchor.set(0.5, 0.5);
costText.y = 20;
self.addChild(costText);
self.name = name;
self.level = 1;
self.baseCost = baseCost;
self.cost = baseCost;
self.multiplier = multiplier;
self.updateDisplay = function () {
nameText.setText(self.name + ' (Lv.' + self.level + ')');
costText.setText('Cost: ' + formatNumber(self.cost));
background.tint = points >= self.cost ? 0x4CAF50 : 0x888888;
};
self.down = function (x, y, obj) {
if (points >= self.cost) {
var spent = self.cost;
points -= spent;
storage.totalSpent = (storage.totalSpent || 0) + spent;
self.level++;
self.cost = Math.floor(self.baseCost * Math.pow(self.multiplier, self.level - 1));
self.updateDisplay();
updatePointsDisplay();
saveGame();
// Update quest progress immediately for instant detection
for (var i = 0; i < quests.length; i++) {
quests[i].updateProgress();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2E1065
});
/****
* Game Code
****/
// Game variables
var points = 0;
var totalClicks = 0;
var clickPower = 1;
var quests = [];
var questData = [{
id: 'clicks_10',
description: 'Click 10 times',
target: 10,
reward: 50,
type: 'clicks'
}, {
id: 'clicks_100',
description: 'Click 100 times',
target: 100,
reward: 200,
type: 'clicks'
}, {
id: 'clicks_1000',
description: 'Click 1000 times',
target: 1000,
reward: 1000,
type: 'clicks'
}, {
id: 'points_100',
description: 'Collect 100 points',
target: 100,
reward: 100,
type: 'points'
}, {
id: 'points_1000',
description: 'Collect 1000 points',
target: 1000,
reward: 500,
type: 'points'
}, {
id: 'points_10000',
description: 'Collect 10000 points',
target: 10000,
reward: 2000,
type: 'points'
}, {
id: 'level_5',
description: 'Reach upgrade level 5',
target: 5,
reward: 300,
type: 'level'
}, {
id: 'level_10',
description: 'Reach upgrade level 10',
target: 10,
reward: 800,
type: 'level'
}, {
id: 'spend_500',
description: 'Spend 500 points',
target: 500,
reward: 250,
type: 'spend'
}, {
id: 'spend_2000',
description: 'Spend 2000 points',
target: 2000,
reward: 1000,
type: 'spend'
}];
// Helper functions
function formatNumber(num) {
if (num >= 1000000000) {
return (num / 1000000000).toFixed(1) + 'B';
} else if (num >= 1000000) {
return (num / 1000000).toFixed(1) + 'M';
} else if (num >= 1000) {
return (num / 1000).toFixed(1) + 'K';
}
;
return Math.floor(num).toString();
}
function updatePointsDisplay() {
pointsText.setText(formatNumber(points) + ' Points');
}
function saveGame() {
storage.points = points;
storage.totalClicks = totalClicks;
storage.clickPower = clickPower;
if (upgradeButton) {
storage.upgradeLevel = upgradeButton.level;
storage.upgradeCost = upgradeButton.cost;
}
// Save quest progress as flattened arrays
var questCompleted = [];
var questClaimed = [];
for (var i = 0; i < quests.length; i++) {
var quest = quests[i];
questCompleted.push(quest.completed);
questClaimed.push(quest.claimed);
}
storage.questCompleted = questCompleted;
storage.questClaimed = questClaimed;
}
function loadGame() {
points = Number(storage.points) || 0;
totalClicks = Number(storage.totalClicks) || 0;
clickPower = Number(storage.clickPower) || 1;
if (upgradeButton) {
upgradeButton.level = Number(storage.upgradeLevel) || 1;
upgradeButton.cost = Number(storage.upgradeCost) || 10;
}
}
// Load saved game data
loadGame();
// Create realistic button with shadow and highlight
var buttonShadow = game.addChild(LK.getAsset('buttonShadow', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1371
}));
buttonShadow.alpha = 0.3;
var mainButton = game.addChild(LK.getAsset('redButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
var buttonHighlight = game.addChild(LK.getAsset('buttonHighlight', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1361
}));
buttonHighlight.alpha = 0.4;
// Create points display
var pointsText = new Text2('0 Points', {
size: 80,
fill: 0xFFFFFF
});
pointsText.anchor.set(0.5, 0.5);
pointsText.x = 1024;
pointsText.y = 600;
game.addChild(pointsText);
// Create upgrade button
var upgradeButton = new Upgrade('Click Power', 10, 1.5);
upgradeButton.x = 1024;
upgradeButton.y = 1800;
game.addChild(upgradeButton);
// Click power calculation
function getClickValue() {
return clickPower * upgradeButton.level;
}
// Event handlers
mainButton.down = function (x, y, obj) {
var clickValue = getClickValue();
points += clickValue;
totalClicks++;
// Realistic button press animation with shadow and highlight
tween.stop(mainButton);
tween.stop(buttonShadow);
tween.stop(buttonHighlight);
// Press down effect
mainButton.scaleX = 0.92;
mainButton.scaleY = 0.92;
mainButton.y = 1368;
buttonShadow.scaleX = 0.95;
buttonShadow.scaleY = 0.95;
buttonShadow.y = 1370;
buttonHighlight.scaleX = 0.88;
buttonHighlight.scaleY = 0.88;
buttonHighlight.y = 1363;
buttonHighlight.alpha = 0.2;
// Return to normal with bounce effect
tween(mainButton, {
scaleX: 1.0,
scaleY: 1.0,
y: 1366
}, {
duration: 150,
easing: tween.bounceOut
});
tween(buttonShadow, {
scaleX: 1.0,
scaleY: 1.0,
y: 1371
}, {
duration: 150,
easing: tween.bounceOut
});
tween(buttonHighlight, {
scaleX: 1.0,
scaleY: 1.0,
y: 1361,
alpha: 0.4
}, {
duration: 150,
easing: tween.bounceOut
});
updatePointsDisplay();
// Update quest progress immediately for instant detection
for (var i = 0; i < quests.length; i++) {
quests[i].updateProgress();
}
};
// Create quest system
function createQuests() {
if (quests.length > 0) return; // Avoid creating quests multiple times
var questCompleted = storage.questCompleted || [];
var questClaimed = storage.questClaimed || [];
for (var i = 0; i < questData.length; i++) {
var qData = questData[i];
var quest = new Quest(qData.id, qData.description, qData.target, qData.reward, qData.type);
// Load saved quest progress from flattened arrays
if (i < questCompleted.length) {
quest.completed = questCompleted[i];
}
if (i < questClaimed.length) {
quest.claimed = questClaimed[i];
}
quests.push(quest);
// Don't add to game directly - only show in panel
}
}
// Quest panel system variables
var questPanel = null;
var questButton = null;
var questPanelVisible = false;
// Create quest panel button in top right
questButton = game.addChild(LK.getAsset('questButton', {
anchorX: 1.0,
anchorY: 0.0,
x: 2048 - 20,
y: 120
}));
var questButtonText = new Text2('Q', {
size: 40,
fill: 0xFFFFFF
});
questButtonText.anchor.set(0.5, 0.5);
questButton.addChild(questButtonText);
questButton.down = function (x, y, obj) {
if (questPanelVisible) {
hideQuestPanel();
} else {
showQuestPanel();
}
};
function showQuestPanel() {
if (questPanel) return;
questPanelVisible = true;
// Create dark overlay
var overlay = game.addChild(LK.getAsset('questComplete', {
anchorX: 0.0,
anchorY: 0.0,
x: 0,
y: 0,
width: 2048,
height: 2732
}));
overlay.tint = 0x000000;
overlay.alpha = 0.7;
// Create quest panel container
questPanel = new Container();
questPanel.x = 1024;
questPanel.y = 1366;
game.addChild(questPanel);
// Panel background
var panelBg = questPanel.attachAsset('questComplete', {
anchorX: 0.5,
anchorY: 0.5,
width: 1800,
height: 2400
});
panelBg.tint = 0x333333;
// Panel title
var panelTitle = new Text2('QUESTS', {
size: 60,
fill: 0xFFFFFF
});
panelTitle.anchor.set(0.5, 0.5);
panelTitle.y = -1100;
questPanel.addChild(panelTitle);
// Close button
var closeBtn = questPanel.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
y: 1000,
width: 400,
height: 80
});
closeBtn.tint = 0xff4444;
var closeBtnText = new Text2('CLOSE', {
size: 36,
fill: 0xFFFFFF
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtnText.y = 1000;
questPanel.addChild(closeBtnText);
closeBtn.down = function (x, y, obj) {
hideQuestPanel();
};
// Add quests to panel
for (var i = 0; i < quests.length; i++) {
var quest = quests[i];
quest.x = 0;
quest.y = -800 + i * 120;
questPanel.addChild(quest);
}
// Store overlay reference
questPanel.overlay = overlay;
// Animation
questPanel.scaleX = 0.1;
questPanel.scaleY = 0.1;
questPanel.alpha = 0;
tween(questPanel, {
scaleX: 1.0,
scaleY: 1.0,
alpha: 1.0
}, {
duration: 300,
easing: tween.bounceOut
});
}
function hideQuestPanel() {
if (!questPanel) return;
questPanelVisible = false;
tween(questPanel, {
scaleX: 0.1,
scaleY: 0.1,
alpha: 0
}, {
duration: 200,
easing: tween.easeIn,
onFinish: function onFinish() {
// Remove overlay
if (questPanel.overlay) {
questPanel.overlay.destroy();
}
// Destroy quest panel
questPanel.destroy();
questPanel = null;
}
});
}
createQuests();
// Initialize display
updatePointsDisplay();
upgradeButton.updateDisplay();
// Auto-save every 60 seconds to reduce performance impact
game.update = function () {
// Auto-save less frequently to improve performance
if (LK.ticks % 3600 === 0) {
saveGame();
}
// Update upgrade button display less frequently
if (LK.ticks % 60 === 0) {
upgradeButton.updateDisplay();
}
// Update quest progress every 30 ticks for better detection
if (LK.ticks % 30 === 0) {
for (var i = 0; i < quests.length; i++) {
quests[i].updateProgress();
}
}
};