Tag Archives: Anima

Last updates of Anima: UNICO

  • You can now create directly a character with a level higher than 1!
  • Fixed the problems assigning natural bonuses
  • Sections of the character sheet can now be minimized.

Anima: UNICO – Crowdfunding on its way

As you may have seen, this last month the development of Anima: UNICO has slowed down a lot. That’s the thing about hobbies: they get the last spot on the priority queue. I would like Anima: UNICO to get to a better position in that queue. And, for that, it has to rise from “hobby” to “work”. And, nowadays, that means CROWDFUNDING!

Soon (I’m still missing some pieces) I’ll launch a crowdfunding campaign through IndieGoGo, with the objective of speed up the development of Anima: UNICO, and in case the campaign goes extremely well, to expand a little its scope.

I would love to hear your opinions and suggerences.

Making of Anima: UNICO – Localization

Here I am again. Today I am going to address a tricky issue: localization, this is, translating the application to other languages. Just from the start, there are several issues with the process.

I can’t just translate every game term to other language: I have to find and use the word used in the official translation. Luckily, I count with the great help of Vincent ‘Moklo’ Bouscarle, corrector of the French edition of the game, who is translating A:U to French, and Andre ‘Dynaes’ Reich, from the English forum, who is translating to English. I want to use this chance to, again, thank both for their help.

As I have explained before, Anima: UNICO is designed mostly in three layers. Model layer organizes information. Controller layer knows the models and the views and manages the generakl workflow of the application. The View layer gets data from the Controller and shows what the user sees in the screen. Only this layer has to be translated.

My solution

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;
   }
}

A bit of explanation: I have a class, L, that will be instantiated with every string to translate and its translations. I also have a function, _l, that gets the id of a string and returns the translation to the current user interface language. The Model and Controller layers work only with the id of the strings, which are unique. When the View layer shows any string in screen, it does so through the _l function.

The initialization of strings is like this:

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();

As you can see, this is only for spanish and english. When the french localization starts, I’ll just have to add another field to the class L and another argument to every string.

Obviously, this solution still has several problems. For example, it is not specially good to form sentences with several variable parts, as it does not account for sintactic differences between languages. But for a character sheet, that will mostly show isolated terms, it is working well enough for me.

 

Making of Anima: UNICO – General structure

In my last post I went through the tools I’m using to develop Anima: UNICO. I have to add another one: SourceTree, a graphical UI for Git very useful and nice, and which makes easier following the GitFlow pattern. Obviously, I don’t need to use GitFlow (and actually I don’t follow it fully), but I like it, as a base over which organize me.

Now, let’s start with the meat. First, how to organice a javaScript application the size of Anima: UNICO? After my initial investigations, I arrived to the following workflow:

  1. I create as many Javascript files as I want/need, usually one per class.
  2. To publish them, I use Grunt to concatenate them and then to minify and uglify them. This way I get only one JavaScript file to publish on the web.

Regarding the organization of the javascript files, I’ve been following (more or less) Model-View-Controller patterns.

  • js/ – General folder for javascript files.
    • controller/ – Controllers.
    • data/ – Data.
    • view/ – Views.
    • model/ – Models.
    • locale/ – Localization.
    • libs/ – Third party libraries
    • vendor/ – Third party libraries
  • sass/ – SASS files.
  • img/ – Image files
  • fonts/ – Fonts
  • css/ –  CSS files.
  • index.html – Main web.
  • indexLocal.html – Main web for local debug.
  • Gruntfile.js – Grunt script.

Controllers

They control the communication between models, prepare data for the user, and receive the user actions and act on them.

Data

The concrete instance data for every class. This is, the data for every Advantage, Spell, Martial Art, etc.

There are several ways of storing data. As I wanted my application to work offline, I could not use a database. In the end, I stored them in their own initialization. This really is a bad idea. I should have stored them in JSON format from the start. In the future I will make the change.

An example:

addVentaja(new Ventaja( VENT_APRENDIZAJE_INNATO_EN_UN_CAMPO, “”, VENT_APRENDIZAJE_INNATO_EN_UN_CAMPO_DESC, REPETIBLE_OPCIONES, [2,3], [], true, [LISTA_TIPOS_SECUNDARIAS], [aprendizajeInnatoCampo], GRUPO_SECUNDARIAS ));

This line of code initialices the advantage “Natural Learner, Field”.

Views

Views generate the UI and interact with the user.

Models

Models are the base classes. Character, Race, MartialArt, etc…

Localization

Localization is everything related to showing the application in several languages. Right now, this means spanish and english, and french is in the works. For this, I have the inestimable help of Andrew “Dynaes” Reich and Vincent “Moklo” Bouscarle.

In another post I’ll detail how I do the localization.

 

Making of Anima: UNICO – Tools

Here I am again. As promised, I’m going to talk about the tools I use to create Anima: UNICO. Without further ado…

1. Language: HTML+CSS+JavaScript client-side, PHP server-side

This one is easy. The main development of Anima: UNICO is made in JavaScript. The web itself is done in HTML, but it is mainly created dynamically from the code using jQuery. The representation is almost totally controlled by CSS.

2. Frameworks and JavaScripts libraries: jQuery, jQuery UI, Modernizr, Gumby

One of the strong points of JavaScript is the great quantity of existing developments. Very probably jQuery is the most famous. It allows working with the webpage DOM without going crazy.

Beyond jQuery, I started using jQuery UI as base for the user interface. jQuery UI is a framework with functions to create buttons, dialogs, draggable components, etc.

Modernizr is a small library which easies the design among different web browsers.

Gumby is a framework to create adaptative webpages, ehich adjust themselves to the screen size. Is the base I use to format the page.

3. Frameworks and PHP libraries: CakePHP

For the server-side, I’m using, in a very basic way, CakePHP, which offers me just what I needed.

4. IDEs: Jetbrains WebStorm, JetBrains PHPStorm

I’ve fallen in love with the JetBrains IDEs. I loved WebStorm  to develop JavaScript, and when I started using PHP, I jumped to PHPStorm (which includes all WebStorm functionality). They are very powerful environments, and integrate everything I wanted them to integrare: version control, remote database, ftp, libraries…

Also, through them I discover the technologies from the next point.

5. More: Node.JS/NPM+Grunt, SASS+Compass, Mocha

JetBrains IDEs integrate with their own Node.JS server, which allows the use of lots of useful scripts. I discovered Grunt, which allows to automatize tasks (it is similar to Make), and used it to unify, minimify and uglify mi javascript files and get them ready to deploy to production.

6. Version control

I started using Subversion as version control, but some months ago I discovered and learned Git, and never looked back. It is a really great VCS.

7. Tasks, general management, online repository: Assembla

I found several online repository options. In the end, I chose Assembla, which offered me a very nice free plan. It integrates with svn and git and offers task and ticket management, that I can integrate with PHPStorm.

8. Reports and web analysis: Google Analytics

In my web I use Google Analytics to check daily views, language, browser… important details for a JavaScript project.

That’s all for today. Next day I’ll start with the code structure.

By the way, you can find the code in GitHub. Go ahead, fork it!

Making of Anima: UNICO – Introduction

Logo de Anima: UNICO

Hello to everyone.

I’m starting with this post a series about the development of Anima: UNICO, mi character generation web application for the role-playing game Anima: Beyond Fantasy. Let’s see if I can do one or two of these per week. I think I will be able to share many interesting things for anyone looking to develop a similar web application.

First, a bit of background. I started to develop Anima: UNICO around September/October 2013 (I can’t remember the exact date). Inspired by the great character generation web application made by my friend Azrapse for the game The One Ring, which we use almost every week to play, and moved by the lack of character generation software for Anima, one of my favourite role-playing games, I decided to start working on it.

However, Anima: UNICO was not my first work in web based character generation. I have (and very advanced, actually) a similar application for  7th Sea, and I also started one for Hackmaster (for the current edition). With the Seventh Sea one I lacked motivation (although I want to finish it some day). The Hackmaster one I abandoned when I learned that the game creators were developing their own character generation application: I’m not interested in doing useless work.

I have said before that there was no character generation software for Anima, but it seems I looked for it very poorly back then, because around February 2014 I searched again and found several projects. The main one, is the ingenious excel sheet made by several members of the Anima Spanish forum (I think the main developer is Solkar). It is so good that, were I to see it before starting my work on Anima: UNICO, I probably would have never started the development. I also found out that someone did a little crowd-funding in Indiegogo to develop a character generation application for Anima. I have seen no further movement there, and I don’t know if they got to develop anything. In any case, it seems they have made public nothing.

My goals for Anima: UNICO when I started with it were basically (and in this order):

  1. Allow to fully create characters in the web application and also without Internet connection.
  2. Develop it in JavaScript: the One Ring application convinced me that it was the best way.
  3. Develop it around the current rules (Core Exxet) with all the supplements (Domin Exxet, Arcana Exxet, Prometheum Exxet, Gaïa 1, Gaïa 2, Those Who Walked Among Us, Master Screen, we supplements 1, 2 and 3, and any other book that gets published).
  4. Allow the incorporation of house ruled items, like classes, abilities, advantages, disadvantages, martial arts, ars magnus, spells, etc.
  5. Allow saving the characters, defining game groups, defining a DM in the group, that the DM could be able to set which rules to use, and that the group members, when creating their characters, used directly those rules.
  6. Allow the DM to demand “fair” characters: with this option checked, all the random part will be made in server-side.

In the next post I’ll talk about the tools I’m using (and those I used and stopped using).

 

Diez juegos de rol que me han marcado

He visto en Puerta al Mañana un post interesante, que voy a continuar/imitar aquí. ¿Qué diez juegos de rol han sido los más importantes para mi? (adelanto que voy a compartir muchos con Dungalad).

1 – El Señor de los Anillos: El Juego de Rol de la Tierra Media

MERP

Prisioneros de Pax Tharkas, mi primer contacto con Krynn (aunque entonces yo no lo sabía)

 
Mi primer juego de rol, al que llegué desde los libros juego azules de D&D. Aún recuerdo mi primer intento de partida, dirigiendo a mis hermanos sin nada de experiencia previa… tras describir la Última Posada, pregunto a mi hermano qué va a hacer.

“Salgo a buscar la letrina”.

Una acción válida. Por desgracia, decidí que era importante cuánto se movería por turno para llegar y empecé a buscar la regla. Unos minutos después mis hermanos decidieron que mejor jugábamos otro día, cuando me dispuse a anotar sus puntos de vida en el propio libro por no tener aún fotocopias. No fue una gran partida, no…

Jugué bastante al MERP durante el colegio, casi siempre dirigiendo. La de veces que visité el castillo, el bosque de los trolls y la última posada. Y la de Pargen que crecía por esos lares, quién lo iba a decir… e incluso se llegaba a ver a algún Balrog si te descuidabas (y si molestabas al DJ).

Tras un tiempo busqué hacerme con Rolemaster y lo usé como ampliación de reglas del MERP, pero la verdad es que para entonces ya tenía otros juegos que me convencían más que el aluvión de reglas de Rolemaster (aunque siempre recordaré con cariño el +5 a la BO).

Y, por supuesto, este juego me llevó a leerme el Silmarillion (fue el primero que conseguí y el primero que leí. Ahí es nada), el Señor de los Anillos y el Hobbit.  Y cuentos cortos de Tolkien también.

2 – La Llamada de Cthulhu

La Llamada de Cthulhu

No fue mi segundo juego de rol (reconozco que no recuerdo con seguridad si Star Wars de WEG fue el segundo. Puede que sí). Pero es uno de mis favoritos. Un estilo tan distinto, un entorno tan separado de la espada y brujería, y tan interesante.

Creo que esa cama ha matado a unos veintitantos de mis jugadores. Como anécdota, el grupo que mejor se enfrentó a la cama venció sin entrar en la casa. Tras una profunda investigación previa, compraron la casa y la quemaron hasta los cimientos. Una lección para aprender.

Este juego me llevó a leerme las obras completas de H.P. Lovecraft, y varias de Robert Bloch, Ambrose Bierce y sus amigos.

Con el tiempo, mi participación en este mundo llegó a la cumbre cuando pude traducir al español El Rastro de Cthulhu, otra de las muchas visiones del mundo de los Mitos en juego de rol.

3 – Advanced Dungeons & Dragons 2ª Edición

Advanced Dungeons & Dragons 2ª Edición (Manual del Jugador)
Relatos de la Lanza. ¡Así que ax Tharkas está en Krynn!

El peso pesado. Lo compré movido en gran parte por su fama y por los anuncios en la revista española de Dragón. Fui ampliando la colección con suplementos variados y con los Héroes de la Dragonlance.

Puede que haya dirigido a este juego más que a ningún otro. O al menos empata con las siguientes entradas. Una enorme campaña en Krynn, en la que sableé aproveché los libros juego como fuente de ideas (los Páramos de Nordmaar y Reto Crucial, especialmente), con la búsqueda de una espada sagrada. Hacia el final aprovechaba también el material que tenía del fantástico Planescape, aunque de base no “encajase” mucho con Krynn.

 
 
 
 
 
 
4 – Dungeons & Dragons 3ª Edición

D&D 3ª Edición

Más pesos pesados. Si un juego supera al anterior en dedicación, es éste. Durante mucho tiempo fue mi juego principal, con otra enorme campaña, esta vez en los Reinos Olvidados, enfrentándose a un lich cronomante. Viajes en el tiempo, presentes alternativos, antiguos enemigos transformados en aliados.

Y muchos libros comprados. Con la explosión D20, este juego y sus versiones ocupan una parte importante de mi colección.

Su siguiente edición no me convenció. Ya veremos que pasa Next…

5 – 7º Mar

7º Mar (Guía del Jugador)

El tercer peso pesado. Mi juego principal en la universidad. La larga búsqueda de un mapa en cuatro partes hacia la famosa Isla del Mono. Por el camino, muchos magnicidios.

Un juego fantástico pese a sus fallos y problemas. Un mundo de capa y espada de alta aventura, y buenos PNJs que usar y de los que abusar.

Aún es uno de mis juegos favoritos, y lo he jugado también cambiando su sistema por el de Houses of the Blooded (sólo dos sesiones, pero legendarias), por el Fate, y estilo “freeform”, con las guías de Mythic.

6 – Anima: Beyond Fantasy

Anima: Beyond Fantasy (ed. Core Exxet)

Un juego que inicialmente compré pensando que iba a ser una patata recargada con un sistema mal copiado de Rolemaster, pero que con las bonitas ilustraciones le gustaría a mi novia (ahora esposa). Digamos que mi impresión era algo errónea.

El juego me encantó. Su mezcla de tipos de poderes, diferenciados y bastante equilibrados me convenció. Durante los primeros meses estuve resolviendo dudas del juego en los foros oficiales, tanto que acabé llamando la atención de Anima Studio. Con el tiempo esto me llevó a colaborar en la línea, escribiendo textos para el manual de Anima Tactics, revisando textos de suplementos, escribiendo gran parte del capítulo de psíquica del Arcana Exxet y alguna cosas más. Esto a su vez me puso en contacto con Edge lo que me llevó a mi etapa de traductor freelance inglés-español de juegos de rol y de mesa. Y todo esto me ha terminado llevando a dedicar mucho tiempo a desarrollar Anima: ÚNICO

Curiosamente, no he jugado tanto a Anima. He jugado un campaña de duración corta-media y algunas partidas sueltas, pero nunca conseguí terminar de vendérselo a mis jugadores (y esto es ya una ligera exageración: para ellos, Anima es uno de los juegos vetados)

7 y 8 – James Bond 007 El Juego de rol y Cazafantasmas

Los Cazafantasmas
James Bond 007

Estos dos juegos los compré juntos en un saldo de playa. Pensé que serían… en fin, algo correspondiente con sus respectivas portadas. Los dos me sorprendieron de forma similar: sistemas de juego muy elegantes, casi con un único método de resolución, reglas para reforzar la ambientación (007 nunca falla, solo se tira casi para ver como de bien lo hace, los cazafantasmas no mueren). Algo muy muy distinto a D&D o MERP, sin duda. Había más juegos ahí fuera.

Los Cazafantasmas también me marcó por la ingente cantidad de erratas y errores tipográficos, pero eso es otra cuestión.

Hoy en día estoy viendo por fin las películas de James Bond. Está costando.

9 – La Leyenda de los Cinco Anillos

La Leyenda de los Cinco Anillos

Cercano a 7º Mar, gana su lugar en esta lista por ser el primer juego al que jugué una campaña larga como jugador y no como director. Con mi escorpión incapaz de mentir. Luego lo he dirigido varias veces también, claro.

 
 
 
 
 
 

10 – Exaltado

Exaltado (primera edición)
Exaltado (segunda edición)

Exaltado, tanto primera como segunda edición, es otro juego que me cautivó desde el principio. Lo evité mucho tiempo debido a la a primera vista horrible portada. Otro error (está claro que debo centrarme en conseguir los juegos cuyo aspecto inicial no me convenza).

Una de las mejores ambientaciones de fantasía existentes. Un sistema que… una de las mejores ambientaciones.

Aunque el sistema tiene sus cosas buenas y sus cosas malas, si no se fuerza mucho funciona aceptablemente. Y eso he hecho durante mucho tiempo, y pienso seguir haciendo en cuanto llegue la esperada tercera edición. Ya falta poco…

Y más…

Se me quedan otros importantes en el tintero. Hackmaster es el primero que me viene a la cabeza. Reign. Houses of the Blooded. World of Synnibarr. Y ya tengo ganas de ver cuáles me marcan en el futuro.