User prompt
quiero que cuando compre una plot se cierre la ventana de comprar
User prompt
dame algo de dinero para testear
User prompt
quiero que la interfaz se abra por encima de el juego que no se vea el juego mientras abro cualquier interfaz
User prompt
quiero que esten centradas y que al comprar una plot nueva solo añada una y fuera de la existente a la derecha y cuando se rellene el 4x4 de la derecha abajo a la izquierda y cuando se rellene este abajo a la derecha pero centrado con sus respectivos margenes ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
haz que las plots sean de 4x4
User prompt
se sigue solapando las nuevas plots con el inventario la tienda y las mejoras
User prompt
hay un problema, cuando compras nuevas plots y abres el inventario transpasan, arreglalo
User prompt
ahora quiero otra pestaña con mejoras y de momento vamos a añadir poder comprar mas plots, acelerar el tiempo de crecimiento con monedas y un compañero que de vuelta recogiendo los cultivos por un precio elevado ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
un poco mas
User prompt
un poco mas abajo
User prompt
y pon el boton de compra debajo de cada item
User prompt
un poco mas arriba el precio
User prompt
pon los precios de mas tamaño y fuera de la imagen justo arriba de cada item
User prompt
quita el precio de compra y de venta de la tienda
User prompt
haz que los botones de compra en la tienda esten al lado de cada item y que sea una lista con maximo 4 columnas
User prompt
pon encima de cada item el precio de compra y el de venta y haz la hotbar mas grande
User prompt
estaria bien que en el apartado de la tienda existiera un boton de sell all para vender todo y tambien quiero que el comprar y el vender sean dos ventanas diferentes dentro de la tienda
User prompt
haz que el inventario sea visual y no a texto y la tienda igual
User prompt
el boton de vender debe de ser distinto al de comprar
User prompt
ahora haz un apartado en la tienda para vender lo que recolectamos
User prompt
el fondo del juego que no sea azul busca un color mas adecuado
User prompt
el contador encima de la hotbar y en cursiva y el texto del item seleccionado quitalo
User prompt
centra los botones de la tienda y pon el contador de monedas abajo
User prompt
traduce el juego a español entero
User prompt
quiero quitar el cesped
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BuyPanel = Container.expand(function () {
var self = Container.call(this);
var panelBg = self.attachAsset('shopPanel', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('COMPRAR SEMILLAS', {
size: 80,
fill: 0x000000
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -600;
self.addChild(titleText);
var closeBtn = self.addChild(LK.getAsset('closeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 800,
y: -600
}));
var closeBtnText = new Text2('X', {
size: 40,
fill: 0xFFFFFF
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
// Switch to sell panel button
var sellPanelBtn = self.addChild(LK.getAsset('sellButton', {
anchorX: 0.5,
anchorY: 0.5,
x: -650,
y: -600
}));
var sellPanelBtnText = new Text2('VENDER', {
size: 30,
fill: 0xFFFFFF
});
sellPanelBtnText.anchor.set(0.5, 0.5);
sellPanelBtn.addChild(sellPanelBtnText);
// Seed shop items
var seedItems = [{
name: 'Semillas de Lechuga',
type: 'crop1',
price: 5
}, {
name: 'Semillas de Tomate',
type: 'crop2',
price: 10
}, {
name: 'Semillas de Maíz',
type: 'crop3',
price: 20
}];
var buyItems = [];
seedItems.forEach(function (item, index) {
var row = Math.floor(index / 4);
var col = index % 4;
var shopItem = new ShopItem(item.type, item.price, false);
shopItem.x = -750 + col * 400;
shopItem.y = -200 + row * 200;
self.addChild(shopItem);
buyItems.push(shopItem);
shopItem.button.down = function (x, y, obj) {
if (coins >= item.price) {
coins -= item.price;
if (!seeds[item.type]) {
seeds[item.type] = 0;
}
seeds[item.type] += 5;
LK.getSound('purchase').play();
updateUI();
}
};
});
sellPanelBtn.down = function (x, y, obj) {
self.visible = false;
sellPanel.visible = true;
sellPanel.updateSellSection();
};
closeBtn.down = function (x, y, obj) {
self.visible = false;
isBuyPanelOpen = false;
};
return self;
});
var FarmPlot = Container.expand(function () {
var self = Container.call(this);
var plotGraphics = self.attachAsset('farmPlot', {
anchorX: 0.5,
anchorY: 0.5
});
self.cropType = null;
self.plantTime = 0;
self.growthStage = 0;
self.currentCrop = null;
self.isEmpty = true;
self.isReady = false;
self.plantCrop = function (cropType) {
if (!self.isEmpty) return false;
self.cropType = cropType;
self.plantTime = LK.ticks;
self.growthStage = 0;
self.isEmpty = false;
self.isReady = false;
// Create seedling
self.currentCrop = self.addChild(LK.getAsset('seedling', {
anchorX: 0.5,
anchorY: 0.5,
y: -20
}));
LK.getSound('plant').play();
return true;
};
self.harvestCrop = function () {
if (!self.isReady) return null;
var harvestedCrop = {
type: self.cropType,
value: cropData[self.cropType].value
};
// Remove crop visual
if (self.currentCrop) {
self.currentCrop.destroy();
self.currentCrop = null;
}
// Reset plot
self.cropType = null;
self.plantTime = 0;
self.growthStage = 0;
self.isEmpty = true;
self.isReady = false;
LK.getSound('harvest').play();
return harvestedCrop;
};
self.update = function () {
if (self.isEmpty || !self.cropType) return;
var elapsed = LK.ticks - self.plantTime;
var growthTime = cropData[self.cropType].growthTime;
if (elapsed >= growthTime && !self.isReady) {
// Crop is ready
self.isReady = true;
if (self.currentCrop) {
self.currentCrop.destroy();
}
self.currentCrop = self.addChild(LK.getAsset(self.cropType, {
anchorX: 0.5,
anchorY: 0.5,
y: -20
}));
// Add glow effect for ready crops
tween(self.currentCrop, {
alpha: 0.7
}, {
duration: 500,
easing: tween.easeInOut
});
tween(self.currentCrop, {
alpha: 1.0
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (self.currentCrop && self.isReady) {
tween(self.currentCrop, {
alpha: 0.7
}, {
duration: 500,
easing: tween.easeInOut
});
tween(self.currentCrop, {
alpha: 1.0
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (self.currentCrop && self.isReady) {
self.update();
}
}
});
}
}
});
} else if (elapsed < growthTime && elapsed > growthTime * 0.5 && self.growthStage === 0) {
// Half grown
self.growthStage = 1;
if (self.currentCrop) {
tween(self.currentCrop, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300
});
}
}
};
self.down = function (x, y, obj) {
if (self.isReady) {
var harvest = self.harvestCrop();
if (harvest) {
// Add to inventory
if (!inventory[harvest.type]) {
inventory[harvest.type] = 0;
}
inventory[harvest.type]++;
coins += harvest.value;
updateUI();
}
} else if (self.isEmpty && selectedSeed && seeds[selectedSeed] > 0) {
if (self.plantCrop(selectedSeed)) {
seeds[selectedSeed]--;
updateUI();
}
}
};
return self;
});
var HotbarSlot = Container.expand(function (seedType, index) {
var self = Container.call(this);
self.seedType = seedType;
self.index = index;
self.isSelected = false;
var slotBg = self.attachAsset('hotbarSlot', {
anchorX: 0.5,
anchorY: 0.5
});
self.selectedBg = self.addChild(LK.getAsset('hotbarSlotSelected', {
anchorX: 0.5,
anchorY: 0.5
}));
self.selectedBg.visible = false;
// Add seed visual
if (seedType) {
var seedVisual = self.addChild(LK.getAsset(seedType, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
}));
}
// Add count text
self.countText = new Text2('0', {
size: 30,
fill: 0xFFFFFF
});
self.countText.anchor.set(0.5, 0.5);
self.countText.x = 0;
self.countText.y = 40;
self.addChild(self.countText);
self.updateCount = function (count) {
self.countText.setText(count.toString());
self.alpha = count > 0 ? 1.0 : 0.5;
};
self.setSelected = function (selected) {
self.isSelected = selected;
self.selectedBg.visible = selected;
if (selected) {
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 200,
easing: tween.easeInOut
});
} else {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeInOut
});
}
};
self.down = function (x, y, obj) {
if (seeds[self.seedType] > 0) {
selectedSeed = self.seedType;
updateHotbar();
}
};
return self;
});
var InventoryItem = Container.expand(function (itemType, count, isHarvested) {
var self = Container.call(this);
// Background slot
var slotBg = self.attachAsset('hotbarSlot', {
anchorX: 0.5,
anchorY: 0.5
});
// Item icon
var itemIcon = self.addChild(LK.getAsset(itemType, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
}));
// Count text
self.countText = new Text2(count.toString(), {
size: 30,
fill: 0xFFFFFF
});
self.countText.anchor.set(0.5, 0.5);
self.countText.x = 0;
self.countText.y = 40;
self.addChild(self.countText);
// Type label (seeds vs crops)
var typeLabel = new Text2(isHarvested ? 'Cultivo' : 'Semillas', {
size: 20,
fill: 0x000000
});
typeLabel.anchor.set(0.5, 0.5);
typeLabel.x = 0;
typeLabel.y = -50;
self.addChild(typeLabel);
self.updateCount = function (newCount) {
self.countText.setText(newCount.toString());
self.alpha = newCount > 0 ? 1.0 : 0.5;
};
return self;
});
var InventoryPanel = Container.expand(function () {
var self = Container.call(this);
var panelBg = self.attachAsset('inventoryPanel', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('INVENTARIO', {
size: 80,
fill: 0x000000
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -600;
self.addChild(titleText);
var closeBtn = self.addChild(LK.getAsset('closeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 800,
y: -600
}));
var closeBtnText = new Text2('X', {
size: 40,
fill: 0xFFFFFF
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
self.inventoryTexts = [];
self.updateInventory = function () {
// Clear existing items
self.inventoryTexts.forEach(function (item) {
item.destroy();
});
self.inventoryTexts = [];
// Create grid layout
var itemsPerRow = 4;
var itemSpacing = 180;
var currentRow = 0;
var currentCol = 0;
// Adjust positioning to account for expanded farm area
var adjustedStartY = -500; // Fixed position since farm is now centered
var startX = -300;
var startY = adjustedStartY;
// Show seeds
Object.keys(seeds).forEach(function (seedType) {
if (seeds[seedType] > 0) {
var item = new InventoryItem(seedType, seeds[seedType], false);
item.x = startX + currentCol * itemSpacing;
item.y = startY + currentRow * itemSpacing;
self.addChild(item);
self.inventoryTexts.push(item);
currentCol++;
if (currentCol >= itemsPerRow) {
currentCol = 0;
currentRow++;
}
}
});
// Show harvested crops
Object.keys(inventory).forEach(function (cropType) {
if (inventory[cropType] > 0) {
var item = new InventoryItem(cropType, inventory[cropType], true);
item.x = startX + currentCol * itemSpacing;
item.y = startY + currentRow * itemSpacing;
self.addChild(item);
self.inventoryTexts.push(item);
currentCol++;
if (currentCol >= itemsPerRow) {
currentCol = 0;
currentRow++;
}
}
});
};
closeBtn.down = function (x, y, obj) {
self.visible = false;
isInventoryOpen = false;
};
return self;
});
var SellPanel = Container.expand(function () {
var self = Container.call(this);
var panelBg = self.attachAsset('shopPanel', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('VENDER CULTIVOS', {
size: 80,
fill: 0x000000
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -600;
self.addChild(titleText);
var closeBtn = self.addChild(LK.getAsset('closeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 800,
y: -600
}));
var closeBtnText = new Text2('X', {
size: 40,
fill: 0xFFFFFF
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
// Switch to buy panel button
var buyPanelBtn = self.addChild(LK.getAsset('buyButton', {
anchorX: 0.5,
anchorY: 0.5,
x: -650,
y: -600
}));
var buyPanelBtnText = new Text2('COMPRAR', {
size: 30,
fill: 0xFFFFFF
});
buyPanelBtnText.anchor.set(0.5, 0.5);
buyPanelBtn.addChild(buyPanelBtnText);
// Sell all button
var sellAllBtn = self.addChild(LK.getAsset('sellAllButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -500
}));
var sellAllBtnText = new Text2('VENDER TODO', {
size: 35,
fill: 0xFFFFFF
});
sellAllBtnText.anchor.set(0.5, 0.5);
sellAllBtn.addChild(sellAllBtnText);
// Initialize sell texts array
self.sellTexts = [];
self.updateSellSection = function () {
// Clear existing sell items
self.sellTexts.forEach(function (item) {
item.destroy();
});
self.sellTexts = [];
// Create grid layout for sell items
var itemsPerRow = 4;
var itemSpacing = 180;
var currentRow = 0;
var currentCol = 0;
var startX = -300;
var startY = -300;
// Show harvested crops for selling
Object.keys(inventory).forEach(function (cropType) {
if (inventory[cropType] > 0) {
var sellPrice = Math.floor(cropData[cropType].value * 0.8); // 80% of original value
var sellItem = new ShopItem(cropType, sellPrice, true, inventory[cropType]);
sellItem.x = -600 + currentCol * 400;
sellItem.y = startY + currentRow * 200;
self.addChild(sellItem);
self.sellTexts.push(sellItem);
sellItem.button.down = function (x, y, obj) {
if (inventory[cropType] > 0) {
inventory[cropType]--;
coins += sellPrice;
LK.getSound('purchase').play();
updateUI();
self.updateSellSection();
}
};
currentCol++;
if (currentCol >= itemsPerRow) {
currentCol = 0;
currentRow++;
}
}
});
};
sellAllBtn.down = function (x, y, obj) {
var totalEarnings = 0;
Object.keys(inventory).forEach(function (cropType) {
if (inventory[cropType] > 0) {
var sellPrice = Math.floor(cropData[cropType].value * 0.8);
totalEarnings += sellPrice * inventory[cropType];
inventory[cropType] = 0;
}
});
if (totalEarnings > 0) {
coins += totalEarnings;
LK.getSound('purchase').play();
updateUI();
self.updateSellSection();
}
};
buyPanelBtn.down = function (x, y, obj) {
self.visible = false;
buyPanel.visible = true;
};
closeBtn.down = function (x, y, obj) {
self.visible = false;
isSellPanelOpen = false;
};
return self;
});
var ShopItem = Container.expand(function (itemType, price, isSellItem, count) {
var self = Container.call(this);
// Background slot
var slotBg = self.attachAsset('hotbarSlot', {
anchorX: 0.5,
anchorY: 0.5
});
// Item icon
var itemIcon = self.addChild(LK.getAsset(itemType, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
}));
// Price text - larger and positioned above item
var priceText = new Text2(price + ' monedas', {
size: 40,
fill: 0x000000
});
priceText.anchor.set(0.5, 0.5);
priceText.x = 0;
priceText.y = -110;
self.addChild(priceText);
// Count text (for sell items)
if (isSellItem && count > 0) {
self.countText = new Text2('x' + count, {
size: 20,
fill: 0xFFFFFF
});
self.countText.anchor.set(0.5, 0.5);
self.countText.x = 0;
self.countText.y = -40;
self.addChild(self.countText);
}
// Button
var buttonAsset = isSellItem ? 'sellButton' : 'buyButton';
var button = self.addChild(LK.getAsset(buttonAsset, {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 120
}));
var buttonText = new Text2(isSellItem ? 'VENDER' : 'COMPRAR', {
size: 20,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
button.addChild(buttonText);
self.button = button;
self.itemType = itemType;
self.price = price;
self.isSellItem = isSellItem;
self.updateCount = function (newCount) {
if (self.countText) {
self.countText.setText('x' + newCount);
}
self.alpha = newCount > 0 ? 1.0 : 0.3;
};
return self;
});
var UpgradesPanel = Container.expand(function () {
var self = Container.call(this);
var panelBg = self.attachAsset('upgradesPanel', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('MEJORAS', {
size: 80,
fill: 0x000000
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -600;
self.addChild(titleText);
var closeBtn = self.addChild(LK.getAsset('closeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 800,
y: -600
}));
var closeBtnText = new Text2('X', {
size: 40,
fill: 0xFFFFFF
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
// More Plots Upgrade
var plotUpgradeContainer = new Container();
plotUpgradeContainer.x = -500;
plotUpgradeContainer.y = -200;
self.addChild(plotUpgradeContainer);
var plotIcon = plotUpgradeContainer.addChild(LK.getAsset('farmPlot', {
anchorX: 0.5,
anchorY: 0.5
}));
var plotTitle = new Text2('MÁS PARCELAS', {
size: 35,
fill: 0x000000
});
plotTitle.anchor.set(0.5, 0.5);
plotTitle.x = 0;
plotTitle.y = 80;
plotUpgradeContainer.addChild(plotTitle);
var plotPrice = new Text2('100 monedas', {
size: 40,
fill: 0x000000
});
plotPrice.anchor.set(0.5, 0.5);
plotPrice.x = 0;
plotPrice.y = -80;
plotUpgradeContainer.addChild(plotPrice);
var plotBtn = plotUpgradeContainer.addChild(LK.getAsset('buyButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 130
}));
var plotBtnText = new Text2('COMPRAR', {
size: 20,
fill: 0xFFFFFF
});
plotBtnText.anchor.set(0.5, 0.5);
plotBtn.addChild(plotBtnText);
// Speed Upgrade
var speedUpgradeContainer = new Container();
speedUpgradeContainer.x = 0;
speedUpgradeContainer.y = -200;
self.addChild(speedUpgradeContainer);
var speedIcon = speedUpgradeContainer.addChild(LK.getAsset('seedling', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
}));
var speedTitle = new Text2('ACELERAR CULTIVOS', {
size: 30,
fill: 0x000000
});
speedTitle.anchor.set(0.5, 0.5);
speedTitle.x = 0;
speedTitle.y = 80;
speedUpgradeContainer.addChild(speedTitle);
var speedPrice = new Text2('50 monedas', {
size: 40,
fill: 0x000000
});
speedPrice.anchor.set(0.5, 0.5);
speedPrice.x = 0;
speedPrice.y = -80;
speedUpgradeContainer.addChild(speedPrice);
var speedBtn = speedUpgradeContainer.addChild(LK.getAsset('buyButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 130
}));
var speedBtnText = new Text2('COMPRAR', {
size: 20,
fill: 0xFFFFFF
});
speedBtnText.anchor.set(0.5, 0.5);
speedBtn.addChild(speedBtnText);
// Companion Upgrade
var companionUpgradeContainer = new Container();
companionUpgradeContainer.x = 500;
companionUpgradeContainer.y = -200;
self.addChild(companionUpgradeContainer);
var companionIcon = companionUpgradeContainer.addChild(LK.getAsset('character', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
}));
var companionTitle = new Text2('COMPAÑERO', {
size: 35,
fill: 0x000000
});
companionTitle.anchor.set(0.5, 0.5);
companionTitle.x = 0;
companionTitle.y = 80;
companionUpgradeContainer.addChild(companionTitle);
var companionPrice = new Text2('500 monedas', {
size: 40,
fill: 0x000000
});
companionPrice.anchor.set(0.5, 0.5);
companionPrice.x = 0;
companionPrice.y = -80;
companionUpgradeContainer.addChild(companionPrice);
var companionBtn = companionUpgradeContainer.addChild(LK.getAsset('buyButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 130
}));
var companionBtnText = new Text2('COMPRAR', {
size: 20,
fill: 0xFFFFFF
});
companionBtnText.anchor.set(0.5, 0.5);
companionBtn.addChild(companionBtnText);
// Button handlers
plotBtn.down = function (x, y, obj) {
if (coins >= 100 && totalPlots < 64) {
// Max 64 plots (4 grids of 4x4)
coins -= 100;
totalPlots++; // Add one plot at a time
repositionAllPlots(); // Recreate all plots with new layout
storage.totalPlots = totalPlots; // Save the new total
LK.getSound('purchase').play();
updateUI();
}
};
speedBtn.down = function (x, y, obj) {
if (coins >= 50) {
coins -= 50;
// Accelerate all growing crops
farmPlots.forEach(function (plot) {
if (!plot.isEmpty && !plot.isReady) {
plot.plantTime -= 150; // Reduce by 2.5 seconds
}
});
LK.getSound('purchase').play();
updateUI();
}
};
companionBtn.down = function (x, y, obj) {
if (coins >= 500 && !hasCompanion) {
coins -= 500;
hasCompanion = true;
companionBtn.alpha = 0.5;
companionBtnText.setText('COMPRADO');
LK.getSound('purchase').play();
updateUI();
}
};
closeBtn.down = function (x, y, obj) {
self.visible = false;
isUpgradesPanelOpen = false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228B22
});
/****
* Game Code
****/
// Game data
var cropData = {
'crop1': {
name: 'Lechuga',
growthTime: 300,
value: 8
},
// 5 seconds
'crop2': {
name: 'Tomate',
growthTime: 600,
value: 18
},
// 10 seconds
'crop3': {
name: 'Maíz',
growthTime: 900,
value: 35
} // 15 seconds
};
// Game state
var coins = storage.coins || 50;
var seeds = storage.seeds || {
'crop1': 5,
'crop2': 2,
'crop3': 1
};
var inventory = storage.inventory || {};
var selectedSeed = 'crop1';
var isBuyPanelOpen = false;
var isSellPanelOpen = false;
var isInventoryOpen = false;
var isUpgradesPanelOpen = false;
var hasCompanion = storage.hasCompanion || false;
var companionTimer = 0;
// UI elements
var coinsText = new Text2('Monedas: ' + coins, {
size: 60,
fill: 0xFFD700,
fontStyle: 'italic'
});
coinsText.anchor.set(0.5, 1);
coinsText.x = 1024;
coinsText.y = 2500;
game.addChild(coinsText);
// Shop button
var shopBtn = LK.getAsset('shopButton', {
anchorX: 0.5,
anchorY: 0.5
});
var shopBtnText = new Text2('TIENDA', {
size: 40,
fill: 0xFFFFFF
});
shopBtnText.anchor.set(0.5, 0.5);
shopBtn.addChild(shopBtnText);
shopBtn.x = 100;
shopBtn.y = 50;
LK.gui.top.addChild(shopBtn);
// Inventory button
var invBtn = LK.getAsset('inventoryButton', {
anchorX: 0.5,
anchorY: 0.5
});
var invBtnText = new Text2('INVENTARIO', {
size: 35,
fill: 0xFFFFFF
});
invBtnText.anchor.set(0.5, 0.5);
invBtn.addChild(invBtnText);
invBtn.x = -100;
invBtn.y = 50;
LK.gui.top.addChild(invBtn);
// Upgrades button
var upgradesBtn = LK.getAsset('upgradesButton', {
anchorX: 0.5,
anchorY: 0.5
});
var upgradesBtnText = new Text2('MEJORAS', {
size: 35,
fill: 0xFFFFFF
});
upgradesBtnText.anchor.set(0.5, 0.5);
upgradesBtn.addChild(upgradesBtnText);
upgradesBtn.x = -300;
upgradesBtn.y = 50;
LK.gui.top.addChild(upgradesBtn);
// Create farm plots in 4x4 grid
var farmPlots = [];
var totalPlots = storage.totalPlots || 16; // Start with 16 plots (4x4)
var plotSpacingX = 140;
var plotSpacingY = 100;
var plotMargin = 30; // Margin between plot groups
// Calculate center position for the main 4x4 grid
var mainGridCenterX = 1024; // Center of screen
var mainGridCenterY = 900; // Positioned to avoid UI overlap
// Calculate starting position for centered 4x4 grid
var mainStartX = mainGridCenterX - 3 * plotSpacingX / 2;
var mainStartY = mainGridCenterY - 3 * plotSpacingY / 2;
function createPlotAtPosition(x, y) {
var plot = new FarmPlot();
plot.x = x;
plot.y = y;
game.addChild(plot);
farmPlots.push(plot);
}
function repositionAllPlots() {
// Clear existing plots
farmPlots.forEach(function (plot) {
plot.destroy();
});
farmPlots = [];
var plotsCreated = 0;
// Main 4x4 grid (center)
for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
createPlotAtPosition(mainStartX + col * plotSpacingX, mainStartY + row * plotSpacingY);
plotsCreated++;
}
}
// Right 4x4 grid (if more than 16 plots)
if (totalPlots > 16) {
var rightStartX = mainStartX + 4 * plotSpacingX + plotMargin;
var rightStartY = mainStartY;
for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
createPlotAtPosition(rightStartX + col * plotSpacingX, rightStartY + row * plotSpacingY);
plotsCreated++;
}
}
}
// Bottom-left 4x4 grid (if more than 32 plots)
if (totalPlots > 32) {
var bottomLeftStartX = mainStartX;
var bottomLeftStartY = mainStartY + 4 * plotSpacingY + plotMargin;
for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
createPlotAtPosition(bottomLeftStartX + col * plotSpacingX, bottomLeftStartY + row * plotSpacingY);
plotsCreated++;
}
}
}
// Bottom-right 4x4 grid (if more than 48 plots)
if (totalPlots > 48) {
var bottomRightStartX = mainStartX + 4 * plotSpacingX + plotMargin;
var bottomRightStartY = mainStartY + 4 * plotSpacingY + plotMargin;
for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
createPlotAtPosition(bottomRightStartX + col * plotSpacingX, bottomRightStartY + row * plotSpacingY);
plotsCreated++;
}
}
}
}
// Initialize farm plots
repositionAllPlots();
// Buy and sell panels
var buyPanel = new BuyPanel();
buyPanel.x = 1024;
buyPanel.y = 1200;
buyPanel.visible = false;
game.addChild(buyPanel);
var sellPanel = new SellPanel();
sellPanel.x = 1024;
sellPanel.y = 1200;
sellPanel.visible = false;
game.addChild(sellPanel);
var inventoryPanel = new InventoryPanel();
inventoryPanel.x = 1024;
inventoryPanel.y = 1200;
inventoryPanel.visible = false;
game.addChild(inventoryPanel);
var upgradesPanel = new UpgradesPanel();
upgradesPanel.x = 1024;
upgradesPanel.y = 1200;
upgradesPanel.visible = false;
game.addChild(upgradesPanel);
// Button event handlers
shopBtn.down = function (x, y, obj) {
if (!isInventoryOpen && !isSellPanelOpen && !isUpgradesPanelOpen) {
buyPanel.visible = true;
isBuyPanelOpen = true;
}
};
invBtn.down = function (x, y, obj) {
if (!isBuyPanelOpen && !isSellPanelOpen && !isUpgradesPanelOpen) {
inventoryPanel.visible = true;
inventoryPanel.updateInventory();
isInventoryOpen = true;
}
};
upgradesBtn.down = function (x, y, obj) {
if (!isBuyPanelOpen && !isSellPanelOpen && !isInventoryOpen) {
upgradesPanel.visible = true;
isUpgradesPanelOpen = true;
}
};
// Create hotbar
var hotbarSlots = [];
var hotbarContainer = new Container();
hotbarContainer.x = 1024;
hotbarContainer.y = 2600;
game.addChild(hotbarContainer);
// Create hotbar slots for each seed type
var seedTypes = ['crop1', 'crop2', 'crop3'];
seedTypes.forEach(function (seedType, index) {
var slot = new HotbarSlot(seedType, index);
slot.x = (index - 1) * 180;
slot.y = 0;
hotbarContainer.addChild(slot);
hotbarSlots.push(slot);
});
function updateHotbar() {
hotbarSlots.forEach(function (slot) {
var count = seeds[slot.seedType] || 0;
slot.updateCount(count);
slot.setSelected(slot.seedType === selectedSeed);
});
}
// Initialize hotbar
updateHotbar();
// Remove old seed selection behavior - hotbar handles it now
game.down = function (x, y, obj) {
// Hotbar slots handle their own clicks now
};
function updateUI() {
coinsText.setText('Monedas: ' + coins);
updateHotbar();
// Save progress
storage.coins = coins;
storage.seeds = seeds;
storage.inventory = inventory;
storage.hasCompanion = hasCompanion;
}
game.update = function () {
// Update all farm plots
farmPlots.forEach(function (plot) {
// Plot update is called automatically
});
// Companion auto-harvest
if (hasCompanion) {
companionTimer++;
if (companionTimer >= 180) {
// Every 3 seconds
companionTimer = 0;
// Find ready crops and harvest them
farmPlots.forEach(function (plot) {
if (plot.isReady) {
var harvest = plot.harvestCrop();
if (harvest) {
if (!inventory[harvest.type]) {
inventory[harvest.type] = 0;
}
inventory[harvest.type]++;
coins += harvest.value;
}
}
});
updateUI();
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -364,10 +364,9 @@
var itemSpacing = 180;
var currentRow = 0;
var currentCol = 0;
// Adjust positioning to account for expanded farm area
- var maxRows = Math.max(6, plotsPerCol); // Use at least 6 or current plot rows
- var adjustedStartY = -500 - (maxRows - 6) * 30; // Move further up when more plots exist
+ var adjustedStartY = -500; // Fixed position since farm is now centered
var startX = -300;
var startY = adjustedStartY;
// Show seeds
Object.keys(seeds).forEach(function (seedType) {
@@ -727,36 +726,14 @@
companionBtnText.anchor.set(0.5, 0.5);
companionBtn.addChild(companionBtnText);
// Button handlers
plotBtn.down = function (x, y, obj) {
- if (coins >= 100) {
+ if (coins >= 100 && totalPlots < 64) {
+ // Max 64 plots (4 grids of 4x4)
coins -= 100;
- // Add new row of plots
- var newRow = plotsPerCol;
- plotsPerCol++;
- // Recalculate farm positioning to keep it centered and avoid panel overlap
- var totalWidth = (plotsPerRow - 1) * plotSpacingX + (plotsPerCol - 1) * 30;
- var totalHeight = (plotsPerCol - 1) * plotSpacingY;
- var newStartX = (2048 - totalWidth) / 2;
- var newStartY = Math.max(200, (2732 - totalHeight) / 2 - 200); // Keep above panels
- // Reposition all existing plots
- farmPlots.forEach(function (plot, index) {
- var row = Math.floor(index / plotsPerRow);
- var col = index % plotsPerRow;
- plot.x = newStartX + col * plotSpacingX - row * 30;
- plot.y = newStartY + row * plotSpacingY;
- });
- // Add new plots for the new row
- for (var col = 0; col < plotsPerRow; col++) {
- var plot = new FarmPlot();
- plot.x = newStartX + col * plotSpacingX - newRow * 30;
- plot.y = newStartY + newRow * plotSpacingY;
- game.addChild(plot);
- farmPlots.push(plot);
- }
- // Update global positioning variables
- startX = newStartX;
- startY = newStartY;
+ totalPlots++; // Add one plot at a time
+ repositionAllPlots(); // Recreate all plots with new layout
+ storage.totalPlots = totalPlots; // Save the new total
LK.getSound('purchase').play();
updateUI();
}
};
@@ -888,26 +865,75 @@
upgradesBtn.y = 50;
LK.gui.top.addChild(upgradesBtn);
// Create farm plots in 4x4 grid
var farmPlots = [];
-var plotsPerRow = 4;
-var plotsPerCol = 4;
+var totalPlots = storage.totalPlots || 16; // Start with 16 plots (4x4)
var plotSpacingX = 140;
var plotSpacingY = 100;
-// Calculate proper centering
-var totalWidth = (plotsPerRow - 1) * plotSpacingX + (plotsPerCol - 1) * 30;
-var totalHeight = (plotsPerCol - 1) * plotSpacingY;
-var startX = (2048 - totalWidth) / 2;
-var startY = (2732 - totalHeight) / 2;
-for (var row = 0; row < plotsPerCol; row++) {
- for (var col = 0; col < plotsPerRow; col++) {
- var plot = new FarmPlot();
- plot.x = startX + col * plotSpacingX - row * 30;
- plot.y = startY + row * plotSpacingY;
- game.addChild(plot);
- farmPlots.push(plot);
+var plotMargin = 30; // Margin between plot groups
+// Calculate center position for the main 4x4 grid
+var mainGridCenterX = 1024; // Center of screen
+var mainGridCenterY = 900; // Positioned to avoid UI overlap
+// Calculate starting position for centered 4x4 grid
+var mainStartX = mainGridCenterX - 3 * plotSpacingX / 2;
+var mainStartY = mainGridCenterY - 3 * plotSpacingY / 2;
+function createPlotAtPosition(x, y) {
+ var plot = new FarmPlot();
+ plot.x = x;
+ plot.y = y;
+ game.addChild(plot);
+ farmPlots.push(plot);
+}
+function repositionAllPlots() {
+ // Clear existing plots
+ farmPlots.forEach(function (plot) {
+ plot.destroy();
+ });
+ farmPlots = [];
+ var plotsCreated = 0;
+ // Main 4x4 grid (center)
+ for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
+ for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
+ createPlotAtPosition(mainStartX + col * plotSpacingX, mainStartY + row * plotSpacingY);
+ plotsCreated++;
+ }
}
+ // Right 4x4 grid (if more than 16 plots)
+ if (totalPlots > 16) {
+ var rightStartX = mainStartX + 4 * plotSpacingX + plotMargin;
+ var rightStartY = mainStartY;
+ for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
+ for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
+ createPlotAtPosition(rightStartX + col * plotSpacingX, rightStartY + row * plotSpacingY);
+ plotsCreated++;
+ }
+ }
+ }
+ // Bottom-left 4x4 grid (if more than 32 plots)
+ if (totalPlots > 32) {
+ var bottomLeftStartX = mainStartX;
+ var bottomLeftStartY = mainStartY + 4 * plotSpacingY + plotMargin;
+ for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
+ for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
+ createPlotAtPosition(bottomLeftStartX + col * plotSpacingX, bottomLeftStartY + row * plotSpacingY);
+ plotsCreated++;
+ }
+ }
+ }
+ // Bottom-right 4x4 grid (if more than 48 plots)
+ if (totalPlots > 48) {
+ var bottomRightStartX = mainStartX + 4 * plotSpacingX + plotMargin;
+ var bottomRightStartY = mainStartY + 4 * plotSpacingY + plotMargin;
+ for (var row = 0; row < 4 && plotsCreated < totalPlots; row++) {
+ for (var col = 0; col < 4 && plotsCreated < totalPlots; col++) {
+ createPlotAtPosition(bottomRightStartX + col * plotSpacingX, bottomRightStartY + row * plotSpacingY);
+ plotsCreated++;
+ }
+ }
+ }
}
+// Initialize farm plots
+repositionAllPlots();
// Buy and sell panels
var buyPanel = new BuyPanel();
buyPanel.x = 1024;
buyPanel.y = 1200;
buy button. In-Game asset. 2d. High contrast. No shadows
inventory button. In-Game asset. 2d. High contrast. No shadows
shop button. In-Game asset. 2d. High contrast. No shadows
X button. In-Game asset. 2d. High contrast. No shadows
dirt. In-Game asset. 2d. High contrast. No shadows
lechuga. In-Game asset. 2d. High contrast. No shadows
tomate. In-Game asset. 2d. High contrast. No shadows
semilla. In-Game asset. 2d. High contrast. No shadows
sell button. In-Game asset. 2d. High contrast. No shadows
maiz. In-Game asset. 2d. High contrast. No shadows
sell all button. In-Game asset. 2d. High contrast. No shadows
upgrade button. In-Game asset. 2d. High contrast. No shadows
Hotbar slot. In-Game asset. 2d. High contrast. No shadows
Quita el cesped de abajo
Flying minion flower. In-Game asset. 2d. High contrast. No shadows
Aspersor. In-Game asset. 2d. High contrast. No shadows
Que sea verde y hectagonal
Arbol de habilidades botón. In-Game asset. 2d. High contrast. No shadows
calabaza. In-Game asset. 2d. High contrast. No shadows
sandia entera
planta uva. In-Game asset. 2d. High contrast. No shadows
trufa. In-Game asset. 2d. High contrast. No shadows
orquidea. In-Game asset. 2d. High contrast. No shadows