User prompt
dont increase the purchasing prices this much
User prompt
take the hives further from each other. add honey production effects. add more perks and display every perk's effect ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
expand the perks
User prompt
add purchaseable perks to the game.
User prompt
everything should be sold for money. not honey
User prompt
put the display to letf bottom corner
User prompt
give me a money display and display how many honey is being produced per second and how many is being jarred and how many is being sold per second
User prompt
make the images and the game's buttons and text much bigger than this
User prompt
make the bee hive look like a bee hive. make the background grass. there should be a packaging mechanism that i can upgrade which puts the honey in a jar before selling it. after that, there should be a sales dept to sell the honey and i should be able to sell the honey for free ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Timeout.tick error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.savedHives = hivesData;' Line Number: 332
Code edit (1 edits merged)
Please save this source code
User prompt
Bee Hive Tycoon
Initial prompt
we're making a tycoon game. i want a game where we have bee hives. in these bee hives, we have bees.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BuyButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('buyButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('Buy Hive\n$' + hiveCost, {
size: 48,
fill: 0x000000
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.update = function () {
buttonText.setText('Buy Hive\n$' + hiveCost);
if (totalMoney >= hiveCost) {
buttonGraphics.tint = 0x32CD32;
buttonGraphics.alpha = 1.0;
} else {
buttonGraphics.tint = 0x888888;
buttonGraphics.alpha = 0.7;
}
};
self.down = function (x, y, obj) {
var actualCost = goldenTouchEnabled ? Math.floor(hiveCost * 0.7) : hiveCost;
if (totalMoney >= actualCost && hives.length < maxHives) {
totalMoney -= actualCost;
createNewHive();
hiveCost = Math.floor(hiveCost * 1.4);
updateHoneyDisplay();
LK.getSound('buy').play();
// Button press animation
tween(self, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
}
});
}
};
return self;
});
var Hive = Container.expand(function () {
var self = Container.call(this);
var hiveGraphics = self.attachAsset('hive', {
anchorX: 0.5,
anchorY: 1.0
});
var beeGraphics = self.attachAsset('bee', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -75
});
self.level = 1;
self.baseProduction = 1;
self.productionRate = self.baseProduction;
self.lastCollectTime = Date.now();
self.honeyAccumulated = 0;
self.upgradeCost = 50;
self.maxHoney = 100;
self.lastBeeAnimation = 0;
var honeyText = new Text2('0', {
size: 40,
fill: 0xFFFFFF
});
honeyText.anchor.set(0.5, 0.5);
honeyText.x = 0;
honeyText.y = -240;
self.addChild(honeyText);
var levelText = new Text2('Lv.1', {
size: 32,
fill: 0x000000
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 0;
levelText.y = -80;
self.addChild(levelText);
self.update = function () {
var currentTime = Date.now();
var deltaTime = (currentTime - self.lastCollectTime) / 1000;
if (deltaTime > 0) {
var honeyToAdd = self.productionRate * deltaTime;
self.honeyAccumulated = Math.min(self.honeyAccumulated + honeyToAdd, self.maxHoney);
self.lastCollectTime = currentTime;
}
honeyText.setText(Math.floor(self.honeyAccumulated));
// Animate bee
if (currentTime - self.lastBeeAnimation > 2000) {
self.lastBeeAnimation = currentTime;
tween(beeGraphics, {
x: 30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(beeGraphics, {
x: -30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(beeGraphics, {
x: 0
}, {
duration: 1000,
easing: tween.easeInOut
});
}
});
}
});
}
// Visual feedback for honey accumulation
if (self.honeyAccumulated > 50) {
hiveGraphics.tint = 0xFFD700;
} else {
hiveGraphics.tint = 0xFFFFFF;
}
// Production sparkle effect
if (self.productionRate > 0 && currentTime % 2000 < 100) {
tween(hiveGraphics, {
tint: 0xFFFF00
}, {
duration: 200,
onFinish: function onFinish() {
tween(hiveGraphics, {
tint: self.honeyAccumulated > 50 ? 0xFFD700 : 0xFFFFFF
}, {
duration: 200
});
}
});
}
};
self.down = function (x, y, obj) {
self.collectHoney();
};
self.collectHoney = function () {
if (self.honeyAccumulated > 0) {
var collected = Math.floor(self.honeyAccumulated);
totalHoney += collected;
self.honeyAccumulated = 0;
updateHoneyDisplay();
LK.getSound('collect').play();
// Flash effect
LK.effects.flashObject(self, 0xFFFF00, 300);
// Animate collection
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 150,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
}
};
self.upgrade = function () {
var actualCost = goldenTouchEnabled ? Math.floor(self.upgradeCost * 0.7) : self.upgradeCost;
if (totalMoney >= actualCost) {
totalMoney -= actualCost;
self.level++;
var productionMultiplier = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * quantumMultiplier;
self.productionRate = self.baseProduction * self.level * productionMultiplier;
self.upgradeCost = Math.floor(self.upgradeCost * 1.3);
var baseCapacity = megaHivesEnabled ? 300 : 100;
self.maxHoney = baseCapacity * self.level;
levelText.setText('Lv.' + self.level);
updateHoneyDisplay();
LK.getSound('upgrade').play();
// Scale animation for upgrade
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
return true;
}
return false;
};
return self;
});
var PackagingMachine = Container.expand(function () {
var self = Container.call(this);
var machineGraphics = self.attachAsset('packagingMachine', {
anchorX: 0.5,
anchorY: 1.0
});
self.level = 1;
self.packagingSpeed = 1;
self.upgradeCost = 200;
self.honeyJarsProduced = 0;
self.lastPackagingTime = Date.now();
var jarGraphics = self.attachAsset('honeyJar', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -50
});
var levelText = new Text2('Lv.1', {
size: 32,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 0;
levelText.y = -40;
self.addChild(levelText);
var jarCountText = new Text2('0 Jars', {
size: 36,
fill: 0xFFFFFF
});
jarCountText.anchor.set(0.5, 0.5);
jarCountText.x = 0;
jarCountText.y = -160;
self.addChild(jarCountText);
self.update = function () {
var currentTime = Date.now();
var deltaTime = (currentTime - self.lastPackagingTime) / 1000;
var packagingTime = instantPackageEnabled ? 0 : 2 / self.packagingSpeed;
if (deltaTime >= packagingTime && totalHoney >= 10) {
var jarsToMake = Math.floor(totalHoney / 10);
jarsToMake = Math.min(jarsToMake, self.packagingSpeed);
totalHoney -= jarsToMake * 10;
self.honeyJarsProduced += jarsToMake;
self.lastPackagingTime = currentTime;
updateHoneyDisplay();
// Animation for jar production
tween(jarGraphics, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 200,
onFinish: function onFinish() {
tween(jarGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
}
jarCountText.setText(self.honeyJarsProduced + ' Jars');
};
self.upgrade = function () {
var actualCost = goldenTouchEnabled ? Math.floor(self.upgradeCost * 0.7) : self.upgradeCost;
if (totalMoney >= actualCost) {
totalMoney -= actualCost;
self.level++;
self.packagingSpeed = self.level * (speedBoostEnabled ? 1.5 : 1);
self.upgradeCost = Math.floor(self.upgradeCost * 1.4);
levelText.setText('Lv.' + self.level);
updateHoneyDisplay();
LK.getSound('upgrade').play();
// Scale animation for upgrade
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
return true;
}
return false;
};
return self;
});
var PerkButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('perkButton', {
anchorX: 0.5,
anchorY: 0.5
});
var nameText = new Text2('', {
size: 28,
fill: 0x000000
});
nameText.anchor.set(0.5, 0.5);
nameText.y = -20;
self.addChild(nameText);
var costText = new Text2('', {
size: 24,
fill: 0x000000
});
costText.anchor.set(0.5, 0.5);
costText.y = 15;
self.addChild(costText);
self.perk = null;
self.perkIndex = -1;
self.setPerk = function (perk, index) {
self.perk = perk;
self.perkIndex = index;
nameText.setText(perk.name);
if (perk.purchased) {
costText.setText('OWNED');
buttonGraphics.tint = 0x90EE90;
} else {
costText.setText('$' + perk.cost);
if (totalMoney >= perk.cost) {
buttonGraphics.tint = 0x4ECDC4;
} else {
buttonGraphics.tint = 0x888888;
}
}
};
self.down = function (x, y, obj) {
if (self.perk && !self.perk.purchased && totalMoney >= self.perk.cost) {
totalMoney -= self.perk.cost;
self.perk.purchased = true;
applyPerk(self.perk.effect);
updateHoneyDisplay();
LK.getSound('perk').play();
// Update button appearance
costText.setText('OWNED');
buttonGraphics.tint = 0x90EE90;
// Save perk purchase
if (!storage.purchasedPerks) storage.purchasedPerks = [];
storage.purchasedPerks[self.perkIndex] = true;
}
};
return self;
});
var PerkShop = Container.expand(function () {
var self = Container.call(this);
var shopGraphics = self.attachAsset('perkShopButton', {
anchorX: 0.5,
anchorY: 0.5
});
var shopText = new Text2('Perks\nShop', {
size: 40,
fill: 0xFFFFFF
});
shopText.anchor.set(0.5, 0.5);
self.addChild(shopText);
self.isOpen = false;
self.perkButtons = [];
self.perks = [{
name: 'Auto Collector',
description: 'Collects honey\nautomatically every 1s',
cost: 500,
purchased: false,
effect: 'autoCollect'
}, {
name: 'Double Production',
description: 'Doubles honey\nproduction rate',
cost: 1000,
purchased: false,
effect: 'doubleProduction'
}, {
name: 'Speed Boost',
description: 'Packaging/sales\n50% faster',
cost: 750,
purchased: false,
effect: 'speedBoost'
}, {
name: 'Money Multiplier',
description: 'Get 50% more\nmoney from sales',
cost: 1500,
purchased: false,
effect: 'moneyMultiplier'
}, {
name: 'Mega Hives',
description: 'Increases max honey\ncapacity by 200%',
cost: 2000,
purchased: false,
effect: 'megaHives'
}, {
name: 'Golden Touch',
description: 'All upgrade costs\nreduced by 30%',
cost: 2500,
purchased: false,
effect: 'goldenTouch'
}, {
name: 'Bee Swarm',
description: 'Triple production\nfor all new hives',
cost: 3000,
purchased: false,
effect: 'beeSwarm'
}, {
name: 'Instant Package',
description: 'Packaging happens\ninstantly',
cost: 3500,
purchased: false,
effect: 'instantPackage'
}, {
name: 'Premium Honey',
description: 'Each jar sells for\n100% more money',
cost: 4000,
purchased: false,
effect: 'premiumHoney'
}, {
name: 'Hive Master',
description: 'Unlock 8 more\nhive slots (20 total)',
cost: 5000,
purchased: false,
effect: 'hiveMaster'
}, {
name: 'Quantum Bees',
description: 'Production increases\n10% every 5 seconds',
cost: 7500,
purchased: false,
effect: 'quantumBees'
}, {
name: 'Money Printer',
description: 'Generate $10+/second\npassive income',
cost: 10000,
purchased: false,
effect: 'moneyPrinter'
}, {
name: 'Super Efficiency',
description: 'Hives produce honey\n4x faster',
cost: 15000,
purchased: false,
effect: 'superEfficiency'
}, {
name: 'Royal Jelly',
description: 'New hives start\nat level 3',
cost: 20000,
purchased: false,
effect: 'royalJelly'
}, {
name: 'Honey Rain',
description: 'All hives gain 50\nhoney every 10s',
cost: 25000,
purchased: false,
effect: 'honeyRain'
}, {
name: 'Market Boom',
description: 'Jar prices increase\nby $15 each',
cost: 30000,
purchased: false,
effect: 'marketBoom'
}, {
name: 'Time Warp',
description: 'Everything runs\n2x faster',
cost: 40000,
purchased: false,
effect: 'timeWarp'
}, {
name: 'Infinite Hives',
description: 'Remove hive limit\n(50 max hives)',
cost: 50000,
purchased: false,
effect: 'infiniteHives'
}];
self.down = function (x, y, obj) {
if (!self.isOpen) {
self.openShop();
} else {
self.closeShop();
}
};
self.openShop = function () {
self.isOpen = true;
shopText.setText('Close\nShop');
for (var i = 0; i < self.perks.length; i++) {
var perk = self.perks[i];
var perkButton = new PerkButton();
perkButton.setPerk(perk, i);
perkButton.x = self.x + i % 2 * 280 - 140;
perkButton.y = self.y + Math.floor(i / 2) * 120 + 200;
game.addChild(perkButton);
self.perkButtons.push(perkButton);
}
};
self.closeShop = function () {
self.isOpen = false;
shopText.setText('Perks\nShop');
for (var i = 0; i < self.perkButtons.length; i++) {
self.perkButtons[i].destroy();
}
self.perkButtons = [];
};
return self;
});
var SalesDepartment = Container.expand(function () {
var self = Container.call(this);
var salesGraphics = self.attachAsset('salesDept', {
anchorX: 0.5,
anchorY: 1.0
});
self.level = 1;
self.salesSpeed = 1;
self.upgradeCost = 300;
self.lastSaleTime = Date.now();
self.totalRevenue = 0;
var levelText = new Text2('Lv.1', {
size: 32,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 0;
levelText.y = -40;
self.addChild(levelText);
var revenueText = new Text2('$0', {
size: 36,
fill: 0xFFFFFF
});
revenueText.anchor.set(0.5, 0.5);
revenueText.x = 0;
revenueText.y = -160;
self.addChild(revenueText);
self.update = function () {
var currentTime = Date.now();
var deltaTime = (currentTime - self.lastSaleTime) / 1000;
var salesTime = timeWarpEnabled ? 1.5 : 3;
if (deltaTime >= salesTime / self.salesSpeed && packagingMachine && packagingMachine.honeyJarsProduced > 0) {
var jarsToSell = Math.min(packagingMachine.honeyJarsProduced, self.salesSpeed);
var basePrice = 25;
var moneyMult = moneyMultiplierEnabled ? 1.5 : 1;
var premiumMult = premiumHoneyEnabled ? 2.0 : 1;
var marketBonus = marketBoomEnabled ? 15 : 0;
var revenue = jarsToSell * (basePrice + marketBonus) * moneyMult * premiumMult;
packagingMachine.honeyJarsProduced -= jarsToSell;
totalMoney += revenue;
self.totalRevenue += revenue;
self.lastSaleTime = currentTime;
updateHoneyDisplay();
// Animation for sales
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 150,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
}
revenueText.setText('$' + self.totalRevenue);
};
self.upgrade = function () {
var actualCost = goldenTouchEnabled ? Math.floor(self.upgradeCost * 0.7) : self.upgradeCost;
if (totalMoney >= actualCost) {
totalMoney -= actualCost;
self.level++;
self.salesSpeed = self.level * (speedBoostEnabled ? 1.5 : 1);
self.upgradeCost = Math.floor(self.upgradeCost * 1.4);
levelText.setText('Lv.' + self.level);
updateHoneyDisplay();
LK.getSound('upgrade').play();
// Scale animation for upgrade
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
return true;
}
return false;
};
return self;
});
var UpgradeButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('Upgrade', {
size: 36,
fill: 0x000000
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.targetHive = null;
self.update = function () {
if (self.targetHive) {
buttonText.setText('Upgrade\n$' + self.targetHive.upgradeCost);
if (totalMoney >= self.targetHive.upgradeCost) {
buttonGraphics.tint = 0x90EE90;
buttonGraphics.alpha = 1.0;
} else {
buttonGraphics.tint = 0x666666;
buttonGraphics.alpha = 0.7;
}
}
};
self.down = function (x, y, obj) {
if (self.targetHive) {
self.targetHive.upgrade();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228B22
});
/****
* Game Code
****/
var totalHoney = storage.totalHoney || 0;
var totalMoney = storage.totalMoney || 0;
var hiveCost = storage.hiveCost || 100;
var maxHives = 12;
var hives = [];
var honeyDisplay = new Text2('Honey: 0', {
size: 72,
fill: 0xFFFFFF
});
honeyDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(honeyDisplay);
honeyDisplay.y = -320;
var moneyDisplay = new Text2('Money: $0', {
size: 64,
fill: 0x90EE90
});
moneyDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(moneyDisplay);
moneyDisplay.y = -240;
var productionDisplay = new Text2('Honey/s: 0', {
size: 48,
fill: 0xFFD700
});
productionDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(productionDisplay);
productionDisplay.y = -170;
var packagingDisplay = new Text2('Jarring/s: 0', {
size: 48,
fill: 0x4682B4
});
packagingDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(packagingDisplay);
packagingDisplay.y = -110;
var salesDisplay = new Text2('Selling/s: 0', {
size: 48,
fill: 0x8A2BE2
});
salesDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(salesDisplay);
salesDisplay.y = -50;
var titleText = new Text2('Bee Hive Tycoon', {
size: 96,
fill: 0xFFD700
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 20;
var buyButton = game.addChild(new BuyButton());
buyButton.x = 2048 / 2;
buyButton.y = 2732 - 120;
var upgradeButtons = [];
var packagingMachine = null;
var salesDepartment = null;
var packagingUpgradeButton = null;
var salesUpgradeButton = null;
var perkShop = null;
var autoCollectEnabled = false;
var doubleProductionEnabled = false;
var speedBoostEnabled = false;
var moneyMultiplierEnabled = false;
var megaHivesEnabled = false;
var goldenTouchEnabled = false;
var beeSwarmEnabled = false;
var instantPackageEnabled = false;
var premiumHoneyEnabled = false;
var hiveMasterEnabled = false;
var quantumBeesEnabled = false;
var quantumMultiplier = 1.0;
var moneyPrinterEnabled = false;
var lastMoneyPrintTime = Date.now();
var superEfficiencyEnabled = false;
var royalJellyEnabled = false;
var honeyRainEnabled = false;
var lastHoneyRainTime = Date.now();
var marketBoomEnabled = false;
var timeWarpEnabled = false;
var infiniteHivesEnabled = false;
function applyPerk(effect) {
switch (effect) {
case 'autoCollect':
autoCollectEnabled = true;
break;
case 'doubleProduction':
doubleProductionEnabled = true;
// Double all existing hive production
for (var i = 0; i < hives.length; i++) {
hives[i].productionRate = hives[i].baseProduction * hives[i].level * 2;
}
break;
case 'speedBoost':
speedBoostEnabled = true;
// Increase packaging and sales speed
if (packagingMachine) {
packagingMachine.packagingSpeed *= 1.5;
}
if (salesDepartment) {
salesDepartment.salesSpeed *= 1.5;
}
break;
case 'moneyMultiplier':
moneyMultiplierEnabled = true;
break;
case 'megaHives':
megaHivesEnabled = true;
// Increase max honey capacity for all existing hives
for (var i = 0; i < hives.length; i++) {
hives[i].maxHoney = hives[i].maxHoney * 3; // 200% increase = 3x total
}
break;
case 'goldenTouch':
goldenTouchEnabled = true;
break;
case 'beeSwarm':
beeSwarmEnabled = true;
break;
case 'instantPackage':
instantPackageEnabled = true;
break;
case 'premiumHoney':
premiumHoneyEnabled = true;
break;
case 'hiveMaster':
hiveMasterEnabled = true;
maxHives = 20; // Increase from 12 to 20
break;
case 'quantumBees':
quantumBeesEnabled = true;
break;
case 'moneyPrinter':
moneyPrinterEnabled = true;
lastMoneyPrintTime = Date.now();
break;
case 'superEfficiency':
superEfficiencyEnabled = true;
// Quadruple all existing hive production
for (var i = 0; i < hives.length; i++) {
var baseMult = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * 4;
hives[i].productionRate = hives[i].baseProduction * hives[i].level * baseMult * quantumMultiplier;
}
break;
case 'royalJelly':
royalJellyEnabled = true;
break;
case 'honeyRain':
honeyRainEnabled = true;
lastHoneyRainTime = Date.now();
break;
case 'marketBoom':
marketBoomEnabled = true;
break;
case 'timeWarp':
timeWarpEnabled = true;
// Double speed of packaging and sales
if (packagingMachine) {
packagingMachine.packagingSpeed *= 2;
}
if (salesDepartment) {
salesDepartment.salesSpeed *= 2;
}
break;
case 'infiniteHives':
infiniteHivesEnabled = true;
maxHives = 50; // Increase to 50
break;
}
}
function updateHoneyDisplay() {
honeyDisplay.setText('Honey: ' + totalHoney);
moneyDisplay.setText('Money: $' + totalMoney);
// Calculate production rates
var honeyPerSecond = 0;
for (var i = 0; i < hives.length; i++) {
honeyPerSecond += hives[i].productionRate;
}
var jarringPerSecond = 0;
if (packagingMachine) {
jarringPerSecond = packagingMachine.packagingSpeed / 2; // Takes 2 seconds per jar cycle
}
var sellingPerSecond = 0;
if (salesDepartment) {
sellingPerSecond = salesDepartment.salesSpeed / 3; // Takes 3 seconds per sale cycle
}
productionDisplay.setText('Honey/s: ' + honeyPerSecond.toFixed(1));
packagingDisplay.setText('Jarring/s: ' + jarringPerSecond.toFixed(1));
salesDisplay.setText('Selling/s: ' + sellingPerSecond.toFixed(1));
storage.totalHoney = totalHoney;
storage.totalMoney = totalMoney;
storage.hiveCost = hiveCost;
}
function createNewHive() {
var hive = new Hive();
var cols = 3;
var rows = Math.ceil(maxHives / cols);
var index = hives.length;
var col = index % cols;
var row = Math.floor(index / cols);
var startX = (2048 - (cols - 1) * 600) / 2;
var startY = 700;
hive.x = startX + col * 600;
hive.y = startY + row * 500;
game.addChild(hive);
hives.push(hive);
// Apply perks to new hive
if (royalJellyEnabled) {
hive.level = 3;
hive.upgradeCost = Math.pow(1.3, hive.level - 1) * 50;
}
var baseMult = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * (superEfficiencyEnabled ? 4 : 1);
hive.productionRate = hive.baseProduction * hive.level * baseMult * quantumMultiplier;
if (megaHivesEnabled) {
hive.maxHoney = 300 * hive.level;
} else {
hive.maxHoney = 100 * hive.level;
}
// Create upgrade button for this hive
var upgradeBtn = new UpgradeButton();
upgradeBtn.targetHive = hive;
upgradeBtn.x = hive.x;
upgradeBtn.y = hive.y + 160;
game.addChild(upgradeBtn);
upgradeButtons.push(upgradeBtn);
}
// Create initial hive
createNewHive();
// Create packaging machine
packagingMachine = new PackagingMachine();
packagingMachine.x = 2048 / 2 - 400;
packagingMachine.y = 400;
game.addChild(packagingMachine);
// Create sales department
salesDepartment = new SalesDepartment();
salesDepartment.x = 2048 / 2 + 400;
salesDepartment.y = 400;
game.addChild(salesDepartment);
// Create upgrade buttons for packaging and sales
packagingUpgradeButton = new UpgradeButton();
packagingUpgradeButton.targetHive = packagingMachine;
packagingUpgradeButton.x = packagingMachine.x;
packagingUpgradeButton.y = packagingMachine.y + 160;
game.addChild(packagingUpgradeButton);
salesUpgradeButton = new UpgradeButton();
salesUpgradeButton.targetHive = salesDepartment;
salesUpgradeButton.x = salesDepartment.x;
salesUpgradeButton.y = salesDepartment.y + 160;
game.addChild(salesUpgradeButton);
// Create perk shop
perkShop = new PerkShop();
perkShop.x = 2048 / 2;
perkShop.y = 200;
game.addChild(perkShop);
// Load saved perks
var savedPerks = storage.purchasedPerks || [];
for (var i = 0; i < savedPerks.length && i < perkShop.perks.length; i++) {
if (savedPerks[i]) {
perkShop.perks[i].purchased = true;
applyPerk(perkShop.perks[i].effect);
}
}
// Load saved hives data
var savedHives = storage.savedHives || [];
for (var i = 0; i < savedHives.length; i++) {
if (i < hives.length) {
hives[i].level = savedHives[i] || 1;
hives[i].productionRate = hives[i].baseProduction * hives[i].level;
hives[i].upgradeCost = Math.pow(1.3, hives[i].level - 1) * 50;
hives[i].maxHoney = 100 * hives[i].level;
}
}
// Create additional saved hives
while (hives.length < savedHives.length && hives.length < maxHives) {
createNewHive();
var lastHive = hives[hives.length - 1];
var savedLevel = savedHives[hives.length - 1];
lastHive.level = savedLevel || 1;
lastHive.productionRate = lastHive.baseProduction * lastHive.level;
lastHive.upgradeCost = Math.pow(1.3, lastHive.level - 1) * 50;
lastHive.maxHoney = 100 * lastHive.level;
}
updateHoneyDisplay();
// Auto-save timer
var saveTimer = LK.setInterval(function () {
storage.totalHoney = totalHoney;
storage.totalMoney = totalMoney;
storage.hiveCost = hiveCost;
var hivesData = [];
for (var i = 0; i < hives.length; i++) {
hivesData.push(hives[i].level);
}
storage.savedHives = hivesData;
}, 5000);
game.update = function () {
// Quantum bees effect - gradually increase production multiplier
if (quantumBeesEnabled && LK.ticks % 300 == 0) {
// Every 5 seconds
quantumMultiplier += 0.1;
// Update all hive production rates
for (var i = 0; i < hives.length; i++) {
var baseMult = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * (superEfficiencyEnabled ? 4 : 1);
hives[i].productionRate = hives[i].baseProduction * hives[i].level * baseMult * quantumMultiplier;
}
}
// Money printer effect - generate passive income
if (moneyPrinterEnabled && LK.ticks % 60 == 0) {
// Every second
var currentTime = Date.now();
var deltaTime = (currentTime - lastMoneyPrintTime) / 1000;
var passiveIncome = Math.floor(10 * quantumMultiplier); // Base 10 per second, affected by quantum multiplier
totalMoney += passiveIncome;
lastMoneyPrintTime = currentTime;
updateHoneyDisplay();
}
// Honey rain effect - add honey to all hives every 10 seconds
if (honeyRainEnabled && LK.ticks % 600 == 0) {
for (var i = 0; i < hives.length; i++) {
hives[i].honeyAccumulated = Math.min(hives[i].honeyAccumulated + 50, hives[i].maxHoney);
}
}
// Auto-collect from all hives periodically
var collectInterval = autoCollectEnabled ? 60 : 180; // Every 1 second if perk enabled, otherwise every 3 seconds
if (timeWarpEnabled) collectInterval = Math.floor(collectInterval / 2); // Time warp makes collection faster
if (LK.ticks % collectInterval == 0) {
var autoCollected = 0;
for (var i = 0; i < hives.length; i++) {
if (hives[i].honeyAccumulated > 0) {
autoCollected += Math.floor(hives[i].honeyAccumulated);
hives[i].honeyAccumulated = 0;
}
}
if (autoCollected > 0) {
totalHoney += autoCollected;
updateHoneyDisplay();
}
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BuyButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('buyButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('Buy Hive\n$' + hiveCost, {
size: 48,
fill: 0x000000
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.update = function () {
buttonText.setText('Buy Hive\n$' + hiveCost);
if (totalMoney >= hiveCost) {
buttonGraphics.tint = 0x32CD32;
buttonGraphics.alpha = 1.0;
} else {
buttonGraphics.tint = 0x888888;
buttonGraphics.alpha = 0.7;
}
};
self.down = function (x, y, obj) {
var actualCost = goldenTouchEnabled ? Math.floor(hiveCost * 0.7) : hiveCost;
if (totalMoney >= actualCost && hives.length < maxHives) {
totalMoney -= actualCost;
createNewHive();
hiveCost = Math.floor(hiveCost * 1.4);
updateHoneyDisplay();
LK.getSound('buy').play();
// Button press animation
tween(self, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
}
});
}
};
return self;
});
var Hive = Container.expand(function () {
var self = Container.call(this);
var hiveGraphics = self.attachAsset('hive', {
anchorX: 0.5,
anchorY: 1.0
});
var beeGraphics = self.attachAsset('bee', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -75
});
self.level = 1;
self.baseProduction = 1;
self.productionRate = self.baseProduction;
self.lastCollectTime = Date.now();
self.honeyAccumulated = 0;
self.upgradeCost = 50;
self.maxHoney = 100;
self.lastBeeAnimation = 0;
var honeyText = new Text2('0', {
size: 40,
fill: 0xFFFFFF
});
honeyText.anchor.set(0.5, 0.5);
honeyText.x = 0;
honeyText.y = -240;
self.addChild(honeyText);
var levelText = new Text2('Lv.1', {
size: 32,
fill: 0x000000
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 0;
levelText.y = -80;
self.addChild(levelText);
self.update = function () {
var currentTime = Date.now();
var deltaTime = (currentTime - self.lastCollectTime) / 1000;
if (deltaTime > 0) {
var honeyToAdd = self.productionRate * deltaTime;
self.honeyAccumulated = Math.min(self.honeyAccumulated + honeyToAdd, self.maxHoney);
self.lastCollectTime = currentTime;
}
honeyText.setText(Math.floor(self.honeyAccumulated));
// Animate bee
if (currentTime - self.lastBeeAnimation > 2000) {
self.lastBeeAnimation = currentTime;
tween(beeGraphics, {
x: 30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(beeGraphics, {
x: -30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(beeGraphics, {
x: 0
}, {
duration: 1000,
easing: tween.easeInOut
});
}
});
}
});
}
// Visual feedback for honey accumulation
if (self.honeyAccumulated > 50) {
hiveGraphics.tint = 0xFFD700;
} else {
hiveGraphics.tint = 0xFFFFFF;
}
// Production sparkle effect
if (self.productionRate > 0 && currentTime % 2000 < 100) {
tween(hiveGraphics, {
tint: 0xFFFF00
}, {
duration: 200,
onFinish: function onFinish() {
tween(hiveGraphics, {
tint: self.honeyAccumulated > 50 ? 0xFFD700 : 0xFFFFFF
}, {
duration: 200
});
}
});
}
};
self.down = function (x, y, obj) {
self.collectHoney();
};
self.collectHoney = function () {
if (self.honeyAccumulated > 0) {
var collected = Math.floor(self.honeyAccumulated);
totalHoney += collected;
self.honeyAccumulated = 0;
updateHoneyDisplay();
LK.getSound('collect').play();
// Flash effect
LK.effects.flashObject(self, 0xFFFF00, 300);
// Animate collection
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 150,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
}
};
self.upgrade = function () {
var actualCost = goldenTouchEnabled ? Math.floor(self.upgradeCost * 0.7) : self.upgradeCost;
if (totalMoney >= actualCost) {
totalMoney -= actualCost;
self.level++;
var productionMultiplier = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * quantumMultiplier;
self.productionRate = self.baseProduction * self.level * productionMultiplier;
self.upgradeCost = Math.floor(self.upgradeCost * 1.3);
var baseCapacity = megaHivesEnabled ? 300 : 100;
self.maxHoney = baseCapacity * self.level;
levelText.setText('Lv.' + self.level);
updateHoneyDisplay();
LK.getSound('upgrade').play();
// Scale animation for upgrade
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
return true;
}
return false;
};
return self;
});
var PackagingMachine = Container.expand(function () {
var self = Container.call(this);
var machineGraphics = self.attachAsset('packagingMachine', {
anchorX: 0.5,
anchorY: 1.0
});
self.level = 1;
self.packagingSpeed = 1;
self.upgradeCost = 200;
self.honeyJarsProduced = 0;
self.lastPackagingTime = Date.now();
var jarGraphics = self.attachAsset('honeyJar', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -50
});
var levelText = new Text2('Lv.1', {
size: 32,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 0;
levelText.y = -40;
self.addChild(levelText);
var jarCountText = new Text2('0 Jars', {
size: 36,
fill: 0xFFFFFF
});
jarCountText.anchor.set(0.5, 0.5);
jarCountText.x = 0;
jarCountText.y = -160;
self.addChild(jarCountText);
self.update = function () {
var currentTime = Date.now();
var deltaTime = (currentTime - self.lastPackagingTime) / 1000;
var packagingTime = instantPackageEnabled ? 0 : 2 / self.packagingSpeed;
if (deltaTime >= packagingTime && totalHoney >= 10) {
var jarsToMake = Math.floor(totalHoney / 10);
jarsToMake = Math.min(jarsToMake, self.packagingSpeed);
totalHoney -= jarsToMake * 10;
self.honeyJarsProduced += jarsToMake;
self.lastPackagingTime = currentTime;
updateHoneyDisplay();
// Animation for jar production
tween(jarGraphics, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 200,
onFinish: function onFinish() {
tween(jarGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
}
jarCountText.setText(self.honeyJarsProduced + ' Jars');
};
self.upgrade = function () {
var actualCost = goldenTouchEnabled ? Math.floor(self.upgradeCost * 0.7) : self.upgradeCost;
if (totalMoney >= actualCost) {
totalMoney -= actualCost;
self.level++;
self.packagingSpeed = self.level * (speedBoostEnabled ? 1.5 : 1);
self.upgradeCost = Math.floor(self.upgradeCost * 1.4);
levelText.setText('Lv.' + self.level);
updateHoneyDisplay();
LK.getSound('upgrade').play();
// Scale animation for upgrade
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
return true;
}
return false;
};
return self;
});
var PerkButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('perkButton', {
anchorX: 0.5,
anchorY: 0.5
});
var nameText = new Text2('', {
size: 28,
fill: 0x000000
});
nameText.anchor.set(0.5, 0.5);
nameText.y = -20;
self.addChild(nameText);
var costText = new Text2('', {
size: 24,
fill: 0x000000
});
costText.anchor.set(0.5, 0.5);
costText.y = 15;
self.addChild(costText);
self.perk = null;
self.perkIndex = -1;
self.setPerk = function (perk, index) {
self.perk = perk;
self.perkIndex = index;
nameText.setText(perk.name);
if (perk.purchased) {
costText.setText('OWNED');
buttonGraphics.tint = 0x90EE90;
} else {
costText.setText('$' + perk.cost);
if (totalMoney >= perk.cost) {
buttonGraphics.tint = 0x4ECDC4;
} else {
buttonGraphics.tint = 0x888888;
}
}
};
self.down = function (x, y, obj) {
if (self.perk && !self.perk.purchased && totalMoney >= self.perk.cost) {
totalMoney -= self.perk.cost;
self.perk.purchased = true;
applyPerk(self.perk.effect);
updateHoneyDisplay();
LK.getSound('perk').play();
// Update button appearance
costText.setText('OWNED');
buttonGraphics.tint = 0x90EE90;
// Save perk purchase
if (!storage.purchasedPerks) storage.purchasedPerks = [];
storage.purchasedPerks[self.perkIndex] = true;
}
};
return self;
});
var PerkShop = Container.expand(function () {
var self = Container.call(this);
var shopGraphics = self.attachAsset('perkShopButton', {
anchorX: 0.5,
anchorY: 0.5
});
var shopText = new Text2('Perks\nShop', {
size: 40,
fill: 0xFFFFFF
});
shopText.anchor.set(0.5, 0.5);
self.addChild(shopText);
self.isOpen = false;
self.perkButtons = [];
self.perks = [{
name: 'Auto Collector',
description: 'Collects honey\nautomatically every 1s',
cost: 500,
purchased: false,
effect: 'autoCollect'
}, {
name: 'Double Production',
description: 'Doubles honey\nproduction rate',
cost: 1000,
purchased: false,
effect: 'doubleProduction'
}, {
name: 'Speed Boost',
description: 'Packaging/sales\n50% faster',
cost: 750,
purchased: false,
effect: 'speedBoost'
}, {
name: 'Money Multiplier',
description: 'Get 50% more\nmoney from sales',
cost: 1500,
purchased: false,
effect: 'moneyMultiplier'
}, {
name: 'Mega Hives',
description: 'Increases max honey\ncapacity by 200%',
cost: 2000,
purchased: false,
effect: 'megaHives'
}, {
name: 'Golden Touch',
description: 'All upgrade costs\nreduced by 30%',
cost: 2500,
purchased: false,
effect: 'goldenTouch'
}, {
name: 'Bee Swarm',
description: 'Triple production\nfor all new hives',
cost: 3000,
purchased: false,
effect: 'beeSwarm'
}, {
name: 'Instant Package',
description: 'Packaging happens\ninstantly',
cost: 3500,
purchased: false,
effect: 'instantPackage'
}, {
name: 'Premium Honey',
description: 'Each jar sells for\n100% more money',
cost: 4000,
purchased: false,
effect: 'premiumHoney'
}, {
name: 'Hive Master',
description: 'Unlock 8 more\nhive slots (20 total)',
cost: 5000,
purchased: false,
effect: 'hiveMaster'
}, {
name: 'Quantum Bees',
description: 'Production increases\n10% every 5 seconds',
cost: 7500,
purchased: false,
effect: 'quantumBees'
}, {
name: 'Money Printer',
description: 'Generate $10+/second\npassive income',
cost: 10000,
purchased: false,
effect: 'moneyPrinter'
}, {
name: 'Super Efficiency',
description: 'Hives produce honey\n4x faster',
cost: 15000,
purchased: false,
effect: 'superEfficiency'
}, {
name: 'Royal Jelly',
description: 'New hives start\nat level 3',
cost: 20000,
purchased: false,
effect: 'royalJelly'
}, {
name: 'Honey Rain',
description: 'All hives gain 50\nhoney every 10s',
cost: 25000,
purchased: false,
effect: 'honeyRain'
}, {
name: 'Market Boom',
description: 'Jar prices increase\nby $15 each',
cost: 30000,
purchased: false,
effect: 'marketBoom'
}, {
name: 'Time Warp',
description: 'Everything runs\n2x faster',
cost: 40000,
purchased: false,
effect: 'timeWarp'
}, {
name: 'Infinite Hives',
description: 'Remove hive limit\n(50 max hives)',
cost: 50000,
purchased: false,
effect: 'infiniteHives'
}];
self.down = function (x, y, obj) {
if (!self.isOpen) {
self.openShop();
} else {
self.closeShop();
}
};
self.openShop = function () {
self.isOpen = true;
shopText.setText('Close\nShop');
for (var i = 0; i < self.perks.length; i++) {
var perk = self.perks[i];
var perkButton = new PerkButton();
perkButton.setPerk(perk, i);
perkButton.x = self.x + i % 2 * 280 - 140;
perkButton.y = self.y + Math.floor(i / 2) * 120 + 200;
game.addChild(perkButton);
self.perkButtons.push(perkButton);
}
};
self.closeShop = function () {
self.isOpen = false;
shopText.setText('Perks\nShop');
for (var i = 0; i < self.perkButtons.length; i++) {
self.perkButtons[i].destroy();
}
self.perkButtons = [];
};
return self;
});
var SalesDepartment = Container.expand(function () {
var self = Container.call(this);
var salesGraphics = self.attachAsset('salesDept', {
anchorX: 0.5,
anchorY: 1.0
});
self.level = 1;
self.salesSpeed = 1;
self.upgradeCost = 300;
self.lastSaleTime = Date.now();
self.totalRevenue = 0;
var levelText = new Text2('Lv.1', {
size: 32,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 0;
levelText.y = -40;
self.addChild(levelText);
var revenueText = new Text2('$0', {
size: 36,
fill: 0xFFFFFF
});
revenueText.anchor.set(0.5, 0.5);
revenueText.x = 0;
revenueText.y = -160;
self.addChild(revenueText);
self.update = function () {
var currentTime = Date.now();
var deltaTime = (currentTime - self.lastSaleTime) / 1000;
var salesTime = timeWarpEnabled ? 1.5 : 3;
if (deltaTime >= salesTime / self.salesSpeed && packagingMachine && packagingMachine.honeyJarsProduced > 0) {
var jarsToSell = Math.min(packagingMachine.honeyJarsProduced, self.salesSpeed);
var basePrice = 25;
var moneyMult = moneyMultiplierEnabled ? 1.5 : 1;
var premiumMult = premiumHoneyEnabled ? 2.0 : 1;
var marketBonus = marketBoomEnabled ? 15 : 0;
var revenue = jarsToSell * (basePrice + marketBonus) * moneyMult * premiumMult;
packagingMachine.honeyJarsProduced -= jarsToSell;
totalMoney += revenue;
self.totalRevenue += revenue;
self.lastSaleTime = currentTime;
updateHoneyDisplay();
// Animation for sales
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 150,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 150
});
}
});
}
revenueText.setText('$' + self.totalRevenue);
};
self.upgrade = function () {
var actualCost = goldenTouchEnabled ? Math.floor(self.upgradeCost * 0.7) : self.upgradeCost;
if (totalMoney >= actualCost) {
totalMoney -= actualCost;
self.level++;
self.salesSpeed = self.level * (speedBoostEnabled ? 1.5 : 1);
self.upgradeCost = Math.floor(self.upgradeCost * 1.4);
levelText.setText('Lv.' + self.level);
updateHoneyDisplay();
LK.getSound('upgrade').play();
// Scale animation for upgrade
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200
});
}
});
return true;
}
return false;
};
return self;
});
var UpgradeButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('Upgrade', {
size: 36,
fill: 0x000000
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.targetHive = null;
self.update = function () {
if (self.targetHive) {
buttonText.setText('Upgrade\n$' + self.targetHive.upgradeCost);
if (totalMoney >= self.targetHive.upgradeCost) {
buttonGraphics.tint = 0x90EE90;
buttonGraphics.alpha = 1.0;
} else {
buttonGraphics.tint = 0x666666;
buttonGraphics.alpha = 0.7;
}
}
};
self.down = function (x, y, obj) {
if (self.targetHive) {
self.targetHive.upgrade();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228B22
});
/****
* Game Code
****/
var totalHoney = storage.totalHoney || 0;
var totalMoney = storage.totalMoney || 0;
var hiveCost = storage.hiveCost || 100;
var maxHives = 12;
var hives = [];
var honeyDisplay = new Text2('Honey: 0', {
size: 72,
fill: 0xFFFFFF
});
honeyDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(honeyDisplay);
honeyDisplay.y = -320;
var moneyDisplay = new Text2('Money: $0', {
size: 64,
fill: 0x90EE90
});
moneyDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(moneyDisplay);
moneyDisplay.y = -240;
var productionDisplay = new Text2('Honey/s: 0', {
size: 48,
fill: 0xFFD700
});
productionDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(productionDisplay);
productionDisplay.y = -170;
var packagingDisplay = new Text2('Jarring/s: 0', {
size: 48,
fill: 0x4682B4
});
packagingDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(packagingDisplay);
packagingDisplay.y = -110;
var salesDisplay = new Text2('Selling/s: 0', {
size: 48,
fill: 0x8A2BE2
});
salesDisplay.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(salesDisplay);
salesDisplay.y = -50;
var titleText = new Text2('Bee Hive Tycoon', {
size: 96,
fill: 0xFFD700
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 20;
var buyButton = game.addChild(new BuyButton());
buyButton.x = 2048 / 2;
buyButton.y = 2732 - 120;
var upgradeButtons = [];
var packagingMachine = null;
var salesDepartment = null;
var packagingUpgradeButton = null;
var salesUpgradeButton = null;
var perkShop = null;
var autoCollectEnabled = false;
var doubleProductionEnabled = false;
var speedBoostEnabled = false;
var moneyMultiplierEnabled = false;
var megaHivesEnabled = false;
var goldenTouchEnabled = false;
var beeSwarmEnabled = false;
var instantPackageEnabled = false;
var premiumHoneyEnabled = false;
var hiveMasterEnabled = false;
var quantumBeesEnabled = false;
var quantumMultiplier = 1.0;
var moneyPrinterEnabled = false;
var lastMoneyPrintTime = Date.now();
var superEfficiencyEnabled = false;
var royalJellyEnabled = false;
var honeyRainEnabled = false;
var lastHoneyRainTime = Date.now();
var marketBoomEnabled = false;
var timeWarpEnabled = false;
var infiniteHivesEnabled = false;
function applyPerk(effect) {
switch (effect) {
case 'autoCollect':
autoCollectEnabled = true;
break;
case 'doubleProduction':
doubleProductionEnabled = true;
// Double all existing hive production
for (var i = 0; i < hives.length; i++) {
hives[i].productionRate = hives[i].baseProduction * hives[i].level * 2;
}
break;
case 'speedBoost':
speedBoostEnabled = true;
// Increase packaging and sales speed
if (packagingMachine) {
packagingMachine.packagingSpeed *= 1.5;
}
if (salesDepartment) {
salesDepartment.salesSpeed *= 1.5;
}
break;
case 'moneyMultiplier':
moneyMultiplierEnabled = true;
break;
case 'megaHives':
megaHivesEnabled = true;
// Increase max honey capacity for all existing hives
for (var i = 0; i < hives.length; i++) {
hives[i].maxHoney = hives[i].maxHoney * 3; // 200% increase = 3x total
}
break;
case 'goldenTouch':
goldenTouchEnabled = true;
break;
case 'beeSwarm':
beeSwarmEnabled = true;
break;
case 'instantPackage':
instantPackageEnabled = true;
break;
case 'premiumHoney':
premiumHoneyEnabled = true;
break;
case 'hiveMaster':
hiveMasterEnabled = true;
maxHives = 20; // Increase from 12 to 20
break;
case 'quantumBees':
quantumBeesEnabled = true;
break;
case 'moneyPrinter':
moneyPrinterEnabled = true;
lastMoneyPrintTime = Date.now();
break;
case 'superEfficiency':
superEfficiencyEnabled = true;
// Quadruple all existing hive production
for (var i = 0; i < hives.length; i++) {
var baseMult = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * 4;
hives[i].productionRate = hives[i].baseProduction * hives[i].level * baseMult * quantumMultiplier;
}
break;
case 'royalJelly':
royalJellyEnabled = true;
break;
case 'honeyRain':
honeyRainEnabled = true;
lastHoneyRainTime = Date.now();
break;
case 'marketBoom':
marketBoomEnabled = true;
break;
case 'timeWarp':
timeWarpEnabled = true;
// Double speed of packaging and sales
if (packagingMachine) {
packagingMachine.packagingSpeed *= 2;
}
if (salesDepartment) {
salesDepartment.salesSpeed *= 2;
}
break;
case 'infiniteHives':
infiniteHivesEnabled = true;
maxHives = 50; // Increase to 50
break;
}
}
function updateHoneyDisplay() {
honeyDisplay.setText('Honey: ' + totalHoney);
moneyDisplay.setText('Money: $' + totalMoney);
// Calculate production rates
var honeyPerSecond = 0;
for (var i = 0; i < hives.length; i++) {
honeyPerSecond += hives[i].productionRate;
}
var jarringPerSecond = 0;
if (packagingMachine) {
jarringPerSecond = packagingMachine.packagingSpeed / 2; // Takes 2 seconds per jar cycle
}
var sellingPerSecond = 0;
if (salesDepartment) {
sellingPerSecond = salesDepartment.salesSpeed / 3; // Takes 3 seconds per sale cycle
}
productionDisplay.setText('Honey/s: ' + honeyPerSecond.toFixed(1));
packagingDisplay.setText('Jarring/s: ' + jarringPerSecond.toFixed(1));
salesDisplay.setText('Selling/s: ' + sellingPerSecond.toFixed(1));
storage.totalHoney = totalHoney;
storage.totalMoney = totalMoney;
storage.hiveCost = hiveCost;
}
function createNewHive() {
var hive = new Hive();
var cols = 3;
var rows = Math.ceil(maxHives / cols);
var index = hives.length;
var col = index % cols;
var row = Math.floor(index / cols);
var startX = (2048 - (cols - 1) * 600) / 2;
var startY = 700;
hive.x = startX + col * 600;
hive.y = startY + row * 500;
game.addChild(hive);
hives.push(hive);
// Apply perks to new hive
if (royalJellyEnabled) {
hive.level = 3;
hive.upgradeCost = Math.pow(1.3, hive.level - 1) * 50;
}
var baseMult = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * (superEfficiencyEnabled ? 4 : 1);
hive.productionRate = hive.baseProduction * hive.level * baseMult * quantumMultiplier;
if (megaHivesEnabled) {
hive.maxHoney = 300 * hive.level;
} else {
hive.maxHoney = 100 * hive.level;
}
// Create upgrade button for this hive
var upgradeBtn = new UpgradeButton();
upgradeBtn.targetHive = hive;
upgradeBtn.x = hive.x;
upgradeBtn.y = hive.y + 160;
game.addChild(upgradeBtn);
upgradeButtons.push(upgradeBtn);
}
// Create initial hive
createNewHive();
// Create packaging machine
packagingMachine = new PackagingMachine();
packagingMachine.x = 2048 / 2 - 400;
packagingMachine.y = 400;
game.addChild(packagingMachine);
// Create sales department
salesDepartment = new SalesDepartment();
salesDepartment.x = 2048 / 2 + 400;
salesDepartment.y = 400;
game.addChild(salesDepartment);
// Create upgrade buttons for packaging and sales
packagingUpgradeButton = new UpgradeButton();
packagingUpgradeButton.targetHive = packagingMachine;
packagingUpgradeButton.x = packagingMachine.x;
packagingUpgradeButton.y = packagingMachine.y + 160;
game.addChild(packagingUpgradeButton);
salesUpgradeButton = new UpgradeButton();
salesUpgradeButton.targetHive = salesDepartment;
salesUpgradeButton.x = salesDepartment.x;
salesUpgradeButton.y = salesDepartment.y + 160;
game.addChild(salesUpgradeButton);
// Create perk shop
perkShop = new PerkShop();
perkShop.x = 2048 / 2;
perkShop.y = 200;
game.addChild(perkShop);
// Load saved perks
var savedPerks = storage.purchasedPerks || [];
for (var i = 0; i < savedPerks.length && i < perkShop.perks.length; i++) {
if (savedPerks[i]) {
perkShop.perks[i].purchased = true;
applyPerk(perkShop.perks[i].effect);
}
}
// Load saved hives data
var savedHives = storage.savedHives || [];
for (var i = 0; i < savedHives.length; i++) {
if (i < hives.length) {
hives[i].level = savedHives[i] || 1;
hives[i].productionRate = hives[i].baseProduction * hives[i].level;
hives[i].upgradeCost = Math.pow(1.3, hives[i].level - 1) * 50;
hives[i].maxHoney = 100 * hives[i].level;
}
}
// Create additional saved hives
while (hives.length < savedHives.length && hives.length < maxHives) {
createNewHive();
var lastHive = hives[hives.length - 1];
var savedLevel = savedHives[hives.length - 1];
lastHive.level = savedLevel || 1;
lastHive.productionRate = lastHive.baseProduction * lastHive.level;
lastHive.upgradeCost = Math.pow(1.3, lastHive.level - 1) * 50;
lastHive.maxHoney = 100 * lastHive.level;
}
updateHoneyDisplay();
// Auto-save timer
var saveTimer = LK.setInterval(function () {
storage.totalHoney = totalHoney;
storage.totalMoney = totalMoney;
storage.hiveCost = hiveCost;
var hivesData = [];
for (var i = 0; i < hives.length; i++) {
hivesData.push(hives[i].level);
}
storage.savedHives = hivesData;
}, 5000);
game.update = function () {
// Quantum bees effect - gradually increase production multiplier
if (quantumBeesEnabled && LK.ticks % 300 == 0) {
// Every 5 seconds
quantumMultiplier += 0.1;
// Update all hive production rates
for (var i = 0; i < hives.length; i++) {
var baseMult = (doubleProductionEnabled ? 2 : 1) * (beeSwarmEnabled ? 3 : 1) * (superEfficiencyEnabled ? 4 : 1);
hives[i].productionRate = hives[i].baseProduction * hives[i].level * baseMult * quantumMultiplier;
}
}
// Money printer effect - generate passive income
if (moneyPrinterEnabled && LK.ticks % 60 == 0) {
// Every second
var currentTime = Date.now();
var deltaTime = (currentTime - lastMoneyPrintTime) / 1000;
var passiveIncome = Math.floor(10 * quantumMultiplier); // Base 10 per second, affected by quantum multiplier
totalMoney += passiveIncome;
lastMoneyPrintTime = currentTime;
updateHoneyDisplay();
}
// Honey rain effect - add honey to all hives every 10 seconds
if (honeyRainEnabled && LK.ticks % 600 == 0) {
for (var i = 0; i < hives.length; i++) {
hives[i].honeyAccumulated = Math.min(hives[i].honeyAccumulated + 50, hives[i].maxHoney);
}
}
// Auto-collect from all hives periodically
var collectInterval = autoCollectEnabled ? 60 : 180; // Every 1 second if perk enabled, otherwise every 3 seconds
if (timeWarpEnabled) collectInterval = Math.floor(collectInterval / 2); // Time warp makes collection faster
if (LK.ticks % collectInterval == 0) {
var autoCollected = 0;
for (var i = 0; i < hives.length; i++) {
if (hives[i].honeyAccumulated > 0) {
autoCollected += Math.floor(hives[i].honeyAccumulated);
hives[i].honeyAccumulated = 0;
}
}
if (autoCollected > 0) {
totalHoney += autoCollected;
updateHoneyDisplay();
}
}
};
Modern App Store icon, high definition, square with rounded corners, for a game titled "Bee Hive Tycoon" and with the description "Build and manage your bee hive empire in this incremental tycoon game. Collect honey, upgrade hives, and expand your apiary to create the ultimate honey production operation.". No text on icon!
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Bee Hive Tycoon" and with the description "Build and manage your bee hive empire in this incremental tycoon game. Collect honey, upgrade hives, and expand your apiary to create the ultimate honey production operation.". No text on banner!