User prompt
Fix the code where it randomly gets set to NaN
User prompt
One time I got 20 click power and then I got set back to 5 when I bought another upgrade please fix
User prompt
Save the game every tick ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Add more challenge to the game so they can’t win in a day or two
User prompt
Add a notifications tab on the bottom for you to see all the notifications and upgrades and achievements you got
User prompt
Make the achievements bigger
User prompt
Add more achievements for winning and getting your first upgrade etc.
User prompt
Make achievements for the game like reaching 1000 clicks etc.
User prompt
Make the start over print button more spread out and big
User prompt
Make a button to start over but print the player with a start over screen to confirm
User prompt
The autoclickers don’t work please fix
Code edit (1 edits merged)
Please save this source code
User prompt
Square Clicker Empire
Initial prompt
Make a clicker game where you have to click a square and there are multiple items in the shop to get. If the player gets the desired amount, or in other words reach the last upgrade in the shop, they win. Make a counter for clicks. Save every click the player makes so if they have to go then they can just come back and continue. Make great upgrades!
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
clicks: 0,
clickPower: 1,
autoClickersOwned: 0,
clickMultiplierOwned: 0,
superClickerOwned: 0,
clickingEmpireOwned: 0
});
/****
* Classes
****/
var ClickSquare = Container.expand(function () {
var self = Container.call(this);
var square = self.attachAsset('clickSquare', {
anchorX: 0.5,
anchorY: 0.5
});
self.originalScale = 1;
square.scale.set(self.originalScale);
self.down = function (x, y, obj) {
// Shrink the square when pressed
tween(square.scale, {
x: 0.9,
y: 0.9
}, {
duration: 100
});
// Add clicks based on click power
gameState.clicks += gameState.clickPower;
updateDisplays();
// Play click sound
LK.getSound('click').play();
// Create and animate "+clickPower" text
var clickText = new Text2("+" + gameState.clickPower, {
size: 60,
fill: 0xFFFFFF
});
clickText.anchor.set(0.5, 0.5);
clickText.x = x;
clickText.y = y;
self.addChild(clickText);
// Animate the text floating upward and fading
tween(clickText, {
y: y - 100,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
clickText.destroy();
}
});
};
self.up = function (x, y, obj) {
// Return to original size when released
tween(square.scale, {
x: self.originalScale,
y: self.originalScale
}, {
duration: 100
});
};
// Pulse animation function
self.pulse = function () {
tween(square.scale, {
x: self.originalScale * 1.05,
y: self.originalScale * 1.05
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(square.scale, {
x: self.originalScale,
y: self.originalScale
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: self.pulse
});
}
});
};
// Start pulsing animation
self.pulse();
return self;
});
var ShopButton = Container.expand(function () {
var self = Container.call(this);
var button = self.attachAsset('shopButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2("SHOP", {
size: 60,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
tween(button.scale, {
x: 0.95,
y: 0.95
}, {
duration: 100
});
toggleShop(true);
};
self.up = function (x, y, obj) {
tween(button.scale, {
x: 1,
y: 1
}, {
duration: 100
});
};
return self;
});
var ShopPanel = Container.expand(function () {
var self = Container.call(this);
var background = self.attachAsset('shopBackground', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.9
});
var titleText = new Text2("UPGRADE SHOP", {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.y = -background.height / 2 + 100;
self.addChild(titleText);
// Close button
var closeBtn = self.attachAsset('closeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: background.width / 2 - 80,
y: -background.height / 2 + 80
});
var closeX = new Text2("X", {
size: 50,
fill: 0xFFFFFF
});
closeX.anchor.set(0.5, 0.5);
closeX.x = closeBtn.x;
closeX.y = closeBtn.y;
self.addChild(closeX);
// Create upgrade buttons
self.autoClicker = new UpgradeButton("Auto Clicker", 50, "Automatically clicks once per second");
self.autoClicker.y = -400;
self.addChild(self.autoClicker);
self.clickMultiplier = new UpgradeButton("Click Multiplier", 100, "Increases click power by 1");
self.clickMultiplier.y = -200;
self.addChild(self.clickMultiplier);
self.superClicker = new UpgradeButton("Super Clicker", 500, "Multiplies your click power by 2");
self.superClicker.y = 0;
self.addChild(self.superClicker);
self.clickingEmpire = new UpgradeButton("Clicking Empire", 10000, "The ultimate upgrade - win the game!");
self.clickingEmpire.y = 200;
self.addChild(self.clickingEmpire);
// Description text
self.descriptionText = new Text2("", {
size: 30,
fill: 0xFFFFFF,
wordWrap: true,
wordWrapWidth: 1400
});
self.descriptionText.anchor.set(0.5, 0);
self.descriptionText.y = 400;
self.addChild(self.descriptionText);
// Stats display
self.statsText = new Text2("", {
size: 35,
fill: 0xFFFFFF
});
self.statsText.anchor.set(0.5, 1);
self.statsText.y = background.height / 2 - 100;
self.addChild(self.statsText);
self.updateStats = function () {
var stats = "Auto Clickers: " + gameState.autoClickersOwned;
stats += " | Click Multiplier: " + gameState.clickMultiplierOwned;
stats += " | Super Clicker: " + gameState.superClickerOwned;
self.statsText.setText(stats);
// Update button appearances
self.autoClicker.updateAppearance();
self.clickMultiplier.updateAppearance();
self.superClicker.updateAppearance();
self.clickingEmpire.updateAppearance();
// Update costs if needed from saved state
self.autoClicker.cost = 50 * Math.pow(1.5, gameState.autoClickersOwned);
self.autoClicker.getChildAt(2).setText(Math.floor(self.autoClicker.cost) + " clicks");
self.clickMultiplier.cost = 100 * Math.pow(2, gameState.clickMultiplierOwned);
self.clickMultiplier.getChildAt(2).setText(Math.floor(self.clickMultiplier.cost) + " clicks");
self.superClicker.cost = 500 * Math.pow(3, gameState.superClickerOwned);
self.superClicker.getChildAt(2).setText(Math.floor(self.superClicker.cost) + " clicks");
};
// Click handlers for close button
closeBtn.interactive = true;
closeBtn.down = function () {
toggleShop(false);
};
// Mouse over handlers for description
self.autoClicker.move = function () {
self.descriptionText.setText(self.autoClicker.description);
};
self.clickMultiplier.move = function () {
self.descriptionText.setText(self.clickMultiplier.description);
};
self.superClicker.move = function () {
self.descriptionText.setText(self.superClicker.description);
};
self.clickingEmpire.move = function () {
self.descriptionText.setText(self.clickingEmpire.description);
};
return self;
});
var StartOverButton = Container.expand(function () {
var self = Container.call(this);
var button = self.attachAsset('shopButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
// Increase button width
scaleY: 1.5 // Increase button height
});
var buttonText = new Text2("START OVER", {
size: 80,
//{1P} // Increase text size
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
tween(button.scale, {
x: 0.95,
y: 0.95
}, {
duration: 100
});
confirmStartOver();
};
self.up = function (x, y, obj) {
tween(button.scale, {
x: 1,
y: 1
}, {
duration: 100
});
};
return self;
});
var UpgradeButton = Container.expand(function (type, cost, description) {
var self = Container.call(this);
self.type = type;
self.cost = cost;
self.description = description;
var button = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2(type, {
size: 40,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.y = -35;
self.addChild(titleText);
var costText = new Text2(cost + " clicks", {
size: 30,
fill: 0xFFFFFF
});
costText.anchor.set(0.5, 1);
costText.y = 35;
self.addChild(costText);
self.updateAppearance = function () {
// Change appearance based on affordability
if (gameState.clicks >= self.cost) {
button.alpha = 1;
titleText.alpha = 1;
costText.alpha = 1;
} else {
button.alpha = 0.6;
titleText.alpha = 0.6;
costText.alpha = 0.6;
}
};
self.down = function (x, y, obj) {
tween(button.scale, {
x: 0.95,
y: 0.95
}, {
duration: 100
});
if (gameState.clicks >= self.cost) {
gameState.clicks -= self.cost;
// Apply upgrade effect
switch (self.type) {
case "Auto Clicker":
gameState.autoClickersOwned++;
self.cost = Math.floor(self.cost * 1.5); // Increase cost for next purchase
startAutoClicker();
break;
case "Click Multiplier":
gameState.clickMultiplierOwned++;
gameState.clickPower = 1 + gameState.clickMultiplierOwned;
self.cost = Math.floor(self.cost * 2); // Increase cost for next purchase
break;
case "Super Clicker":
gameState.superClickerOwned++;
gameState.clickPower = (1 + gameState.clickMultiplierOwned) * (1 + gameState.superClickerOwned * 2);
self.cost = Math.floor(self.cost * 3); // Increase cost for next purchase
break;
case "Clicking Empire":
gameState.clickingEmpireOwned = 1;
// Victory condition!
LK.showYouWin();
break;
}
// Update cost text
costText.setText(self.cost + " clicks");
// Play purchase sound
LK.getSound('purchase').play();
// Save game state
saveGameState();
// Update all displays
updateDisplays();
} else {
// Play error sound
LK.getSound('error').play();
}
};
self.up = function (x, y, obj) {
tween(button.scale, {
x: 1,
y: 1
}, {
duration: 100
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c3e50
});
/****
* Game Code
****/
function confirmStartOver() {
var confirmPanel = new Container();
var background = confirmPanel.attachAsset('shopBackground', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.9
});
var confirmText = new Text2("Are you sure you want to start over?", {
size: 50,
fill: 0xFFFFFF,
wordWrap: true,
wordWrapWidth: 1400
});
confirmText.anchor.set(0.5, 0.5);
confirmText.y = -100;
confirmPanel.addChild(confirmText);
var yesButton = new Container();
var yesButtonBackground = yesButton.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var yesText = new Text2("YES", {
size: 40,
fill: 0xFFFFFF
});
yesText.anchor.set(0.5, 0.5);
yesButton.addChild(yesText);
yesButton.y = 100;
yesButton.down = function () {
resetGame();
confirmPanel.destroy();
};
confirmPanel.addChild(yesButton);
var noButton = new Container();
var noButtonBackground = noButton.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var noText = new Text2("NO", {
size: 40,
fill: 0xFFFFFF
});
noText.anchor.set(0.5, 0.5);
noButton.addChild(noText);
noButton.y = 200;
noButton.down = function () {
confirmPanel.destroy();
};
confirmPanel.addChild(noButton);
confirmPanel.x = 2048 / 2;
confirmPanel.y = 2732 / 2;
game.addChild(confirmPanel);
}
function resetGame() {
gameState.clicks = 0;
gameState.clickPower = 1;
gameState.autoClickersOwned = 0;
gameState.clickMultiplierOwned = 0;
gameState.superClickerOwned = 0;
gameState.clickingEmpireOwned = 0;
saveGameState();
updateDisplays();
startAutoClicker();
}
// Game state
var gameState = {
clicks: storage.clicks || 0,
clickPower: storage.clickPower || 1,
autoClickersOwned: storage.autoClickersOwned || 0,
clickMultiplierOwned: storage.clickMultiplierOwned || 0,
superClickerOwned: storage.superClickerOwned || 0,
clickingEmpireOwned: storage.clickingEmpireOwned || 0,
shopOpen: false
};
// Create main click square
var clickSquare = new ClickSquare();
clickSquare.x = 2048 / 2;
clickSquare.y = 2732 / 2 - 300;
game.addChild(clickSquare);
// Create shop button
var shopButton = new ShopButton();
shopButton.x = 2048 / 2;
shopButton.y = 2732 / 2 + 400;
game.addChild(shopButton);
// Create start over button
var startOverButton = new StartOverButton();
startOverButton.x = 2048 / 2;
startOverButton.y = 2732 / 2 + 600;
game.addChild(startOverButton);
// Create shop panel (initially hidden)
var shopPanel = new ShopPanel();
shopPanel.x = 2048 / 2;
shopPanel.y = 2732 / 2;
shopPanel.visible = false;
shopPanel.alpha = 0;
game.addChild(shopPanel);
// Create click counter display
var clicksDisplay = new Text2("0", {
size: 100,
fill: 0xFFFFFF
});
clicksDisplay.anchor.set(0.5, 0.5);
clicksDisplay.x = 2048 / 2;
clicksDisplay.y = 2732 / 2 + 150;
game.addChild(clicksDisplay);
// Create click power display
var powerDisplay = new Text2("Click Power: 1", {
size: 50,
fill: 0xFFFFFF
});
powerDisplay.anchor.set(0.5, 0.5);
powerDisplay.x = 2048 / 2;
powerDisplay.y = 2732 / 2 + 250;
game.addChild(powerDisplay);
// Auto clicker timer
var autoClickTimer = null;
// Function to toggle shop visibility
function toggleShop(visible) {
gameState.shopOpen = visible;
if (visible) {
shopPanel.visible = true;
shopPanel.updateStats();
tween(shopPanel, {
alpha: 1
}, {
duration: 300
});
} else {
tween(shopPanel, {
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
shopPanel.visible = false;
}
});
}
}
// Function to update all displays
function updateDisplays() {
// Format large numbers for better readability
var formattedClicks;
if (gameState.clicks >= 1000000) {
formattedClicks = (gameState.clicks / 1000000).toFixed(1) + "M";
} else if (gameState.clicks >= 1000) {
formattedClicks = (gameState.clicks / 1000).toFixed(1) + "K";
} else {
formattedClicks = Math.floor(gameState.clicks);
}
clicksDisplay.setText(formattedClicks);
powerDisplay.setText("Click Power: " + gameState.clickPower);
if (shopPanel.visible) {
shopPanel.updateStats();
}
}
// Function to save game state
function saveGameState() {
storage.clicks = gameState.clicks;
storage.clickPower = gameState.clickPower;
storage.autoClickersOwned = gameState.autoClickersOwned;
storage.clickMultiplierOwned = gameState.clickMultiplierOwned;
storage.superClickerOwned = gameState.superClickerOwned;
storage.clickingEmpireOwned = gameState.clickingEmpireOwned;
}
// Auto-save timer
var saveTimer = LK.setInterval(function () {
saveGameState();
}, 10000); // Save every 10 seconds
// Start auto clicker if player has purchased any
function startAutoClicker() {
if (autoClickTimer) {
LK.clearInterval(autoClickTimer);
}
if (gameState.autoClickersOwned > 0) {
autoClickTimer = LK.setInterval(function () {
for (var i = 0; i < gameState.autoClickersOwned; i++) {
gameState.clicks += 1;
}
updateDisplays();
}, 1000); // Every second
}
}
// Initialize auto clicker
startAutoClicker();
// Initialize displays with saved state
updateDisplays();
// Play background music
LK.playMusic('bgMusic', {
fade: {
start: 0,
end: 0.3,
duration: 1000
}
});
// Game update function
game.update = function () {
// Auto-clicking logic is handled by the timer
};
// Game move handler
game.move = function (x, y, obj) {
// Currently no global move handling needed
}; ===================================================================
--- original.js
+++ change.js
@@ -221,12 +221,16 @@
var StartOverButton = Container.expand(function () {
var self = Container.call(this);
var button = self.attachAsset('shopButton', {
anchorX: 0.5,
- anchorY: 0.5
+ anchorY: 0.5,
+ scaleX: 1.5,
+ // Increase button width
+ scaleY: 1.5 // Increase button height
});
var buttonText = new Text2("START OVER", {
- size: 60,
+ size: 80,
+ //{1P} // Increase text size
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);