SAVE STATE HACKING Tal vez el concepto pueda parecer raro ya

Anuncio
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.
Descargar