A medida que los juegos han ganado en complejidad, tanto técnica como narrativa, una opción que ha tomado gran relevancia es la de poder grabar la partida. Si bien esto no es algo directamente relacionado con los más recientes avances tecnológicos, ya que en la época de los 8 bits ya era posible guardar partidas en algunos juegos, sí que a fecha de hoy es casi impensable no poder hacerlo. No es factible tener que acabarse un juego de una sentada, o dejando el ordenador encendido todo el fin de semana para no perder el progreso. Sobretodo, si hablamos de juegos de gran duración o basados en mundos virtuales, multijugador o no.

La posibilidad de guardar la partida impacta enormemente en la dificultad del juego desde una perspectiva general, ya que ofrece un mayor margen de error a la hora de superar dificultades.  Escoger cómo y cuándo se puede guardar es una decisión de diseño que debe cuidarse muy bien. En ese sentido, a mi me parece especialmente interesante la opción de “guardado/carga rápido” (quicksave/quickload), ya sea de manera intrínseca, o debida al hecho de crear capturas del estado de memoria en un emulador. Cuando esta opción es posible, es fácil caer en el vicio del “savescumming” (¿escoria guardadora?): guardar cada 10 segundos, constantemente, de modo que puedas recuperar el estado del juego al menor error. Ataco al enemigo. Si fallo, recupero y vuelvo a intentar. Si acierto, guardo partida de nuevo. Tomo una decisión importante en la narrativa. Si no me gusta el resultado, recupero y reintento, en vez de aceptarla orgánicamente. El margen de recuperación de errores ya no es a nivel de etapa o reto, sino que se microsegmenta a acción por acción.

VATS

35% + quickload + paciencia = 100%. Imagen del videojuego Fallout 3, propiedad de Bethesda Softworks utilizada bajo criterios de Fair use.

En ciertos juegos, esta táctica lleva a situaciones muy interesantes. Hablo de juegos donde las acciones no se resuelven en base a la habilidad del jugador, sino en base a probabilidades. Normalmente hablamos de juegos de rol (e.g. Fallouts, Knights of the Old Republic, toda la família basada en Dragones y Mazmorras, etc.) o algunos juegos de estrategia (e.g. Fire Emblem, Advance Wars, etc.). En todos ellos, la posibilidad de éxito en una acción (e.g. ataque, defensa, uso de una habilidad, etc.) depende exclusivamente de una tirada de dados. La solución lógica no debería variar mucho: antes de cada “tirada”, guardas partida. Si fallas, recuperas y reintentas. Si aciertas, guardas y adelante. Con ello, el hecho de que el personaje disponga de niveles de habilidad se vuelve irrelevante, ya que con mucha paciencia, todo es posible aunque las posibilidades de éxito se calculen en un 5%. Sin embargo, más de uno se lleva la sorpresa: haces una una tirada con un 95% probabilidad de éxito, pero por más que recuperas la partida, fallas siempre ¿Es posible tener tan mala suerte? ¿El ordenador me tiene manía?

El motivo se debe al modo como los ordenadores trabajan con números al azar. Simular un porcentaje de probabilidad es tan simple como hacer que el ordenador genere un número al azar entre 1 y 100. Si el valor es igual o inferior al porcentaje, tienes éxito. En caso contrario, fallas. Sin embargo, esto tan evidente no es tan sencillo para un ordenador, ya que generar valores que son realmente al azar es una tarea complicada, no solo para el ordenador, sino en el mundo real. Ni siquiera los humanos somos buenos generando valores aleatorios, ya que tenemos un sesgo a compensar valores que llevan mucho tiempo sin aparecer.

En un ordenador hay distintas opciones, pero incluso aquellas que pueden parecer satisfactorias a simple vista, como basarse en la temperatura de la CPU, o coger los bits de menos peso del reloj del sistema, en realidad no son muy buenas, ya que no distribuyen bien el rango de valores posibles y tienden a la repetición. En la mayoría de aplicaciones, los ordenadores generan valores a partir de los llamados “generadores pseudoaleatorios” (PRNG, Pseudo Random Number Generator). Estos generan secuencias de valores que semejan aleatoriedad, pero no lo son realmente. Para hacerlo, se basan en un valor base, llamado “semilla” (seed). A partir del valor de dicha semilla, se va aplicando sucesivas veces una función matemática sobre cada nuevo valor, creando una secuencia de valores. Por lo tanto, dada una semilla, esta siempre generará la misma secuencia de valores pseudoaleatorios (de ahí lo de pseudo).

Existen diferentes aproximaciones para crear PRNG. En la figura, se muestra un ejemplo de un tipo muy popular y simple llamado LFSR (Linear Feed Shift Register, Registro de de Desplazamiento con Realimentación Lineal). Este PRNG no es perfecto, pero sirve para tener una idea del concepto secuencia de valores pseudoaleatorios.

LFSR

Generación de valores entre 1 y 255 mediante un LFSR de 8 bits

El generador cambia de valor en base a aplicar una función XOR sobre algunos de los bits que contiene. Para generar un nuevo valor, se elimina el bit menos significativo, de desplaza el resto, y el bit más significativo lo ocupa el resultado de aplicar la función XOR sobre el valor original. La particularidad que hay que tener presente es que, dado que los sucesivos valores que se generan están relacionados entre si (dado un valor X, siempre generará el mismo valor Y a continuación), tarde o temprano se repetirá la secuencia. También, hay que vigiliar con el valor todo 0′s, ya que es un estado absorbente que hay que evitar. Si se llega a este valor, el registro se quedará encallado allí para siempre. Sin embargo, si el registro está bien diseñado, se puede garantizar que se agotarán todos los valores posibles antes de que suceda, volviendo al valor de la semilla, sin pasar nunca por el cero. Para ello, las funciones XOR deben cumplir una condición: formar un polinomio primitivo. El ejemplo se basa en el polinomio primitivo de grado 8 representado como 100011101 en formato cadena, pero podéis buscar otros aquí.

El resultado es que, dado que la secuencia de valores pseudoaleatorios o la propia semilla se guardan con la partida, el destino está escrito. Recuperar la partida no vale para nada. Sólo puede salvarte llevar a cabo alguna acción que modifique el estado actual del generador y lo haga avanzar en la secuencia de valores. Quizá retrasando el ataque, o llevando a cabo alguna otra acción intermedia. Pero simplemente recuperar la partida no funcionará, ya que dada la misma secuencia de movimientos por parte del jugador, el resultado de sus acciones siempre será el mismo de manera determinista. En algunos juegos esto pasa, en otros no, y podemos ganar por fuerza bruta a base “savescumming“.

Pero a veces, hay que aceptar el destino. O tener varias partidas guardadas…

via iNFoRMáTiCa++ http://ift.tt/1cxWDrz

Advertisements