User prompt
When you buy something from the store, a sound file called buysound appears
User prompt
no, second minute, day, week, month, year as the counter
User prompt
The texts showing the status in the status panel are gone and it should also say where and how many hours it has been running
User prompt
When you click 100 cookies in the game, the achievement is won. Then it will be gone. The achievement is opened for the player who clicked 100 cookies. Title text: We are just getting started.
Code edit (1 edits merged)
Please save this source code
User prompt
Cookie Empire - Pixel Bakery Tycoon
Initial prompt
2D kurabiye tıklama (cookie clicker) tarzı bir oyun yap. Oyuncu kurabiyeye tıkladıkça kurabiye kazansın. Ancak başlangıçta para kazanmak zor olsun, yavaş ilerlesin. Oyuncu ilerledikçe kazandığı her kurabiye değerli hissettirsin. Yükseltmeler pahalı ama güçlü olsun. Oyun ilerledikçe otomatik kurabiye üreticiler, fırınlar, şefler alınabilsin. Piksel grafik tarzında sade, mobil uyumlu, bağımlılık yapıcı bir sistem kur. Ses efektleri, yükseltme dükkanı, istatistikler ve gelişim hissi olsun. Unity ile uyumlu şekilde tasarla.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Cookie = Container.expand(function () { var self = Container.call(this); var cookieBase = self.attachAsset('cookieBase', { anchorX: 0.5, anchorY: 0.5 }); // Add chocolate chips var chip1 = self.attachAsset('cookieChip', { anchorX: 0.5, anchorY: 0.5, x: -40, y: -30 }); var chip2 = self.attachAsset('cookieChip', { anchorX: 0.5, anchorY: 0.5, x: 50, y: 20 }); var chip3 = self.attachAsset('cookieChip', { anchorX: 0.5, anchorY: 0.5, x: -20, y: 40 }); var chip4 = self.attachAsset('cookieChip', { anchorX: 0.5, anchorY: 0.5, x: 30, y: -50 }); self.bounce = function () { tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, easing: tween.easeIn }); } }); }; self.down = function (x, y, obj) { self.bounce(); createParticles(self.x, self.y); earnCookies(cookiesPerClick); totalClicks++; LK.getSound('click').play(); }; return self; }); var Particle = Container.expand(function () { var self = Container.call(this); var particle = self.attachAsset('particle', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = { x: (Math.random() - 0.5) * 10, y: Math.random() * -8 - 2 }; self.life = 60; self.maxLife = 60; self.update = function () { self.x += self.velocity.x; self.y += self.velocity.y; self.velocity.y += 0.3; self.life--; self.alpha = self.life / self.maxLife; if (self.life <= 0) { self.destroy(); for (var i = particles.length - 1; i >= 0; i--) { if (particles[i] === self) { particles.splice(i, 1); break; } } } }; return self; }); var UpgradeButton = Container.expand(function (upgradeData) { var self = Container.call(this); self.upgradeData = upgradeData; self.canAfford = false; var button = self.attachAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5 }); var nameText = new Text2(upgradeData.name, { size: 32, fill: 0xFFFFFF }); nameText.anchor.set(0, 0.5); nameText.x = -180; nameText.y = -15; self.addChild(nameText); var costText = new Text2('Cost: ' + formatNumber(upgradeData.cost), { size: 24, fill: 0xFFFF00 }); costText.anchor.set(0, 0.5); costText.x = -180; costText.y = 15; self.addChild(costText); var ownedText = new Text2('Owned: ' + upgradeData.owned, { size: 24, fill: 0x00FF00 }); ownedText.anchor.set(1, 0.5); ownedText.x = 180; ownedText.y = 0; self.addChild(ownedText); self.updateDisplay = function () { self.canAfford = totalCookies >= upgradeData.cost; if (self.canAfford) { button.tint = 0x228B22; } else { button.tint = 0x4A4A4A; } costText.setText('Cost: ' + formatNumber(upgradeData.cost)); ownedText.setText('Owned: ' + upgradeData.owned); }; self.down = function (x, y, obj) { if (self.canAfford) { totalCookies -= upgradeData.cost; upgradeData.owned++; upgradeData.cost = Math.floor(upgradeData.cost * upgradeData.multiplier); if (upgradeData.type === 'click') { cookiesPerClick += upgradeData.effect; } else if (upgradeData.type === 'auto') { cookiesPerSecond += upgradeData.effect; } self.updateDisplay(); updateAllDisplays(); saveGame(); LK.getSound('buysound').play(); tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, easing: tween.easeIn }); } }); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x8B4513 }); /**** * Game Code ****/ // Game variables var totalCookies = storage.totalCookies || 0; var cookiesPerClick = storage.cookiesPerClick || 1; var cookiesPerSecond = storage.cookiesPerSecond || 0; var totalClicks = storage.totalClicks || 0; var totalCookiesEarned = storage.totalCookiesEarned || 0; var achievement100Clicks = storage.achievement100Clicks || false; var gameStartTime = storage.gameStartTime || Date.now(); var particles = []; var upgradeButtons = []; var lastAutoUpdate = Date.now(); // UI elements var cookieDisplay; var statsDisplay; var cpsDisplay; // Upgrade definitions var upgrades = [{ name: "Better Clicking", cost: storage.betterClickingCost || 15, owned: storage.betterClickingOwned || 0, effect: 1, type: 'click', multiplier: 1.5 }, { name: "Cookie Oven", cost: storage.cookieOvenCost || 100, owned: storage.cookieOvenOwned || 0, effect: 1, type: 'auto', multiplier: 1.8 }, { name: "Super Cursor", cost: storage.superCursorCost || 500, owned: storage.superCursorOwned || 0, effect: 5, type: 'click', multiplier: 2.0 }, { name: "Cookie Factory", cost: storage.cookieFactoryCost || 2000, owned: storage.cookieFactoryOwned || 0, effect: 10, type: 'auto', multiplier: 2.2 }, { name: "Master Baker", cost: storage.masterBakerCost || 10000, owned: storage.masterBakerOwned || 0, effect: 50, type: 'auto', multiplier: 2.5 }]; // Create main cookie var mainCookie = game.addChild(new Cookie()); mainCookie.x = 1024; mainCookie.y = 600; // Create shop panel var shopPanel = game.addChild(LK.getAsset('shopPanel', { anchorX: 0, anchorY: 0, x: 50, y: 100 })); var shopTitle = new Text2('SHOP', { size: 48, fill: 0xFFFFFF }); shopTitle.anchor.set(0.5, 0); shopTitle.x = 225; shopTitle.y = 20; shopPanel.addChild(shopTitle); // Create upgrade buttons for (var i = 0; i < upgrades.length; i++) { var upgradeButton = new UpgradeButton(upgrades[i]); upgradeButton.x = 225; upgradeButton.y = 120 + i * 100; upgradeButtons.push(upgradeButton); shopPanel.addChild(upgradeButton); } // Create stats panel var statsPanel = game.addChild(LK.getAsset('statsPanel', { anchorX: 0, anchorY: 0, x: 1550, y: 100 })); var statsTitle = new Text2('STATS', { size: 48, fill: 0xFFFFFF }); statsTitle.anchor.set(0.5, 0); statsTitle.x = 225; statsTitle.y = 20; statsPanel.addChild(statsTitle); // Cookie display cookieDisplay = new Text2('Cookies: ' + formatNumber(totalCookies), { size: 48, fill: 0xFFFF00 }); cookieDisplay.anchor.set(0.5, 0); cookieDisplay.x = 1024; cookieDisplay.y = 100; game.addChild(cookieDisplay); // CPS display cpsDisplay = new Text2('Per Second: ' + formatNumber(cookiesPerSecond), { size: 32, fill: 0x00FF00 }); cpsDisplay.anchor.set(0.5, 0); cpsDisplay.x = 1024; cpsDisplay.y = 160; game.addChild(cpsDisplay); // Stats text var clicksText = new Text2('Total Clicks: ' + formatNumber(totalClicks), { size: 32, fill: 0xFFFFFF }); clicksText.anchor.set(0, 0); clicksText.x = 20; clicksText.y = 80; statsPanel.addChild(clicksText); var earnedText = new Text2('Total Earned: ' + formatNumber(totalCookiesEarned), { size: 32, fill: 0xFFFFFF }); earnedText.anchor.set(0, 0); earnedText.x = 20; earnedText.y = 130; statsPanel.addChild(earnedText); var perClickText = new Text2('Per Click: ' + formatNumber(cookiesPerClick), { size: 32, fill: 0xFFFFFF }); perClickText.anchor.set(0, 0); perClickText.x = 20; perClickText.y = 180; statsPanel.addChild(perClickText); var runtimeText = new Text2('Runtime: 0h 0m', { size: 32, fill: 0xFFFFFF }); runtimeText.anchor.set(0, 0); runtimeText.x = 20; runtimeText.y = 230; statsPanel.addChild(runtimeText); // Helper functions function formatNumber(num) { if (num >= 1000000) { return (num / 1000000).toFixed(1) + 'M'; } else if (num >= 1000) { return (num / 1000).toFixed(1) + 'K'; } return Math.floor(num).toString(); } function formatTime(milliseconds) { var totalSeconds = Math.floor(milliseconds / 1000); var years = Math.floor(totalSeconds / (365 * 24 * 3600)); var months = Math.floor(totalSeconds % (365 * 24 * 3600) / (30 * 24 * 3600)); var weeks = Math.floor(totalSeconds % (30 * 24 * 3600) / (7 * 24 * 3600)); var days = Math.floor(totalSeconds % (7 * 24 * 3600) / (24 * 3600)); var hours = Math.floor(totalSeconds % (24 * 3600) / 3600); var minutes = Math.floor(totalSeconds % 3600 / 60); var seconds = totalSeconds % 60; var timeString = ''; if (years > 0) timeString += years + 'y '; if (months > 0) timeString += months + 'mo '; if (weeks > 0) timeString += weeks + 'w '; if (days > 0) timeString += days + 'd '; if (hours > 0) timeString += hours + 'h '; if (minutes > 0) timeString += minutes + 'm '; timeString += seconds + 's'; return timeString; } function earnCookies(amount) { totalCookies += amount; totalCookiesEarned += amount; updateAllDisplays(); checkAchievements(); } function checkAchievements() { // Check for 100 clicks achievement if (!achievement100Clicks && totalClicks >= 100) { achievement100Clicks = true; showAchievement("We are just getting started"); saveGame(); } } function showAchievement(title) { // Create achievement popup var achievementBg = game.addChild(LK.getAsset('shopPanel', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.8, scaleY: 0.6 })); achievementBg.tint = 0x228B22; var achievementTitle = new Text2('ACHIEVEMENT UNLOCKED!', { size: 36, fill: 0xFFFFFF }); achievementTitle.anchor.set(0.5, 0.5); achievementTitle.x = 0; achievementTitle.y = -60; achievementBg.addChild(achievementTitle); var achievementText = new Text2(title, { size: 32, fill: 0xFFFF00 }); achievementText.anchor.set(0.5, 0.5); achievementText.x = 0; achievementText.y = 0; achievementBg.addChild(achievementText); // Auto-remove after 3 seconds LK.setTimeout(function () { achievementBg.destroy(); }, 3000); // Slide in animation achievementBg.y = 1366 + 200; tween(achievementBg, { y: 1366 }, { duration: 500, easing: tween.easeOut }); } function createParticles(x, y) { for (var i = 0; i < 5; i++) { var particle = new Particle(); particle.x = x + (Math.random() - 0.5) * 100; particle.y = y + (Math.random() - 0.5) * 100; particles.push(particle); game.addChild(particle); } } function updateAllDisplays() { cookieDisplay.setText('Cookies: ' + formatNumber(totalCookies)); cpsDisplay.setText('Per Second: ' + formatNumber(cookiesPerSecond)); clicksText.setText('Total Clicks: ' + formatNumber(totalClicks)); earnedText.setText('Total Earned: ' + formatNumber(totalCookiesEarned)); perClickText.setText('Per Click: ' + formatNumber(cookiesPerClick)); var currentRuntime = Date.now() - gameStartTime; runtimeText.setText('Runtime: ' + formatTime(currentRuntime)); for (var i = 0; i < upgradeButtons.length; i++) { upgradeButtons[i].updateDisplay(); } } function saveGame() { storage.totalCookies = totalCookies; storage.cookiesPerClick = cookiesPerClick; storage.cookiesPerSecond = cookiesPerSecond; storage.totalClicks = totalClicks; storage.totalCookiesEarned = totalCookiesEarned; storage.achievement100Clicks = achievement100Clicks; storage.gameStartTime = gameStartTime; // Save upgrade data storage.betterClickingCost = upgrades[0].cost; storage.betterClickingOwned = upgrades[0].owned; storage.cookieOvenCost = upgrades[1].cost; storage.cookieOvenOwned = upgrades[1].owned; storage.superCursorCost = upgrades[2].cost; storage.superCursorOwned = upgrades[2].owned; storage.cookieFactoryCost = upgrades[3].cost; storage.cookieFactoryOwned = upgrades[3].owned; storage.masterBakerCost = upgrades[4].cost; storage.masterBakerOwned = upgrades[4].owned; } // Initialize displays updateAllDisplays(); // Play ambient music LK.playMusic('ambient'); // Main game loop game.update = function () { // Handle automatic cookie production var now = Date.now(); var deltaTime = (now - lastAutoUpdate) / 1000; if (cookiesPerSecond > 0 && deltaTime >= 1) { var cookiesToAdd = Math.floor(cookiesPerSecond * deltaTime); if (cookiesToAdd > 0) { earnCookies(cookiesToAdd); lastAutoUpdate = now; } } // Save game periodically if (LK.ticks % 300 === 0) { saveGame(); } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Cookie = Container.expand(function () {
var self = Container.call(this);
var cookieBase = self.attachAsset('cookieBase', {
anchorX: 0.5,
anchorY: 0.5
});
// Add chocolate chips
var chip1 = self.attachAsset('cookieChip', {
anchorX: 0.5,
anchorY: 0.5,
x: -40,
y: -30
});
var chip2 = self.attachAsset('cookieChip', {
anchorX: 0.5,
anchorY: 0.5,
x: 50,
y: 20
});
var chip3 = self.attachAsset('cookieChip', {
anchorX: 0.5,
anchorY: 0.5,
x: -20,
y: 40
});
var chip4 = self.attachAsset('cookieChip', {
anchorX: 0.5,
anchorY: 0.5,
x: 30,
y: -50
});
self.bounce = function () {
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
};
self.down = function (x, y, obj) {
self.bounce();
createParticles(self.x, self.y);
earnCookies(cookiesPerClick);
totalClicks++;
LK.getSound('click').play();
};
return self;
});
var Particle = Container.expand(function () {
var self = Container.call(this);
var particle = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = {
x: (Math.random() - 0.5) * 10,
y: Math.random() * -8 - 2
};
self.life = 60;
self.maxLife = 60;
self.update = function () {
self.x += self.velocity.x;
self.y += self.velocity.y;
self.velocity.y += 0.3;
self.life--;
self.alpha = self.life / self.maxLife;
if (self.life <= 0) {
self.destroy();
for (var i = particles.length - 1; i >= 0; i--) {
if (particles[i] === self) {
particles.splice(i, 1);
break;
}
}
}
};
return self;
});
var UpgradeButton = Container.expand(function (upgradeData) {
var self = Container.call(this);
self.upgradeData = upgradeData;
self.canAfford = false;
var button = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var nameText = new Text2(upgradeData.name, {
size: 32,
fill: 0xFFFFFF
});
nameText.anchor.set(0, 0.5);
nameText.x = -180;
nameText.y = -15;
self.addChild(nameText);
var costText = new Text2('Cost: ' + formatNumber(upgradeData.cost), {
size: 24,
fill: 0xFFFF00
});
costText.anchor.set(0, 0.5);
costText.x = -180;
costText.y = 15;
self.addChild(costText);
var ownedText = new Text2('Owned: ' + upgradeData.owned, {
size: 24,
fill: 0x00FF00
});
ownedText.anchor.set(1, 0.5);
ownedText.x = 180;
ownedText.y = 0;
self.addChild(ownedText);
self.updateDisplay = function () {
self.canAfford = totalCookies >= upgradeData.cost;
if (self.canAfford) {
button.tint = 0x228B22;
} else {
button.tint = 0x4A4A4A;
}
costText.setText('Cost: ' + formatNumber(upgradeData.cost));
ownedText.setText('Owned: ' + upgradeData.owned);
};
self.down = function (x, y, obj) {
if (self.canAfford) {
totalCookies -= upgradeData.cost;
upgradeData.owned++;
upgradeData.cost = Math.floor(upgradeData.cost * upgradeData.multiplier);
if (upgradeData.type === 'click') {
cookiesPerClick += upgradeData.effect;
} else if (upgradeData.type === 'auto') {
cookiesPerSecond += upgradeData.effect;
}
self.updateDisplay();
updateAllDisplays();
saveGame();
LK.getSound('buysound').play();
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x8B4513
});
/****
* Game Code
****/
// Game variables
var totalCookies = storage.totalCookies || 0;
var cookiesPerClick = storage.cookiesPerClick || 1;
var cookiesPerSecond = storage.cookiesPerSecond || 0;
var totalClicks = storage.totalClicks || 0;
var totalCookiesEarned = storage.totalCookiesEarned || 0;
var achievement100Clicks = storage.achievement100Clicks || false;
var gameStartTime = storage.gameStartTime || Date.now();
var particles = [];
var upgradeButtons = [];
var lastAutoUpdate = Date.now();
// UI elements
var cookieDisplay;
var statsDisplay;
var cpsDisplay;
// Upgrade definitions
var upgrades = [{
name: "Better Clicking",
cost: storage.betterClickingCost || 15,
owned: storage.betterClickingOwned || 0,
effect: 1,
type: 'click',
multiplier: 1.5
}, {
name: "Cookie Oven",
cost: storage.cookieOvenCost || 100,
owned: storage.cookieOvenOwned || 0,
effect: 1,
type: 'auto',
multiplier: 1.8
}, {
name: "Super Cursor",
cost: storage.superCursorCost || 500,
owned: storage.superCursorOwned || 0,
effect: 5,
type: 'click',
multiplier: 2.0
}, {
name: "Cookie Factory",
cost: storage.cookieFactoryCost || 2000,
owned: storage.cookieFactoryOwned || 0,
effect: 10,
type: 'auto',
multiplier: 2.2
}, {
name: "Master Baker",
cost: storage.masterBakerCost || 10000,
owned: storage.masterBakerOwned || 0,
effect: 50,
type: 'auto',
multiplier: 2.5
}];
// Create main cookie
var mainCookie = game.addChild(new Cookie());
mainCookie.x = 1024;
mainCookie.y = 600;
// Create shop panel
var shopPanel = game.addChild(LK.getAsset('shopPanel', {
anchorX: 0,
anchorY: 0,
x: 50,
y: 100
}));
var shopTitle = new Text2('SHOP', {
size: 48,
fill: 0xFFFFFF
});
shopTitle.anchor.set(0.5, 0);
shopTitle.x = 225;
shopTitle.y = 20;
shopPanel.addChild(shopTitle);
// Create upgrade buttons
for (var i = 0; i < upgrades.length; i++) {
var upgradeButton = new UpgradeButton(upgrades[i]);
upgradeButton.x = 225;
upgradeButton.y = 120 + i * 100;
upgradeButtons.push(upgradeButton);
shopPanel.addChild(upgradeButton);
}
// Create stats panel
var statsPanel = game.addChild(LK.getAsset('statsPanel', {
anchorX: 0,
anchorY: 0,
x: 1550,
y: 100
}));
var statsTitle = new Text2('STATS', {
size: 48,
fill: 0xFFFFFF
});
statsTitle.anchor.set(0.5, 0);
statsTitle.x = 225;
statsTitle.y = 20;
statsPanel.addChild(statsTitle);
// Cookie display
cookieDisplay = new Text2('Cookies: ' + formatNumber(totalCookies), {
size: 48,
fill: 0xFFFF00
});
cookieDisplay.anchor.set(0.5, 0);
cookieDisplay.x = 1024;
cookieDisplay.y = 100;
game.addChild(cookieDisplay);
// CPS display
cpsDisplay = new Text2('Per Second: ' + formatNumber(cookiesPerSecond), {
size: 32,
fill: 0x00FF00
});
cpsDisplay.anchor.set(0.5, 0);
cpsDisplay.x = 1024;
cpsDisplay.y = 160;
game.addChild(cpsDisplay);
// Stats text
var clicksText = new Text2('Total Clicks: ' + formatNumber(totalClicks), {
size: 32,
fill: 0xFFFFFF
});
clicksText.anchor.set(0, 0);
clicksText.x = 20;
clicksText.y = 80;
statsPanel.addChild(clicksText);
var earnedText = new Text2('Total Earned: ' + formatNumber(totalCookiesEarned), {
size: 32,
fill: 0xFFFFFF
});
earnedText.anchor.set(0, 0);
earnedText.x = 20;
earnedText.y = 130;
statsPanel.addChild(earnedText);
var perClickText = new Text2('Per Click: ' + formatNumber(cookiesPerClick), {
size: 32,
fill: 0xFFFFFF
});
perClickText.anchor.set(0, 0);
perClickText.x = 20;
perClickText.y = 180;
statsPanel.addChild(perClickText);
var runtimeText = new Text2('Runtime: 0h 0m', {
size: 32,
fill: 0xFFFFFF
});
runtimeText.anchor.set(0, 0);
runtimeText.x = 20;
runtimeText.y = 230;
statsPanel.addChild(runtimeText);
// Helper functions
function formatNumber(num) {
if (num >= 1000000) {
return (num / 1000000).toFixed(1) + 'M';
} else if (num >= 1000) {
return (num / 1000).toFixed(1) + 'K';
}
return Math.floor(num).toString();
}
function formatTime(milliseconds) {
var totalSeconds = Math.floor(milliseconds / 1000);
var years = Math.floor(totalSeconds / (365 * 24 * 3600));
var months = Math.floor(totalSeconds % (365 * 24 * 3600) / (30 * 24 * 3600));
var weeks = Math.floor(totalSeconds % (30 * 24 * 3600) / (7 * 24 * 3600));
var days = Math.floor(totalSeconds % (7 * 24 * 3600) / (24 * 3600));
var hours = Math.floor(totalSeconds % (24 * 3600) / 3600);
var minutes = Math.floor(totalSeconds % 3600 / 60);
var seconds = totalSeconds % 60;
var timeString = '';
if (years > 0) timeString += years + 'y ';
if (months > 0) timeString += months + 'mo ';
if (weeks > 0) timeString += weeks + 'w ';
if (days > 0) timeString += days + 'd ';
if (hours > 0) timeString += hours + 'h ';
if (minutes > 0) timeString += minutes + 'm ';
timeString += seconds + 's';
return timeString;
}
function earnCookies(amount) {
totalCookies += amount;
totalCookiesEarned += amount;
updateAllDisplays();
checkAchievements();
}
function checkAchievements() {
// Check for 100 clicks achievement
if (!achievement100Clicks && totalClicks >= 100) {
achievement100Clicks = true;
showAchievement("We are just getting started");
saveGame();
}
}
function showAchievement(title) {
// Create achievement popup
var achievementBg = game.addChild(LK.getAsset('shopPanel', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 0.8,
scaleY: 0.6
}));
achievementBg.tint = 0x228B22;
var achievementTitle = new Text2('ACHIEVEMENT UNLOCKED!', {
size: 36,
fill: 0xFFFFFF
});
achievementTitle.anchor.set(0.5, 0.5);
achievementTitle.x = 0;
achievementTitle.y = -60;
achievementBg.addChild(achievementTitle);
var achievementText = new Text2(title, {
size: 32,
fill: 0xFFFF00
});
achievementText.anchor.set(0.5, 0.5);
achievementText.x = 0;
achievementText.y = 0;
achievementBg.addChild(achievementText);
// Auto-remove after 3 seconds
LK.setTimeout(function () {
achievementBg.destroy();
}, 3000);
// Slide in animation
achievementBg.y = 1366 + 200;
tween(achievementBg, {
y: 1366
}, {
duration: 500,
easing: tween.easeOut
});
}
function createParticles(x, y) {
for (var i = 0; i < 5; i++) {
var particle = new Particle();
particle.x = x + (Math.random() - 0.5) * 100;
particle.y = y + (Math.random() - 0.5) * 100;
particles.push(particle);
game.addChild(particle);
}
}
function updateAllDisplays() {
cookieDisplay.setText('Cookies: ' + formatNumber(totalCookies));
cpsDisplay.setText('Per Second: ' + formatNumber(cookiesPerSecond));
clicksText.setText('Total Clicks: ' + formatNumber(totalClicks));
earnedText.setText('Total Earned: ' + formatNumber(totalCookiesEarned));
perClickText.setText('Per Click: ' + formatNumber(cookiesPerClick));
var currentRuntime = Date.now() - gameStartTime;
runtimeText.setText('Runtime: ' + formatTime(currentRuntime));
for (var i = 0; i < upgradeButtons.length; i++) {
upgradeButtons[i].updateDisplay();
}
}
function saveGame() {
storage.totalCookies = totalCookies;
storage.cookiesPerClick = cookiesPerClick;
storage.cookiesPerSecond = cookiesPerSecond;
storage.totalClicks = totalClicks;
storage.totalCookiesEarned = totalCookiesEarned;
storage.achievement100Clicks = achievement100Clicks;
storage.gameStartTime = gameStartTime;
// Save upgrade data
storage.betterClickingCost = upgrades[0].cost;
storage.betterClickingOwned = upgrades[0].owned;
storage.cookieOvenCost = upgrades[1].cost;
storage.cookieOvenOwned = upgrades[1].owned;
storage.superCursorCost = upgrades[2].cost;
storage.superCursorOwned = upgrades[2].owned;
storage.cookieFactoryCost = upgrades[3].cost;
storage.cookieFactoryOwned = upgrades[3].owned;
storage.masterBakerCost = upgrades[4].cost;
storage.masterBakerOwned = upgrades[4].owned;
}
// Initialize displays
updateAllDisplays();
// Play ambient music
LK.playMusic('ambient');
// Main game loop
game.update = function () {
// Handle automatic cookie production
var now = Date.now();
var deltaTime = (now - lastAutoUpdate) / 1000;
if (cookiesPerSecond > 0 && deltaTime >= 1) {
var cookiesToAdd = Math.floor(cookiesPerSecond * deltaTime);
if (cookiesToAdd > 0) {
earnCookies(cookiesToAdd);
lastAutoUpdate = now;
}
}
// Save game periodically
if (LK.ticks % 300 === 0) {
saveGame();
}
};