User prompt
Sürüm textti Pre_Alpha 8 olarak değiştir
User prompt
Boost değeri de 1.00e3 gibi gösterisin scrap gold scrap değerleri gösterildiği gibi gösterilsin
User prompt
Hard reset button basılınca tüm değerleri 0 olarak başlat ama per click ve boost 1 olarak başlar
User prompt
Hard reset yapıldığında gold scrap 1 yerine 0, scrap 1 yerine 0, cash 1 yerine 0, xp 1 yerine 0, per click 7.20 yerine 1, click 1 yerine 0, magnet 1 yerine 0 olarak başlatılsın
User prompt
6.3e176 da itibaren gold scrap atma işlemi yapılmıyor bunu düzelt
User prompt
Gold scrap buttonu gold scrap eklemesi yapmıyor ve boost çapını hard resetten sonra hep 4 olarak başlıyor bunu 1 olarak başlat ve gold scrap da 1 olarak başlıyor onu da 0 olarak başlat
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'storage.xp = xp.mantissa;' Line Number: 1218 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Uncaught TypeError: goldScrap.multiply is not a function' in or related to this line: 'var goldScrapBoost = goldScrap.multiply(3).add(1);' Line Number: 1064
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.scrap = scrap;' Line Number: 1253 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'goldScrap.toFixed is not a function' in or related to this line: 'goldScrapPanelText.setText('Gold Scrap: ' + goldScrap.toFixed(0));' Line Number: 1184
User prompt
Please fix the bug: 'upgradeCost.toFixed is not a function' in or related to this line: 'return regularNum.toFixed(2);' Line Number: 136
User prompt
Please fix the bug: 'upgradeCost.toFixed is not a function' in or related to this line: 'return regularNum.toFixed(2);' Line Number: 135
User prompt
Please fix the bug: 'isFinite is not a function' in or related to this line: 'if (typeof regularNum === 'number' && !isNaN(regularNum) && isFinite(regularNum)) {' Line Number: 134
User prompt
Please fix the bug: 'upgradeCost.toFixed is not a function' in or related to this line: 'return regularNum.toFixed(2);' Line Number: 133
User prompt
. Bilimsel Gösterim (Scientific Notation) Sayıları (mantissa, exponent) şeklinde sakla. Örn: 1.23e+512 → mantissa = 1.23, exponent = 512. Normal double taşmasa bile exponent’i ayrı saklayarak istediğin kadar büyütebilirsin. Oyuncuya yazdırırken “1.23e512” ya da “1.23 Qa” gibi gösterirsin. Ve tüm değerleri buna göre düzenle
User prompt
1.18e300 sınırını kaldır
User prompt
. Bilimsel Gösterim (Scientific Notation) Sayıları (mantissa, exponent) şeklinde sakla. Örn: 1.23e+512 → mantissa = 1.23, exponent = 512. Normal double taşmasa bile exponent’i ayrı saklayarak istediğin kadar büyütebilirsin. Oyuncuya yazdırırken “1.23e512” ya da “1.23 Qa” gibi gösterirsin. Değerle bu şekilde sakla ve tüm kısamaları buna göre düzenle
User prompt
Per click upgrade 25 olsun ama fiyat yükseme çarpanları düşsün
User prompt
Per click bir anadan 1kattilyına çıkıyor bizlerden
User prompt
Per click upgrade fiyatlarını daha da düşür ve per click verilmesini de düzenle
User prompt
Artık gold scrap bin olunca oluşmasın 1 katrilyonda bir tane gold scrap versin ve her per click upgrade tier 25 de +2.5 kattilyon eklensin ama gold scrap aldığında geri 1 kattiluondan başlat
User prompt
Yanlış yaptın ben scrap dan gold scrapa dönüştüğnde olanı yani scrap miktarımıza göre oluşan gold scrap istiyormuş yani örnek 2000 scrap varsa o textte 2 gold scrap yazsın
User prompt
Gold scrap panele oluşan gold scrap göstermek text ekle
User prompt
Kırmızı efek çıkmasın ve yazı daha görünür yap küçük olmasın
User prompt
1e300 e gelince max değerlere uyarınız yasın buttonlara tıklayınca
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
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;
}
// Check if values are too large (1e300 or higher) - disable click functionality
if (scrap >= 1e300 || cash >= 1e300 || perClickValue >= 1e300) {
// Show warning alert for max values
createFloatingText('MAX VALUES REACHED!', self.x, self.y - 100, 0xFF0000);
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 += perClickValue;
totalClicks++;
// 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 += perClickValue * 10; // Magnet gives 10x click value
magnet += 1; // Increase magnet count by 1
// Create floating text showing magnet reward
createFloatingText('+1 magnet', self.x, self.y, 0xFFD700);
} else {
xp += 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;
}
// Check if values are too large (1e300 or higher) - disable upgrade functionality
if (cash >= 1e300 || perClickValue >= 1e300 || scrap >= 1e300) {
// Show warning alert for max values
createFloatingText('MAX VALUES REACHED!', self.x, self.y - 100, 0xFF0000);
return;
}
var upgradeCost = getMultiplierUpgradeCost();
if (cash >= upgradeCost && multiplierTier < 25) {
cash -= upgradeCost;
multiplierTier++;
perClickValue = getPerClickValue();
// Give XP for upgrading
xp += 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 - sized to fit 4 slots properly
var panelBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 4.0,
scaleY: 8.0
});
panelBg.tint = 0x222222;
self.addChild(panelBg);
// Title
var titleText = new Text2('SAVE SYSTEM', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.x = 800;
titleText.y = 50;
self.addChild(titleText);
// Create 4 save slots vertically stacked
for (var i = 0; i < 4; i++) {
createSaveSlot(self, i, 50, 150 + i * 200);
}
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 >= 2) {
var sellAmount = scrap;
var cashEarned = sellAmount * 0.5;
cash += cashEarned;
scrap = Math.random(); // 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;
}
// Check if values are too large (1e300 or higher) - disable upgrade functionality
if (cash >= 1e300 || perClickValue >= 1e300 || scrap >= 1e300) {
// Show warning alert for max values
createFloatingText('MAX VALUES REACHED!', self.x, self.y - 100, 0xFF0000);
return;
}
var upgradeCost = getUpgradeCost();
if (cash >= upgradeCost && upgradeTier < 1600) {
cash -= upgradeCost;
upgradeTier++;
perClickValue = getPerClickValue();
// Give XP for upgrading
xp += 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
****/
// Game variables - load from storage with defaults
var scrap = storage.scrap || 0;
var cash = storage.cash || 0;
var totalClicks = storage.totalClicks || 0;
var upgradeTier = storage.upgradeTier || 0;
var svLevel = storage.svLevel || 0;
var xp = storage.xp || 0;
var magnet = storage.magnet || 0;
var multiplierTier = storage.multiplierTier || 0;
var goldScrap = storage.goldScrap || 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 >= 1000) {
var goldScrapToAdd = Math.floor(scrap / 1000);
goldScrap += goldScrapToAdd;
// Reset all values to 0 except magnet and gold scrap
scrap = 0;
cash = 0;
totalClicks = 0;
upgradeTier = 0;
svLevel = 0;
xp = 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);
// 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 7', {
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 - 400; // Center vertically
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 = 1500;
saveCloseButton.y = 80;
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 inside settings panel
var hardResetButton = new Text2('HARD RESET', {
size: 70,
fill: 0xFF0000
});
hardResetButton.anchor.set(0.5, 0.5);
hardResetButton.x = 700;
hardResetButton.y = 350;
settingsPanel.addChild(hardResetButton);
hardResetButton.down = function (x, y, obj) {
// Create confirmation dialog
var confirmDialog = new ConfirmationDialog('Reset all data?', function () {
// Yes - perform hard reset
scrap = 0;
cash = 0;
totalClicks = 0;
upgradeTier = 0;
svLevel = 0;
xp = 0;
magnet = 0;
multiplierTier = 0;
goldScrap = 0;
perClickValue = getPerClickValue();
// Clear storage
storage.scrap = 0;
storage.cash = 0;
storage.totalClicks = 0;
storage.upgradeTier = 0;
storage.svLevel = 0;
storage.xp = 0;
storage.magnet = 0;
storage.multiplierTier = 0;
storage.goldScrap = 0;
// Update UI
updateUI();
// Flash effect
LK.effects.flashScreen(0xff0000, 1000);
// Hide settings panel after reset
settingsPanel.visible = false;
}, 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 = 1;
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 *= 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 *= clickMultiplier;
// Apply gold scrap boost (1 gold scrap = 3x boost)
var goldScrapBoost = 1 + goldScrap * 3;
baseValue *= goldScrapBoost;
return baseValue;
}
function getMultiplierUpgradeCost() {
var baseCost = 75; // 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 *= costMultiplier;
}
return Math.floor(baseCost);
}
function getUpgradeCost() {
var baseCost = 25;
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 *= multiplier;
}
return Math.floor(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
if (goldScrap < 1000) {
goldScrapText.setText('Gold Scrap: ' + goldScrap.toFixed(0));
} else {
goldScrapText.setText('Gold Scrap: ' + formatNumber(goldScrap));
}
// Show decimal values for scrap instead of rounded integers
if (scrap < 1000) {
scrapText.setText('Scrap: ' + scrap.toFixed(2));
} else {
scrapText.setText('Scrap: ' + formatNumber(scrap));
}
if (cash < 1000) {
cashText.setText('Cash: $' + cash.toFixed(2));
} else {
cashText.setText('Cash: $' + formatNumber(cash));
}
levelText.setText('SV Level: ' + formatNumber(svLevel));
xpText.setText('XP: ' + formatNumber(xp) + '/' + formatNumber(getXPRequired()));
// Show decimal values for per-click instead of rounded integers
if (perClickValue < 1000) {
clickValueText.setText('Per Click: ' + perClickValue.toFixed(2));
} else {
clickValueText.setText('Per Click: ' + formatNumber(perClickValue));
}
totalClicksText.setText('Total Clicks: ' + formatNumber(totalClicks));
if (magnet < 1000) {
magnetText.setText('Magnet: ' + magnet.toFixed(2));
} else {
magnetText.setText('Magnet: ' + formatNumber(magnet));
}
if (upgradeTier < 1600) {
var upgradeCost = getUpgradeCost();
var upgradeCostText = upgradeCost < 1000 ? upgradeCost.toFixed(2) : formatNumber(upgradeCost);
upgradeText.setText('Upgrade (Tier ' + upgradeTier + '): $' + upgradeCostText);
upgradeText.fill = cash >= 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 < 1000 ? multiplierCost.toFixed(2) : formatNumber(multiplierCost);
// 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
if (goldScrap < 1000) {
goldScrapPanelText.setText('Gold Scrap: ' + goldScrap.toFixed(0));
} else {
goldScrapPanelText.setText('Gold Scrap: ' + formatNumber(goldScrap));
}
// Update boost text
var currentBoost = 1 + goldScrap * 3;
if (currentBoost < 1000) {
boostText.setText('Boost: ' + currentBoost.toFixed(0) + 'x');
} else {
boostText.setText('Boost: ' + formatNumber(currentBoost) + 'x');
}
// Update gold scrap convert button text
if (scrap >= 1000) {
goldScrapConvertButton.fill = 0x00FF00;
} else {
goldScrapConvertButton.fill = 0xFF0000;
}
// Save game state
storage.scrap = scrap;
storage.cash = cash;
storage.totalClicks = totalClicks;
storage.upgradeTier = upgradeTier;
storage.svLevel = svLevel;
storage.xp = xp;
storage.magnet = magnet;
storage.multiplierTier = multiplierTier;
storage.goldScrap = goldScrap;
}
// Initial UI update
updateUI();
// Auto-save timer
var autoSaveTimer = 0;
// UI update timer
var uiUpdateTimer = 0;
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)
autoSaveTimer++;
if (autoSaveTimer >= 60) {
autoSaveTimer = 0;
// Save current game state
storage.scrap = scrap;
storage.cash = cash;
storage.totalClicks = totalClicks;
storage.upgradeTier = upgradeTier;
storage.svLevel = svLevel;
storage.xp = xp;
storage.magnet = magnet;
storage.multiplierTier = multiplierTier;
storage.goldScrap = goldScrap;
}
};
function createSaveSlot(parent, slotIndex, x, y) {
var slotContainer = new Container();
slotContainer.x = x;
slotContainer.y = y;
parent.addChild(slotContainer);
// Slot background
var slotBg = LK.getAsset('upgradeButton', {
anchorX: 0,
anchorY: 0,
scaleX: 3.6,
scaleY: 1.8
});
slotBg.tint = 0x333333;
slotContainer.addChild(slotBg);
// Slot title
var slotTitle = new Text2('SLOT ' + (slotIndex + 1), {
size: 50,
fill: 0xFFFFFF
});
slotTitle.anchor.set(0, 0);
slotTitle.x = 20;
slotTitle.y = 20;
slotContainer.addChild(slotTitle);
// Save info text
var saveInfo = new Text2('Empty', {
size: 35,
fill: 0xCCCCCC
});
saveInfo.anchor.set(0, 0);
saveInfo.x = 20;
saveInfo.y = 70;
slotContainer.addChild(saveInfo);
// Save button
var saveBtn = new Text2('SAVE', {
size: 40,
fill: 0x00FF00
});
saveBtn.anchor.set(0.5, 0.5);
saveBtn.x = 350;
saveBtn.y = 60;
slotContainer.addChild(saveBtn);
// Load button
var loadBtn = new Text2('LOAD', {
size: 40,
fill: 0x0080FF
});
loadBtn.anchor.set(0.5, 0.5);
loadBtn.x = 550;
loadBtn.y = 60;
slotContainer.addChild(loadBtn);
// Delete button
var deleteBtn = new Text2('DELETE', {
size: 40,
fill: 0xFF0000
});
deleteBtn.anchor.set(0.5, 0.5);
deleteBtn.x = 800;
deleteBtn.y = 60;
slotContainer.addChild(deleteBtn);
// Update slot display
function updateSlotDisplay() {
var saveKey = 'save_slot_' + slotIndex;
var saveData = storage[saveKey];
if (saveData && saveData !== null) {
saveInfo.setText('SV Lvl: ' + formatNumber(saveData.svLevel || 0) + '\nCash: $' + formatNumber(saveData.cash || 0));
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 saveData = {
scrap: scrap.toString(),
cash: cash.toString(),
totalClicks: totalClicks.toString(),
upgradeTier: upgradeTier,
svLevel: svLevel,
xp: xp.toString(),
magnet: magnet.toString(),
multiplierTier: multiplierTier,
goldScrap: goldScrap
};
storage[saveKey] = saveData;
updateSlotDisplay();
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
@@ -537,8 +537,17 @@
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);
// Boost text
var boostText = new Text2('Boost: 1x', {
size: 60,
fill: 0xFFD700
@@ -1015,8 +1024,14 @@
} else {
multiplierUpgradeText.setText('MAX MULTIPLIER REACHED');
multiplierUpgradeText.fill = "#ffff00";
}
+ // Update gold scrap panel text
+ if (goldScrap < 1000) {
+ goldScrapPanelText.setText('Gold Scrap: ' + goldScrap.toFixed(0));
+ } else {
+ goldScrapPanelText.setText('Gold Scrap: ' + formatNumber(goldScrap));
+ }
// Update boost text
var currentBoost = 1 + goldScrap * 3;
if (currentBoost < 1000) {
boostText.setText('Boost: ' + currentBoost.toFixed(0) + 'x');