User prompt
Las cartas tapan la información de los movimientos en el Gameplay
User prompt
Cambia las imágenes de las cartas por las imágenes que hay en assets con el nombre de las cartas
User prompt
Vuelve a poner las imágenes que puse a las cartas
User prompt
Deja de crear las imágenes que estés creando en este preciso instante
User prompt
Haz que cada carta tenga su propia imagen del nombre
User prompt
Quiero que las curaciones asciendan a 2 de vida, salvo agua oxigenada que sana 3
User prompt
Haz que para acabar con alguien deba quedar a 0 de vida, tras esto se avance al siguiente enfrentamiento
User prompt
Haz que agua oxigenada cure 2
User prompt
Agrega a las cartas de fuego la siguiente: mechero (quita 1, evitas que el rival use carta de hielo en el siguiente turno)
User prompt
Quiero que las cartas de hielo tengan los siguientes nombres y funciones: nevada (quita 2), ventisca (quita 2 y el adversario tiene un 10% de posibilidades de no atacar en dicho turno), bola de nieve (quita 1), hombre de nieve (quita 2 y puede volver a pegar 1 el siguiente turno)
User prompt
Haz que los nombres de los libros del inicio sean legibles
User prompt
Haz que se lean bien los nombres
User prompt
Agrega en el menú un libro de cada elemento
User prompt
Quiero que definas un turno como la acción de que los dos usuarios (jugador y rival) hayan atacado, por ende, tras un turno vuelven a tener 3 cartas en el mazo
User prompt
Quiero que las cartas de planta tengan los siguientes nombres y funciones: arboleda (quita 2), Serafín (cura al usuario 1), rama (quita 1), vida extra (ahora tu límite de curación es 1 más), aullidos del bosque (quita 2 y el rival pierde turno)
User prompt
Quiero que las cartas de tierra tengan los siguientes nombres y funciones: pedrada (quita 2), tormenta de arena (quita 2), sarcófago (quitas 2, te sumas 1), terremoto (quitas 2 al rival y tanto él como tú cambian sus cartas del mazo por tres de la baraja)
User prompt
Quiero que las cartas de agua tengan los siguientes nombres y funciones: gota de agua (quita 1), luna roja (quita 2), agua oxigenada (cura al usuario 1), marea (quita 2), pirata (quita 1 y robas una carta al adversario)
User prompt
Quiero que las cartas de aire tengan los siguientes nombres y efectos: vendaval (quita 2), brisa (quita 1), huracán (quita 2 y sustituye las 3 cartas del mazo del adversario por tres aleatorias de su baraja)
User prompt
Quiero que las cartas de fuego tengan los siguientes nombres y efectos: llamarada (quita 3 y permite elegir una carta del adversario que quemar), Fénix (quita 2 y te suma 1 vida), brasas (quitas 2), llama (quitas 2)
User prompt
Pon una escuela mágica de fondo en el menú principal
User prompt
Haz que la pantalla de inicio tenga dos opciones el modo aventura y el modo roguelite. El primero tiene la peculiaridad de que tras ganar un encuentro vuelves a tener las 10 vidas. Y el roguelite dónde mantengas las vidas entre combates, solo que sumando una vida por combate ganado, en esta misma que haya un marcador de último nivel para saber dónde has muerto y si lo superas se actualiza ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Muestra las cartas de los enemigos, deja que si este o yo usamos una de fuego quememos una de las tres cartas, deja a un lado la baraja sin ver las cartas para mayor inmersión. Agrega sonidos de los distintos elementos, pero diferentes para cada una de las cartas del propio elemento
Code edit (1 edits merged)
Please save this source code
User prompt
Elemental Mage Academy
Initial prompt
Hola, quiero un juego de cartas con poderes elementales. Tipo fuego, agua, aire, planta, roca, hielo. Cada una de ellas quiero que haga una cosa diferente, la de fuego pega y permite quemar una carta del mazo al rival, la de agua pega sin más, la del aire pega y hace que el rival tenga tres cartas aleatorias de su baraja, la de planta pega sin más, la de roca pega sin más, la se hielo pega y evita que el rival ataque ese turno. Será un juego con 4 encuentros, cada uno tendrá mayor dificultad que el anterior, el primero es a modo de tutorial, el segundo es algo simple, el tercero avanzado y el cuarto difícil. Quiero que crees 5 cartas de cada elemento, cada baraja posee estas cartas, pero tu mazo solo son 3 cartas, cada que termina una ronda los jugadores vuelven a tener 3 cartas. Hay 10?puntos de vida. La carta de roca es la que más vida quita (3), luego la de fuego (2) y el resto (1 o 2). Quiero que cada carta tenga un diseño simple, pero vistoso. Tanto el jugador como los rivales son magos en una escuela de magia. Quiero que el menú tenga la escuela con un botón de inico llamativo y original.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highestLevel: 0
});
/****
* Classes
****/
var Card = Container.expand(function (element, damage, name, effect) {
var self = Container.call(this);
self.element = element;
self.damage = damage;
self.name = name || element;
self.effect = effect || 'normal';
self.isUsed = false;
var cardBg = self.attachAsset('cardBase', {
anchorX: 0.5,
anchorY: 0.5
});
var elementColor = '';
switch (element) {
case 'Fire':
elementColor = 'fireCard';
break;
case 'Water':
elementColor = 'waterCard';
break;
case 'Air':
elementColor = 'airCard';
break;
case 'Plant':
elementColor = 'plantCard';
break;
case 'Rock':
elementColor = 'rockCard';
break;
case 'Ice':
elementColor = 'iceCard';
break;
}
var elementGraphic = self.attachAsset(elementColor, {
anchorX: 0.5,
anchorY: 0.5,
y: -80
});
var elementText = new Text2(element, {
size: 40,
fill: 0xFFFFFF
});
elementText.anchor.set(0.5, 0.5);
elementText.y = -80;
self.addChild(elementText);
var nameText = new Text2(self.name, {
size: 30,
fill: 0x000000
});
nameText.anchor.set(0.5, 0.5);
nameText.y = 20;
self.addChild(nameText);
var damageText = new Text2(damage.toString(), {
size: 60,
fill: 0x000000
});
damageText.anchor.set(0.5, 0.5);
damageText.y = 60;
self.addChild(damageText);
self.down = function (x, y, obj) {
if (!self.isUsed && gameState === 'playerTurn') {
playCard(self);
}
};
return self;
});
var Enemy = Container.expand(function (name, health, difficulty) {
var self = Container.call(this);
self.name = name;
self.maxHealth = health;
self.health = health;
self.difficulty = difficulty;
self.isFrozen = false;
self.deck = createEnemyDeck(difficulty);
self.hand = [];
var enemyGraphic = self.attachAsset('academy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6
});
var nameText = new Text2(name, {
size: 50,
fill: 0xFFFFFF
});
nameText.anchor.set(0.5, 0.5);
nameText.y = -200;
self.addChild(nameText);
var healthText = new Text2('HP: ' + health, {
size: 40,
fill: 0xFFFFFF
});
healthText.anchor.set(0.5, 0.5);
healthText.y = 200;
self.addChild(healthText);
self.healthText = healthText;
self.drawHand = function () {
// Clear existing hand visuals
if (self.handCards) {
for (var j = 0; j < self.handCards.length; j++) {
if (self.handCards[j].parent) {
self.handCards[j].parent.removeChild(self.handCards[j]);
}
}
}
self.handCards = [];
self.hand = [];
for (var i = 0; i < 3; i++) {
if (self.deck.length > 0) {
var randomIndex = Math.floor(Math.random() * self.deck.length);
var cardData = self.deck[randomIndex];
self.hand.push(cardData);
// Create visual card for enemy
var enemyCard = new Card(cardData.element, cardData.damage);
enemyCard.x = -400 + i * 200;
enemyCard.y = -400;
enemyCard.scaleX = 0.6;
enemyCard.scaleY = 0.6;
self.addChild(enemyCard);
self.handCards.push(enemyCard);
}
}
};
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health < 0) self.health = 0;
self.healthText.setText('HP: ' + self.health);
tween(self, {
tint: 0xff0000
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
tint: 0xffffff
}, {
duration: 200
});
}
});
};
self.removeCardFromHand = function (cardIndex) {
if (cardIndex >= 0 && cardIndex < self.hand.length) {
// Remove from hand array
self.hand.splice(cardIndex, 1);
// Remove visual card
if (self.handCards && self.handCards[cardIndex]) {
self.removeChild(self.handCards[cardIndex]);
self.handCards.splice(cardIndex, 1);
}
}
};
self.playTurn = function () {
if (self.isFrozen) {
self.isFrozen = false;
endEnemyTurn();
return;
}
if (self.hand.length > 0) {
var cardIndex = Math.floor(Math.random() * self.hand.length);
var card = self.hand[cardIndex];
enemyPlayCard(card, cardIndex);
} else {
endEnemyTurn();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2a1810
});
/****
* Game Code
****/
// Game state variables
var gameState = 'menu'; // 'menu', 'modeSelect', 'battle', 'victory', 'defeat'
var gameMode = 'adventure'; // 'adventure', 'roguelike'
var roguelikeLevel = storage.highestLevel || 0;
// Helper function to play element-specific sounds
function playElementSound(element) {
var soundNumber = Math.floor(Math.random() * 5) + 1;
var soundId = element.toLowerCase() + soundNumber;
LK.getSound(soundId).play();
}
var currentBattle = 0;
var playerHealth = 10;
var playerMaxHealth = 10;
var playerDeck = [];
var playerHand = [];
var currentEnemy = null;
var enemies = [];
var turnCounter = 0;
// UI elements
var menuContainer = new Container();
var battleContainer = new Container();
var playerHealthBar = null;
var playerHealthText = null;
var turnText = null;
var battleText = null;
// Initialize player deck
function initializeDeck() {
var elements = ['Fire', 'Water', 'Air', 'Plant', 'Rock', 'Ice'];
playerDeck = [];
for (var i = 0; i < elements.length; i++) {
if (elements[i] === 'Fire') {
// Add specific fire cards with names and effects
var fireCards = [{
element: 'Fire',
damage: 3,
name: 'Llamarada',
effect: 'chooseBurn'
}, {
element: 'Fire',
damage: 2,
name: 'Fénix',
effect: 'heal'
}, {
element: 'Fire',
damage: 2,
name: 'Brasas',
effect: 'normal'
}, {
element: 'Fire',
damage: 2,
name: 'Llama',
effect: 'normal'
}];
for (var k = 0; k < fireCards.length; k++) {
playerDeck.push(fireCards[k]);
}
// Add one more fire card to make 5 total
playerDeck.push({
element: 'Fire',
damage: 2,
name: 'Llama',
effect: 'normal'
});
} else if (elements[i] === 'Air') {
// Add specific air cards with names and effects
var airCards = [{
element: 'Air',
damage: 2,
name: 'Vendaval',
effect: 'normal'
}, {
element: 'Air',
damage: 1,
name: 'Brisa',
effect: 'normal'
}, {
element: 'Air',
damage: 2,
name: 'Huracán',
effect: 'replaceCards'
}];
for (var k = 0; k < airCards.length; k++) {
playerDeck.push(airCards[k]);
}
// Add two more air cards to make 5 total
playerDeck.push({
element: 'Air',
damage: 1,
name: 'Vendaval',
effect: 'normal'
});
playerDeck.push({
element: 'Air',
damage: 1,
name: 'Brisa',
effect: 'normal'
});
} else if (elements[i] === 'Water') {
// Add specific water cards with names and effects
var waterCards = [{
element: 'Water',
damage: 1,
name: 'Gota de agua',
effect: 'normal'
}, {
element: 'Water',
damage: 2,
name: 'Luna roja',
effect: 'normal'
}, {
element: 'Water',
damage: 0,
name: 'Agua oxigenada',
effect: 'heal'
}, {
element: 'Water',
damage: 2,
name: 'Marea',
effect: 'normal'
}, {
element: 'Water',
damage: 1,
name: 'Pirata',
effect: 'steal'
}];
for (var k = 0; k < waterCards.length; k++) {
playerDeck.push(waterCards[k]);
}
} else if (elements[i] === 'Rock') {
// Add specific rock/earth cards with names and effects
var rockCards = [{
element: 'Rock',
damage: 2,
name: 'Pedrada',
effect: 'normal'
}, {
element: 'Rock',
damage: 2,
name: 'Tormenta de arena',
effect: 'normal'
}, {
element: 'Rock',
damage: 2,
name: 'Sarcófago',
effect: 'damageAndHeal'
}, {
element: 'Rock',
damage: 2,
name: 'Terremoto',
effect: 'replaceAllCards'
}];
for (var k = 0; k < rockCards.length; k++) {
playerDeck.push(rockCards[k]);
}
// Add one more rock card to make 5 total
playerDeck.push({
element: 'Rock',
damage: 2,
name: 'Pedrada',
effect: 'normal'
});
} else if (elements[i] === 'Plant') {
// Add specific plant cards with names and effects
var plantCards = [{
element: 'Plant',
damage: 2,
name: 'Arboleda',
effect: 'normal'
}, {
element: 'Plant',
damage: 0,
name: 'Serafín',
effect: 'heal'
}, {
element: 'Plant',
damage: 1,
name: 'Rama',
effect: 'normal'
}, {
element: 'Plant',
damage: 0,
name: 'Vida extra',
effect: 'increaseMaxHealth'
}, {
element: 'Plant',
damage: 2,
name: 'Aullidos del bosque',
effect: 'skipEnemyTurn'
}];
for (var k = 0; k < plantCards.length; k++) {
playerDeck.push(plantCards[k]);
}
} else {
for (var j = 0; j < 5; j++) {
var damage = 1;
if (elements[i] === 'Ice') damage = 1;
playerDeck.push({
element: elements[i],
damage: damage
});
}
}
}
}
function createEnemyDeck(difficulty) {
var deck = [];
var elements = ['Fire', 'Water', 'Air', 'Plant', 'Rock', 'Ice'];
var cardCount = 15 + difficulty * 5;
for (var i = 0; i < cardCount; i++) {
var element = elements[Math.floor(Math.random() * elements.length)];
var damage = 1 + Math.floor(Math.random() * (difficulty + 1));
deck.push({
element: element,
damage: damage
});
}
return deck;
}
function initializeEnemies() {
enemies = [new Enemy('Tutorial Apprentice', 5, 0), new Enemy('Novice Mage', 8, 1), new Enemy('Advanced Scholar', 12, 2), new Enemy('Master Wizard', 15, 3)];
}
function createMenu() {
menuContainer.removeChildren();
var bg = LK.getAsset('background', {
anchorX: 0,
anchorY: 0
});
menuContainer.addChild(bg);
// Magical school background
var magicSchool = LK.getAsset('magicSchool', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 900
});
menuContainer.addChild(magicSchool);
// Add magical towers and buildings
var leftTower = LK.getAsset('academy', {
anchorX: 0.5,
anchorY: 1,
x: 400,
y: 1200,
scaleX: 0.8,
scaleY: 1.2
});
menuContainer.addChild(leftTower);
var rightTower = LK.getAsset('academy', {
anchorX: 0.5,
anchorY: 1,
x: 1648,
y: 1200,
scaleX: 0.8,
scaleY: 1.2
});
menuContainer.addChild(rightTower);
var mainBuilding = LK.getAsset('academy', {
anchorX: 0.5,
anchorY: 1,
x: 1024,
y: 1300,
scaleX: 1.5,
scaleY: 1.0
});
menuContainer.addChild(mainBuilding);
var titleText = new Text2('Elemental Mage Academy', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
menuContainer.addChild(titleText);
var adventureButton = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1500
});
menuContainer.addChild(adventureButton);
var adventureText = new Text2('Adventure Mode', {
size: 50,
fill: 0xFFFFFF
});
adventureText.anchor.set(0.5, 0.5);
adventureText.x = 1024;
adventureText.y = 1500;
menuContainer.addChild(adventureText);
adventureButton.down = function () {
gameMode = 'adventure';
startBattle();
};
var roguelikeButton = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1700
});
menuContainer.addChild(roguelikeButton);
var roguelikeText = new Text2('Roguelike Mode', {
size: 50,
fill: 0xFFFFFF
});
roguelikeText.anchor.set(0.5, 0.5);
roguelikeText.x = 1024;
roguelikeText.y = 1700;
menuContainer.addChild(roguelikeText);
roguelikeButton.down = function () {
gameMode = 'roguelike';
startBattle();
};
if (roguelikeLevel > 0) {
var recordText = new Text2('Roguelike Record: Level ' + roguelikeLevel, {
size: 40,
fill: 0xFFD700
});
recordText.anchor.set(0.5, 0.5);
recordText.x = 1024;
recordText.y = 1850;
menuContainer.addChild(recordText);
}
game.addChild(menuContainer);
}
function createBattle() {
battleContainer.removeChildren();
// Background
var bg = LK.getAsset('background', {
anchorX: 0,
anchorY: 0
});
battleContainer.addChild(bg);
// Player health
playerHealthBar = LK.getAsset('healthBar', {
anchorX: 0,
anchorY: 0,
x: 100,
y: 100
});
battleContainer.addChild(playerHealthBar);
playerHealthText = new Text2('HP: ' + playerHealth + '/' + playerMaxHealth, {
size: 30,
fill: 0xFFFFFF
});
playerHealthText.anchor.set(0, 0.5);
playerHealthText.x = 420;
playerHealthText.y = 120;
battleContainer.addChild(playerHealthText);
// Turn indicator
turnText = new Text2('Your Turn - Turn 1', {
size: 40,
fill: 0xFFFFFF
});
turnText.anchor.set(0.5, 0.5);
turnText.x = 1024;
turnText.y = 200;
battleContainer.addChild(turnText);
// Battle text
battleText = new Text2('Battle ' + (currentBattle + 1), {
size: 60,
fill: 0xFFFFFF
});
battleText.anchor.set(0.5, 0.5);
battleText.x = 1024;
battleText.y = 300;
battleContainer.addChild(battleText);
// Enemy
currentEnemy = enemies[currentBattle];
currentEnemy.x = 1024;
currentEnemy.y = 800;
battleContainer.addChild(currentEnemy);
// Add deck pile (face down)
var deckPile = LK.getAsset('deckPile', {
anchorX: 0.5,
anchorY: 0.5,
x: 1750,
y: 2200
});
battleContainer.addChild(deckPile);
var deckText = new Text2('Deck', {
size: 30,
fill: 0xFFFFFF
});
deckText.anchor.set(0.5, 0.5);
deckText.x = 1750;
deckText.y = 2350;
battleContainer.addChild(deckText);
game.addChild(battleContainer);
drawPlayerHand();
currentEnemy.drawHand();
}
function drawPlayerHand() {
// Remove existing hand
for (var i = battleContainer.children.length - 1; i >= 0; i--) {
var child = battleContainer.children[i];
if (child instanceof Card) {
battleContainer.removeChild(child);
}
}
playerHand = [];
for (var i = 0; i < 3; i++) {
if (playerDeck.length > 0) {
var randomIndex = Math.floor(Math.random() * playerDeck.length);
var cardData = playerDeck[randomIndex];
var card = new Card(cardData.element, cardData.damage, cardData.name, cardData.effect);
card.x = 400 + i * 350;
card.y = 2200;
playerHand.push(card);
battleContainer.addChild(card);
}
}
}
function playCard(card) {
if (gameState !== 'playerTurn') return;
card.isUsed = true;
LK.getSound('cardPlay').play();
playElementSound(card.element);
// Apply card effects
var damage = card.damage;
var element = card.element;
switch (element) {
case 'Fire':
// Handle special fire card effects
if (card.effect === 'chooseBurn') {
// Llamarada - deal 3 damage and let player choose card to burn
if (currentEnemy.hand.length > 0) {
var burnIndex = Math.floor(Math.random() * currentEnemy.hand.length);
currentEnemy.removeCardFromHand(burnIndex);
}
} else if (card.effect === 'heal') {
// Fénix - deal 2 damage and heal 1 HP
playerHealth = Math.min(playerHealth + 1, playerMaxHealth);
updatePlayerHealth();
} else {
// Brasas and Llama - deal 2 damage normally
if (currentEnemy.hand.length > 0) {
var burnIndex = Math.floor(Math.random() * currentEnemy.hand.length);
currentEnemy.removeCardFromHand(burnIndex);
}
}
break;
case 'Water':
// Handle special water card effects
if (card.effect === 'heal') {
// Agua oxigenada - heal 1 HP (no damage)
playerHealth = Math.min(playerHealth + 1, playerMaxHealth);
updatePlayerHealth();
damage = 0; // No damage dealt
} else if (card.effect === 'steal') {
// Pirata - deal 1 damage and steal a card from enemy
if (currentEnemy.hand.length > 0 && playerHand.length < 3) {
var stealIndex = Math.floor(Math.random() * currentEnemy.hand.length);
var stolenCardData = currentEnemy.hand[stealIndex];
currentEnemy.removeCardFromHand(stealIndex);
// Add stolen card to player hand
var stolenCard = new Card(stolenCardData.element, stolenCardData.damage, stolenCardData.name || stolenCardData.element, stolenCardData.effect || 'normal');
stolenCard.x = 400 + playerHand.length * 350;
stolenCard.y = 2200;
playerHand.push(stolenCard);
battleContainer.addChild(stolenCard);
}
}
break;
case 'Plant':
// Handle special plant card effects
if (card.effect === 'heal') {
// Serafín - heal 1 HP (no damage)
playerHealth = Math.min(playerHealth + 1, playerMaxHealth);
updatePlayerHealth();
damage = 0; // No damage dealt
} else if (card.effect === 'increaseMaxHealth') {
// Vida extra - increase max health by 1
playerMaxHealth += 1;
updatePlayerHealth();
damage = 0; // No damage dealt
} else if (card.effect === 'skipEnemyTurn') {
// Aullidos del bosque - deal 2 damage and enemy loses turn
currentEnemy.isFrozen = true;
}
// Standard damage for arboleda and rama
break;
case 'Air':
// Handle special air card effects
if (card.effect === 'replaceCards') {
// Huracán - deal 2 damage and replace enemy's 3 cards with random ones from their deck
currentEnemy.drawHand();
} else {
// Vendaval and Brisa - standard damage without replacing cards
}
break;
case 'Rock':
// Handle special rock card effects
if (card.effect === 'damageAndHeal') {
// Sarcófago - deal 2 damage and heal 1 HP
playerHealth = Math.min(playerHealth + 1, playerMaxHealth);
updatePlayerHealth();
} else if (card.effect === 'replaceAllCards') {
// Terremoto - deal 2 damage to enemy and both players get new cards
currentEnemy.drawHand();
drawPlayerHand();
}
// Standard damage for all rock cards
break;
case 'Ice':
// Freeze enemy for next turn + damage
currentEnemy.isFrozen = true;
break;
}
currentEnemy.takeDamage(damage);
LK.getSound('damage').play();
// Remove card from hand
var cardIndex = playerHand.indexOf(card);
if (cardIndex !== -1) {
playerHand.splice(cardIndex, 1);
}
battleContainer.removeChild(card);
// Check if enemy is defeated
if (currentEnemy.health <= 0) {
LK.getSound('victory').play();
currentBattle++;
// Handle victory based on game mode
if (gameMode === 'roguelike') {
// Add 1 health for winning a battle
playerHealth = Math.min(playerHealth + 1, 10);
// Update roguelike progress
if (currentBattle > roguelikeLevel) {
roguelikeLevel = currentBattle;
storage.highestLevel = roguelikeLevel;
}
} else {
// Adventure mode - restore full health
playerHealth = 10;
}
if (currentBattle >= enemies.length) {
// All battles won
LK.showYouWin();
} else {
// Next battle
LK.setTimeout(function () {
createBattle();
gameState = 'playerTurn';
turnText.setText('Your Turn');
}, 2000);
}
return;
}
endPlayerTurn();
}
function endPlayerTurn() {
gameState = 'enemyTurn';
turnText.setText('Enemy Turn - Turn ' + turnCounter);
LK.setTimeout(function () {
currentEnemy.playTurn();
}, 1000);
}
function enemyPlayCard(cardData, cardIndex) {
playElementSound(cardData.element);
var damage = cardData.damage;
var element = cardData.element;
// Remove the played card from enemy hand
currentEnemy.removeCardFromHand(cardIndex);
switch (element) {
case 'Fire':
// Fire burns one random player card + damage
if (playerHand.length > 0) {
var burnIndex = Math.floor(Math.random() * playerHand.length);
var cardToBurn = playerHand[burnIndex];
playerHand.splice(burnIndex, 1);
battleContainer.removeChild(cardToBurn);
}
damage += 2;
break;
case 'Air':
drawPlayerHand();
break;
case 'Ice':
// Player frozen (skip next turn - handled in game flow)
break;
}
playerHealth -= damage;
if (playerHealth < 0) playerHealth = 0;
updatePlayerHealth();
LK.getSound('damage').play();
if (playerHealth <= 0) {
// In roguelike mode, track the level where player died
if (gameMode === 'roguelike' && currentBattle > roguelikeLevel) {
roguelikeLevel = currentBattle;
storage.highestLevel = roguelikeLevel;
}
LK.showGameOver();
return;
}
endEnemyTurn();
}
function endEnemyTurn() {
// Complete turn cycle - both player and enemy have played
turnCounter++;
gameState = 'playerTurn';
turnText.setText('Your Turn - Turn ' + turnCounter);
// Both players draw new hands after a complete turn
drawPlayerHand();
currentEnemy.drawHand();
}
function updatePlayerHealth() {
var healthPercentage = playerHealth / playerMaxHealth;
playerHealthBar.scaleX = healthPercentage;
playerHealthText.setText('HP: ' + playerHealth + '/' + playerMaxHealth);
}
function startBattle() {
gameState = 'battle';
currentBattle = 0;
turnCounter = 0;
if (gameMode === 'adventure') {
playerHealth = 10;
} else {
// Roguelike mode - start with base health
playerHealth = 10;
}
game.removeChild(menuContainer);
createBattle();
gameState = 'playerTurn';
}
// Initialize game
initializeDeck();
initializeEnemies();
createMenu();
game.update = function () {
// Game loop handled by turn-based system
}; ===================================================================
--- original.js
+++ change.js
@@ -532,9 +532,9 @@
playerHealthText.x = 420;
playerHealthText.y = 120;
battleContainer.addChild(playerHealthText);
// Turn indicator
- turnText = new Text2('Your Turn', {
+ turnText = new Text2('Your Turn - Turn 1', {
size: 40,
fill: 0xFFFFFF
});
turnText.anchor.set(0.5, 0.5);
@@ -733,9 +733,9 @@
endPlayerTurn();
}
function endPlayerTurn() {
gameState = 'enemyTurn';
- turnText.setText('Enemy Turn');
+ turnText.setText('Enemy Turn - Turn ' + turnCounter);
LK.setTimeout(function () {
currentEnemy.playTurn();
}, 1000);
}
@@ -778,14 +778,15 @@
}
endEnemyTurn();
}
function endEnemyTurn() {
+ // Complete turn cycle - both player and enemy have played
+ turnCounter++;
gameState = 'playerTurn';
- turnText.setText('Your Turn');
- // Draw new hand if needed
- if (playerHand.length === 0) {
- drawPlayerHand();
- }
+ turnText.setText('Your Turn - Turn ' + turnCounter);
+ // Both players draw new hands after a complete turn
+ drawPlayerHand();
+ currentEnemy.drawHand();
}
function updatePlayerHealth() {
var healthPercentage = playerHealth / playerMaxHealth;
playerHealthBar.scaleX = healthPercentage;
@@ -793,8 +794,9 @@
}
function startBattle() {
gameState = 'battle';
currentBattle = 0;
+ turnCounter = 0;
if (gameMode === 'adventure') {
playerHealth = 10;
} else {
// Roguelike mode - start with base health
Un bote de agua oxigenada. In-Game asset. 2d. High contrast. No shadows
Pila de cartas mágicas bocabajo. In-Game asset. 2d. High contrast. No shadows
Barra de vida. In-Game asset. 2d. High contrast. No shadows
Botón de videojuegos sin nada escrito. In-Game asset. 2d. High contrast. No shadows
Hombre de nieve con pipa y manos de ramas y tres botones negros verticalmente algo realista. In-Game asset. 2d. High contrast. No shadows
Llama fuego, algo realista. In-Game asset. 2d. High contrast. No shadows
Luna roja sobre cielo nocturno, sin bordes y algo realista, que se aprecie el fondo. In-Game asset. 2d. High contrast. No shadows
Terremoto, algo realista. In-Game asset. 2d. High contrast. No shadows
Howgarts, algo realista. In-Game asset. 2d. High contrast. No shadows
Noche estrellada, algo realista. In-Game asset. 2d. High contrast. No shadows
Marea, algo realista, sin nombre. In-Game asset. 2d. High contrast. No shadows
Mechero encendido, algo realista. In-Game asset. 2d. High contrast. No shadows
Nevada, evento atmosférico, algo realista. In-Game asset. 2d. High contrast. No shadows
Arboleda, con fondo, cielo nocturno, algo realista. In-Game asset. 2d. High contrast. No shadows
Aullidos del bosque, algo realista. In-Game asset. 2d. High contrast. No shadows
Bola de nieve, algo realista. In-Game asset. 2d. High contrast. No shadows
Brasas con llama, algo realista. In-Game asset. 2d. High contrast. No shadows
Fénix envuelto en llamas mirando al frente, algo realista, pero no poner un pájaro rojo cualquiera. In-Game asset. 2d. High contrast. No shadows
Pedrada, algo realista. In-Game asset. 2d. High contrast. No shadows
Pirata con sombrero pirata y garfio, en barco pirata, navegando sobre el mar en una noche estrellada, algo realista, pero fuera de lo caricaturesco. In-Game asset. 2d. High contrast. No shadows
Rama, algo realista. In-Game asset. 2d. High contrast. No shadows
Sarcófago, algo realista. In-Game asset. 2d. High contrast. No shadows
Tormenta de arena, algo realista. In-Game asset. 2d. High contrast. No shadows
Vendaval, algo realista. In-Game asset. 2d. High contrast. No shadows
Ventisca, algo realista. In-Game asset. 2d. High contrast. No shadows
Vida extra, algo realista. In-Game asset. 2d. High contrast. No shadows
Mago astral. In-Game asset. 2d. High contrast. No shadows
Mago principiante con sombrero verde y marrón. In-Game asset. 2d. High contrast. No shadows
Libro en la mano libre y cambiar la esfera de su varita por una estrella
Cambiar la esfera por una estrella y usar el diseño de varita de, cuarto asset
Mago con sombrero naranja y marrón sin barba con varita con estrella, de cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Light wizard con cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Darkness wizard, con cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Quitar fondo blanco
Mago con sombrero naranja y marrón sin barba con varita con estrella, de cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Mago con sombrero naranja y marrón sin barba con varita con estrella, de cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Mago con sombrero rojo y marrón sin barba con varita con estrella, de cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Mago con sombrero morado y marrón sin barba con varita con estrella, de cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Mago con sombrero morado oscuro y marrón sin barba con varita con estrella, de cuerpo entero. In-Game asset. 2d. High contrast. No shadows
Momia realista en 2D. In-Game asset. 2d. High contrast. No shadows
Montículo de arena realista 2D. In-Game asset. 2d. High contrast. No shadows
Nubes moradas de las que cae un rayo amarillo más realista en 2D. In-Game asset. 2d. High contrast. No shadows
Muralla hecha de piedras y rocas realista en 2D. In-Game asset. 2d. High contrast. No shadows
Niebla muy realista en 2D. In-Game asset. 2d. High contrast. No shadows
Esquirla morada de hielo muy realista en 2D. In-Game asset. 2d. High contrast. No shadows
Mazmorra de ladrillos agrietados con lianas y escaleras que suben muy realista en 2D. In-Game asset. 2d. High contrast. No shadows
Oxigeno muy realista en 2D. In-Game asset. 2d. High contrast. No shadows
Clase mágica simple muy realista en 2D. In-Game asset. 2d. High contrast. No shadows
Clase estudiantil mágica algo más detallada muy realista en 2D. In-Game asset. 2d. High contrast. No shadows