/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	coins: 0,
	totalCoins: 0,
	coinsPerClick: 1,
	coinsPerSecond: 0,
	prestigePoints: 0,
	prestigeMultiplier: 1,
	upgrades: {}
});
/**** 
* Classes
****/ 
var Coin = Container.expand(function () {
	var self = Container.call(this);
	var coinGraphics = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.originalScale = 1;
	self.originalY = 0;
	self.animate = function () {
		// First stop any ongoing animation
		tween.stop(coinGraphics, {
			scaleX: true,
			scaleY: true,
			y: true
		});
		// Set initial state
		coinGraphics.scaleX = self.originalScale;
		coinGraphics.scaleY = self.originalScale;
		coinGraphics.y = self.originalY;
		// Grow slightly
		tween(coinGraphics, {
			scaleX: self.originalScale * 1.2,
			scaleY: self.originalScale * 1.2,
			y: self.originalY - 10
		}, {
			duration: 120,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				// Shrink back
				tween(coinGraphics, {
					scaleX: self.originalScale,
					scaleY: self.originalScale,
					y: self.originalY
				}, {
					duration: 120,
					easing: tween.bounceOut
				});
			}
		});
	};
	return self;
});
var CoinClickArea = Container.expand(function () {
	var self = Container.call(this);
	var clickArea = self.attachAsset('coinClickArea', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0.3
	});
	var coin = new Coin();
	coin.originalScale = 1.5;
	self.addChild(coin);
	// Coin value popup
	var coinValue = new Text2("", {
		size: 40,
		fill: 0xFFD700
	});
	coinValue.anchor.set(0.5, 0.5);
	coinValue.visible = false;
	self.addChild(coinValue);
	self.showValue = function (value) {
		coinValue.setText("+" + value);
		coinValue.alpha = 1;
		coinValue.visible = true;
		coinValue.y = -40;
		tween.stop(coinValue, {
			alpha: true,
			y: true
		});
		tween(coinValue, {
			alpha: 0,
			y: -120
		}, {
			duration: 1000,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				coinValue.visible = false;
			}
		});
	};
	self.down = function (x, y, obj) {
		// Calculate earned coins based on coinsPerClick and prestige multiplier
		var earned = Math.floor(coinsPerClick * prestigeMultiplier);
		// Add coins
		coins += earned;
		totalCoins += earned;
		// Play animation
		coin.animate();
		// Show value popup
		self.showValue(earned);
		// Play sound
		LK.getSound('coinClick').play();
	};
	return self;
});
var PrestigeButton = Container.expand(function () {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('prestige', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.title = new Text2("PRESTIGE", {
		size: 40,
		fill: 0xFFFFFF
	});
	self.title.anchor.set(0.5, 0);
	self.title.y = -35;
	self.addChild(self.title);
	self.infoText = new Text2("Reset for +0 points", {
		size: 30,
		fill: 0xFFFFFF
	});
	self.infoText.anchor.set(0.5, 0);
	self.infoText.y = 15;
	self.addChild(self.infoText);
	self.update = function () {
		var newPoints = Math.floor(Math.sqrt(totalCoins / 1e12));
		self.infoText.setText("Reset for +" + newPoints + " points");
		if (newPoints > 0) {
			buttonGraphics.tint = 0x9C27B0; // Purple
		} else {
			buttonGraphics.tint = 0x888888; // Gray
		}
	};
	self.down = function () {
		var newPoints = Math.floor(Math.sqrt(totalCoins / 1e12));
		if (newPoints > 0) {
			// Play prestige sound
			LK.getSound('prestige').play();
			// Add prestige points
			prestigePoints += newPoints;
			prestigeMultiplier = 1 + prestigePoints * 0.1; // 10% bonus per point
			// Reset game but keep prestige values
			storage.coins = 0;
			storage.totalCoins = 0;
			storage.coinsPerClick = 1;
			storage.coinsPerSecond = 0;
			storage.prestigePoints = prestigePoints;
			storage.prestigeMultiplier = prestigeMultiplier;
			storage.upgrades = {};
			// Show game over to restart
			LK.showGameOver();
		}
	};
	return self;
});
var UpgradeButton = Container.expand(function (id, name, description, cost, effect, requirements) {
	var self = Container.call(this);
	self.id = id;
	self.name = name;
	self.description = description;
	self.baseCost = cost;
	self.effect = effect;
	self.requirements = requirements || {};
	self.count = 0;
	// Initialize from storage if exists
	if (storage.upgrades && storage.upgrades[id] !== undefined) {
		self.count = storage.upgrades[id];
	}
	var buttonGraphics = self.attachAsset('upgradeButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.title = new Text2(name, {
		size: 40,
		fill: 0xFFFFFF
	});
	self.title.anchor.set(0.5, 0);
	self.title.y = -35;
	self.addChild(self.title);
	self.getCost = function () {
		return Math.floor(self.baseCost * Math.pow(1.15, self.count));
	};
	self.costText = new Text2("Cost: " + self.getCost(), {
		size: 30,
		fill: 0xFFFFFF
	});
	self.costText.anchor.set(0.5, 0);
	self.costText.y = 15;
	self.addChild(self.costText);
	self.countText = new Text2("Owned: " + self.count, {
		size: 25,
		fill: 0xFFFFFF
	});
	self.countText.anchor.set(1, 0);
	self.countText.x = buttonGraphics.width / 2 - 10;
	self.countText.y = -buttonGraphics.height / 2 + 10;
	self.addChild(self.countText);
	self.getCost = function () {
		return Math.floor(self.baseCost * Math.pow(1.15, self.count));
	};
	self.canPurchase = function () {
		// Check if player has enough coins
		if (coins < self.getCost()) {
			return false;
		}
		// Check requirements
		for (var req in self.requirements) {
			if (!upgrades[req] || upgrades[req].count < self.requirements[req]) {
				return false;
			}
		}
		return true;
	};
	self.purchase = function () {
		if (!self.canPurchase()) {
			return false;
		}
		coins -= self.getCost();
		self.count++;
		// Update storage
		if (!storage.upgrades) {
			storage.upgrades = {};
		}
		storage.upgrades[self.id] = self.count;
		// Apply effect
		self.effect(self.count);
		// Update UI
		self.costText.setText("Cost: " + self.getCost());
		self.countText.setText("Owned: " + self.count);
		return true;
	};
	self.update = function () {
		if (self.canPurchase()) {
			buttonGraphics.tint = 0x4CAF50; // Green
		} else {
			buttonGraphics.tint = 0x888888; // Gray
		}
	};
	self.down = function () {
		if (self.canPurchase()) {
			if (self.purchase()) {
				LK.getSound('upgrade').play();
				// Animate
				tween.stop(buttonGraphics, {
					scaleX: true,
					scaleY: true
				});
				buttonGraphics.scaleX = 1;
				buttonGraphics.scaleY = 1;
				tween(buttonGraphics, {
					scaleX: 0.95,
					scaleY: 0.95
				}, {
					duration: 100,
					easing: tween.easeOut,
					onFinish: function onFinish() {
						tween(buttonGraphics, {
							scaleX: 1,
							scaleY: 1
						}, {
							duration: 100,
							easing: tween.easeOut
						});
					}
				});
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x2C3E50
});
/**** 
* Game Code
****/ 
// Game variables
var coins = storage.coins || 0;
var totalCoins = storage.totalCoins || 0;
var coinsPerClick = storage.coinsPerClick || 1;
var coinsPerSecond = storage.coinsPerSecond || 0;
var prestigePoints = storage.prestigePoints || 0;
var prestigeMultiplier = storage.prestigeMultiplier || 1;
// Initialize UI text
var coinText = new Text2("Coins: 0", {
	size: 60,
	fill: 0xFFD700
});
coinText.anchor.set(0.5, 0);
LK.gui.top.addChild(coinText);
coinText.y = 50;
var cpsText = new Text2("0 per second", {
	size: 40,
	fill: 0xFFFFFF
});
cpsText.anchor.set(0.5, 0);
LK.gui.top.addChild(cpsText);
cpsText.y = 120;
var prestigeText = new Text2("Prestige Points: 0", {
	size: 40,
	fill: 0x9C27B0
});
prestigeText.anchor.set(0.5, 0);
LK.gui.top.addChild(prestigeText);
prestigeText.y = 170;
// Create coin click area
var coinClickArea = new CoinClickArea();
game.addChild(coinClickArea);
coinClickArea.x = 2048 / 2;
coinClickArea.y = 2732 / 4;
// Create upgrades container
var upgradesContainer = new Container();
game.addChild(upgradesContainer);
upgradesContainer.x = 2048 / 2;
upgradesContainer.y = 2732 / 2 + 200;
// Create prestige button
var prestigeButton = new PrestigeButton();
game.addChild(prestigeButton);
prestigeButton.x = 2048 / 2;
prestigeButton.y = 2732 - 200;
// Define upgrades
var upgrades = {
	clickPower: new UpgradeButton("clickPower", "Better Fingers", "Increase coins per click", 10, function (count) {
		coinsPerClick = 1 + count;
		storage.coinsPerClick = coinsPerClick;
	}),
	autoClicker: new UpgradeButton("autoClicker", "Auto Clicker", "Generates coins automatically", 100, function (count) {
		coinsPerSecond = count;
		storage.coinsPerSecond = coinsPerSecond;
	}),
	coinValue: new UpgradeButton("coinValue", "Gold Purity", "Increases coin value", 500, function (count) {
		coinsPerClick = 1 + count + upgrades.clickPower.count * 2;
		storage.coinsPerClick = coinsPerClick;
	}, {
		clickPower: 5
	}),
	factory: new UpgradeButton("factory", "Coin Factory", "Mass produce coins", 3000, function (count) {
		coinsPerSecond = count * 5 + upgrades.autoClicker.count;
		storage.coinsPerSecond = coinsPerSecond;
	}, {
		autoClicker: 10
	}),
	bank: new UpgradeButton("bank", "Investment Bank", "Earn interest on your coins", 10000, function (count) {
		// This will be calculated in the update function
	}, {
		factory: 5
	})
};
// Add upgrades to container
var upgradeY = 0;
var upgradeSpacing = 120;
for (var key in upgrades) {
	upgradesContainer.addChild(upgrades[key]);
	upgrades[key].y = upgradeY;
	upgradeY += upgradeSpacing;
}
// Format large numbers with appropriate suffixes
function formatNumber(num) {
	if (num < 1000) {
		return num.toFixed(0);
	}
	var suffixes = ["", "K", "M", "B", "T", "Qa", "Qi"];
	var suffixIndex = 0;
	while (num >= 1000 && suffixIndex < suffixes.length - 1) {
		num /= 1000;
		suffixIndex++;
	}
	if (num < 10) {
		return num.toFixed(2) + suffixes[suffixIndex];
	}
	if (num < 100) {
		return num.toFixed(1) + suffixes[suffixIndex];
	}
	return num.toFixed(0) + suffixes[suffixIndex];
}
// Update function - called every frame
var lastUpdateTime = Date.now();
game.update = function () {
	// Calculate time since last update for accurate coin generation
	var now = Date.now();
	var delta = (now - lastUpdateTime) / 1000; // Convert to seconds
	lastUpdateTime = now;
	// Update text displays
	coinText.setText("Coins: " + formatNumber(coins));
	cpsText.setText(formatNumber(coinsPerSecond) + " per second");
	prestigeText.setText("Prestige Points: " + prestigePoints + " (×" + prestigeMultiplier.toFixed(1) + ")");
	// Generate passive income
	var baseIncome = coinsPerSecond * delta * prestigeMultiplier;
	// Add bank interest if we have that upgrade
	if (upgrades.bank && upgrades.bank.count > 0) {
		var interestRate = 0.001 * upgrades.bank.count;
		var interest = coins * interestRate * delta;
		baseIncome += interest;
	}
	coins += baseIncome;
	totalCoins += baseIncome;
	// Save progress periodically (every 5 seconds)
	if (LK.ticks % 300 === 0) {
		storage.coins = coins;
		storage.totalCoins = totalCoins;
	}
	// Update all upgrades
	for (var key in upgrades) {
		upgrades[key].update();
	}
	// Update prestige button
	prestigeButton.update();
};
// Start background music
LK.playMusic('bgmusic', {
	fade: {
		start: 0,
		end: 0.3,
		duration: 1000
	}
}); /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	coins: 0,
	totalCoins: 0,
	coinsPerClick: 1,
	coinsPerSecond: 0,
	prestigePoints: 0,
	prestigeMultiplier: 1,
	upgrades: {}
});
/**** 
* Classes
****/ 
var Coin = Container.expand(function () {
	var self = Container.call(this);
	var coinGraphics = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.originalScale = 1;
	self.originalY = 0;
	self.animate = function () {
		// First stop any ongoing animation
		tween.stop(coinGraphics, {
			scaleX: true,
			scaleY: true,
			y: true
		});
		// Set initial state
		coinGraphics.scaleX = self.originalScale;
		coinGraphics.scaleY = self.originalScale;
		coinGraphics.y = self.originalY;
		// Grow slightly
		tween(coinGraphics, {
			scaleX: self.originalScale * 1.2,
			scaleY: self.originalScale * 1.2,
			y: self.originalY - 10
		}, {
			duration: 120,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				// Shrink back
				tween(coinGraphics, {
					scaleX: self.originalScale,
					scaleY: self.originalScale,
					y: self.originalY
				}, {
					duration: 120,
					easing: tween.bounceOut
				});
			}
		});
	};
	return self;
});
var CoinClickArea = Container.expand(function () {
	var self = Container.call(this);
	var clickArea = self.attachAsset('coinClickArea', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0.3
	});
	var coin = new Coin();
	coin.originalScale = 1.5;
	self.addChild(coin);
	// Coin value popup
	var coinValue = new Text2("", {
		size: 40,
		fill: 0xFFD700
	});
	coinValue.anchor.set(0.5, 0.5);
	coinValue.visible = false;
	self.addChild(coinValue);
	self.showValue = function (value) {
		coinValue.setText("+" + value);
		coinValue.alpha = 1;
		coinValue.visible = true;
		coinValue.y = -40;
		tween.stop(coinValue, {
			alpha: true,
			y: true
		});
		tween(coinValue, {
			alpha: 0,
			y: -120
		}, {
			duration: 1000,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				coinValue.visible = false;
			}
		});
	};
	self.down = function (x, y, obj) {
		// Calculate earned coins based on coinsPerClick and prestige multiplier
		var earned = Math.floor(coinsPerClick * prestigeMultiplier);
		// Add coins
		coins += earned;
		totalCoins += earned;
		// Play animation
		coin.animate();
		// Show value popup
		self.showValue(earned);
		// Play sound
		LK.getSound('coinClick').play();
	};
	return self;
});
var PrestigeButton = Container.expand(function () {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('prestige', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.title = new Text2("PRESTIGE", {
		size: 40,
		fill: 0xFFFFFF
	});
	self.title.anchor.set(0.5, 0);
	self.title.y = -35;
	self.addChild(self.title);
	self.infoText = new Text2("Reset for +0 points", {
		size: 30,
		fill: 0xFFFFFF
	});
	self.infoText.anchor.set(0.5, 0);
	self.infoText.y = 15;
	self.addChild(self.infoText);
	self.update = function () {
		var newPoints = Math.floor(Math.sqrt(totalCoins / 1e12));
		self.infoText.setText("Reset for +" + newPoints + " points");
		if (newPoints > 0) {
			buttonGraphics.tint = 0x9C27B0; // Purple
		} else {
			buttonGraphics.tint = 0x888888; // Gray
		}
	};
	self.down = function () {
		var newPoints = Math.floor(Math.sqrt(totalCoins / 1e12));
		if (newPoints > 0) {
			// Play prestige sound
			LK.getSound('prestige').play();
			// Add prestige points
			prestigePoints += newPoints;
			prestigeMultiplier = 1 + prestigePoints * 0.1; // 10% bonus per point
			// Reset game but keep prestige values
			storage.coins = 0;
			storage.totalCoins = 0;
			storage.coinsPerClick = 1;
			storage.coinsPerSecond = 0;
			storage.prestigePoints = prestigePoints;
			storage.prestigeMultiplier = prestigeMultiplier;
			storage.upgrades = {};
			// Show game over to restart
			LK.showGameOver();
		}
	};
	return self;
});
var UpgradeButton = Container.expand(function (id, name, description, cost, effect, requirements) {
	var self = Container.call(this);
	self.id = id;
	self.name = name;
	self.description = description;
	self.baseCost = cost;
	self.effect = effect;
	self.requirements = requirements || {};
	self.count = 0;
	// Initialize from storage if exists
	if (storage.upgrades && storage.upgrades[id] !== undefined) {
		self.count = storage.upgrades[id];
	}
	var buttonGraphics = self.attachAsset('upgradeButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.title = new Text2(name, {
		size: 40,
		fill: 0xFFFFFF
	});
	self.title.anchor.set(0.5, 0);
	self.title.y = -35;
	self.addChild(self.title);
	self.getCost = function () {
		return Math.floor(self.baseCost * Math.pow(1.15, self.count));
	};
	self.costText = new Text2("Cost: " + self.getCost(), {
		size: 30,
		fill: 0xFFFFFF
	});
	self.costText.anchor.set(0.5, 0);
	self.costText.y = 15;
	self.addChild(self.costText);
	self.countText = new Text2("Owned: " + self.count, {
		size: 25,
		fill: 0xFFFFFF
	});
	self.countText.anchor.set(1, 0);
	self.countText.x = buttonGraphics.width / 2 - 10;
	self.countText.y = -buttonGraphics.height / 2 + 10;
	self.addChild(self.countText);
	self.getCost = function () {
		return Math.floor(self.baseCost * Math.pow(1.15, self.count));
	};
	self.canPurchase = function () {
		// Check if player has enough coins
		if (coins < self.getCost()) {
			return false;
		}
		// Check requirements
		for (var req in self.requirements) {
			if (!upgrades[req] || upgrades[req].count < self.requirements[req]) {
				return false;
			}
		}
		return true;
	};
	self.purchase = function () {
		if (!self.canPurchase()) {
			return false;
		}
		coins -= self.getCost();
		self.count++;
		// Update storage
		if (!storage.upgrades) {
			storage.upgrades = {};
		}
		storage.upgrades[self.id] = self.count;
		// Apply effect
		self.effect(self.count);
		// Update UI
		self.costText.setText("Cost: " + self.getCost());
		self.countText.setText("Owned: " + self.count);
		return true;
	};
	self.update = function () {
		if (self.canPurchase()) {
			buttonGraphics.tint = 0x4CAF50; // Green
		} else {
			buttonGraphics.tint = 0x888888; // Gray
		}
	};
	self.down = function () {
		if (self.canPurchase()) {
			if (self.purchase()) {
				LK.getSound('upgrade').play();
				// Animate
				tween.stop(buttonGraphics, {
					scaleX: true,
					scaleY: true
				});
				buttonGraphics.scaleX = 1;
				buttonGraphics.scaleY = 1;
				tween(buttonGraphics, {
					scaleX: 0.95,
					scaleY: 0.95
				}, {
					duration: 100,
					easing: tween.easeOut,
					onFinish: function onFinish() {
						tween(buttonGraphics, {
							scaleX: 1,
							scaleY: 1
						}, {
							duration: 100,
							easing: tween.easeOut
						});
					}
				});
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x2C3E50
});
/**** 
* Game Code
****/ 
// Game variables
var coins = storage.coins || 0;
var totalCoins = storage.totalCoins || 0;
var coinsPerClick = storage.coinsPerClick || 1;
var coinsPerSecond = storage.coinsPerSecond || 0;
var prestigePoints = storage.prestigePoints || 0;
var prestigeMultiplier = storage.prestigeMultiplier || 1;
// Initialize UI text
var coinText = new Text2("Coins: 0", {
	size: 60,
	fill: 0xFFD700
});
coinText.anchor.set(0.5, 0);
LK.gui.top.addChild(coinText);
coinText.y = 50;
var cpsText = new Text2("0 per second", {
	size: 40,
	fill: 0xFFFFFF
});
cpsText.anchor.set(0.5, 0);
LK.gui.top.addChild(cpsText);
cpsText.y = 120;
var prestigeText = new Text2("Prestige Points: 0", {
	size: 40,
	fill: 0x9C27B0
});
prestigeText.anchor.set(0.5, 0);
LK.gui.top.addChild(prestigeText);
prestigeText.y = 170;
// Create coin click area
var coinClickArea = new CoinClickArea();
game.addChild(coinClickArea);
coinClickArea.x = 2048 / 2;
coinClickArea.y = 2732 / 4;
// Create upgrades container
var upgradesContainer = new Container();
game.addChild(upgradesContainer);
upgradesContainer.x = 2048 / 2;
upgradesContainer.y = 2732 / 2 + 200;
// Create prestige button
var prestigeButton = new PrestigeButton();
game.addChild(prestigeButton);
prestigeButton.x = 2048 / 2;
prestigeButton.y = 2732 - 200;
// Define upgrades
var upgrades = {
	clickPower: new UpgradeButton("clickPower", "Better Fingers", "Increase coins per click", 10, function (count) {
		coinsPerClick = 1 + count;
		storage.coinsPerClick = coinsPerClick;
	}),
	autoClicker: new UpgradeButton("autoClicker", "Auto Clicker", "Generates coins automatically", 100, function (count) {
		coinsPerSecond = count;
		storage.coinsPerSecond = coinsPerSecond;
	}),
	coinValue: new UpgradeButton("coinValue", "Gold Purity", "Increases coin value", 500, function (count) {
		coinsPerClick = 1 + count + upgrades.clickPower.count * 2;
		storage.coinsPerClick = coinsPerClick;
	}, {
		clickPower: 5
	}),
	factory: new UpgradeButton("factory", "Coin Factory", "Mass produce coins", 3000, function (count) {
		coinsPerSecond = count * 5 + upgrades.autoClicker.count;
		storage.coinsPerSecond = coinsPerSecond;
	}, {
		autoClicker: 10
	}),
	bank: new UpgradeButton("bank", "Investment Bank", "Earn interest on your coins", 10000, function (count) {
		// This will be calculated in the update function
	}, {
		factory: 5
	})
};
// Add upgrades to container
var upgradeY = 0;
var upgradeSpacing = 120;
for (var key in upgrades) {
	upgradesContainer.addChild(upgrades[key]);
	upgrades[key].y = upgradeY;
	upgradeY += upgradeSpacing;
}
// Format large numbers with appropriate suffixes
function formatNumber(num) {
	if (num < 1000) {
		return num.toFixed(0);
	}
	var suffixes = ["", "K", "M", "B", "T", "Qa", "Qi"];
	var suffixIndex = 0;
	while (num >= 1000 && suffixIndex < suffixes.length - 1) {
		num /= 1000;
		suffixIndex++;
	}
	if (num < 10) {
		return num.toFixed(2) + suffixes[suffixIndex];
	}
	if (num < 100) {
		return num.toFixed(1) + suffixes[suffixIndex];
	}
	return num.toFixed(0) + suffixes[suffixIndex];
}
// Update function - called every frame
var lastUpdateTime = Date.now();
game.update = function () {
	// Calculate time since last update for accurate coin generation
	var now = Date.now();
	var delta = (now - lastUpdateTime) / 1000; // Convert to seconds
	lastUpdateTime = now;
	// Update text displays
	coinText.setText("Coins: " + formatNumber(coins));
	cpsText.setText(formatNumber(coinsPerSecond) + " per second");
	prestigeText.setText("Prestige Points: " + prestigePoints + " (×" + prestigeMultiplier.toFixed(1) + ")");
	// Generate passive income
	var baseIncome = coinsPerSecond * delta * prestigeMultiplier;
	// Add bank interest if we have that upgrade
	if (upgrades.bank && upgrades.bank.count > 0) {
		var interestRate = 0.001 * upgrades.bank.count;
		var interest = coins * interestRate * delta;
		baseIncome += interest;
	}
	coins += baseIncome;
	totalCoins += baseIncome;
	// Save progress periodically (every 5 seconds)
	if (LK.ticks % 300 === 0) {
		storage.coins = coins;
		storage.totalCoins = totalCoins;
	}
	// Update all upgrades
	for (var key in upgrades) {
		upgrades[key].update();
	}
	// Update prestige button
	prestigeButton.update();
};
// Start background music
LK.playMusic('bgmusic', {
	fade: {
		start: 0,
		end: 0.3,
		duration: 1000
	}
});