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) { var self = Container.call(this); self.element = element; self.damage = damage; 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 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++) { for (var j = 0; j < 5; j++) { var damage = 1; if (elements[i] === 'Rock') damage = 3;else if (elements[i] === 'Fire' || elements[i] === 'Water' || elements[i] === 'Plant') damage = 2;else if (elements[i] === 'Air' || 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); var academy = LK.getAsset('academy', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1000 }); menuContainer.addChild(academy); 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', { 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); 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': // Fire burns one random enemy card + damage if (currentEnemy.hand.length > 0) { var burnIndex = Math.floor(Math.random() * currentEnemy.hand.length); currentEnemy.removeCardFromHand(burnIndex); } damage += 2; break; case 'Water': case 'Plant': // Standard damage break; case 'Air': // Force enemy to draw cards + damage currentEnemy.drawHand(); break; case 'Rock': // Maximum damage 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'); 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() { gameState = 'playerTurn'; turnText.setText('Your Turn'); // Draw new hand if needed if (playerHand.length === 0) { drawPlayerHand(); } } function updatePlayerHealth() { var healthPercentage = playerHealth / playerMaxHealth; playerHealthBar.scaleX = healthPercentage; playerHealthText.setText('HP: ' + playerHealth + '/' + playerMaxHealth); } function startBattle() { gameState = 'battle'; currentBattle = 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
@@ -1,9 +1,11 @@
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
-var storage = LK.import("@upit/storage.v1");
+var storage = LK.import("@upit/storage.v1", {
+ highestLevel: 0
+});
/****
* Classes
****/
@@ -175,9 +177,11 @@
/****
* Game Code
****/
// Game state variables
-var gameState = 'menu'; // 'menu', 'battle', 'victory', 'defeat'
+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;
@@ -251,26 +255,56 @@
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
menuContainer.addChild(titleText);
- var startButton = LK.getAsset('button', {
+ var adventureButton = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
- y: 1600
+ y: 1500
});
- menuContainer.addChild(startButton);
- var startText = new Text2('Start Battle', {
+ menuContainer.addChild(adventureButton);
+ var adventureText = new Text2('Adventure Mode', {
size: 50,
fill: 0xFFFFFF
});
- startText.anchor.set(0.5, 0.5);
- startText.x = 1024;
- startText.y = 1600;
- menuContainer.addChild(startText);
- startButton.down = function () {
+ 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();
@@ -404,8 +438,21 @@
// 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 {
@@ -455,8 +502,13 @@
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();
@@ -476,9 +528,14 @@
}
function startBattle() {
gameState = 'battle';
currentBattle = 0;
- playerHealth = 10;
+ if (gameMode === 'adventure') {
+ playerHealth = 10;
+ } else {
+ // Roguelike mode - start with base health
+ playerHealth = 10;
+ }
game.removeChild(menuContainer);
createBattle();
gameState = 'playerTurn';
}
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