User prompt
Sürüm textti Pre_Alpha 7 olarak değiştir
User prompt
Please fix the bug: 'num.toFixed is not a function' in or related to this line: 'return num.toFixed(2);' Line Number: 800
User prompt
Gold scrap buttonu birazdan aşağı al
User prompt
Gold scrap açama panelini upgrade panel açma buttonu altında olsun
User prompt
Scrap text üstüne gold scrap derler textti yazdır ve upgrade panel atına yeni button ekle gold scrap panel açama buttonu ve gold scrap panel içine de kapama buttonu koy exra olarak Birtane daha button koy buda gold scrap almayı sağlayacak gold scrap için 1a scrap gerekli her 1a scrap da 1 gold scrap verilecek ve gold scrap dönüştürme buttonuna basınca tüm değerleri 0 dan başlat magnet ve gold scrap hariç ve gold panele bost isminde bir değer textti ekle bu 1 gold scrap 3x bost vercek bu bost değeri de per click değerine çarpan olarak eklenecek
User prompt
Sürüm textti Pre_Alpha 6 yap
User prompt
Upgrade panel açma buttonuna tıklayınca scrap sell button ve Upgrade açama buttonu gizle ve Upgrade panel lapanıca da görünür kıl
User prompt
1 gold scrap değeri per click değerine +3x verceke yani 2 gold secrap 6x per click çapanı demek
User prompt
Gold scrap buttonu upgrade panel dışına taşı
User prompt
Scrap sell ve upgrade button, upgrade panel altında kalmasın sağla
User prompt
Upgrade panelde scrap sell ve Upgrade panel açma buttonu gizle
User prompt
Upgrade button altına gold scrap panel koy bu mini prestij görevi görcek panelde gold scrap değeri eklenecek ve birde goldkontrolcu olcak bu textte the quantity required to produce: yazak ve gold scrap üretmek gerken miktar dan elimizde olan değeri çıkartıp textte yazdır görevi belli bir değere gelince gold vermek ve per click kadar artacak ve gold scrap üretince geri 0 dan başalsın ve gold scrap 1 tane için 1.00a goldkontrocu olunca 1 gold verisini
User prompt
Magnet ve xp 1 versin
User prompt
Magnet ve xp vermesi 5 olasın 1 olsun ve her verildiğinde +(verilen magnet mitarı) magnet veya +(verilen xp mitarı) xp yadıran text olsun ve 2 sn sonra görünmez yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Per click upgrade fiyatlandırmasını per click artış miktarını ayarlayan çalanların üzerine 1.1 fazlası olcak fiyatlandırma yap
User prompt
Magnet ve xp veme oranını %30 a kadar çıkar ve çıktığında atari bir textte yazılsın
User prompt
Artık xp ve magnet verme oranlarını arttır ve xp ve magnet çıktıda aşağıdaki bir textte çıkan miktarı yazın ama click button hala 1 veriyor xp ve magneti
User prompt
Per click upgrade tier 800 den 1600 e çıkar
User prompt
Tıklama başına ödemeleri tıklama başına artışı +1.1 daha fazlası olacak şekilde düzenle ödemeleri
User prompt
Tıklama başına ödemeleri tıklama başına artış çapanımdan +*1.1 daha fazla
User prompt
Tıklama başına ödemeleri tıklama başına artışı çapanlarından +%1.05 daha fazlası olacak şekilde değiştir
User prompt
Sürüm textti Pre_Alpha 5 olacak şekilde güncelle
User prompt
Per click fiyatlandırması per click artışı ile aynı olsun çarpan oranları
User prompt
Çarpan upgrade per click artışı ile per click yükselmesini fiyata artışını dengelemek için kulanaılacak ona göre düzenle
User prompt
Per click Çapan artışı +1.5 diye tekrarlayalım 1 1.5 2 gibi gitmesin daha çeşitli çalanlar olsun tierlede
/****
* 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;
}
// 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 (5% for magnet, 3% for XP)
if (Math.random() < 0.05) {
createMagnetReward();
}
if (Math.random() < 0.15) {
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 * 5));
} else {
rewardText.setText('XP\n+1');
}
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 * 5));
}
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 * 5; // Magnet gives 5x click value
magnet++; // Increase magnet count
} else {
xp += 1;
checkLevelUp();
}
LK.getSound('reward').play();
updateUI();
self.destroy();
var index = floatingRewards.indexOf(self);
if (index > -1) {
floatingRewards.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 >= 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;
}
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 perClickValue = getPerClickValue();
var floatingRewards = [];
// 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;
};
var upgradeButton = upgradePanel.addChild(new UpgradeButton());
upgradeButton.x = 700;
upgradeButton.y = 250;
var multiplierUpgradeButton = upgradePanel.addChild(new MultiplierUpgradeButton());
multiplierUpgradeButton.x = 700;
multiplierUpgradeButton.y = 420;
var sellButton = game.addChild(new SellButton());
sellButton.x = 1024;
sellButton.y = 1650;
// UI Text elements
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;
};
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 5', {
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;
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;
// 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) {
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
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 {
// 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;
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; // Every 100th tier - matches getPerClickValue scaling
} else if (i % 25 === 0) {
multiplier = 1.6; // Every 25th tier - matches getPerClickValue scaling
} else if (i % 10 === 0) {
multiplier = 1.4; // Every 10th tier - matches getPerClickValue scaling
} else {
multiplier = 1.2; // All other tiers - matches getPerClickValue scaling
}
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 updateUI() {
// 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";
}
// 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;
}
// 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 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;
}
};
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
};
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;
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
@@ -319,9 +319,9 @@
})) {
return;
}
var upgradeCost = getUpgradeCost();
- if (cash >= upgradeCost && upgradeTier < 800) {
+ if (cash >= upgradeCost && upgradeTier < 1600) {
cash -= upgradeCost;
upgradeTier++;
perClickValue = getPerClickValue();
// Give XP for upgrading
@@ -732,9 +732,18 @@
}
function getUpgradeCost() {
var baseCost = 25;
for (var i = 1; i <= upgradeTier; i++) {
- var multiplier = 1.1; // Consistent +1.1 multiplier for all tiers
+ var multiplier;
+ if (i % 100 === 0) {
+ multiplier = 1.8; // Every 100th tier - matches getPerClickValue scaling
+ } else if (i % 25 === 0) {
+ multiplier = 1.6; // Every 25th tier - matches getPerClickValue scaling
+ } else if (i % 10 === 0) {
+ multiplier = 1.4; // Every 10th tier - matches getPerClickValue scaling
+ } else {
+ multiplier = 1.2; // All other tiers - matches getPerClickValue scaling
+ }
baseCost *= multiplier;
}
return Math.floor(baseCost);
}
@@ -787,9 +796,9 @@
magnetText.setText('Magnet: ' + magnet.toFixed(2));
} else {
magnetText.setText('Magnet: ' + formatNumber(magnet));
}
- if (upgradeTier < 800) {
+ 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";