/**** * 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();
}
};