User prompt
Biz gold scrap 2 >= de itibaren 1 gold scrap = 1.5 boost versin
User prompt
Save system panele biraz sola kaldır
User prompt
Please fix the bug: 'Uncaught TypeError: scrap.gte is not a function' in or related to this line: 'if (scrap.gte(1000)) {' Line Number: 1244
User prompt
Please fix the bug: 'Uncaught TypeError: scrap.gte is not a function' in or related to this line: 'if (scrap.gte(1000)) {' Line Number: 1240
User prompt
Please fix the bug: 'Uncaught TypeError: cash.gte is not a function' in or related to this line: 'upgradeText.fill = cash.gte(upgradeCost) ? "#00ff00" : "#ff0000";' Line Number: 1168
User prompt
Boost 1× olarak başlat ve artık gold scrap 2 olduğunda bost çarpan eklensin
User prompt
Hard reset buttonu aşağı al ve büyüt ve boost, gold scrap 2 >= ise şarpanı çarpan eklensin
User prompt
Please fix the bug: 'Uncaught TypeError: cash.gte is not a function' in or related to this line: 'upgradeText.fill = cash.gte(upgradeCost) ? "#00ff00" : "#ff0000";' Line Number: 1163
User prompt
Please fix the bug: 'Uncaught TypeError: cash.gte is not a function' in or related to this line: 'upgradeText.fill = cash.gte(upgradeCost) ? "#00ff00" : "#ff0000";' Line Number: 1163
User prompt
Please fix the bug: 'Uncaught TypeError: cash.gte is not a function' in or related to this line: 'upgradeText.fill = cash.gte(upgradeCost) ? "#00ff00" : "#ff0000";' Line Number: 1163
User prompt
Boost çarpmanın artırmak için 2x>= kadar gold scrap gereksin ve hard reset buttonuna aşağı al ve genişlet
User prompt
Settings panele save system açma buton altına tekrar hard reset button ekle
User prompt
Hard reseti Settings panele taşı büyüt ve değerleri 1-e1 olarak görüşmelerini sağla ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Save system paneleine hard reset button ekle ve tüm değerleri 0 olarak başlamasını sağal per click 1 olarak başlarsın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
System panel slotların olduğu arka planı aşağı indir ve slot ve save load delete ve auto save butonalrını ve textlerini ganimet
User prompt
Exporr save ve impot save buttonarı ve scriptini kaldırdı ve slotları ve buttonalrını daha geniş görürsün
User prompt
200 daha yukarı aşağı genişlet
User prompt
Save system panele arak planı pikselini yukarı aşağı genişlet
User prompt
Save system panli daha da genişlet ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Hard reset botton kadır ve scraplerinide
User prompt
Gold scrap hard resetten sonra 0 olarak başlat
User prompt
Hard reset yapıldığında gold scrap 0.00 boost 1.00x scrap 0.00 cash 0.00 per click 1.00 xp 0.00 total click 0.00 magnet 0.00 olarak başalayı zorunlu kılar
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BigNumber = Container.expand(function (mantissa, exponent) {
var self = Container.call(this);
// Initialize mantissa and exponent
self.mantissa = mantissa || 1;
self.exponent = exponent || 0;
// Normalize the number (keep mantissa between 1 and 10)
self.normalize = function () {
if (self.mantissa === 0) {
self.exponent = 0;
return self;
}
while (Math.abs(self.mantissa) >= 10) {
self.mantissa /= 10;
self.exponent++;
}
while (Math.abs(self.mantissa) < 1 && self.mantissa !== 0) {
self.mantissa *= 10;
self.exponent--;
}
return self;
};
// Add operation
self.add = function (other) {
if (typeof other === 'number') {
other = new BigNumber(other, 0).normalize();
}
var expDiff = self.exponent - other.exponent;
var newMantissa, newExponent;
if (expDiff >= 15) {
// Other number is too small to matter
return new BigNumber(self.mantissa, self.exponent);
} else if (expDiff <= -15) {
// Self is too small to matter
return new BigNumber(other.mantissa, other.exponent);
} else {
// Both numbers are significant
if (self.exponent >= other.exponent) {
newExponent = self.exponent;
newMantissa = self.mantissa + other.mantissa * Math.pow(10, other.exponent - self.exponent);
} else {
newExponent = other.exponent;
newMantissa = other.mantissa + self.mantissa * Math.pow(10, self.exponent - other.exponent);
}
}
return new BigNumber(newMantissa, newExponent).normalize();
};
// Multiply operation
self.multiply = function (other) {
if (typeof other === 'number') {
other = new BigNumber(other, 0).normalize();
}
var newMantissa = self.mantissa * other.mantissa;
var newExponent = self.exponent + other.exponent;
return new BigNumber(newMantissa, newExponent).normalize();
};
// Subtract operation
self.subtract = function (other) {
if (typeof other === 'number') {
other = new BigNumber(other, 0).normalize();
}
var expDiff = self.exponent - other.exponent;
var newMantissa, newExponent;
if (expDiff >= 15) {
// Other number is too small to matter
return new BigNumber(self.mantissa, self.exponent);
} else if (expDiff <= -15) {
// Result would be negative of other
return new BigNumber(-other.mantissa, other.exponent);
} else {
if (self.exponent >= other.exponent) {
newExponent = self.exponent;
newMantissa = self.mantissa - other.mantissa * Math.pow(10, other.exponent - self.exponent);
} else {
newExponent = other.exponent;
newMantissa = self.mantissa * Math.pow(10, self.exponent - other.exponent) - other.mantissa;
}
}
return new BigNumber(newMantissa, newExponent).normalize();
};
// Compare if greater than or equal
self.gte = function (other) {
if (typeof other === 'number') {
other = new BigNumber(other, 0).normalize();
}
if (self.exponent > other.exponent) return true;
if (self.exponent < other.exponent) return false;
return self.mantissa >= other.mantissa;
};
// Compare if greater than
self.gt = function (other) {
if (typeof other === 'number') {
other = new BigNumber(other, 0).normalize();
}
if (self.exponent > other.exponent) return true;
if (self.exponent < other.exponent) return false;
return self.mantissa > other.mantissa;
};
// Convert to display string
self.toString = function () {
if (self.exponent < 3 && self.exponent >= 0) {
// Show as regular number for small values
var regularNum = self.mantissa * Math.pow(10, self.exponent);
// Ensure regularNum is a valid finite number before calling toFixed
if (typeof regularNum === 'number' && !isNaN(regularNum) && regularNum !== Infinity && regularNum !== -Infinity && regularNum > -Infinity) {
try {
return regularNum.toFixed(2);
} catch (e) {
// Fallback to scientific notation if toFixed fails
return self.mantissa.toFixed(2) + 'e' + self.exponent;
}
} else {
// Fallback to scientific notation if regularNum is invalid
return self.mantissa.toFixed(2) + 'e' + self.exponent;
}
} else if (self.exponent >= 3) {
// Use letter notation for large numbers
return formatBigNumber(self.mantissa, self.exponent);
} else {
// Scientific notation for very small numbers
return self.mantissa.toFixed(2) + 'e' + self.exponent;
}
};
// Convert to regular number (with precision loss for very large numbers)
self.toNumber = function () {
if (self.exponent > 308) return Infinity; // JavaScript limit
if (self.exponent < -308) return 0;
return self.mantissa * Math.pow(10, self.exponent);
};
self.normalize();
return self;
});
// Helper function for formatting big numbers with letter notation
var ClickButton = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('clickButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
// Check if upgrade panel is open - if so, disable interaction
if (upgradePanel && upgradePanel.visible) {
return;
}
// Check if settings panel is open - if so, disable interaction
if (settingsPanel && settingsPanel.visible) {
return;
}
// Check if save panel is open - if so, disable interaction
if (savePanel && savePanel.visible) {
return;
}
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
// Visual feedback
tween(graphics, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
tween(graphics, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100,
onFinish: function onFinish() {
tween(graphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
}
});
// Generate scrap
scrap = scrap.add(perClickValue);
totalClicks = totalClicks.add(1);
// Chance for rewards (15% for magnet, 25% for XP)
if (Math.random() < 0.15) {
createMagnetReward();
}
if (Math.random() < 0.25) {
createXPReward();
}
updateUI();
LK.getSound('click').play();
};
return self;
});
var ConfirmationDialog = Container.expand(function (message, onYes, onNo) {
var self = Container.call(this);
// Dialog background
var dialogBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 3.0,
scaleY: 3.0
});
dialogBg.tint = 0x222222;
self.addChild(dialogBg);
// Message text
var messageText = new Text2(message, {
size: 60,
fill: 0xFFFFFF
});
messageText.anchor.set(0.5, 0.5);
messageText.x = 600;
messageText.y = 150;
self.addChild(messageText);
// Yes button
var yesButton = new Text2('YES', {
size: 70,
fill: 0x00FF00
});
yesButton.anchor.set(0.5, 0.5);
yesButton.x = 400;
yesButton.y = 250;
self.addChild(yesButton);
// No button
var noButton = new Text2('NO', {
size: 70,
fill: 0xFF0000
});
noButton.anchor.set(0.5, 0.5);
noButton.x = 800;
noButton.y = 250;
self.addChild(noButton);
yesButton.down = function (x, y, obj) {
if (onYes) onYes();
self.destroy();
};
noButton.down = function (x, y, obj) {
if (onNo) onNo();
self.destroy();
};
return self;
});
var FloatingReward = Container.expand(function (type) {
var self = Container.call(this);
var assetName = type === 'magnet' ? 'magnetReward' : 'xpReward';
var graphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
// Add text to show reward type and value
var rewardText = new Text2('', {
size: 40,
fill: 0xFFFFFF
});
rewardText.anchor.set(0.5, 0.5);
rewardText.y = 60; // Position below the icon
self.addChild(rewardText);
if (type === 'magnet') {
rewardText.setText('MAGNET\n+' + formatNumber(perClickValue * 10));
} else {
rewardText.setText('XP\n+5');
}
self.rewardType = type;
self.lifetime = 0;
self.update = function () {
self.lifetime++;
self.y -= 2; // Float upward
var alphaValue = Math.max(0, 1 - self.lifetime / 120); // Fade out over 2 seconds
self.alpha = alphaValue;
rewardText.alpha = alphaValue; // Make text fade with the reward
// Update text to match current perClickValue for magnet rewards
if (self.rewardType === 'magnet') {
rewardText.setText('MAGNET\n+' + formatNumber(perClickValue * 10));
}
if (self.lifetime > 120) {
self.destroy();
var index = floatingRewards.indexOf(self);
if (index > -1) {
floatingRewards.splice(index, 1);
}
}
};
self.down = function (x, y, obj) {
if (self.rewardType === 'magnet') {
scrap = scrap.add(perClickValue.multiply(10)); // Magnet gives 10x click value
magnet = magnet.add(1); // Increase magnet count by 1
// Create floating text showing magnet reward
createFloatingText('+1 magnet', self.x, self.y, 0xFFD700);
} else {
xp = xp.add(1);
checkLevelUp();
// Create floating text showing XP reward
createFloatingText('+1 xp', self.x, self.y, 0x9C27B0);
}
LK.getSound('reward').play();
updateUI();
self.destroy();
var index = floatingRewards.indexOf(self);
if (index > -1) {
floatingRewards.splice(index, 1);
}
};
return self;
});
var FloatingText = Container.expand(function (text, x, y, color) {
var self = Container.call(this);
self.x = x;
self.y = y;
var textObj = new Text2(text, {
size: 80,
fill: color
});
textObj.anchor.set(0.5, 0.5);
self.addChild(textObj);
self.lifetime = 0;
self.update = function () {
self.lifetime++;
self.y -= 3; // Float upward
self.alpha = Math.max(0, 1 - self.lifetime / 120); // Fade out over 2 seconds
if (self.lifetime >= 120) {
self.destroy();
var index = floatingTexts.indexOf(self);
if (index > -1) {
floatingTexts.splice(index, 1);
}
}
};
return self;
});
var MultiplierUpgradeButton = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
graphics.tint = 0x9c27b0; // Purple tint to differentiate from regular upgrade
self.down = function (x, y, obj) {
// Check if settings panel is open - if so, disable interaction
if (settingsPanel && settingsPanel.visible) {
return;
}
// Check if save panel is open - if so, disable interaction
if (savePanel && savePanel.visible) {
return;
}
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
var upgradeCost = getMultiplierUpgradeCost();
if (cash.gte(upgradeCost) && multiplierTier < 25) {
cash = cash.subtract(upgradeCost);
multiplierTier++;
perClickValue = getPerClickValue();
// Give XP for upgrading
xp = xp.add(3);
checkLevelUp();
// Visual feedback
tween(graphics, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100
});
tween(graphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
updateUI();
LK.getSound('upgrade').play();
}
};
return self;
});
var SavePanel = Container.expand(function () {
var self = Container.call(this);
// Panel background - moved down and sized to fit 4 slots properly
var panelBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 5.0,
scaleY: 11.67
});
panelBg.tint = 0x222222;
panelBg.y = 200; // Move background down
self.addChild(panelBg);
// Title
var titleText = new Text2('SAVE SYSTEM', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.x = 1000;
titleText.y = 250;
self.addChild(titleText);
// Create 4 save slots vertically stacked with wider positioning
for (var i = 0; i < 4; i++) {
createSaveSlot(self, i, 100, 350 + i * 200);
}
// Auto-save toggle button
var autoSaveToggle = new Text2('AUTO-SAVE: ON', {
size: 45,
fill: 0x00FF00
});
autoSaveToggle.anchor.set(0.5, 0.5);
autoSaveToggle.x = 1000;
autoSaveToggle.y = 1150;
self.addChild(autoSaveToggle);
autoSaveToggle.down = function (x, y, obj) {
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
toggleAutoSave();
};
return self;
});
var SellButton = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('sellButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
// Check if upgrade panel is open - if so, disable interaction
if (upgradePanel && upgradePanel.visible) {
return;
}
// Check if settings panel is open - if so, disable interaction
if (settingsPanel && settingsPanel.visible) {
return;
}
// Check if save panel is open - if so, disable interaction
if (savePanel && savePanel.visible) {
return;
}
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
if (scrap.gte(2)) {
var sellAmount = scrap;
var cashEarned = sellAmount.multiply(0.5);
cash = cash.add(cashEarned);
scrap = new BigNumber(Math.random(), 0); // Leave 0-1 scrap remaining
// Visual feedback
tween(graphics, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 150
});
tween(graphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 150
});
updateUI();
LK.getSound('sell').play();
}
};
return self;
});
var UpgradeButton = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
// Check if settings panel is open - if so, disable interaction
if (settingsPanel && settingsPanel.visible) {
return;
}
// Check if save panel is open - if so, disable interaction
if (savePanel && savePanel.visible) {
return;
}
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
var upgradeCost = getUpgradeCost();
if (cash.gte(upgradeCost) && upgradeTier < 1600) {
cash = cash.subtract(upgradeCost);
upgradeTier++;
perClickValue = getPerClickValue();
// Give XP for upgrading
xp = xp.add(5);
checkLevelUp();
// Visual feedback
tween(graphics, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100
});
tween(graphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
updateUI();
LK.getSound('upgrade').play();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Helper function for formatting big numbers with letter notation
// Game variables - load from storage with defaults, using BigNumber system
function formatBigNumber(mantissa, exponent) {
if (exponent < 1000) {
return mantissa.toFixed(2).replace(/\.?0+$/, '') + 'e' + exponent;
}
// Use letter notation for very large exponents
var letterIndex = Math.floor((exponent - 3) / 3);
var adjustedMantissa = mantissa * Math.pow(10, (exponent - 3) % 3);
var letter;
if (letterIndex < 26) {
letter = String.fromCharCode(97 + letterIndex); // a-z
} else if (letterIndex < 52) {
letter = String.fromCharCode(65 + letterIndex - 26); // A-Z
} else if (letterIndex < 78) {
var doubleLetterIndex = letterIndex - 52;
var firstLetter = String.fromCharCode(97 + doubleLetterIndex);
letter = '(' + firstLetter + firstLetter + ')';
} else {
return mantissa.toFixed(2) + 'e' + exponent;
}
return adjustedMantissa.toFixed(2).replace(/\.?0+$/, '') + letter;
}
var scrap = new BigNumber(storage.scrap ? parseFloat(storage.scrap) : 0, storage.scrapExp || 0);
var cash = new BigNumber(storage.cash ? parseFloat(storage.cash) : 0, storage.cashExp || 0);
var totalClicks = new BigNumber(storage.totalClicks ? parseFloat(storage.totalClicks) : 0, storage.totalClicksExp || 0);
var upgradeTier = storage.upgradeTier || 0;
var svLevel = storage.svLevel || 0;
var xp = new BigNumber(storage.xp ? parseFloat(storage.xp) : 0, storage.xpExp || 0);
var magnet = new BigNumber(storage.magnet ? parseFloat(storage.magnet) : 0, storage.magnetExp || 0);
var multiplierTier = storage.multiplierTier || 0;
var goldScrap = new BigNumber(storage.goldScrap ? parseFloat(storage.goldScrap) : 0, storage.goldScrapExp || 0);
var perClickValue = getPerClickValue();
var floatingRewards = [];
var floatingTexts = [];
// Game elements
var clickButton = game.addChild(new ClickButton());
clickButton.x = 1024;
clickButton.y = 1200;
// Upgrade panel
var upgradePanel = new Container();
upgradePanel.x = 1024 - 700; // Center horizontally
upgradePanel.y = 1366 - 300; // Center vertically
upgradePanel.visible = false;
game.addChild(upgradePanel);
// Upgrade panel background
var upgradePanelBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 3.5,
scaleY: 8.0
});
upgradePanelBg.tint = 0x333333;
upgradePanel.addChild(upgradePanelBg);
// Close button for upgrade panel
var upgradeCloseButton = new Text2('✕', {
size: 100,
fill: 0xFF0000
});
upgradeCloseButton.anchor.set(0.5, 0.5);
upgradeCloseButton.x = 1300;
upgradeCloseButton.y = 80;
upgradePanel.addChild(upgradeCloseButton);
upgradeCloseButton.down = function (x, y, obj) {
upgradePanel.visible = false;
// Show sell button and upgrade panel button when upgrade panel closes
sellButton.visible = true;
upgradePanelButton.visible = true;
};
var upgradeButton = upgradePanel.addChild(new UpgradeButton());
upgradeButton.x = 700;
upgradeButton.y = 250;
var multiplierUpgradeButton = upgradePanel.addChild(new MultiplierUpgradeButton());
multiplierUpgradeButton.x = 700;
multiplierUpgradeButton.y = 420;
// Gold Scrap Panel Button (moved to main game, below upgrade panel button)
var goldScrapPanelButton = new Text2('GOLD SCRAP', {
size: 50,
fill: 0xFFD700
});
goldScrapPanelButton.anchor.set(0.5, 0.5);
goldScrapPanelButton.x = 1024;
goldScrapPanelButton.y = 1930;
game.addChild(goldScrapPanelButton);
goldScrapPanelButton.down = function (x, y, obj) {
// Check if settings panel is open - if so, disable interaction
if (settingsPanel && settingsPanel.visible) {
return;
}
// Check if save panel is open - if so, disable interaction
if (savePanel && savePanel.visible) {
return;
}
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
if (goldScrapPanel) {
goldScrapPanel.visible = !goldScrapPanel.visible;
}
};
// Gold Scrap panel
var goldScrapPanel = new Container();
goldScrapPanel.x = 1024 - 700; // Center horizontally
goldScrapPanel.y = 1366 - 300; // Center vertically
goldScrapPanel.visible = false;
game.addChild(goldScrapPanel);
// Gold Scrap panel background
var goldScrapPanelBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 3.5,
scaleY: 6.0
});
goldScrapPanelBg.tint = 0x444400;
goldScrapPanel.addChild(goldScrapPanelBg);
// Close button for gold scrap panel
var goldScrapCloseButton = new Text2('✕', {
size: 100,
fill: 0xFF0000
});
goldScrapCloseButton.anchor.set(0.5, 0.5);
goldScrapCloseButton.x = 1300;
goldScrapCloseButton.y = 80;
goldScrapPanel.addChild(goldScrapCloseButton);
goldScrapCloseButton.down = function (x, y, obj) {
goldScrapPanel.visible = false;
};
// Gold Scrap conversion button
var goldScrapConvertButton = new Text2('CONVERT SCRAP\n(1000 Scrap = 1 Gold)', {
size: 45,
fill: 0xFFD700
});
goldScrapConvertButton.anchor.set(0.5, 0.5);
goldScrapConvertButton.x = 700;
goldScrapConvertButton.y = 250;
goldScrapPanel.addChild(goldScrapConvertButton);
goldScrapConvertButton.down = function (x, y, obj) {
if (scrap.gte(1000)) {
// Use BigNumber division to handle very large numbers
var thousandBN = new BigNumber(1000, 0);
var goldScrapToAddBN = new BigNumber(Math.floor(scrap.mantissa), scrap.exponent - 3); // Divide by 1000 = subtract 3 from exponent
goldScrap = goldScrap.add(goldScrapToAddBN);
// Reset all values to 0 except magnet and gold scrap
scrap = new BigNumber(0, 0);
cash = new BigNumber(0, 0);
totalClicks = new BigNumber(0, 0);
upgradeTier = 0;
svLevel = 0;
xp = new BigNumber(0, 0);
multiplierTier = 0;
perClickValue = getPerClickValue();
updateUI();
LK.effects.flashScreen(0xFFD700, 1000);
}
};
// Gold Scrap display text in panel
var goldScrapPanelText = new Text2('Gold Scrap: 0', {
size: 65,
fill: 0xFFD700
});
goldScrapPanelText.anchor.set(0.5, 0.5);
goldScrapPanelText.x = 700;
goldScrapPanelText.y = 160;
goldScrapPanel.addChild(goldScrapPanelText);
// Potential Gold Scrap conversion display
var potentialGoldScrapText = new Text2('Potential: 0', {
size: 55,
fill: 0xFFD700
});
potentialGoldScrapText.anchor.set(0.5, 0.5);
potentialGoldScrapText.x = 700;
potentialGoldScrapText.y = 350;
goldScrapPanel.addChild(potentialGoldScrapText);
// Boost text
var boostText = new Text2('Boost: 1x', {
size: 60,
fill: 0xFFD700
});
boostText.anchor.set(0.5, 0.5);
boostText.x = 700;
boostText.y = 400;
goldScrapPanel.addChild(boostText);
var sellButton = game.addChild(new SellButton());
sellButton.x = 1024;
sellButton.y = 1650;
// UI Text elements
var goldScrapText = new Text2('Gold Scrap: 0', {
size: 80,
fill: 0xFFD700
});
goldScrapText.anchor.set(0.5, 0);
goldScrapText.x = 1024;
goldScrapText.y = 320;
game.addChild(goldScrapText);
var scrapText = new Text2('Scrap: 0', {
size: 80,
fill: 0xFFFFFF
});
scrapText.anchor.set(0.5, 0);
scrapText.x = 1024;
scrapText.y = 400;
game.addChild(scrapText);
var cashText = new Text2('Cash: $0', {
size: 70,
fill: 0x00FF00
});
cashText.anchor.set(0.5, 0);
cashText.x = 1024;
cashText.y = 480;
game.addChild(cashText);
var levelText = new Text2('SV Level: 0', {
size: 75,
fill: 0xFFFF00
});
levelText.anchor.set(0.5, 0);
levelText.x = 1024;
levelText.y = 560;
game.addChild(levelText);
var xpText = new Text2('XP: 0/100', {
size: 65,
fill: 0xFF00FF
});
xpText.anchor.set(0.5, 0);
xpText.x = 1024;
xpText.y = 640;
game.addChild(xpText);
var clickValueText = new Text2('Per Click: 1', {
size: 70,
fill: 0x00FFFF
});
clickValueText.anchor.set(0.5, 0);
clickValueText.x = 1024;
clickValueText.y = 720;
game.addChild(clickValueText);
var upgradeText = new Text2('Upgrade (Tier 0): $10', {
size: 60,
fill: 0xFFFFFF
});
upgradeText.anchor.set(0.5, 0.5);
upgradeText.x = 700;
upgradeText.y = 250;
upgradePanel.addChild(upgradeText);
var multiplierUpgradeText = new Text2('Multiplier (Tier 0): $50', {
size: 55,
fill: 0xFFFFFF
});
multiplierUpgradeText.anchor.set(0.5, 0.5);
multiplierUpgradeText.x = 700;
multiplierUpgradeText.y = 420;
upgradePanel.addChild(multiplierUpgradeText);
var sellText = new Text2('Sell Scrap', {
size: 55,
fill: 0xFFFFFF
});
sellText.anchor.set(0.5, 0.5);
sellText.x = 1024;
sellText.y = 1650;
game.addChild(sellText);
// Upgrade panel button
var upgradePanelButton = new Text2('UPGRADES', {
size: 50,
fill: 0x4CAF50
});
upgradePanelButton.anchor.set(0.5, 0.5);
upgradePanelButton.x = 1024;
upgradePanelButton.y = 1800;
game.addChild(upgradePanelButton);
upgradePanelButton.down = function (x, y, obj) {
// Check if settings panel is open - if so, disable interaction
if (settingsPanel && settingsPanel.visible) {
return;
}
// Check if save panel is open - if so, disable interaction
if (savePanel && savePanel.visible) {
return;
}
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
upgradePanel.visible = !upgradePanel.visible;
// Hide/show sell button and upgrade panel button when upgrade panel opens/closes
sellButton.visible = !upgradePanel.visible;
upgradePanelButton.visible = !upgradePanel.visible;
};
var totalClicksText = new Text2('Total Clicks: 0', {
size: 60,
fill: 0xCCCCCC
});
totalClicksText.anchor.set(0.5, 0);
totalClicksText.x = 1024;
totalClicksText.y = 800;
game.addChild(totalClicksText);
var magnetText = new Text2('Magnet: 0', {
size: 60,
fill: 0xFFD700
});
magnetText.anchor.set(0.5, 0);
magnetText.x = 1024;
magnetText.y = 880;
game.addChild(magnetText);
var versionText = new Text2('Pre_Alpha 8', {
size: 80,
fill: 0x888888
});
versionText.anchor.set(1, 1);
versionText.x = 2048 - 20;
versionText.y = 2732 - 20;
game.addChild(versionText);
// Save panel
var savePanel = new SavePanel();
savePanel.x = 1024 - 800; // Center horizontally
savePanel.y = 1366 - 500; // Move panel down by 200 pixels
savePanel.visible = false;
game.addChild(savePanel);
// Close button for save panel
var saveCloseButton = new Text2('✕', {
size: 100,
fill: 0xFF0000
});
saveCloseButton.anchor.set(0.5, 0.5);
saveCloseButton.x = 1800;
saveCloseButton.y = 300;
savePanel.addChild(saveCloseButton);
saveCloseButton.down = function (x, y, obj) {
savePanel.visible = false;
};
// Settings panel
var settingsPanel = new Container();
settingsPanel.x = 1024 - 700; // Center horizontally (half of scaled width)
settingsPanel.y = 1366 - 240; // Center vertically (half of scaled height)
settingsPanel.visible = false;
game.addChild(settingsPanel);
// Settings panel background
var settingsBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 3.5,
scaleY: 5.0
});
settingsBg.tint = 0x444444;
settingsPanel.addChild(settingsBg);
// Settings button
var settingsButton = new Text2('⚙️', {
size: 100,
fill: 0xFFFFFF
});
settingsButton.anchor.set(0, 1);
settingsButton.x = 80;
settingsButton.y = 2732 - 120;
game.addChild(settingsButton);
settingsButton.down = function (x, y, obj) {
// Check if upgrade panel is open - if so, disable interaction
if (upgradePanel && upgradePanel.visible) {
return;
}
// Check if save panel is open - if so, disable interaction
if (savePanel && savePanel.visible) {
return;
}
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
settingsPanel.visible = !settingsPanel.visible;
};
// Save panel button inside settings panel
var savePanelButton = new Text2('SAVE SYSTEM', {
size: 60,
fill: 0x00FFFF
});
savePanelButton.anchor.set(0.5, 0.5);
savePanelButton.x = 700;
savePanelButton.y = 160;
settingsPanel.addChild(savePanelButton);
savePanelButton.down = function (x, y, obj) {
settingsPanel.visible = false; // Close settings panel
savePanel.visible = !savePanel.visible;
};
// Hard reset button
var hardResetButton = new Text2('HARD RESET', {
size: 50,
fill: 0xFF4444
});
hardResetButton.anchor.set(0.5, 0.5);
hardResetButton.x = 700;
hardResetButton.y = 230;
settingsPanel.addChild(hardResetButton);
hardResetButton.down = function (x, y, obj) {
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
// Create confirmation dialog
var confirmDialog = new ConfirmationDialog('Reset all progress?', function () {
// Yes - reset everything
scrap = new BigNumber(0, 0);
cash = new BigNumber(0, 0);
totalClicks = new BigNumber(0, 0);
upgradeTier = 0;
svLevel = 0;
xp = new BigNumber(0, 0);
magnet = new BigNumber(0, 0);
multiplierTier = 0;
goldScrap = new BigNumber(0, 0);
perClickValue = getPerClickValue();
updateUI();
settingsPanel.visible = false;
LK.effects.flashScreen(0xFF0000, 1000);
}, function () {
// No - do nothing
});
// Position dialog in center of screen
confirmDialog.x = 1024 - 600;
confirmDialog.y = 1366 - 180;
game.addChild(confirmDialog);
};
// Helper functions
function formatNumber(num) {
// Type checking to prevent toFixed errors
if (typeof num !== 'number' || isNaN(num) || num === null || num === undefined) {
return '0.00';
}
if (num < 1000) {
return num.toFixed(2);
}
if (num < 1000000) {
return (num / 1000).toFixed(2).replace(/\.?0+$/, '') + '(K)';
}
if (num < 1000000000) {
return (num / 1000000).toFixed(2).replace(/\.?0+$/, '') + '(M)';
}
if (num < 1000000000000) {
return (num / 1000000000).toFixed(2).replace(/\.?0+$/, '') + '(B)';
}
if (num < 1000000000000000) {
return (num / 1000000000000).toFixed(2).replace(/\.?0+$/, '') + '(T)';
}
// For numbers >= 1e15, use letters a-z then A-Z then AA-ZZ format
var exponent = Math.floor(Math.log10(num));
var letterIndex = Math.floor((exponent - 15) / 3);
var mantissa = num / Math.pow(10, 15 + letterIndex * 3);
var letter;
if (letterIndex < 26) {
letter = String.fromCharCode(97 + letterIndex); // a-z
} else if (letterIndex < 52) {
letter = String.fromCharCode(65 + letterIndex - 26); // A-Z
} else if (letterIndex < 78) {
// (aa)-(zz) format (52-77 range)
var doubleLetterIndex = letterIndex - 52;
var firstLetter = String.fromCharCode(97 + doubleLetterIndex); // a-z
letter = '(' + firstLetter + firstLetter + ')'; // (aa), (bb), (cc), etc.
} else {
// Scientific notation for very large numbers
return (num / Math.pow(10, Math.floor(Math.log10(num)))).toFixed(2) + ' E' + Math.floor(Math.log10(num));
}
return mantissa.toFixed(2).replace(/\.?0+$/, '') + letter;
}
function getPerClickValue() {
// Calculate base value from upgrade tiers with progressive scaling
var baseValue = new BigNumber(1, 0);
for (var i = 1; i <= upgradeTier; i++) {
var multiplier;
if (i % 100 === 0) {
multiplier = 1.8; // Every 100th tier - higher scaling due to high cost
} else if (i % 25 === 0) {
multiplier = 1.6; // Every 25th tier - increased scaling
} else if (i % 10 === 0) {
multiplier = 1.4; // Every 10th tier - moderate scaling
} else {
multiplier = 1.2; // All other tiers - reduced base scaling
}
baseValue = baseValue.multiply(multiplier);
}
// Apply multiplier tier bonus with balanced progression
var clickMultiplier = 1;
for (var j = 1; j <= multiplierTier; j++) {
if (j === 1) {
clickMultiplier += 0.8; // First tier: x1.8 total (reduced from 2.5x)
} else if (j === 2) {
clickMultiplier += 0.7; // Second tier: x2.5 total (reduced from 3.7x)
} else if (j === 3) {
clickMultiplier += 0.6; // Third tier: x3.1 total (reduced from 4.5x)
} else if (j === 4) {
clickMultiplier += 1.2; // Fourth tier: x4.3 total (reduced from 6.5x)
} else if (j === 5) {
clickMultiplier += 0.4; // Fifth tier: x4.7 total (reduced from 7.0x)
} else if (j % 5 === 0) {
clickMultiplier += 1.8; // Every 5th tier: large boost (reduced from 3.0)
} else if (j % 3 === 0) {
clickMultiplier += 1.2; // Every 3rd tier: medium boost (reduced from 1.8)
} else if (j % 2 === 0) {
clickMultiplier += 0.9; // Every 2nd tier: small-medium boost (reduced from 1.3)
} else {
clickMultiplier += 0.5; // Other tiers: small boost (reduced from 0.7)
}
}
// Balance the multiplier effect to maintain reasonable progression
baseValue = baseValue.multiply(clickMultiplier);
// Apply gold scrap boost (1 gold scrap = 3x boost)
// Ensure goldScrap is a BigNumber object
if (!(goldScrap instanceof BigNumber)) {
goldScrap = new BigNumber(goldScrap || 0, 0);
}
var goldScrapBoost = goldScrap.multiply(3).add(1);
baseValue = baseValue.multiply(goldScrapBoost);
return baseValue;
}
;
function getMultiplierUpgradeCost() {
var baseCost = new BigNumber(75, 0); // Higher base cost to match reduced multiplier benefits
for (var i = 1; i <= multiplierTier; i++) {
var costMultiplier;
if (i % 10 === 0) {
costMultiplier = 2.5; // Every 10th tier - significant cost increase
} else if (i % 5 === 0) {
costMultiplier = 2.2; // Every 5th tier - high cost increase
} else {
costMultiplier = 2.0; // Standard tiers - balanced scaling
}
baseCost = baseCost.multiply(costMultiplier);
}
return baseCost;
}
function getUpgradeCost() {
var baseCost = new BigNumber(25, 0);
for (var i = 1; i <= upgradeTier; i++) {
var multiplier;
if (i % 100 === 0) {
multiplier = 1.8 * 1.1; // Every 100th tier - per-click scaling + 1.1x
} else if (i % 25 === 0) {
multiplier = 1.6 * 1.1; // Every 25th tier - per-click scaling + 1.1x
} else if (i % 10 === 0) {
multiplier = 1.4 * 1.1; // Every 10th tier - per-click scaling + 1.1x
} else {
multiplier = 1.2 * 1.1; // All other tiers - per-click scaling + 1.1x
}
baseCost = baseCost.multiply(multiplier);
}
return baseCost;
}
function getXPRequired() {
return 100 + svLevel * 50;
}
function checkLevelUp() {
var xpRequired = getXPRequired();
if (xp >= xpRequired) {
xp -= xpRequired;
svLevel++;
// Flash effect for level up
LK.effects.flashScreen(0xffff00, 500);
}
}
function createMagnetReward() {
var reward = game.addChild(new FloatingReward('magnet'));
reward.x = 1024 + (Math.random() - 0.5) * 600;
reward.y = 1400;
floatingRewards.push(reward);
}
function createXPReward() {
var reward = game.addChild(new FloatingReward('xp'));
reward.x = 1024 + (Math.random() - 0.5) * 600;
reward.y = 1400;
floatingRewards.push(reward);
}
function createFloatingText(text, x, y, color) {
var floatingText = game.addChild(new FloatingText(text, x, y, color));
floatingTexts.push(floatingText);
}
function updateUI() {
// Update gold scrap display
goldScrapText.setText('Gold Scrap: ' + goldScrap.toString());
// Show decimal values for scrap instead of rounded integers
scrapText.setText('Scrap: ' + scrap.toString());
cashText.setText('Cash: $' + cash.toString());
levelText.setText('SV Level: ' + formatNumber(svLevel));
xpText.setText('XP: ' + xp.toString() + '/' + formatNumber(getXPRequired()));
// Show decimal values for per-click instead of rounded integers
clickValueText.setText('Per Click: ' + perClickValue.toString());
totalClicksText.setText('Total Clicks: ' + totalClicks.toString());
magnetText.setText('Magnet: ' + magnet.toString());
if (upgradeTier < 1600) {
var upgradeCost = getUpgradeCost();
var upgradeCostText = upgradeCost.toString();
upgradeText.setText('Upgrade (Tier ' + upgradeTier + '): $' + upgradeCostText);
upgradeText.fill = cash.gte(upgradeCost) ? "#00ff00" : "#ff0000";
} else {
upgradeText.setText('MAX TIER REACHED');
upgradeText.fill = "#ffff00";
}
// Update multiplier upgrade text
if (multiplierTier < 25) {
var multiplierCost = getMultiplierUpgradeCost();
var multiplierCostText = multiplierCost.toString();
// Calculate current multiplier using same logic as getPerClickValue
var currentMultiplier = 1;
for (var k = 1; k <= multiplierTier; k++) {
if (k === 1) {
currentMultiplier += 1.5;
} else if (k === 2) {
currentMultiplier += 1.2;
} else if (k === 3) {
currentMultiplier += 0.8;
} else if (k === 4) {
currentMultiplier += 2.0;
} else if (k === 5) {
currentMultiplier += 0.5;
} else if (k % 5 === 0) {
currentMultiplier += 3.0;
} else if (k % 3 === 0) {
currentMultiplier += 1.8;
} else if (k % 2 === 0) {
currentMultiplier += 1.3;
} else {
currentMultiplier += 0.7;
}
}
multiplierUpgradeText.setText('Multiplier x' + currentMultiplier.toFixed(1) + ' (Tier ' + multiplierTier + '): $' + multiplierCostText);
multiplierUpgradeText.fill = cash >= multiplierCost ? "#00ff00" : "#ff0000";
} else {
multiplierUpgradeText.setText('MAX MULTIPLIER REACHED');
multiplierUpgradeText.fill = "#ffff00";
}
// Update gold scrap panel text
goldScrapPanelText.setText('Gold Scrap: ' + goldScrap.toString());
// Update boost text
var currentBoost = goldScrap.multiply(3).add(1);
boostText.setText('Boost: ' + currentBoost.toString() + 'x');
// Update potential gold scrap display
// Use BigNumber division to handle very large numbers
var potentialGoldScrapBN = new BigNumber(Math.floor(scrap.mantissa), scrap.exponent - 3); // Divide by 1000 = subtract 3 from exponent
var potentialGoldScrapNum = potentialGoldScrapBN.toNumber();
if (potentialGoldScrapNum < 1000 && potentialGoldScrapNum !== Infinity) {
potentialGoldScrapText.setText('Potential: ' + potentialGoldScrapNum.toFixed(0));
} else {
potentialGoldScrapText.setText('Potential: ' + potentialGoldScrapBN.toString());
}
// Update gold scrap convert button text
if (scrap.gte(1000)) {
goldScrapConvertButton.fill = 0x00FF00;
} else {
goldScrapConvertButton.fill = 0xFF0000;
}
// Save game state with BigNumber support
// Ensure all BigNumber objects are properly initialized before accessing properties
if (!(scrap instanceof BigNumber)) {
scrap = new BigNumber(scrap || 0, 0);
}
if (!(cash instanceof BigNumber)) {
cash = new BigNumber(cash || 0, 0);
}
if (!(totalClicks instanceof BigNumber)) {
totalClicks = new BigNumber(totalClicks || 0, 0);
}
if (!(xp instanceof BigNumber)) {
xp = new BigNumber(xp || 0, 0);
}
if (!(magnet instanceof BigNumber)) {
magnet = new BigNumber(magnet || 0, 0);
}
if (!(goldScrap instanceof BigNumber)) {
goldScrap = new BigNumber(goldScrap || 0, 0);
}
storage.scrap = scrap.mantissa;
storage.scrapExp = scrap.exponent;
storage.cash = cash.mantissa;
storage.cashExp = cash.exponent;
storage.totalClicks = totalClicks.mantissa;
storage.totalClicksExp = totalClicks.exponent;
storage.upgradeTier = upgradeTier;
storage.svLevel = svLevel;
storage.xp = xp.mantissa;
storage.xpExp = xp.exponent;
storage.magnet = magnet.mantissa;
storage.magnetExp = magnet.exponent;
storage.multiplierTier = multiplierTier;
storage.goldScrap = goldScrap.mantissa;
storage.goldScrapExp = goldScrap.exponent;
}
// Initial UI update
updateUI();
// Auto-save timer
var autoSaveTimer = 0;
// UI update timer
var uiUpdateTimer = 0;
// Auto-save enabled flag
var autoSaveEnabled = storage.autoSaveEnabled !== undefined ? storage.autoSaveEnabled : true;
// Toggle auto-save function
function toggleAutoSave() {
autoSaveEnabled = !autoSaveEnabled;
storage.autoSaveEnabled = autoSaveEnabled;
if (autoSaveEnabled) {
createFloatingText('AUTO-SAVE ON', 1024, 1366, 0x00FF00);
} else {
createFloatingText('AUTO-SAVE OFF', 1024, 1366, 0xFF0000);
}
updateAutoSaveUI();
}
// Update auto-save UI function
function updateAutoSaveUI() {
if (savePanel && savePanel.children) {
// Find the auto-save toggle button and update its text/color
for (var i = 0; i < savePanel.children.length; i++) {
var child = savePanel.children[i];
if (child instanceof Text2 && child.text && child.text.includes('AUTO-SAVE')) {
child.setText(autoSaveEnabled ? 'AUTO-SAVE: ON' : 'AUTO-SAVE: OFF');
child.fill = autoSaveEnabled ? 0x00FF00 : 0xFF0000;
break;
}
}
}
}
game.update = function () {
// Update floating rewards
for (var i = floatingRewards.length - 1; i >= 0; i--) {
var reward = floatingRewards[i];
if (reward.update) {
reward.update();
}
}
// Update floating texts
for (var j = floatingTexts.length - 1; j >= 0; j--) {
var floatingText = floatingTexts[j];
if (floatingText.update) {
floatingText.update();
}
}
// Update UI every second (60 ticks)
uiUpdateTimer++;
if (uiUpdateTimer >= 60) {
uiUpdateTimer = 0;
updateUI();
}
// Auto-save every second (60 ticks) - only if enabled
autoSaveTimer++;
if (autoSaveTimer >= 60) {
autoSaveTimer = 0;
if (autoSaveEnabled) {
// Save current game state with BigNumber support
// Ensure all BigNumber objects are properly initialized before accessing properties
if (!(scrap instanceof BigNumber)) {
scrap = new BigNumber(scrap || 0, 0);
}
if (!(cash instanceof BigNumber)) {
cash = new BigNumber(cash || 0, 0);
}
if (!(totalClicks instanceof BigNumber)) {
totalClicks = new BigNumber(totalClicks || 0, 0);
}
if (!(xp instanceof BigNumber)) {
xp = new BigNumber(xp || 0, 0);
}
if (!(magnet instanceof BigNumber)) {
magnet = new BigNumber(magnet || 0, 0);
}
if (!(goldScrap instanceof BigNumber)) {
goldScrap = new BigNumber(goldScrap || 0, 0);
}
storage.scrap = scrap.mantissa;
storage.scrapExp = scrap.exponent;
storage.cash = cash.mantissa;
storage.cashExp = cash.exponent;
storage.totalClicks = totalClicks.mantissa;
storage.totalClicksExp = totalClicks.exponent;
storage.upgradeTier = upgradeTier;
storage.svLevel = svLevel;
storage.xp = xp.mantissa;
storage.xpExp = xp.exponent;
storage.magnet = magnet.mantissa;
storage.magnetExp = magnet.exponent;
storage.multiplierTier = multiplierTier;
storage.goldScrap = goldScrap.mantissa;
storage.goldScrapExp = goldScrap.exponent;
storage.lastSaveTime = Date.now(); // Track when last saved
}
}
};
function createSaveSlot(parent, slotIndex, x, y) {
var slotContainer = new Container();
slotContainer.x = x;
slotContainer.y = y;
parent.addChild(slotContainer);
// Slot background - made wider
var slotBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 6.0,
scaleY: 1.8
});
slotBg.tint = 0x333333;
slotContainer.addChild(slotBg);
// Slot title - larger text
var slotTitle = new Text2('SLOT ' + (slotIndex + 1), {
size: 65,
fill: 0xFFFFFF
});
slotTitle.anchor.set(0, 0);
slotTitle.x = 30;
slotTitle.y = 20;
slotContainer.addChild(slotTitle);
// Save info text - larger
var saveInfo = new Text2('Empty', {
size: 45,
fill: 0xCCCCCC
});
saveInfo.anchor.set(0, 0);
saveInfo.x = 30;
saveInfo.y = 85;
slotContainer.addChild(saveInfo);
// Save button - larger and repositioned
var saveBtn = new Text2('SAVE', {
size: 55,
fill: 0x00FF00
});
saveBtn.anchor.set(0.5, 0.5);
saveBtn.x = 550;
saveBtn.y = 80;
slotContainer.addChild(saveBtn);
// Load button - larger and repositioned
var loadBtn = new Text2('LOAD', {
size: 55,
fill: 0x0080FF
});
loadBtn.anchor.set(0.5, 0.5);
loadBtn.x = 750;
loadBtn.y = 80;
slotContainer.addChild(loadBtn);
// Delete button - larger and repositioned
var deleteBtn = new Text2('DELETE', {
size: 55,
fill: 0xFF0000
});
deleteBtn.anchor.set(0.5, 0.5);
deleteBtn.x = 1000;
deleteBtn.y = 80;
slotContainer.addChild(deleteBtn);
// Update slot display
function updateSlotDisplay() {
var saveKey = 'save_slot_' + slotIndex;
var saveData = storage[saveKey];
if (saveData && saveData !== null) {
var saveTime = saveData.saveTime ? new Date(saveData.saveTime) : null;
var timeStr = saveTime ? saveTime.getMonth() + 1 + '/' + saveTime.getDate() : 'Unknown';
var versionStr = saveData.gameVersion ? ' v' + saveData.gameVersion.replace('Pre_Alpha ', '') : '';
saveInfo.setText('SV Lvl: ' + formatNumber(saveData.svLevel || 0) + '\nCash: $' + formatNumber(parseFloat(saveData.cash) || 0) + '\nSaved: ' + timeStr + versionStr);
saveInfo.fill = 0xFFFFFF;
loadBtn.fill = 0x0080FF;
} else {
saveInfo.setText('Empty');
saveInfo.fill = 0xCCCCCC;
loadBtn.fill = 0x555555;
}
}
// Save button functionality
saveBtn.down = function (x, y, obj) {
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
var saveKey = 'save_slot_' + slotIndex;
var backupKey = saveKey + '_backup';
// Create backup of existing save before overwriting
var existingSave = storage[saveKey];
if (existingSave && existingSave !== null) {
storage[backupKey] = existingSave;
}
var saveData = {
scrap: scrap.toString(),
cash: cash.toString(),
totalClicks: totalClicks.toString(),
upgradeTier: upgradeTier,
svLevel: svLevel,
xp: xp.toString(),
magnet: magnet.toString(),
multiplierTier: multiplierTier,
goldScrap: goldScrap.toString(),
saveTime: Date.now(),
gameVersion: 'Pre_Alpha 8'
};
storage[saveKey] = saveData;
updateSlotDisplay();
createFloatingText('SAVED TO SLOT ' + (slotIndex + 1), 1024, 1366, 0x00FF00);
LK.effects.flashScreen(0x00FF00, 300);
};
// Load button functionality
loadBtn.down = function (x, y, obj) {
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
var saveKey = 'save_slot_' + slotIndex;
var saveData = storage[saveKey];
if (saveData && saveData !== null) {
scrap = parseFloat(saveData.scrap) || 0;
cash = parseFloat(saveData.cash) || 0;
totalClicks = parseFloat(saveData.totalClicks) || 0;
upgradeTier = saveData.upgradeTier || 0;
svLevel = saveData.svLevel || 0;
xp = parseFloat(saveData.xp) || 0;
magnet = parseFloat(saveData.magnet) || 0;
multiplierTier = saveData.multiplierTier || 0;
goldScrap = saveData.goldScrap || 0;
perClickValue = getPerClickValue();
updateUI();
LK.effects.flashScreen(0x0080FF, 300);
}
};
// Delete button functionality
deleteBtn.down = function (x, y, obj) {
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
var saveKey = 'save_slot_' + slotIndex;
var saveData = storage[saveKey];
// Only show confirmation if there's actually data to delete
if (saveData && saveData !== null) {
// Create confirmation dialog
var confirmDialog = new ConfirmationDialog('Delete save data?', function () {
// Yes - delete the save data
storage[saveKey] = null;
// Force update the display to show Empty
saveInfo.setText('Empty');
saveInfo.fill = 0xCCCCCC;
loadBtn.fill = 0x555555;
updateSlotDisplay();
LK.effects.flashScreen(0xFF0000, 300);
}, function () {
// No - do nothing
});
// Position dialog in center of screen
confirmDialog.x = 1024 - 600;
confirmDialog.y = 1366 - 180;
game.addChild(confirmDialog);
}
};
// Initial display update
updateSlotDisplay();
} ===================================================================
--- original.js
+++ change.js
@@ -415,9 +415,9 @@
fill: 0x00FF00
});
autoSaveToggle.anchor.set(0.5, 0.5);
autoSaveToggle.x = 1000;
- autoSaveToggle.y = 1250;
+ autoSaveToggle.y = 1150;
self.addChild(autoSaveToggle);
autoSaveToggle.down = function (x, y, obj) {
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
@@ -916,46 +916,46 @@
fill: 0x00FFFF
});
savePanelButton.anchor.set(0.5, 0.5);
savePanelButton.x = 700;
-savePanelButton.y = 350;
+savePanelButton.y = 160;
settingsPanel.addChild(savePanelButton);
savePanelButton.down = function (x, y, obj) {
settingsPanel.visible = false; // Close settings panel
savePanel.visible = !savePanel.visible;
};
-// Hard reset button in settings panel
+// Hard reset button
var hardResetButton = new Text2('HARD RESET', {
- size: 80,
- fill: 0xFF0000
+ size: 50,
+ fill: 0xFF4444
});
hardResetButton.anchor.set(0.5, 0.5);
hardResetButton.x = 700;
-hardResetButton.y = 250;
+hardResetButton.y = 230;
settingsPanel.addChild(hardResetButton);
hardResetButton.down = function (x, y, obj) {
// Check if any confirmation dialog is showing
if (game.children.some(function (child) {
return child instanceof ConfirmationDialog;
})) {
return;
}
- // Create confirmation dialog for hard reset
+ // Create confirmation dialog
var confirmDialog = new ConfirmationDialog('Reset all progress?', function () {
- // Yes - reset all values to 1
- scrap = new BigNumber(1, 0);
- cash = new BigNumber(1, 0);
- totalClicks = new BigNumber(1, 0);
- upgradeTier = 1;
- svLevel = 1;
- xp = new BigNumber(1, 0);
- magnet = new BigNumber(1, 0);
- multiplierTier = 1;
- goldScrap = new BigNumber(1, 0);
+ // Yes - reset everything
+ scrap = new BigNumber(0, 0);
+ cash = new BigNumber(0, 0);
+ totalClicks = new BigNumber(0, 0);
+ upgradeTier = 0;
+ svLevel = 0;
+ xp = new BigNumber(0, 0);
+ magnet = new BigNumber(0, 0);
+ multiplierTier = 0;
+ goldScrap = new BigNumber(0, 0);
perClickValue = getPerClickValue();
updateUI();
+ settingsPanel.visible = false;
LK.effects.flashScreen(0xFF0000, 1000);
- createFloatingText('GAME RESET', 1024, 1366, 0xFF0000);
}, function () {
// No - do nothing
});
// Position dialog in center of screen