Category Archives: Anima: UNICO

Whatever happened to Anima: UNICO?

I updated Anima: UNICO for the last time three months ago, on 17th July. In that date I still hoped to be able torun a crowdfunding campaign to help me end the application with a big final push, to add the missing rules (monster powers, sheeles, gaïa 2…), support for gaming groups, houserules, random NPC generator, etc. Soon after that day, those hopes vanished and, although it was not my intention, that brought unto me a certain let down about Anima.

Since then, I have started a way in Patreon for anyone who wanted help me develop roleplaying software, and have started the first of such software: Workings of Fate, a set of tools for the Fate CORE system. The first tool is the Aspect Generator, to generate random aspects. It is still in development, as I want to add more variety and coherence to its results.

But the numbers are clear. Right now there are 163 users registered in Anima: UNICO, and 367 characters saved in its database (yes, many of them will be repeated, but still, there are a lot). During 2014, 3,521 users have started 7,823 sessions in Anima: UNICO.

(For comparision, Workings of Fate has received 198 sessions from 162 users in aproximately a month).

So it is time to start again looking for time to keep developing Anima: UNICO. These are the main points in my agenda:

  • Start the english and french translations. As there is now no impediment, I’ll get the help of anyone who wants to participate.
  • Debugging. There are several recurring bugs I have to eliminate. Mainly:
    • Ki section vanishes when buying certain abilities.
    • Ugly can crash the application.
    • MA and zeonic regeneration calculations are not ok.
    • Natural bonuses sometimes fail.
  • New functions. Main ones:
    • Monster powers.
    • Printable sheet (and PDF, if possible).
    • Rate of Fire and reach of projectile weapons.
    • Unarmed as a weapon.
    • Damage percetanges.
    • Sheeles.
    • Gaïa 2 content.
  • Comunity functions.
    • Gaming groups, with a DM to set the generation options to be used by the players.
    • Selection of books to appear in the application.
    • Houserules.
  • And derived applications:
    • Name, aspect, origin random generation.
    • Quick NPC random generation.

All of this will take me a lot of time, but it will slowly march forward.

And if the development of further software for roleplaying games seems interesting to you, remember supporting me in Patreon or streaight in Paypal (you can get the donation button in the Workings of Fate page)!

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.

 

Anima: UNICO – Making of – Arcana Sephirah v2

arcanaSephirahV2

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

Anima: UNICO – Making of – Arcana Sephirah

Primer intento de mostrar el grafo de esferas metamágicas:

intento

Eso de momento no va a valer.

Estoy empleando la interesante librería D3.js. Espero mejorar en su uso en breve…