Archivo de la categoría: Anima Beyond Fantasy

Hoja de personaje de Anima Beyond Fantasy en PDF editable

Daniel Sánchez me ha hecho llegar una hoja de personaje que ha creado en PDF editable para Anima: Beyond Fantasy y me ha pedido que la difunda. Así que aquí la tenéis. ¡A disfrutarla!

Hoja editable (Anima beyond fantasy)

Estado de los proyectos – Septiembre 2014

Veamos como han avanzado mis variados proyectos tras algo menos de un mes.

  • Anima: UNICO – El generador de personajes para Anima Beyond Fantasy. Sigue parado, pero sigo con ganas de ultimarlo de una vez.
  • Otros generadores de personajes – El primero ha empezado a materializarse: Workings of Fate, un conjunto de herramientas para el juego Fate Core. La primera herramienta, el Generador de Aspectos, tiene ya publicada una primera versión.
  • John Merridew está muerto – Mi novela de misterio. 1600 palabras escritas, dedicadas sobre todo a descripciones iniciales de personajes y a organizar los capítulos.
  • Archelogos – El videojuego de arqueología (mejor dicho, archelogía) situado en el mundo de Arche. Algunas pruebas de mecánicas e interfaz básica, y organizando localizaciones.
  • El mundo de Arche – El juego de rol ambientado en un mundo de fantasía platónica, aristotélica, alanmooriana. De momento, unas cinco mil palabras escritas describiendo distintos aspectos del mundo.

Como novedades, he iniciado una cuenta en Patreon para quienes quieran apoyar mi creación de aplicaciones para juegos de rol. ¡Y ya tengo dos patrones!

Anima: ÚNICO – Uso

¡Vaya! Desde antes de verano no comprobaba el número de usuarios y de personajes almacenados en el servidor de personajes de Anima: UNICO:

283 personajes y 138 usuarios

Eso sólo ya me da nuevas fuerzas para terminar con el desarrollo. ¡Espero no decepcionar!

 

Últimas actualizaciones de Anima: UNICO

  • ¡Ya puedes crear personajes de nivel distinto a 1 directamente!
  • Arreglados los problemas para elegir los bonos naturales.
  • Las distintas secciones de la hoja ahora pueden minimizarse.

Making of Anima: UNICO – Localización

Aquí estoy de nuevo. Hoy voy a hablar de un punto peliagudo: la localización, es decir, la traducción y paso a otros idiomas de la aplicación. Esto presenta varios problemas iniciales:

No puedo limitarme a traducir cada término: tengo que usar las equivalencias de las distintas ediciones internacionales. Por suerte, cuento con la ayuda de varios voluntarios (Vincent “Moklo” Bouscarle, corrector de la edición francesa de Anima, está traduciéndola al francés; Andrew “Dynaes” Reich, del foro inglés, está traduciéndola al inglés). De nuevo, muchas gracias a ambos. 

Como ya he mencionado, tengo básicamente tres capas en Anima: UNICO. La capa de modelo se encarga de organizar la información. El modelo de Personaje, por ejemplo, sabe almacenar el nombre, las habilidades, sabe cómo subir de nivel, etc. La capa de Controlador conoce los modelos y las vistas y gestiona toda la lógica general de la aplicación. Por ejemplo, el Controlador de artes marciales sabe cuánto le costará a un personaje en concreto un arte marcial en concreto, y qué datos necesitará una Vista para que el usuario pueda elegir un arte marcial. La capa de Vista recibe datos del Controlador y muestra lo que el usuario ve en la pantalla. Sólo para la Vista tiene sentido la localización.

Mi solución

function setIdiomaUI() {
   var lang = navigator.language || navigator.userLanguage;
   
   if ((lang.lastIndexOf("es") != -1) || (lang.lastIndexOf("spa") != -1)) {
      IDIOMA_UI = SPA;
   } else {
      IDIOMA_UI = ENG;
   }
}
function L(id, spa, eng) {
   this.id = id;
   this[SPA] = spa;
   this[ENG] = eng;
   if (!diccionario["ANIMAUNICO_"+this.id]) {
      diccionario["ANIMAUNICO_"+this.id] = this;
   } else {
      console.log("Clave de diccionario repetida: [" + this.id + " / " + this[SPA] + " / " + this[ENG] + "]");
      console.log("--Clave previa: [" + diccionario["ANIMAUNICO_"+this.id].id + " / " + diccionario["ANIMAUNICO_"+this.id][SPA] + " / " + diccionario["ANIMAUNICO_"+this.id][ENG] + "]");
   }
}
L.prototype = {
   constructor: L,
   toString : function() {
      return this[IDIOMA_UI];
   },
   getId : function() {
      return this.id;
   }
};
function _l(clave) {
   if (diccionario["ANIMAUNICO_"+clave]) {
      return diccionario["ANIMAUNICO_"+clave].toString();
   } else {
      return clave;
   }
}

Explicando un poco: creo una clase, L, que tendrá como instancias cada cadena a localizar y sus localizaciones. Además, tengo una función, _l, que recibe el identificador de una cadena y devuelve su localización al idioma actual. Internamente, las capas de modelo y de controlador sólo usan los identificadores de las cadenas, que son únicos. Cuando la capa Vista va a mostrar algún texto en pantalla, se asegura de mostrarlo llamando a la función _l.

La declaración de cadenas la realizo así:

var UI_DAÑO_FINAL = (new L("UI_DAÑO_FINAL","Daño final","Final Dmg.")).getId();
var UI_VELOCIDAD = (new L("UI_VELOCIDAD","Velocidad","Speed")).getId();
var UI_TURNO_FINAL = (new L("UI_TURNO_FINAL","Turno final","Final Init.")).getId();

Como se puede ver, esto es sólo para español e inglés. En cuanto añada la traducción al francés, me bastará con alterar la clase L y añadir la localización a cada cadena como un argumento más.

Como resulta claro enseguida, esta solución aún presenta problemas. Por ejemplo, habrá ocasiones en que la unión de varios términos deba hacerse en distinto orden según el idioma, y éste sistema de por sí no ofrece soporte para ese caso. Pero para el caso de una hoja de personaje, que sobre todo mostrará términos de manera aislada de momento me está funcionando bastante bien.

Anima: UNICO – Making of – Arcana Sephirah v2

arcanaSephirahV2

Mejor, ¿verdad? Aún no es perfecto, pero ya se deja mirar.