SAVE STATE HACKING Tal vez el concepto pueda parecer raro ya que normalmente se suele hablar de romhacking (modificaciones hechas en los juegos). Sin embargo, el save state hacking como se puede denominar a la modificación de las partidas grabadas sin afectar a los juegos es bastante interesante ya que podemos obtener ventajas sin cambiar nada del juego original. La base del save state hacking se basa en los emuladores que graban sus partidas en ficheros del mismo tamaño independientemente de donde nos encontremos en el juego. En emuladores donde las partidas grabadas varian de tamaño no es posible el save state hacking. El proceso es simple a la vez que puede requerir tiempo para encontrar los valores buscados. Para encontrar por ejemplo el byte donde se graba un determinado valor en un juego (como puede ser el número de vidas) puede parecer una panacea si tienes que buscar en ficheros grandes pero es relativamente simple y si tenemos ciertos conocimientos de programación podemos encontrarlos de una forma rápida sin que sea una tarea de chinos. La técnica se basa en lo siguiente: un emulador guarda siempre en una partida grabada el número de vidas (por ejemplo) de un mismo juego en la misma posición del fichero por lo que si grabamos una partida con 3 vidas y otra con 2 podemos buscar en los dos ficheros a la vez donde aparece el valor 3 en un fichero y el valor 2 en el otro. Si conseguimos un programa que haga esto el proceso sería rápido. Yo construí un programa que no es que sea una maravilla de la programación pero que realiza el proceso a la perfección. Vamos a ver un ejemplo, que ilustrará mejor el proceso y aclarará posibles dudas acerca del método. Para ello, voy a utilizar mi programa creado a tal efecto (“File Search”). Proceso: 1º.- Vamos a ejecutar el emulador Wingens y vamos a cargar el juego “Astérix and the power of gods” de Megadrive. 2º.- Grabamos una partida (.gs0: partida 0 con 3 vidas) y otra con 2 vidas (.gs1: partida 1). 3º. Ejecutamos el programa y cargamos ambos ficheros y buscamos el valor 2 en la partida 0 y el valor 1 en la partida 1 pulsando en los botones con los 3 puntos para seleccionar los ficheros y el botón “Buscar” para que haga el proceso. 4º.- Parece que ha habido suerte y sólo hay un valor que es el que buscamos. Puede suceder que este no sea el byte correcto porque el emulador no cuente para este juego el número de vidas a partir de 1 sino 0 y en lugar de esto valor1 sería 2 y valor2 sería 1 (lo que no es el caso que nos ocupa). Y ahora viene la gran pregunta, ¿qué hago con este valor que he encontrado?. Pues ahora viene la segunda parte del proceso que va a consistir en modificar la partida grabado con un editor hexadecimal. Podéis utilizar cualquiera ya que sólo vamos a abrir la partida grabada (cualquiera de las dos que hemos guardado) y modificar el byte 54436 que es donde se localiza el número de vidas para este juego en la partida. Este número va a ser distinto para cada juego de Megadrive e incluso para el mismo juego si la partida grabada ha sido con otro emulador pero es posible encontrar una relación entre este valor en diferentes emuladores (se va a obtener una fórmula matemática simple que veremos un poco más adelante). Vamos manos a la obra. 5º.- Abrimos la partida grabada (.gs1) con el editor hexadecimal con “Hex Workshop” y nos situamos en el byte 54436. Este programa tiene una opción “Goto..” en el menú “Edit” donde podemos ir a cualquier posición del fichero. Notar que en la captura del programa aparece en “Offset” el valor obtenido menos 1 (esto se debe a que el programa toma el primer byte como 0) por lo que debemos hacerlo así. Debajo debe aparecer marcado “Dec” (ya que es un valor decimal, no hexadecimal) y”Beginning of File” ya que vamos a situarnos en el byte correspondiente desde el principio del fichero. Una vez hecho esto pulsamos el botón “Go” para que se situe en el byte correspondiente donde vamos a cambiar su valor por el que queramos. Vamos a poner “8” en lugar de “2” que era el número de vidas que teníamos. Grabamos la partida para que se guarden los cambios. Este programa permite hacer una copia (backup) del fichero original por si nos equivocamos y estropeamos el fichero. Podemos decirle que guarde un fichero .bak del original. 6º.- Salimos del programa y nos metemos en el emulador para cargar la partida guardada que hemos modificado con lo que veremos si los cambios que hemos realizado han surtido efecto. Para ello seleccionamos la partida en el emulador y elegimos la opción “Load State” del emulador para cargarla. Aparentemente no ha sucedido nada después de tanto tiempo. Vamos a jugar un poco y veremos que pasa cuando perdemos una vida. ¿Pero qué ha sucedido?. Pues que teníamos 8 vidas tal como hemos puesto aunque tal cambio no se ha mostrado en pantalla hasta que hemos perdido una tal como se ve en la captura. Ahora tenemos 7 vidas. Para este juego es muy fácil encontrar el número de vidas ya que el programa “File Search” nos ha dado 1 único valor que es el correcto. Puede darse el caso de que no encontremos el valor adecuado porque no sepamos que valores da a las vidas o que no aparezca numéricamente dicho número sino a través de gráficos. Igual que hemos hecho para las vidas podríamos haberlo hecho para la energía de Astérix aunque a la hora de modificar la partida podemos encontrarnos con que no podemos poner valores muy altos. Si ponemos un valor alto y no funciona el juego al cargar la partida simplemente ponemos otro valor más bajo y ya debe funcionar. A veces podemos encontrarnos con varios valores posibles con lo que debemos probar cual es el adecuado. Una posible solución si el número de valores obtenidos con “File Search” es algo alto es grabar más de 2 partidas y buscar en 2 de ellas y luego en otras 2 con lo que podemos ver que valores se repiten en las 2 búsquedas y descartar bastantes con lo que nos quedarán menos. Como véis he partido prácticamente de cero (sólo he necesitado el emulador, el juego, un editor hexadecimal) y he creado un programa que me ha hecho todo el proceso de búsqueda que es lo más complicado. Cualquiera con unas nociones básicas puede realizar un programa de este tipo, usar “File Search” o buscar otro programa que busque 2 valores en 2 ficheros distintos. Más adelante explicaré detalladamente el código fuente del programa escrito en Visual Basic 6 para que veáis lo simple y útil que es.