/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var BackgroundShape = Container.expand(function (assetId, startX, startY) { var self = Container.call(this); var shape = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.x = startX; self.y = startY; shape.alpha = 0.3; // Array of colors to cycle through self.colors = [0xff6b6b, 0x4ecdc4, 0x45b7d1, 0xf9ca24, 0x6c5ce7, 0xff9ff3, 0x54a0ff, 0x5f27cd]; self.currentColorIndex = 0; // Start continuous color animation self.animateColors = function () { var nextColorIndex = (self.currentColorIndex + 1) % self.colors.length; var nextColor = self.colors[nextColorIndex]; tween(shape, { tint: nextColor }, { duration: 3000 + Math.random() * 2000, easing: tween.easeInOut, onFinish: function onFinish() { self.currentColorIndex = nextColorIndex; self.animateColors(); } }); }; // Start position animation self.animatePosition = function () { var newX = Math.random() * 2048; var newY = Math.random() * 2732; tween(self, { x: newX, y: newY }, { duration: 8000 + Math.random() * 4000, easing: tween.easeInOut, onFinish: function onFinish() { self.animatePosition(); } }); }; // Start scale animation self.animateScale = function () { var newScale = 0.8 + Math.random() * 0.6; tween(shape, { scaleX: newScale, scaleY: newScale }, { duration: 5000 + Math.random() * 3000, easing: tween.easeInOut, onFinish: function onFinish() { self.animateScale(); } }); }; return self; }); var RedButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('redButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { // Track click for CPS calculation var currentTime = Date.now(); clickTimes.push(currentTime); // Keep only clicks from the last second clickTimes = clickTimes.filter(function (time) { return currentTime - time <= 1000; }); updateCPSDisplay(); // Button press animation tween(buttonGraphics, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); tween(buttonGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100 }); // Add points based on multiplier var pointsToAdd = 1 * pointMultiplier; totalPoints += pointsToAdd; // Cap points at maximum if (totalPoints > maxPoints) { totalPoints = maxPoints; } // Update displays updateScoreDisplay(); updateUpgradeButtons(); // Play click sound LK.getSound('click').play(); // Show floating points animation showFloatingPoints(pointsToAdd, self.x, self.y - 100); }; return self; }); var UpgradeButton = Container.expand(function (upgradeType, price, description) { var self = Container.call(this); var buttonBg = self.attachAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2(description + '\nCost: ' + price, { size: 45, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.upgradeType = upgradeType; self.price = price; self.description = description; self.updateDisplay = function () { if (self.upgradeType === 'reset') { buttonText.setText(self.description); buttonBg.tint = 0xFF0000; // Red color for reset button buttonBg.alpha = 1.0; buttonText.alpha = 1.0; } else { buttonText.setText(self.description + '\nCost: ' + self.price); buttonBg.tint = 0x4a90e2; // Original blue color // Disable button if not enough points if (totalPoints < self.price) { buttonBg.alpha = 0.5; buttonText.alpha = 0.5; } else { buttonBg.alpha = 1.0; buttonText.alpha = 1.0; } } }; self.down = function (x, y, obj) { if (totalPoints >= self.price) { // Purchase upgrade totalPoints -= self.price; // Apply upgrade effect if (self.upgradeType === 'multiplier2x') { pointMultiplier *= 2; self.price = Math.floor(self.price * 2.5); } else if (self.upgradeType === 'multiplier5x') { pointMultiplier *= 5; self.price = Math.floor(self.price * 3); } else if (self.upgradeType === 'multiplier10x') { pointMultiplier *= 10; self.price = Math.floor(self.price * 4); } else if (self.upgradeType === 'autoClicker') { autoClickerLevel++; self.price = Math.floor(self.price * 2); self.description = 'Auto Clicker Lv.' + autoClickerLevel; if (autoClickerLevel === 1) { startAutoClicker(); } } else if (self.upgradeType === 'clickStorm') { clickStormLevel++; self.price = Math.floor(self.price * 3); self.description = 'Click Storm Lv.' + clickStormLevel; activateClickStorm(); } else if (self.upgradeType === 'goldenTouch') { goldenTouchLevel++; self.price = Math.floor(self.price * 4); self.description = 'Golden Touch Lv.' + goldenTouchLevel; activateGoldenTouch(); } else if (self.upgradeType === 'megaBoost') { megaBoostLevel++; self.price = Math.floor(self.price * 5); self.description = 'Mega Boost Lv.' + megaBoostLevel; activateMegaBoost(); } else if (self.upgradeType === 'superAuto') { superAutoLevel++; self.price = Math.floor(self.price * 6); self.description = 'Super Auto Lv.' + superAutoLevel; upgradeSuperAuto(); } else if (self.upgradeType === 'reset') { // Reset all game progress resetGame(); } // Update displays updateScoreDisplay(); updateUpgradeButtons(); // Play purchase sound LK.getSound('purchase').play(); // Save progress saveProgress(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ // Background animation variables var backgroundShapes = []; // Game variables var totalPoints = storage.totalPoints || 0; var maxPoints = storage.maxPoints || 1000000000000; // Maximum points cap var pointMultiplier = storage.pointMultiplier || 1; var autoClickerLevel = storage.autoClickerLevel || 0; var clickStormLevel = storage.clickStormLevel || 0; var goldenTouchLevel = storage.goldenTouchLevel || 0; var megaBoostLevel = storage.megaBoostLevel || 0; var superAutoLevel = storage.superAutoLevel || 0; var clicksPerSecond = 0; var clickTimes = []; var stormActive = false; var goldenActive = false; var megaActive = false; var musicEnabled = storage.musicEnabled !== undefined ? storage.musicEnabled : true; // UI elements var scoreText; var cpsText; var redButton; var upgradeButtons = []; var floatingTexts = []; var musicButton; // Create animated background var bgShape1 = game.addChild(new BackgroundShape('bgShape1', 300, 400)); var bgShape2 = game.addChild(new BackgroundShape('bgShape2', 1700, 600)); var bgShape3 = game.addChild(new BackgroundShape('bgShape3', 1000, 200)); var bgShape4 = game.addChild(new BackgroundShape('bgShape4', 500, 2000)); var bgShape5 = game.addChild(new BackgroundShape('bgShape5', 1500, 2200)); backgroundShapes.push(bgShape1, bgShape2, bgShape3, bgShape4, bgShape5); // Start animations for all background shapes for (var i = 0; i < backgroundShapes.length; i++) { backgroundShapes[i].animateColors(); backgroundShapes[i].animatePosition(); backgroundShapes[i].animateScale(); } // Create main red button redButton = game.addChild(new RedButton()); redButton.x = 2048 / 2; redButton.y = 2732 / 2 - 200; // Create score display scoreText = new Text2('Points: ' + totalPoints, { size: 80, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); scoreText.y = 100; // Create CPS display cpsText = new Text2('CPS: 0', { size: 60, fill: 0xFFFF00 }); cpsText.anchor.set(0.5, 0); LK.gui.top.addChild(cpsText); cpsText.y = 200; // Create music toggle button musicButton = new Text2(musicEnabled ? '🔊 MUSIC ON' : '🔇 MUSIC OFF', { size: 50, fill: 0xFFFFFF }); musicButton.anchor.set(1, 0); LK.gui.topRight.addChild(musicButton); musicButton.x = -120; musicButton.y = 100; musicButton.interactive = true; musicButton.buttonMode = true; // Create upgrade buttons with more variety var upgrade2x = game.addChild(new UpgradeButton('multiplier2x', 10, '2x Multiplier')); upgrade2x.x = 2048 / 2 - 650; upgrade2x.y = 2732 / 2 + 350; var upgrade5x = game.addChild(new UpgradeButton('multiplier5x', 100, '5x Multiplier')); upgrade5x.x = 2048 / 2; upgrade5x.y = 2732 / 2 + 350; var upgrade10x = game.addChild(new UpgradeButton('multiplier10x', 500, '10x Multiplier')); upgrade10x.x = 2048 / 2 + 650; upgrade10x.y = 2732 / 2 + 350; var upgradeAuto = game.addChild(new UpgradeButton('autoClicker', 50, 'Auto Clicker')); upgradeAuto.x = 2048 / 2 - 650; upgradeAuto.y = 2732 / 2 + 550; var upgradeStorm = game.addChild(new UpgradeButton('clickStorm', 200, 'Click Storm')); upgradeStorm.x = 2048 / 2; upgradeStorm.y = 2732 / 2 + 550; var upgradeGolden = game.addChild(new UpgradeButton('goldenTouch', 1000, 'Golden Touch')); upgradeGolden.x = 2048 / 2 + 650; upgradeGolden.y = 2732 / 2 + 550; var upgradeMega = game.addChild(new UpgradeButton('megaBoost', 2500, 'Mega Boost')); upgradeMega.x = 2048 / 2 - 400; upgradeMega.y = 2732 / 2 + 750; var upgradeSuper = game.addChild(new UpgradeButton('superAuto', 5000, 'Super Auto')); upgradeSuper.x = 2048 / 2 + 400; upgradeSuper.y = 2732 / 2 + 750; // Create reset button var resetButton = game.addChild(new UpgradeButton('reset', 0, 'RESET GAME')); resetButton.x = 2048 / 2; resetButton.y = 2732 / 2 + 950; upgradeButtons.push(upgrade2x); upgradeButtons.push(upgradeAuto); upgradeButtons.push(upgrade5x); upgradeButtons.push(upgradeStorm); upgradeButtons.push(upgrade10x); upgradeButtons.push(upgradeGolden); upgradeButtons.push(upgradeMega); upgradeButtons.push(upgradeSuper); // Load saved upgrade prices if (storage.upgrade2xPrice) upgrade2x.price = storage.upgrade2xPrice; if (storage.upgrade5xPrice) upgrade5x.price = storage.upgrade5xPrice; if (storage.upgrade10xPrice) upgrade10x.price = storage.upgrade10xPrice; if (storage.upgradeAutoPrice) upgradeAuto.price = storage.upgradeAutoPrice; if (storage.upgradeStormPrice) upgradeStorm.price = storage.upgradeStormPrice; if (storage.upgradeGoldenPrice) upgradeGolden.price = storage.upgradeGoldenPrice; if (storage.upgradeMegaPrice) upgradeMega.price = storage.upgradeMegaPrice; if (storage.upgradeSuperPrice) upgradeSuper.price = storage.upgradeSuperPrice; // Update upgrade button descriptions to show current levels if (autoClickerLevel > 0) { upgradeAuto.description = 'Auto Clicker Lv.' + autoClickerLevel; } if (clickStormLevel > 0) { upgradeStorm.description = 'Click Storm Lv.' + clickStormLevel; } if (goldenTouchLevel > 0) { upgradeGolden.description = 'Golden Touch Lv.' + goldenTouchLevel; } if (megaBoostLevel > 0) { upgradeMega.description = 'Mega Boost Lv.' + megaBoostLevel; } if (superAutoLevel > 0) { upgradeSuper.description = 'Super Auto Lv.' + superAutoLevel; } // Auto clicker functionality var autoClickerTimer; function startAutoClicker() { if (autoClickerTimer) { LK.clearInterval(autoClickerTimer); } var clickSpeed = 1000 - superAutoLevel * 200; // Faster with super auto if (clickSpeed < 100) clickSpeed = 100; // Minimum 100ms autoClickerTimer = LK.setInterval(function () { if (autoClickerLevel > 0) { var pointsToAdd = (autoClickerLevel + superAutoLevel * 2) * pointMultiplier; totalPoints += pointsToAdd; // Cap points at maximum if (totalPoints > maxPoints) { totalPoints = maxPoints; } updateScoreDisplay(); updateUpgradeButtons(); showFloatingPoints(pointsToAdd, redButton.x + 200, redButton.y); } }, clickSpeed); } // Start auto clicker if player already has it if (autoClickerLevel > 0) { startAutoClicker(); } function updateScoreDisplay() { scoreText.setText('Points: ' + totalPoints + ' / ' + maxPoints); LK.setScore(totalPoints); } function updateCPSDisplay() { clicksPerSecond = clickTimes.length; cpsText.setText('CPS: ' + clicksPerSecond); } function updateUpgradeButtons() { for (var i = 0; i < upgradeButtons.length; i++) { upgradeButtons[i].updateDisplay(); } } function showFloatingPoints(points, x, y) { var floatingText = new Text2('+' + points, { size: 50, fill: 0x00FF00 }); floatingText.anchor.set(0.5, 0.5); floatingText.x = x; floatingText.y = y; game.addChild(floatingText); // Animate floating text tween(floatingText, { y: y - 100, alpha: 0 }, { duration: 1000, onFinish: function onFinish() { floatingText.destroy(); } }); } function activateClickStorm() { if (stormActive) return; stormActive = true; // Visual effect - change button color to blue var buttonGraphics = redButton.children[0]; tween(buttonGraphics, { tint: 0x00FFFF }, { duration: 200 }); // Auto-click rapidly for 10 seconds var stormTimer = LK.setInterval(function () { var pointsToAdd = clickStormLevel * pointMultiplier; totalPoints += pointsToAdd; // Cap points at maximum if (totalPoints > maxPoints) { totalPoints = maxPoints; } updateScoreDisplay(); updateUpgradeButtons(); showFloatingPoints(pointsToAdd, redButton.x - 150, redButton.y); }, 100); // Stop storm after 10 seconds LK.setTimeout(function () { LK.clearInterval(stormTimer); stormActive = false; tween(buttonGraphics, { tint: 0xFFFFFF }, { duration: 500 }); }, 10000); } function activateGoldenTouch() { if (goldenActive) return; goldenActive = true; // Visual effect - change button color to gold var buttonGraphics = redButton.children[0]; tween(buttonGraphics, { tint: 0xFFD700 }, { duration: 200 }); // Multiply all points by golden level for 15 seconds var originalMultiplier = pointMultiplier; pointMultiplier *= goldenTouchLevel * 3; LK.setTimeout(function () { pointMultiplier = originalMultiplier; goldenActive = false; tween(buttonGraphics, { tint: 0xFFFFFF }, { duration: 500 }); }, 15000); } function activateMegaBoost() { if (megaActive) return; megaActive = true; // Visual effect - make button bigger and purple var buttonGraphics = redButton.children[0]; tween(buttonGraphics, { scaleX: 1.5, scaleY: 1.5, tint: 0xFF00FF }, { duration: 300 }); // Massive point boost for next 20 clicks var megaClicks = 20; var originalDown = redButton.down; redButton.down = function (x, y, obj) { if (megaClicks > 0) { megaClicks--; var pointsToAdd = megaBoostLevel * 100 * pointMultiplier; totalPoints += pointsToAdd; // Cap points at maximum if (totalPoints > maxPoints) { totalPoints = maxPoints; } updateScoreDisplay(); updateUpgradeButtons(); showFloatingPoints(pointsToAdd, redButton.x, redButton.y - 100); LK.getSound('click').play(); if (megaClicks <= 0) { redButton.down = originalDown; megaActive = false; tween(buttonGraphics, { scaleX: 1.0, scaleY: 1.0, tint: 0xFFFFFF }, { duration: 500 }); } } else { originalDown.call(this, x, y, obj); } }; } function upgradeSuperAuto() { // Increase auto clicker speed and effectiveness if (autoClickerTimer) { LK.clearInterval(autoClickerTimer); } startAutoClicker(); } function saveProgress() { storage.totalPoints = totalPoints; storage.maxPoints = maxPoints; storage.pointMultiplier = pointMultiplier; storage.autoClickerLevel = autoClickerLevel; storage.clickStormLevel = clickStormLevel; storage.goldenTouchLevel = goldenTouchLevel; storage.megaBoostLevel = megaBoostLevel; storage.superAutoLevel = superAutoLevel; storage.upgrade2xPrice = upgrade2x.price; storage.upgrade5xPrice = upgrade5x.price; storage.upgrade10xPrice = upgrade10x.price; storage.upgradeAutoPrice = upgradeAuto.price; storage.upgradeStormPrice = upgradeStorm.price; storage.upgradeGoldenPrice = upgradeGolden.price; storage.upgradeMegaPrice = upgradeMega.price; storage.upgradeSuperPrice = upgradeSuper.price; storage.musicEnabled = musicEnabled; } function resetGame() { // Clear all stored data storage.totalPoints = 0; storage.maxPoints = 1000000000000; storage.pointMultiplier = 1; storage.autoClickerLevel = 0; storage.clickStormLevel = 0; storage.goldenTouchLevel = 0; storage.megaBoostLevel = 0; storage.superAutoLevel = 0; storage.upgrade2xPrice = 10; storage.upgrade5xPrice = 100; storage.upgrade10xPrice = 500; storage.upgradeAutoPrice = 50; storage.upgradeStormPrice = 200; storage.upgradeGoldenPrice = 1000; storage.upgradeMegaPrice = 2500; storage.upgradeSuperPrice = 5000; storage.musicEnabled = true; // Clear auto clicker timer if (autoClickerTimer) { LK.clearInterval(autoClickerTimer); } // Reset all game variables totalPoints = 0; maxPoints = 1000000000000; pointMultiplier = 1; autoClickerLevel = 0; clickStormLevel = 0; goldenTouchLevel = 0; megaBoostLevel = 0; superAutoLevel = 0; clicksPerSecond = 0; clickTimes = []; stormActive = false; goldenActive = false; megaActive = false; musicEnabled = true; // Reset upgrade button prices and descriptions upgrade2x.price = 10; upgrade5x.price = 100; upgrade10x.price = 500; upgradeAuto.price = 50; upgradeAuto.description = 'Auto Clicker'; upgradeStorm.price = 200; upgradeStorm.description = 'Click Storm'; upgradeGolden.price = 1000; upgradeGolden.description = 'Golden Touch'; upgradeMega.price = 2500; upgradeMega.description = 'Mega Boost'; upgradeSuper.price = 5000; upgradeSuper.description = 'Super Auto'; // Update displays updateScoreDisplay(); updateUpgradeButtons(); updateCPSDisplay(); // Reset button appearance var buttonGraphics = redButton.children[0]; buttonGraphics.scaleX = 1.0; buttonGraphics.scaleY = 1.0; buttonGraphics.tint = 0xFFFFFF; // Reset music button and restart music musicButton.setText('🔊 MUSIC ON'); LK.playMusic('backgroundMusic'); } // Initialize displays updateScoreDisplay(); updateUpgradeButtons(); // Music toggle functionality musicButton.down = function (x, y, obj) { musicEnabled = !musicEnabled; musicButton.setText(musicEnabled ? '🔊 MUSIC ON' : '🔇 MUSIC OFF'); if (musicEnabled) { LK.playMusic('backgroundMusic'); } else { LK.stopMusic(); } // Save music preference storage.musicEnabled = musicEnabled; }; // Start background music if enabled if (musicEnabled) { LK.playMusic('backgroundMusic'); } // Auto-save every 5 seconds LK.setInterval(function () { saveProgress(); }, 5000); // Update CPS every 100ms to keep it current LK.setInterval(function () { var currentTime = Date.now(); clickTimes = clickTimes.filter(function (time) { return currentTime - time <= 1000; }); updateCPSDisplay(); }, 100); game.update = function () { // Clean up destroyed floating texts for (var i = floatingTexts.length - 1; i >= 0; i--) { if (floatingTexts[i].destroyed) { floatingTexts.splice(i, 1); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BackgroundShape = Container.expand(function (assetId, startX, startY) {
var self = Container.call(this);
var shape = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.x = startX;
self.y = startY;
shape.alpha = 0.3;
// Array of colors to cycle through
self.colors = [0xff6b6b, 0x4ecdc4, 0x45b7d1, 0xf9ca24, 0x6c5ce7, 0xff9ff3, 0x54a0ff, 0x5f27cd];
self.currentColorIndex = 0;
// Start continuous color animation
self.animateColors = function () {
var nextColorIndex = (self.currentColorIndex + 1) % self.colors.length;
var nextColor = self.colors[nextColorIndex];
tween(shape, {
tint: nextColor
}, {
duration: 3000 + Math.random() * 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.currentColorIndex = nextColorIndex;
self.animateColors();
}
});
};
// Start position animation
self.animatePosition = function () {
var newX = Math.random() * 2048;
var newY = Math.random() * 2732;
tween(self, {
x: newX,
y: newY
}, {
duration: 8000 + Math.random() * 4000,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.animatePosition();
}
});
};
// Start scale animation
self.animateScale = function () {
var newScale = 0.8 + Math.random() * 0.6;
tween(shape, {
scaleX: newScale,
scaleY: newScale
}, {
duration: 5000 + Math.random() * 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.animateScale();
}
});
};
return self;
});
var RedButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('redButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
// Track click for CPS calculation
var currentTime = Date.now();
clickTimes.push(currentTime);
// Keep only clicks from the last second
clickTimes = clickTimes.filter(function (time) {
return currentTime - time <= 1000;
});
updateCPSDisplay();
// Button press animation
tween(buttonGraphics, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
tween(buttonGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
// Add points based on multiplier
var pointsToAdd = 1 * pointMultiplier;
totalPoints += pointsToAdd;
// Cap points at maximum
if (totalPoints > maxPoints) {
totalPoints = maxPoints;
}
// Update displays
updateScoreDisplay();
updateUpgradeButtons();
// Play click sound
LK.getSound('click').play();
// Show floating points animation
showFloatingPoints(pointsToAdd, self.x, self.y - 100);
};
return self;
});
var UpgradeButton = Container.expand(function (upgradeType, price, description) {
var self = Container.call(this);
var buttonBg = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(description + '\nCost: ' + price, {
size: 45,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.upgradeType = upgradeType;
self.price = price;
self.description = description;
self.updateDisplay = function () {
if (self.upgradeType === 'reset') {
buttonText.setText(self.description);
buttonBg.tint = 0xFF0000; // Red color for reset button
buttonBg.alpha = 1.0;
buttonText.alpha = 1.0;
} else {
buttonText.setText(self.description + '\nCost: ' + self.price);
buttonBg.tint = 0x4a90e2; // Original blue color
// Disable button if not enough points
if (totalPoints < self.price) {
buttonBg.alpha = 0.5;
buttonText.alpha = 0.5;
} else {
buttonBg.alpha = 1.0;
buttonText.alpha = 1.0;
}
}
};
self.down = function (x, y, obj) {
if (totalPoints >= self.price) {
// Purchase upgrade
totalPoints -= self.price;
// Apply upgrade effect
if (self.upgradeType === 'multiplier2x') {
pointMultiplier *= 2;
self.price = Math.floor(self.price * 2.5);
} else if (self.upgradeType === 'multiplier5x') {
pointMultiplier *= 5;
self.price = Math.floor(self.price * 3);
} else if (self.upgradeType === 'multiplier10x') {
pointMultiplier *= 10;
self.price = Math.floor(self.price * 4);
} else if (self.upgradeType === 'autoClicker') {
autoClickerLevel++;
self.price = Math.floor(self.price * 2);
self.description = 'Auto Clicker Lv.' + autoClickerLevel;
if (autoClickerLevel === 1) {
startAutoClicker();
}
} else if (self.upgradeType === 'clickStorm') {
clickStormLevel++;
self.price = Math.floor(self.price * 3);
self.description = 'Click Storm Lv.' + clickStormLevel;
activateClickStorm();
} else if (self.upgradeType === 'goldenTouch') {
goldenTouchLevel++;
self.price = Math.floor(self.price * 4);
self.description = 'Golden Touch Lv.' + goldenTouchLevel;
activateGoldenTouch();
} else if (self.upgradeType === 'megaBoost') {
megaBoostLevel++;
self.price = Math.floor(self.price * 5);
self.description = 'Mega Boost Lv.' + megaBoostLevel;
activateMegaBoost();
} else if (self.upgradeType === 'superAuto') {
superAutoLevel++;
self.price = Math.floor(self.price * 6);
self.description = 'Super Auto Lv.' + superAutoLevel;
upgradeSuperAuto();
} else if (self.upgradeType === 'reset') {
// Reset all game progress
resetGame();
}
// Update displays
updateScoreDisplay();
updateUpgradeButtons();
// Play purchase sound
LK.getSound('purchase').play();
// Save progress
saveProgress();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c3e50
});
/****
* Game Code
****/
// Background animation variables
var backgroundShapes = [];
// Game variables
var totalPoints = storage.totalPoints || 0;
var maxPoints = storage.maxPoints || 1000000000000; // Maximum points cap
var pointMultiplier = storage.pointMultiplier || 1;
var autoClickerLevel = storage.autoClickerLevel || 0;
var clickStormLevel = storage.clickStormLevel || 0;
var goldenTouchLevel = storage.goldenTouchLevel || 0;
var megaBoostLevel = storage.megaBoostLevel || 0;
var superAutoLevel = storage.superAutoLevel || 0;
var clicksPerSecond = 0;
var clickTimes = [];
var stormActive = false;
var goldenActive = false;
var megaActive = false;
var musicEnabled = storage.musicEnabled !== undefined ? storage.musicEnabled : true;
// UI elements
var scoreText;
var cpsText;
var redButton;
var upgradeButtons = [];
var floatingTexts = [];
var musicButton;
// Create animated background
var bgShape1 = game.addChild(new BackgroundShape('bgShape1', 300, 400));
var bgShape2 = game.addChild(new BackgroundShape('bgShape2', 1700, 600));
var bgShape3 = game.addChild(new BackgroundShape('bgShape3', 1000, 200));
var bgShape4 = game.addChild(new BackgroundShape('bgShape4', 500, 2000));
var bgShape5 = game.addChild(new BackgroundShape('bgShape5', 1500, 2200));
backgroundShapes.push(bgShape1, bgShape2, bgShape3, bgShape4, bgShape5);
// Start animations for all background shapes
for (var i = 0; i < backgroundShapes.length; i++) {
backgroundShapes[i].animateColors();
backgroundShapes[i].animatePosition();
backgroundShapes[i].animateScale();
}
// Create main red button
redButton = game.addChild(new RedButton());
redButton.x = 2048 / 2;
redButton.y = 2732 / 2 - 200;
// Create score display
scoreText = new Text2('Points: ' + totalPoints, {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
scoreText.y = 100;
// Create CPS display
cpsText = new Text2('CPS: 0', {
size: 60,
fill: 0xFFFF00
});
cpsText.anchor.set(0.5, 0);
LK.gui.top.addChild(cpsText);
cpsText.y = 200;
// Create music toggle button
musicButton = new Text2(musicEnabled ? '🔊 MUSIC ON' : '🔇 MUSIC OFF', {
size: 50,
fill: 0xFFFFFF
});
musicButton.anchor.set(1, 0);
LK.gui.topRight.addChild(musicButton);
musicButton.x = -120;
musicButton.y = 100;
musicButton.interactive = true;
musicButton.buttonMode = true;
// Create upgrade buttons with more variety
var upgrade2x = game.addChild(new UpgradeButton('multiplier2x', 10, '2x Multiplier'));
upgrade2x.x = 2048 / 2 - 650;
upgrade2x.y = 2732 / 2 + 350;
var upgrade5x = game.addChild(new UpgradeButton('multiplier5x', 100, '5x Multiplier'));
upgrade5x.x = 2048 / 2;
upgrade5x.y = 2732 / 2 + 350;
var upgrade10x = game.addChild(new UpgradeButton('multiplier10x', 500, '10x Multiplier'));
upgrade10x.x = 2048 / 2 + 650;
upgrade10x.y = 2732 / 2 + 350;
var upgradeAuto = game.addChild(new UpgradeButton('autoClicker', 50, 'Auto Clicker'));
upgradeAuto.x = 2048 / 2 - 650;
upgradeAuto.y = 2732 / 2 + 550;
var upgradeStorm = game.addChild(new UpgradeButton('clickStorm', 200, 'Click Storm'));
upgradeStorm.x = 2048 / 2;
upgradeStorm.y = 2732 / 2 + 550;
var upgradeGolden = game.addChild(new UpgradeButton('goldenTouch', 1000, 'Golden Touch'));
upgradeGolden.x = 2048 / 2 + 650;
upgradeGolden.y = 2732 / 2 + 550;
var upgradeMega = game.addChild(new UpgradeButton('megaBoost', 2500, 'Mega Boost'));
upgradeMega.x = 2048 / 2 - 400;
upgradeMega.y = 2732 / 2 + 750;
var upgradeSuper = game.addChild(new UpgradeButton('superAuto', 5000, 'Super Auto'));
upgradeSuper.x = 2048 / 2 + 400;
upgradeSuper.y = 2732 / 2 + 750;
// Create reset button
var resetButton = game.addChild(new UpgradeButton('reset', 0, 'RESET GAME'));
resetButton.x = 2048 / 2;
resetButton.y = 2732 / 2 + 950;
upgradeButtons.push(upgrade2x);
upgradeButtons.push(upgradeAuto);
upgradeButtons.push(upgrade5x);
upgradeButtons.push(upgradeStorm);
upgradeButtons.push(upgrade10x);
upgradeButtons.push(upgradeGolden);
upgradeButtons.push(upgradeMega);
upgradeButtons.push(upgradeSuper);
// Load saved upgrade prices
if (storage.upgrade2xPrice) upgrade2x.price = storage.upgrade2xPrice;
if (storage.upgrade5xPrice) upgrade5x.price = storage.upgrade5xPrice;
if (storage.upgrade10xPrice) upgrade10x.price = storage.upgrade10xPrice;
if (storage.upgradeAutoPrice) upgradeAuto.price = storage.upgradeAutoPrice;
if (storage.upgradeStormPrice) upgradeStorm.price = storage.upgradeStormPrice;
if (storage.upgradeGoldenPrice) upgradeGolden.price = storage.upgradeGoldenPrice;
if (storage.upgradeMegaPrice) upgradeMega.price = storage.upgradeMegaPrice;
if (storage.upgradeSuperPrice) upgradeSuper.price = storage.upgradeSuperPrice;
// Update upgrade button descriptions to show current levels
if (autoClickerLevel > 0) {
upgradeAuto.description = 'Auto Clicker Lv.' + autoClickerLevel;
}
if (clickStormLevel > 0) {
upgradeStorm.description = 'Click Storm Lv.' + clickStormLevel;
}
if (goldenTouchLevel > 0) {
upgradeGolden.description = 'Golden Touch Lv.' + goldenTouchLevel;
}
if (megaBoostLevel > 0) {
upgradeMega.description = 'Mega Boost Lv.' + megaBoostLevel;
}
if (superAutoLevel > 0) {
upgradeSuper.description = 'Super Auto Lv.' + superAutoLevel;
}
// Auto clicker functionality
var autoClickerTimer;
function startAutoClicker() {
if (autoClickerTimer) {
LK.clearInterval(autoClickerTimer);
}
var clickSpeed = 1000 - superAutoLevel * 200; // Faster with super auto
if (clickSpeed < 100) clickSpeed = 100; // Minimum 100ms
autoClickerTimer = LK.setInterval(function () {
if (autoClickerLevel > 0) {
var pointsToAdd = (autoClickerLevel + superAutoLevel * 2) * pointMultiplier;
totalPoints += pointsToAdd;
// Cap points at maximum
if (totalPoints > maxPoints) {
totalPoints = maxPoints;
}
updateScoreDisplay();
updateUpgradeButtons();
showFloatingPoints(pointsToAdd, redButton.x + 200, redButton.y);
}
}, clickSpeed);
}
// Start auto clicker if player already has it
if (autoClickerLevel > 0) {
startAutoClicker();
}
function updateScoreDisplay() {
scoreText.setText('Points: ' + totalPoints + ' / ' + maxPoints);
LK.setScore(totalPoints);
}
function updateCPSDisplay() {
clicksPerSecond = clickTimes.length;
cpsText.setText('CPS: ' + clicksPerSecond);
}
function updateUpgradeButtons() {
for (var i = 0; i < upgradeButtons.length; i++) {
upgradeButtons[i].updateDisplay();
}
}
function showFloatingPoints(points, x, y) {
var floatingText = new Text2('+' + points, {
size: 50,
fill: 0x00FF00
});
floatingText.anchor.set(0.5, 0.5);
floatingText.x = x;
floatingText.y = y;
game.addChild(floatingText);
// Animate floating text
tween(floatingText, {
y: y - 100,
alpha: 0
}, {
duration: 1000,
onFinish: function onFinish() {
floatingText.destroy();
}
});
}
function activateClickStorm() {
if (stormActive) return;
stormActive = true;
// Visual effect - change button color to blue
var buttonGraphics = redButton.children[0];
tween(buttonGraphics, {
tint: 0x00FFFF
}, {
duration: 200
});
// Auto-click rapidly for 10 seconds
var stormTimer = LK.setInterval(function () {
var pointsToAdd = clickStormLevel * pointMultiplier;
totalPoints += pointsToAdd;
// Cap points at maximum
if (totalPoints > maxPoints) {
totalPoints = maxPoints;
}
updateScoreDisplay();
updateUpgradeButtons();
showFloatingPoints(pointsToAdd, redButton.x - 150, redButton.y);
}, 100);
// Stop storm after 10 seconds
LK.setTimeout(function () {
LK.clearInterval(stormTimer);
stormActive = false;
tween(buttonGraphics, {
tint: 0xFFFFFF
}, {
duration: 500
});
}, 10000);
}
function activateGoldenTouch() {
if (goldenActive) return;
goldenActive = true;
// Visual effect - change button color to gold
var buttonGraphics = redButton.children[0];
tween(buttonGraphics, {
tint: 0xFFD700
}, {
duration: 200
});
// Multiply all points by golden level for 15 seconds
var originalMultiplier = pointMultiplier;
pointMultiplier *= goldenTouchLevel * 3;
LK.setTimeout(function () {
pointMultiplier = originalMultiplier;
goldenActive = false;
tween(buttonGraphics, {
tint: 0xFFFFFF
}, {
duration: 500
});
}, 15000);
}
function activateMegaBoost() {
if (megaActive) return;
megaActive = true;
// Visual effect - make button bigger and purple
var buttonGraphics = redButton.children[0];
tween(buttonGraphics, {
scaleX: 1.5,
scaleY: 1.5,
tint: 0xFF00FF
}, {
duration: 300
});
// Massive point boost for next 20 clicks
var megaClicks = 20;
var originalDown = redButton.down;
redButton.down = function (x, y, obj) {
if (megaClicks > 0) {
megaClicks--;
var pointsToAdd = megaBoostLevel * 100 * pointMultiplier;
totalPoints += pointsToAdd;
// Cap points at maximum
if (totalPoints > maxPoints) {
totalPoints = maxPoints;
}
updateScoreDisplay();
updateUpgradeButtons();
showFloatingPoints(pointsToAdd, redButton.x, redButton.y - 100);
LK.getSound('click').play();
if (megaClicks <= 0) {
redButton.down = originalDown;
megaActive = false;
tween(buttonGraphics, {
scaleX: 1.0,
scaleY: 1.0,
tint: 0xFFFFFF
}, {
duration: 500
});
}
} else {
originalDown.call(this, x, y, obj);
}
};
}
function upgradeSuperAuto() {
// Increase auto clicker speed and effectiveness
if (autoClickerTimer) {
LK.clearInterval(autoClickerTimer);
}
startAutoClicker();
}
function saveProgress() {
storage.totalPoints = totalPoints;
storage.maxPoints = maxPoints;
storage.pointMultiplier = pointMultiplier;
storage.autoClickerLevel = autoClickerLevel;
storage.clickStormLevel = clickStormLevel;
storage.goldenTouchLevel = goldenTouchLevel;
storage.megaBoostLevel = megaBoostLevel;
storage.superAutoLevel = superAutoLevel;
storage.upgrade2xPrice = upgrade2x.price;
storage.upgrade5xPrice = upgrade5x.price;
storage.upgrade10xPrice = upgrade10x.price;
storage.upgradeAutoPrice = upgradeAuto.price;
storage.upgradeStormPrice = upgradeStorm.price;
storage.upgradeGoldenPrice = upgradeGolden.price;
storage.upgradeMegaPrice = upgradeMega.price;
storage.upgradeSuperPrice = upgradeSuper.price;
storage.musicEnabled = musicEnabled;
}
function resetGame() {
// Clear all stored data
storage.totalPoints = 0;
storage.maxPoints = 1000000000000;
storage.pointMultiplier = 1;
storage.autoClickerLevel = 0;
storage.clickStormLevel = 0;
storage.goldenTouchLevel = 0;
storage.megaBoostLevel = 0;
storage.superAutoLevel = 0;
storage.upgrade2xPrice = 10;
storage.upgrade5xPrice = 100;
storage.upgrade10xPrice = 500;
storage.upgradeAutoPrice = 50;
storage.upgradeStormPrice = 200;
storage.upgradeGoldenPrice = 1000;
storage.upgradeMegaPrice = 2500;
storage.upgradeSuperPrice = 5000;
storage.musicEnabled = true;
// Clear auto clicker timer
if (autoClickerTimer) {
LK.clearInterval(autoClickerTimer);
}
// Reset all game variables
totalPoints = 0;
maxPoints = 1000000000000;
pointMultiplier = 1;
autoClickerLevel = 0;
clickStormLevel = 0;
goldenTouchLevel = 0;
megaBoostLevel = 0;
superAutoLevel = 0;
clicksPerSecond = 0;
clickTimes = [];
stormActive = false;
goldenActive = false;
megaActive = false;
musicEnabled = true;
// Reset upgrade button prices and descriptions
upgrade2x.price = 10;
upgrade5x.price = 100;
upgrade10x.price = 500;
upgradeAuto.price = 50;
upgradeAuto.description = 'Auto Clicker';
upgradeStorm.price = 200;
upgradeStorm.description = 'Click Storm';
upgradeGolden.price = 1000;
upgradeGolden.description = 'Golden Touch';
upgradeMega.price = 2500;
upgradeMega.description = 'Mega Boost';
upgradeSuper.price = 5000;
upgradeSuper.description = 'Super Auto';
// Update displays
updateScoreDisplay();
updateUpgradeButtons();
updateCPSDisplay();
// Reset button appearance
var buttonGraphics = redButton.children[0];
buttonGraphics.scaleX = 1.0;
buttonGraphics.scaleY = 1.0;
buttonGraphics.tint = 0xFFFFFF;
// Reset music button and restart music
musicButton.setText('🔊 MUSIC ON');
LK.playMusic('backgroundMusic');
}
// Initialize displays
updateScoreDisplay();
updateUpgradeButtons();
// Music toggle functionality
musicButton.down = function (x, y, obj) {
musicEnabled = !musicEnabled;
musicButton.setText(musicEnabled ? '🔊 MUSIC ON' : '🔇 MUSIC OFF');
if (musicEnabled) {
LK.playMusic('backgroundMusic');
} else {
LK.stopMusic();
}
// Save music preference
storage.musicEnabled = musicEnabled;
};
// Start background music if enabled
if (musicEnabled) {
LK.playMusic('backgroundMusic');
}
// Auto-save every 5 seconds
LK.setInterval(function () {
saveProgress();
}, 5000);
// Update CPS every 100ms to keep it current
LK.setInterval(function () {
var currentTime = Date.now();
clickTimes = clickTimes.filter(function (time) {
return currentTime - time <= 1000;
});
updateCPSDisplay();
}, 100);
game.update = function () {
// Clean up destroyed floating texts
for (var i = floatingTexts.length - 1; i >= 0; i--) {
if (floatingTexts[i].destroyed) {
floatingTexts.splice(i, 1);
}
}
};