Lo primero que tengo que resolver es lo que más tiempo lleva en una partida. Esto es: el sistema de combate. En Rolemaster hay que hacer los siguientes pasos para ejecutar un movimiento de combate:
- Tirar 1D100 (tirada abierta), sumar el ataque y restar la defensa del enemigo. Tirada abierta quiere decir que si al tirar los dados sale 96 o más se vuelve a tirar y se suman las tiradas. Esto implica que haya que tirar de calculadora muchas veces. Una situación tipo sería: Tirada->67, Ataque->74, Defensa->45. El total sería 96. He tenido que tirar de calculadora para averiguarlo.
- Ese total se mira en la tabla de ataque correspondiente. Por ejemplo: si se atacó con un hacha hay que mirar la tabla de ataques de hacha y cruzarlo con el tipo de armadura que lleve el defensor. El tipo de armadura puede ser de 1 (ropa normal) a 20 (armadura completa). No acaba aquí la cosa. Esto da un resultado que puede ser, por ejemplo, 10CS. Traducido quiere decir que al enemigo se la ha infligido un daño de 10 puntos de vida y un crítico C de corte.
- Si se produce un crítico falta un último paso que es tirar la gravedad del mismo. Hay varios grados de gravedad, de A a E siendo el E el más grave y potencialmente mortal. En el ejemplo anterior, puse un resultado de crítico C que es un grado de gravedad «intermedio», digamos. Bien, pues el atacante tiraría otro dado de 100 (tirada cerrada esta vez) y se miraría en la tabla el resultado de la columna C de crítico de corte. A más alta la tirada, más grave la herida. Es este precisamente el punto que hace muy interesante, y mortal, el combate en Rolemaster y lo que hace que mis jugadores prefieran este sistema a cualquier otro (a pesar de que el crítico puede ser para ellos).
Esto sería el resumen de un asalto de ataque. Es un peñazo porque hay que mirar la tabla del arma en cuestión, tirar crítico si lo hay y apuntar las heridas que sufre el objetivo. Aquí se lía más la cosa porque puede haber desde pérdida de puntos de vida sin más a aturdimientos, pérdida de untos de vida por asalto o directamente la muerte. Teniendo en cuenta que el combate suele ser de varios personajes a la vez (5 contra 5 por ejemplo) la carga de trabajo para el Master es grande.
Entonces, por partes, para conseguir automatizar esta tarea necesito:
- Las tablas de ataque de las distintas armas y hechizos: afortunadamente un alma caritativa ya hizo un programa de combates para rolemaster que, aunque no encaja con lo que quiero, tiene las tablas de ataques ya creadas. Están en formato csv pero pasarlas a JSON para poder parsear tranquilamente con javascript ha sido trivial.
- Las tablas de críticos: Aquí no he encontrado nada que me convenciera. Necesito las tablas de la 2ª edición española porque son mucho más claras y separan la descripción del ataque de sus efectos. Ahí sí que no ha habido más remedio que meterlas a mano y guardar el resultado en archivos JSON. ¿Por qué JSON en vez de meter los datos en MySQL, por ejemplo? Bueno, pues porque considero que, al ser tablas estáticas que no van a cambiar sus valores nunca, he preferido hacerlo así y que el lado cliente se encargue de parsearlo.
- Un formulario que gestione todo el ataque: que sume las tiradas, que consulte el resultado en la tabla de ataque y que resuelva el crítico si lo hay.
Además de todo eso, como somos ambiciosos, quiero que los jugadores puedan en todo momento meterse en el combate desde sus dispositivos móviles y ver no solo el combate que se está produciendo en ese momento (si es el caso) sino también todo un historial de combates y su resumen. Algo parecido a lo que hay en muchas aplicaciones. Me viene a la cabeza ahora mismo el famoso juego Football Manager donde se pueden consultar los partidos que ya se jugaron y su resumen. Esto le puede dar un componente táctico a Rolemaster interesante. Los jugadores podrían pensárselo dos veces la próxima ocasión que vean un troll de los bosques, por ejemplo. Ya sabemos que la memoria a veces nos traiciona y lo que nos parece una técnica de combate efectiva, si tenemos un historial donde nos venga todo lo que hemos hecho anteriormente, puede resultar ser una chapuza ineficiente.
Además y ya puestos, calcular los puntos de experiencia es un engorro y el ordenador puede hacerlo de manera sencilla. Con una API de puntos de experiencia, la aplicación puede hacerlo por nosotros según se vayan produciendo los turnos de combate.
Varios puntos que se comentan ya están hechos. En el momento de escribir esto la aplicación ya tiene una API que calcula los puntos de experiencia, gran parte de las tablas de críticos están metidas en formato JSON y ahora mismo estoy creando un formulario para insertar personajes (jugadores y no jugadores) de manera fácil. Así, cuando se inicie un combate no hará falta meterlos a mano cada vez.