User prompt
Los botones principales siguen estando muy pegados separa los más y los iconos del inventario más grandes aun también vamos añadir iconos a la barra hambre, Diversión y fatiga.
User prompt
También has los iconos del inventario más grandes además algunos botones estan muy pegados como el de entranamiento y se sobre ponen con otros
User prompt
Deberíamos hacer los botones un poco más grandes y el texto también sobra mucho espacio y además la barra de diversión y hambre deben bajar más lento por si solas
User prompt
La barra de hambre no baja por si sola y la barra de diversión baja lentamente, la barra de dormir se cambia a fatiga y esta sube solo cuando entrena, falta añadir un icono encima del Digimon que indique si esta lesionado o enfermo. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
La barra de hambre solo bajara un poco cuando entrenes y juegues con el Digimon además el botón de alimentar lo vamos a quitar y en su lugar añadiremos un inventario abajo de los botones principales en ese inventario en cada nueva partida y solo en estas, el jugador recibirá 10 carnes pequeñas 5 benditas y 3 medicinas, el digimon puede lastimarse si lo entrenas con cansancio y si no le das una bendita esto empeora y se enferma si no le das la medicina se muere y comienzas de nuevo también el digimon muere si la barra de hambre llega a cero y no lo alimentas en 5 minutos, el tiempo de lesión a enfermedad es de 30 minutos, las carnes que existen son, Carne Pequeña, Carne Mediana, Carne Grande, Solomillo. ↪💡 Consider importing and using the following plugins: @upit/storage.v1, @upit/tween.v1
User prompt
Hay que añadir un fondo
User prompt
Please fix the bug: 'Uncaught TypeError: self.updateAppearance is not a function' in or related to this line: 'self.updateAppearance();' Line Number: 159
User prompt
Puedes añadir los assets que faltan de todo eso y por favor arregla bien el teclado digital el espacio y borrar se sobre ponen en otras letras
User prompt
Muy bien falta que los Digimon tengan diferentes apariencia y cada uno evolucione según los parámetros de nivel, ataque, vida, velocidad, peso y ratio de victorias, todas esas estadísticas deberían ser visibles al pulsar el Digimon y por cierto quiero que el jugar es el que ponga el nombre del Digimon con un límite de 7 Caracteres. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'storage.savedGames = savedGames;' Line Number: 893 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Uncaught TypeError: storage.get is not a function' in or related to this line: 'var savedGames = storage.get('savedGames') || [];' Line Number: 833 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'storage.savedGames = savedGames;' Line Number: 893
User prompt
Faltaron varias cosas de las que te pedi por favor ↪💡 Consider importing and using the following plugins: @upit/storage.v1, @upit/tween.v1
User prompt
Muy bien pero deberíamos añadir un menu principal donde diga nuevo juego y también ver las partidas guardadas, cuando iniciemos un juego nuevo nos pedirá el nombre del Digimon y escogeremos uno de los 3 digi huevos coloca otros 3 con un candado que se desbloquearan cuando los hayamos comprado dentro del juego o completado una misión tendremos que añadir dinero y una tienda, el dinero se conseguirá jugando con el Digimon o en combates, será necesario implementar un sistema de entrenamiento de ataque, vida y velocidad la defensa se calculará según el peso del Digimon y este se sabrá por la cantidad de comida digerida el entrenamiento bajara un poquito el peso cada vez y la comida lo subirá, añadiremos diferentes comidas con efectos únicos también debemos tener música en la tienda, en el menú principal y en el menú de entrenamiento, el entrenamiento y jugar nos dará experiencia la cual aumentará el nivel de evolución cada Digimon tendrá 5 evoluciones. Más adelante profundizaremos la mecánica de combate rítmica junto con sus tipos y elementos. ↪💡 Consider importing and using the following plugins: @upit/storage.v1, @upit/tween.v1
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'setText')' in or related to this line: 'evolutionText.setText(getText('evolutionLevel') + ': ' + pet.evolutionLevel);' Line Number: 412
User prompt
Please fix the bug: 'hungerBar.children[1].setText is not a function' in or related to this line: 'return languages[currentLanguage][key] || key;' Line Number: 400
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'setText')' in or related to this line: 'evolutionText.setText(getText('evolutionLevel') + ': ' + pet.evolutionLevel);' Line Number: 415
User prompt
Please fix the bug: 'hungerBar.children[1].setText is not a function' in or related to this line: 'return languages[currentLanguage][key] || key;' Line Number: 400
User prompt
Si y le pones un icono de bandera según el idioma ↪💡 Consider importing and using the following plugins: @upit/storage.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Digi Pet Evolution
Initial prompt
Hola Ava mucho gusto quisiera crear un juego inspirado en los tamagoshi de Digimon
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var ActionButton = Container.expand(function (text, color) {
var self = Container.call(this);
var buttonBg = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
tint: color,
scaleX: 1.4,
scaleY: 1.4
});
var buttonText = new Text2(text, {
size: 40,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
tween(self, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
self.up = function (x, y, obj) {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (self.onPress) {
self.onPress();
}
};
return self;
});
var DigiEgg = Container.expand(function (eggType, isLocked) {
var self = Container.call(this);
var eggColors = [0x4CAF50, 0x2196F3, 0xFF9800, 0x9C27B0, 0xF44336, 0xFF5722];
var eggGraphics = self.attachAsset('petBody', {
anchorX: 0.5,
anchorY: 0.5,
tint: eggColors[eggType],
scaleX: 0.8,
scaleY: 1.2
});
if (isLocked) {
var lockOverlay = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
tint: 0x666666,
alpha: 0.7,
scaleX: 0.3,
scaleY: 0.3
});
var lockText = new Text2(getText('locked'), {
size: 20,
fill: 0xFFFFFF
});
lockText.anchor.set(0.5, 0.5);
lockText.y = 50;
self.addChild(lockText);
}
self.eggType = eggType;
self.isLocked = isLocked;
self.down = function (x, y, obj) {
if (!self.isLocked && self.onSelect) {
tween(self, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
self.onSelect(self.eggType);
}
};
self.up = function (x, y, obj) {
if (!self.isLocked) {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
}
};
return self;
});
var DigitalPet = Container.expand(function () {
var self = Container.call(this);
// Pet graphics - will be updated based on evolution
var body = null;
var leftEye = self.attachAsset('petEye', {
anchorX: 0.5,
anchorY: 0.5,
x: -40,
y: -30
});
var rightEye = self.attachAsset('petEye', {
anchorX: 0.5,
anchorY: 0.5,
x: 40,
y: -30
});
// Pet stats
self.hunger = storage.hunger || 100;
self.happiness = storage.happiness || 100;
self.fatigue = storage.fatigue || 0; // Changed from energy to fatigue, starts at 0
self.evolutionLevel = storage.evolutionLevel || 0;
self.attack = storage.attack || 10;
self.health = storage.health || 50;
self.speed = storage.speed || 30;
self.weight = storage.weight || 50;
self.name = storage.petName || 'Digimon';
self.eggType = storage.eggType || 0;
self.wins = storage.wins || 0;
self.battles = storage.battles || 0;
self.lastUpdateTime = Date.now();
// Health system
self.injured = storage.injured || false;
self.sick = storage.sick || false;
self.injuryTime = storage.injuryTime || 0;
self.sickTime = storage.sickTime || 0;
self.hungerDeathTimer = storage.hungerDeathTimer || 0;
// Stats display
self.statsDisplay = null;
self.showingStats = false;
// Health status icon
self.statusIcon = null;
// Evolution colors
self.evolutionColors = [0x4CAF50, 0x2196F3, 0xFF9800, 0x9C27B0, 0xF44336];
self.updateStatusIcon = function () {
// Remove existing status icon
if (self.statusIcon) {
self.removeChild(self.statusIcon);
self.statusIcon = null;
}
// Add status icon if injured or sick
if (self.injured || self.sick) {
self.statusIcon = new Container();
var iconBg = self.statusIcon.attachAsset('petEye', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2,
tint: self.sick ? 0x800080 : 0xFF0000 // Purple for sick, red for injured
});
var iconText = new Text2(self.sick ? '!' : '?', {
size: 40,
fill: 0xFFFFFF
});
iconText.anchor.set(0.5, 0.5);
self.statusIcon.addChild(iconText);
self.statusIcon.x = 0;
self.statusIcon.y = -150; // Position above Digimon
self.addChild(self.statusIcon);
// Pulsing animation
tween(self.statusIcon, {
alpha: 0.3
}, {
duration: 800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self.statusIcon, {
alpha: 1
}, {
duration: 800,
easing: tween.easeInOut
});
}
});
}
};
self.updateAppearance = function () {
// Remove old body if exists
if (body) {
self.removeChild(body);
}
// Choose asset based on evolution level
var assetNames = ['petBody', 'digimon_rookie', 'digimon_champion', 'digimon_ultimate', 'digimon_mega', 'digimon_ultra'];
var assetName = assetNames[self.evolutionLevel] || 'petBody';
// Create new body with evolution-specific asset
body = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
// Base colors for different egg types
var eggTypeColors = [[0x4CAF50, 0x8BC34A, 0xCDDC39, 0xFFEB3B, 0xFFC107],
// Green line evolution
[0x2196F3, 0x03A9F4, 0x00BCD4, 0x009688, 0x4DB6AC],
// Blue line evolution
[0xFF9800, 0xFF5722, 0xF44336, 0xE91E63, 0x9C27B0],
// Orange to purple line
[0x9C27B0, 0x673AB7, 0x3F51B5, 0x2196F3, 0x00BCD4],
// Purple to blue line
[0xF44336, 0xFF5722, 0xFF9800, 0xFFC107, 0xFFD54F],
// Red to yellow line
[0xFF5722, 0x795548, 0x607D8B, 0x455A64, 0x263238] // Orange to dark line
];
var evolutionColors = eggTypeColors[self.eggType] || eggTypeColors[0];
var color = evolutionColors[self.evolutionLevel] || evolutionColors[0];
body.tint = color;
// Scale based on evolution level and egg type
var baseScale = 0.8 + self.eggType * 0.05; // Different base sizes per egg type
var evolutionScale = 1 + self.evolutionLevel * 0.15; // Reduced scaling for better visibility
var finalScale = baseScale * evolutionScale;
body.scaleX = finalScale;
body.scaleY = finalScale;
// Eye expressions based on happiness
if (self.happiness > 70) {
leftEye.scaleY = 1;
rightEye.scaleY = 1;
} else if (self.happiness > 30) {
leftEye.scaleY = 0.8;
rightEye.scaleY = 0.8;
} else {
leftEye.scaleY = 0.5;
rightEye.scaleY = 0.5;
}
// Eye color variations based on egg type
var eyeColors = [0x000000, 0x1976D2, 0x8BC34A, 0x7B1FA2, 0xD32F2F, 0x5D4037];
var eyeColor = eyeColors[self.eggType] || 0x000000;
leftEye.tint = eyeColor;
rightEye.tint = eyeColor;
};
// Initialize appearance
self.updateAppearance();
self.evolveCheck = function () {
var avgStat = (self.hunger + self.happiness + self.energy) / 3;
var targetLevel = Math.floor(avgStat / 25);
if (targetLevel > self.evolutionLevel && targetLevel < self.evolutionColors.length) {
self.evolutionLevel = targetLevel;
LK.getSound('evolve').play();
// Evolution animation
tween(self, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 500,
easing: tween.bounceOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeOut
});
}
});
self.updateAppearance();
LK.effects.flashScreen(0xFFD700, 1000);
}
};
self.update = function () {
var currentTime = Date.now();
var deltaTime = (currentTime - self.lastUpdateTime) / 1000;
self.lastUpdateTime = currentTime;
// Decay stats over time - hunger no longer decreases automatically
// self.hunger = Math.max(0, self.hunger - deltaTime * 2); // Removed automatic hunger decrease
self.happiness = Math.max(0, self.happiness - deltaTime * 0.1); // Much slower happiness decrease (fun bar)
// Energy is now fatigue - it doesn't decrease automatically, only increases during training
// Health system timers
if (self.injured) {
self.injuryTime += deltaTime;
// After 30 minutes (1800 seconds) injury becomes sickness
if (self.injuryTime >= 1800) {
self.injured = false;
self.sick = true;
self.injuryTime = 0;
self.sickTime = 0;
LK.effects.flashObject(self, 0x800080, 1000);
}
}
if (self.sick) {
self.sickTime += deltaTime;
// Sick Digimon dies after some time without medicine
if (self.sickTime >= 300) {
// 5 minutes
self.die();
return;
}
}
// Hunger death timer
if (self.hunger <= 0) {
self.hungerDeathTimer += deltaTime;
if (self.hungerDeathTimer >= 300) {
// 5 minutes
self.die();
return;
}
} else {
self.hungerDeathTimer = 0;
}
// Idle animation
if (LK.ticks % 120 === 0) {
tween(self, {
y: self.y - 20
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self, {
y: self.y + 20
}, {
duration: 500,
easing: tween.easeInOut
});
}
});
}
self.updateAppearance();
self.updateStatusIcon(); // Update health status icon
self.evolveCheck();
// Calculate defense based on weight
self.defense = Math.floor(self.weight / 2);
// Save stats
storage.hunger = self.hunger;
storage.happiness = self.happiness;
storage.fatigue = self.fatigue; // Changed from energy to fatigue
storage.evolutionLevel = self.evolutionLevel;
storage.attack = self.attack;
storage.health = self.health;
storage.speed = self.speed;
storage.weight = self.weight;
storage.petName = self.name;
storage.eggType = self.eggType;
storage.wins = self.wins;
storage.battles = self.battles;
storage.injured = self.injured;
storage.sick = self.sick;
storage.injuryTime = self.injuryTime;
storage.sickTime = self.sickTime;
storage.hungerDeathTimer = self.hungerDeathTimer;
};
self.down = function (x, y, obj) {
if (self.showingStats) {
self.hideStats();
} else {
self.showStats();
}
};
self.showStats = function () {
if (self.statsDisplay) return;
self.showingStats = true;
var winRate = self.battles > 0 ? Math.round(self.wins / self.battles * 100) : 0;
self.statsDisplay = new Container();
var statsBg = self.statsDisplay.attachAsset('gameArea', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 2.5,
tint: 0x263238,
alpha: 0.9
});
var statsText = new Text2(self.name + '\n\n' + getText('evolutionLevel') + ': ' + self.evolutionLevel + '\n' + getText('attack') + ': ' + Math.floor(self.attack) + '\n' + getText('health') + ': ' + Math.floor(self.health) + '\n' + getText('speed') + ': ' + Math.floor(self.speed) + '\n' + getText('defense') + ': ' + Math.floor(self.defense) + '\n' + getText('weight') + ': ' + Math.floor(self.weight) + '\n' + 'Win Rate: ' + winRate + '%', {
size: 30,
fill: 0xFFFFFF
});
statsText.anchor.set(0.5, 0.5);
self.statsDisplay.addChild(statsText);
self.statsDisplay.x = 0;
self.statsDisplay.y = -200;
self.addChild(self.statsDisplay);
// Auto hide after 3 seconds
LK.setTimeout(function () {
if (self.showingStats) {
self.hideStats();
}
}, 3000);
};
self.hideStats = function () {
if (self.statsDisplay) {
self.removeChild(self.statsDisplay);
self.statsDisplay = null;
self.showingStats = false;
}
};
self.die = function () {
LK.effects.flashScreen(0x000000, 2000);
LK.setTimeout(function () {
// Clear all storage and restart
storage.hunger = 100;
storage.happiness = 100;
storage.energy = 100;
storage.evolutionLevel = 0;
storage.attack = 10;
storage.health = 50;
storage.speed = 30;
storage.weight = 50;
storage.injured = false;
storage.sick = false;
storage.injuryTime = 0;
storage.sickTime = 0;
storage.hungerDeathTimer = 0;
// Give new starter items
storage.smallMeat = 10;
storage.blessing = 5;
storage.medicine = 3;
showMainMenu();
}, 2000);
};
self.train = function () {
// Increase fatigue during training
self.fatigue = Math.min(100, self.fatigue + 15);
if (self.fatigue > 80) {
// Training while tired causes injury
if (!self.injured && !self.sick) {
self.injured = true;
self.injuryTime = 0;
LK.effects.flashObject(self, 0xFF0000, 1000);
}
}
// Reduce hunger slightly during training
self.hunger = Math.max(0, self.hunger - 3);
};
return self;
});
var Inventory = Container.expand(function () {
var self = Container.call(this);
// Initialize inventory items
self.items = {
smallMeat: storage.smallMeat || 0,
mediumMeat: storage.mediumMeat || 0,
largeMeat: storage.largeMeat || 0,
sirloin: storage.sirloin || 0,
blessing: storage.blessing || 0,
medicine: storage.medicine || 0
};
self.slots = [];
// Create inventory slots
var itemTypes = ['smallMeat', 'mediumMeat', 'largeMeat', 'sirloin', 'blessing', 'medicine'];
for (var i = 0; i < itemTypes.length; i++) {
var slot = new Container();
var slotBg = slot.attachAsset('inventorySlot', {
anchorX: 0.5,
anchorY: 0.5
});
var itemIcon = slot.attachAsset(itemTypes[i], {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.0,
scaleY: 2.0
});
var countText = new Text2('0', {
size: 18,
fill: 0xFFFFFF
});
countText.anchor.set(0.5, 1);
countText.y = 35;
slot.addChild(countText);
slot.itemType = itemTypes[i];
slot.x = i * 120;
slot.y = 0;
slot.down = function (x, y, obj) {
if (self.items[this.itemType] > 0) {
self.useItem(this.itemType);
}
};
self.addChild(slot);
self.slots.push(slot);
}
self.useItem = function (itemType) {
if (self.items[itemType] <= 0) return;
self.items[itemType]--;
switch (itemType) {
case 'smallMeat':
pet.hunger = Math.min(100, pet.hunger + 15);
break;
case 'mediumMeat':
pet.hunger = Math.min(100, pet.hunger + 30);
break;
case 'largeMeat':
pet.hunger = Math.min(100, pet.hunger + 50);
break;
case 'sirloin':
pet.hunger = Math.min(100, pet.hunger + 75);
break;
case 'blessing':
if (pet.injured) {
pet.injured = false;
pet.injuryTime = 0;
LK.effects.flashObject(pet, 0xFFD700, 1000);
}
break;
case 'medicine':
if (pet.sick) {
pet.sick = false;
pet.sickTime = 0;
LK.effects.flashObject(pet, 0x4CAF50, 1000);
}
break;
}
self.updateDisplay();
self.saveItems();
LK.getSound('feed').play();
};
self.updateDisplay = function () {
for (var i = 0; i < self.slots.length; i++) {
var slot = self.slots[i];
var count = self.items[slot.itemType];
slot.children[2].setText(count.toString());
}
};
self.saveItems = function () {
storage.smallMeat = self.items.smallMeat;
storage.mediumMeat = self.items.mediumMeat;
storage.largeMeat = self.items.largeMeat;
storage.sirloin = self.items.sirloin;
storage.blessing = self.items.blessing;
storage.medicine = self.items.medicine;
};
self.updateDisplay();
return self;
});
var LanguageButton = Container.expand(function () {
var self = Container.call(this);
var buttonBg = self.attachAsset('languageButton', {
anchorX: 0.5,
anchorY: 0.5
});
var flagEN = self.attachAsset('flagEN', {
anchorX: 0.5,
anchorY: 0.5,
x: -15,
scaleX: 0.4,
scaleY: 0.4
});
var flagES = self.attachAsset('flagES', {
anchorX: 0.5,
anchorY: 0.5,
x: 15,
scaleX: 0.4,
scaleY: 0.4
});
// Add EN/ES text overlay
var textEN = new Text2('EN', {
size: 12,
fill: 0xFFFFFF
});
textEN.anchor.set(0.5, 0.5);
textEN.x = -15;
flagEN.addChild(textEN);
var textES = new Text2('ES', {
size: 12,
fill: 0xFFFFFF
});
textES.anchor.set(0.5, 0.5);
textES.x = 15;
flagES.addChild(textES);
self.updateDisplay = function () {
if (currentLanguage === 'en') {
flagEN.alpha = 1;
flagES.alpha = 0.5;
} else {
flagEN.alpha = 0.5;
flagES.alpha = 1;
}
};
self.down = function (x, y, obj) {
tween(self, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
self.up = function (x, y, obj) {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
// Toggle language
currentLanguage = currentLanguage === 'en' ? 'es' : 'en';
storage.currentLanguage = currentLanguage;
self.updateDisplay();
updateAllTexts();
};
self.updateDisplay();
return self;
});
var MainMenu = Container.expand(function () {
var self = Container.call(this);
var titleText = new Text2('Digital Pet', {
size: 80,
fill: 0x2196F3
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
self.addChild(titleText);
var newGameButton = new ActionButton(getText('newGame'), 0x4CAF50);
newGameButton.x = 1024;
newGameButton.y = 800;
newGameButton.onPress = function () {
showEggSelection();
};
self.addChild(newGameButton);
var savedGamesButton = new ActionButton(getText('savedGames'), 0x2196F3);
savedGamesButton.x = 1024;
savedGamesButton.y = 950;
savedGamesButton.onPress = function () {
showSavedGames();
};
self.addChild(savedGamesButton);
return self;
});
var MiniGame = Container.expand(function () {
var self = Container.call(this);
var gameArea = self.attachAsset('gameArea', {
anchorX: 0.5,
anchorY: 0.5
});
var target = self.attachAsset('target', {
anchorX: 0.5,
anchorY: 0.5
});
self.score = 0;
self.timeLeft = 10;
self.gameActive = false;
var scoreText = new Text2('Score: 0', {
size: 30,
fill: 0x333333
});
scoreText.anchor.set(0.5, 0);
scoreText.y = -180;
self.addChild(scoreText);
var timerText = new Text2('Time: 10', {
size: 30,
fill: 0x333333
});
timerText.anchor.set(0.5, 0);
timerText.y = -140;
self.addChild(timerText);
self.startGame = function () {
self.gameActive = true;
self.score = 0;
self.timeLeft = 10;
scoreText.setText(getText('score') + ': 0');
timerText.setText(getText('time') + ': 10');
self.moveTarget();
var gameTimer = LK.setInterval(function () {
self.timeLeft -= 0.1;
timerText.setText(getText('time') + ': ' + Math.ceil(self.timeLeft));
if (self.timeLeft <= 0) {
LK.clearInterval(gameTimer);
self.endGame();
}
}, 100);
};
self.moveTarget = function () {
if (!self.gameActive) return;
var newX = (Math.random() - 0.5) * 300;
var newY = (Math.random() - 0.5) * 300;
tween(target, {
x: newX,
y: newY
}, {
duration: 200,
easing: tween.easeOut
});
};
self.endGame = function () {
self.gameActive = false;
var happiness = Math.min(20, self.score * 2);
pet.happiness = Math.min(100, pet.happiness + happiness);
pet.fatigue = Math.min(100, pet.fatigue + 10); // Increase fatigue instead of decreasing energy
pet.hunger = Math.max(0, pet.hunger - 5);
if (self.onGameEnd) {
self.onGameEnd(self.score);
}
};
target.down = function (x, y, obj) {
if (!self.gameActive) return;
self.score++;
scoreText.setText(getText('score') + ': ' + self.score);
LK.getSound('play').play();
tween(target, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 100,
onFinish: function onFinish() {
tween(target, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
}
});
self.moveTarget();
};
return self;
});
var Shop = Container.expand(function () {
var self = Container.call(this);
var shopBg = self.attachAsset('gameArea', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 4,
scaleY: 5,
tint: 0xE3F2FD
});
var titleText = new Text2(getText('shop'), {
size: 60,
fill: 0x1976D2
});
titleText.anchor.set(0.5, 0.5);
titleText.y = -800;
self.addChild(titleText);
var moneyText = new Text2(getText('money') + ': ' + (storage.money || 0), {
size: 40,
fill: 0x388E3C
});
moneyText.anchor.set(0.5, 0.5);
moneyText.y = -700;
self.addChild(moneyText);
// Shop items
var shopItems = [{
name: 'Super Food',
price: 50,
effect: 'hunger+50'
}, {
name: 'Energy Drink',
price: 30,
effect: 'energy+40'
}, {
name: 'Happy Toy',
price: 40,
effect: 'happiness+30'
}];
var itemButtons = [];
for (var i = 0; i < shopItems.length; i++) {
var item = shopItems[i];
var itemButton = new ActionButton(item.name + ' (' + item.price + ')', 0xFF9800);
itemButton.x = 0;
itemButton.y = -400 + i * 150;
itemButton.itemData = item;
itemButton.onPress = function () {
if ((storage.money || 0) >= this.itemData.price) {
storage.money = (storage.money || 0) - this.itemData.price;
// Apply item effect
if (this.itemData.effect.includes('hunger')) {
pet.hunger = Math.min(100, pet.hunger + 50);
} else if (this.itemData.effect.includes('energy')) {
pet.energy = Math.min(100, pet.energy + 40);
} else if (this.itemData.effect.includes('happiness')) {
pet.happiness = Math.min(100, pet.happiness + 30);
}
moneyText.setText(getText('money') + ': ' + storage.money);
LK.getSound('feed').play();
}
};
self.addChild(itemButton);
itemButtons.push(itemButton);
}
var closeButton = new ActionButton('X', 0xF44336);
closeButton.x = 600;
closeButton.y = -800;
closeButton.onPress = function () {
LK.playMusic('Luna');
gameState = 'game';
game.removeChild(shop);
};
self.addChild(closeButton);
return self;
});
var StatBar = Container.expand(function (label, color, iconAsset) {
var self = Container.call(this);
var background = self.attachAsset('statBar', {
anchorX: 0,
anchorY: 0.5
});
var fill = self.attachAsset('statFill', {
anchorX: 0,
anchorY: 0.5,
tint: color,
scaleX: 1
});
// Add icon if provided
if (iconAsset) {
var icon = self.attachAsset(iconAsset, {
anchorX: 0.5,
anchorY: 0.5,
x: -120,
scaleX: 1.2,
scaleY: 1.2
});
}
var labelText = new Text2(label, {
size: 25,
fill: 0x333333
});
labelText.anchor.set(0, 0.5);
labelText.x = -80;
self.addChild(labelText);
self.updateValue = function (value) {
var percentage = Math.max(0, Math.min(100, value)) / 100;
tween(fill, {
scaleX: percentage
}, {
duration: 300,
easing: tween.easeOut
});
};
self.updateLabel = function (newLabel) {
labelText.setText(newLabel);
};
return self;
});
var Training = Container.expand(function () {
var self = Container.call(this);
var trainingBg = self.attachAsset('gameArea', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 4,
scaleY: 5,
tint: 0xFFF3E0
});
var titleText = new Text2(getText('training'), {
size: 60,
fill: 0xE65100
});
titleText.anchor.set(0.5, 0.5);
titleText.y = -800;
self.addChild(titleText);
// Training stats
var attackBar = new TrainingBar(getText('attack'), 0xF44336, 100);
attackBar.x = -150;
attackBar.y = -500;
self.addChild(attackBar);
var healthBar = new TrainingBar(getText('health'), 0x4CAF50, 100);
healthBar.x = -150;
healthBar.y = -400;
self.addChild(healthBar);
var speedBar = new TrainingBar(getText('speed'), 0x2196F3, 100);
speedBar.x = -150;
speedBar.y = -300;
self.addChild(speedBar);
var weightText = new Text2(getText('weight') + ': ' + (pet.weight || 50), {
size: 30,
fill: 0x795548
});
weightText.anchor.set(0.5, 0.5);
weightText.y = -150;
self.addChild(weightText);
// Training buttons
var trainAttackButton = new ActionButton(getText('train') + ' ' + getText('attack'), 0xF44336);
trainAttackButton.x = -200;
trainAttackButton.y = 100;
trainAttackButton.onPress = function () {
if (pet.fatigue < 90) {
// Check fatigue instead of energy
pet.attack = Math.min(100, (pet.attack || 0) + 5);
pet.weight = Math.max(20, (pet.weight || 50) - 1);
pet.train();
attackBar.updateValue(pet.attack);
weightText.setText(getText('weight') + ': ' + pet.weight);
storage.money = (storage.money || 0) + 5;
LK.getSound('play').play();
}
};
self.addChild(trainAttackButton);
var trainHealthButton = new ActionButton(getText('train') + ' ' + getText('health'), 0x4CAF50);
trainHealthButton.x = 0;
trainHealthButton.y = 100;
trainHealthButton.onPress = function () {
if (pet.fatigue < 90) {
// Check fatigue instead of energy
pet.health = Math.min(100, (pet.health || 0) + 5);
pet.weight = Math.max(20, (pet.weight || 50) - 1);
pet.train();
healthBar.updateValue(pet.health);
weightText.setText(getText('weight') + ': ' + pet.weight);
storage.money = (storage.money || 0) + 5;
LK.getSound('play').play();
}
};
self.addChild(trainHealthButton);
var trainSpeedButton = new ActionButton(getText('train') + ' ' + getText('speed'), 0x2196F3);
trainSpeedButton.x = 200;
trainSpeedButton.y = 100;
trainSpeedButton.onPress = function () {
if (pet.fatigue < 90) {
// Check fatigue instead of energy
pet.speed = Math.min(100, (pet.speed || 0) + 5);
pet.weight = Math.max(20, (pet.weight || 50) - 1);
pet.train();
speedBar.updateValue(pet.speed);
weightText.setText(getText('weight') + ': ' + pet.weight);
storage.money = (storage.money || 0) + 5;
LK.getSound('play').play();
}
};
self.addChild(trainSpeedButton);
var closeButton = new ActionButton('X', 0xF44336);
closeButton.x = 600;
closeButton.y = -800;
closeButton.onPress = function () {
LK.playMusic('Luna');
gameState = 'game';
game.removeChild(training);
};
self.addChild(closeButton);
self.updateBars = function () {
attackBar.updateValue(pet.attack || 0);
healthBar.updateValue(pet.health || 0);
speedBar.updateValue(pet.speed || 0);
weightText.setText(getText('weight') + ': ' + (pet.weight || 50));
};
return self;
});
var TrainingBar = Container.expand(function (label, color, maxValue) {
var self = Container.call(this);
var background = self.attachAsset('statBar', {
anchorX: 0,
anchorY: 0.5
});
var fill = self.attachAsset('statFill', {
anchorX: 0,
anchorY: 0.5,
tint: color,
scaleX: 0
});
var labelText = new Text2(label, {
size: 20,
fill: 0x333333
});
labelText.anchor.set(0, 0.5);
labelText.x = -80;
self.addChild(labelText);
var valueText = new Text2('0/' + maxValue, {
size: 18,
fill: 0x333333
});
valueText.anchor.set(1, 0.5);
valueText.x = 320;
self.addChild(valueText);
self.updateValue = function (value) {
var percentage = Math.max(0, Math.min(maxValue, value)) / maxValue;
tween(fill, {
scaleX: percentage
}, {
duration: 300,
easing: tween.easeOut
});
valueText.setText(Math.floor(value) + '/' + maxValue);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xE8F5E8
});
/****
* Game Code
****/
// Game state management
var gameState = 'menu'; // 'menu', 'game', 'pause'
var gameData = storage.gameData || {};
// Language system
var languages = {
en: {
feed: "Feed",
play: "Play",
sleep: "Sleep",
hunger: "Hunger",
happy: "Fun",
energy: "Fatigue",
evolutionLevel: "Evolution Level",
score: "Score",
time: "Time",
newGame: "New Game",
savedGames: "Saved Games",
mainMenu: "Main Menu",
digimonName: "Digimon Name",
chooseEgg: "Choose Your Digi-Egg",
money: "Money",
shop: "Shop",
training: "Training",
attack: "Attack",
health: "Health",
speed: "Speed",
defense: "Defense",
weight: "Weight",
locked: "Locked",
buy: "Buy",
train: "Train"
},
es: {
feed: "Alimentar",
play: "Jugar",
sleep: "Dormir",
hunger: "Hambre",
happy: "Diversión",
energy: "Fatiga",
evolutionLevel: "Nivel de Evolución",
score: "Puntuación",
time: "Tiempo",
newGame: "Nuevo Juego",
savedGames: "Partidas Guardadas",
mainMenu: "Menú Principal",
digimonName: "Nombre del Digimon",
chooseEgg: "Elige tu Digi-Huevo",
money: "Dinero",
shop: "Tienda",
training: "Entrenamiento",
attack: "Ataque",
health: "Vida",
speed: "Velocidad",
defense: "Defensa",
weight: "Peso",
locked: "Bloqueado",
buy: "Comprar",
train: "Entrenar"
}
};
var currentLanguage = storage.currentLanguage || 'en';
function getText(key) {
return languages[currentLanguage][key] || key;
}
// Game variables
var mainMenu, pet, hungerBar, happinessBar, energyBar, evolutionText;
var feedButton, playButton, sleepButton, shopButton, trainingButton;
var shop, training;
// Initialize money if not exists
if (!storage.money) storage.money = 100;
function updateAllTexts() {
if (gameState === 'game') {
// Update action buttons
if (playButton) playButton.children[1].setText(getText('play'));
if (sleepButton) sleepButton.children[1].setText(getText('sleep'));
if (shopButton) shopButton.children[1].setText(getText('shop'));
if (trainingButton) trainingButton.children[1].setText(getText('training'));
// Update stat bar labels
if (hungerBar) hungerBar.updateLabel(getText('hunger'));
if (happinessBar) happinessBar.updateLabel(getText('happy'));
if (energyBar) energyBar.updateLabel(getText('energy'));
// Update evolution text
if (evolutionText && pet) evolutionText.setText(getText('evolutionLevel') + ': ' + pet.evolutionLevel);
}
}
function showMainMenu() {
gameState = 'menu';
LK.playMusic('menuMusic');
game.removeChildren();
mainMenu = game.addChild(new MainMenu());
}
function showEggSelection() {
game.removeChildren();
var titleText = new Text2(getText('chooseEgg'), {
size: 60,
fill: 0x2196F3
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 300;
game.addChild(titleText);
// Create 6 eggs (3 unlocked, 3 locked)
var eggs = [];
for (var i = 0; i < 6; i++) {
var isLocked = i >= 3 && (storage.money || 0) < 500 && (storage.completedMissions || 0) < 1;
var egg = new DigiEgg(i, isLocked);
egg.x = 400 + i % 3 * 400;
egg.y = 600 + Math.floor(i / 3) * 300;
egg.onSelect = function (eggType) {
showDigimonNaming(eggType);
};
game.addChild(egg);
eggs.push(egg);
}
var backButton = new ActionButton(getText('mainMenu'), 0x9E9E9E);
backButton.x = 200;
backButton.y = 1200;
backButton.onPress = function () {
showMainMenu();
};
game.addChild(backButton);
}
function showSavedGames() {
game.removeChildren();
var titleText = new Text2(getText('savedGames'), {
size: 60,
fill: 0x2196F3
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
game.addChild(titleText);
// Check for saved games
var saveCount = storage.saveCount || 0;
var savedGames = [];
for (var i = 0; i < saveCount; i++) {
var saveData = storage['save_' + i];
if (saveData) {
savedGames.push(saveData);
}
}
if (savedGames.length === 0) {
var noSavesText = new Text2('No saved games yet', {
size: 40,
fill: 0x666666
});
noSavesText.anchor.set(0.5, 0.5);
noSavesText.x = 1024;
noSavesText.y = 600;
game.addChild(noSavesText);
} else {
// Display saved games
for (var i = 0; i < savedGames.length && i < 5; i++) {
var saveData = savedGames[i];
var saveButton = new ActionButton(saveData.petName + ' (Lv.' + saveData.evolutionLevel + ')', 0x4CAF50);
saveButton.x = 1024;
saveButton.y = 500 + i * 100;
saveButton.saveIndex = i;
saveButton.onPress = function () {
loadGame(this.saveIndex);
};
game.addChild(saveButton);
}
}
var backButton = new ActionButton(getText('mainMenu'), 0x9E9E9E);
backButton.x = 1024;
backButton.y = 1000;
backButton.onPress = function () {
showMainMenu();
};
game.addChild(backButton);
}
function saveGame() {
// Get current save count
var saveCount = storage.saveCount || 0;
var saveData = {
petName: pet.name,
evolutionLevel: pet.evolutionLevel,
hunger: pet.hunger,
happiness: pet.happiness,
energy: pet.energy,
attack: pet.attack,
health: pet.health,
speed: pet.speed,
weight: pet.weight,
eggType: pet.eggType,
money: storage.money || 0,
timestamp: Date.now()
};
// Check if save with same name exists and replace it
var existingSaveIndex = -1;
for (var i = 0; i < saveCount; i++) {
var existingSave = storage['save_' + i];
if (existingSave && existingSave.petName === pet.name) {
existingSaveIndex = i;
break;
}
}
if (existingSaveIndex >= 0) {
// Replace existing save
storage['save_' + existingSaveIndex] = saveData;
} else {
// Add new save
if (saveCount >= 5) {
// Remove oldest save and shift all saves down
for (var j = 0; j < 4; j++) {
storage['save_' + j] = storage['save_' + (j + 1)];
}
storage['save_4'] = saveData;
} else {
storage['save_' + saveCount] = saveData;
storage.saveCount = saveCount + 1;
}
}
}
function loadGame(saveIndex) {
var saveData = storage['save_' + saveIndex];
if (saveData) {
// Load all saved data
storage.petName = saveData.petName;
storage.evolutionLevel = saveData.evolutionLevel;
storage.hunger = saveData.hunger;
storage.happiness = saveData.happiness;
storage.energy = saveData.energy;
storage.attack = saveData.attack;
storage.health = saveData.health;
storage.speed = saveData.speed;
storage.weight = saveData.weight;
storage.eggType = saveData.eggType;
storage.money = saveData.money;
startNewGame();
}
}
function showDigimonNaming(eggType) {
game.removeChildren();
var titleText = new Text2(getText('digimonName') + ' (Max 7 chars)', {
size: 60,
fill: 0x2196F3
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 300;
game.addChild(titleText);
// Custom name input system
var customName = '';
var nameText = new Text2(customName || 'Enter name...', {
size: 50,
fill: customName ? 0x333333 : 0x999999
});
nameText.anchor.set(0.5, 0.5);
nameText.x = 1024;
nameText.y = 500;
game.addChild(nameText);
// Character input keyboard - organized in 3 rows of 9 letters each
var keyboard = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var keyboardButtons = [];
var startX = 250;
var startY = 700;
var keyWidth = 140;
var keyHeight = 90;
var keySpacing = 10;
for (var i = 0; i < keyboard.length; i++) {
var letter = keyboard[i];
var keyButton = new Container();
// Create key background using new asset
var keyBg = keyButton.attachAsset('keyboardKey', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: keyWidth / 120,
scaleY: keyHeight / 80
});
// Add letter text
var keyText = new Text2(letter, {
size: 35,
fill: 0xFFFFFF
});
keyText.anchor.set(0.5, 0.5);
keyButton.addChild(keyText);
// Position in 3 rows of 9
var row = Math.floor(i / 9);
var col = i % 9;
keyButton.x = startX + col * (keyWidth + keySpacing);
keyButton.y = startY + row * (keyHeight + keySpacing);
keyButton.letter = letter;
keyButton.down = function (x, y, obj) {
tween(this, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
keyButton.up = function (x, y, obj) {
tween(this, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (customName.length < 7) {
customName += this.letter;
nameText.setText(customName);
nameText.fill = 0x333333;
}
};
game.addChild(keyButton);
keyboardButtons.push(keyButton);
}
// Add space and delete buttons with proper spacing
var spaceButton = new Container();
var spaceBg = spaceButton.attachAsset('specialKey', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: keyHeight / 80
});
var spaceText = new Text2('SPACE', {
size: 30,
fill: 0xFFFFFF
});
spaceText.anchor.set(0.5, 0.5);
spaceButton.addChild(spaceText);
spaceButton.x = 700;
spaceButton.y = startY + 3 * (keyHeight + keySpacing);
spaceButton.down = function (x, y, obj) {
tween(this, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
spaceButton.up = function (x, y, obj) {
tween(this, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (customName.length < 7 && customName.length > 0) {
customName += ' ';
nameText.setText(customName);
}
};
game.addChild(spaceButton);
var deleteButton = new Container();
var deleteBg = deleteButton.attachAsset('specialKey', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: keyHeight / 80,
tint: 0xF44336
});
var deleteText = new Text2('DELETE', {
size: 28,
fill: 0xFFFFFF
});
deleteText.anchor.set(0.5, 0.5);
deleteButton.addChild(deleteText);
deleteButton.x = 1100;
deleteButton.y = startY + 3 * (keyHeight + keySpacing);
deleteButton.down = function (x, y, obj) {
tween(this, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
deleteButton.up = function (x, y, obj) {
tween(this, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (customName.length > 0) {
customName = customName.slice(0, -1);
nameText.setText(customName || 'Enter name...');
nameText.fill = customName ? 0x333333 : 0x999999;
}
};
game.addChild(deleteButton);
// Preset name suggestions - positioned below keyboard
var presetNames = ['Agumon', 'Gabumon', 'Patamon', 'Palmon', 'Gomamon', 'Biyomon'];
var suggestionsText = new Text2('Quick select:', {
size: 30,
fill: 0x666666
});
suggestionsText.anchor.set(0.5, 0.5);
suggestionsText.x = 1024;
suggestionsText.y = 1200;
game.addChild(suggestionsText);
for (var i = 0; i < presetNames.length && i < 3; i++) {
var nameButton = new ActionButton(presetNames[i], 0xFF9800);
nameButton.x = 600 + i * 250;
nameButton.y = 1280;
nameButton.nameValue = presetNames[i];
nameButton.onPress = function () {
customName = this.nameValue;
nameText.setText(customName);
nameText.fill = 0x333333;
};
game.addChild(nameButton);
}
var confirmButton = new ActionButton('OK', 0x4CAF50);
confirmButton.x = 1024;
confirmButton.y = 1450;
confirmButton.onPress = function () {
if (customName.length > 0) {
storage.petName = customName;
storage.eggType = eggType;
startNewGame();
}
};
game.addChild(confirmButton);
var backButton = new ActionButton(getText('mainMenu'), 0x9E9E9E);
backButton.x = 1024;
backButton.y = 1550;
backButton.onPress = function () {
showEggSelection();
};
game.addChild(backButton);
}
function startNewGame() {
gameState = 'game';
game.removeChildren();
// Initialize starter inventory for new games only
if (!storage.hasStarterItems) {
storage.smallMeat = 10;
storage.mediumMeat = 0;
storage.largeMeat = 0;
storage.sirloin = 0;
storage.blessing = 5;
storage.medicine = 3;
storage.hasStarterItems = true;
}
initializeGameplay();
}
function initializeGameplay() {
// Add background image
var background = game.attachAsset('gameBackground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
// Start game music
LK.playMusic('Luna');
// Create pet
pet = game.addChild(new DigitalPet());
pet.x = 1024;
pet.y = 800;
// UI Elements
hungerBar = new StatBar(getText('hunger'), 0xFF5722, 'hungerIcon');
hungerBar.x = 400;
hungerBar.y = 200;
game.addChild(hungerBar);
happinessBar = new StatBar(getText('happy'), 0xFFEB3B, 'funIcon');
happinessBar.x = 400;
happinessBar.y = 280;
game.addChild(happinessBar);
energyBar = new StatBar(getText('energy'), 0x2196F3, 'fatigueIcon'); // This will now show "Fatigue"
energyBar.x = 400;
energyBar.y = 360;
game.addChild(energyBar);
// Inventory
var inventory = new Inventory();
inventory.x = 300;
inventory.y = 1450;
game.addChild(inventory);
playButton = new ActionButton(getText('play'), 0xFF9800);
playButton.x = 120;
playButton.y = 1300;
playButton.onPress = function () {
if (pet.fatigue > 80) {
// Check if too tired to play
LK.effects.flashObject(pet, 0xFF0000, 500);
return;
}
var miniGame = new MiniGame();
miniGame.x = 1024;
miniGame.y = 1200;
game.addChild(miniGame);
miniGame.onGameEnd = function (score) {
game.removeChild(miniGame);
storage.money = (storage.money || 0) + score;
};
miniGame.startGame();
};
game.addChild(playButton);
sleepButton = new ActionButton(getText('sleep'), 0x9C27B0);
sleepButton.x = 320;
sleepButton.y = 1300;
sleepButton.onPress = function () {
pet.fatigue = Math.max(0, pet.fatigue - 30); // Reduce fatigue instead of increasing energy
pet.hunger = Math.max(0, pet.hunger - 5);
LK.getSound('sleep').play();
tween(pet, {
alpha: 0.5
}, {
duration: 500,
onFinish: function onFinish() {
tween(pet, {
alpha: 1
}, {
duration: 500
});
}
});
};
game.addChild(sleepButton);
shopButton = new ActionButton(getText('shop'), 0x795548);
shopButton.x = 520;
shopButton.y = 1300;
shopButton.onPress = function () {
LK.playMusic('shopMusic');
shop = game.addChild(new Shop());
shop.x = 1024;
shop.y = 1366;
gameState = 'pause';
};
game.addChild(shopButton);
trainingButton = new ActionButton(getText('training'), 0xE65100);
trainingButton.x = 720;
trainingButton.y = 1300;
trainingButton.onPress = function () {
LK.playMusic('trainingMusic');
training = game.addChild(new Training());
training.x = 1024;
training.y = 1366;
training.updateBars();
gameState = 'pause';
};
game.addChild(trainingButton);
// Add save game button
var saveButton = new ActionButton('Save', 0x607D8B);
saveButton.x = 920;
saveButton.y = 1300;
saveButton.onPress = function () {
if (pet) {
saveGame();
LK.effects.flashScreen(0x4CAF50, 500);
}
};
game.addChild(saveButton);
// Evolution display
evolutionText = new Text2(getText('evolutionLevel') + ': 0', {
size: 40,
fill: 0x333333
});
evolutionText.anchor.set(0.5, 0);
evolutionText.x = 1024;
evolutionText.y = 600;
game.addChild(evolutionText);
// Money display
var moneyText = new Text2(getText('money') + ': ' + (storage.money || 0), {
size: 30,
fill: 0x388E3C
});
moneyText.anchor.set(0, 0);
moneyText.x = 100;
moneyText.y = 100;
LK.gui.topLeft.addChild(moneyText);
updateAllTexts();
}
// Language button
var languageButton = new LanguageButton();
LK.gui.topRight.addChild(languageButton);
languageButton.x = -50;
languageButton.y = 50;
// Start with main menu
showMainMenu();
game.update = function () {
if (gameState === 'game' && pet) {
// Update stat bars
hungerBar.updateValue(pet.hunger);
happinessBar.updateValue(pet.happiness);
energyBar.updateValue(pet.fatigue); // Use fatigue instead of energy
// Update evolution display
evolutionText.setText(getText('evolutionLevel') + ': ' + pet.evolutionLevel);
// Update money display
if (LK.gui.topLeft.children[0]) {
LK.gui.topLeft.children[0].setText(getText('money') + ': ' + (storage.money || 0));
}
// Warning effects for low stats
if (pet.hunger < 20 && LK.ticks % 60 === 0) {
LK.effects.flashObject(hungerBar, 0xFF0000, 300);
}
if (pet.happiness < 20 && LK.ticks % 60 === 0) {
LK.effects.flashObject(happinessBar, 0xFF0000, 300);
}
if (pet.fatigue > 80 && LK.ticks % 60 === 0) {
// Warning when fatigue is high
LK.effects.flashObject(energyBar, 0xFF0000, 300);
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -447,10 +447,10 @@
});
var itemIcon = slot.attachAsset(itemTypes[i], {
anchorX: 0.5,
anchorY: 0.5,
- scaleX: 1.5,
- scaleY: 1.5
+ scaleX: 2.0,
+ scaleY: 2.0
});
var countText = new Text2('0', {
size: 18,
fill: 0xFFFFFF
@@ -776,9 +776,9 @@
};
self.addChild(closeButton);
return self;
});
-var StatBar = Container.expand(function (label, color) {
+var StatBar = Container.expand(function (label, color, iconAsset) {
var self = Container.call(this);
var background = self.attachAsset('statBar', {
anchorX: 0,
anchorY: 0.5
@@ -788,8 +788,18 @@
anchorY: 0.5,
tint: color,
scaleX: 1
});
+ // Add icon if provided
+ if (iconAsset) {
+ var icon = self.attachAsset(iconAsset, {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: -120,
+ scaleX: 1.2,
+ scaleY: 1.2
+ });
+ }
var labelText = new Text2(label, {
size: 25,
fill: 0x333333
});
@@ -1414,17 +1424,17 @@
pet = game.addChild(new DigitalPet());
pet.x = 1024;
pet.y = 800;
// UI Elements
- hungerBar = new StatBar(getText('hunger'), 0xFF5722);
+ hungerBar = new StatBar(getText('hunger'), 0xFF5722, 'hungerIcon');
hungerBar.x = 400;
hungerBar.y = 200;
game.addChild(hungerBar);
- happinessBar = new StatBar(getText('happy'), 0xFFEB3B);
+ happinessBar = new StatBar(getText('happy'), 0xFFEB3B, 'funIcon');
happinessBar.x = 400;
happinessBar.y = 280;
game.addChild(happinessBar);
- energyBar = new StatBar(getText('energy'), 0x2196F3); // This will now show "Fatigue"
+ energyBar = new StatBar(getText('energy'), 0x2196F3, 'fatigueIcon'); // This will now show "Fatigue"
energyBar.x = 400;
energyBar.y = 360;
game.addChild(energyBar);
// Inventory
@@ -1432,9 +1442,9 @@
inventory.x = 300;
inventory.y = 1450;
game.addChild(inventory);
playButton = new ActionButton(getText('play'), 0xFF9800);
- playButton.x = 150;
+ playButton.x = 120;
playButton.y = 1300;
playButton.onPress = function () {
if (pet.fatigue > 80) {
// Check if too tired to play
@@ -1452,9 +1462,9 @@
miniGame.startGame();
};
game.addChild(playButton);
sleepButton = new ActionButton(getText('sleep'), 0x9C27B0);
- sleepButton.x = 350;
+ sleepButton.x = 320;
sleepButton.y = 1300;
sleepButton.onPress = function () {
pet.fatigue = Math.max(0, pet.fatigue - 30); // Reduce fatigue instead of increasing energy
pet.hunger = Math.max(0, pet.hunger - 5);
@@ -1473,9 +1483,9 @@
});
};
game.addChild(sleepButton);
shopButton = new ActionButton(getText('shop'), 0x795548);
- shopButton.x = 550;
+ shopButton.x = 520;
shopButton.y = 1300;
shopButton.onPress = function () {
LK.playMusic('shopMusic');
shop = game.addChild(new Shop());
@@ -1484,9 +1494,9 @@
gameState = 'pause';
};
game.addChild(shopButton);
trainingButton = new ActionButton(getText('training'), 0xE65100);
- trainingButton.x = 750;
+ trainingButton.x = 720;
trainingButton.y = 1300;
trainingButton.onPress = function () {
LK.playMusic('trainingMusic');
training = game.addChild(new Training());
@@ -1497,9 +1507,9 @@
};
game.addChild(trainingButton);
// Add save game button
var saveButton = new ActionButton('Save', 0x607D8B);
- saveButton.x = 950;
+ saveButton.x = 920;
saveButton.y = 1300;
saveButton.onPress = function () {
if (pet) {
saveGame();
Bandera de idioma español. In-Game asset. 2d. High contrast. No shadows
Bandera de Idioma inglés curvada con sus primeras letras EN. In-Game asset. 2d. High contrast. No shadows
Planeta tierra con un libro. In-Game asset. 2d. High contrast. No shadows
Pelusa roja de ojos amarillos tierno. In-Game asset. 2d. High contrast. No shadows
Marco de menu con relleno sin ningun texto. In-Game asset. 2d. High contrast. No shadows
Fondo de ambiente digital con azul y verde. In-Game asset. 2d. High contrast. No shadows
Carne pequeña. In-Game asset. 2d. High contrast. No shadows
Carne Grande. In-Game asset. 2d. High contrast. No shadows
Sirloin. In-Game asset. 2d. High contrast. No shadows
Medicina. In-Game asset. 2d. High contrast. No shadows
Benda. In-Game asset. 2d. High contrast. No shadows
Agumon. In-Game asset. 2d. High contrast. No shadows
barra llena. In-Game asset. 2d. High contrast. No shadows
boton sin texto. In-Game asset. 2d. High contrast. No shadows
zzZZZ. In-Game asset. 2d. High contrast. No shadows
Greymon. In-Game asset. 2d. High contrast. No shadows
Wargreymon. In-Game asset. 2d. High contrast. No shadows
Metalgreymon. In-Game asset. 2d. High contrast. No shadows
Omegamon. In-Game asset. 2d. High contrast. No shadows
Cara Koromon feliz. In-Game asset. 2d. High contrast. No shadows
Botamon. In-Game asset. 2d. High contrast. No shadows
Angemon. In-Game asset. 2d. High contrast. No shadows
Angewomon. In-Game asset. 2d. High contrast. No shadows
Gabumon. In-Game asset. 2d. High contrast. No shadows
Garurumon. In-Game asset. 2d. High contrast. No shadows
Magnaangemon. In-Game asset. 2d. High contrast. No shadows
magnadramon. In-Game asset. 2d. High contrast. No shadows
Metalgarurumon. In-Game asset. 2d. High contrast. No shadows
Ophanimon blue armor complete body sensual. In-Game asset. 2d. High contrast. No shadows
Poyomon. In-Game asset. 2d. High contrast. No shadows
Patamon. In-Game asset. 2d. High contrast. No shadows
Punimon. In-Game asset. 2d. High contrast. No shadows
Seraphimon. In-Game asset. 2d. High contrast. No shadows
Tokomon. In-Game asset. 2d. High contrast. No shadows
Tsunomon. In-Game asset. 2d. High contrast. No shadows
Weregarurumon. In-Game asset. 2d. High contrast. No shadows
Digi huevo de botamon. In-Game asset. 2d. High contrast. No shadows
Digi huevo con el patron clasico de Punimon. In-Game asset. 2d. High contrast. No shadows
Digi huevo con el patron clasico de Puyomon. In-Game asset. 2d. High contrast. No shadows
Moneda ojo monstruo. In-Game asset. 2d. High contrast. No shadows
Labrys personaje de Persona 4 Arena con ropa de tendera.. In-Game asset. 2d. High contrast. No shadows
Mesa de tienda para poner un personaje detras. In-Game asset. 2d. High contrast. No shadows
Tecla gris. In-Game asset. 2d. High contrast. No shadows
Caca rosada. In-Game asset. 2d. High contrast. No shadows
Jabón. In-Game asset. 2d. High contrast. No shadows
Inventory Slot. In-Game asset. 2d. High contrast. No shadows