/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
money: 0,
farmCount: 0,
factoryCount: 0,
farmLevel: 1,
factoryLevel: 1,
miningCount: 0,
miningLevel: 1,
restaurantCount: 0,
restaurantLevel: 1,
highScore: 0
});
/****
* Classes
****/
// Money Button (Tap to earn)
var MoneyBtn = Container.expand(function () {
var self = Container.call(this);
var btn = self.attachAsset('moneyBtn', {
anchorX: 0.5,
anchorY: 0.5
});
// Animate on tap
self.tapAnim = function () {
tween(self, {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 120,
easing: tween.easeIn
});
}
});
};
return self;
});
// Upgrade Button (for farms/factories)
var UpgradeBtn = Container.expand(function () {
var self = Container.call(this);
var btn = self.attachAsset('upgradeBtn', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// --- Background ---
var bgImage = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChildAt(bgImage, 0);
// --- Persistent State ---
// Money icon (main tap button)
// Money Farm icon
// Money Factory icon
// Upgrade button
var money = storage.money || 0;
var farmCount = storage.farmCount || 0;
var factoryCount = storage.factoryCount || 0;
var farmLevel = storage.farmLevel || 1;
var factoryLevel = storage.factoryLevel || 1;
var miningCount = storage.miningCount || 0;
var miningLevel = storage.miningLevel || 1;
var restaurantCount = storage.restaurantCount || 0;
var restaurantLevel = storage.restaurantLevel || 1;
var highScore = storage.highScore || 0;
var upgradesPanelOpen = false;
var weeklyTasksPanelOpen = false;
var lastClickTime = 0;
var clickCooldown = 500; // 0.5 seconds in milliseconds
// Initialize weekly task
var WEEKLY_TASKS = ['Earn 10,000 Coins', 'Earn 25,000 Coins', 'Buy 10 Mines', 'Open 2 Pizza Restaurants', 'Open 8 Factories'];
var currentWeeklyTask = storage.currentWeeklyTask || 0;
var lastWeeklyTaskReset = storage.lastWeeklyTaskReset || 0;
var weeklyTaskProgress = storage.weeklyTaskProgress || 0;
var weeklyTaskCompleted = storage.weeklyTaskCompleted || false;
// Check if a week has passed and reset task if needed
function checkWeeklyTaskReset() {
var now = Date.now();
var weekInMs = 7 * 24 * 60 * 60 * 1000;
if (now - lastWeeklyTaskReset > weekInMs) {
currentWeeklyTask = Math.floor(Math.random() * WEEKLY_TASKS.length);
lastWeeklyTaskReset = now;
weeklyTaskProgress = 0;
weeklyTaskCompleted = false;
storage.currentWeeklyTask = currentWeeklyTask;
storage.lastWeeklyTaskReset = lastWeeklyTaskReset;
storage.weeklyTaskProgress = weeklyTaskProgress;
storage.weeklyTaskCompleted = weeklyTaskCompleted;
}
}
checkWeeklyTaskReset();
// --- Constants ---
var FARM_BASE_COST = 100;
var FACTORY_BASE_COST = 1200;
var MINING_BASE_COST = 5000;
var RESTAURANT_BASE_COST = 50000;
var FARM_BASE_INCOME = 1;
var FACTORY_BASE_INCOME = 12;
var MINING_BASE_INCOME = 50;
var RESTAURANT_BASE_INCOME = 200;
var FARM_UPGRADE_COST = 100;
var FACTORY_UPGRADE_COST = 1000;
var MINING_UPGRADE_COST = 5000;
var RESTAURANT_UPGRADE_COST = 50000;
var FARM_UPGRADE_MULT = 1.5;
var FACTORY_UPGRADE_MULT = 1.5;
var MINING_UPGRADE_MULT = 1.5;
var RESTAURANT_UPGRADE_MULT = 1.5;
// --- UI Elements ---
var moneyBtn = new MoneyBtn();
moneyBtn.x = 2048 / 2;
moneyBtn.y = 1100;
game.addChild(moneyBtn);
var moneyTxt = new Text2('', {
size: 180,
fill: "#fff"
});
moneyTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(moneyTxt);
var highScoreTxt = new Text2('', {
size: 80,
fill: 0xFFD700
});
highScoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreTxt);
highScoreTxt.y = 180;
// --- Upgrades Button ---
var upgradesBtn = new UpgradeBtn();
upgradesBtn.x = 2048 / 2;
upgradesBtn.y = 1800;
game.addChild(upgradesBtn);
var upgradesBtnTxt = new Text2('Upgrades', {
size: 80,
fill: "#fff"
});
upgradesBtnTxt.anchor.set(0.5, 0.5);
upgradesBtnTxt.x = upgradesBtn.x;
upgradesBtnTxt.y = upgradesBtn.y;
game.addChild(upgradesBtnTxt);
// --- Weekly Tasks Button ---
var weeklyTasksBtn = new UpgradeBtn();
weeklyTasksBtn.x = 2048 / 2;
weeklyTasksBtn.y = 2000;
game.addChild(weeklyTasksBtn);
var weeklyTasksBtnTxt = new Text2('Weekly Tasks', {
size: 80,
fill: "#fff"
});
weeklyTasksBtnTxt.anchor.set(0.5, 0.5);
weeklyTasksBtnTxt.x = weeklyTasksBtn.x;
weeklyTasksBtnTxt.y = weeklyTasksBtn.y;
game.addChild(weeklyTasksBtnTxt);
// --- Upgrade Panel ---
var panelBg = LK.getAsset('upgradePanel', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 1366
});
panelBg.visible = false;
game.addChild(panelBg);
var closeBtn = LK.getAsset('closePanelBtn', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + 750,
y: 1366 - 900
});
closeBtn.visible = false;
game.addChild(closeBtn);
var closeBtnTxt = new Text2('X', {
size: 60,
fill: "#fff"
});
closeBtnTxt.anchor.set(0.5, 0.5);
closeBtnTxt.x = closeBtn.x;
closeBtnTxt.y = closeBtn.y;
game.addChild(closeBtnTxt);
// --- Farm Section (in panel) ---
var farmIcon = LK.getAsset('farmIcon', {
anchorX: 0.5,
anchorY: 0.5
});
farmIcon.x = 350;
farmIcon.y = 1800;
farmIcon.visible = false;
game.addChild(farmIcon);
var farmCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
farmCountTxt.anchor.set(0.5, 0.5);
farmCountTxt.x = farmIcon.x;
farmCountTxt.y = farmIcon.y + 220;
farmCountTxt.visible = false;
game.addChild(farmCountTxt);
var farmBuyBtn = new UpgradeBtn();
farmBuyBtn.x = 350;
farmBuyBtn.y = farmIcon.y + 380;
farmBuyBtn.visible = false;
game.addChild(farmBuyBtn);
var farmBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
farmBuyTxt.anchor.set(0.5, 0.5);
farmBuyTxt.x = farmBuyBtn.x;
farmBuyTxt.y = farmBuyBtn.y;
farmBuyTxt.visible = false;
game.addChild(farmBuyTxt);
var farmUpgradeBtn = new UpgradeBtn();
farmUpgradeBtn.x = 350;
farmUpgradeBtn.y = farmBuyBtn.y + 180;
farmUpgradeBtn.visible = false;
game.addChild(farmUpgradeBtn);
var farmUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
farmUpgradeTxt.anchor.set(0.5, 0.5);
farmUpgradeTxt.x = farmUpgradeBtn.x;
farmUpgradeTxt.y = farmUpgradeBtn.y;
farmUpgradeTxt.visible = false;
game.addChild(farmUpgradeTxt);
// --- Factory Section (in panel) ---
var factoryIcon = LK.getAsset('factoryIcon', {
anchorX: 0.5,
anchorY: 0.5
});
factoryIcon.x = 1698;
factoryIcon.y = 1800;
factoryIcon.visible = false;
game.addChild(factoryIcon);
var factoryCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
factoryCountTxt.anchor.set(0.5, 0.5);
factoryCountTxt.x = factoryIcon.x;
factoryCountTxt.y = factoryIcon.y + 220;
factoryCountTxt.visible = false;
game.addChild(factoryCountTxt);
var factoryBuyBtn = new UpgradeBtn();
factoryBuyBtn.x = 1698;
factoryBuyBtn.y = factoryIcon.y + 380;
factoryBuyBtn.visible = false;
game.addChild(factoryBuyBtn);
var factoryBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
factoryBuyTxt.anchor.set(0.5, 0.5);
factoryBuyTxt.x = factoryBuyBtn.x;
factoryBuyTxt.y = factoryBuyBtn.y;
factoryBuyTxt.visible = false;
game.addChild(factoryBuyTxt);
var factoryUpgradeBtn = new UpgradeBtn();
factoryUpgradeBtn.x = 1698;
factoryUpgradeBtn.y = factoryBuyBtn.y + 180;
factoryUpgradeBtn.visible = false;
game.addChild(factoryUpgradeBtn);
var factoryUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
factoryUpgradeTxt.anchor.set(0.5, 0.5);
factoryUpgradeTxt.x = factoryUpgradeBtn.x;
factoryUpgradeTxt.y = factoryUpgradeBtn.y;
factoryUpgradeTxt.visible = false;
game.addChild(factoryUpgradeTxt);
// --- Mining Section (in panel) ---
var miningIcon = LK.getAsset('miningIcon', {
anchorX: 0.5,
anchorY: 0.5
});
miningIcon.x = 1024;
miningIcon.y = 1800;
miningIcon.visible = false;
game.addChild(miningIcon);
var miningCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
miningCountTxt.anchor.set(0.5, 0.5);
miningCountTxt.x = miningIcon.x;
miningCountTxt.y = miningIcon.y + 220;
miningCountTxt.visible = false;
game.addChild(miningCountTxt);
var miningBuyBtn = new UpgradeBtn();
miningBuyBtn.x = 1024;
miningBuyBtn.y = miningIcon.y + 380;
miningBuyBtn.visible = false;
game.addChild(miningBuyBtn);
var miningBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
miningBuyTxt.anchor.set(0.5, 0.5);
miningBuyTxt.x = miningBuyBtn.x;
miningBuyTxt.y = miningBuyBtn.y;
miningBuyTxt.visible = false;
game.addChild(miningBuyTxt);
var miningUpgradeBtn = new UpgradeBtn();
miningUpgradeBtn.x = 1024;
miningUpgradeBtn.y = miningBuyBtn.y + 180;
miningUpgradeBtn.visible = false;
game.addChild(miningUpgradeBtn);
var miningUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
miningUpgradeTxt.anchor.set(0.5, 0.5);
miningUpgradeTxt.x = miningUpgradeBtn.x;
miningUpgradeTxt.y = miningUpgradeBtn.y;
miningUpgradeTxt.visible = false;
game.addChild(miningUpgradeTxt);
// --- Restaurant Section (in panel) ---
var restaurantIcon = LK.getAsset('restaurantIcon', {
anchorX: 0.5,
anchorY: 0.5
});
restaurantIcon.x = 1024;
restaurantIcon.y = 600;
restaurantIcon.visible = false;
game.addChild(restaurantIcon);
var restaurantCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
restaurantCountTxt.anchor.set(0.5, 0.5);
restaurantCountTxt.x = restaurantIcon.x;
restaurantCountTxt.y = restaurantIcon.y + 220;
restaurantCountTxt.visible = false;
game.addChild(restaurantCountTxt);
var restaurantBuyBtn = new UpgradeBtn();
restaurantBuyBtn.x = 1024;
restaurantBuyBtn.y = restaurantIcon.y + 380;
restaurantBuyBtn.visible = false;
game.addChild(restaurantBuyBtn);
var restaurantBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
restaurantBuyTxt.anchor.set(0.5, 0.5);
restaurantBuyTxt.x = restaurantBuyBtn.x;
restaurantBuyTxt.y = restaurantBuyBtn.y;
restaurantBuyTxt.visible = false;
game.addChild(restaurantBuyTxt);
var restaurantUpgradeBtn = new UpgradeBtn();
restaurantUpgradeBtn.x = 1024;
restaurantUpgradeBtn.y = restaurantBuyBtn.y + 180;
restaurantUpgradeBtn.visible = false;
game.addChild(restaurantUpgradeBtn);
var restaurantUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
restaurantUpgradeTxt.anchor.set(0.5, 0.5);
restaurantUpgradeTxt.x = restaurantUpgradeBtn.x;
restaurantUpgradeTxt.y = restaurantUpgradeBtn.y;
restaurantUpgradeTxt.visible = false;
game.addChild(restaurantUpgradeTxt);
// --- Weekly Tasks Panel ---
var weeklyTaskPanelBg = LK.getAsset('upgradePanel', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 1366
});
weeklyTaskPanelBg.visible = false;
game.addChild(weeklyTaskPanelBg);
var weeklyTaskCloseBtn = LK.getAsset('closePanelBtn', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + 750,
y: 1366 - 900
});
weeklyTaskCloseBtn.visible = false;
game.addChild(weeklyTaskCloseBtn);
var weeklyTaskCloseBtnTxt = new Text2('X', {
size: 60,
fill: "#fff"
});
weeklyTaskCloseBtnTxt.anchor.set(0.5, 0.5);
weeklyTaskCloseBtnTxt.x = weeklyTaskCloseBtn.x;
weeklyTaskCloseBtnTxt.y = weeklyTaskCloseBtn.y;
game.addChild(weeklyTaskCloseBtnTxt);
var weeklyTaskTitleTxt = new Text2('Weekly Task', {
size: 120,
fill: 0xFFD700
});
weeklyTaskTitleTxt.anchor.set(0.5, 0);
weeklyTaskTitleTxt.x = 2048 / 2;
weeklyTaskTitleTxt.y = 500;
weeklyTaskTitleTxt.visible = false;
game.addChild(weeklyTaskTitleTxt);
var weeklyTaskDescTxt = new Text2('', {
size: 100,
fill: "#fff"
});
weeklyTaskDescTxt.anchor.set(0.5, 0);
weeklyTaskDescTxt.x = 2048 / 2;
weeklyTaskDescTxt.y = 700;
weeklyTaskDescTxt.visible = false;
game.addChild(weeklyTaskDescTxt);
var weeklyTaskProgressTxt = new Text2('', {
size: 80,
fill: "#fff"
});
weeklyTaskProgressTxt.anchor.set(0.5, 0);
weeklyTaskProgressTxt.x = 2048 / 2;
weeklyTaskProgressTxt.y = 1000;
weeklyTaskProgressTxt.visible = false;
game.addChild(weeklyTaskProgressTxt);
var weeklyTaskCompletedTxt = new Text2('COMPLETED!', {
size: 100,
fill: 0x00FF00
});
weeklyTaskCompletedTxt.anchor.set(0.5, 0.5);
weeklyTaskCompletedTxt.x = 2048 / 2;
weeklyTaskCompletedTxt.y = 1300;
weeklyTaskCompletedTxt.visible = false;
game.addChild(weeklyTaskCompletedTxt);
// --- Helper Functions ---
function formatMoney(val) {
if (val >= 1e9) return (val / 1e9).toFixed(2) + "B";
if (val >= 1e6) return (val / 1e6).toFixed(2) + "M";
if (val >= 1e3) return (val / 1e3).toFixed(2) + "K";
return Math.floor(val) + "";
}
function getFarmCost() {
return Math.floor(FARM_BASE_COST * Math.pow(1.15, farmCount));
}
function getFactoryCost() {
return Math.floor(FACTORY_BASE_COST * Math.pow(1.18, factoryCount));
}
function getFarmIncome() {
return farmCount * FARM_BASE_INCOME * farmLevel;
}
function getFactoryIncome() {
return factoryCount * FACTORY_BASE_INCOME * factoryLevel;
}
function getMiningCost() {
return Math.floor(MINING_BASE_COST * Math.pow(1.25, miningCount));
}
function getMiningIncome() {
return miningCount * MINING_BASE_INCOME * miningLevel;
}
function getRestaurantCost() {
return Math.floor(RESTAURANT_BASE_COST * Math.pow(1.3, restaurantCount));
}
function getRestaurantIncome() {
return restaurantCount * RESTAURANT_BASE_INCOME * restaurantLevel;
}
function getRestaurantUpgradeCost() {
return Math.floor(RESTAURANT_UPGRADE_COST * Math.pow(RESTAURANT_UPGRADE_MULT, restaurantLevel - 1));
}
function getMiningUpgradeCost() {
return Math.floor(MINING_UPGRADE_COST * Math.pow(MINING_UPGRADE_MULT, miningLevel - 1));
}
function getFarmUpgradeCost() {
return Math.floor(FARM_UPGRADE_COST * Math.pow(FARM_UPGRADE_MULT, farmLevel - 1));
}
function getFactoryUpgradeCost() {
return Math.floor(FACTORY_UPGRADE_COST * Math.pow(FACTORY_UPGRADE_MULT, factoryLevel - 1));
}
function updateWeeklyTaskProgress() {
var task = WEEKLY_TASKS[currentWeeklyTask];
if (task === 'Earn 10,000 Coins') {
weeklyTaskProgress = money;
} else if (task === 'Earn 25,000 Coins') {
weeklyTaskProgress = money;
} else if (task === 'Buy 10 Mines') {
weeklyTaskProgress = miningCount;
} else if (task === 'Open 2 Pizza Restaurants') {
weeklyTaskProgress = restaurantCount;
} else if (task === 'Open 8 Factories') {
weeklyTaskProgress = factoryCount;
}
if (checkWeeklyTaskCompletion()) {
weeklyTaskCompleted = true;
storage.weeklyTaskCompleted = true;
}
storage.weeklyTaskProgress = weeklyTaskProgress;
}
function checkWeeklyTaskCompletion() {
var task = WEEKLY_TASKS[currentWeeklyTask];
if (task === 'Earn 10,000 Coins') {
return money >= 10000;
} else if (task === 'Earn 25,000 Coins') {
return money >= 25000;
} else if (task === 'Buy 10 Mines') {
return miningCount >= 10;
} else if (task === 'Open 2 Pizza Restaurants') {
return restaurantCount >= 2;
} else if (task === 'Open 8 Factories') {
return factoryCount >= 8;
}
return false;
}
function getWeeklyTaskTarget() {
var task = WEEKLY_TASKS[currentWeeklyTask];
if (task === 'Earn 10,000 Coins') {
return 10000;
} else if (task === 'Earn 25,000 Coins') {
return 25000;
} else if (task === 'Buy 10 Mines') {
return 10;
} else if (task === 'Open 2 Pizza Restaurants') {
return 2;
} else if (task === 'Open 8 Factories') {
return 8;
}
return 0;
}
function saveState() {
storage.money = money;
storage.farmCount = farmCount;
storage.factoryCount = factoryCount;
storage.farmLevel = farmLevel;
storage.factoryLevel = factoryLevel;
storage.miningCount = miningCount;
storage.miningLevel = miningLevel;
storage.restaurantCount = restaurantCount;
storage.restaurantLevel = restaurantLevel;
storage.currentWeeklyTask = currentWeeklyTask;
storage.lastWeeklyTaskReset = lastWeeklyTaskReset;
storage.weeklyTaskProgress = weeklyTaskProgress;
storage.weeklyTaskCompleted = weeklyTaskCompleted;
if (money > highScore) {
highScore = money;
storage.highScore = highScore;
}
}
// --- UI Update ---
function updateUI() {
moneyTxt.setText("Money: $" + formatMoney(money));
highScoreTxt.setText("High Score: $" + formatMoney(highScore));
if (upgradesPanelOpen) {
farmCountTxt.setText("Farms: " + farmCount + "\nIncome: $" + formatMoney(getFarmIncome()) + "/s");
farmBuyTxt.setText("Buy Farm\n$" + formatMoney(getFarmCost()));
farmUpgradeTxt.setText("Upgrade Farm\nLvl " + farmLevel + " ($" + formatMoney(getFarmUpgradeCost()) + ")");
factoryCountTxt.setText("Factories: " + factoryCount + "\nIncome: $" + formatMoney(getFactoryIncome()) + "/s");
factoryBuyTxt.setText("Buy Factory\n$" + formatMoney(getFactoryCost()));
factoryUpgradeTxt.setText("Upgrade Factory\nLvl " + factoryLevel + " ($" + formatMoney(getFactoryUpgradeCost()) + ")");
miningCountTxt.setText("Mines: " + miningCount + "\nIncome: $" + formatMoney(getMiningIncome()) + "/s");
miningBuyTxt.setText("Buy Mine\n$" + formatMoney(getMiningCost()));
miningUpgradeTxt.setText("Upgrade Mine\nLvl " + miningLevel + " ($" + formatMoney(getMiningUpgradeCost()) + ")");
restaurantCountTxt.setText("Restaurants: " + restaurantCount + "\nIncome: $" + formatMoney(getRestaurantIncome()) + "/s");
restaurantBuyTxt.setText("Buy Restaurant\n$" + formatMoney(getRestaurantCost()));
restaurantUpgradeTxt.setText("Upgrade Restaurant\nLvl " + restaurantLevel + " ($" + formatMoney(getRestaurantUpgradeCost()) + ")");
}
if (weeklyTasksPanelOpen) {
updateWeeklyTaskProgress();
var task = WEEKLY_TASKS[currentWeeklyTask];
var target = getWeeklyTaskTarget();
weeklyTaskDescTxt.setText(task);
if (weeklyTaskCompleted) {
weeklyTaskProgressTxt.setText("Progress: " + weeklyTaskProgress + "/" + target);
weeklyTaskCompletedTxt.visible = true;
} else {
weeklyTaskProgressTxt.setText("Progress: " + weeklyTaskProgress + "/" + target);
weeklyTaskCompletedTxt.visible = false;
}
}
}
// --- Toggle Upgrades Panel ---
function toggleUpgradesPanel() {
upgradesPanelOpen = !upgradesPanelOpen;
panelBg.visible = upgradesPanelOpen;
closeBtn.visible = upgradesPanelOpen;
closeBtnTxt.visible = upgradesPanelOpen;
farmIcon.visible = upgradesPanelOpen;
farmCountTxt.visible = upgradesPanelOpen;
farmBuyBtn.visible = upgradesPanelOpen;
farmBuyTxt.visible = upgradesPanelOpen;
farmUpgradeBtn.visible = upgradesPanelOpen;
farmUpgradeTxt.visible = upgradesPanelOpen;
factoryIcon.visible = upgradesPanelOpen;
factoryCountTxt.visible = upgradesPanelOpen;
factoryBuyBtn.visible = upgradesPanelOpen;
factoryBuyTxt.visible = upgradesPanelOpen;
factoryUpgradeBtn.visible = upgradesPanelOpen;
factoryUpgradeTxt.visible = upgradesPanelOpen;
miningIcon.visible = upgradesPanelOpen;
miningCountTxt.visible = upgradesPanelOpen;
miningBuyBtn.visible = upgradesPanelOpen;
miningBuyTxt.visible = upgradesPanelOpen;
miningUpgradeBtn.visible = upgradesPanelOpen;
miningUpgradeTxt.visible = upgradesPanelOpen;
restaurantIcon.visible = upgradesPanelOpen;
restaurantCountTxt.visible = upgradesPanelOpen;
restaurantBuyBtn.visible = upgradesPanelOpen;
restaurantBuyTxt.visible = upgradesPanelOpen;
restaurantUpgradeBtn.visible = upgradesPanelOpen;
restaurantUpgradeTxt.visible = upgradesPanelOpen;
updateUI();
}
upgradesBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleUpgradesPanel();
};
closeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleUpgradesPanel();
};
// --- Toggle Weekly Tasks Panel ---
function toggleWeeklyTasksPanel() {
weeklyTasksPanelOpen = !weeklyTasksPanelOpen;
weeklyTaskPanelBg.visible = weeklyTasksPanelOpen;
weeklyTaskCloseBtn.visible = weeklyTasksPanelOpen;
weeklyTaskCloseBtnTxt.visible = weeklyTasksPanelOpen;
weeklyTaskTitleTxt.visible = weeklyTasksPanelOpen;
weeklyTaskDescTxt.visible = weeklyTasksPanelOpen;
weeklyTaskProgressTxt.visible = weeklyTasksPanelOpen;
if (weeklyTasksPanelOpen) {
updateUI();
}
}
weeklyTasksBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleWeeklyTasksPanel();
};
weeklyTaskCloseBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleWeeklyTasksPanel();
};
// --- Money Button Tap ---
moneyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var add = 1 + farmLevel + factoryLevel;
money += add;
if (money > highScore) {
highScore = money;
storage.highScore = highScore;
}
moneyBtn.tapAnim();
updateUI();
saveState();
};
// --- Farm Buy ---
farmBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFarmCost();
if (money >= cost) {
money -= cost;
farmCount += 1;
updateUI();
saveState();
// Animate farm icon
tween(farmIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(farmIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Farm Upgrade ---
farmUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFarmUpgradeCost();
if (money >= cost) {
money -= cost;
farmLevel += 1;
updateUI();
saveState();
// Animate farm icon
tween(farmIcon, {
tint: 0xA5D6A7
}, {
duration: 200,
onFinish: function onFinish() {
tween(farmIcon, {
tint: 0x4CAF50
}, {
duration: 200
});
}
});
}
};
// --- Factory Buy ---
factoryBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFactoryCost();
if (money >= cost) {
money -= cost;
factoryCount += 1;
updateUI();
saveState();
// Animate factory icon
tween(factoryIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(factoryIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Factory Upgrade ---
factoryUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFactoryUpgradeCost();
if (money >= cost) {
money -= cost;
factoryLevel += 1;
updateUI();
saveState();
// Animate factory icon
tween(factoryIcon, {
tint: 0x90CAF9
}, {
duration: 200,
onFinish: function onFinish() {
tween(factoryIcon, {
tint: 0x2196F3
}, {
duration: 200
});
}
});
}
};
// --- Mining Buy ---
miningBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getMiningCost();
if (money >= cost) {
money -= cost;
miningCount += 1;
updateUI();
saveState();
// Animate mining icon
tween(miningIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(miningIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Mining Upgrade ---
miningUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getMiningUpgradeCost();
if (money >= cost) {
money -= cost;
miningLevel += 1;
updateUI();
saveState();
// Animate mining icon
tween(miningIcon, {
tint: 0xFFD700
}, {
duration: 200,
onFinish: function onFinish() {
tween(miningIcon, {
tint: 0xFFA500
}, {
duration: 200
});
}
});
}
};
// --- Restaurant Buy ---
restaurantBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getRestaurantCost();
if (money >= cost) {
money -= cost;
restaurantCount += 1;
updateUI();
saveState();
// Animate restaurant icon
tween(restaurantIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(restaurantIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Restaurant Upgrade ---
restaurantUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getRestaurantUpgradeCost();
if (money >= cost) {
money -= cost;
restaurantLevel += 1;
updateUI();
saveState();
// Animate restaurant icon
tween(restaurantIcon, {
tint: 0xFF69B4
}, {
duration: 200,
onFinish: function onFinish() {
tween(restaurantIcon, {
tint: 0xFF1493
}, {
duration: 200
});
}
});
}
};
// --- Passive Income Timer ---
var incomeTimer = LK.setInterval(function () {
var farmIncome = getFarmIncome() / 10; // 10x per second
var factoryIncome = getFactoryIncome() / 10;
var miningIncome = getMiningIncome() / 10;
var restaurantIncome = getRestaurantIncome() / 10;
var total = farmIncome + factoryIncome + miningIncome + restaurantIncome;
if (total > 0) {
money += total;
if (money > highScore) {
highScore = money;
storage.highScore = highScore;
}
checkWeeklyTaskReset();
updateUI();
saveState();
}
}, 100);
// --- Save every 5 seconds for redundancy ---
var saveTimer = LK.setInterval(function () {
saveState();
}, 5000);
// --- Reset Button ---
var resetBtn = new UpgradeBtn();
resetBtn.x = 2048 / 2;
resetBtn.y = 2600;
game.addChild(resetBtn);
var resetBtnTxt = new Text2('Reset Game', {
size: 60,
fill: "#fff"
});
resetBtnTxt.anchor.set(0.5, 0.5);
resetBtnTxt.x = resetBtn.x;
resetBtnTxt.y = resetBtn.y;
game.addChild(resetBtnTxt);
resetBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
money = 0;
farmCount = 0;
factoryCount = 0;
farmLevel = 1;
factoryLevel = 1;
miningCount = 0;
miningLevel = 1;
restaurantCount = 0;
restaurantLevel = 1;
highScore = 0;
currentWeeklyTask = 0;
lastWeeklyTaskReset = Date.now();
weeklyTaskProgress = 0;
weeklyTaskCompleted = false;
storage.money = 0;
storage.farmCount = 0;
storage.factoryCount = 0;
storage.farmLevel = 1;
storage.factoryLevel = 1;
storage.miningCount = 0;
storage.miningLevel = 1;
storage.restaurantCount = 0;
storage.restaurantLevel = 1;
storage.highScore = 0;
storage.currentWeeklyTask = 0;
storage.lastWeeklyTaskReset = lastWeeklyTaskReset;
storage.weeklyTaskProgress = 0;
storage.weeklyTaskCompleted = false;
updateUI();
saveState();
// Animate reset button
tween(resetBtn, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
onFinish: function onFinish() {
tween(resetBtn, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
};
// --- Initial UI Update ---
updateUI(); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
money: 0,
farmCount: 0,
factoryCount: 0,
farmLevel: 1,
factoryLevel: 1,
miningCount: 0,
miningLevel: 1,
restaurantCount: 0,
restaurantLevel: 1,
highScore: 0
});
/****
* Classes
****/
// Money Button (Tap to earn)
var MoneyBtn = Container.expand(function () {
var self = Container.call(this);
var btn = self.attachAsset('moneyBtn', {
anchorX: 0.5,
anchorY: 0.5
});
// Animate on tap
self.tapAnim = function () {
tween(self, {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 120,
easing: tween.easeIn
});
}
});
};
return self;
});
// Upgrade Button (for farms/factories)
var UpgradeBtn = Container.expand(function () {
var self = Container.call(this);
var btn = self.attachAsset('upgradeBtn', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// --- Background ---
var bgImage = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
game.addChildAt(bgImage, 0);
// --- Persistent State ---
// Money icon (main tap button)
// Money Farm icon
// Money Factory icon
// Upgrade button
var money = storage.money || 0;
var farmCount = storage.farmCount || 0;
var factoryCount = storage.factoryCount || 0;
var farmLevel = storage.farmLevel || 1;
var factoryLevel = storage.factoryLevel || 1;
var miningCount = storage.miningCount || 0;
var miningLevel = storage.miningLevel || 1;
var restaurantCount = storage.restaurantCount || 0;
var restaurantLevel = storage.restaurantLevel || 1;
var highScore = storage.highScore || 0;
var upgradesPanelOpen = false;
var weeklyTasksPanelOpen = false;
var lastClickTime = 0;
var clickCooldown = 500; // 0.5 seconds in milliseconds
// Initialize weekly task
var WEEKLY_TASKS = ['Earn 10,000 Coins', 'Earn 25,000 Coins', 'Buy 10 Mines', 'Open 2 Pizza Restaurants', 'Open 8 Factories'];
var currentWeeklyTask = storage.currentWeeklyTask || 0;
var lastWeeklyTaskReset = storage.lastWeeklyTaskReset || 0;
var weeklyTaskProgress = storage.weeklyTaskProgress || 0;
var weeklyTaskCompleted = storage.weeklyTaskCompleted || false;
// Check if a week has passed and reset task if needed
function checkWeeklyTaskReset() {
var now = Date.now();
var weekInMs = 7 * 24 * 60 * 60 * 1000;
if (now - lastWeeklyTaskReset > weekInMs) {
currentWeeklyTask = Math.floor(Math.random() * WEEKLY_TASKS.length);
lastWeeklyTaskReset = now;
weeklyTaskProgress = 0;
weeklyTaskCompleted = false;
storage.currentWeeklyTask = currentWeeklyTask;
storage.lastWeeklyTaskReset = lastWeeklyTaskReset;
storage.weeklyTaskProgress = weeklyTaskProgress;
storage.weeklyTaskCompleted = weeklyTaskCompleted;
}
}
checkWeeklyTaskReset();
// --- Constants ---
var FARM_BASE_COST = 100;
var FACTORY_BASE_COST = 1200;
var MINING_BASE_COST = 5000;
var RESTAURANT_BASE_COST = 50000;
var FARM_BASE_INCOME = 1;
var FACTORY_BASE_INCOME = 12;
var MINING_BASE_INCOME = 50;
var RESTAURANT_BASE_INCOME = 200;
var FARM_UPGRADE_COST = 100;
var FACTORY_UPGRADE_COST = 1000;
var MINING_UPGRADE_COST = 5000;
var RESTAURANT_UPGRADE_COST = 50000;
var FARM_UPGRADE_MULT = 1.5;
var FACTORY_UPGRADE_MULT = 1.5;
var MINING_UPGRADE_MULT = 1.5;
var RESTAURANT_UPGRADE_MULT = 1.5;
// --- UI Elements ---
var moneyBtn = new MoneyBtn();
moneyBtn.x = 2048 / 2;
moneyBtn.y = 1100;
game.addChild(moneyBtn);
var moneyTxt = new Text2('', {
size: 180,
fill: "#fff"
});
moneyTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(moneyTxt);
var highScoreTxt = new Text2('', {
size: 80,
fill: 0xFFD700
});
highScoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreTxt);
highScoreTxt.y = 180;
// --- Upgrades Button ---
var upgradesBtn = new UpgradeBtn();
upgradesBtn.x = 2048 / 2;
upgradesBtn.y = 1800;
game.addChild(upgradesBtn);
var upgradesBtnTxt = new Text2('Upgrades', {
size: 80,
fill: "#fff"
});
upgradesBtnTxt.anchor.set(0.5, 0.5);
upgradesBtnTxt.x = upgradesBtn.x;
upgradesBtnTxt.y = upgradesBtn.y;
game.addChild(upgradesBtnTxt);
// --- Weekly Tasks Button ---
var weeklyTasksBtn = new UpgradeBtn();
weeklyTasksBtn.x = 2048 / 2;
weeklyTasksBtn.y = 2000;
game.addChild(weeklyTasksBtn);
var weeklyTasksBtnTxt = new Text2('Weekly Tasks', {
size: 80,
fill: "#fff"
});
weeklyTasksBtnTxt.anchor.set(0.5, 0.5);
weeklyTasksBtnTxt.x = weeklyTasksBtn.x;
weeklyTasksBtnTxt.y = weeklyTasksBtn.y;
game.addChild(weeklyTasksBtnTxt);
// --- Upgrade Panel ---
var panelBg = LK.getAsset('upgradePanel', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 1366
});
panelBg.visible = false;
game.addChild(panelBg);
var closeBtn = LK.getAsset('closePanelBtn', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + 750,
y: 1366 - 900
});
closeBtn.visible = false;
game.addChild(closeBtn);
var closeBtnTxt = new Text2('X', {
size: 60,
fill: "#fff"
});
closeBtnTxt.anchor.set(0.5, 0.5);
closeBtnTxt.x = closeBtn.x;
closeBtnTxt.y = closeBtn.y;
game.addChild(closeBtnTxt);
// --- Farm Section (in panel) ---
var farmIcon = LK.getAsset('farmIcon', {
anchorX: 0.5,
anchorY: 0.5
});
farmIcon.x = 350;
farmIcon.y = 1800;
farmIcon.visible = false;
game.addChild(farmIcon);
var farmCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
farmCountTxt.anchor.set(0.5, 0.5);
farmCountTxt.x = farmIcon.x;
farmCountTxt.y = farmIcon.y + 220;
farmCountTxt.visible = false;
game.addChild(farmCountTxt);
var farmBuyBtn = new UpgradeBtn();
farmBuyBtn.x = 350;
farmBuyBtn.y = farmIcon.y + 380;
farmBuyBtn.visible = false;
game.addChild(farmBuyBtn);
var farmBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
farmBuyTxt.anchor.set(0.5, 0.5);
farmBuyTxt.x = farmBuyBtn.x;
farmBuyTxt.y = farmBuyBtn.y;
farmBuyTxt.visible = false;
game.addChild(farmBuyTxt);
var farmUpgradeBtn = new UpgradeBtn();
farmUpgradeBtn.x = 350;
farmUpgradeBtn.y = farmBuyBtn.y + 180;
farmUpgradeBtn.visible = false;
game.addChild(farmUpgradeBtn);
var farmUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
farmUpgradeTxt.anchor.set(0.5, 0.5);
farmUpgradeTxt.x = farmUpgradeBtn.x;
farmUpgradeTxt.y = farmUpgradeBtn.y;
farmUpgradeTxt.visible = false;
game.addChild(farmUpgradeTxt);
// --- Factory Section (in panel) ---
var factoryIcon = LK.getAsset('factoryIcon', {
anchorX: 0.5,
anchorY: 0.5
});
factoryIcon.x = 1698;
factoryIcon.y = 1800;
factoryIcon.visible = false;
game.addChild(factoryIcon);
var factoryCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
factoryCountTxt.anchor.set(0.5, 0.5);
factoryCountTxt.x = factoryIcon.x;
factoryCountTxt.y = factoryIcon.y + 220;
factoryCountTxt.visible = false;
game.addChild(factoryCountTxt);
var factoryBuyBtn = new UpgradeBtn();
factoryBuyBtn.x = 1698;
factoryBuyBtn.y = factoryIcon.y + 380;
factoryBuyBtn.visible = false;
game.addChild(factoryBuyBtn);
var factoryBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
factoryBuyTxt.anchor.set(0.5, 0.5);
factoryBuyTxt.x = factoryBuyBtn.x;
factoryBuyTxt.y = factoryBuyBtn.y;
factoryBuyTxt.visible = false;
game.addChild(factoryBuyTxt);
var factoryUpgradeBtn = new UpgradeBtn();
factoryUpgradeBtn.x = 1698;
factoryUpgradeBtn.y = factoryBuyBtn.y + 180;
factoryUpgradeBtn.visible = false;
game.addChild(factoryUpgradeBtn);
var factoryUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
factoryUpgradeTxt.anchor.set(0.5, 0.5);
factoryUpgradeTxt.x = factoryUpgradeBtn.x;
factoryUpgradeTxt.y = factoryUpgradeBtn.y;
factoryUpgradeTxt.visible = false;
game.addChild(factoryUpgradeTxt);
// --- Mining Section (in panel) ---
var miningIcon = LK.getAsset('miningIcon', {
anchorX: 0.5,
anchorY: 0.5
});
miningIcon.x = 1024;
miningIcon.y = 1800;
miningIcon.visible = false;
game.addChild(miningIcon);
var miningCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
miningCountTxt.anchor.set(0.5, 0.5);
miningCountTxt.x = miningIcon.x;
miningCountTxt.y = miningIcon.y + 220;
miningCountTxt.visible = false;
game.addChild(miningCountTxt);
var miningBuyBtn = new UpgradeBtn();
miningBuyBtn.x = 1024;
miningBuyBtn.y = miningIcon.y + 380;
miningBuyBtn.visible = false;
game.addChild(miningBuyBtn);
var miningBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
miningBuyTxt.anchor.set(0.5, 0.5);
miningBuyTxt.x = miningBuyBtn.x;
miningBuyTxt.y = miningBuyBtn.y;
miningBuyTxt.visible = false;
game.addChild(miningBuyTxt);
var miningUpgradeBtn = new UpgradeBtn();
miningUpgradeBtn.x = 1024;
miningUpgradeBtn.y = miningBuyBtn.y + 180;
miningUpgradeBtn.visible = false;
game.addChild(miningUpgradeBtn);
var miningUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
miningUpgradeTxt.anchor.set(0.5, 0.5);
miningUpgradeTxt.x = miningUpgradeBtn.x;
miningUpgradeTxt.y = miningUpgradeBtn.y;
miningUpgradeTxt.visible = false;
game.addChild(miningUpgradeTxt);
// --- Restaurant Section (in panel) ---
var restaurantIcon = LK.getAsset('restaurantIcon', {
anchorX: 0.5,
anchorY: 0.5
});
restaurantIcon.x = 1024;
restaurantIcon.y = 600;
restaurantIcon.visible = false;
game.addChild(restaurantIcon);
var restaurantCountTxt = new Text2('', {
size: 100,
fill: "#fff"
});
restaurantCountTxt.anchor.set(0.5, 0.5);
restaurantCountTxt.x = restaurantIcon.x;
restaurantCountTxt.y = restaurantIcon.y + 220;
restaurantCountTxt.visible = false;
game.addChild(restaurantCountTxt);
var restaurantBuyBtn = new UpgradeBtn();
restaurantBuyBtn.x = 1024;
restaurantBuyBtn.y = restaurantIcon.y + 380;
restaurantBuyBtn.visible = false;
game.addChild(restaurantBuyBtn);
var restaurantBuyTxt = new Text2('', {
size: 60,
fill: "#fff"
});
restaurantBuyTxt.anchor.set(0.5, 0.5);
restaurantBuyTxt.x = restaurantBuyBtn.x;
restaurantBuyTxt.y = restaurantBuyBtn.y;
restaurantBuyTxt.visible = false;
game.addChild(restaurantBuyTxt);
var restaurantUpgradeBtn = new UpgradeBtn();
restaurantUpgradeBtn.x = 1024;
restaurantUpgradeBtn.y = restaurantBuyBtn.y + 180;
restaurantUpgradeBtn.visible = false;
game.addChild(restaurantUpgradeBtn);
var restaurantUpgradeTxt = new Text2('', {
size: 60,
fill: "#fff"
});
restaurantUpgradeTxt.anchor.set(0.5, 0.5);
restaurantUpgradeTxt.x = restaurantUpgradeBtn.x;
restaurantUpgradeTxt.y = restaurantUpgradeBtn.y;
restaurantUpgradeTxt.visible = false;
game.addChild(restaurantUpgradeTxt);
// --- Weekly Tasks Panel ---
var weeklyTaskPanelBg = LK.getAsset('upgradePanel', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 1366
});
weeklyTaskPanelBg.visible = false;
game.addChild(weeklyTaskPanelBg);
var weeklyTaskCloseBtn = LK.getAsset('closePanelBtn', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + 750,
y: 1366 - 900
});
weeklyTaskCloseBtn.visible = false;
game.addChild(weeklyTaskCloseBtn);
var weeklyTaskCloseBtnTxt = new Text2('X', {
size: 60,
fill: "#fff"
});
weeklyTaskCloseBtnTxt.anchor.set(0.5, 0.5);
weeklyTaskCloseBtnTxt.x = weeklyTaskCloseBtn.x;
weeklyTaskCloseBtnTxt.y = weeklyTaskCloseBtn.y;
game.addChild(weeklyTaskCloseBtnTxt);
var weeklyTaskTitleTxt = new Text2('Weekly Task', {
size: 120,
fill: 0xFFD700
});
weeklyTaskTitleTxt.anchor.set(0.5, 0);
weeklyTaskTitleTxt.x = 2048 / 2;
weeklyTaskTitleTxt.y = 500;
weeklyTaskTitleTxt.visible = false;
game.addChild(weeklyTaskTitleTxt);
var weeklyTaskDescTxt = new Text2('', {
size: 100,
fill: "#fff"
});
weeklyTaskDescTxt.anchor.set(0.5, 0);
weeklyTaskDescTxt.x = 2048 / 2;
weeklyTaskDescTxt.y = 700;
weeklyTaskDescTxt.visible = false;
game.addChild(weeklyTaskDescTxt);
var weeklyTaskProgressTxt = new Text2('', {
size: 80,
fill: "#fff"
});
weeklyTaskProgressTxt.anchor.set(0.5, 0);
weeklyTaskProgressTxt.x = 2048 / 2;
weeklyTaskProgressTxt.y = 1000;
weeklyTaskProgressTxt.visible = false;
game.addChild(weeklyTaskProgressTxt);
var weeklyTaskCompletedTxt = new Text2('COMPLETED!', {
size: 100,
fill: 0x00FF00
});
weeklyTaskCompletedTxt.anchor.set(0.5, 0.5);
weeklyTaskCompletedTxt.x = 2048 / 2;
weeklyTaskCompletedTxt.y = 1300;
weeklyTaskCompletedTxt.visible = false;
game.addChild(weeklyTaskCompletedTxt);
// --- Helper Functions ---
function formatMoney(val) {
if (val >= 1e9) return (val / 1e9).toFixed(2) + "B";
if (val >= 1e6) return (val / 1e6).toFixed(2) + "M";
if (val >= 1e3) return (val / 1e3).toFixed(2) + "K";
return Math.floor(val) + "";
}
function getFarmCost() {
return Math.floor(FARM_BASE_COST * Math.pow(1.15, farmCount));
}
function getFactoryCost() {
return Math.floor(FACTORY_BASE_COST * Math.pow(1.18, factoryCount));
}
function getFarmIncome() {
return farmCount * FARM_BASE_INCOME * farmLevel;
}
function getFactoryIncome() {
return factoryCount * FACTORY_BASE_INCOME * factoryLevel;
}
function getMiningCost() {
return Math.floor(MINING_BASE_COST * Math.pow(1.25, miningCount));
}
function getMiningIncome() {
return miningCount * MINING_BASE_INCOME * miningLevel;
}
function getRestaurantCost() {
return Math.floor(RESTAURANT_BASE_COST * Math.pow(1.3, restaurantCount));
}
function getRestaurantIncome() {
return restaurantCount * RESTAURANT_BASE_INCOME * restaurantLevel;
}
function getRestaurantUpgradeCost() {
return Math.floor(RESTAURANT_UPGRADE_COST * Math.pow(RESTAURANT_UPGRADE_MULT, restaurantLevel - 1));
}
function getMiningUpgradeCost() {
return Math.floor(MINING_UPGRADE_COST * Math.pow(MINING_UPGRADE_MULT, miningLevel - 1));
}
function getFarmUpgradeCost() {
return Math.floor(FARM_UPGRADE_COST * Math.pow(FARM_UPGRADE_MULT, farmLevel - 1));
}
function getFactoryUpgradeCost() {
return Math.floor(FACTORY_UPGRADE_COST * Math.pow(FACTORY_UPGRADE_MULT, factoryLevel - 1));
}
function updateWeeklyTaskProgress() {
var task = WEEKLY_TASKS[currentWeeklyTask];
if (task === 'Earn 10,000 Coins') {
weeklyTaskProgress = money;
} else if (task === 'Earn 25,000 Coins') {
weeklyTaskProgress = money;
} else if (task === 'Buy 10 Mines') {
weeklyTaskProgress = miningCount;
} else if (task === 'Open 2 Pizza Restaurants') {
weeklyTaskProgress = restaurantCount;
} else if (task === 'Open 8 Factories') {
weeklyTaskProgress = factoryCount;
}
if (checkWeeklyTaskCompletion()) {
weeklyTaskCompleted = true;
storage.weeklyTaskCompleted = true;
}
storage.weeklyTaskProgress = weeklyTaskProgress;
}
function checkWeeklyTaskCompletion() {
var task = WEEKLY_TASKS[currentWeeklyTask];
if (task === 'Earn 10,000 Coins') {
return money >= 10000;
} else if (task === 'Earn 25,000 Coins') {
return money >= 25000;
} else if (task === 'Buy 10 Mines') {
return miningCount >= 10;
} else if (task === 'Open 2 Pizza Restaurants') {
return restaurantCount >= 2;
} else if (task === 'Open 8 Factories') {
return factoryCount >= 8;
}
return false;
}
function getWeeklyTaskTarget() {
var task = WEEKLY_TASKS[currentWeeklyTask];
if (task === 'Earn 10,000 Coins') {
return 10000;
} else if (task === 'Earn 25,000 Coins') {
return 25000;
} else if (task === 'Buy 10 Mines') {
return 10;
} else if (task === 'Open 2 Pizza Restaurants') {
return 2;
} else if (task === 'Open 8 Factories') {
return 8;
}
return 0;
}
function saveState() {
storage.money = money;
storage.farmCount = farmCount;
storage.factoryCount = factoryCount;
storage.farmLevel = farmLevel;
storage.factoryLevel = factoryLevel;
storage.miningCount = miningCount;
storage.miningLevel = miningLevel;
storage.restaurantCount = restaurantCount;
storage.restaurantLevel = restaurantLevel;
storage.currentWeeklyTask = currentWeeklyTask;
storage.lastWeeklyTaskReset = lastWeeklyTaskReset;
storage.weeklyTaskProgress = weeklyTaskProgress;
storage.weeklyTaskCompleted = weeklyTaskCompleted;
if (money > highScore) {
highScore = money;
storage.highScore = highScore;
}
}
// --- UI Update ---
function updateUI() {
moneyTxt.setText("Money: $" + formatMoney(money));
highScoreTxt.setText("High Score: $" + formatMoney(highScore));
if (upgradesPanelOpen) {
farmCountTxt.setText("Farms: " + farmCount + "\nIncome: $" + formatMoney(getFarmIncome()) + "/s");
farmBuyTxt.setText("Buy Farm\n$" + formatMoney(getFarmCost()));
farmUpgradeTxt.setText("Upgrade Farm\nLvl " + farmLevel + " ($" + formatMoney(getFarmUpgradeCost()) + ")");
factoryCountTxt.setText("Factories: " + factoryCount + "\nIncome: $" + formatMoney(getFactoryIncome()) + "/s");
factoryBuyTxt.setText("Buy Factory\n$" + formatMoney(getFactoryCost()));
factoryUpgradeTxt.setText("Upgrade Factory\nLvl " + factoryLevel + " ($" + formatMoney(getFactoryUpgradeCost()) + ")");
miningCountTxt.setText("Mines: " + miningCount + "\nIncome: $" + formatMoney(getMiningIncome()) + "/s");
miningBuyTxt.setText("Buy Mine\n$" + formatMoney(getMiningCost()));
miningUpgradeTxt.setText("Upgrade Mine\nLvl " + miningLevel + " ($" + formatMoney(getMiningUpgradeCost()) + ")");
restaurantCountTxt.setText("Restaurants: " + restaurantCount + "\nIncome: $" + formatMoney(getRestaurantIncome()) + "/s");
restaurantBuyTxt.setText("Buy Restaurant\n$" + formatMoney(getRestaurantCost()));
restaurantUpgradeTxt.setText("Upgrade Restaurant\nLvl " + restaurantLevel + " ($" + formatMoney(getRestaurantUpgradeCost()) + ")");
}
if (weeklyTasksPanelOpen) {
updateWeeklyTaskProgress();
var task = WEEKLY_TASKS[currentWeeklyTask];
var target = getWeeklyTaskTarget();
weeklyTaskDescTxt.setText(task);
if (weeklyTaskCompleted) {
weeklyTaskProgressTxt.setText("Progress: " + weeklyTaskProgress + "/" + target);
weeklyTaskCompletedTxt.visible = true;
} else {
weeklyTaskProgressTxt.setText("Progress: " + weeklyTaskProgress + "/" + target);
weeklyTaskCompletedTxt.visible = false;
}
}
}
// --- Toggle Upgrades Panel ---
function toggleUpgradesPanel() {
upgradesPanelOpen = !upgradesPanelOpen;
panelBg.visible = upgradesPanelOpen;
closeBtn.visible = upgradesPanelOpen;
closeBtnTxt.visible = upgradesPanelOpen;
farmIcon.visible = upgradesPanelOpen;
farmCountTxt.visible = upgradesPanelOpen;
farmBuyBtn.visible = upgradesPanelOpen;
farmBuyTxt.visible = upgradesPanelOpen;
farmUpgradeBtn.visible = upgradesPanelOpen;
farmUpgradeTxt.visible = upgradesPanelOpen;
factoryIcon.visible = upgradesPanelOpen;
factoryCountTxt.visible = upgradesPanelOpen;
factoryBuyBtn.visible = upgradesPanelOpen;
factoryBuyTxt.visible = upgradesPanelOpen;
factoryUpgradeBtn.visible = upgradesPanelOpen;
factoryUpgradeTxt.visible = upgradesPanelOpen;
miningIcon.visible = upgradesPanelOpen;
miningCountTxt.visible = upgradesPanelOpen;
miningBuyBtn.visible = upgradesPanelOpen;
miningBuyTxt.visible = upgradesPanelOpen;
miningUpgradeBtn.visible = upgradesPanelOpen;
miningUpgradeTxt.visible = upgradesPanelOpen;
restaurantIcon.visible = upgradesPanelOpen;
restaurantCountTxt.visible = upgradesPanelOpen;
restaurantBuyBtn.visible = upgradesPanelOpen;
restaurantBuyTxt.visible = upgradesPanelOpen;
restaurantUpgradeBtn.visible = upgradesPanelOpen;
restaurantUpgradeTxt.visible = upgradesPanelOpen;
updateUI();
}
upgradesBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleUpgradesPanel();
};
closeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleUpgradesPanel();
};
// --- Toggle Weekly Tasks Panel ---
function toggleWeeklyTasksPanel() {
weeklyTasksPanelOpen = !weeklyTasksPanelOpen;
weeklyTaskPanelBg.visible = weeklyTasksPanelOpen;
weeklyTaskCloseBtn.visible = weeklyTasksPanelOpen;
weeklyTaskCloseBtnTxt.visible = weeklyTasksPanelOpen;
weeklyTaskTitleTxt.visible = weeklyTasksPanelOpen;
weeklyTaskDescTxt.visible = weeklyTasksPanelOpen;
weeklyTaskProgressTxt.visible = weeklyTasksPanelOpen;
if (weeklyTasksPanelOpen) {
updateUI();
}
}
weeklyTasksBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleWeeklyTasksPanel();
};
weeklyTaskCloseBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
toggleWeeklyTasksPanel();
};
// --- Money Button Tap ---
moneyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var add = 1 + farmLevel + factoryLevel;
money += add;
if (money > highScore) {
highScore = money;
storage.highScore = highScore;
}
moneyBtn.tapAnim();
updateUI();
saveState();
};
// --- Farm Buy ---
farmBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFarmCost();
if (money >= cost) {
money -= cost;
farmCount += 1;
updateUI();
saveState();
// Animate farm icon
tween(farmIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(farmIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Farm Upgrade ---
farmUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFarmUpgradeCost();
if (money >= cost) {
money -= cost;
farmLevel += 1;
updateUI();
saveState();
// Animate farm icon
tween(farmIcon, {
tint: 0xA5D6A7
}, {
duration: 200,
onFinish: function onFinish() {
tween(farmIcon, {
tint: 0x4CAF50
}, {
duration: 200
});
}
});
}
};
// --- Factory Buy ---
factoryBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFactoryCost();
if (money >= cost) {
money -= cost;
factoryCount += 1;
updateUI();
saveState();
// Animate factory icon
tween(factoryIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(factoryIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Factory Upgrade ---
factoryUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getFactoryUpgradeCost();
if (money >= cost) {
money -= cost;
factoryLevel += 1;
updateUI();
saveState();
// Animate factory icon
tween(factoryIcon, {
tint: 0x90CAF9
}, {
duration: 200,
onFinish: function onFinish() {
tween(factoryIcon, {
tint: 0x2196F3
}, {
duration: 200
});
}
});
}
};
// --- Mining Buy ---
miningBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getMiningCost();
if (money >= cost) {
money -= cost;
miningCount += 1;
updateUI();
saveState();
// Animate mining icon
tween(miningIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(miningIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Mining Upgrade ---
miningUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getMiningUpgradeCost();
if (money >= cost) {
money -= cost;
miningLevel += 1;
updateUI();
saveState();
// Animate mining icon
tween(miningIcon, {
tint: 0xFFD700
}, {
duration: 200,
onFinish: function onFinish() {
tween(miningIcon, {
tint: 0xFFA500
}, {
duration: 200
});
}
});
}
};
// --- Restaurant Buy ---
restaurantBuyBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getRestaurantCost();
if (money >= cost) {
money -= cost;
restaurantCount += 1;
updateUI();
saveState();
// Animate restaurant icon
tween(restaurantIcon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(restaurantIcon, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
// --- Restaurant Upgrade ---
restaurantUpgradeBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
var cost = getRestaurantUpgradeCost();
if (money >= cost) {
money -= cost;
restaurantLevel += 1;
updateUI();
saveState();
// Animate restaurant icon
tween(restaurantIcon, {
tint: 0xFF69B4
}, {
duration: 200,
onFinish: function onFinish() {
tween(restaurantIcon, {
tint: 0xFF1493
}, {
duration: 200
});
}
});
}
};
// --- Passive Income Timer ---
var incomeTimer = LK.setInterval(function () {
var farmIncome = getFarmIncome() / 10; // 10x per second
var factoryIncome = getFactoryIncome() / 10;
var miningIncome = getMiningIncome() / 10;
var restaurantIncome = getRestaurantIncome() / 10;
var total = farmIncome + factoryIncome + miningIncome + restaurantIncome;
if (total > 0) {
money += total;
if (money > highScore) {
highScore = money;
storage.highScore = highScore;
}
checkWeeklyTaskReset();
updateUI();
saveState();
}
}, 100);
// --- Save every 5 seconds for redundancy ---
var saveTimer = LK.setInterval(function () {
saveState();
}, 5000);
// --- Reset Button ---
var resetBtn = new UpgradeBtn();
resetBtn.x = 2048 / 2;
resetBtn.y = 2600;
game.addChild(resetBtn);
var resetBtnTxt = new Text2('Reset Game', {
size: 60,
fill: "#fff"
});
resetBtnTxt.anchor.set(0.5, 0.5);
resetBtnTxt.x = resetBtn.x;
resetBtnTxt.y = resetBtn.y;
game.addChild(resetBtnTxt);
resetBtn.down = function (x, y, obj) {
var now = Date.now();
if (now - lastClickTime < clickCooldown) {
return;
}
lastClickTime = now;
money = 0;
farmCount = 0;
factoryCount = 0;
farmLevel = 1;
factoryLevel = 1;
miningCount = 0;
miningLevel = 1;
restaurantCount = 0;
restaurantLevel = 1;
highScore = 0;
currentWeeklyTask = 0;
lastWeeklyTaskReset = Date.now();
weeklyTaskProgress = 0;
weeklyTaskCompleted = false;
storage.money = 0;
storage.farmCount = 0;
storage.factoryCount = 0;
storage.farmLevel = 1;
storage.factoryLevel = 1;
storage.miningCount = 0;
storage.miningLevel = 1;
storage.restaurantCount = 0;
storage.restaurantLevel = 1;
storage.highScore = 0;
storage.currentWeeklyTask = 0;
storage.lastWeeklyTaskReset = lastWeeklyTaskReset;
storage.weeklyTaskProgress = 0;
storage.weeklyTaskCompleted = false;
updateUI();
saveState();
// Animate reset button
tween(resetBtn, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
onFinish: function onFinish() {
tween(resetBtn, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
};
// --- Initial UI Update ---
updateUI();
Coin icon . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
field with money tree. In-Game asset. 2d. High contrast. No shadows
money factory. In-Game asset. 2d. High contrast. No shadows
A diamond pickaxe resting on a mining icon, with raining dollar signs in the background. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat