tuts_gbc
Thread Id: 9840
Thread Name: [GBC] Expansion de mapas sin conexiones
#0
Riverside 15459
Bueno, aqui una guia sobre como "expandir" mapas. ¿Para que es util expandir mapas? pues bueno, es util para poner mas cosas en un mapa, obviamente. He aqui un ejemplo:



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

En el video pueden ver como el segundo piso de esa casa en New Bark Town se conecta con la parte inferior de la casa de Kris, asi que en vez de crear un nuevo mapa solo para ese cuarto lo que hize fue expandir el mapa de la casa de Kris para tener suficiente espacio como para poner el segundo piso de esa casa.

PARTE 1: EXPANDIR MAPAS SIN CONEXIONES

¿Que son las conexiones? pues pongamoslo de esta manera. Si estas en New Bark Town y caminas hacia la izquierda, llegaras a la Ruta 29, si surfeas a la derecha llegaras a la Ruta 28. Estos son mapas diferentes, pero que se conectan el uno con el otro.

En esta primera parte del tutorial veremos como editar mapas SIN CONEXIONES, por ejemplo la casa de Kris es un mapa sin conexion, porque no hay ningun mapa conectado a el, pero el mapa de New Bark Town tiene conexiones y es un poco mas complicado expandirlo.

Bueno, ¿que cosas necesitas saber?

- Si usas un ROM de Pokemon Gold o Silver entonces simplemente sigue los siguientes pasos:

1.- Abre GoldMap
2.- Abre tu ROM en GoldMap
3.- Selecciona el mapa que quieres expandir
4.- Ve a Tools > Resize Map
5.- Dale la longitud que quieras al mapa y empieza a editar.

- Si usas un ROM de Pokemon Crystal entonces debes tener CrystalMap(Ver "Herramienta: GoldMap y CrystalMap")
- Conocimiento basico sobre pointers (como repointear) (Ver "Tutorial: Pointers")
- Conocimiento sobre el Secondary Map Header (Ver "Headers: Secondary Map Header")

En fin, empezemos con el tutorial propiamente dicho. (Solo para Pokemon Crystal de ahora en adelante, ya que lo de Gold y Silver es bastante simple gracias a GoldMap)

Abre tu CrystalMap, carga tu ROM y abre el mapa "Player's house (Downstairs)" que usare como ejemplo.

Una vez abierto, busca el primer block del mapa y veras en la parte inferior de CrystalMap su localizacion. (X: 0 Y: 0 Block: 07 Offset: AB69B), asegurate de estar en la pestaña "Map" y posicionar tu Raton encima del primer bloque del mapa.

Ahora bien, sabemos que el Offset AB69B es el primer block en Player's Hourse (downstairs), lo que haremos ahora es abrir nuestra calculadora, ponerla en modo "programador", dar click en la pestaña que dice "Hexa" y hallar el 3-byte pointer de AB69B. El 3byte pointer the AB69B es 2A9B76.

Abrimos nuestro editor hex y usamos el modo de busqueda de valores Hex (No offsets, sino hex). Nos dira que el Offset que corresponde a 2A9B76 es el Offset 96557. Este es el [Map data pointer (3-bytes)] el cual es parte del Secondary Map Header. Ahora veamos la estructura del secondary map header:

[Y size (in blocks)][X size (in blocks)][Map data pointer (3-bytes)][Script pointer (2-bytes)][Event data pointer (2-bytes)][Map Connections]

Como vemos, el Map Data Pointer es el 4to valor en el Secondary Map Header, por lo tanto si vamos al Offset 96557 y retrocedemos 3 codigos (recuerden que cada codigo es de 2 valores) llegaremos al Offset 96554, este es el

Bien, ahora sobreescribamos los valores que tenemos en el editor Hex con el Secondary Map Header:

[00] [04] [05] [2A9B76] [1E] [CC64] [316B] [00]

Para comprobar si lo que hemos hecho hasta ahora esta bien, solo basta ver los 2 valores antes del Map Data Pointer, ¿Cuales son? pues la longitud de Y y de X. Segun estos codigos, el valor de Y es 04 Y el valor de X es 05. Recuerden que estos son codigos hex, asi que si tu mapa mide, por ejemplo Y: 07 y X: 20 en decimal, en hex seria Y: 07 y X: 14

Como ven todo es correcto, ¡hasta ahora vamos bien!

Antes de continuar asegurate de apuntar el Offset en donde este el Secondary Map Header de "Player's House (downstairs)" para que no se te pierda. El Bloc de notas es tu mejor amigo.

Bueno, continuando, el siguiente paso es saber cuanto quieres que mida tu mapa. En el caso de Player's house (downstairs) yo calculo que necesitare que mida 10x8 (Y x X) para mi tutorial, asi que voy a cambiar [Y size (in blocks)] (En otras palabras, el [04] por [0A] (0A es 10 en decimal, usa tu calculadora para averiguar la conversion de hexadecimal a decimal) y cambiare [X size (in blocks)] ([05] por [08]). En mi caso el Secondary Map Header de Player's House (Downstairs) quedara asi:

[00] [0A] [08] [2A9B76] [1E] [CC64] [316B] [00]

Bueno, ahora hemos modificado nuestro mapa y mide 10x08... pero aun no acabamos. Si entras a tu mapa modificado veras que es un desastre y es que para que esto funcione bien necesitas repointear todo tu mapa a una nueva ubicacion.

Para repointear, ve al Offset AB69B (¿recuerdas? es el primer Block de Player's House (Downstairs)) y selecciona TODO hasta el Offset AB6AE, luego copialo (Ctrl + V en la mayoria de los casos, incluyendo en iHex, el editor Hex que yo uso) y busca un nuevo lugar en donde pegarlo.

Como el pointer que señala al mapa es de 3-bytes, podemos poner el mapa en cualquier lugar en blanco en el ROM pero asegurate que todos los codigos puedan entrar (y que sobren. No hagas todo a las justas porque quizas en el futuro necesites mas espacio)

En mi caso yo voy a repointear todo hacia el Offset B1B60. Si quieres borra todo lo que hay desde el Offset AB69B hasta AB6AE una vez que hayas pegado todo el mapa en la nueva ubicacion.

Ahora vamos a nuestra calculadora una vez mas y hallemos el 3byte pointer del nuevo Offset en el que vas a repointear todo tu mapa, en mi caso tengo que hallar el 3byte pointer de B1B60, el cual es 2C605B

Ahora volvamos al Secondary Map Header de Player's House (Downstairs) (Offset 96554) y vamos al Map Data Pointer. En vez del 3byte pointer que hay (2A9B76) escribamos el 3-byte pointer a nuestro nuevo mapa, en mi caso tengo que reemplazar 2A9B76 por 2C605B.

¿Lo hiciste? ¡Bien hecho! ¡El mapa aun sigue siendo un desastre!

Aun falta un ultimo detalle. CrystalMap no es tan inutil despues de todo. Ahora que haz hecho todo esto, lo ultimo que te queda por hacer es modificar CrystalMap tu mismo para que reconozca el nuevo Player's House (Downstairs) y para que puedas modificarlo facilmente (porque modificarlo codigo por codigo seria un dolor de cabeza)

Abre tu carpeta en la que esta CrystalMap y busca el Bloc de notas llamado "Maps", una vez ahi busca (Ctrl + B) "Player's House (downstairs)" (sin las ") y veras que dice algo asi

[Player's House (Downstairs)]
Start Offset=$ab69b
X Size=5
Y Size=4
Tileset=7
Comment=-=[Perfectly]=-

¡Cambiemos lo que dice aqui por los valores que hemos puesto en nuestro nuevo mapa!

En mi caso el mapa quedaria asi:

[Player's House (Downstairs)]
Start Offset=$b1b60
X Size=8
Y Size=10
Tileset=7
Comment=-=[Perfectly]=-

En algunos mapas en vez de decir "$(offset)" dice numeros grandes, en decimales y sin comenzar con el simbolo "$", por ejemplo:

[Route27]
Start Offset=701117
X Size=40
Y Size=9
Tileset=1
Comment=-=[Perfectly]=-

Aqui esta usando el Offset en decimal y el programa reconoce perfectamente esto. En otras palabras, convirtiendo 701117 en hex, tenemos que el Offset donde comienza el mapa de la Ruta 27 es $AB2BD, si borramos 701117 y lo reemplazamos por $ab2bd, el programa seguira funcionando sin problemas.

Resultado final: http://www.youtube.com/watch?v=mHTE9cNEjas

ESTA GUIA AUN ESTA INCOMPLETA. AUN FALTA LA GUIA PARA EXPANDIR MAPAS CON CONEXIONES. EN LOS PROXIMOS DIAS SOLUCIONARE UN PROBLEMA QUE SURGIO EN TORNO A ESTO (pensaba que algo se tenia que hacer de cierta forma pero no era asi) Y PODRE TERMINAR LA GUIA, HASTA ENTONCES DISCULPENME.
#1
Chamber4315♪ 26330
Crees que algun dia completes el tutorial?