Cambiar el mapa de las pantallas del Asterix con los Savestates

Contenido

Objetivo

Hace tiempo descubrí con el editor de memoria del emulador Meka el bloque de bytes donde está el mapa de la pantalla cargada del Asterix.

Se me ha ocurrido obtener este mapa de bytes e intentar modificarlo para cambiar la pantalla temporalmente y hacerme una pantalla personalizada. Aquí podéis ver el resultado de la primera y segunda fase:

http://www.youtube.com/watch?v=KmBpV8pVzRE

Por si os interesa saber cómo lo he hecho, o tener una pequeña base para intentar cambiar los mapas de otros juegos de Master System, os expongo el siguiente tutorial.

Herramientas necesarias

Primero comentar las herramientas que necesitamos:

- El emulador Meka:

http://www.smspower.org/meka/

- Un backup software de la ROM de nuestro cartucho Asterix

- Un editor hexadecimal para trabajar con archivos binarios (el mío es el Notepad++ con un plug-in hexadecimal, pero podéis usar cualquier otro):

http://notepad-plus-plus.org/ http://sourceforge.net/projects/npp-plugins/files/Hex%20Editor/

- Unos programitas que he hecho para transformar los mapas (“to_editor.exe” y “to_emu.exe”) los podéis descargar de aquí:

http://www.mediafire.com/?12w3w2n8w4ewcee

(Si no queréis usarlos, a partir del paso -4- podéis ir al apartado #Alternativa_para_no_usar_"to_editor.exe"_y_"to_emu.exe" que explica una alternativa al tutorial principal con la que no hace falta usarlos)

- El editor de tiles y mapas Tile Studio:

http://tilestudio.sourceforge.net/

- Imágenes PNG con los tiles de los stages del Asterix, el usado en el tutorial (intentaré colgar las imágenes de los demás stages):

Asterix MS Tiles - Stage-0.png

Pasos a seguir

- 1 -

Empezar a jugar al Asterix en el Meka y abrir el editor de memoria del Meka (apartado RAM) y vais a la dirección CA00. En esta dirección es donde se carga el mapa de la pantalla-escena actual que se está jugando. El mapa va de la dirección CA00 a CF9F (1440 bytes, que corresponden a esa cantidad de tiles).

Hacer un savestate y abrirlo en un editor hexadecimal (entre otras cosas, el savestate guarda el estado de la memoria RAM que estamos viendo en Meka). Fijaros en la primera línea del mapa en la dirección CA00 del editor del Meka. Escoger algunos valores contiguos de la primera línea, por ejemplo los primeros: 01 01 01 01 3D 02 02 0F. Buscar exactamente estos valores en el editor hexadecimal. Si os encuentra esta coincidencia en un solo sitio, podéis estar seguros de que hemos encontrado el mismo mapa que estamos viendo en la RAM del Meka:

asterixtuto7.png

- 2 -

En el editor hexadecimal seleccionar todo el bloque que define el mapa encontrado del savestate. Todo el bloque corresponde a 1440 valores (bytes, o lo que es lo mismo: conjunto de 2 dígitos). En el editor os tiene que visualizar el número de valores que se han seleccionado como indico en el círculo rojo, de todas formas notareis que acaba el bloque, por que los demás valores ya son 00 todo el rato (no pasa siempre):

asterixtuto9.png

- 3 -

Copiar el bloque de bytes y pegarlo en un nuevo archivo llamado “archivo.bin” (por ejemplo). Este archivo ya contiene el mapa completo de la primera pantalla del Asterix (escena principal):

asterixtuto10.png

- 4 -

La pega de todo esto, es que el “archivo.bin” que hemos creado en el paso anterior con el mapa no se puede importar directamente al Tile Studio, por la siguiente razón…

El emulador (más concretamente el juego) construye el mapa leyendo los bytes del mapa de esta manera:

comololeeelemulador.png

Mientras que Tile Studio construye el mapa leyendo los bytes de esta manera:

comololeetilestudio.png (Aunque más que leer de esa manera, es cómo están distribuidos los valores para construir, en realidad es cambiar filas por columnas, cambiando de orden los valores del fichero)

Para solventarlo, tenemos que hacer una transformación en el mapa cada vez que tengamos que pasarlo al editor o de vuelta al emulador. Para ello he creado este par de programitas (creo que está bastante claro por el nombre cuando usar cada uno):

asterixtuto11.png

Es decir, para pasar el mapa desde el emulador al editor: usar “to_editor.exe”, para pasar el mapa exportado desde el editor al emulador: usar “to_emu.exe”.

- 5 -

En este caso concreto tenemos que usar “to_editor.exe”, simplemente arrastrar el “archivo.bin” al programa y crea “archivo.bin.out” con el mapa transformado:

asterixtuto12.png

- 6 -

Ahora abrimos el Tile Studio. Cuando se abre, siempre se ubica el programa en el modo “Vista editor de tiles”, para dibujar los tiles (“cachitos de gráficos” por llamarlo así), pero en lugar de dibujarlos uno a uno, vamos a importarlos. Vamos a File -> Import Tiles…:

asterixtuto13.png

Tenemos que seleccionar una imagen con los tiles ordenados del stage 0 (“stage-0.png”):

asterixtuto14.png

Estos archivos png de tiles los he generado de una manera extraña y tediosa. También os los puedo proporcionar, tengo de todos los stages y el bonus.

Al darle a abrir, saldrá la ventana de importar. Solo tenemos que cambiar el tamaño de ancho y alto por tile a 16 píxeles, como indico en el círculo rojo, y pulsamos Import:

asterixtuto15.png

De esta manera, recorre la imagen de izquierda a derecha y arriba a abajo, partiendo en trozos de 16x16. Con lo cual como veis en la barra de abajo, se han desglosado correctamente todos los tiles y mantienen el orden correcto de índice que les proporciona el juego:

asterixtuto16.png

- 7 -

Ahora pasamos a “Vista editor de mapa” para editar los mapas de los tiles, en View -> Toggle Tile/Map Editor:

asterixtuto17.png

Creamos un nuevo mapa:

asterixtuto18.png

Dándole esas dimensiones del círculo rojo (144x10 tiles, la dimensión máxima de los mapas del Asterix):

asterixtuto19.png

- 8 -

Nos ha creado un mapa “vacio”. En lugar de pintarlo desde cero, importaremos el mapa ya hecho:

asterixtuto20.png

Concretamente vamos a importar el mapa que hemos sacado del savestate y transformado con “to_editor.exe” (“archivo.bin.out”):

asterixtuto21.png

Le damos a abrir, y sorpresa, la primera pantalla del Asterix:

asterixtuto22.png

- 9 -

Vamos a dibujarle, por ejemplo, unas letras con los bloques de piedra. En la barra de tiles buscamos el bloque de piedra gris, que está un poco más a la derecha del centro. Escribimos con él la palabra EOL encima del mapa como si se tratara del paint:

asterixtuto23.png

Es decir podemos seleccionar cualquier tile de la barra inferior y retocar el mapa. Si pinchamos botón derecho del ratón sobre una posición del mapa, automáticamente nos copia dicho tile para repetirlo. Podemos usar las herramientas de la izquierda, para facilitar el trabajo (seleccionar área para copiar, rellenar un área con el mismo tile, etc.). Es cuestión de ir probando.

- 10 -

En mi caso lo dejaré modificado solo con la palabra EOL escrita con bloques de piedra, así que lo exporto:

asterixtuto24.png

Por ejemplo, llamarlo “mi_mapa.map”:

asterixtuto25.png

Podemos abrirlo con el editor hexadecimal, es decir, lo números que estamos viendo al abrirlo son los índices de cada tile con los que hemos dibujado el mapa. Es decir, no hemos exportado el mapa como imagen, sino como datos, los índices de los “cachitos de imagen” que se utilizan para dibujarlo:

asterixtuto26.png

- 11 -

Ahora tenemos que usar to_emu.exe, para hacer lo contrario de antes:

asterixtuto11.png

Arrastramos “mi_mapa.map” a “to_emu.exe”, y nos creará el archivo “mi_mapa.map.out” que ya es “compatible” con el juego, lo abrimos con el editor hexadecimal:

asterixtuto27.png

- 12 -

Ahora seleccionamos todo el contenido del fichero “mi_mapa.map.out” y lo copiamos al portapapeles:

asterixtuto28.png

- 13 -

Esta parte es tediosa. Tenemos que volver a abrir con el editor el archivo savestate (si lo habíamos cerrado) y volver a seleccionar el área del mapa. En mi caso lo tenía abierto y seleccionado de antes:

asterixtuto29.png

Hay que intentar pegar el bloque que hemos copiado al savestate, sobrescribiendo los valores del mapa en el savestate, y guardamos el savestate:

asterixtuto30.png

Mirar bien si lo hace el editor hexadecimal, porque puede ser que al pegar, en lugar de sobrescribir, pegue el bloque a continuación (no suele pasar, pero si pasa ya no sería valido el savestate). Si nos sucede esto, lo que podemos hacer es borrar todo el bloque del mapa del savestate antes de pegar el mapa modificado.

- 14 -

Una vez guardado el savestate con su nuevo mapa, solo lo cargamos en el emulador. Pero para que se hagan visibles los cambios, debemos movernos por el mapa:

asterixtuto31.png

Cuando vuelvo al punto inicial, vemos que ya se hace visible los cambios del mapa:

asterixtuto32.png

- 15 -

Y ahora podemos hacer lo que queramos con los bloques de piedra, subirnos, romperlos XD:

asterixtuto33.png

Alternativa para no usar "to_editor.exe" y "to_emu.exe"

A continuación voy a explicar una alternativa para importar el mapa directamente del savestate, sin tener que transformarlo con "to_editor.exe". De la misma manera, el mapa resultante exportado se podrá incluir en el savestate sin tener que retransformarlo con "to_emu.exe".

Por lo tanto con esta alternativa nos ahorramos algunos pasos con respecto al tutorial principal.

La idea es cargar el mapa en el orden que marca el juego, es decir, “rellenando” columna por columna. Esto significa que veremos el mapa girado en Tile Studio. Desgraciadamente la pega es que tendremos que modificar el mapa viéndolo girado.

Para seguir los pasos de esta alternativa tenemos que haber llegado al paso -4- del tutorial principal, donde ya hemos obtenido el fichero “archivo.bin” con el mapa obtenido del savestate.

Estos son los pasos:

-1-

En esta variante del tutorial, ya no es necesario usar "to_editor.exe" y "to_emu.exe" para transformar el mapa. Por lo tanto nos basamos directamente del fichero “archivo.bin” que contiene el mapa tal cual se ha obtenido del savestate:

asterixtutoalt09.png

-2-

Ahora abrimos el Tile Studio e importamos los tiles, pero en lugar de abrir el PNG que he colocado al principio del tutorial, usaremos este PNG con los tiles:

Asterix MS Tiles - Stage-0 - Alt.png

Lo importamos al Tile Studio (File -> Import Tiles...) y seleccionamos el tamaño por tile (16x16):

asterixtutoalt10.png

asterixtutoalt11.png

Concretamente son los mismos tiles girados y rotados, pero igualmente se importarán en su orden correcto:

asterixtutoalt12.png

-3-

Ahora pasamos a modo “Vista editor de mapa” (View -> Toggle Tile/Map Editor), y creamos un nuevo mapa (File -> New Map…).

La clave está en este paso. El mapa, en lugar de crearlo de 144 x 10 como antes, lo vamos a crear de 10 x 144:

asterixtutoalt14.png

asterixtutoalt15x.png

Ahora importamos el mapa (Map -> Import Map…), concretamente “archivo.bin” que es el mapa tal cual del savestate sin transformar:

asterixtutoalt16.png

Y una vez importado, veremos el mapa girado 90 grados. Esto es gracias a la transformación que se ha hecho en los tiles importados y por ello podemos ver el mapa correctamente aunque esté girado. El problema como he dicho antes, es que de esta manera es más incomodo modificar el mapa:

asterixtutoalt17.png

asterixtutoalt18.png

-4-

Una vez modificado exportamos el mapa resultante (Map -> Export Map…), por ejemplo, con el nombre “mi_mapa_directo.map”:

asterixtutoalt19.png

Abrimos “mi_mapa_directo.map” con el editor hexadecimal, seleccionamos todo el contenido y lo copiamos:

asterixtutoalt21.png

asterixtutoalt22.png

Y directamente pegamos ese contenido en el área del mapa en el savestate y lo guardamos:

asterixtutoalt23.png

asterixtutoalt24.png

-5-

Finalmente cargamos el savestate y podemos ver los cambios al desplazarnos por la pantalla:

asterixtutoalt25.png

asterixtutoalt26.png

Conclusiones

Pues esto es todo. Aunque es mucho texto no es tanto, es solo mi manera de explicar al detalle.

También decir que solo es para este juego concreto, aunque la idea puede servir para otros juegos usando las mismas herramientas.

Este cambio solo produce modificando el mapa cargado en memoria durante la ejecución del juego, no es ningún RomHack ni nada parecido, con lo cual si me matan o salgo de la escena principal, se vuelve a cargar el original desde la ROM.

Aunque he encontrado una manera de poder colocar los mapas modificados en la propia ROM para hacer permanentes los cambios, pero, aparte de que es más complicado, tengo que estudiarlo con más detenimiento.

La idea principal de este tutorial es pasar un buen rato experimentando con las herramientas que nos ofrece los emuladores para cambiar parámetros del sistema emulado durante la ejecución del juego, no explicar como hackear ROMs.

Si algún valiente ha decidido seguir todos los pasos al detalle y tiene alguna duda, sugerencia, inquietud, que no dude en comunicármelo.

--icecaap 01:07 20 feb 2013 (CET)