Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Todos los Videojuegos son Wargames parte 2

–Como Programar la Habilidad y la Suerte–

Esta es la segunda entrada de la serie que habla sobre como los wargames de mesa pudieron ser los antecesores de los actuales videojuegos y como mucha de la lógica que los hacía funcionar sigue aplicándose hasta hoy. Pero antes les contaré una leyenda sobre ambos mundos tan separados por el tiempo.

Existe desde los setentas una compañia fabricante de miniaturas usadas para juegos de mesa llamada Games Workshop. Sus colecciones más famosas entre los aficionados a los wargames son Warhammer Fantasy y Warhammer 40000 (WH40k). La primera es sobre un mundo medieval fantástico de magia y espadas y la segunda de batallas futuristas entre humanos y monstruos galácticos. A principios de los noventa un dia a sus oficinas llegaron un grupo de nerds desconocidos que se juntaban para hacer videojuegos y le propusieron a Games Workshop hacer un videojuego basado en el universo de Warhammer. Y como siempre sucede en este tipo de historias los ejecutivos de Games Workshop se carcajearon en sus caras y los rechazaron. A la salida se dice que uno de esos nerds gritó algo sobre wargames, juegos de azar y mujerzuelas. Luego el grupo de nerds siguió trabajando en su proyecto pero cambiando todas las marcas registradas de Games Workshop y un buen dia sacaron a la venta su videojuego basado extraoficialmente en Warhammer Fantasy. Y ese juego por si no lo han adivinado aún es el mundialmente famoso Warcraft.


Sobre la relación de Starcraft y Warhammer 40,000 no he encontrado nada escrito en internet pero los ejércitos de Space Marines, los Tyranids y los Eldar se parecen mucho a los Terran, Zerg y Protoss de Starcraft y ambos están ambientados en un universo futurista “donde solo hay guerra”. Además de que las programación de los Terran de Starcraft es sorprendentemente parecida a las reglas de juego de WH40k.

Esto lo cuento porque quiero hacerles ver que en un wargame elaborado puede haber tantas reglas que a algunos principiantes puede resultarles muy complicado jugar. Sin embargo, cuando jugamos en computadora un videojuego donde se apliquen estas mismas reglas la computadora las puede evaluar tan rápido que ni siquiera nos enteramos de que tales reglas existen. Verán, una de las cosas que tardé mucho en aprender a programar era la defensa de un personaje controlado por la computadora. Pues si lo programaba para que se cubriera cada que el jugador lo atacara sería invencible y si le pusiera una rutina que siempre fuera igual como se hacía en los juegos antiguos el jugador se aburriría una vez que la descubriera. Otro problema parecido es el de ajustar diferentes niveles de dificultad en un juego sin cambiar el código que lo hace funcionar. Primero pensé en guardar las rutinas de movimiento de los personajes no jugables en forma de script y cargar un script diferente según fuera el nivel pero eso no solo es complicado sino a la larga predecible. Además de que no hallaba como programar ciertas conductas ‘humanas’ como la ira y el miedo que hiciera que cambiara el patrón de ataque o tener una manera de que un personaje no jugable pero del lado del jugador pudiera evolucionar junto con él. Y todas esas cosas las pude entender hasta que investigué como funcionaban los antiguos Wargames.

Veamos una situación típica de un videojuego actual. Digamos que tenemos un RPG de acción y el héroe controlado por el jugador está luchando contra un monstruo jefe. El jugador presiona una combinación de botones y el héroe da un paso rápido hacia al monstro y lo ataca con un revés de espada que hace retroceder al monstruo unos pasos. Esta escena que para el jugador apenas duró un segundo para la computadora significó hacer una larga y aburrida serie de comparaciones, validaciones y restas que voy a tratar de explicar sin tratar de aburrirlos. Pero para empezar ¿Por qué en ese momento el monstruo no esquivó el golpe?¿Si recibió el golpe por qué no se protegió? ¿Exactamente cuanto daño recibió el monstruo con ese golpe? ¿Qué va a hacer el monstruo luego de recibir ese golpe? o al to tan sencillo como ¿Por qué no atacó al héroe cuando lo vio venir con su ataque desde lejos?

Detrás de cada golpe hay muchos cálculos tediosos que a la computadora no le aburre hacer


En un juego actual cada que el héroe golpea al monstruo ocurre cualquiera de esas cosas. Pero a nosotros nos da la impresión de que esas acciones son impredecibles pues no somos capaces de detectar ningún patrón en las acciones del monstruo. Pero primero comentemos algo sobre como se evalua el resultado de una acción en los wargames. En la vida real el desenlace de una acción es una mezcla de habilidad y suerte y eso en los wargames se simula con tablas de habilidad y dados. Digamos que alguien tiene una habilidad que se mide entre 1 y 5 siendo 1 un inutil y 5 un experto. Si lanzamos un dado de seis caras obtendremos un número entre 1 y 6. Si la suma del punto de habilidad y el dado es mayor que cierto valor, por ejemplo 7 se considera que la acción tuvo éxito y si no se alcanza ese valor la acción terminó mal. En esta forma de evaluar si el dado nos da un uno significa que hemos tenido muy mala suerte y fallamos sin importar que tan buenos seamos en la actividad mientras que alguien muy inepto con habilidad de 1 puede lograr su objetivo si tiene muy pero muy buena suerte y el dado le da un 6. Las distancias como ya vimos en la entrada anterior también cuentan para ver si se puede ejecutar o no una acción y los efectos de la acción dependen de otras tablas de números que el jugador no ve. Pero sigamos con el espadazo de un segundo del ejemplo.

Al momento de que el jugador presiona la combinación de botones para atacar la computadora evalúa si el monstruo está dentro del rango de ataque del héroe. Como si lo está luego ejecuta el siguiente paso que es ver si el golpe da en el blanco o no. La computadora lanza su dado interno y le da digamos un 4. Luego consulta la tabla que describe las habilidades del héroe y ve que su habilidad de combate con la espada es de 3, por tanto 4 + 3 = 7 que es lo mínimo para aceptar que el ataque dio en el blanco. Ya sabiendo que dio en el blanco la computadora vuelve a revisar la tabla de habilidades del héroe y ve que su fuerza física es de 2 y que la espada que lleva tiene un daño base de 3 con lo que se calcula que el golpe tiene una fuerza de 5. Pero antes de que el monstro salga herido tiene una última oportunidad de defenderse y la computadora revisa la tabla de habilidades del monstruo y ve que la defensa del monstruo es un 4 y al lanzar el dado este da un 2. Por lo tanto aunque la defensa del monstro es considerable ha tenido poca suerte y no ha alcanzado a interponer sus brazos cubiertos de hueso afilado para protegerse. Finalmente para calcular el daño del golpe la máquina revisa la tabla del monstro y ve que su resistencia física es de 2 y lleva puesta una coraza que le da una defensa de 1. De este modo calculamos el daño final que es de 5 que es el ataque del héroe menos 3 que es la resistencia total del monstruo con todo su equipo lo que nos da un 2. Ese 2 lo restamos a los puntos de vida del monstruo que digamos que comenzaba en 50 y bajó a 48. Como la vida del monstruo no se ha reducido a cero tan solo se quejará un poco del golpe y la lucha seguirá hasta que uno de los dos caiga.

Si todos estos cálculos les parecieron pesados y confusos imagínense lo que es manejar otros aspectos como diferentes razas de monstruos, ataques basados en diferentes elementos o tipos de magias o rivalidades que existan entre especies. Otra cosa que puede desencantar a algunos es la poca importancia que parece tener la habilidad de los jugadores cuando el si ganan o pierden no depende de que tan rápidos son con los controles. Si bien muchos de esos valores numéricos contenidos en las tablas son importantes para los personajes controlados por la computadora muchos de ellos pueden ser ignorados cuando se aplican al jugador. Por ejemplo si hay un valor que sea agresividad que haga que los monstruos ataquen sin pensar o piensen sus estrategias de manera calmada ese valor no tiene por qué usarse para el personaje controlado por el jugador. Pues el decidirá cuando quiere atacar de manera agresiva y cuando tomar distancia de los monstruos para repensar su estrategia.

Y aquí es donde entran las computadoras. Para un jugador humano que juega wargames con dados y miniaturas calcular estos datos puede ser muy pero muy tardado y hay reglas que aunque no son realistas ayudan a agilizar la partida. Por ejemplo en algunos wargames cuando dos grupos de soldados rivales se enfrentan los cálculos se hacen como si fuera una batalla de uno contra uno combinando las tablas de datos de todas las unidades y luego se reparte el daño según reglas de distancia. Pero para una computadora no hay problema en registrar que el soldado 325 recibió un tiro por parte del 231 cuando este disparaba al aire tratando de huir de los perseguidores que lo tenian rodeado y que el que recibió el tiro tuvo tan mala suerte que no lo resistió. De una manera similar es como se obtienen los famosos Critical Hits.

En la siguiente entrada veremos como todos los videojuegos tienen elementos de wargame incluso aquellos que uno creería que nada tienen que ver con la guerra.

Anuncios

junio 21, 2016 - Posted by | programación, videojuegos

1 comentario »

  1. Me gusta mucho esta explicacion de la logica del genero dada por usted. y me gusta mucho mas que vuelvas a escribir en el blog.

    Comentario por Daniel | junio 21, 2016 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: